ose-app 0.2.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. ose_app/AppModule.py +98 -0
  2. ose_app/OntologyDataStore.py +464 -0
  3. ose_app/PermissionManager.py +78 -0
  4. ose_app/SpreadsheetSearcher.py +197 -0
  5. ose_app/__init__.py +130 -0
  6. ose_app/app.py +10 -0
  7. ose_app/constants.py +1 -0
  8. ose_app/custom_json.py +23 -0
  9. ose_app/default_config.py +39 -0
  10. ose_app/gh.py +60 -0
  11. ose_app/guards/__init__.py +0 -0
  12. ose_app/guards/verify_login.py +20 -0
  13. ose_app/guards/with_permission.py +54 -0
  14. ose_app/jinja_extensions/__init__.py +42 -0
  15. ose_app/routes/__init__.py +24 -0
  16. ose_app/routes/admin.py +108 -0
  17. ose_app/routes/api/__init__.py +23 -0
  18. ose_app/routes/api/edit.py +162 -0
  19. ose_app/routes/api/external.py +198 -0
  20. ose_app/routes/api/plugins.py +22 -0
  21. ose_app/routes/api/release.py +380 -0
  22. ose_app/routes/api/repos.py +55 -0
  23. ose_app/routes/api/scripts.py +49 -0
  24. ose_app/routes/api/search.py +19 -0
  25. ose_app/routes/api/settings.py +115 -0
  26. ose_app/routes/api/validate.py +264 -0
  27. ose_app/routes/api/visualise.py +228 -0
  28. ose_app/routes/auth.py +44 -0
  29. ose_app/routes/edit.py +690 -0
  30. ose_app/routes/main.py +100 -0
  31. ose_app/routes/search.py +42 -0
  32. ose_app/routes/status.py +10 -0
  33. ose_app/routes/visualize.py +108 -0
  34. ose_app/static/addicto.release.json +129 -0
  35. ose_app/static/bcio.release.json +321 -0
  36. ose_app/static/example.json +134 -0
  37. ose_app/static/excel-bootstrap-table-filter-bundle.js +326 -0
  38. ose_app/static/excel-bootstrap-table-filter-bundle.js.map +1 -0
  39. ose_app/static/excel-bootstrap-table-filter-bundle.min.js +2 -0
  40. ose_app/static/excel-bootstrap-table-filter-bundle.min.js.map +1 -0
  41. ose_app/static/excel-bootstrap-table-filter-style.css +78 -0
  42. ose_app/static/gmho.release.json +139 -0
  43. ose_app/static/js/admin.js +2 -0
  44. ose_app/static/js/admin.js.map +1 -0
  45. ose_app/static/js/assets/CollapsibleCard.css +1 -0
  46. ose_app/static/js/assets/editor.css +1 -0
  47. ose_app/static/js/assets/release.css +1 -0
  48. ose_app/static/js/assets/settings.css +1 -0
  49. ose_app/static/js/assets/visualise.css +1 -0
  50. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-CgGO-ddH-BDr_frBe.js +2 -0
  51. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-CgGO-ddH-BDr_frBe.js.map +1 -0
  52. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-CgGO-ddH-MonxH8xj.js +2 -0
  53. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-CgGO-ddH-MonxH8xj.js.map +1 -0
  54. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-DKAZyKKr-DTksKjtf.js +2 -0
  55. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-DKAZyKKr-DTksKjtf.js.map +1 -0
  56. ose_app/static/js/chunks/CollapsibleCard-BQR8R54V.js +2 -0
  57. ose_app/static/js/chunks/CollapsibleCard-BQR8R54V.js.map +1 -0
  58. ose_app/static/js/chunks/CollapsibleCard-DgwkQKDg.js +2 -0
  59. ose_app/static/js/chunks/CollapsibleCard-DgwkQKDg.js.map +1 -0
  60. ose_app/static/js/chunks/CollapsibleCard-DoX0kPCZ.js +2 -0
  61. ose_app/static/js/chunks/CollapsibleCard-DoX0kPCZ.js.map +1 -0
  62. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-CBzsmnqW.js +43 -0
  63. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-CBzsmnqW.js.map +1 -0
  64. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-EcINi797.js +43 -0
  65. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-EcINi797.js.map +1 -0
  66. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-bumDOBqD.js +43 -0
  67. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-bumDOBqD.js.map +1 -0
  68. ose_app/static/js/chunks/_plugin-vue_export-helper-DlAUqK2U.js +2 -0
  69. ose_app/static/js/chunks/_plugin-vue_export-helper-DlAUqK2U.js.map +1 -0
  70. ose_app/static/js/chunks/bootbox-D3SJ_Fwv.js +2 -0
  71. ose_app/static/js/chunks/bootbox-D3SJ_Fwv.js.map +1 -0
  72. ose_app/static/js/chunks/constants-CzBHF1EN.js +2 -0
  73. ose_app/static/js/chunks/constants-CzBHF1EN.js.map +1 -0
  74. ose_app/static/js/chunks/constants-DL6Hx3V0.js +2 -0
  75. ose_app/static/js/chunks/constants-DL6Hx3V0.js.map +1 -0
  76. ose_app/static/js/chunks/constants-DPgwRV4l.js +2 -0
  77. ose_app/static/js/chunks/constants-DPgwRV4l.js.map +1 -0
  78. ose_app/static/js/chunks/filter-Bx-PU1OL.js +18 -0
  79. ose_app/static/js/chunks/filter-Bx-PU1OL.js.map +1 -0
  80. ose_app/static/js/chunks/filter-CdAXK93b.js +18 -0
  81. ose_app/static/js/chunks/filter-CdAXK93b.js.map +1 -0
  82. ose_app/static/js/chunks/filter-CiYqP1_r.js +2 -0
  83. ose_app/static/js/chunks/filter-CiYqP1_r.js.map +1 -0
  84. ose_app/static/js/chunks/index-sLCKmIWG-B5BYNF2N.js +2 -0
  85. ose_app/static/js/chunks/index-sLCKmIWG-B5BYNF2N.js.map +1 -0
  86. ose_app/static/js/chunks/index-sLCKmIWG-Cb9lQq-c.js +9 -0
  87. ose_app/static/js/chunks/index-sLCKmIWG-Cb9lQq-c.js.map +1 -0
  88. ose_app/static/js/chunks/index-sLCKmIWG-umQeu_-w.js +3 -0
  89. ose_app/static/js/chunks/index-sLCKmIWG-umQeu_-w.js.map +1 -0
  90. ose_app/static/js/editor.js +36 -0
  91. ose_app/static/js/editor.js.map +1 -0
  92. ose_app/static/js/release.js +6 -0
  93. ose_app/static/js/release.js.map +1 -0
  94. ose_app/static/js/settings.js +2 -0
  95. ose_app/static/js/settings.js.map +1 -0
  96. ose_app/static/js/visualise.js +3 -0
  97. ose_app/static/js/visualise.js.map +1 -0
  98. ose_app/static/main.css +1 -0
  99. ose_app/static/main.css.map +7 -0
  100. ose_app/static/main.scss +147 -0
  101. ose_app/static/mindmup-editabletable.js +131 -0
  102. ose_app/static/schema/release_script.json +215 -0
  103. ose_app/static/schema/req_body_edit.json +35 -0
  104. ose_app/static/schema/req_body_guess_parent.json +38 -0
  105. ose_app/static/schema/req_body_import.json +47 -0
  106. ose_app/static/schema/req_body_release_start.json +9 -0
  107. ose_app/static/schema/req_body_visualise.json +18 -0
  108. ose_app/static/test.dot +190 -0
  109. ose_app/static/workflows/externals.yaml.jinja2 +44 -0
  110. ose_app/templates/access_show_visualisation_for_ids.html +120 -0
  111. ose_app/templates/admin/dashboard.html +18 -0
  112. ose_app/templates/admin/rebuild_index.html +85 -0
  113. ose_app/templates/admin/release.html +46 -0
  114. ose_app/templates/admin/settings.html +23 -0
  115. ose_app/templates/base.html +151 -0
  116. ose_app/templates/edit.html +21 -0
  117. ose_app/templates/edit_external.html +491 -0
  118. ose_app/templates/forbidden.html +9 -0
  119. ose_app/templates/index.html +33 -0
  120. ose_app/templates/loggedout.html +21 -0
  121. ose_app/templates/repo.html +294 -0
  122. ose_app/templates/testgeneratedbyapi.html +294 -0
  123. ose_app/templates/visualise.html +17 -0
  124. ose_app-0.2.5.dist-info/METADATA +27 -0
  125. ose_app-0.2.5.dist-info/RECORD +127 -0
  126. ose_app-0.2.5.dist-info/WHEEL +5 -0
  127. ose_app-0.2.5.dist-info/top_level.txt +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor.js","sources":["../../../../../../node_modules/bootstrap-vue-next/dist/useModalManager-mJhdG47N.mjs","../../../../../../node_modules/bootstrap-vue-next/dist/dom-BK2w00Ec.mjs","../../../../../../node_modules/bootstrap-vue-next/dist/BSpinner.vue_vue_type_script_setup_true_lang-BBcjZkCi.mjs","../../../../../../node_modules/bootstrap-vue-next/dist/BButton.vue_vue_type_script_setup_true_lang-BC0Lfmfc.mjs","../../../../../../node_modules/bootstrap-vue-next/dist/BModalOrchestrator.vue_vue_type_script_setup_true_lang-CwsLFqd0.mjs","../../../../../ose-js-core/src/debounce.ts","../../../../../ose-js-core/src/messages.ts","../../../../../../node_modules/tabulator-tables/dist/js/tabulator_esm.mjs","../../../../../ose-js-app/src/editor/tabulator-config.ts","../../../../../ose-js-app/src/editor/Merger.vue","../../../../../ose-js-app/src/editor/HistoryService.ts","../../../../../ose-js-app/src/common/tabulator-extensions.ts","../../../../../ose-js-app/src/editor/Editor.vue","../../../../../ose-js-app/src/editor/main.ts"],"sourcesContent":["import { g as getSSRHandler, d as unrefElement } from \"./index-Bkyn4R9C.mjs\";\nimport { getCurrentInstance, watch, computed, toValue, inject } from \"vue\";\nimport { a as modalManagerPluginKey } from \"./keys-41Cw9q6f.mjs\";\nimport { b as tryOnScopeDispose } from \"./index-D3jGjWWk.mjs\";\nconst modalOpenClassName = \"modal-open\";\nconst useSharedModalStack = () => {\n const modalManagerPlugin = inject(modalManagerPluginKey);\n const dispose = (modal) => {\n modalManagerPlugin == null ? void 0 : modalManagerPlugin.removeStack(modal);\n modalManagerPlugin == null ? void 0 : modalManagerPlugin.removeRegistry(modal);\n };\n const updateHTMLAttrs = getSSRHandler(\"updateHTMLAttrs\", (selector, attribute, value) => {\n const el = typeof selector === \"string\" ? window == null ? void 0 : window.document.querySelector(selector) : unrefElement(selector);\n if (!el) return;\n if (attribute === \"class\") {\n el.classList.toggle(modalOpenClassName, value === modalOpenClassName);\n } else {\n el.setAttribute(attribute, value);\n }\n });\n tryOnScopeDispose(() => {\n updateHTMLAttrs(\"body\", \"class\", \"\");\n });\n watch(\n () => modalManagerPlugin == null ? void 0 : modalManagerPlugin.countStack.value,\n (newValue) => {\n if (newValue === void 0) return;\n updateHTMLAttrs(\"body\", \"class\", newValue > 0 ? modalOpenClassName : \"\");\n }\n );\n return {\n ...modalManagerPlugin,\n dispose\n };\n};\nconst useModalManager = (modalOpen, initialValue) => {\n const { pushRegistry, pushStack, removeStack, stack, dispose, countStack } = useSharedModalStack();\n const currentModal = getCurrentInstance();\n if (!currentModal || currentModal.type.__name !== \"BModal\") {\n throw new Error(\"useModalManager must only use in BModal component\");\n }\n pushRegistry == null ? void 0 : pushRegistry(currentModal);\n tryOnScopeDispose(() => {\n dispose(currentModal);\n });\n const setInStack = (newValue, oldValue) => {\n if (newValue) {\n pushStack == null ? void 0 : pushStack(currentModal);\n } else if (oldValue && !newValue) {\n removeStack == null ? void 0 : removeStack(currentModal);\n }\n };\n setInStack(initialValue, initialValue);\n watch(modalOpen, setInStack);\n return {\n activePosition: computed(\n () => stack == null ? void 0 : stack.value.findIndex((el) => {\n var _a, _b;\n return toValue((_a = el.exposed) == null ? void 0 : _a.id) === toValue((_b = currentModal.exposed) == null ? void 0 : _b.id);\n })\n ),\n activeModalCount: countStack,\n stackWithoutSelf: computed(\n () => (stack == null ? void 0 : stack.value.filter(\n (el) => {\n var _a, _b;\n return toValue((_a = el.exposed) == null ? void 0 : _a.id) !== toValue((_b = currentModal.exposed) == null ? void 0 : _b.id);\n }\n )) ?? []\n )\n };\n};\nexport {\n useModalManager as a,\n useSharedModalStack as u\n};\n//# sourceMappingURL=useModalManager-mJhdG47N.mjs.map\n","const getActiveElement = (excludes = []) => {\n const { activeElement } = document;\n return activeElement && !(excludes == null ? void 0 : excludes.some((el) => el === activeElement)) ? activeElement : null;\n};\nconst attemptFocus = (el, options = {}) => {\n const isActiveElement = (el2) => el2 === getActiveElement();\n try {\n el.focus(options);\n } catch (e) {\n console.error(e);\n }\n return isActiveElement(el);\n};\nconst isEmptySlot = (el) => ((el == null ? void 0 : el()) ?? []).length === 0;\nconst isVisible = (el) => {\n if (el.getAttribute(\"display\") === \"none\") {\n return false;\n }\n const bcr = el.getBoundingClientRect();\n return !!(bcr && bcr.height > 0 && bcr.width > 0);\n};\nconst sortSlotElementsByPosition = (a, b) => {\n if (typeof Node === \"undefined\" || !Node || !a || !b) return 0;\n const position = a.compareDocumentPosition(b);\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1;\n if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1;\n return 0;\n};\nexport {\n isVisible as a,\n attemptFocus as b,\n getActiveElement as g,\n isEmptySlot as i,\n sortSlotElementsByPosition as s\n};\n//# sourceMappingURL=dom-BK2w00Ec.mjs.map\n","import { defineComponent, useSlots, computed, openBlock, createBlock, resolveDynamicComponent, unref, normalizeClass, withCtx, createElementBlock, renderSlot, createTextVNode, toDisplayString, createCommentVNode } from \"vue\";\nimport { i as isEmptySlot } from \"./dom-BK2w00Ec.mjs\";\nimport { u as useDefaults } from \"./useDefaults-BTLXvYhO.mjs\";\nimport { u as useColorVariantClasses } from \"./useColorVariantClasses-ZDE19TZw.mjs\";\nconst _hoisted_1 = {\n key: 0,\n class: \"visually-hidden\"\n};\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"BSpinner\",\n props: {\n label: { default: void 0 },\n role: { default: \"status\" },\n small: { type: Boolean, default: false },\n tag: { default: \"span\" },\n type: { default: \"border\" },\n variant: { default: null }\n },\n setup(__props) {\n const _props = __props;\n const props = useDefaults(_props, \"BSpinner\");\n const slots = useSlots();\n const colorClasses = useColorVariantClasses(\n computed(() => ({\n textVariant: props.variant\n }))\n );\n const computedClasses = computed(() => [\n `spinner-${props.type}`,\n colorClasses.value,\n {\n [`spinner-${props.type}-sm`]: props.small\n }\n ]);\n const hasLabelSlot = computed(() => !isEmptySlot(slots.label));\n return (_ctx, _cache) => {\n return openBlock(), createBlock(resolveDynamicComponent(unref(props).tag), {\n class: normalizeClass(computedClasses.value),\n role: unref(props).label || hasLabelSlot.value ? unref(props).role : null,\n \"aria-hidden\": unref(props).label || hasLabelSlot.value ? null : true\n }, {\n default: withCtx(() => [\n unref(props).label || hasLabelSlot.value ? (openBlock(), createElementBlock(\"span\", _hoisted_1, [\n renderSlot(_ctx.$slots, \"label\", {}, () => [\n createTextVNode(toDisplayString(unref(props).label), 1)\n ])\n ])) : createCommentVNode(\"\", true)\n ]),\n _: 3\n }, 8, [\"class\", \"role\", \"aria-hidden\"]);\n };\n }\n});\nexport {\n _sfc_main as _\n};\n//# sourceMappingURL=BSpinner.vue_vue_type_script_setup_true_lang-BBcjZkCi.mjs.map\n","import { defineComponent, mergeModels, useTemplateRef, useModel, computed, openBlock, createBlock, resolveDynamicComponent, mergeProps, unref, withCtx, renderSlot, createElementBlock, Fragment, createTextVNode, toDisplayString, createCommentVNode, createVNode } from \"vue\";\nimport { _ as _sfc_main$2 } from \"./BSpinner.vue_vue_type_script_setup_true_lang-BBcjZkCi.mjs\";\nimport { u as useBLinkHelper, a as useLinkClasses, _ as _sfc_main$1 } from \"./BLink.vue_vue_type_script_setup_true_lang-X9oGQtcq.mjs\";\nimport { o as onKeyStroke } from \"./index-Bkyn4R9C.mjs\";\nimport { u as useDefaults } from \"./useDefaults-BTLXvYhO.mjs\";\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"BButton\",\n props: /* @__PURE__ */ mergeModels({\n loading: { type: Boolean, default: false },\n loadingFill: { type: Boolean, default: false },\n loadingText: { default: \"Loading...\" },\n pill: { type: Boolean, default: false },\n size: { default: \"md\" },\n squared: { type: Boolean, default: false },\n tag: { default: \"button\" },\n type: { default: \"button\" },\n variant: { default: \"secondary\" },\n active: { type: Boolean, default: false },\n activeClass: { default: void 0 },\n disabled: { type: Boolean, default: void 0 },\n exactActiveClass: { default: void 0 },\n href: { default: void 0 },\n icon: { type: Boolean, default: false },\n noRel: { type: Boolean },\n opacity: { default: void 0 },\n opacityHover: { default: void 0 },\n prefetch: { type: Boolean },\n prefetchOn: {},\n noPrefetch: { type: Boolean },\n prefetchedClass: {},\n rel: { default: void 0 },\n replace: { type: Boolean, default: void 0 },\n routerComponentName: { default: void 0 },\n routerTag: { default: void 0 },\n stretched: { type: Boolean, default: false },\n target: { default: void 0 },\n to: { default: void 0 },\n underlineOffset: { default: void 0 },\n underlineOffsetHover: { default: void 0 },\n underlineOpacity: { default: void 0 },\n underlineOpacityHover: { default: void 0 },\n underlineVariant: { default: null }\n }, {\n \"pressed\": { type: Boolean, ...{ default: void 0 } },\n \"pressedModifiers\": {}\n }),\n emits: /* @__PURE__ */ mergeModels([\"click\"], [\"update:pressed\"]),\n setup(__props, { emit: __emit }) {\n const _props = __props;\n const props = useDefaults(_props, \"BButton\");\n const emit = __emit;\n const element = useTemplateRef(\"_element\");\n const pressedValue = useModel(__props, \"pressed\");\n const { computedLink, computedLinkProps } = useBLinkHelper(props, [\n \"active-class\",\n \"exact-active-class\",\n \"replace\",\n \"routerComponentName\",\n \"routerTag\"\n ]);\n const isToggle = computed(() => typeof pressedValue.value === \"boolean\");\n const isButton = computed(\n () => props.tag === \"button\" && props.href === void 0 && props.to === void 0\n );\n const isBLink = computed(() => props.to !== void 0);\n const nonStandardTag = computed(() => props.href !== void 0 ? false : !isButton.value);\n const linkProps = computed(() => isBLink.value ? computedLinkProps.value : []);\n const computedAriaDisabled = computed(() => {\n if (props.href === \"#\" && props.disabled) return true;\n return nonStandardTag.value ? props.disabled : null;\n });\n const variantIsLinkType = computed(() => {\n var _a;\n return ((_a = props.variant) == null ? void 0 : _a.startsWith(\"link\")) || false;\n });\n const variantIsLinkTypeSubset = computed(() => {\n var _a;\n return ((_a = props.variant) == null ? void 0 : _a.startsWith(\"link-\")) || false;\n });\n const linkValueClasses = useLinkClasses(\n computed(() => {\n var _a;\n return {\n ...variantIsLinkType.value ? {\n icon: props.icon,\n opacity: props.opacity,\n opacityHover: props.opacityHover,\n underlineOffset: props.underlineOffset,\n underlineOffsetHover: props.underlineOffsetHover,\n underlineOpacity: props.underlineOpacity,\n underlineOpacityHover: props.underlineOpacityHover,\n underlineVariant: props.underlineVariant,\n variant: variantIsLinkTypeSubset.value === true ? (_a = props.variant) == null ? void 0 : _a.slice(5) : null\n } : void 0\n };\n })\n );\n const computedClasses = computed(() => [\n variantIsLinkType.value === true && computedLink.value === false ? linkValueClasses.value : void 0,\n [`btn-${props.size}`],\n {\n [`btn-${props.variant}`]: props.variant !== null && variantIsLinkTypeSubset.value === false,\n \"active\": props.active || pressedValue.value,\n \"rounded-pill\": props.pill,\n \"rounded-0\": props.squared,\n \"disabled\": props.disabled\n }\n ]);\n const computedTag = computed(() => isBLink.value ? _sfc_main$1 : props.href ? \"a\" : props.tag);\n const clicked = (e) => {\n if (props.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n emit(\"click\", e);\n if (isToggle.value) pressedValue.value = !pressedValue.value;\n };\n onKeyStroke(\n [\" \", \"enter\"],\n (e) => {\n var _a;\n if (props.href === \"#\") {\n e.preventDefault();\n (_a = element.value) == null ? void 0 : _a.click();\n }\n },\n { target: element }\n );\n return (_ctx, _cache) => {\n return openBlock(), createBlock(resolveDynamicComponent(computedTag.value), mergeProps({\n ref: \"_element\",\n class: \"btn\"\n }, linkProps.value, {\n class: computedClasses.value,\n \"aria-disabled\": computedAriaDisabled.value,\n \"aria-pressed\": isToggle.value ? pressedValue.value : null,\n autocomplete: isToggle.value ? \"off\" : null,\n disabled: isButton.value ? unref(props).disabled : null,\n href: unref(props).href,\n rel: unref(computedLink) ? unref(props).rel : null,\n role: nonStandardTag.value || unref(computedLink) ? \"button\" : null,\n target: unref(computedLink) ? unref(props).target : null,\n type: isButton.value ? unref(props).type : null,\n to: !isButton.value ? unref(props).to : null,\n onClick: clicked\n }), {\n default: withCtx(() => [\n unref(props).loading ? renderSlot(_ctx.$slots, \"loading\", { key: 0 }, () => [\n !unref(props).loadingFill ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [\n createTextVNode(toDisplayString(unref(props).loadingText), 1)\n ], 64)) : createCommentVNode(\"\", true),\n renderSlot(_ctx.$slots, \"loading-spinner\", {}, () => [\n createVNode(_sfc_main$2, {\n small: unref(props).size !== \"lg\",\n label: unref(props).loadingFill ? unref(props).loadingText : void 0\n }, null, 8, [\"small\", \"label\"])\n ])\n ]) : renderSlot(_ctx.$slots, \"default\", { key: 1 })\n ]),\n _: 3\n }, 16, [\"class\", \"aria-disabled\", \"aria-pressed\", \"autocomplete\", \"disabled\", \"href\", \"rel\", \"role\", \"target\", \"type\", \"to\"]);\n };\n }\n});\nexport {\n _sfc_main as _\n};\n//# sourceMappingURL=BButton.vue_vue_type_script_setup_true_lang-BC0Lfmfc.mjs.map\n","import { defineComponent, mergeModels, useSlots, useModel, useTemplateRef, computed, watch, openBlock, createBlock, unref, withCtx, Transition, mergeProps, withDirectives, createElementVNode, withModifiers, normalizeClass, createElementBlock, renderSlot, normalizeProps, guardReactiveProps, resolveDynamicComponent, createTextVNode, toDisplayString, Fragment, createCommentVNode, createVNode, vShow, normalizeStyle, renderList } from \"vue\";\nimport { u as useDefaults } from \"./useDefaults-BTLXvYhO.mjs\";\nimport { o as onKeyStroke, c as useFocus } from \"./index-Bkyn4R9C.mjs\";\nimport { a as useActivatedFocusTrap, u as useSafeScrollLock } from \"./useSafeScrollLock-DjG0jeMK.mjs\";\nimport { _ as _sfc_main$3 } from \"./BButton.vue_vue_type_script_setup_true_lang-BC0Lfmfc.mjs\";\nimport { _ as _sfc_main$4 } from \"./BCloseButton.vue_vue_type_script_setup_true_lang-B0EXlL9P.mjs\";\nimport { u as useId } from \"./useId-c2wnQbyL.mjs\";\nimport { i as isEmptySlot } from \"./dom-BK2w00Ec.mjs\";\nimport { u as useColorVariantClasses } from \"./useColorVariantClasses-ZDE19TZw.mjs\";\nimport { a as useModalManager } from \"./useModalManager-mJhdG47N.mjs\";\nimport { u as useShowHide } from \"./useShowHide-DPX837gG.mjs\";\nimport { _ as _sfc_main$2 } from \"./ConditionalTeleport.vue_vue_type_script_lang-2PJ2jBTg.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { useModalController } from \"./src/composables/useModalController/index.mjs\";\nconst _hoisted_1 = [\"id\", \"aria-labelledby\", \"aria-describedby\"];\nconst _hoisted_2 = [\"id\"];\nconst fallbackClassSelector = \"modal-fallback-focus\";\nconst defaultModalDialogZIndex = 1056;\nconst _sfc_main$1 = /* @__PURE__ */ defineComponent({\n ...{\n inheritAttrs: false\n },\n __name: \"BModal\",\n props: /* @__PURE__ */ mergeModels({\n autofocus: { type: Boolean, default: true },\n autofocusButton: { default: void 0 },\n backdropFirst: { type: Boolean, default: false },\n body: { default: void 0 },\n bodyAttrs: { default: void 0 },\n bodyBgVariant: { default: null },\n bodyClass: { default: null },\n bodyScrolling: { type: Boolean, default: false },\n bodyTextVariant: { default: null },\n bodyVariant: { default: null },\n busy: { type: Boolean, default: false },\n buttonSize: { default: \"md\" },\n cancelDisabled: { type: Boolean, default: false },\n cancelTitle: { default: \"Cancel\" },\n cancelVariant: { default: \"secondary\" },\n centered: { type: Boolean, default: false },\n contentClass: { default: void 0 },\n dialogClass: { default: void 0 },\n footerBgVariant: { default: null },\n footerBorderVariant: { default: null },\n footerClass: { default: void 0 },\n footerTextVariant: { default: null },\n footerVariant: { default: null },\n fullscreen: { type: [Boolean, String], default: false },\n headerBgVariant: { default: null },\n headerBorderVariant: { default: null },\n headerClass: { default: void 0 },\n headerCloseClass: { default: void 0 },\n headerCloseLabel: { default: \"Close\" },\n headerCloseVariant: { default: \"secondary\" },\n headerTextVariant: { default: null },\n headerVariant: { default: null },\n noBackdrop: { type: Boolean, default: false },\n noFooter: { type: Boolean, default: false },\n noHeader: { type: Boolean, default: false },\n noHeaderClose: { type: Boolean, default: false },\n id: { default: void 0 },\n modalClass: { default: void 0 },\n noCloseOnBackdrop: { type: Boolean, default: false },\n noCloseOnEsc: { type: Boolean, default: false },\n noTrap: { type: Boolean, default: false },\n noStacking: { type: Boolean },\n okDisabled: { type: Boolean, default: false },\n okOnly: { type: Boolean, default: false },\n okTitle: { default: \"OK\" },\n okVariant: { default: \"primary\" },\n scrollable: { type: Boolean, default: false },\n size: { default: \"md\" },\n title: { default: void 0 },\n titleClass: { default: void 0 },\n titleVisuallyHidden: { type: Boolean, default: false },\n titleTag: { default: \"h5\" },\n teleportDisabled: { type: Boolean, default: false },\n teleportTo: { default: \"body\" },\n initialAnimation: { type: Boolean, default: false },\n noAnimation: { type: Boolean },\n noFade: { type: Boolean, default: false },\n lazy: { type: Boolean, default: false },\n unmountLazy: { type: Boolean, default: false },\n show: { type: Boolean, default: false },\n transProps: { default: void 0 },\n visible: { type: Boolean, default: false }\n }, {\n \"modelValue\": { type: Boolean, ...{ default: false } },\n \"modelModifiers\": {}\n }),\n emits: /* @__PURE__ */ mergeModels([\"backdrop\", \"cancel\", \"close\", \"esc\", \"ok\", \"hide\", \"hide-prevented\", \"hidden\", \"show\", \"show-prevented\", \"shown\", \"toggle\", \"toggle-prevented\"], [\"update:modelValue\"]),\n setup(__props, { expose: __expose, emit: __emit }) {\n const _props = __props;\n const props = useDefaults(_props, \"BModal\");\n const emit = __emit;\n const slots = useSlots();\n const computedId = useId(() => props.id, \"modal\");\n const modelValue = useModel(__props, \"modelValue\");\n const element = useTemplateRef(\"_element\");\n const fallbackFocusElement = useTemplateRef(\"_fallbackFocusElement\");\n const okButton = useTemplateRef(\"_okButton\");\n const cancelButton = useTemplateRef(\"_cancelButton\");\n const closeButton = useTemplateRef(\"_closeButton\");\n const pickFocusItem = () => {\n if (props.autofocus === false) return;\n if (props.autofocusButton === \"ok\") {\n okButtonFocus.value = true;\n } else if (props.autofocusButton === \"close\") {\n closeButtonFocus.value = true;\n } else if (props.autofocusButton === \"cancel\") {\n cancelButtonFocus.value = true;\n } else {\n modalFocus.value = true;\n }\n };\n const onAfterEnter = () => {\n pickFocusItem();\n };\n const {\n showRef,\n renderRef,\n renderBackdropRef,\n hide,\n show,\n toggle,\n computedNoAnimation,\n transitionProps,\n backdropTransitionProps,\n isLeaving,\n isVisible,\n trapActive,\n contentShowing,\n backdropReady,\n backdropVisible\n } = useShowHide(modelValue, props, emit, element, computedId, {\n // addShowClass: false,\n transitionProps: {\n onAfterEnter\n }\n });\n const { needsFallback } = useActivatedFocusTrap({\n element,\n isActive: trapActive,\n noTrap: () => props.noTrap,\n fallbackFocus: {\n ref: fallbackFocusElement,\n classSelector: fallbackClassSelector\n }\n });\n onKeyStroke(\n \"Escape\",\n () => {\n hide(\"esc\");\n },\n { target: element }\n );\n useSafeScrollLock(showRef, () => props.bodyScrolling);\n const { focused: modalFocus } = useFocus(element, {\n initialValue: modelValue.value && props.autofocusButton === void 0 && props.autofocus === true\n });\n const { focused: okButtonFocus } = useFocus(okButton, {\n initialValue: modelValue.value && props.autofocusButton === \"ok\" && props.autofocus === true\n });\n const { focused: cancelButtonFocus } = useFocus(cancelButton, {\n initialValue: modelValue.value && props.autofocusButton === \"cancel\" && props.autofocus === true\n });\n const { focused: closeButtonFocus } = useFocus(closeButton, {\n initialValue: modelValue.value && props.autofocusButton === \"close\" && props.autofocus === true\n });\n const hasHeaderCloseSlot = computed(() => !isEmptySlot(slots[\"header-close\"]));\n const modalDialogClasses = computed(() => [\n props.dialogClass,\n {\n \"modal-fullscreen\": props.fullscreen === true,\n [`modal-fullscreen-${props.fullscreen}-down`]: typeof props.fullscreen === \"string\",\n [`modal-${props.size}`]: props.size !== \"md\",\n \"modal-dialog-centered\": props.centered,\n \"modal-dialog-scrollable\": props.scrollable\n }\n ]);\n const bodyColorClasses = useColorVariantClasses(() => ({\n bgVariant: props.bodyBgVariant,\n textVariant: props.bodyTextVariant,\n variant: props.bodyVariant\n }));\n const bodyClasses = computed(() => [props.bodyClass, bodyColorClasses.value]);\n const headerColorClasses = useColorVariantClasses(() => ({\n bgVariant: props.headerBgVariant,\n textVariant: props.headerTextVariant,\n variant: props.headerVariant,\n borderVariant: props.headerBorderVariant\n }));\n const headerClasses = computed(() => [props.headerClass, headerColorClasses.value]);\n const headerCloseAttrs = computed(() => ({\n variant: hasHeaderCloseSlot.value ? props.headerCloseVariant : void 0,\n class: props.headerCloseClass\n }));\n const footerColorClasses = useColorVariantClasses(() => ({\n bgVariant: props.footerBgVariant,\n textVariant: props.footerTextVariant,\n variant: props.footerVariant,\n borderVariant: props.footerBorderVariant\n }));\n const footerClasses = computed(() => [props.footerClass, footerColorClasses.value]);\n const titleClasses = computed(() => [\n props.titleClass,\n {\n [\"visually-hidden\"]: props.titleVisuallyHidden\n }\n ]);\n const disableCancel = computed(() => props.cancelDisabled || props.busy);\n const disableOk = computed(() => props.okDisabled || props.busy);\n const { activePosition, activeModalCount, stackWithoutSelf } = useModalManager(\n showRef,\n modelValue.value\n );\n watch(stackWithoutSelf, (newValue, oldValue) => {\n if (newValue.length > oldValue.length && showRef.value === true && props.noStacking === true)\n hide();\n });\n const computedZIndexNumber = computed(\n () => (\n // Make sure that newly opened modals have a higher z-index than currently active ones.\n // All active modals have a z-index of ('defaultZIndex' - 'stackSize' - 'positionInStack').\n //\n // This means inactive modals will already be higher than active ones when opened.\n showRef.value || isLeaving.value ? (\n // Just for reference there is a single frame in which the modal is not active but still has a higher z-index than the active ones due to _when_ it calculates its position. It's a small visual effect\n defaultModalDialogZIndex - (((activeModalCount == null ? void 0 : activeModalCount.value) ?? 0) * 2 - ((activePosition == null ? void 0 : activePosition.value) ?? 0) * 2)\n ) : defaultModalDialogZIndex\n )\n );\n const computedZIndex = computed(() => ({\n \"z-index\": computedZIndexNumber.value\n }));\n const computedZIndexBackdrop = computed(() => ({\n \"z-index\": computedZIndexNumber.value - 1\n }));\n const sharedSlots = computed(() => ({\n cancel: () => {\n hide(\"cancel\");\n },\n close: () => {\n hide(\"close\");\n },\n hide,\n ok: () => {\n hide(\"ok\");\n },\n active: showRef.value,\n visible: showRef.value\n }));\n __expose({\n hide,\n id: computedId,\n show,\n toggle\n });\n return (_ctx, _cache) => {\n return openBlock(), createBlock(_sfc_main$2, {\n to: unref(props).teleportTo,\n disabled: unref(props).teleportDisabled\n }, {\n default: withCtx(() => [\n unref(renderRef) || unref(contentShowing) ? (openBlock(), createBlock(Transition, mergeProps({ key: 0 }, unref(transitionProps), {\n appear: modelValue.value || unref(props).visible,\n onAfterEnter\n }), {\n default: withCtx(() => [\n withDirectives(createElementVNode(\"div\", mergeProps({\n id: unref(computedId),\n ref: \"_element\",\n class: [\"modal\", [\n unref(props).modalClass,\n {\n fade: !unref(computedNoAnimation),\n show: unref(isVisible)\n }\n ]],\n role: \"dialog\",\n \"aria-labelledby\": !unref(props).noHeader ? `${unref(computedId)}-label` : void 0,\n \"aria-describedby\": `${unref(computedId)}-body`,\n tabindex: \"-1\"\n }, _ctx.$attrs, {\n style: computedZIndex.value,\n onClick: _cache[4] || (_cache[4] = withModifiers(($event) => unref(hide)(\"backdrop\"), [\"self\"]))\n }), [\n createElementVNode(\"div\", {\n class: normalizeClass([\"modal-dialog\", modalDialogClasses.value])\n }, [\n unref(contentShowing) ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n class: normalizeClass([\"modal-content\", unref(props).contentClass])\n }, [\n !unref(props).noHeader ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n class: normalizeClass([\"modal-header\", headerClasses.value])\n }, [\n renderSlot(_ctx.$slots, \"header\", normalizeProps(guardReactiveProps(sharedSlots.value)), () => [\n (openBlock(), createBlock(resolveDynamicComponent(unref(props).titleTag), {\n id: `${unref(computedId)}-label`,\n class: normalizeClass([\"modal-title\", titleClasses.value])\n }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"title\", normalizeProps(guardReactiveProps(sharedSlots.value)), () => [\n createTextVNode(toDisplayString(unref(props).title), 1)\n ], true)\n ]),\n _: 3\n }, 8, [\"id\", \"class\"])),\n !unref(props).noHeaderClose ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [\n hasHeaderCloseSlot.value ? (openBlock(), createBlock(_sfc_main$3, mergeProps({ key: 0 }, headerCloseAttrs.value, {\n onClick: _cache[0] || (_cache[0] = ($event) => unref(hide)(\"close\"))\n }), {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"header-close\", {}, void 0, true)\n ]),\n _: 3\n }, 16)) : (openBlock(), createBlock(_sfc_main$4, mergeProps({\n key: 1,\n \"aria-label\": unref(props).headerCloseLabel\n }, headerCloseAttrs.value, {\n onClick: _cache[1] || (_cache[1] = ($event) => unref(hide)(\"close\"))\n }), null, 16, [\"aria-label\"]))\n ], 64)) : createCommentVNode(\"\", true)\n ], true)\n ], 2)) : createCommentVNode(\"\", true),\n createElementVNode(\"div\", mergeProps({\n id: `${unref(computedId)}-body`,\n class: [\"modal-body\", bodyClasses.value]\n }, unref(props).bodyAttrs), [\n renderSlot(_ctx.$slots, \"default\", normalizeProps(guardReactiveProps(sharedSlots.value)), () => [\n createTextVNode(toDisplayString(unref(props).body), 1)\n ], true)\n ], 16, _hoisted_2),\n !unref(props).noFooter ? (openBlock(), createElementBlock(\"div\", {\n key: 1,\n class: normalizeClass([\"modal-footer\", footerClasses.value])\n }, [\n renderSlot(_ctx.$slots, \"footer\", normalizeProps(guardReactiveProps(sharedSlots.value)), () => [\n renderSlot(_ctx.$slots, \"cancel\", normalizeProps(guardReactiveProps(sharedSlots.value)), () => [\n !unref(props).okOnly ? (openBlock(), createBlock(_sfc_main$3, {\n key: 0,\n ref: \"_cancelButton\",\n disabled: disableCancel.value,\n size: unref(props).buttonSize,\n variant: unref(props).cancelVariant,\n onClick: _cache[2] || (_cache[2] = ($event) => unref(hide)(\"cancel\"))\n }, {\n default: withCtx(() => [\n createTextVNode(toDisplayString(unref(props).cancelTitle), 1)\n ]),\n _: 1\n }, 8, [\"disabled\", \"size\", \"variant\"])) : createCommentVNode(\"\", true)\n ], true),\n renderSlot(_ctx.$slots, \"ok\", normalizeProps(guardReactiveProps(sharedSlots.value)), () => [\n createVNode(_sfc_main$3, {\n ref: \"_okButton\",\n disabled: disableOk.value,\n size: unref(props).buttonSize,\n variant: unref(props).okVariant,\n onClick: _cache[3] || (_cache[3] = ($event) => unref(hide)(\"ok\"))\n }, {\n default: withCtx(() => [\n createTextVNode(toDisplayString(unref(props).okTitle), 1)\n ]),\n _: 1\n }, 8, [\"disabled\", \"size\", \"variant\"])\n ], true)\n ], true)\n ], 2)) : createCommentVNode(\"\", true)\n ], 2)) : createCommentVNode(\"\", true)\n ], 2),\n unref(needsFallback) ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n ref: \"_fallbackFocusElement\",\n class: normalizeClass(fallbackClassSelector),\n tabindex: \"0\",\n style: { \"width\": \"0\", \"height\": \"0\", \"overflow\": \"hidden\" }\n }, null, 512)) : createCommentVNode(\"\", true)\n ], 16, _hoisted_1), [\n [vShow, unref(showRef) && (unref(backdropReady) && unref(props).backdropFirst || !unref(props).backdropFirst)]\n ])\n ]),\n _: 3\n }, 16, [\"appear\"])) : createCommentVNode(\"\", true),\n !unref(props).noBackdrop ? renderSlot(_ctx.$slots, \"backdrop\", normalizeProps(mergeProps({ key: 1 }, sharedSlots.value)), () => [\n unref(renderBackdropRef) ? (openBlock(), createBlock(Transition, normalizeProps(mergeProps({ key: 0 }, unref(backdropTransitionProps))), {\n default: withCtx(() => [\n withDirectives(createElementVNode(\"div\", {\n class: normalizeClass([\"modal-backdrop\", {\n fade: !unref(computedNoAnimation),\n show: unref(backdropVisible) || unref(computedNoAnimation)\n }]),\n style: normalizeStyle(computedZIndexBackdrop.value),\n onClick: _cache[5] || (_cache[5] = ($event) => unref(hide)(\"backdrop\"))\n }, null, 6), [\n [vShow, unref(showRef) || unref(isLeaving) && unref(props).backdropFirst && !unref(computedNoAnimation)]\n ])\n ]),\n _: 1\n }, 16)) : createCommentVNode(\"\", true)\n ], true) : createCommentVNode(\"\", true)\n ]),\n _: 3\n }, 8, [\"to\", \"disabled\"]);\n };\n }\n});\nconst BModal = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"__scopeId\", \"data-v-93972863\"]]);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...{\n inheritAttrs: false\n },\n __name: \"BModalOrchestrator\",\n props: {\n teleportDisabled: { type: Boolean, default: false },\n teleportTo: { default: \"body\" }\n },\n setup(__props, { expose: __expose }) {\n const _props = __props;\n const props = useDefaults(_props, \"BModalOrchestrator\");\n const tools = useModalController();\n __expose({\n ...tools\n });\n return (_ctx, _cache) => {\n return openBlock(), createBlock(_sfc_main$2, {\n to: unref(props).teleportTo,\n disabled: unref(props).teleportDisabled\n }, {\n default: withCtx(() => {\n var _a;\n return [\n createElementVNode(\"div\", mergeProps({ id: \"__BVID__modal-container\" }, _ctx.$attrs), [\n (openBlock(true), createElementBlock(Fragment, null, renderList((_a = unref(tools).modals) == null ? void 0 : _a.value, ([self, modal]) => {\n return openBlock(), createBlock(resolveDynamicComponent(modal.component ?? BModal), mergeProps({\n key: self,\n ref_for: true\n }, modal.props, {\n modelValue: modal.props._modelValue,\n \"onUpdate:modelValue\": [($event) => modal.props._modelValue = $event, ($event) => {\n var _a2, _b;\n return (_b = (_a2 = unref(tools)).leave) == null ? void 0 : _b.call(_a2, self);\n }],\n \"initial-animation\": \"\",\n \"teleport-disabled\": true,\n onHide: (e) => {\n if (modal.props._isConfirm === true) {\n if (e.trigger === \"ok\") {\n modal.props._promise.resolve(true);\n return;\n }\n if (e.trigger === \"cancel\") {\n modal.props._promise.resolve(false);\n return;\n }\n modal.props._promise.resolve(null);\n }\n modal.props._promise.resolve(true);\n },\n onHidden: ($event) => {\n var _a2, _b;\n return (_b = (_a2 = unref(tools)).remove) == null ? void 0 : _b.call(_a2, self);\n }\n }), null, 16, [\"modelValue\", \"onUpdate:modelValue\", \"onHide\", \"onHidden\"]);\n }), 128))\n ], 16)\n ];\n }),\n _: 1\n }, 8, [\"to\", \"disabled\"]);\n };\n }\n});\nexport {\n BModal as B,\n _sfc_main as _\n};\n//# sourceMappingURL=BModalOrchestrator.vue_vue_type_script_setup_true_lang-CwsLFqd0.mjs.map\n","export function debounce<U extends unknown[], R>(func: (...args: U) => (R | Promise<R>), timeout: number = 100): (...args: U) => Promise<R> {\n let timer: number;\n return (...args: U) => {\n clearTimeout(timer);\n return new Promise(resolve => {\n timer = setTimeout(() => {\n const r = func.apply(undefined, args);\n if (r instanceof Promise) {\n r.then(resolve);\n } else {\n resolve(r);\n }\n }, timeout);\n })\n };\n}\n","export interface NavigateToSheetMessage {\n type: \"navigateToSheet\";\n repo: string;\n sheet: string;\n filter: { [key: string]: string };\n}\n\nexport function isNavigateToSheetMessage(msg: any): msg is NavigateToSheetMessage {\n return (\n msg &&\n msg.type === \"navigateToSheet\" &&\n typeof msg.repo === \"string\" &&\n typeof msg.sheet === \"string\" &&\n typeof msg.filter === \"object\"\n );\n}\n\nexport interface NavigateToTermMessage {\n type: \"navigateToTerm\";\n repo: string;\n sheet: string;\n termID?: string;\n termLabel?: string;\n};\n\nexport function isNavigateToTermMessage(msg: any): msg is NavigateToTermMessage {\n return (\n msg &&\n msg.type === \"navigateToTerm\" &&\n typeof msg.repo === \"string\" &&\n typeof msg.sheet === \"string\" &&\n (typeof msg.termId === \"string\" || typeof msg.termLabel === \"string\")\n );\n}\n\nexport interface FocusWindowMessage {\n type: \"focusEditor\";\n}\n\nexport function isFocusWindowMessage(msg: any): msg is FocusWindowMessage {\n return msg && msg.type === \"focusEditor\";\n}\n\nexport interface ScrollToRowMessage {\n type: \"scrollToRow\";\n position: number;\n}\n\nexport function isScrollToRowMessage(msg: any): msg is ScrollToRowMessage {\n return (\n msg &&\n msg.type === \"scrollToRow\" &&\n typeof msg.position === \"number\"\n );\n}\n\nexport type EditorMessage = NavigateToSheetMessage | FocusWindowMessage | ScrollToRowMessage;","/* Tabulator v6.3.1 (c) Oliver Folkerd 2025 */\nclass CoreFeature{\n\n\tconstructor(table){\n\t\tthis.table = table;\n\t}\n\n\t//////////////////////////////////////////\n\t/////////////// DataLoad /////////////////\n\t//////////////////////////////////////////\n\n\treloadData(data, silent, columnsChanged){\n\t\treturn this.table.dataLoader.load(data, undefined, undefined, undefined, silent, columnsChanged);\n\t}\n\n\t//////////////////////////////////////////\n\t///////////// Localization ///////////////\n\t//////////////////////////////////////////\n\n\tlangText(){\n\t\treturn this.table.modules.localize.getText(...arguments);\n\t}\n\n\tlangBind(){\n\t\treturn this.table.modules.localize.bind(...arguments);\n\t}\n\n\tlangLocale(){\n\t\treturn this.table.modules.localize.getLocale(...arguments);\n\t}\n\n\n\t//////////////////////////////////////////\n\t////////// Inter Table Comms /////////////\n\t//////////////////////////////////////////\n\n\tcommsConnections(){\n\t\treturn this.table.modules.comms.getConnections(...arguments);\n\t}\n\n\tcommsSend(){\n\t\treturn this.table.modules.comms.send(...arguments);\n\t}\n\n\t//////////////////////////////////////////\n\t//////////////// Layout /////////////////\n\t//////////////////////////////////////////\n\n\tlayoutMode(){\n\t\treturn this.table.modules.layout.getMode();\n\t}\n\n\tlayoutRefresh(force){\n\t\treturn this.table.modules.layout.layout(force);\n\t}\n\n\n\t//////////////////////////////////////////\n\t/////////////// Event Bus ////////////////\n\t//////////////////////////////////////////\n\n\tsubscribe(){\n\t\treturn this.table.eventBus.subscribe(...arguments);\n\t}\n\n\tunsubscribe(){\n\t\treturn this.table.eventBus.unsubscribe(...arguments);\n\t}\n\n\tsubscribed(key){\n\t\treturn this.table.eventBus.subscribed(key);\n\t}\n\n\tsubscriptionChange(){\n\t\treturn this.table.eventBus.subscriptionChange(...arguments);\n\t}\n\n\tdispatch(){\n\t\treturn this.table.eventBus.dispatch(...arguments);\n\t}\n\n\tchain(){\n\t\treturn this.table.eventBus.chain(...arguments);\n\t}\n\n\tconfirm(){\n\t\treturn this.table.eventBus.confirm(...arguments);\n\t}\n\n\tdispatchExternal(){\n\t\treturn this.table.externalEvents.dispatch(...arguments);\n\t}\n\n\tsubscribedExternal(key){\n\t\treturn this.table.externalEvents.subscribed(key);\n\t}\n\n\tsubscriptionChangeExternal(){\n\t\treturn this.table.externalEvents.subscriptionChange(...arguments);\n\t}\n\n\t//////////////////////////////////////////\n\t//////////////// Options /////////////////\n\t//////////////////////////////////////////\n\n\toptions(key){\n\t\treturn this.table.options[key];\n\t}\n\n\tsetOption(key, value){\n\t\tif(typeof value !== \"undefined\"){\n\t\t\tthis.table.options[key] = value;\n\t\t}\n\n\t\treturn this.table.options[key];\n\t}\n\n\t//////////////////////////////////////////\n\t/////////// Deprecation Checks ///////////\n\t//////////////////////////////////////////\n\n\tdeprecationCheck(oldOption, newOption, convert){\n\t\treturn this.table.deprecationAdvisor.check(oldOption, newOption, convert);\n\t}\n\n\tdeprecationCheckMsg(oldOption, msg){\n\t\treturn this.table.deprecationAdvisor.checkMsg(oldOption, msg);\n\t}\n\n\tdeprecationMsg(msg){\n\t\treturn this.table.deprecationAdvisor.msg(msg);\n\t}\n\t//////////////////////////////////////////\n\t//////////////// Modules /////////////////\n\t//////////////////////////////////////////\n\n\tmodule(key){\n\t\treturn this.table.module(key);\n\t}\n}\n\nclass Helpers{\n\n\tstatic elVisible(el){\n\t\treturn !(el.offsetWidth <= 0 && el.offsetHeight <= 0);\n\t}\n\n\tstatic elOffset(el){\n\t\tvar box = el.getBoundingClientRect();\n\n\t\treturn {\n\t\t\ttop: box.top + window.pageYOffset - document.documentElement.clientTop,\n\t\t\tleft: box.left + window.pageXOffset - document.documentElement.clientLeft\n\t\t};\n\t}\n\n\tstatic retrieveNestedData(separator, field, data){\n\t\tvar structure = separator ? field.split(separator) : [field],\n\t\tlength = structure.length,\n\t\toutput;\n\n\t\tfor(let i = 0; i < length; i++){\n\n\t\t\tdata = data[structure[i]];\n\n\t\t\toutput = data;\n\n\t\t\tif(!data){\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tstatic deepClone(obj, clone, list = []){\n\t\tvar objectProto = {}.__proto__,\n\t\tarrayProto = [].__proto__;\n\n\t\tif (!clone){\n\t\t\tclone = Object.assign(Array.isArray(obj) ? [] : {}, obj);\n\t\t}\n\n\t\tfor(var i in obj) {\n\t\t\tlet subject = obj[i],\n\t\t\tmatch, copy;\n\n\t\t\tif(subject != null && typeof subject === \"object\" && (subject.__proto__ === objectProto || subject.__proto__ === arrayProto)){\n\t\t\t\tmatch = list.findIndex((item) => {\n\t\t\t\t\treturn item.subject === subject;\n\t\t\t\t});\n\n\t\t\t\tif(match > -1){\n\t\t\t\t\tclone[i] = list[match].copy;\n\t\t\t\t}else {\n\t\t\t\t\tcopy = Object.assign(Array.isArray(subject) ? [] : {}, subject);\n\n\t\t\t\t\tlist.unshift({subject, copy});\n\n\t\t\t\t\tclone[i] = this.deepClone(subject, copy, list);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn clone;\n\t}\n}\n\nlet Popup$1 = 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\tlet offsetHeight = Math.max(this.container.offsetHeight, scrollTop ? this.container.scrollHeight : 0);\n\t\tif((y + this.element.offsetHeight) > offsetHeight) {\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.height = 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};\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$1(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\nvar defaultAccessors = {\r\n\trownum:function(value, data, type, params, column, row){\r\n\t\treturn row.getPosition();\r\n\t}\r\n};\n\nclass Accessor extends Module{\n\t\n\tstatic moduleName = \"accessor\";\n\n\t//load defaults\n\tstatic accessors = defaultAccessors;\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\nvar defaultConfig = {\n\tmethod: \"GET\",\n};\n\nfunction generateParamsList$1(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$1(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$1(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$1(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\nfunction urlBuilder(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}\n\nfunction defaultLoaderPromise(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}\n\nfunction 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\nvar defaultContentTypeFormatters = {\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};\n\nclass Ajax extends Module{\n\n\tstatic moduleName = \"ajax\";\n\n\t//load defaults\n\tstatic defaultConfig = defaultConfig;\n\tstatic defaultURLGenerator = urlBuilder;\n\tstatic defaultLoaderPromise = defaultLoaderPromise;\n\tstatic contentTypeFormatters = defaultContentTypeFormatters;\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.config = {}; //hold config object for ajax request\n\t\tthis.url = \"\"; //request URL\n\t\tthis.urlGenerator = false;\n\t\tthis.params = false; //request parameters\n\t\t\n\t\tthis.loaderPromise = false;\n\t\t\n\t\tthis.registerTableOption(\"ajaxURL\", false); //url for ajax loading\n\t\tthis.registerTableOption(\"ajaxURLGenerator\", false);\n\t\tthis.registerTableOption(\"ajaxParams\", {}); //params for ajax loading\n\t\tthis.registerTableOption(\"ajaxConfig\", \"get\"); //ajax request type\n\t\tthis.registerTableOption(\"ajaxContentType\", \"form\"); //ajax request type\n\t\tthis.registerTableOption(\"ajaxRequestFunc\", false); //promise function\n\t\t\n\t\tthis.registerTableOption(\"ajaxRequesting\", function(){});\n\t\tthis.registerTableOption(\"ajaxResponse\", false);\n\t\t\n\t\tthis.contentTypeFormatters = Ajax.contentTypeFormatters;\n\t}\n\t\n\t//initialize setup options\n\tinitialize(){\n\t\tthis.loaderPromise = this.table.options.ajaxRequestFunc || Ajax.defaultLoaderPromise;\n\t\tthis.urlGenerator = this.table.options.ajaxURLGenerator || Ajax.defaultURLGenerator;\n\t\t\n\t\tif(this.table.options.ajaxURL){\n\t\t\tthis.setUrl(this.table.options.ajaxURL);\n\t\t}\n\n\n\t\tthis.setDefaultConfig(this.table.options.ajaxConfig);\n\t\t\n\t\tthis.registerTableFunction(\"getAjaxUrl\", this.getUrl.bind(this));\n\t\t\n\t\tthis.subscribe(\"data-loading\", this.requestDataCheck.bind(this));\n\t\tthis.subscribe(\"data-params\", this.requestParams.bind(this));\n\t\tthis.subscribe(\"data-load\", this.requestData.bind(this));\n\t}\n\t\n\trequestParams(data, config, silent, params){\n\t\tvar ajaxParams = this.table.options.ajaxParams;\n\t\t\n\t\tif(ajaxParams){\n\t\t\tif(typeof ajaxParams === \"function\"){\n\t\t\t\tajaxParams = ajaxParams.call(this.table);\n\t\t\t}\n\t\t\t\n\t\t\tparams = Object.assign(Object.assign({}, ajaxParams), params);\n\t\t}\t\t\n\t\t\n\t\treturn params;\n\t}\n\t\n\trequestDataCheck(data, params, config, silent){\n\t\treturn !!((!data && this.url) || typeof data === \"string\");\n\t}\n\t\n\trequestData(url, params, config, silent, previousData){\n\t\tvar ajaxConfig;\n\t\t\n\t\tif(!previousData && this.requestDataCheck(url)){\n\t\t\tif(url){\n\t\t\t\tthis.setUrl(url);\n\t\t\t}\n\t\t\t\n\t\t\tajaxConfig = this.generateConfig(config);\n\t\t\t\n\t\t\treturn this.sendRequest(this.url, params, ajaxConfig);\n\t\t}else {\n\t\t\treturn previousData;\n\t\t}\n\t}\n\t\n\tsetDefaultConfig(config = {}){\n\t\tthis.config = Object.assign({}, Ajax.defaultConfig);\n\n\t\tif(typeof config == \"string\"){\n\t\t\tthis.config.method = config;\n\t\t}else {\n\t\t\tObject.assign(this.config, config);\n\t\t}\n\t}\n\t\n\t//load config object\n\tgenerateConfig(config = {}){\n\t\tvar ajaxConfig = Object.assign({}, this.config);\n\t\t\n\t\tif(typeof config == \"string\"){\n\t\t\tajaxConfig.method = config;\n\t\t}else {\n\t\t\tObject.assign(ajaxConfig, config);\n\t\t}\n\t\t\n\t\treturn ajaxConfig;\n\t}\n\t\n\t//set request url\n\tsetUrl(url){\n\t\tthis.url = url;\n\t}\n\t\n\t//get request url\n\tgetUrl(){\n\t\treturn this.url;\n\t}\n\t\n\t//send ajax request\n\tsendRequest(url, params, config){\n\t\tif(this.table.options.ajaxRequesting.call(this.table, url, params) !== false){\n\t\t\treturn this.loaderPromise(url, config, params)\n\t\t\t\t.then((data)=>{\n\t\t\t\t\tif(this.table.options.ajaxResponse){\n\t\t\t\t\t\tdata = this.table.options.ajaxResponse.call(this.table, url, params, data);\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\treturn data;\n\t\t\t\t});\n\t\t}else {\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n}\n\nvar defaultPasteActions = {\n\treplace:function(data){\n\t\treturn this.table.setData(data);\n\t},\n\tupdate:function(data){\n\t\treturn this.table.updateOrAddData(data);\n\t},\n\tinsert:function(data){\n\t\treturn this.table.addData(data);\n\t},\n};\n\nvar defaultPasteParsers = {\n\ttable:function(clipboard){\n\t\tvar data = [],\n\t\theaderFindSuccess = true,\n\t\tcolumns = this.table.columnManager.columns,\n\t\tcolumnMap = [],\n\t\trows = [];\n\t\t\n\t\t//get data from clipboard into array of columns and rows.\n\t\tclipboard = clipboard.split(\"\\n\");\n\t\t\n\t\tclipboard.forEach(function(row){\n\t\t\tdata.push(row.split(\"\\t\"));\n\t\t});\n\t\t\n\t\tif(data.length && !(data.length === 1 && data[0].length < 2)){\n\t\t\t\n\t\t\t//check if headers are present by title\n\t\t\tdata[0].forEach(function(value){\n\t\t\t\tvar column = columns.find(function(column){\n\t\t\t\t\treturn value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(column){\n\t\t\t\t\tcolumnMap.push(column);\n\t\t\t\t}else {\n\t\t\t\t\theaderFindSuccess = false;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t//check if column headers are present by field\n\t\t\tif(!headerFindSuccess){\n\t\t\t\theaderFindSuccess = true;\n\t\t\t\tcolumnMap = [];\n\t\t\t\t\n\t\t\t\tdata[0].forEach(function(value){\n\t\t\t\t\tvar column = columns.find(function(column){\n\t\t\t\t\t\treturn value && column.field && value.trim() && column.field.trim() === value.trim();\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(column){\n\t\t\t\t\t\tcolumnMap.push(column);\n\t\t\t\t\t}else {\n\t\t\t\t\t\theaderFindSuccess = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(!headerFindSuccess){\n\t\t\t\t\tcolumnMap = this.table.columnManager.columnsByIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t//remove header row if found\n\t\t\tif(headerFindSuccess){\n\t\t\t\tdata.shift();\n\t\t\t}\n\t\t\t\n\t\t\tdata.forEach(function(item){\n\t\t\t\tvar row = {};\n\t\t\t\t\n\t\t\t\titem.forEach(function(value, i){\n\t\t\t\t\tif(columnMap[i]){\n\t\t\t\t\t\trow[columnMap[i].field] = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\trows.push(row);\n\t\t\t});\n\t\t\t\n\t\t\treturn rows;\n\t\t}else {\n\t\t\treturn false;\n\t\t}\n\t},\n};\n\nvar bindings$2 = {\r\n\tcopyToClipboard:[\"ctrl + 67\", \"meta + 67\"],\r\n};\n\nvar actions$2 = {\r\n\tcopyToClipboard:function(e){\r\n\t\tif(!this.table.modules.edit.currentCell){\r\n\t\t\tif(this.table.modExists(\"clipboard\", true)){\r\n\t\t\t\tthis.table.modules.clipboard.copy(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\n\nvar extensions$4 = {\r\n\tkeybindings:{\r\n\t\tbindings:bindings$2,\r\n\t\tactions:actions$2\r\n\t},\r\n};\n\nclass Clipboard extends Module{\n\n\tstatic moduleName = \"clipboard\";\n\tstatic moduleExtensions = extensions$4;\n\n\t//load defaults\n\tstatic pasteActions = defaultPasteActions;\n\tstatic pasteParsers = defaultPasteParsers;\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.mode = true;\n\t\tthis.pasteParser = function(){};\n\t\tthis.pasteAction = function(){};\n\t\tthis.customSelection = false;\n\t\tthis.rowRange = false;\n\t\tthis.blocked = true; //block copy actions not originating from this command\n\n\t\tthis.registerTableOption(\"clipboard\", false); //enable clipboard\n\t\tthis.registerTableOption(\"clipboardCopyStyled\", true); //formatted table data\n\t\tthis.registerTableOption(\"clipboardCopyConfig\", false); //clipboard config\n\t\tthis.registerTableOption(\"clipboardCopyFormatter\", false); //DEPRECATED - REMOVE in 5.0\n\t\tthis.registerTableOption(\"clipboardCopyRowRange\", \"active\"); //restrict clipboard to visible rows only\n\t\tthis.registerTableOption(\"clipboardPasteParser\", \"table\"); //convert pasted clipboard data to rows\n\t\tthis.registerTableOption(\"clipboardPasteAction\", \"insert\"); //how to insert pasted data into the table\n\n\t\tthis.registerColumnOption(\"clipboard\");\n\t\tthis.registerColumnOption(\"titleClipboard\");\n\t}\n\n\tinitialize(){\n\t\tthis.mode = this.table.options.clipboard;\n\n\t\tthis.rowRange = this.table.options.clipboardCopyRowRange;\n\n\t\tif(this.mode === true || this.mode === \"copy\"){\n\t\t\tthis.table.element.addEventListener(\"copy\", (e) => {\n\t\t\t\tvar plain, html, list;\n\n\t\t\t\tif(!this.blocked){\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif(this.customSelection){\n\t\t\t\t\t\tplain = this.customSelection;\n\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else {\n\n\t\t\t\t\t\tlist = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, \"clipboard\");\n\n\t\t\t\t\t\thtml = this.table.modules.export.generateHTMLTable(list);\n\t\t\t\t\t\tplain = html ? this.generatePlainContent(list) : \"\";\n\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\n\t\t\t\t\t\t\thtml = this.table.options.clipboardCopyFormatter(\"html\", html);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (window.clipboardData && window.clipboardData.setData) {\n\t\t\t\t\t\twindow.clipboardData.setData('Text', plain);\n\t\t\t\t\t} else if (e.clipboardData && e.clipboardData.setData) {\n\t\t\t\t\t\te.clipboardData.setData('text/plain', plain);\n\t\t\t\t\t\tif(html){\n\t\t\t\t\t\t\te.clipboardData.setData('text/html', html);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.setData) {\n\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/plain', plain);\n\t\t\t\t\t\tif(html){\n\t\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/html', html);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchExternal(\"clipboardCopied\", plain, html);\n\n\t\t\t\t\tthis.reset();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif(this.mode === true || this.mode === \"paste\"){\n\t\t\tthis.table.element.addEventListener(\"paste\", (e) => {\n\t\t\t\tthis.paste(e);\n\t\t\t});\n\t\t}\n\n\t\tthis.setPasteParser(this.table.options.clipboardPasteParser);\n\t\tthis.setPasteAction(this.table.options.clipboardPasteAction);\n\n\t\tthis.registerTableFunction(\"copyToClipboard\", this.copy.bind(this));\n\t}\n\n\treset(){\n\t\tthis.blocked = true;\n\t\tthis.customSelection = false;\n\t}\n\n\tgeneratePlainContent (list) {\n\t\tvar output = [];\n\n\t\tlist.forEach((row) => {\n\t\t\tvar rowData = [];\n\n\t\t\trow.columns.forEach((col) => {\n\t\t\t\tvar value = \"\";\n\n\t\t\t\tif(col){\n\n\t\t\t\t\tif(row.type === \"group\"){\n\t\t\t\t\t\tcol.value = col.component.getKey();\n\t\t\t\t\t}\n\n\t\t\t\t\tif(col.value === null){\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t}else {\n\t\t\t\t\t\tswitch(typeof col.value){\n\t\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\t\tvalue = JSON.stringify(col.value);\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tvalue = col.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\trowData.push(value);\n\t\t\t});\n\n\t\t\toutput.push(rowData.join(\"\\t\"));\n\t\t});\n\n\t\treturn output.join(\"\\n\");\n\t}\n\n\tcopy (range, internal) {\n\t\tvar sel, textRange;\n\t\tthis.blocked = false;\n\t\tthis.customSelection = false;\n\t\n\n\t\tif (this.mode === true || this.mode === \"copy\") {\n\n\t\t\tthis.rowRange = range || this.table.options.clipboardCopyRowRange;\n\n\t\t\tif (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\n\t\t\t\trange = document.createRange();\n\t\t\t\trange.selectNodeContents(this.table.element);\n\t\t\t\tsel = window.getSelection();\n\n\t\t\t\tif (sel.toString() && internal) {\n\t\t\t\t\tthis.customSelection = sel.toString();\n\t\t\t\t}\n\n\t\t\t\tsel.removeAllRanges();\n\t\t\t\tsel.addRange(range);\n\t\t\t} else if (typeof document.selection != \"undefined\" && typeof document.body.createTextRange != \"undefined\") {\n\t\t\t\ttextRange = document.body.createTextRange();\n\t\t\t\ttextRange.moveToElementText(this.table.element);\n\t\t\t\ttextRange.select();\n\t\t\t}\n\n\t\t\tdocument.execCommand('copy');\n\n\t\t\tif (sel) {\n\t\t\t\tsel.removeAllRanges();\n\t\t\t}\n\t\t}\n\t}\n\n\t//PASTE EVENT HANDLING\n\tsetPasteAction(action){\n\n\t\tswitch(typeof action){\n\t\t\tcase \"string\":\n\t\t\t\tthis.pasteAction = Clipboard.pasteActions[action];\n\n\t\t\t\tif(!this.pasteAction){\n\t\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tthis.pasteAction = action;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tsetPasteParser(parser){\n\t\tswitch(typeof parser){\n\t\t\tcase \"string\":\n\t\t\t\tthis.pasteParser = Clipboard.pasteParsers[parser];\n\n\t\t\t\tif(!this.pasteParser){\n\t\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tthis.pasteParser = parser;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tpaste(e){\n\t\tvar data, rowData, rows;\n\n\t\tif(this.checkPasteOrigin(e)){\n\n\t\t\tdata = this.getPasteData(e);\n\n\t\t\trowData = this.pasteParser.call(this, data);\n\n\t\t\tif(rowData){\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif(this.table.modExists(\"mutator\")){\n\t\t\t\t\trowData = this.mutateData(rowData);\n\t\t\t\t}\n\n\t\t\t\trows = this.pasteAction.call(this, rowData);\n\n\t\t\t\tthis.dispatchExternal(\"clipboardPasted\", data, rowData, rows);\n\t\t\t}else {\n\t\t\t\tthis.dispatchExternal(\"clipboardPasteError\", data);\n\t\t\t}\n\t\t}\n\t}\n\n\tmutateData(data){\n\t\tvar output = [];\n\n\t\tif(Array.isArray(data)){\n\t\t\tdata.forEach((row) => {\n\t\t\t\toutput.push(this.table.modules.mutator.transformRow(row, \"clipboard\"));\n\t\t\t});\n\t\t}else {\n\t\t\toutput = data;\n\t\t}\n\n\t\treturn output;\n\t}\n\n\n\tcheckPasteOrigin(e){\n\t\tvar valid = true;\n\t\tvar blocked = this.confirm(\"clipboard-paste\", [e]);\n\n\t\tif(blocked || ![\"DIV\", \"SPAN\"].includes(e.target.tagName)){\n\t\t\tvalid = false;\n\t\t}\n\n\t\treturn valid;\n\t}\n\n\tgetPasteData(e){\n\t\tvar data;\n\n\t\tif (window.clipboardData && window.clipboardData.getData) {\n\t\t\tdata = window.clipboardData.getData('Text');\n\t\t} else if (e.clipboardData && e.clipboardData.getData) {\n\t\t\tdata = e.clipboardData.getData('text/plain');\n\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.getData) {\n\t\t\tdata = e.originalEvent.clipboardData.getData('text/plain');\n\t\t}\n\n\t\treturn data;\n\t}\n}\n\nclass 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\n//public cell object\nclass 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}\n\nclass 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\n\t\tif(this.column.isRowHeader){\n\t\t\tthis.element.classList.add(\"tabulator-row-header\");\n\t\t}\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\n//public column object\nclass 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.getParentComponent();\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}\n\nvar defaultColumnOptions = {\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};\n\nclass Column extends CoreFeature{\n\t\n\tstatic defaultOptionList = defaultColumnOptions;\n\t\n\tconstructor(def, parent, rowHeader){\n\t\tsuper(parent.table);\n\t\t\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.isGroup = false;\n\t\tthis.isRowHeader = rowHeader;\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.hozAlign = \"\"; //horizontal text alignment\n\t\tthis.vertAlign = \"\"; //vert text alignment\n\t\t\n\t\t//multi dimensional filed handling\n\t\tthis.field =\"\";\n\t\tthis.fieldStructure = \"\";\n\t\tthis.getFieldValue = \"\";\n\t\tthis.setFieldValue = \"\";\n\t\t\n\t\tthis.titleDownload = null;\n\t\tthis.titleFormatterRendered = false;\n\t\t\n\t\tthis.mapDefinitions();\n\t\t\n\t\tthis.setField(this.definition.field);\n\t\t\n\t\tthis.modules = {}; //hold module variables;\n\t\t\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\t\t\n\t\tthis.visible = true; //default visible state\n\t\t\n\t\tthis.component = null;\n\t\t\n\t\t//initialize column\n\t\tif(this.definition.columns){\n\t\t\t\n\t\t\tthis.isGroup = true;\n\t\t\t\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\t\t\t\n\t\t\tthis.checkColumnVisibility();\n\t\t}else {\n\t\t\tparent.registerColumnField(this);\n\t\t}\n\t\t\n\t\tthis._initialize();\n\t}\n\t\n\tcreateElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-col\");\n\t\tel.setAttribute(\"role\", \"columnheader\");\n\t\tel.setAttribute(\"aria-sort\", \"none\");\n\n\t\tif(this.isRowHeader){\n\t\t\tel.classList.add(\"tabulator-row-header\");\n\t\t}\n\t\t\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\t\t\n\t\treturn el;\n\t}\n\t\n\tcreateGroupElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-col-group-cols\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tmapDefinitions(){\n\t\tvar defaults = this.table.options.columnDefaults;\n\t\t\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\t\t\n\t\tthis.definition = this.table.columnManager.optionsList.generate(Column.defaultOptionList, this.definition);\n\t}\n\t\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\t\n\t//register column position with column manager\n\tregisterColumnPosition(column){\n\t\tthis.parent.registerColumnPosition(column);\n\t}\n\t\n\t//register column position with column manager\n\tregisterColumnField(column){\n\t\tthis.parent.registerColumnField(column);\n\t}\n\t\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\t\n\t//build header element\n\t_initialize(){\n\t\tvar def = this.definition;\n\t\t\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\t\t\n\t\tif(def.headerVertical){\n\t\t\tthis.element.classList.add(\"tabulator-col-vertical\");\n\t\t\t\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\t\t\n\t\tthis.contentElement = this._buildColumnHeaderContent();\n\t\t\n\t\tthis.element.appendChild(this.contentElement);\n\t\t\n\t\tif(this.isGroup){\n\t\t\tthis._buildGroupHeader();\n\t\t}else {\n\t\t\tthis._buildColumnHeader();\n\t\t}\n\t\t\n\t\tthis.dispatch(\"column-init\", this);\n\t}\n\t\n\t//build header element for header\n\t_buildColumnHeader(){\n\t\tvar def = this.definition;\n\t\t\n\t\tthis.dispatch(\"column-layout\", this);\n\t\t\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\t\t\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\t\t\n\t\tif(def.field){\n\t\t\tthis.element.setAttribute(\"tabulator-field\", def.field);\n\t\t}\n\t\t\n\t\t//set min width if present\n\t\tthis.setMinWidth(parseInt(def.minWidth));\n\t\t\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\t\t\n\t\tthis.reinitializeWidth();\n\t\t\n\t\t//set horizontal text alignment\n\t\tthis.hozAlign = this.definition.hozAlign;\n\t\tthis.vertAlign = this.definition.vertAlign;\n\t\t\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\n\t}\n\t\n\t_buildColumnHeaderContent(){\n\t\tvar contentElement = document.createElement(\"div\");\n\t\tcontentElement.classList.add(\"tabulator-col-content\");\n\t\t\n\t\tthis.titleHolderElement = document.createElement(\"div\");\n\t\tthis.titleHolderElement.classList.add(\"tabulator-col-title-holder\");\n\t\t\n\t\tcontentElement.appendChild(this.titleHolderElement);\n\t\t\n\t\tthis.titleElement = this._buildColumnHeaderTitle();\n\t\t\n\t\tthis.titleHolderElement.appendChild(this.titleElement);\n\t\t\n\t\treturn contentElement;\n\t}\n\t\n\t//build title element of column\n\t_buildColumnHeaderTitle(){\n\t\tvar def = this.definition;\n\t\t\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\t\t\n\t\tif(def.editableTitle){\n\t\t\tvar titleElement = document.createElement(\"input\");\n\t\t\ttitleElement.classList.add(\"tabulator-title-editor\");\n\t\t\t\n\t\t\ttitleElement.addEventListener(\"click\", (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t\ttitleElement.focus();\n\t\t\t});\n\t\t\t\n\t\t\ttitleElement.addEventListener(\"mousedown\", (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\t\t\t\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\t\t\t\n\t\t\ttitleHolderElement.appendChild(titleElement);\n\t\t\t\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 || \"&nbsp;\");\n\t\t\t\t});\n\t\t\t}else {\n\t\t\t\ttitleElement.value = def.title || \"&nbsp;\";\n\t\t\t}\n\t\t\t\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 || \"&nbsp;\"));\n\t\t\t\t});\n\t\t\t}else {\n\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, def.title || \"&nbsp;\");\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn titleHolderElement;\n\t}\n\t\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\t\t\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\t\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\t\t\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\t\t\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\n\t\t\n\t\tthis.element.appendChild(this.groupElement);\n\t}\n\t\n\t//flat field lookup\n\t_getFlatData(data){\n\t\treturn data[this.field];\n\t}\n\t\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\t\t\n\t\tfor(let i = 0; i < length; i++){\n\t\t\t\n\t\t\tdataObj = dataObj[structure[i]];\n\t\t\t\n\t\t\toutput = dataObj;\n\t\t\t\n\t\t\tif(!dataObj){\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\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\t\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\t\t\n\t\tfor(let i = 0; i < length; i++){\n\t\t\t\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\t\t\t\t\n\t\t\t\tdataObj = dataObj[structure[i]];\n\t\t\t}\n\t\t}\n\t}\n\t\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\t\t\t\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\t\n\t//vertically align header in column\n\tverticalAlign(alignment, height){\n\t\t\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\t\t\n\t\tthis.element.style.height = parentHeight + \"px\";\n\t\t\n\t\tthis.dispatch(\"column-height\", this, this.element.style.height);\n\t\t\n\t\tif(this.isGroup){\n\t\t\tthis.groupElement.style.minHeight = (parentHeight - this.contentElement.offsetHeight) + \"px\";\n\t\t}\n\t\t\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\t\t\n\t\tthis.columns.forEach(function(column){\n\t\t\tcolumn.verticalAlign(alignment);\n\t\t});\n\t}\n\t\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\t\t\n\t\tthis.columns.forEach(function(column){\n\t\t\tcolumn.clearVerticalAlign();\n\t\t});\n\t\t\n\t\tthis.dispatch(\"column-height\", this, \"\");\n\t}\n\t\n\t//// Retrieve Column Information ////\n\t//return column header element\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\t\n\t//return column group element\n\tgetGroupElement(){\n\t\treturn this.groupElement;\n\t}\n\t\n\t//return field name\n\tgetField(){\n\t\treturn this.field;\n\t}\n\t\n\tgetTitleDownload() {\n\t\treturn this.titleDownload;\n\t}\n\t\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\t\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\t\n\t//return all columns in a group\n\tgetColumns(traverse){\n\t\tvar columns = [];\n\t\t\n\t\tif(traverse){\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tcolumns.push(column);\n\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\t\n\t//return all columns in a group\n\tgetCells(){\n\t\treturn this.cells;\n\t}\n\t\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\t\n\t//return column definition object\n\tgetDefinition(updateBranches){\n\t\tvar colDefs = [];\n\t\t\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\t\t\t\n\t\t\tthis.definition.columns = colDefs;\n\t\t}\n\t\t\n\t\treturn this.definition;\n\t}\n\t\n\t//////////////////// Actions ////////////////////\n\tcheckColumnVisibility(){\n\t\tvar visible = false;\n\t\t\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\t\t\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\t\n\t//show column\n\tshow(silent, responsiveToggle){\n\t\tif(!this.visible){\n\t\t\tthis.visible = true;\n\t\t\t\n\t\t\tthis.element.style.display = \"\";\n\t\t\t\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.checkColumnVisibility();\n\t\t\t}\n\t\t\t\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tcell.show();\n\t\t\t});\n\t\t\t\n\t\t\tif(!this.isGroup && this.width === null){\n\t\t\t\tthis.reinitializeWidth();\n\t\t\t}\n\t\t\t\n\t\t\tthis.table.columnManager.verticalAlignHeaders();\n\t\t\t\n\t\t\tthis.dispatch(\"column-show\", this, responsiveToggle);\n\t\t\t\n\t\t\tif(!silent){\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), true);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\t\t\t\n\t\t\tif(!this.silent){\n\t\t\t\tthis.table.columnManager.rerenderColumns();\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//hide column\n\thide(silent, responsiveToggle){\n\t\tif(this.visible){\n\t\t\tthis.visible = false;\n\t\t\t\n\t\t\tthis.element.style.display = \"none\";\n\t\t\t\n\t\t\tthis.table.columnManager.verticalAlignHeaders();\n\t\t\t\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.checkColumnVisibility();\n\t\t\t}\n\t\t\t\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tcell.hide();\n\t\t\t});\n\t\t\t\n\t\t\tthis.dispatch(\"column-hide\", this, responsiveToggle);\n\t\t\t\n\t\t\tif(!silent){\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\t\t\t\n\t\t\tif(!this.silent){\n\t\t\t\tthis.table.columnManager.rerenderColumns();\n\t\t\t}\n\t\t}\n\t}\n\t\n\tmatchChildWidths(){\n\t\tvar childWidth = 0;\n\t\t\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\t\t\t\n\t\t\tthis.contentElement.style.maxWidth = (childWidth - 1) + \"px\";\n\t\t\tif (this.table.initialized) {\n\t\t\t\tthis.element.style.width = childWidth + \"px\";\n\t\t\t}\n\t\t\t\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\t\t}\n\t}\n\t\n\tremoveChild(child){\n\t\tvar index = this.columns.indexOf(child);\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.columns.splice(index, 1);\n\t\t}\n\t\t\n\t\tif(!this.columns.length){\n\t\t\tthis.delete();\n\t\t}\n\t}\n\t\n\tsetWidth(width){\n\t\tthis.widthFixed = true;\n\t\tthis.setWidthActual(width);\n\t}\n\t\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\t\t\n\t\twidth = Math.max(this.minWidth, width);\n\t\t\n\t\tif(this.maxWidth){\n\t\t\twidth = Math.min(this.maxWidth, width);\n\t\t}\n\t\t\n\t\tthis.width = width;\n\t\tthis.widthStyled = width ? width + \"px\" : \"\";\n\t\t\n\t\tthis.element.style.width = this.widthStyled;\n\t\t\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\t\t\n\t\tif(this.parent.isGroup){\n\t\t\tthis.parent.matchChildWidths();\n\t\t}\n\t\t\n\t\tthis.dispatch(\"column-width\", this);\n\t\t\n\t\tif(this.subscribedExternal(\"columnWidth\")){\n\t\t\tthis.dispatchExternal(\"columnWidth\", this.getComponent());\n\t\t}\n\t}\n\t\n\tcheckCellHeights(){\n\t\tvar rows = [];\n\t\t\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\t\t\n\t\trows.forEach(function(row){\n\t\t\trow.calcHeight();\n\t\t});\n\t\t\n\t\trows.forEach(function(row){\n\t\t\trow.setCellHeight();\n\t\t});\n\t}\n\t\n\tgetWidth(){\n\t\tvar width = 0;\n\t\t\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\t\t\n\t\treturn width;\n\t}\n\t\n\tgetLeftOffset(){\n\t\tvar offset = this.element.offsetLeft;\n\t\t\n\t\tif(this.parent.isGroup){\n\t\t\toffset += this.parent.getLeftOffset();\n\t\t}\n\t\t\n\t\treturn offset;\n\t}\n\t\n\tgetHeight(){\n\t\treturn Math.ceil(this.element.getBoundingClientRect().height);\n\t}\n\t\n\tsetMinWidth(minWidth){\n\t\tif(this.maxWidth && minWidth > this.maxWidth){\n\t\t\tminWidth = this.maxWidth;\n\t\t\t\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\t\t\n\t\tthis.minWidth = minWidth;\n\t\tthis.minWidthStyled = minWidth ? minWidth + \"px\" : \"\";\n\t\t\n\t\tthis.element.style.minWidth = this.minWidthStyled;\n\t\t\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.setMinWidth();\n\t\t});\n\t}\n\t\n\tsetMaxWidth(maxWidth){\n\t\tif(this.minWidth && maxWidth < this.minWidth){\n\t\t\tmaxWidth = this.minWidth;\n\t\t\t\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\t\t\n\t\tthis.maxWidth = maxWidth;\n\t\tthis.maxWidthStyled = maxWidth ? maxWidth + \"px\" : \"\";\n\t\t\n\t\tthis.element.style.maxWidth = this.maxWidthStyled;\n\t\t\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.setMaxWidth();\n\t\t});\n\t}\n\t\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\t\t\t\n\t\t\tthis.dispatch(\"column-delete\", this);\n\t\t\t\n\t\t\tvar cellCount = this.cells.length;\n\t\t\t\n\t\t\tfor(let i = 0; i < cellCount; i++){\n\t\t\t\tthis.cells[0].delete();\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.element = false;\n\t\t\tthis.contentElement = false;\n\t\t\tthis.titleElement = false;\n\t\t\tthis.groupElement = false;\n\t\t\t\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.removeChild(this);\n\t\t\t}\n\t\t\t\n\t\t\tthis.table.columnManager.deregisterColumn(this);\n\t\t\t\n\t\t\tthis.table.columnManager.rerenderColumns(true);\n\t\t\t\n\t\t\tthis.dispatch(\"column-deleted\", this);\n\t\t\t\n\t\t\tresolve();\n\t\t});\n\t}\n\t\n\tcolumnRendered(){\n\t\tif(this.titleFormatterRendered){\n\t\t\tthis.titleFormatterRendered();\n\t\t}\n\t\t\n\t\tthis.dispatch(\"column-rendered\", this);\n\t}\n\t\n\t//////////////// Cell Management /////////////////\n\t//generate cell for this column\n\tgenerateCell(row){\n\t\tvar cell = new Cell(this, row);\n\t\t\n\t\tthis.cells.push(cell);\n\t\t\n\t\treturn cell;\n\t}\n\t\n\tnextColumn(){\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\n\t\treturn index > -1 ? this._nextVisibleColumn(index + 1) : false;\n\t}\n\t\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\t\n\tprevColumn(){\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\n\t\treturn index > -1 ? this._prevVisibleColumn(index - 1) : false;\n\t}\n\t\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\t\n\treinitializeWidth(force){\n\t\tthis.widthFixed = false;\n\t\t\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\t\t\n\t\tthis.dispatch(\"column-width-fit-before\", this);\n\t\t\n\t\tthis.fitToData(force);\n\t\t\n\t\tthis.dispatch(\"column-width-fit-after\", this);\n\t}\n\t\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\t\t\n\t\tif(!this.widthFixed){\n\t\t\tthis.element.style.width = \"\";\n\t\t\t\n\t\t\tthis.cells.forEach((cell) => {\n\t\t\t\tcell.clearWidth();\n\t\t\t});\n\t\t}\n\t\t\n\t\tvar maxWidth = this.element.offsetWidth;\n\t\t\n\t\tif(!this.width || !this.widthFixed){\n\t\t\tthis.cells.forEach((cell) => {\n\t\t\t\tvar width = cell.getWidth();\n\t\t\t\t\n\t\t\t\tif(width > maxWidth){\n\t\t\t\t\tmaxWidth = width;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(maxWidth){\n\t\t\t\tvar setTo = maxWidth + 1;\n\t\t\t\t\n\t\t\t\tif(force){\n\t\t\t\t\tthis.setWidth(setTo);\n\t\t\t\t}else {\n\t\t\t\t\tif (this.maxInitialWidth && !force) {\n\t\t\t\t\t\tsetTo = Math.min(setTo, this.maxInitialWidth);\n\t\t\t\t\t}\n\t\t\t\t\tthis.setWidthActual(setTo);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tupdateDefinition(updates){\n\t\tvar definition;\n\t\t\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\t\t\t\t\n\t\t\t\treturn this.table.columnManager.addColumn(definition, false, this)\n\t\t\t\t\t.then((column) => {\n\t\t\t\t\t\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\t\t\t\t\t\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\t\t\t\t\t\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\t\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//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new ColumnComponent(this);\n\t\t}\n\t\t\n\t\treturn this.component;\n\t}\n\t\n\tgetPosition(){\n\t\treturn this.table.columnManager.getVisibleColumnsByIndex().indexOf(this) + 1;\n\t}\n\t\n\tgetParentComponent(){\n\t\treturn this.parent instanceof Column ? this.parent.getComponent() : false;\n\t}\n}\n\n//public row object\nclass 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}\n\nclass Row extends CoreFeature{\n\tconstructor (data, parent, type = \"row\"){\n\t\tsuper(parent.table);\n\t\t\n\t\tthis.parent = parent;\n\t\tthis.data = {};\n\t\tthis.type = type; //type of element\n\t\tthis.element = false;\n\t\tthis.modules = {}; //hold module variables;\n\t\tthis.cells = [];\n\t\tthis.height = 0; //hold element height\n\t\tthis.heightStyled = \"\"; //hold element height pre-styled to improve render efficiency\n\t\tthis.manualHeight = false; //user has manually set row height\n\t\tthis.outerHeight = 0; //hold elements outer height\n\t\tthis.initialized = false; //element has been rendered\n\t\tthis.heightInitialized = false; //element has resized cells to fit\n\t\tthis.position = 0; //store position of element in row list\n\t\tthis.positionWatchers = [];\n\t\t\n\t\tthis.component = null;\n\t\t\n\t\tthis.created = false;\n\t\t\n\t\tthis.setData(data);\n\t}\n\t\n\tcreate(){\n\t\tif(!this.created){\n\t\t\tthis.created = true;\n\t\t\tthis.generateElement();\n\t\t}\n\t}\n\t\n\tcreateElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-row\");\n\t\tel.setAttribute(\"role\", \"row\");\n\t\t\n\t\tthis.element = el;\n\t}\n\t\n\tgetElement(){\n\t\tthis.create();\n\t\treturn this.element;\n\t}\n\t\n\tdetachElement(){\n\t\tif (this.element && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t}\n\t\n\tgenerateElement(){\n\t\tthis.createElement();\n\t\tthis.dispatch(\"row-init\", this);\n\t}\n\t\n\tgenerateCells(){\n\t\tthis.cells = this.table.columnManager.generateCells(this);\n\t}\n\t\n\t//functions to setup on first render\n\tinitialize(force, inFragment){\n\t\tthis.create();\n\t\t\n\t\tif(!this.initialized || force){\n\t\t\t\n\t\t\tthis.deleteCells();\n\t\t\t\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\t\t\t\n\t\t\tthis.dispatch(\"row-layout-before\", this);\n\t\t\t\n\t\t\tthis.generateCells();\n\t\t\t\n\t\t\tthis.initialized = true;\n\t\t\t\n\t\t\tthis.table.columnManager.renderer.renderRowCells(this, inFragment);\n\t\t\t\n\t\t\tif(force){\n\t\t\t\tthis.normalizeHeight();\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-layout\", this);\n\t\t\t\n\t\t\tif(this.table.options.rowFormatter){\n\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-layout-after\", this);\n\t\t}else {\n\t\t\tthis.table.columnManager.renderer.rerenderRowCells(this, inFragment);\n\t\t}\n\t}\n\n\trendered(){\n\t\tthis.cells.forEach((cell) => {\n\t\t\tcell.cellRendered();\n\t\t});\n\t}\n\t\n\treinitializeHeight(){\n\t\tthis.heightInitialized = false;\n\t\t\n\t\tif(this.element && this.element.offsetParent !== null){\n\t\t\tthis.normalizeHeight(true);\n\t\t}\n\t}\n\n\tdeinitialize(){\n\t\tthis.initialized = false;\n\t}\n\t\n\tdeinitializeHeight(){\n\t\tthis.heightInitialized = false;\n\t}\n\t\n\treinitialize(children){\n\t\tthis.initialized = false;\n\t\tthis.heightInitialized = false;\n\t\t\n\t\tif(!this.manualHeight){\n\t\t\tthis.height = 0;\n\t\t\tthis.heightStyled = \"\";\n\t\t}\n\t\t\n\t\tif(this.element && this.element.offsetParent !== null){\n\t\t\tthis.initialize(true);\n\t\t}\n\t\t\n\t\tthis.dispatch(\"row-relayout\", this);\n\t}\n\t\n\t//get heights when doing bulk row style calcs in virtual DOM\n\tcalcHeight(force){\n\t\tvar maxHeight = 0, minHeight = 0;\n\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.calcMinHeight();\n\t\t\tmaxHeight = this.calcMaxHeight();\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\n\tcalcMinHeight(){\n\t\treturn this.table.options.resizableRows ? this.element.clientHeight : 0;\n\t}\n\n\tcalcMaxHeight(){\n\t\tvar maxHeight = 0;\n\n\t\tthis.cells.forEach(function(cell){\n\t\t\tvar height = cell.getHeight();\n\n\t\t\tif(height > maxHeight){\n\t\t\t\tmaxHeight = height;\n\t\t\t}\n\t\t});\n\n\t\treturn maxHeight;\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\n\t\t\tif(this.subscribedExternal(\"rowHeight\")){\n\t\t\t\tthis.dispatchExternal(\"rowHeight\", this.getComponent());\n\t\t\t}\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\nvar defaultCalculations = {\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};\n\nclass ColumnCalcs extends Module{\n\n\tstatic moduleName = \"columnCalcs\";\n\n\t//load defaults\n\tstatic calculations = defaultCalculations;\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.topCalcs = [];\n\t\tthis.botCalcs = [];\n\t\tthis.genColumn = false;\n\t\tthis.topElement = this.createElement();\n\t\tthis.botElement = this.createElement();\n\t\tthis.topRow = false;\n\t\tthis.botRow = false;\n\t\tthis.topInitialized = false;\n\t\tthis.botInitialized = false;\n\t\t\n\t\tthis.blocked = false;\n\t\tthis.recalcAfterBlock = false;\n\t\t\n\t\tthis.registerTableOption(\"columnCalcs\", true);\n\t\t\n\t\tthis.registerColumnOption(\"topCalc\");\n\t\tthis.registerColumnOption(\"topCalcParams\");\n\t\tthis.registerColumnOption(\"topCalcFormatter\");\n\t\tthis.registerColumnOption(\"topCalcFormatterParams\");\n\t\tthis.registerColumnOption(\"bottomCalc\");\n\t\tthis.registerColumnOption(\"bottomCalcParams\");\n\t\tthis.registerColumnOption(\"bottomCalcFormatter\");\n\t\tthis.registerColumnOption(\"bottomCalcFormatterParams\");\n\t}\n\t\n\tcreateElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-calcs-holder\");\n\t\treturn el;\n\t}\n\t\n\tinitialize(){\n\t\tthis.genColumn = new Column({field:\"value\"}, this);\n\t\t\n\t\tthis.subscribe(\"cell-value-changed\", this.cellValueChanged.bind(this));\n\t\tthis.subscribe(\"column-init\", this.initializeColumnCheck.bind(this));\n\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\n\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\n\t\tthis.subscribe(\"column-moved\", this.recalcActiveRows.bind(this));\n\t\tthis.subscribe(\"column-add\", this.recalcActiveRows.bind(this));\n\t\tthis.subscribe(\"data-refreshed\", this.recalcActiveRowsRefresh.bind(this));\n\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\n\t\tthis.subscribe(\"rows-visible\", this.visibleRows.bind(this));\n\t\tthis.subscribe(\"scrollbar-vertical\", this.adjustForScrollbar.bind(this));\n\t\t\n\t\tthis.subscribe(\"redraw-blocked\", this.blockRedraw.bind(this));\n\t\tthis.subscribe(\"redraw-restored\", this.restoreRedraw.bind(this));\n\n\t\tthis.subscribe(\"table-redrawing\", this.resizeHolderWidth.bind(this));\n\t\tthis.subscribe(\"column-resized\", this.resizeHolderWidth.bind(this));\n\t\tthis.subscribe(\"column-show\", this.resizeHolderWidth.bind(this));\n\t\tthis.subscribe(\"column-hide\", this.resizeHolderWidth.bind(this));\n\t\t\n\t\tthis.registerTableFunction(\"getCalcResults\", this.getResults.bind(this));\n\t\tthis.registerTableFunction(\"recalc\", this.userRecalc.bind(this));\n\n\n\t\tthis.resizeHolderWidth();\n\t}\n\n\tresizeHolderWidth(){\n\t\tthis.topElement.style.minWidth = this.table.columnManager.headersElement.offsetWidth + \"px\";\n\t}\n\n\t\n\ttableRedraw(force){\n\t\tthis.recalc(this.table.rowManager.activeRows);\n\t\t\n\t\tif(force){\n\t\t\tthis.redraw();\n\t\t}\n\t}\n\t\n\tblockRedraw(){\n\t\tthis.blocked = true;\n\t\tthis.recalcAfterBlock = false;\n\t}\n\t\n\t\n\trestoreRedraw(){\n\t\tthis.blocked = false;\n\t\t\n\t\tif(this.recalcAfterBlock){\n\t\t\tthis.recalcAfterBlock = false;\n\t\t\tthis.recalcActiveRowsRefresh();\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\tuserRecalc(){\n\t\tthis.recalc(this.table.rowManager.activeRows);\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tblockCheck(){\n\t\tif(this.blocked){\n\t\t\tthis.recalcAfterBlock = true;\n\t\t}\n\t\t\n\t\treturn this.blocked;\n\t}\n\t\n\tvisibleRows(viewable, rows){\n\t\tif(this.topRow){\n\t\t\trows.unshift(this.topRow);\n\t\t}\n\t\t\n\t\tif(this.botRow){\n\t\t\trows.push(this.botRow);\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\trowsUpdated(row){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.recalcRowGroup(row);\n\t\t}else {\n\t\t\tthis.recalcActiveRows();\n\t\t}\n\t}\n\t\n\trecalcActiveRowsRefresh(){\n\t\tif(this.table.options.groupBy && this.table.options.dataTreeStartExpanded && this.table.options.dataTree){\n\t\t\tthis.recalcAll();\n\t\t}else {\n\t\t\tthis.recalcActiveRows();\n\t\t}\n\t}\n\t\n\trecalcActiveRows(){\n\t\tthis.recalc(this.table.rowManager.activeRows);\n\t}\n\t\n\tcellValueChanged(cell){\n\t\tif(cell.column.definition.topCalc || cell.column.definition.bottomCalc){\n\t\t\tif(this.table.options.groupBy){\n\t\t\t\tif(this.table.options.columnCalcs == \"table\" || this.table.options.columnCalcs == \"both\"){\n\t\t\t\t\tthis.recalcActiveRows();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.table.options.columnCalcs != \"table\"){\n\t\t\t\t\tthis.recalcRowGroup(cell.row);\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tthis.recalcActiveRows();\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinitializeColumnCheck(column){\n\t\tif(column.definition.topCalc || column.definition.bottomCalc){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\t\n\t//initialize column calcs\n\tinitializeColumn(column){\n\t\tvar def = column.definition;\n\t\t\n\t\tvar config = {\n\t\t\ttopCalcParams:def.topCalcParams || {},\n\t\t\tbotCalcParams:def.bottomCalcParams || {},\n\t\t};\n\t\t\n\t\tif(def.topCalc){\n\t\t\t\n\t\t\tswitch(typeof def.topCalc){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(ColumnCalcs.calculations[def.topCalc]){\n\t\t\t\t\t\tconfig.topCalc = ColumnCalcs.calculations[def.topCalc];\n\t\t\t\t\t}else {\n\t\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"function\":\n\t\t\t\t\tconfig.topCalc = def.topCalc;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tif(config.topCalc){\n\t\t\t\tcolumn.modules.columnCalcs = config;\n\t\t\t\tthis.topCalcs.push(column);\n\t\t\t\t\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\n\t\t\t\t\tthis.initializeTopRow();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\tif(def.bottomCalc){\n\t\t\tswitch(typeof def.bottomCalc){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(ColumnCalcs.calculations[def.bottomCalc]){\n\t\t\t\t\t\tconfig.botCalc = ColumnCalcs.calculations[def.bottomCalc];\n\t\t\t\t\t}else {\n\t\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"function\":\n\t\t\t\t\tconfig.botCalc = def.bottomCalc;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tif(config.botCalc){\n\t\t\t\tcolumn.modules.columnCalcs = config;\n\t\t\t\tthis.botCalcs.push(column);\n\t\t\t\t\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\n\t\t\t\t\tthis.initializeBottomRow();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\t\n\t//dummy functions to handle being mock column manager\n\tregisterColumnField(){}\n\t\n\tremoveCalcs(){\n\t\tvar changed = false;\n\t\t\n\t\tif(this.topInitialized){\n\t\t\tthis.topInitialized = false;\n\t\t\tthis.topElement.parentNode.removeChild(this.topElement);\n\t\t\tchanged = true;\n\t\t}\n\t\t\n\t\tif(this.botInitialized){\n\t\t\tthis.botInitialized = false;\n\t\t\tthis.footerRemove(this.botElement);\n\t\t\tchanged = true;\n\t\t}\n\t\t\n\t\tif(changed){\n\t\t\tthis.table.rowManager.adjustTableSize();\n\t\t}\n\t}\n\t\n\treinitializeCalcs(){\n\t\tif(this.topCalcs.length){\n\t\t\tthis.initializeTopRow();\n\t\t}\n\n\t\tif(this.botCalcs.length){\n\t\t\tthis.initializeBottomRow();\n\t\t}\n\t}\n\t\n\tinitializeTopRow(){\n\t\tvar\tfragment = document.createDocumentFragment();\n\t\t\n\t\tif(!this.topInitialized){\n\n\t\t\tfragment.appendChild(document.createElement(\"br\"));\n\t\t\tfragment.appendChild(this.topElement);\n\n\t\t\tthis.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling);\n\t\t\tthis.topInitialized = true;\n\t\t}\n\t}\n\t\n\tinitializeBottomRow(){\n\t\tif(!this.botInitialized){\n\t\t\tthis.footerPrepend(this.botElement);\n\t\t\tthis.botInitialized = true;\n\t\t}\n\t}\n\t\n\tscrollHorizontal(left){\n\t\tif(this.botInitialized && this.botRow){\n\t\t\tthis.botElement.scrollLeft = left;\n\t\t}\n\t}\n\t\n\trecalc(rows){\n\t\tvar data, row;\n\t\t\n\t\tif(!this.blockCheck()){\n\t\t\tif(this.topInitialized || this.botInitialized){\n\t\t\t\tdata = this.rowsToData(rows);\n\t\t\t\t\n\t\t\t\tif(this.topInitialized){\n\t\t\t\t\tif(this.topRow){\n\t\t\t\t\t\tthis.topRow.deleteCells();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\trow = this.generateRow(\"top\", data);\n\t\t\t\t\tthis.topRow = row;\n\t\t\t\t\twhile(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild);\n\t\t\t\t\tthis.topElement.appendChild(row.getElement());\n\t\t\t\t\trow.initialize(true);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.botInitialized){\n\t\t\t\t\tif(this.botRow){\n\t\t\t\t\t\tthis.botRow.deleteCells();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\trow = this.generateRow(\"bottom\", data);\n\t\t\t\t\tthis.botRow = row;\n\t\t\t\t\twhile(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild);\n\t\t\t\t\tthis.botElement.appendChild(row.getElement());\n\t\t\t\t\trow.initialize(true);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.table.rowManager.adjustTableSize();\n\t\t\t\t\n\t\t\t\t//set resizable handles\n\t\t\t\tif(this.table.modExists(\"frozenColumns\")){\n\t\t\t\t\tthis.table.modules.frozenColumns.layout();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\trecalcRowGroup(row){\n\t\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\n\t}\n\t\n\trecalcAll(){\n\t\tif(this.topCalcs.length || this.botCalcs.length){\n\t\t\tif(this.table.options.columnCalcs !== \"group\"){\n\t\t\t\tthis.recalcActiveRows();\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.groupBy && this.table.options.columnCalcs !== \"table\"){\n\t\t\t\t\n\t\t\t\tvar groups = this.table.modules.groupRows.getChildGroups();\n\t\t\t\t\n\t\t\t\tgroups.forEach((group) => {\n\t\t\t\t\tthis.recalcGroup(group);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\trecalcGroup(group){\n\t\tvar data, rowData;\n\t\t\n\t\tif(!this.blockCheck()){\n\t\t\tif(group){\n\t\t\t\tif(group.calcs){\n\t\t\t\t\tif(group.calcs.bottom){\n\t\t\t\t\t\tdata = this.rowsToData(group.rows);\n\t\t\t\t\t\trowData = this.generateRowData(\"bottom\", data);\n\t\t\t\t\t\t\n\t\t\t\t\t\tgroup.calcs.bottom.updateData(rowData);\n\t\t\t\t\t\tgroup.calcs.bottom.reinitialize();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(group.calcs.top){\n\t\t\t\t\t\tdata = this.rowsToData(group.rows);\n\t\t\t\t\t\trowData = this.generateRowData(\"top\", data);\n\t\t\t\t\t\t\n\t\t\t\t\t\tgroup.calcs.top.updateData(rowData);\n\t\t\t\t\t\tgroup.calcs.top.reinitialize();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//generate top stats row\n\tgenerateTopRow(rows){\n\t\treturn this.generateRow(\"top\", this.rowsToData(rows));\n\t}\n\t//generate bottom stats row\n\tgenerateBottomRow(rows){\n\t\treturn this.generateRow(\"bottom\", this.rowsToData(rows));\n\t}\n\t\n\trowsToData(rows){\n\t\tvar data = [],\n\t\thasDataTreeColumnCalcs = this.table.options.dataTree && this.table.options.dataTreeChildColumnCalcs,\n\t\tdataTree = this.table.modules.dataTree;\n\n\t\trows.forEach((row) => {\n\t\t\tdata.push(row.getData());\n\n\t\t\tif(hasDataTreeColumnCalcs && row.modules.dataTree?.open){\n\t\t\t\tthis.rowsToData(dataTree.getFilteredTreeChildren(row)).forEach(dataRow =>{\n\t\t\t\t\tdata.push(row);\n\t\t\t\t});\n\t\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.lookupFormatter(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.lookupFormatter(\"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\nclass DataTree extends Module{\n\n\tstatic moduleName = \"dataTree\";\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.indent = 10;\n\t\tthis.field = \"\";\n\t\tthis.collapseEl = null;\n\t\tthis.expandEl = null;\n\t\tthis.branchEl = null;\n\t\tthis.elementField = false;\n\n\t\tthis.startOpen = function(){};\n\n\t\tthis.registerTableOption(\"dataTree\", false); //enable data tree\n\t\tthis.registerTableOption(\"dataTreeFilter\", true); //filter child rows\n\t\tthis.registerTableOption(\"dataTreeSort\", true); //sort child rows\n\t\tthis.registerTableOption(\"dataTreeElementColumn\", false);\n\t\tthis.registerTableOption(\"dataTreeBranchElement\", true);//show data tree branch element\n\t\tthis.registerTableOption(\"dataTreeChildIndent\", 9); //data tree child indent in px\n\t\tthis.registerTableOption(\"dataTreeChildField\", \"_children\");//data tre column field to look for child rows\n\t\tthis.registerTableOption(\"dataTreeCollapseElement\", false);//data tree row collapse element\n\t\tthis.registerTableOption(\"dataTreeExpandElement\", false);//data tree row expand element\n\t\tthis.registerTableOption(\"dataTreeStartExpanded\", false);\n\t\tthis.registerTableOption(\"dataTreeChildColumnCalcs\", false);//include visible data tree rows in column calculations\n\t\tthis.registerTableOption(\"dataTreeSelectPropagate\", false);//selecting a parent row selects its children\n\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"treeCollapse\", this.collapseRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"treeExpand\", this.expandRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"treeToggle\", this.toggleRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"getTreeParent\", this.getTreeParent.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"getTreeChildren\", this.getRowChildren.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"addTreeChild\", this.addTreeChildRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"isTreeExpanded\", this.isRowExpanded.bind(this));\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.dataTree){\n\t\t\tvar dummyEl = null,\n\t\t\toptions = this.table.options;\n\n\t\t\tthis.field = options.dataTreeChildField;\n\t\t\tthis.indent = options.dataTreeChildIndent;\n\n\t\t\tif(this.options(\"movableRows\")){\n\t\t\t\tconsole.warn(\"The movableRows option is not available with dataTree enabled, moving of child rows could result in unpredictable behavior\");\n\t\t\t}\n\n\t\t\tif(options.dataTreeBranchElement){\n\n\t\t\t\tif(options.dataTreeBranchElement === true){\n\t\t\t\t\tthis.branchEl = document.createElement(\"div\");\n\t\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch\");\n\t\t\t\t}else {\n\t\t\t\t\tif(typeof options.dataTreeBranchElement === \"string\"){\n\t\t\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\t\t\tdummyEl.innerHTML = options.dataTreeBranchElement;\n\t\t\t\t\t\tthis.branchEl = dummyEl.firstChild;\n\t\t\t\t\t}else {\n\t\t\t\t\t\tthis.branchEl = options.dataTreeBranchElement;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tthis.branchEl = document.createElement(\"div\");\n\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch-empty\");\n\t\t\t}\n\n\t\t\tif(options.dataTreeCollapseElement){\n\t\t\t\tif(typeof options.dataTreeCollapseElement === \"string\"){\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeCollapseElement;\n\t\t\t\t\tthis.collapseEl = dummyEl.firstChild;\n\t\t\t\t}else {\n\t\t\t\t\tthis.collapseEl = options.dataTreeCollapseElement;\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tthis.collapseEl = document.createElement(\"div\");\n\t\t\t\tthis.collapseEl.classList.add(\"tabulator-data-tree-control\");\n\t\t\t\tthis.collapseEl.tabIndex = 0;\n\t\t\t\tthis.collapseEl.innerHTML = \"<div class='tabulator-data-tree-control-collapse'></div>\";\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 = \"<div class='tabulator-data-tree-control-expand'></div>\";\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-deleting\", this.rowDeleting.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, false, true);\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, sortOnly){\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, sortOnly);\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, false, true);\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\trowDeleting(row){\n\t\tvar config = row.modules.dataTree;\n\n\t\tif (config && config.children && Array.isArray(config.children)){\n\t\t\tconfig.children.forEach((childRow) => {\n\t\t\t\tif(childRow instanceof Row){\n\t\t\t\t\tchildRow.wipe();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\trowDelete(row){\n\t\tvar parent = row.modules.dataTree.parent,\n\t\tchildIndex;\n\n\t\tif(parent){\n\t\t\tchildIndex = this.findChildIndex(row, parent);\n\n\t\t\tif(childIndex !== false){\n\t\t\t\tparent.data[this.field].splice(childIndex, 1);\n\t\t\t}\n\n\t\t\tif(!parent.data[this.field].length){\n\t\t\t\tdelete parent.data[this.field];\n\t\t\t}\n\n\t\t\tthis.initializeRow(parent);\n\t\t\tthis.layoutRow(parent);\n\t\t}\n\n\t\tthis.refreshData(true);\n\t}\n\n\taddTreeChildRow(row, data, top, index){\n\t\tvar childIndex = false;\n\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif(!Array.isArray(row.data[this.field])){\n\t\t\trow.data[this.field] = [];\n\n\t\t\trow.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);\n\t\t}\n\n\t\tif(typeof index !== \"undefined\"){\n\t\t\tchildIndex = this.findChildIndex(index, row);\n\n\t\t\tif(childIndex !== false){\n\t\t\t\trow.data[this.field].splice((top ? childIndex : childIndex + 1), 0, data);\n\t\t\t}\n\t\t}\n\n\t\tif(childIndex === false){\n\t\t\tif(top){\n\t\t\t\trow.data[this.field].unshift(data);\n\t\t\t}else {\n\t\t\t\trow.data[this.field].push(data);\n\t\t\t}\n\t\t}\n\n\t\tthis.initializeRow(row);\n\t\tthis.layoutRow(row);\n\n\t\tthis.refreshData(true);\n\t}\n\n\tfindChildIndex(subject, parent){\n\t\tvar match = false;\n\n\t\tif(typeof subject == \"object\"){\n\n\t\t\tif(subject instanceof Row){\n\t\t\t\t//subject is row element\n\t\t\t\tmatch = subject.data;\n\t\t\t}else if(subject instanceof RowComponent){\n\t\t\t\t//subject is public row component\n\t\t\t\tmatch = subject._getSelf().data;\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\n\t\t\t\tif(parent.modules.dataTree){\n\t\t\t\t\tmatch = parent.modules.dataTree.children.find((childRow) => {\n\t\t\t\t\t\treturn childRow instanceof Row ? childRow.element === subject : false;\n\t\t\t\t\t});\n\n\t\t\t\t\tif(match){\n\t\t\t\t\t\tmatch = match.data;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else if(subject === null){\n\t\t\t\tmatch = false;\n\t\t\t}\n\n\t\t}else if(typeof subject == \"undefined\"){\n\t\t\tmatch = false;\n\t\t}else {\n\t\t\t//subject should be treated as the index of the row\n\t\t\tmatch = parent.data[this.field].find((row) => {\n\t\t\t\treturn row.data[this.table.options.index] == subject;\n\t\t\t});\n\t\t}\n\n\t\tif(match){\n\n\t\t\tif(Array.isArray(parent.data[this.field])){\n\t\t\t\tmatch = parent.data[this.field].indexOf(match);\n\t\t\t}\n\n\t\t\tif(match == -1){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t}\n\n\t\t//catch all for any other type of input\n\n\t\treturn match;\n\t}\n\n\tgetTreeChildren(row, component, recurse){\n\t\tvar config = row.modules.dataTree,\n\t\toutput = [];\n\n\t\tif(config && config.children){\n\n\t\t\tif(!Array.isArray(config.children)){\n\t\t\t\tconfig.children = this.generateChildren(row);\n\t\t\t}\n\n\t\t\tconfig.children.forEach((childRow) => {\n\t\t\t\tif(childRow instanceof Row){\n\t\t\t\t\toutput.push(component ? childRow.getComponent() : childRow);\n\n\t\t\t\t\tif(recurse){\n\t\t\t\t\t\tthis.getTreeChildren(childRow, component, recurse).forEach(child => {\n\t\t\t\t\t\t\toutput.push(child);\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 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\nfunction csv$1(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\nfunction json$2(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}\n\nfunction pdf(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\tjspdfLib, doc;\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\tjspdfLib = this.dependencyRegistry.lookup(\"jspdf\", \"jsPDF\");\n\tdoc = new jspdfLib(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\nfunction xlsx$1(list, options, setFileContents){\n\tvar self = this,\n\tsheetName = options.sheetName || \"Sheet1\",\n\tXLSXLib = this.dependencyRegistry.lookup(\"XLSX\"),\n\tworkbook = XLSXLib.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\tXLSXLib.utils.sheet_add_aoa(worksheet, rows);\n\n\t\tworksheet['!ref'] = XLSXLib.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 = XLSXLib.write(workbook, writeOptions);\n\n\tsetFileContents(s2ab(output), \"application/octet-stream\");\n}\n\nfunction html$1(list, options, setFileContents){\n\tif(this.modExists(\"export\", true)){\n\t\tsetFileContents(this.modules.export.generateHTMLTable(list), \"text/html\");\n\t}\n}\n\nfunction jsonLines (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}\n\nvar defaultDownloaders = {\n\tcsv:csv$1,\n\tjson:json$2,\n\tjsonLines:jsonLines,\n\tpdf:pdf,\n\txlsx:xlsx$1,\n\thtml:html$1,\n};\n\nclass Download extends Module{\n\n\tstatic moduleName = \"download\";\n\n\t//load defaults\n\tstatic downloaders = defaultDownloaders;\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(\"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\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\nfunction 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}\n\n//input element\nfunction input(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();\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}\n\n//resizable text area element\nfunction textarea$1(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();\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}\n\n//input element with type of number\nfunction number$1(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}\n\n//input element with type of number\nfunction range(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}\n\n//input element\nfunction date$1(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\n//input element\nfunction time$1(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\n//input element\nfunction datetime$2(cell, onRendered, success, cancel, editorParams){\n\tvar inputFormat = editorParams.format,\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tDT = inputFormat ? (this.table.dependencyRegistry.lookup([\"luxon\", \"DateTime\"], \"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\nlet Edit$1 = 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\t// if(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\t// if(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\t// if(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\t// if(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(!this._emptyValueCheck(val)){\n\t\t\t\t\tif(this.params.multiselect && Array.isArray(val)){\n\t\t\t\t\t\tval.forEach((item) => {\n\t\t\t\t\t\t\tif(!this._emptyValueCheck(item)){\n\t\t\t\t\t\t\t\toutput[item] = true;\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\toutput[val] = true;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t}else {\n\t\t\tconsole.warn(\"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\n\t_emptyValueCheck(value){\n\t\treturn value === null || typeof value === \"undefined\" || value === \"\";\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\nfunction list(cell, onRendered, success, cancel, editorParams){\n\tvar list = new Edit$1(this, cell, onRendered, success, cancel, editorParams);\n\n\treturn list.input;\n}\n\n//star rating\nfunction star$1(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 = '<polygon fill=\"#488CE9\" stroke=\"#014AAE\" stroke-width=\"37.6152\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" points=\"259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 \"/>';\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 = '<polygon fill=\"#010155\" stroke=\"#686868\" stroke-width=\"37.6152\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" points=\"259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 \"/>';\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}\n\n//draggable progress bar\nfunction progress$1(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}\n\n//checkbox\nfunction tickCross$1(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}\n\nfunction adaptable$1(cell, onRendered, success, cancel, params){\r\n\tvar column = cell._getSelf().column,\r\n\tlookup, editorFunc, editorParams;\r\n \r\n\tfunction defaultLookup(cell){\r\n\t\tvar value = cell.getValue(),\r\n\t\teditor = \"input\";\r\n \r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"number\":\r\n\t\t\t\teditor = \"number\";\r\n\t\t\t\tbreak;\r\n \r\n\t\t\tcase \"boolean\":\r\n\t\t\t\teditor = \"tickCross\";\r\n\t\t\t\tbreak;\r\n \r\n\t\t\tcase \"string\":\r\n\t\t\t\tif(value.includes(\"\\n\")){\r\n\t\t\t\t\teditor = \"textarea\";\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n \r\n\t\treturn editor;\r\n\t}\r\n \r\n\tlookup = params.editorLookup ? params.editorLookup(cell) : defaultLookup(cell);\r\n\r\n\tif(params.paramsLookup){\r\n\t\teditorParams = typeof params.paramsLookup === \"function\" ? params.paramsLookup(lookup, cell) : params.paramsLookup[lookup];\r\n\t}\r\n\r\n\teditorFunc = this.table.modules.edit.lookupEditor(lookup, column);\r\n \r\n\treturn editorFunc.call(this, cell, onRendered, success, cancel, editorParams || {});\r\n}\n\nvar defaultEditors = {\n\tinput:input,\n\ttextarea:textarea$1,\n\tnumber:number$1,\n\trange:range,\n\tdate:date$1,\n\ttime:time$1,\n\tdatetime:datetime$2,\n\tlist:list,\n\tstar:star$1,\n\tprogress:progress$1,\n\ttickCross:tickCross$1,\n\tadaptable:adaptable$1,\n};\n\nclass Edit extends Module{\n\n\tstatic moduleName = \"edit\";\n\n\t//load defaults\n\tstatic editors = defaultEditors;\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\tthis.convertEmptyValues = false;\n\t\t\n\t\tthis.editors = Edit.editors;\n\t\n\t\tthis.registerTableOption(\"editTriggerEvent\", \"focus\");\n\t\tthis.registerTableOption(\"editorEmptyValue\");\n\t\tthis.registerTableOption(\"editorEmptyValueFunc\", this.emptyValueCheck.bind(this));\n\n\t\tthis.registerColumnOption(\"editable\");\n\t\tthis.registerColumnOption(\"editor\");\n\t\tthis.registerColumnOption(\"editorParams\");\n\t\tthis.registerColumnOption(\"editorEmptyValue\");\n\t\tthis.registerColumnOption(\"editorEmptyValueFunc\");\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\tthis.subscribe(\"clipboard-paste\", this.pasteBlocker.bind(this));\n\t\t\n\t\tthis.subscribe(\"keybinding-nav-prev\", this.navigatePrev.bind(this, undefined));\n\t\tthis.subscribe(\"keybinding-nav-next\", this.keybindingNavigateNext.bind(this));\n\t\t\n\t\t// this.subscribe(\"keybinding-nav-left\", this.navigateLeft.bind(this, undefined));\n\t\t// this.subscribe(\"keybinding-nav-right\", this.navigateRight.bind(this, undefined));\n\t\tthis.subscribe(\"keybinding-nav-up\", this.navigateUp.bind(this, undefined));\n\t\tthis.subscribe(\"keybinding-nav-down\", this.navigateDown.bind(this, undefined));\n\n\t\tif(Object.keys(this.table.options).includes(\"editorEmptyValue\")){\n\t\t\tthis.convertEmptyValues = true;\n\t\t}\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Paste Negation //////////\n\t///////////////////////////////////\n\t\n\tpasteBlocker(e){\n\t\tif(this.currentCell){\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t////// Keybinding Functions ///////\n\t///////////////////////////////////\n\t\n\tkeybindingNavigateNext(e){\n\t\tvar cell = this.currentCell,\n\t\tnewRow = this.options(\"tabEndNewRow\");\n\n\t\tif(cell){\n\t\t\tif(!this.navigateNext(cell, e)){\n\t\t\t\tif(newRow){\n\t\t\t\t\tcell.getElement().firstChild.blur();\n\t\t\t\t\t\n\t\t\t\t\tif(!this.invalidEdit){\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(newRow === true){\n\t\t\t\t\t\t\tnewRow = this.table.addRow({});\n\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\tif(typeof newRow == \"function\"){\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()));\n\t\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(Object.assign({}, newRow));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tnewRow.then(() => {\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tcell.getComponent().navigateNext();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Cell Functions //////////\n\t///////////////////////////////////\n\t\n\tcellIsEdited(cell){\n\t\treturn !! cell.modules.edit && cell.modules.edit.edited;\n\t}\n\t\n\tcellCancelEdit(cell){\n\t\tif(cell === this.currentCell){\n\t\t\tthis.table.modules.edit.cancelEdit();\n\t\t}else {\n\t\t\tconsole.warn(\"Cancel Editor Error - This cell is not currently being edited \");\n\t\t}\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\tupdateCellClass(cell){\n\t\tif(this.allowEdit(cell)) {\n\t\t\tcell.getElement().classList.add(\"tabulator-editable\");\n\t\t}\n\t\telse {\n\t\t\tcell.getElement().classList.remove(\"tabulator-editable\");\n\t\t}\n\t}\n\t\n\tclearCellEdited(cells){\n\t\tif(!cells){\n\t\t\tcells = this.table.modules.edit.getEditedCells();\n\t\t}\n\t\t\n\t\tif(!Array.isArray(cells)){\n\t\t\tcells = [cells];\n\t\t}\n\t\t\n\t\tcells.forEach((cell) => {\n\t\t\tthis.table.modules.edit.clearEdited(cell._getSelf());\n\t\t});\n\t}\n\t\n\tnavigatePrev(cell = this.currentCell, e){\n\t\tvar nextCell, prevRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tnextCell = this.navigateLeft();\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\treturn true;\n\t\t\t}else {\n\t\t\t\tprevRow = this.table.rowManager.prevDisplayRow(cell.row, true);\n\t\t\t\t\n\t\t\t\tif(prevRow){\n\t\t\t\t\tnextCell = this.findPrevEditableCell(prevRow, prevRow.cells.length);\n\t\t\t\t\t\n\t\t\t\t\tif(nextCell){\n\t\t\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateNext(cell = this.currentCell, e){\n\t\tvar nextCell, nextRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tnextCell = this.navigateRight();\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\treturn true;\n\t\t\t}else {\n\t\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\n\t\t\t\t\n\t\t\t\tif(nextRow){\n\t\t\t\t\tnextCell = this.findNextEditableCell(nextRow, -1);\n\t\t\t\t\t\n\t\t\t\t\tif(nextCell){\n\t\t\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateLeft(cell = this.currentCell, e){\n\t\tvar index, nextCell;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextCell = this.findPrevEditableCell(cell.row, index);\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateRight(cell = this.currentCell, e){\n\t\tvar index, nextCell;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextCell = this.findNextEditableCell(cell.row, index);\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateUp(cell = this.currentCell, e){\n\t\tvar index, nextRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextRow = this.table.rowManager.prevDisplayRow(cell.row, true);\n\t\t\t\n\t\t\tif(nextRow){\n\t\t\t\tnextRow.cells[index].getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateDown(cell = this.currentCell, e){\n\t\tvar index, nextRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\n\t\t\t\n\t\t\tif(nextRow){\n\t\t\t\tnextRow.cells[index].getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tfindNextEditableCell(row, index){\n\t\tvar nextCell = false;\n\t\t\n\t\tif(index < row.cells.length-1){\n\t\t\tfor(var i = index+1; i < row.cells.length; i++){\n\t\t\t\tlet cell = row.cells[i];\n\t\t\t\t\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\n\t\t\t\t\tlet allowEdit = this.allowEdit(cell);\n\t\t\t\t\t\n\t\t\t\t\tif(allowEdit){\n\t\t\t\t\t\tnextCell = cell;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn nextCell;\n\t}\n\t\n\tfindPrevEditableCell(row, index){\n\t\tvar prevCell = false;\n\t\t\n\t\tif(index > 0){\n\t\t\tfor(var i = index-1; i >= 0; i--){\n\t\t\t\tlet cell = row.cells[i];\n\t\t\t\t\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\n\t\t\t\t\tlet allowEdit = this.allowEdit(cell);\n\t\t\t\t\t\n\t\t\t\t\tif(allowEdit){\n\t\t\t\t\t\tprevCell = cell;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn prevCell;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tinitializeColumnCheck(column){\n\t\tif(typeof column.definition.editor !== \"undefined\"){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\t\n\tcolumnDeleteCheck(column){\n\t\tif(this.currentCell && this.currentCell.column === column){\n\t\t\tthis.cancelEdit();\n\t\t}\n\t}\n\t\n\trowDeleteCheck(row){\n\t\tif(this.currentCell && this.currentCell.row === row){\n\t\t\tthis.cancelEdit();\n\t\t}\n\t}\n\t\n\trowEditableCheck(row){\n\t\trow.getCells().forEach((cell) => {\n\t\t\tif(cell.column.modules.edit && typeof cell.column.modules.edit.check === \"function\"){\n\t\t\t\tthis.updateCellClass(cell);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//initialize column editor\n\tinitializeColumn(column){\n\t\tvar convertEmpty = Object.keys(column.definition).includes(\"editorEmptyValue\");\n\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\tconvertEmptyValues:convertEmpty,\n\t\t\teditorEmptyValue:column.definition.editorEmptyValue,\n\t\t\teditorEmptyValueFunc:column.definition.editorEmptyValueFunc,\n\t\t};\n\t\t\n\t\t//set column editor\n\t\tconfig.editor = this.lookupEditor(column.definition.editor, column);\n\t\t\n\t\tif(config.editor){\n\t\t\tcolumn.modules.edit = config;\n\t\t}\n\t}\n\n\tlookupEditor(editor, column){\n\t\tvar editorFunc;\n\n\t\tswitch(typeof editor){\n\t\t\tcase \"string\":\n\t\t\t\tif(this.editors[editor]){\n\t\t\t\t\teditorFunc = this.editors[editor];\n\t\t\t\t}else {\n\t\t\t\t\tconsole.warn(\"Editor Error - No such editor found: \", editor);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\teditorFunc = editor;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"boolean\":\n\t\t\t\tif(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\teditorFunc = this.editors[column.definition.formatter];\n\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\teditorFunc = 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\n\t\treturn editorFunc;\n\t}\n\t\n\tgetCurrentCell(){\n\t\treturn this.currentCell ? this.currentCell.getComponent() : false;\n\t}\n\t\n\tclearEditor(cancel){\n\t\tvar cell = this.currentCell,\n\t\tcellEl;\n\t\t\n\t\tthis.invalidEdit = false;\n\t\t\n\t\tif(cell){\n\t\t\tthis.currentCell = false;\n\t\t\t\n\t\t\tcellEl = cell.getElement();\n\t\t\t\n\t\t\tthis.dispatch(\"edit-editor-clear\", cell, cancel);\n\t\t\t\n\t\t\tcellEl.classList.remove(\"tabulator-editing\");\n\t\t\t\n\t\t\twhile(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild);\n\t\t\t\n\t\t\tcell.row.getElement().classList.remove(\"tabulator-editing\");\n\t\t\t\n\t\t\tcell.table.element.classList.remove(\"tabulator-editing\");\n\t\t}\n\t}\n\t\n\tcancelEdit(){\n\t\tif(this.currentCell){\n\t\t\tvar cell = this.currentCell;\n\t\t\tvar component = this.currentCell.getComponent();\n\t\t\t\n\t\t\tthis.clearEditor(true);\n\t\t\tcell.setValueActual(cell.getValue());\n\t\t\tcell.cellRendered();\n\t\t\t\n\t\t\tif(cell.column.definition.editor == \"textarea\" || cell.column.definition.variableHeight){\n\t\t\t\tcell.row.normalizeHeight(true);\n\t\t\t}\n\t\t\t\n\t\t\tif(cell.column.definition.cellEditCancelled){\n\t\t\t\tcell.column.definition.cellEditCancelled.call(this.table, component);\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"edit-cancelled\", cell);\n\t\t\tthis.dispatchExternal(\"cellEditCancelled\", component);\n\t\t}\n\t}\n\t\n\t//return a formatted value for a cell\n\tbindEditor(cell){\n\t\tif(cell.column.modules.edit){\n\t\t\tvar self = this,\n\t\t\telement = cell.getElement(true);\n\t\t\t\n\t\t\tthis.updateCellClass(cell);\n\t\t\telement.setAttribute(\"tabindex\", 0);\n\t\t\t\n\t\t\telement.addEventListener(\"mousedown\", function(e){\n\t\t\t\tif (e.button === 2) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}else {\n\t\t\t\t\tself.mouseClick = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(this.options(\"editTriggerEvent\") === \"dblclick\"){\n\t\t\t\telement.addEventListener(\"dblclick\", function(e){\n\t\t\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\n\t\t\t\t\t\telement.focus({preventScroll: true});\n\t\t\t\t\t\tself.edit(cell, e, false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\tif(this.options(\"editTriggerEvent\") === \"focus\" || this.options(\"editTriggerEvent\") === \"click\"){\n\t\t\t\telement.addEventListener(\"click\", function(e){\n\t\t\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\n\t\t\t\t\t\telement.focus({preventScroll: true});\n\t\t\t\t\t\tself.edit(cell, e, false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tif(this.options(\"editTriggerEvent\") === \"focus\"){\n\t\t\t\telement.addEventListener(\"focus\", function(e){\n\t\t\t\t\tif(!self.recursionBlock){\n\t\t\t\t\t\tself.edit(cell, e, false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfocusCellNoEvent(cell, block){\n\t\tthis.recursionBlock = true;\n\t\t\n\t\tif(!(block && this.table.browser === \"ie\")){\n\t\t\tcell.getElement().focus({preventScroll: true});\n\t\t}\n\t\t\n\t\tthis.recursionBlock = false;\n\t}\n\t\n\teditCell(cell, forceEdit){\n\t\tthis.focusCellNoEvent(cell);\n\t\tthis.edit(cell, false, forceEdit);\n\t}\n\t\n\tfocusScrollAdjust(cell){\n\t\tif(this.table.rowManager.getRenderMode() == \"virtual\"){\n\t\t\tvar topEdge = this.table.rowManager.element.scrollTop,\n\t\t\tbottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,\n\t\t\trowEl = cell.row.getElement();\n\t\t\t\n\t\t\tif(rowEl.offsetTop < topEdge){\n\t\t\t\tthis.table.rowManager.element.scrollTop -= (topEdge - rowEl.offsetTop);\n\t\t\t}else {\n\t\t\t\tif(rowEl.offsetTop + rowEl.offsetHeight > bottomEdge){\n\t\t\t\t\tthis.table.rowManager.element.scrollTop += (rowEl.offsetTop + rowEl.offsetHeight - bottomEdge);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar leftEdge = this.table.rowManager.element.scrollLeft,\n\t\t\trightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,\n\t\t\tcellEl = cell.getElement();\n\t\t\t\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\n\t\t\t\tleftEdge += parseInt(this.table.modules.frozenColumns.leftMargin || 0);\n\t\t\t\trightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin || 0);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.renderHorizontal === \"virtual\"){\n\t\t\t\tleftEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\n\t\t\t\trightEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\n\t\t\t}\n\t\t\t\n\t\t\tif(cellEl.offsetLeft < leftEdge){\n\t\t\t\tthis.table.rowManager.element.scrollLeft -= (leftEdge - cellEl.offsetLeft);\n\t\t\t}else {\n\t\t\t\tif(cellEl.offsetLeft + cellEl.offsetWidth > rightEdge){\n\t\t\t\t\tthis.table.rowManager.element.scrollLeft += (cellEl.offsetLeft + cellEl.offsetWidth - rightEdge);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tallowEdit(cell) {\n\t\tvar check = cell.column.modules.edit ? true : false;\n\t\t\n\t\tif(cell.column.modules.edit){\n\t\t\tswitch(typeof cell.column.modules.edit.check){\n\t\t\t\tcase \"function\":\n\t\t\t\t\tif(cell.row.initialized){\n\t\t\t\t\t\tcheck = cell.column.modules.edit.check(cell.getComponent());\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"string\":\n\t\t\t\t\tcheck = !!cell.row.data[cell.column.modules.edit.check];\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tcheck = cell.column.modules.edit.check;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn check;\n\t}\n\t\n\tedit(cell, e, forceEdit){\n\t\tvar self = this,\n\t\tallowEdit = true,\n\t\trendered = function(){},\n\t\telement = cell.getElement(),\n\t\teditFinished = false,\n\t\tcellEditor, component, params;\n\n\t\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\n\t\t\n\t\tif(this.currentCell){\n\t\t\tif(!this.invalidEdit && this.currentCell !== cell){\n\t\t\t\tthis.cancelEdit();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t//handle successful value change\n\t\tfunction success(value){\n\t\t\tif(self.currentCell === cell && !editFinished){\n\t\t\t\tvar valid = self.chain(\"edit-success\", [cell, value], true, true);\n\n\t\t\t\tif(valid === true || self.table.options.validationMode === \"highlight\"){\n\n\t\t\t\t\teditFinished = true;\n\n\t\t\t\t\tself.clearEditor();\n\t\t\t\t\t\n\t\t\t\t\tif(!cell.modules.edit){\n\t\t\t\t\t\tcell.modules.edit = {};\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tcell.modules.edit.edited = true;\n\t\t\t\t\t\n\t\t\t\t\tif(self.editedCells.indexOf(cell) == -1){\n\t\t\t\t\t\tself.editedCells.push(cell);\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = self.transformEmptyValues(value, cell);\n\t\t\t\t\t\n\t\t\t\t\tcell.setValue(value, true);\n\n\t\t\t\t\treturn valid === true;\n\t\t\t\t}else {\n\t\t\t\t\teditFinished = true;\n\t\t\t\t\tself.invalidEdit = true;\n\t\t\t\t\tself.focusCellNoEvent(cell, true);\n\t\t\t\t\trendered();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\teditFinished = false;\n\t\t\t\t\t}, 10);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t//handle aborted edit\n\t\tfunction cancel(){\n\t\t\t// editFinished = true;\n\n\t\t\tif(self.currentCell === cell && !editFinished){\n\t\t\t\tself.cancelEdit();\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction onRendered(callback){\n\t\t\trendered = callback;\n\t\t}\n\t\t\n\t\tif(!cell.column.modules.edit.blocked){\n\t\t\tif(e){\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t\t\n\t\t\tallowEdit = this.allowEdit(cell);\n\t\t\t\n\t\t\tif(allowEdit || forceEdit){\n\t\t\t\tself.cancelEdit();\n\t\t\t\t\n\t\t\t\tself.currentCell = cell;\n\t\t\t\t\n\t\t\t\tthis.focusScrollAdjust(cell);\n\t\t\t\t\n\t\t\t\tcomponent = cell.getComponent();\n\t\t\t\t\n\t\t\t\tif(this.mouseClick){\n\t\t\t\t\tthis.mouseClick = false;\n\t\t\t\t\t\n\t\t\t\t\tif(cell.column.definition.cellClick){\n\t\t\t\t\t\tcell.column.definition.cellClick.call(this.table, e, component);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(cell.column.definition.cellEditing){\n\t\t\t\t\tcell.column.definition.cellEditing.call(this.table, component);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"cell-editing\", cell);\n\t\t\t\tthis.dispatchExternal(\"cellEditing\", component);\n\t\t\t\t\n\t\t\t\tparams = typeof cell.column.modules.edit.params === \"function\" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;\n\t\t\t\t\n\t\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\n\t\t\t\t\n\t\t\t\t//if editor returned, add to DOM, if false, abort edit\n\t\t\t\tif(this.currentCell && cellEditor !== false){\n\t\t\t\t\tif(cellEditor instanceof Node){\n\t\t\t\t\t\telement.classList.add(\"tabulator-editing\");\n\t\t\t\t\t\tcell.row.getElement().classList.add(\"tabulator-editing\");\n\t\t\t\t\t\tcell.table.element.classList.add(\"tabulator-editing\");\n\t\t\t\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\t\t\t\t\telement.appendChild(cellEditor);\n\t\t\t\t\t\t\n\t\t\t\t\t\t//trigger onRendered Callback\n\t\t\t\t\t\trendered();\n\t\t\t\t\t\t\n\t\t\t\t\t\t//prevent editing from triggering rowClick event\n\t\t\t\t\t\tvar children = element.children;\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t\t\t\tchildren[i].addEventListener(\"click\", function(e){\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}else {\n\t\t\t\t\t\tconsole.warn(\"Edit Error - Editor should return an instance of Node, the editor returned:\", cellEditor);\n\t\t\t\t\t\tthis.blur(element);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}else {\n\t\t\t\t\tthis.blur(element);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn true;\n\t\t\t}else {\n\t\t\t\tthis.mouseClick = false;\n\t\t\t\tthis.blur(element);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else {\n\t\t\tthis.mouseClick = false;\n\t\t\tthis.blur(element);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\temptyValueCheck(value){\n\t\treturn value === \"\" || value === null || typeof value === \"undefined\";\n\t}\n\n\ttransformEmptyValues(value, cell){\n\t\tvar mod = cell.column.modules.edit, \n\t\tconvert = mod.convertEmptyValues || this.convertEmptyValues,\n\t\tcheckFunc;\n\t\t\n\t\tif(convert){\n\t\t\tcheckFunc = mod.editorEmptyValueFunc || this.options(\"editorEmptyValueFunc\");\n\n\t\t\tif(checkFunc && checkFunc(value)){\n\t\t\t\tvalue = mod.convertEmptyValues ? mod.editorEmptyValue : this.options(\"editorEmptyValue\");\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn value;\n\t}\n\t\n\tblur(element){\n\t\tif(!this.confirm(\"edit-blur\", [element]) ){\n\t\t\telement.blur();\n\t\t}\n\t}\n\t\n\tgetEditedCells(){\n\t\tvar output = [];\n\t\t\n\t\tthis.editedCells.forEach((cell) => {\n\t\t\toutput.push(cell.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tclearEdited(cell){\n\t\tvar editIndex;\n\t\t\n\t\tif(cell.modules.edit && cell.modules.edit.edited){\n\t\t\tcell.modules.edit.edited = false;\n\t\t\t\n\t\t\tthis.dispatch(\"edit-edited-clear\", cell);\n\t\t}\n\t\t\n\t\teditIndex = this.editedCells.indexOf(cell);\n\t\t\n\t\tif(editIndex > -1){\n\t\t\tthis.editedCells.splice(editIndex, 1);\n\t\t}\n\t}\n}\n\nclass 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\nclass 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\nvar columnLookups$1 = {\r\n\r\n};\n\nvar rowLookups$1 = {\r\n\tvisible:function(){\r\n\t\treturn this.rowManager.getVisibleRows(false, true);\r\n\t},\r\n\tall:function(){\r\n\t\treturn this.rowManager.rows;\r\n\t},\r\n\tselected:function(){\r\n\t\treturn this.modules.selectRow.selectedRows;\r\n\t},\r\n\tactive:function(){\r\n\t\tif(this.options.pagination){\r\n\t\t\treturn this.rowManager.getDisplayRows(this.rowManager.displayRows.length - 2);\r\n\t\t}else {\r\n\t\t\treturn this.rowManager.getDisplayRows();\r\n\t\t}\r\n\t},\r\n};\n\nclass Export extends Module{\n\n\tstatic moduleName = \"export\";\n\n\tstatic columnLookups = columnLookups$1;\n\tstatic rowLookups = rowLookups$1;\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\tthis.colVisPropAttach = \"\";\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///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tgenerateExportList(config, style, range, colVisProp){\n\t\tvar headers, body, columns, colLookup;\n\n\t\tthis.cloneTableStyle = style;\n\t\tthis.config = config || {};\n\t\tthis.colVisProp = colVisProp;\n\t\tthis.colVisPropAttach = this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1);\n\n\t\tcolLookup = Export.columnLookups[range];\n\n\t\tif(colLookup){\n\t\t\tcolumns = colLookup.call(this.table);\n\t\t\tcolumns = columns.filter(col => this.columnVisCheck(col));\n\t\t}\n\n\t\theaders = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders(columns)) : [];\n\n\t\tif(columns){\n\t\t\tcolumns = columns.map(col => col.getComponent());\n\t\t}\n\t\t\n\t\tbody = this.bodyToExportRows(this.rowLookup(range), columns);\n\n\t\treturn headers.concat(body);\n\t}\n\t\n\tgenerateTable(config, style, range, colVisProp){\n\t\tvar list = this.generateExportList(config, style, range, colVisProp);\n\t\t\n\t\treturn this.generateTableElement(list);\n\t}\n\t\n\trowLookup(range){\n\t\tvar rows = [], \n\t\trowLookup;\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\trowLookup = Export.rowLookups[range] || Export.rowLookups[\"active\"];\n\n\t\t\trows = rowLookup.call(this.table);\n\t\t}\n\t\t\n\t\treturn Object.assign([], rows);\n\t}\n\t\n\tgenerateColumnGroupHeaders(columns){\n\t\tvar output = [];\n\t\t\n\t\tif (!columns) {\n\t\t\tcolumns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\n\t\t}\n\t\t\n\t\tcolumns.forEach((column) => {\n\t\t\tvar colData = this.processColumnGroup(column);\n\t\t\t\n\t\t\tif(colData){\n\t\t\t\toutput.push(colData);\n\t\t\t}\n\t\t});\n\n\n\n\t\treturn output;\n\t}\n\t\n\tprocessColumnGroup(column){\n\t\tvar subGroups = column.columns,\n\t\tmaxDepth = 0,\n\t\ttitle = column.definition[\"title\" + (this.colVisPropAttach)] || 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\n\t\tif(this.config.rowHeaders === false && column.isRowHeader){\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\tif(typeof visProp === \"function\"){\n\t\t\tvisProp = visProp.call(this.table, column.getComponent());\n\t\t}\n\n\t\tif(visProp === false || visProp === true){\n\t\t\treturn visProp;\n\t\t}\n\n\t\treturn column.visible && column.field;\n\t}\n\t\n\theadersToExportRows(columns){\n\t\tvar headers = [],\n\t\theaderDepth = 0,\n\t\texportRows = [];\n\t\t\n\t\tfunction parseColumnGroup(column, level){\n\t\t\t\n\t\t\tvar depth = headerDepth - level;\n\t\t\t\n\t\t\tif(typeof headers[level] === \"undefined\"){\n\t\t\t\theaders[level] = [];\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.height = column.subGroups ? 1 : (depth - column.depth) + 1;\n\t\t\t\n\t\t\theaders[level].push(column);\n\t\t\t\n\t\t\tif(column.height > 1){\n\t\t\t\tfor(let i = 1; i < column.height; i ++){\n\t\t\t\t\t\n\t\t\t\t\tif(typeof headers[level + i] === \"undefined\"){\n\t\t\t\t\t\theaders[level + i] = [];\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\theaders[level + i].push(false);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(column.width > 1){\n\t\t\t\tfor(let i = 1; i < column.width; i ++){\n\t\t\t\t\theaders[level].push(false);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(column.subGroups){\n\t\t\t\tcolumn.subGroups.forEach(function(subGroup){\n\t\t\t\t\tparseColumnGroup(subGroup, level+1);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\t//calculate maximum header depth\n\t\tcolumns.forEach(function(column){\n\t\t\tif(column.depth > headerDepth){\n\t\t\t\theaderDepth = column.depth;\n\t\t\t}\n\t\t});\n\t\t\n\t\tcolumns.forEach(function(column){\n\t\t\tparseColumnGroup(column,0);\n\t\t});\n\t\t\n\t\theaders.forEach((header) => {\n\t\t\tvar columns = [];\n\t\t\t\n\t\t\theader.forEach((col) => {\n\t\t\t\tif(col){\n\t\t\t\t\tlet title = typeof col.title === \"undefined\" ? \"\" : col.title;\n\t\t\t\t\tcolumns.push(new ExportColumn(title, col.column.getComponent(), col.width, col.height, col.depth));\n\t\t\t\t}else {\n\t\t\t\t\tcolumns.push(null);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\texportRows.push(new ExportRow(\"header\", columns));\n\t\t});\n\t\t\n\t\treturn exportRows;\n\t}\n\t\n\tbodyToExportRows(rows, columns = []){\n\t\tvar exportRows = [];\n\t\t\n\t\tif (columns.length === 0) {\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\t\tif (this.columnVisCheck(column)) {\n\t\t\t\t\tcolumns.push(column.getComponent());\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tif(this.config.columnCalcs !== false && this.table.modExists(\"columnCalcs\")){\n\t\t\tif(this.table.modules.columnCalcs.topInitialized){\n\t\t\t\trows.unshift(this.table.modules.columnCalcs.topRow);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.modules.columnCalcs.botInitialized){\n\t\t\t\trows.push(this.table.modules.columnCalcs.botRow);\n\t\t\t}\n\t\t}\n\n\t\trows = rows.filter((row) => {\n\t\t\tswitch(row.type){\n\t\t\t\tcase \"group\":\n\t\t\t\t\treturn this.config.rowGroups !== false;\n\t\t\t\t\n\t\t\t\tcase \"calc\":\n\t\t\t\t\treturn this.config.columnCalcs !== false;\n\t\t\t\t\n\t\t\t\tcase \"row\":\n\t\t\t\t\treturn !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent);\n\t\t\t}\n\t\t\t\n\t\t\treturn true;\n\t\t});\n\t\t\n\t\trows.forEach((row, i) => {\n\t\t\tvar rowData = row.getData(this.colVisProp);\n\t\t\tvar exportCols = [];\n\t\t\tvar indent = 0;\n\t\t\t\n\t\t\tswitch(row.type){\n\t\t\t\tcase \"group\":\n\t\t\t\t\tindent = row.level;\n\t\t\t\t\texportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"calc\" :\n\t\t\t\tcase \"row\" :\n\t\t\t\t\tcolumns.forEach((col) => {\n\t\t\t\t\t\texportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));\n\t\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\n\t\t\t\t\t\tindent = row.modules.dataTree.index;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\texportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));\n\t\t});\n\t\t\n\t\treturn exportRows;\n\t}\n\t\n\tgenerateTableElement(list){\n\t\tvar table = document.createElement(\"table\"),\n\t\theaderEl = document.createElement(\"thead\"),\n\t\tbodyEl = document.createElement(\"tbody\"),\n\t\tstyles = this.lookupTableStyles(),\n\t\trowFormatter = this.table.options[\"rowFormatter\" + (this.colVisPropAttach)],\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.colVisPropAttach)];\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\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.styleRowHeader = styles.firstRow.getElementsByClassName(\"tabulator-row-header\")[0];\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-left\", \"border-right\", \"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\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 && column.component._column.parent.isGroup){\n\t\t\t\t\tthis.mapElementStyles(column.component._column.parent.groupElement, cellEl, [\"border-top\"]);\n\t\t\t\t}else {\n\t\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"border-top\"]);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(column.component._column.isGroup){\n\t\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"border-bottom\"]);\n\t\t\t\t}else {\n\t\t\t\t\tthis.mapElementStyles(this.table.columnManager.getElement(), cellEl, [\"border-bottom\"]);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trowEl.appendChild(cellEl);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateGroupElement(row, setup, styles){\n\t\t\n\t\tvar rowEl = document.createElement(\"tr\"),\n\t\tcellEl = document.createElement(\"td\"),\n\t\tgroup = row.columns[0];\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\n\t\t\n\t\tif(setup.groupHeader && setup.groupHeader[row.indent]){\n\t\t\tgroup.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t}else {\n\t\t\tif(setup.groupHeader !== false){\n\t\t\t\tgroup.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t\t}\n\t\t}\n\t\t\n\t\tcellEl.colSpan = group.width;\n\t\tcellEl.innerHTML = group.value;\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-group\");\n\t\trowEl.classList.add(\"tabulator-group-level-\" + row.indent);\n\t\t\n\t\tif(group.component.isVisible()){\n\t\t\trowEl.classList.add(\"tabulator-group-visible\");\n\t\t}\n\t\t\n\t\tthis.mapElementStyles(styles.firstGroup, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\t\tthis.mapElementStyles(styles.firstGroup, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\n\t\t\n\t\trowEl.appendChild(cellEl);\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateCalcElement(row, setup, styles){\n\t\tvar rowEl = this.generateRowElement(row, setup, styles);\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-calcs\");\n\t\tthis.mapElementStyles(styles.calcRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateRowElement(row, setup, styles){\n\t\tvar rowEl = document.createElement(\"tr\");\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\n\t\t\n\t\trow.columns.forEach((col, i) => {\n\t\t\tif(col){\n\t\t\t\tvar cellEl = document.createElement(\"td\"),\n\t\t\t\tcolumn = col.component._column,\n\t\t\t\ttable = this.table,\n\t\t\t\tindex = table.columnManager.findColumnIndex(column),\n\t\t\t\tvalue = col.value,\n\t\t\t\tcellStyle, styleProps;\n\t\t\t\t\n\t\t\t\tvar cellWrapper = {\n\t\t\t\t\tmodules:{},\n\t\t\t\t\tgetValue:function(){\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t},\n\t\t\t\t\tgetField:function(){\n\t\t\t\t\t\treturn column.definition.field;\n\t\t\t\t\t},\n\t\t\t\t\tgetElement:function(){\n\t\t\t\t\t\treturn cellEl;\n\t\t\t\t\t},\n\t\t\t\t\tgetType:function(){\n\t\t\t\t\t\treturn \"cell\";\n\t\t\t\t\t},\n\t\t\t\t\tgetColumn:function(){\n\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t},\n\t\t\t\t\tgetData:function(){\n\t\t\t\t\t\treturn row.component.getData();\n\t\t\t\t\t},\n\t\t\t\t\tgetRow:function(){\n\t\t\t\t\t\treturn row.component;\n\t\t\t\t\t},\n\t\t\t\t\tgetTable:function(){\n\t\t\t\t\t\treturn table;\n\t\t\t\t\t},\n\t\t\t\t\tgetComponent:function(){\n\t\t\t\t\t\treturn cellWrapper;\n\t\t\t\t\t},\n\t\t\t\t\tcolumn:column,\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\n\t\t\t\t\n\t\t\t\tclassNames.forEach(function(className) {\n\t\t\t\t\tcellEl.classList.add(className);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(this.table.modExists(\"format\") && this.config.formatCells !== false){\n\t\t\t\t\tvalue = this.table.modules.format.formatExportValue(cellWrapper, this.colVisProp);\n\t\t\t\t}else {\n\t\t\t\t\tswitch(typeof value){\n\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\tvalue = value !== null ? JSON.stringify(value) : \"\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\n\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(value instanceof Node){\n\t\t\t\t\tcellEl.appendChild(value);\n\t\t\t\t}else {\n\t\t\t\t\tcellEl.innerHTML = value;\n\t\t\t\t}\n\n\t\t\t\tstyleProps = [\"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\n\t\t\t\tif(column.isRowHeader){\n\t\t\t\t\tcellStyle = styles.styleRowHeader;\n\t\t\t\t\tstyleProps.push(\"background-color\");\n\t\t\t\t}else {\n\t\t\t\t\tcellStyle = styles.styleCells && styles.styleCells[index] ? styles.styleCells[index] : styles.firstCell;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(cellStyle){\n\t\t\t\t\tthis.mapElementStyles(cellStyle, cellEl, styleProps);\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\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\nvar defaultFilters = {\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};\n\nclass Filter extends Module{\n\n\tstatic moduleName = \"filter\";\n\n\t//load defaults\n\tstatic filters = defaultFilters;\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\nfunction plaintext(cell, formatterParams, onRendered){\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n}\n\nfunction html(cell, formatterParams, onRendered){\n\treturn cell.getValue();\n}\n\nfunction textarea(cell, formatterParams, onRendered){\n\tcell.getElement().style.whiteSpace = \"pre-wrap\";\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n}\n\nfunction money(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}\n\nfunction link(cell, formatterParams, onRendered){\n\tvar value = cell.getValue(),\n\turlPrefix = formatterParams.urlPrefix || \"\",\n\tdownload = formatterParams.download,\n\tlabel = value,\n\tel = document.createElement(\"a\"),\n\tdata;\n\n\tfunction labelTraverse(path, data){\n\t\tvar item = path.shift(),\n\t\tvalue = data[item];\n\t\t\n\t\tif(path.length && typeof value === \"object\"){\n\t\t\treturn labelTraverse(path, value);\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tif(formatterParams.labelField){\n\t\tdata = cell.getData();\n\t\tlabel = labelTraverse(formatterParams.labelField.split(this.table.options.nestedFieldSeparator), data);\n\t}\n\n\tif(formatterParams.label){\n\t\tswitch(typeof formatterParams.label){\n\t\t\tcase \"string\":\n\t\t\t\tlabel = formatterParams.label;\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tlabel = formatterParams.label(cell);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif(label){\n\t\tif(formatterParams.urlField){\n\t\t\tdata = cell.getData();\n\n\t\t\tvalue = Helpers.retrieveNestedData(this.table.options.nestedFieldSeparator, formatterParams.urlField, data);\n\t\t}\n\n\t\tif(formatterParams.url){\n\t\t\tswitch(typeof formatterParams.url){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tvalue = formatterParams.url;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tvalue = formatterParams.url(cell);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tel.setAttribute(\"href\", urlPrefix + value);\n\n\t\tif(formatterParams.target){\n\t\t\tel.setAttribute(\"target\", formatterParams.target);\n\t\t}\n\n\t\tif(formatterParams.download){\n\n\t\t\tif(typeof download == \"function\"){\n\t\t\t\tdownload = download(cell);\n\t\t\t}else {\n\t\t\t\tdownload = download === true ? \"\" : download;\n\t\t\t}\n\n\t\t\tel.setAttribute(\"download\", download);\n\t\t}\n\n\t\tel.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));\n\n\t\treturn el;\n\t}else {\n\t\treturn \"&nbsp;\";\n\t}\n}\n\nfunction image(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}\n\nfunction tickCross(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 : '<svg enable-background=\"new 0 0 24 24\" height=\"14\" width=\"14\" viewBox=\"0 0 24 24\" xml:space=\"preserve\" ><path fill=\"#2DC214\" clip-rule=\"evenodd\" d=\"M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34 c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351 l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07 l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z\" fill-rule=\"evenodd\"/></svg>',\n\tcross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '<svg enable-background=\"new 0 0 24 24\" height=\"14\" width=\"14\" viewBox=\"0 0 24 24\" xml:space=\"preserve\" ><path fill=\"#CE1515\" d=\"M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272 c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0 l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269 c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73 L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z\"/></svg>';\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}\n\nfunction datetime$1(cell, formatterParams, onRendered){\n\tvar DT = this.table.dependencyRegistry.lookup([\"luxon\", \"DateTime\"], \"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}\n\nfunction datetimediff (cell, formatterParams, onRendered) {\n\tvar DT = this.table.dependencyRegistry.lookup([\"luxon\", \"DateTime\"], \"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}\n\nfunction lookup (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}\n\nfunction star(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 = '<polygon fill=\"#FFEA00\" stroke=\"#C1AB60\" stroke-width=\"37.6152\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" points=\"259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 \"/>',\n\tstarInactive = '<polygon fill=\"#D2D2D2\" stroke=\"#686868\" stroke-width=\"37.6152\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" points=\"259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 \"/>';\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}\n\nfunction traffic(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}\n\nfunction progress(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}\n\nfunction color(cell, formatterParams, onRendered){\n\tcell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());\n\treturn \"\";\n}\n\nfunction buttonTick(cell, formatterParams, onRendered){\n\treturn '<svg enable-background=\"new 0 0 24 24\" height=\"14\" width=\"14\" viewBox=\"0 0 24 24\" xml:space=\"preserve\" ><path fill=\"#2DC214\" clip-rule=\"evenodd\" d=\"M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34 c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351 l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07 l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z\" fill-rule=\"evenodd\"/></svg>';\n}\n\nfunction buttonCross(cell, formatterParams, onRendered){\n\treturn '<svg enable-background=\"new 0 0 24 24\" height=\"14\" width=\"14\" viewBox=\"0 0 24 24\" xml:space=\"preserve\" ><path fill=\"#CE1515\" d=\"M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272 c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0 l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269 c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73 L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z\"/></svg>';\n}\n\nfunction toggle(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\tsize = formatterParams.size ||15,\r\n\tsizePx = size + \"px\",\r\n\tcontainEl, switchEl,\r\n\tonValue = formatterParams.hasOwnProperty(\"onValue\") ? formatterParams.onValue : true,\r\n\toffValue = formatterParams.hasOwnProperty(\"offValue\") ? formatterParams.offValue : false,\r\n\r\n\r\n\tstate = formatterParams.onTruthy ? value : value === onValue;\r\n\r\n\t\r\n\tcontainEl = document.createElement(\"div\");\r\n\tcontainEl.classList.add(\"tabulator-toggle\");\r\n\r\n\tif(state){\r\n\t\tcontainEl.classList.add(\"tabulator-toggle-on\");\r\n\t\tcontainEl.style.flexDirection = \"row-reverse\";\r\n\r\n\t\tif(formatterParams.onColor){\r\n\t\t\tcontainEl.style.background = formatterParams.onColor;\r\n\t\t}\r\n\t}else {\r\n\t\tif(formatterParams.offColor){\r\n\t\t\tcontainEl.style.background = formatterParams.offColor;\r\n\t\t}\r\n\t}\r\n\r\n\tcontainEl.style.width = (2.5 * size) + \"px\";\r\n\tcontainEl.style.borderRadius = sizePx;\r\n\r\n\tif(formatterParams.clickable){\r\n\t\tcontainEl.addEventListener(\"click\", (e) => {\r\n\t\t\tcell.setValue(state ? offValue : onValue);\r\n\t\t});\r\n\t}\r\n\r\n\tswitchEl = document.createElement(\"div\");\r\n\tswitchEl.classList.add(\"tabulator-toggle-switch\");\r\n\r\n\tswitchEl.style.height = sizePx;\r\n\tswitchEl.style.width = sizePx;\r\n\tswitchEl.style.borderRadius = sizePx;\r\n\t\r\n\tcontainEl.appendChild(switchEl);\r\n\t\r\n\treturn containEl;\r\n}\n\nfunction rownum(cell, formatterParams, onRendered){\n\tvar content = document.createElement(\"span\");\n\tvar row = cell.getRow();\n\tvar table = cell.getTable();\n\n\trow.watchPosition((position) => {\n\t\tif (formatterParams.relativeToPage) {\n\t\t\tposition += table.modules.page.getPageSize() * (table.modules.page.getPage() - 1);\n\t\t}\n\t\tcontent.innerText = position;\n\t});\n\t\n\treturn content;\n}\n\nfunction handle(cell, formatterParams, onRendered){\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\n\treturn \"<div class='tabulator-row-handle-box'><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div></div>\";\n}\n\nfunction adaptable(cell, params, onRendered){\r\n\tvar lookup, formatterFunc, formatterParams;\r\n \r\n\tfunction defaultLookup(cell){\r\n\t\tvar value = cell.getValue(),\r\n\t\tformatter = \"plaintext\";\r\n \r\n\t\tswitch(typeof value){ \r\n\t\t\tcase \"boolean\":\r\n\t\t\t\tformatter = \"tickCross\";\r\n\t\t\t\tbreak;\r\n \r\n\t\t\tcase \"string\":\r\n\t\t\t\tif(value.includes(\"\\n\")){\r\n\t\t\t\t\tformatter = \"textarea\";\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n \r\n\t\treturn formatter;\r\n\t}\r\n \r\n\tlookup = params.formatterLookup ? params.formatterLookup(cell) : defaultLookup(cell);\r\n\r\n\tif(params.paramsLookup){\r\n\t\tformatterParams = typeof params.paramsLookup === \"function\" ? params.paramsLookup(lookup, cell) : params.paramsLookup[lookup];\r\n\t}\r\n\r\n\tformatterFunc = this.table.modules.format.lookupFormatter(lookup);\r\n \r\n\treturn formatterFunc.call(this, cell, formatterParams || {}, onRendered);\r\n}\n\nfunction array$2(cell, formatterParams, onRendered){\n\tvar delimiter = formatterParams.delimiter || \",\",\n\tvalue = cell.getValue(),\n\ttable = this.table,\n\tvalueMap;\n\t\n\tif(formatterParams.valueMap){\n\t\tif(typeof formatterParams.valueMap === \"string\"){\n\t\t\tvalueMap = function(value){\n\t\t\t\treturn value.map((item) => {\n\t\t\t\t\treturn Helpers.retrieveNestedData(table.options.nestedFieldSeparator, formatterParams.valueMap, item);\n\t\t\t\t});\n\t\t\t};\n\t\t}else {\n\t\t\tvalueMap = formatterParams.valueMap;\n\t\t}\n\t}\n\n\tif(Array.isArray(value)){\n\t\tif(valueMap){\n\t\t\tvalue = valueMap(value);\n\t\t}\n\n\t\treturn value.join(delimiter);\n\t}else {\n\t\treturn value;\n\t}\n}\n\nfunction json$1(cell, formatterParams, onRendered){\n\tvar indent = formatterParams.indent || \"\\t\",\n\tmultiline = typeof formatterParams.multiline === \"undefined\" ? true : formatterParams.multiline,\n\treplacer = formatterParams.replacer || null,\n\tvalue = cell.getValue();\n\t\n\tif(multiline){\n\t\tcell.getElement().style.whiteSpace = \"pre-wrap\";\n\t}\n\n\treturn JSON.stringify(value, replacer, indent);\n}\n\nvar defaultFormatters = {\n\tplaintext:plaintext,\n\thtml:html,\n\ttextarea:textarea,\n\tmoney:money,\n\tlink:link,\n\timage:image,\n\ttickCross:tickCross,\n\tdatetime:datetime$1,\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\ttoggle:toggle,\n\trownum:rownum,\n\thandle:handle,\n\tadaptable:adaptable,\n\tarray:array$2,\n\tjson:json$1,\n};\n\nclass Format extends Module{\n\t\n\tstatic moduleName = \"format\";\n\t\n\t//load defaults\n\tstatic formatters = defaultFormatters;\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.lookupTypeFormatter(column, \"\");\n\t\t\n\t\tif(typeof column.definition.formatterPrint !== \"undefined\"){\n\t\t\tcolumn.modules.format.print = this.lookupTypeFormatter(column, \"Print\");\n\t\t}\n\t\t\n\t\tif(typeof column.definition.formatterClipboard !== \"undefined\"){\n\t\t\tcolumn.modules.format.clipboard = this.lookupTypeFormatter(column, \"Clipboard\");\n\t\t}\n\t\t\n\t\tif(typeof column.definition.formatterHtmlOutput !== \"undefined\"){\n\t\t\tcolumn.modules.format.htmlOutput = this.lookupTypeFormatter(column, \"HtmlOutput\");\n\t\t}\n\t}\n\t\n\tlookupTypeFormatter(column, type){\n\t\tvar config = {params:column.definition[\"formatter\" + type + \"Params\"] || {}},\n\t\tformatter = column.definition[\"formatter\" + type];\n\t\t\n\t\tconfig.formatter = this.lookupFormatter(formatter);\n\t\t\n\t\treturn config;\n\t}\n\t\n\t\n\tlookupFormatter(formatter){\n\t\tvar formatterFunc;\n\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\tformatterFunc = 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\tformatterFunc = 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\tformatterFunc = formatter;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tformatterFunc = Format.formatters.plaintext;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\treturn formatterFunc;\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.lookupFormatter(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'&': '&amp;',\n\t\t\t\t'<': '&lt;',\n\t\t\t\t'>': '&gt;',\n\t\t\t\t'\"': '&quot;',\n\t\t\t\t\"'\": '&#39;',\n\t\t\t\t'/': '&#x2F;',\n\t\t\t\t'`': '&#x60;',\n\t\t\t\t'=': '&#x3D;'\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 === \"\" ? \"&nbsp;\" : value;\n\t}\n\t\n}\n\nclass FrozenColumns extends Module{\n\n\tstatic moduleName = \"frozenColumns\";\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.leftColumns = [];\n\t\tthis.rightColumns = [];\n\t\tthis.initializationMode = \"left\";\n\t\tthis.active = false;\n\t\tthis.blocked = true;\n\t\t\n\t\tthis.registerColumnOption(\"frozen\");\n\t}\n\t\n\t//reset initial state\n\treset(){\n\t\tthis.initializationMode = \"left\";\n\t\tthis.leftColumns = [];\n\t\tthis.rightColumns = [];\n\t\tthis.active = false;\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-layout\", this.layoutCell.bind(this));\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"column-width\", this.layout.bind(this));\n\t\tthis.subscribe(\"row-layout-after\", this.layoutRow.bind(this));\n\t\tthis.subscribe(\"table-layout\", this.layout.bind(this));\n\t\tthis.subscribe(\"columns-loading\", this.reset.bind(this));\n\t\t\n\t\tthis.subscribe(\"column-add\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"column-deleted\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"column-hide\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"column-show\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"columns-loaded\", this.reinitializeColumns.bind(this));\n\t\t\n\t\tthis.subscribe(\"table-redraw\", this.layout.bind(this));\n\t\tthis.subscribe(\"layout-refreshing\", this.blockLayout.bind(this));\n\t\tthis.subscribe(\"layout-refreshed\", this.unblockLayout.bind(this));\n\t\tthis.subscribe(\"scrollbar-vertical\", this.adjustForScrollbar.bind(this));\n\t}\n\t\n\tblockLayout(){\n\t\tthis.blocked = true;\n\t}\n\t\n\tunblockLayout(){\n\t\tthis.blocked = false;\n\t}\n\t\n\tlayoutCell(cell){\n\t\tthis.layoutElement(cell.element, cell.column);\n\t}\n\t\n\treinitializeColumns(){\n\t\tthis.reset();\n\t\t\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\tthis.initializeColumn(column);\n\t\t});\n\n\t\tthis.layout();\n\t}\n\t\n\t//initialize specific column\n\tinitializeColumn(column){\n\t\tvar config = {margin:0, edge:false};\n\t\t\n\t\tif(!column.isGroup){\t\t\t\n\t\t\tif(this.frozenCheck(column)){\n\t\t\t\tconfig.position = this.initializationMode;\n\t\t\t\t\n\t\t\t\tif(this.initializationMode == \"left\"){\n\t\t\t\t\tthis.leftColumns.push(column);\n\t\t\t\t}else {\n\t\t\t\t\tthis.rightColumns.unshift(column);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.active = true;\n\t\t\t\t\n\t\t\t\tcolumn.modules.frozen = config;\n\t\t\t}else {\n\t\t\t\tthis.initializationMode = \"right\";\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfrozenCheck(column){\n\t\tif(column.parent.isGroup && column.definition.frozen){\n\t\t\tconsole.warn(\"Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups\");\n\t\t}\n\t\t\n\t\tif(column.parent.isGroup){\n\t\t\treturn this.frozenCheck(column.parent);\n\t\t}else {\n\t\t\treturn column.definition.frozen;\n\t\t}\n\t}\n\t\n\t//layout calculation rows\n\tlayoutCalcRows(){\n\t\tif(this.table.modExists(\"columnCalcs\")){\n\t\t\tif(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.botRow);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.modExists(\"groupRows\")){\n\t\t\t\tthis.layoutGroupCalcs(this.table.modules.groupRows.getGroups());\n\t\t\t}\n\t\t}\n\t}\n\t\n\tlayoutGroupCalcs(groups){\n\t\tgroups.forEach((group) => {\n\t\t\tif(group.calcs.top){\n\t\t\t\tthis.layoutRow(group.calcs.top);\n\t\t\t}\n\t\t\t\n\t\t\tif(group.calcs.bottom){\n\t\t\t\tthis.layoutRow(group.calcs.bottom);\n\t\t\t}\n\t\t\t\n\t\t\tif(group.groupList && group.groupList.length){\n\t\t\t\tthis.layoutGroupCalcs(group.groupList);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//calculate column positions and layout headers\n\tlayoutColumnPosition(allCells){\n\t\tvar leftParents = [];\n\t\t\n\t\tvar leftMargin = 0;\n\t\tvar rightMargin = 0;\n\t\t\n\t\tthis.leftColumns.forEach((column, i) => {\t\n\t\t\tcolumn.modules.frozen.marginValue = leftMargin;\n\t\t\tcolumn.modules.frozen.margin = column.modules.frozen.marginValue + \"px\";\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\tleftMargin += column.getWidth();\n\t\t\t}\n\t\t\t\n\t\t\tif(i == this.leftColumns.length - 1){\n\t\t\t\tcolumn.modules.frozen.edge = true;\n\t\t\t}else {\n\t\t\t\tcolumn.modules.frozen.edge = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(column.parent.isGroup){\n\t\t\t\tvar parentEl = this.getColGroupParentElement(column);\n\t\t\t\tif(!leftParents.includes(parentEl)){\n\t\t\t\t\tthis.layoutElement(parentEl, column);\n\t\t\t\t\tleftParents.push(parentEl);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tparentEl.classList.toggle(\"tabulator-frozen-left\", column.modules.frozen.edge && column.modules.frozen.position === \"left\");\n\t\t\t\tparentEl.classList.toggle(\"tabulator-frozen-right\", column.modules.frozen.edge && column.modules.frozen.position === \"right\");\n\t\t\t}else {\n\t\t\t\tthis.layoutElement(column.getElement(), column);\n\t\t\t}\n\t\t\t\n\t\t\tif(allCells){\n\t\t\t\tcolumn.cells.forEach((cell) => {\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.rightColumns.forEach((column, i) => {\n\t\t\t\n\t\t\tcolumn.modules.frozen.marginValue = rightMargin;\n\t\t\tcolumn.modules.frozen.margin = column.modules.frozen.marginValue + \"px\";\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\trightMargin += column.getWidth();\n\t\t\t}\n\t\t\t\n\t\t\tif(i == this.rightColumns.length - 1){\n\t\t\t\tcolumn.modules.frozen.edge = true;\n\t\t\t}else {\n\t\t\t\tcolumn.modules.frozen.edge = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(column.parent.isGroup){\n\t\t\t\tthis.layoutElement(this.getColGroupParentElement(column), column);\n\t\t\t}else {\n\t\t\t\tthis.layoutElement(column.getElement(), column);\n\t\t\t}\n\t\t\t\n\t\t\tif(allCells){\n\t\t\t\tcolumn.cells.forEach((cell) => {\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\t\n\tgetColGroupParentElement(column){\n\t\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\n\t}\n\t\n\t//layout columns appropriately\n\tlayout(){\t\n\t\tif(this.active && !this.blocked){\n\t\t\t//calculate left columns\n\t\t\tthis.layoutColumnPosition();\n\t\t\t\n\t\t\tthis.reinitializeRows();\n\t\t\t\n\t\t\tthis.layoutCalcRows();\n\t\t}\n\t}\n\t\n\treinitializeRows(){\n\t\tvar visibleRows = this.table.rowManager.getVisibleRows(true);\n\t\tvar otherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row));\n\t\t\n\t\totherRows.forEach((row) =>{\n\t\t\trow.deinitialize();\n\t\t});\n\t\t\n\t\tvisibleRows.forEach((row) =>{\n\t\t\tif(row.type === \"row\"){\n\t\t\t\tthis.layoutRow(row);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tlayoutRow(row){\n\t\tif(this.table.options.layout === \"fitDataFill\" && this.rightColumns.length){\n\t\t\tthis.table.rowManager.getTableElement().style.minWidth = \"calc(100% - \" + this.rightMargin + \")\";\n\t\t}\n\t\t\n\t\tthis.leftColumns.forEach((column) => {\n\t\t\tvar cell = row.getCell(column);\n\t\t\t\n\t\t\tif(cell){\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.rightColumns.forEach((column) => {\n\t\t\tvar cell = row.getCell(column);\n\t\t\t\n\t\t\tif(cell){\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tlayoutElement(element, column){\n\t\tvar position;\n\t\t\n\t\tif(column.modules.frozen && element){\n\t\t\telement.style.position = \"sticky\";\n\n\t\t\tif(this.table.rtl){\n\t\t\t\tposition = column.modules.frozen.position === \"left\" ? \"right\" : \"left\";\n\t\t\t}else {\n\t\t\t\tposition = column.modules.frozen.position;\n\t\t\t}\n\t\t\n\t\t\telement.style[position] = column.modules.frozen.margin;\n\n\t\t\telement.classList.add(\"tabulator-frozen\");\n\t\t\t\n\t\t\telement.classList.toggle(\"tabulator-frozen-left\", column.modules.frozen.edge && column.modules.frozen.position === \"left\");\n\t\t\telement.classList.toggle(\"tabulator-frozen-right\", column.modules.frozen.edge && column.modules.frozen.position === \"right\");\n\t\t}\n\t}\n\n\tadjustForScrollbar(width){\n\t\tif(this.rightColumns.length){\n\t\t\tthis.table.columnManager.getContentsElement().style.width = \"calc(100% - \" + width + \"px)\";\n\t\t}\n\t}\n\n\tgetFrozenColumns(){\n\t\treturn this.leftColumns.concat(this.rightColumns);\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\nclass FrozenRows extends Module{\n\n\tstatic moduleName = \"frozenRows\";\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.topElement = document.createElement(\"div\");\n\t\tthis.rows = [];\n\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"freeze\", this.freezeRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"unfreeze\", this.unfreezeRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"isFrozen\", this.isRowFrozen.bind(this));\n\n\t\t//register table options\n\t\tthis.registerTableOption(\"frozenRowsField\", \"id\"); //field to choose frozen rows by\n\t\tthis.registerTableOption(\"frozenRows\", false); //holder for frozen row identifiers\n\t}\n\n\tinitialize(){\n\t\tvar\tfragment = document.createDocumentFragment();\n\t\t\n\t\tthis.rows = [];\n\n\t\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\n\t\t\n\t\tfragment.appendChild(document.createElement(\"br\"));\n\t\tfragment.appendChild(this.topElement);\n\n\t\t// this.table.columnManager.element.append(this.topElement);\n\t\tthis.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling);\n\n\t\tthis.subscribe(\"row-deleting\", this.detachRow.bind(this));\n\t\tthis.subscribe(\"rows-visible\", this.visibleRows.bind(this));\n\n\t\tthis.registerDisplayHandler(this.getRows.bind(this), 10);\n\n\t\tif(this.table.options.frozenRows){\n\t\t\tthis.subscribe(\"data-processed\", this.initializeRows.bind(this));\n\t\t\tthis.subscribe(\"row-added\", this.initializeRow.bind(this));\n\t\t\tthis.subscribe(\"table-redrawing\", this.resizeHolderWidth.bind(this));\n\t\t\tthis.subscribe(\"column-resized\", this.resizeHolderWidth.bind(this));\n\t\t\tthis.subscribe(\"column-show\", this.resizeHolderWidth.bind(this));\n\t\t\tthis.subscribe(\"column-hide\", this.resizeHolderWidth.bind(this));\n\t\t}\n\n\t\tthis.resizeHolderWidth();\n\t}\n\n\tresizeHolderWidth(){\n\t\tthis.topElement.style.minWidth = this.table.columnManager.headersElement.offsetWidth + \"px\";\n\t}\n\n\tinitializeRows(){\n\t\tthis.table.rowManager.getRows().forEach((row) => {\n\t\t\tthis.initializeRow(row);\n\t\t});\n\t}\n\n\tinitializeRow(row){\n\t\tvar frozenRows = this.table.options.frozenRows,\n\t\trowType = typeof frozenRows;\n\n\t\tif(rowType === \"number\"){\n\t\t\tif(row.getPosition() && (row.getPosition() + this.rows.length) <= frozenRows){\n\t\t\t\tthis.freezeRow(row);\n\t\t\t}\n\t\t}else if(rowType === \"function\"){\n\t\t\tif(frozenRows.call(this.table, row.getComponent())){\n\t\t\t\tthis.freezeRow(row);\n\t\t\t}\n\t\t}else if(Array.isArray(frozenRows)){\n\t\t\tif(frozenRows.includes(row.data[this.options(\"frozenRowsField\")])){\n\t\t\t\tthis.freezeRow(row);\n\t\t\t}\n\t\t}\n\t}\n\n\tisRowFrozen(row){\n\t\tvar index = this.rows.indexOf(row);\n\t\treturn index > -1;\n\t}\n\n\tisFrozen(){\n\t\treturn !!this.rows.length;\n\t}\n\n\tvisibleRows(viewable, rows){\n\t\tthis.rows.forEach((row) => {\n\t\t\trows.push(row);\n\t\t});\n\n\t\treturn rows;\n\t}\n\n\t//filter frozen rows out of display data\n\tgetRows(rows){\n\t\tvar output = rows.slice(0);\n\n\t\tthis.rows.forEach(function(row){\n\t\t\tvar index = output.indexOf(row);\n\n\t\t\tif(index > -1){\n\t\t\t\toutput.splice(index, 1);\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\tfreezeRow(row){\n\t\tif(!row.modules.frozen){\n\t\t\trow.modules.frozen = true;\n\t\t\tthis.topElement.appendChild(row.getElement());\n\t\t\trow.initialize();\n\t\t\trow.normalizeHeight();\n\t\t\n\t\t\tthis.rows.push(row);\n\n\t\t\tthis.refreshData(false, \"display\");\n\n\t\t\tthis.table.rowManager.adjustTableSize();\n\n\t\t\tthis.styleRows();\n\n\t\t}else {\n\t\t\tconsole.warn(\"Freeze Error - Row is already frozen\");\n\t\t}\n\t}\n\n\tunfreezeRow(row){\n\t\tif(row.modules.frozen){\n\n\t\t\trow.modules.frozen = false;\n\n\t\t\tthis.detachRow(row);\n\n\t\t\tthis.table.rowManager.adjustTableSize();\n\n\t\t\tthis.refreshData(false, \"display\");\n\n\t\t\tif(this.rows.length){\n\t\t\t\tthis.styleRows();\n\t\t\t}\n\n\t\t}else {\n\t\t\tconsole.warn(\"Freeze Error - Row is already unfrozen\");\n\t\t}\n\t}\n\n\tdetachRow(row){\n\t\tvar index = this.rows.indexOf(row);\n\n\t\tif(index > -1){\n\t\t\tvar rowEl = row.getElement();\n\n\t\t\tif(rowEl.parentNode){\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t}\n\n\t\t\tthis.rows.splice(index, 1);\n\t\t}\n\t}\n\n\tstyleRows(row){\n\t\tthis.rows.forEach((row, i) => {\n\t\t\tthis.table.rowManager.styleRow(row, i);\n\t\t});\n\t}\n}\n\n//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\n//Group functions\nclass Group{\n\t\n\tconstructor(groupManager, parent, level, key, field, generator, oldGroup){\n\t\tthis.groupManager = groupManager;\n\t\tthis.parent = parent;\n\t\tthis.key = key;\n\t\tthis.level = level;\n\t\tthis.field = field;\n\t\tthis.hasSubGroups = level < (groupManager.groupIDLookups.length - 1);\n\t\tthis.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;\n\t\tthis.type = \"group\"; //type of element\n\t\tthis.old = oldGroup;\n\t\tthis.rows = [];\n\t\tthis.groups = [];\n\t\tthis.groupList = [];\n\t\tthis.generator = generator;\n\t\tthis.element = false;\n\t\tthis.elementContents = false;\n\t\tthis.height = 0;\n\t\tthis.outerHeight = 0;\n\t\tthis.initialized = false;\n\t\tthis.calcs = {};\n\t\tthis.initialized = false;\n\t\tthis.modules = {};\n\t\tthis.arrowElement = false;\n\t\t\n\t\tthis.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0]);\n\t\t\n\t\tthis.component = null;\n\t\t\n\t\tthis.createElements();\n\t\tthis.addBindings();\n\t\t\n\t\tthis.createValueGroups();\n\t}\n\t\n\twipe(elementsOnly){\n\t\tif(!elementsOnly){\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\t\tgroup.wipe();\n\t\t\t\t});\n\t\t\t}else {\n\t\t\t\tthis.rows.forEach((row) => {\n\t\t\t\t\tif(row.modules){\n\t\t\t\t\t\tdelete row.modules.group;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.element = false;\n\t\tthis.arrowElement = false;\n\t\tthis.elementContents = false;\n\t}\n\t\n\tcreateElements(){\n\t\tvar arrow = document.createElement(\"div\");\n\t\tarrow.classList.add(\"tabulator-arrow\");\n\t\t\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-row\");\n\t\tthis.element.classList.add(\"tabulator-group\");\n\t\tthis.element.classList.add(\"tabulator-group-level-\" + this.level);\n\t\tthis.element.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\tthis.arrowElement = document.createElement(\"div\");\n\t\tthis.arrowElement.classList.add(\"tabulator-group-toggle\");\n\t\tthis.arrowElement.appendChild(arrow);\n\t\t\n\t\t//setup movable rows\n\t\tif(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists(\"moveRow\")){\n\t\t\tthis.groupManager.table.modules.moveRow.initializeGroupHeader(this);\n\t\t}\n\t}\n\t\n\tcreateValueGroups(){\n\t\tvar level = this.level + 1;\n\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\n\t\t\tthis.groupManager.allowedValues[level].forEach((value) => {\n\t\t\t\tthis._createGroup(value, level);\n\t\t\t});\n\t\t}\n\t}\n\t\n\taddBindings(){\n\t\tvar toggleElement;\n\t\t\n\t\tif(this.groupManager.table.options.groupToggleElement){\n\t\t\ttoggleElement = this.groupManager.table.options.groupToggleElement == \"arrow\" ? this.arrowElement : this.element;\n\t\t\t\n\t\t\ttoggleElement.addEventListener(\"click\", (e) => {\n\t\t\t\tif(this.groupManager.table.options.groupToggleElement === \"arrow\"){\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t}\n\n\t\t\t\t//allow click event to propagate before toggling visibility\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.toggleVisibility();\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\t\n\t_createGroup(groupID, level){\n\t\tvar groupKey = level + \"_\" + groupID;\n\t\tvar group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);\n\t\t\n\t\tthis.groups[groupKey] = group;\n\t\tthis.groupList.push(group);\n\t}\n\t\n\t_addRowToGroup(row){\n\t\t\n\t\tvar level = this.level + 1;\n\t\t\n\t\tif(this.hasSubGroups){\n\t\t\tvar groupID = this.groupManager.groupIDLookups[level].func(row.getData()),\n\t\t\tgroupKey = level + \"_\" + groupID;\n\t\t\t\n\t\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\n\t\t\t\tif(this.groups[groupKey]){\n\t\t\t\t\tthis.groups[groupKey].addRow(row);\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tif(!this.groups[groupKey]){\n\t\t\t\t\tthis._createGroup(groupID, level);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.groups[groupKey].addRow(row);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_addRow(row){\n\t\tthis.rows.push(row);\n\t\trow.modules.group = this;\n\t}\n\t\n\tinsertRow(row, to, after){\n\t\tvar data = this.conformRowData({});\n\t\t\n\t\trow.updateData(data);\n\t\t\n\t\tvar toIndex = this.rows.indexOf(to);\n\t\t\n\t\tif(toIndex > -1){\n\t\t\tif(after){\n\t\t\t\tthis.rows.splice(toIndex+1, 0, row);\n\t\t\t}else {\n\t\t\t\tthis.rows.splice(toIndex, 0, row);\n\t\t\t}\n\t\t}else {\n\t\t\tif(after){\n\t\t\t\tthis.rows.push(row);\n\t\t\t}else {\n\t\t\t\tthis.rows.unshift(row);\n\t\t\t}\n\t\t}\n\t\t\n\t\trow.modules.group = this;\n\t\t\n\t\t// this.generateGroupHeaderContents();\n\t\t\n\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\n\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\n\t\t}\n\t\t\n\t\tthis.groupManager.updateGroupRows(true);\n\t}\n\t\n\tscrollHeader(left){\n\t\tif(this.arrowElement){\n\t\t\tthis.arrowElement.style.marginLeft = left;\n\t\t\t\n\t\t\tthis.groupList.forEach(function(child){\n\t\t\t\tchild.scrollHeader(left);\n\t\t\t});\n\t\t}\n\t}\n\t\n\tgetRowIndex(row){}\n\t\n\t//update row data to match grouping constraints\n\tconformRowData(data){\n\t\tif(this.field){\n\t\t\tdata[this.field] = this.key;\n\t\t}else {\n\t\t\tconsole.warn(\"Data Conforming Error - Cannot conform row data to match new group as groupBy is a function\");\n\t\t}\n\t\t\n\t\tif(this.parent){\n\t\t\tdata = this.parent.conformRowData(data);\n\t\t}\n\t\t\n\t\treturn data;\n\t}\n\t\n\tremoveRow(row){\n\t\tvar index = this.rows.indexOf(row);\n\t\tvar el = row.getElement();\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.rows.splice(index, 1);\n\t\t}\n\t\t\n\t\tif(!this.groupManager.table.options.groupValues && !this.rows.length){\n\t\t\tif(this.parent){\n\t\t\t\tthis.parent.removeGroup(this);\n\t\t\t}else {\n\t\t\t\tthis.groupManager.removeGroup(this);\n\t\t\t}\t\t\n\t\t\t\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t\t\n\t\t}else {\n\t\t\t\n\t\t\tif(el.parentNode){\n\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t}\n\t\t\t\n\t\t\tif(!this.groupManager.blockRedraw){\n\t\t\t\tthis.generateGroupHeaderContents();\n\t\t\t\t\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\n\t\t\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t}\n\t\n\tremoveGroup(group){\n\t\tvar groupKey = group.level + \"_\" + group.key,\n\t\tindex;\n\t\t\n\t\tif(this.groups[groupKey]){\n\t\t\tdelete this.groups[groupKey];\n\t\t\t\n\t\t\tindex = this.groupList.indexOf(group);\n\t\t\t\n\t\t\tif(index > -1){\n\t\t\t\tthis.groupList.splice(index, 1);\n\t\t\t}\n\t\t\t\n\t\t\tif(!this.groupList.length){\n\t\t\t\tif(this.parent){\n\t\t\t\t\tthis.parent.removeGroup(this);\n\t\t\t\t}else {\n\t\t\t\t\tthis.groupManager.removeGroup(this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tgetHeadersAndRows(){\n\t\tvar output = [];\n\t\t\n\t\toutput.push(this);\n\t\t\n\t\tthis._visSet();\n\t\t\n\t\t\n\t\tif(this.calcs.top){\n\t\t\tthis.calcs.top.detachElement();\n\t\t\tthis.calcs.top.deleteCells();\n\t\t}\n\t\t\n\t\tif(this.calcs.bottom){\n\t\t\tthis.calcs.bottom.detachElement();\n\t\t\tthis.calcs.bottom.deleteCells();\n\t\t}\n\t\t\n\t\t\n\t\t\n\t\tif(this.visible){\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\t\toutput = output.concat(group.getHeadersAndRows());\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else {\n\t\t\t\tif(this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\n\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\n\t\t\t\t\toutput.push(this.calcs.top);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput = output.concat(this.rows);\n\t\t\t\t\n\t\t\t\tif(this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\n\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\n\t\t\t\t\toutput.push(this.calcs.bottom);\n\t\t\t\t}\n\t\t\t}\n\t\t}else {\n\t\t\tif(!this.groupList.length && this.groupManager.table.options.columnCalcs != \"table\"){\n\t\t\t\t\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\")){\n\t\t\t\t\tif(this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\n\t\t\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\n\t\t\t\t\t\t\toutput.push(this.calcs.top);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\n\t\t\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\n\t\t\t\t\t\t\toutput.push(this.calcs.bottom);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetData(visible, transform){\n\t\tvar output = [];\n\t\t\n\t\tthis._visSet();\n\t\t\n\t\tif(!visible || (visible && this.visible)){\n\t\t\tthis.rows.forEach((row) => {\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetRowCount(){\n\t\tvar count = 0;\n\t\t\n\t\tif(this.groupList.length){\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\tcount += group.getRowCount();\n\t\t\t});\n\t\t}else {\n\t\t\tcount = this.rows.length;\n\t\t}\n\t\treturn count;\n\t}\n\n\t\n\ttoggleVisibility(){\n\t\tif(this.visible){\n\t\t\tthis.hide();\n\t\t}else {\n\t\t\tthis.show();\n\t\t}\n\t}\n\t\n\thide(){\n\t\tthis.visible = false;\n\t\t\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"basic\" && !this.groupManager.table.options.pagination){\n\t\t\t\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\n\t\t\t\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\t\t\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\n\t\t\t\t\t\n\t\t\t\t\trows.forEach((row) => {\n\t\t\t\t\t\trow.detachElement();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else {\n\t\t\t\tthis.rows.forEach((row) => {\n\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t\t\n\t\t}else {\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t}\n\t\t\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), false);\n\t}\n\t\n\tshow(){\n\t\tthis.visible = true;\n\t\t\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"basic\" && !this.groupManager.table.options.pagination){\n\t\t\t\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\n\t\t\t\n\t\t\tvar prev = this.generateElement();\n\t\t\t\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\n\t\t\t\t\t\n\t\t\t\t\trows.forEach((row) => {\n\t\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\n\t\t\t\t\t\trow.initialize();\n\t\t\t\t\t\tprev = rowEl;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else {\n\t\t\t\tthis.rows.forEach((row) => {\n\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\n\t\t\t\t\trow.initialize();\n\t\t\t\t\tprev = rowEl;\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t}else {\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t}\n\t\t\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), true);\n\t}\n\t\n\t_visSet(){\n\t\tvar data = [];\n\t\t\n\t\tif(typeof this.visible == \"function\"){\n\t\t\t\n\t\t\tthis.rows.forEach(function(row){\n\t\t\t\tdata.push(row.getData());\n\t\t\t});\n\t\t\t\n\t\t\tthis.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());\n\t\t}\n\t}\n\t\n\tgetRowGroup(row){\n\t\tvar match = false;\n\t\tif(this.groupList.length){\n\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\tvar result = group.getRowGroup(row);\n\t\t\t\t\n\t\t\t\tif(result){\n\t\t\t\t\tmatch = result;\n\t\t\t\t}\n\t\t\t});\n\t\t}else {\n\t\t\tif(this.rows.find(function(item){\n\t\t\t\treturn item === row;\n\t\t\t})){\n\t\t\t\tmatch = this;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn match;\n\t}\n\t\n\tgetSubGroups(component){\n\t\tvar output = [];\n\t\t\n\t\tthis.groupList.forEach(function(child){\n\t\t\toutput.push(component ? child.getComponent() : child);\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetRows(component, includeChildren){\n\t\tvar output = [];\n\t\t\n\t\tif(includeChildren && this.groupList.length){\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\toutput = output.concat(group.getRows(component, includeChildren));\n\t\t\t});\n\t\t}else {\n\t\t\tthis.rows.forEach(function(row){\n\t\t\t\toutput.push(component ? row.getComponent() : row);\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgenerateGroupHeaderContents(){\n\t\tvar data = [];\n\t\t\n\t\tvar rows = this.getRows(false, true);\n\t\t\n\t\trows.forEach(function(row){\n\t\t\tdata.push(row.getData());\n\t\t});\n\t\t\n\t\tthis.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());\n\t\t\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\t\t\n\t\tif(typeof this.elementContents === \"string\"){\n\t\t\tthis.element.innerHTML = this.elementContents;\n\t\t}else {\n\t\t\tthis.element.appendChild(this.elementContents);\n\t\t}\n\t\t\n\t\tthis.element.insertBefore(this.arrowElement, this.element.firstChild);\n\t}\n\t\n\tgetPath(path = []) {\n\t\tpath.unshift(this.key);\n\t\tif(this.parent) {\n\t\t\tthis.parent.getPath(path);\n\t\t}\n\t\treturn path;\n\t}\n\t\n\t////////////// Standard Row Functions //////////////\n\t\n\tgetElement(){\n\t\treturn this.elementContents ? this.element : this.generateElement();\n\t}\n\t\n\tgenerateElement(){\n\t\tthis.addBindings = false;\n\t\t\n\t\tthis._visSet();\n\t\t\n\t\tif(this.visible){\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\n\t\t}else {\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\n\t\t}\n\t\t\n\t\tfor(var i = 0; i < this.element.childNodes.length; ++i){\n\t\t\tthis.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);\n\t\t}\n\t\t\n\t\tthis.generateGroupHeaderContents();\n\t\t\n\t\t// this.addBindings();\n\t\t\n\t\treturn this.element;\n\t}\n\t\n\tdetachElement(){\n\t\tif (this.element && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t}\n\t\n\t//normalize the height of elements in the row\n\tnormalizeHeight(){\n\t\tthis.setHeight(this.element.clientHeight);\n\t}\n\t\n\tinitialize(force){\n\t\tif(!this.initialized || force){\n\t\t\tthis.normalizeHeight();\n\t\t\tthis.initialized = true;\n\t\t}\n\t}\n\t\n\treinitialize(){\n\t\tthis.initialized = false;\n\t\tthis.height = 0;\n\t\t\n\t\tif(Helpers.elVisible(this.element)){\n\t\t\tthis.initialize(true);\n\t\t}\n\t}\n\t\n\tsetHeight(height){\n\t\tif(this.height != height){\n\t\t\tthis.height = height;\n\t\t\tthis.outerHeight = this.element.offsetHeight;\n\t\t}\n\t}\n\t\n\t//return rows outer height\n\tgetHeight(){\n\t\treturn this.outerHeight;\n\t}\n\t\n\tgetGroup(){\n\t\treturn this;\n\t}\n\t\n\treinitializeHeight(){}\n\t\n\tcalcHeight(){}\n\t\n\tsetCellHeight(){}\n\t\n\tclearCellHeight(){}\n\t\n\tdeinitializeHeight(){}\n\n\trendered(){}\n\t\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new GroupComponent(this);\n\t\t}\n\t\t\n\t\treturn this.component;\n\t}\n}\n\nclass GroupRows extends Module{\n\n\tstatic moduleName = \"groupRows\";\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) + \"<span>(\" + count + \" \" + ((count === 1) ? langValue : lang.groups.items) + \")</span>\";\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});\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\nvar defaultUndoers = {\n\tcellEdit: function(action){\n\t\taction.component.setValueProcessData(action.data.oldValue);\n\t\taction.component.cellRendered();\n\t},\n\n\trowAdd: function(action){\n\t\taction.component.deleteActual();\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowDelete: function(action){\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\n\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t\t}\n\n\t\tthis._rebindRow(action.component, newRow);\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowMove: function(action){\n\t\tvar after = (action.data.posFrom - action.data.posTo) > 0;\n\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.getRowFromPosition(action.data.posFrom), after);\n\n\t\tthis.table.rowManager.regenerateRowPositions();\n\t\tthis.table.rowManager.reRenderInPosition();\n\t},\n};\n\nvar defaultRedoers = {\n\tcellEdit: function(action){\n\t\taction.component.setValueProcessData(action.data.newValue);\n\t\taction.component.cellRendered();\n\t},\n\n\trowAdd: function(action){\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\n\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t\t}\n\n\t\tthis._rebindRow(action.component, newRow);\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowDelete:function(action){\n\t\taction.component.deleteActual();\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowMove: function(action){\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.getRowFromPosition(action.data.posTo), action.data.after);\n\t\t\n\t\tthis.table.rowManager.regenerateRowPositions();\n\t\tthis.table.rowManager.reRenderInPosition();\n\t},\n};\n\nvar bindings$1 = {\r\n\tundo:[\"ctrl + 90\", \"meta + 90\"],\r\n\tredo:[\"ctrl + 89\", \"meta + 89\"],\r\n};\n\nvar actions$1 = {\r\n\tundo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.undo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tredo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.redo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\n\nvar extensions$3 = {\r\n\tkeybindings:{\r\n\t\tbindings:bindings$1,\r\n\t\tactions:actions$1\r\n\t},\r\n};\n\nclass History extends Module{\n\n\tstatic moduleName = \"history\";\n\tstatic moduleExtensions = extensions$3;\n\n\t//load defaults\n\tstatic undoers = defaultUndoers;\n\tstatic redoers = defaultRedoers;\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.history = [];\n\t\tthis.index = -1;\n\n\t\tthis.registerTableOption(\"history\", false); //enable edit history\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.history){\n\t\t\tthis.subscribe(\"cell-value-updated\", this.cellUpdated.bind(this));\n\t\t\tthis.subscribe(\"cell-delete\", this.clearComponentHistory.bind(this));\n\t\t\tthis.subscribe(\"row-delete\", this.rowDeleted.bind(this));\n\t\t\tthis.subscribe(\"rows-wipe\", this.clear.bind(this));\n\t\t\tthis.subscribe(\"row-added\", this.rowAdded.bind(this));\n\t\t\tthis.subscribe(\"row-move\", this.rowMoved.bind(this));\n\t\t}\n\n\t\tthis.registerTableFunction(\"undo\", this.undo.bind(this));\n\t\tthis.registerTableFunction(\"redo\", this.redo.bind(this));\n\t\tthis.registerTableFunction(\"getHistoryUndoSize\", this.getHistoryUndoSize.bind(this));\n\t\tthis.registerTableFunction(\"getHistoryRedoSize\", this.getHistoryRedoSize.bind(this));\n\t\tthis.registerTableFunction(\"clearHistory\", this.clear.bind(this));\n\t}\n\n\trowMoved(from, to, after){\n\t\tthis.action(\"rowMove\", from, {posFrom:from.getPosition(), posTo:to.getPosition(), to:to, after:after});\n\t}\n\n\trowAdded(row, data, pos, index){\n\t\tthis.action(\"rowAdd\", row, {data:data, pos:pos, index:index});\n\t}\n\n\trowDeleted(row){\n\t\tvar index, rows;\n\n\t\tif(this.table.options.groupBy){\n\n\t\t\trows = row.getComponent().getGroup()._getSelf().rows;\n\t\t\tindex = rows.indexOf(row);\n\n\t\t\tif(index){\n\t\t\t\tindex = rows[index-1];\n\t\t\t}\n\t\t}else {\n\t\t\tindex = row.table.rowManager.getRowIndex(row);\n\n\t\t\tif(index){\n\t\t\t\tindex = row.table.rowManager.rows[index-1];\n\t\t\t}\n\t\t}\n\n\t\tthis.action(\"rowDelete\", row, {data:row.getData(), pos:!index, index:index});\n\t}\n\n\tcellUpdated(cell){\n\t\tthis.action(\"cellEdit\", cell, {oldValue:cell.oldValue, newValue:cell.value});\n\t}\n\n\tclear(){\n\t\tthis.history = [];\n\t\tthis.index = -1;\n\t}\n\n\taction(type, component, data){\n\t\tthis.history = this.history.slice(0, this.index + 1);\n\n\t\tthis.history.push({\n\t\t\ttype:type,\n\t\t\tcomponent:component,\n\t\t\tdata:data,\n\t\t});\n\n\t\tthis.index ++;\n\t}\n\n\tgetHistoryUndoSize(){\n\t\treturn this.index + 1;\n\t}\n\n\tgetHistoryRedoSize(){\n\t\treturn this.history.length - (this.index + 1);\n\t}\n\n\tclearComponentHistory(component){\n\t\tvar index = this.history.findIndex(function(item){\n\t\t\treturn item.component === component;\n\t\t});\n\n\t\tif(index > -1){\n\t\t\tthis.history.splice(index, 1);\n\t\t\tif(index <= this.index){\n\t\t\t\tthis.index--;\n\t\t\t}\n\n\t\t\tthis.clearComponentHistory(component);\n\t\t}\n\t}\n\n\tundo(){\n\t\tif(this.index > -1){\n\t\t\tlet action = this.history[this.index];\n\n\t\t\tHistory.undoers[action.type].call(this, action);\n\n\t\t\tthis.index--;\n\n\t\t\tthis.dispatchExternal(\"historyUndo\", action.type, action.component.getComponent(), action.data);\n\n\t\t\treturn true;\n\t\t}else {\n\t\t\tconsole.warn(this.options(\"history\") ? \"History Undo Error - No more history to undo\" : \"History module not enabled\");\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tredo(){\n\t\tif(this.history.length-1 > this.index){\n\n\t\t\tthis.index++;\n\n\t\t\tlet action = this.history[this.index];\n\n\t\t\tHistory.redoers[action.type].call(this, action);\n\n\t\t\tthis.dispatchExternal(\"historyRedo\", action.type, action.component.getComponent(), action.data);\n\n\t\t\treturn true;\n\t\t}else {\n\t\t\tconsole.warn(this.options(\"history\") ? \"History Redo Error - No more history to redo\" : \"History module not enabled\");\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//rebind rows to new element after deletion\n\t_rebindRow(oldRow, newRow){\n\t\tthis.history.forEach(function(action){\n\t\t\tif(action.component instanceof Row){\n\t\t\t\tif(action.component === oldRow){\n\t\t\t\t\taction.component = newRow;\n\t\t\t\t}\n\t\t\t}else if(action.component instanceof Cell){\n\t\t\t\tif(action.component.row === oldRow){\n\t\t\t\t\tvar field = action.component.column.getField();\n\n\t\t\t\t\tif(field){\n\t\t\t\t\t\taction.component = newRow.getCell(field);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nclass HtmlTableImport extends Module{\n\n\tstatic moduleName = \"htmlTableImport\";\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.fieldIndex = [];\n\t\tthis.hasIndex = false;\n\t}\n\n\tinitialize(){\n\t\tthis.tableElementCheck();\n\t}\n\n\ttableElementCheck(){\n\t\tif(this.table.originalElement && this.table.originalElement.tagName === \"TABLE\"){\n\t\t\tif(this.table.originalElement.childNodes.length){\n\t\t\t\tthis.parseTable();\n\t\t\t}else {\n\t\t\t\tconsole.warn(\"Unable to parse data from empty table tag, Tabulator should be initialized on a div tag unless importing data from a table element.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tparseTable(){\n\t\tvar element = this.table.originalElement,\n\t\toptions = this.table.options,\n\t\theaders = element.getElementsByTagName(\"th\"),\n\t\trows = element.getElementsByTagName(\"tbody\")[0],\n\t\tdata = [];\n\n\t\tthis.hasIndex = false;\n\n\t\tthis.dispatchExternal(\"htmlImporting\");\n\n\t\trows = rows ? rows.getElementsByTagName(\"tr\") : [];\n\n\t\t//check for Tabulator inline options\n\t\tthis._extractOptions(element, options);\n\n\t\tif(headers.length){\n\t\t\tthis._extractHeaders(headers, rows);\n\t\t}else {\n\t\t\tthis._generateBlankHeaders(headers, rows);\n\t\t}\n\n\t\t//iterate through table rows and build data set\n\t\tfor(var index = 0; index < rows.length; index++){\n\t\t\tvar row = rows[index],\n\t\t\tcells = row.getElementsByTagName(\"td\"),\n\t\t\titem = {};\n\n\t\t\t//create index if the don't exist in table\n\t\t\tif(!this.hasIndex){\n\t\t\t\titem[options.index] = index;\n\t\t\t}\n\n\t\t\tfor(var i = 0; i < cells.length; i++){\n\t\t\t\tvar cell = cells[i];\n\t\t\t\tif(typeof this.fieldIndex[i] !== \"undefined\"){\n\t\t\t\t\titem[this.fieldIndex[i]] = cell.innerHTML;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//add row data to item\n\t\t\tdata.push(item);\n\t\t}\n\n\t\toptions.data = data;\n\n\t\tthis.dispatchExternal(\"htmlImported\");\n\t}\n\n\t//extract tabulator attribute options\n\t_extractOptions(element, options, defaultOptions){\n\t\tvar attributes = element.attributes;\n\t\tvar optionsArr = defaultOptions ? Object.keys(defaultOptions) : Object.keys(options);\n\t\tvar optionsList = {};\n\n\t\toptionsArr.forEach((item) => {\n\t\t\toptionsList[item.toLowerCase()] = item;\n\t\t});\n\n\t\tfor(var index in attributes){\n\t\t\tvar attrib = attributes[index];\n\t\t\tvar name;\n\n\t\t\tif(attrib && typeof attrib == \"object\" && attrib.name && attrib.name.indexOf(\"tabulator-\") === 0){\n\t\t\t\tname = attrib.name.replace(\"tabulator-\", \"\");\n\n\t\t\t\tif(typeof optionsList[name] !== \"undefined\"){\n\t\t\t\t\toptions[optionsList[name]] = this._attribValue(attrib.value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t//get value of attribute\n\t_attribValue(value){\n\t\tif(value === \"true\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tif(value === \"false\"){\n\t\t\treturn false;\n\t\t}\n\n\t\treturn value;\n\t}\n\n\t//find column if it has already been defined\n\t_findCol(title){\n\t\tvar match = this.table.options.columns.find((column) => {\n\t\t\treturn column.title === title;\n\t\t});\n\n\t\treturn match || false;\n\t}\n\n\t//extract column from headers\n\t_extractHeaders(headers, rows){\n\t\tfor(var index = 0; index < headers.length; index++){\n\t\t\tvar header = headers[index],\n\t\t\texists = false,\n\t\t\tcol = this._findCol(header.textContent),\n\t\t\twidth;\n\n\t\t\tif(col){\n\t\t\t\texists = true;\n\t\t\t}else {\n\t\t\t\tcol = {title:header.textContent.trim()};\n\t\t\t}\n\n\t\t\tif(!col.field) {\n\t\t\t\tcol.field = header.textContent.trim().toLowerCase().replaceAll(\" \", \"_\");\n\t\t\t}\n\n\t\t\twidth = header.getAttribute(\"width\");\n\n\t\t\tif(width && !col.width)\t{\n\t\t\t\tcol.width = width;\n\t\t\t}\n\n\t\t\t//check for Tabulator inline options\n\t\t\tthis._extractOptions(header, col, this.table.columnManager.optionsList.registeredDefaults);\n\n\t\t\tthis.fieldIndex[index] = col.field;\n\n\t\t\tif(col.field == this.table.options.index){\n\t\t\t\tthis.hasIndex = true;\n\t\t\t}\n\n\t\t\tif(!exists){\n\t\t\t\tthis.table.options.columns.push(col);\n\t\t\t}\n\n\t\t}\n\t}\n\n\t//generate blank headers\n\t_generateBlankHeaders(headers, rows){\n\t\tfor(var index = 0; index < headers.length; index++){\n\t\t\tvar header = headers[index],\n\t\t\tcol = {title:\"\", field:\"col\" + index};\n\n\t\t\tthis.fieldIndex[index] = col.field;\n\n\t\t\tvar width = header.getAttribute(\"width\");\n\n\t\t\tif(width){\n\t\t\t\tcol.width = width;\n\t\t\t}\n\n\t\t\tthis.table.options.columns.push(col);\n\t\t}\n\t}\n}\n\nfunction csv(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\nfunction json(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}\n\nfunction array$1 (input){\n\treturn input;\n}\n\nfunction xlsx(input){\r\n\tvar XLSXLib = this.dependencyRegistry.lookup(\"XLSX\"),\r\n\tworkbook2 = XLSXLib.read(input),\r\n\tsheet = workbook2.Sheets[workbook2.SheetNames[0]];\r\n\t\r\n\treturn XLSXLib.utils.sheet_to_json(sheet, {header: 1 });\r\n}\n\nvar defaultImporters = {\n\tcsv:csv,\n\tjson:json,\n\tarray:array$1,\n\txlsx:xlsx,\n};\n\nclass Import extends Module{\n\t\n\tstatic moduleName = \"import\";\n\t\n\t//load defaults\n\tstatic importers = defaultImporters;\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.registerTableOption(\"importFormat\");\n\t\tthis.registerTableOption(\"importReader\", \"text\");\n\t\tthis.registerTableOption(\"importHeaderTransform\");\n\t\tthis.registerTableOption(\"importValueTransform\");\n\t\tthis.registerTableOption(\"importDataValidator\");\n\t\tthis.registerTableOption(\"importFileValidator\");\n\t}\n\t\n\tinitialize(){\n\t\tthis.registerTableFunction(\"import\", this.importFromFile.bind(this));\n\t\t\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\t\n\tloadDataCheck(data){\n\t\treturn this.table.options.importFormat && (typeof data === \"string\" || (Array.isArray(data) && data.length && Array.isArray(data)));\n\t}\n\t\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\t\n\tlookupImporter(importFormat){\n\t\tvar importer;\n\t\t\n\t\tif(!importFormat){\n\t\t\timportFormat = this.table.options.importFormat;\n\t\t}\n\t\t\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\t\t\n\t\tif(!importer){\n\t\t\tconsole.error(\"Import Error - Importer not found:\", importFormat);\n\t\t}\n\t\t\n\t\treturn importer;\n\t}\n\t\n\timportFromFile(importFormat, extension, importReader){\n\t\tvar importer = this.lookupImporter(importFormat);\n\t\t\n\t\tif(importer){\n\t\t\treturn this.pickFile(extension, importReader)\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.mutateData.bind(this))\n\t\t\t\t.then(this.validateData.bind(this))\n\t\t\t\t.then(this.setData.bind(this))\n\t\t\t\t.catch((err) => {\n\t\t\t\t\tthis.dispatch(\"import-error\", err);\n\t\t\t\t\tthis.dispatchExternal(\"importError\", err);\n\t\t\t\t\t\n\t\t\t\t\tconsole.error(\"Import Error:\", err || \"Unable to import file\");\n\t\t\t\t\t\n\t\t\t\t\tthis.table.dataLoader.alertError();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.table.dataLoader.clearAlert();\n\t\t\t\t\t}, 3000);\n\t\t\t\t\t\n\t\t\t\t\treturn Promise.reject(err);\n\t\t\t\t});\n\t\t}\n\t}\n\t\n\tpickFile(extensions, importReader){\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\t\t\t\n\t\t\tinput.addEventListener(\"change\", (e) => {\n\t\t\t\tvar file = input.files[0],\n\t\t\t\treader = new FileReader(),\n\t\t\t\tvalid = this.validateFile(file);\n\n\t\t\t\tif(valid === true){\n\t\t\t\t\n\t\t\t\t\tthis.dispatch(\"import-importing\", input.files);\n\t\t\t\t\tthis.dispatchExternal(\"importImporting\", input.files);\n\t\t\t\t\n\t\t\t\t\tswitch(importReader || this.table.options.importReader){\n\t\t\t\t\t\tcase \"buffer\":\n\t\t\t\t\t\t\treader.readAsArrayBuffer(file);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\n\t\t\t\t\t\tcase \"binary\":\n\t\t\t\t\t\t\treader.readAsBinaryString(file);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\n\t\t\t\t\t\tcase \"url\":\n\t\t\t\t\t\t\treader.readAsDataURL(file);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\n\t\t\t\t\t\tcase \"text\":\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treader.readAsText(file);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treader.onload = (e) => {\n\t\t\t\t\t\tresolve(reader.result);\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\treader.onerror = (e) => {\n\t\t\t\t\t\tconsole.warn(\"File Load Error - Unable to read file\");\n\t\t\t\t\t\treject(e);\n\t\t\t\t\t};\n\t\t\t\t}else {\n\t\t\t\t\treject(valid);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tthis.dispatch(\"import-choose\");\n\t\t\tthis.dispatchExternal(\"importChoose\");\n\t\t\tinput.click();\n\t\t});\n\t}\n\t\n\timportData(importer, fileContents){\n\t\tvar data;\n\t\t\n\t\tthis.table.dataLoader.alertLoader();\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tdata = importer.call(this.table, fileContents);\n\t\t\t\t\n\t\t\t\tif(data instanceof Promise){\n\t\t\t\t\tresolve(data);\n\t\t\t\t}else {\n\t\t\t\t\tdata ? resolve(data) : reject();\n\t\t\t\t}\n\t\t\t}, 10);\n\t\t});\n\t}\n\t\n\tstructureData(parsedData){\n\t\tvar data = [];\n\t\t\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\t\t\t\n\t\t\treturn data;\n\t\t}else {\n\t\t\treturn parsedData;\n\t\t}\n\t}\n\t\n\tmutateData(data){\n\t\tvar output = [];\n\t\t\n\t\tif(Array.isArray(data)){\n\t\t\tdata.forEach((row) => {\n\t\t\t\toutput.push(this.table.modules.mutator.transformRow(row, \"import\"));\n\t\t\t});\n\t\t}else {\n\t\t\toutput = data;\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\ttransformHeader(headers){\n\t\tvar output = [];\n\t\t\n\t\tif(this.table.options.importHeaderTransform){\n\t\t\theaders.forEach((item) => {\n\t\t\t\toutput.push(this.table.options.importHeaderTransform.call(this.table, item, headers));\n\t\t\t});\n\t\t}else {\n\t\t\treturn headers;\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\ttransformData(row){\n\t\tvar output = [];\n\n\t\tif(this.table.options.importValueTransform){\n\t\t\trow.forEach((item) => {\n\t\t\t\toutput.push(this.table.options.importValueTransform.call(this.table, item, row));\n\t\t\t});\n\t\t}else {\n\t\t\treturn row;\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tstructureArrayToObject(parsedData){\n\t\tvar columns = this.transformHeader(parsedData.shift());\t\n\t\t\n\t\tvar data = parsedData.map((values) => {\n\t\t\tvar row = {};\n\n\t\t\tvalues = this.transformData(values);\n\t\t\t\n\t\t\tcolumns.forEach((key, i) => {\n\t\t\t\trow[key] = values[i];\n\t\t\t});\n\t\t\t\n\t\t\treturn row;\n\t\t});\n\t\t\n\t\treturn data;\n\t}\n\t\n\tstructureArrayToColumns(parsedData){\n\t\tvar data = [],\n\t\tfirstRow = this.transformHeader(parsedData[0]),\n\t\tcolumns = this.table.getColumns();\n\t\t\n\t\t//remove first row if it is the column names\n\t\tif(columns[0] && firstRow[0]){\n\t\t\tif(columns[0].getDefinition().title === firstRow[0]){\n\t\t\t\tparsedData.shift();\n\t\t\t}\n\t\t}\n\t\t\n\t\t//convert row arrays to objects\n\t\tparsedData.forEach((rowData) => {\n\t\t\tvar row = {};\n\n\t\t\trowData = this.transformData(rowData);\n\t\t\t\n\t\t\trowData.forEach((value, index) => {\n\t\t\t\tvar column = columns[index];\n\t\t\t\t\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\t\t\t\n\t\t\tdata.push(row);\n\t\t});\n\t\t\n\t\treturn data;\n\t}\n\n\tvalidateFile(file){\n\t\tif(this.table.options.importFileValidator){\n\t\t\treturn this.table.options.importFileValidator.call(this.table, file);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tvalidateData(data){\n\t\tvar result;\n\n\t\tif(this.table.options.importDataValidator){\n\t\t\tresult = this.table.options.importDataValidator.call(this.table, data);\n\n\t\t\tif(result === true){\n\t\t\t\treturn data;\n\t\t\t}else {\n\t\t\t\treturn Promise.reject(result);\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t}\n\t\n\tsetData(data){\n\t\tthis.dispatch(\"import-imported\", data);\n\t\tthis.dispatchExternal(\"importImported\", data);\n\t\t\n\t\tthis.table.dataLoader.clearAlert();\n\t\t\n\t\treturn this.table.setData(data);\n\t}\n}\n\nclass Interaction extends Module{\n\n\tstatic moduleName = \"interaction\";\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\nvar defaultBindings = {\n\tnavPrev:\"shift + 9\",\n\tnavNext:9,\n\tnavUp:38,\n\tnavDown:40,\n\tnavLeft:37,\n\tnavRight:39,\n\tscrollPageUp:33,\n\tscrollPageDown:34,\n\tscrollToStart:36,\n\tscrollToEnd:35,\n};\n\nvar defaultActions = {\n\tkeyBlock:function(e){\n\t\te.stopPropagation();\n\t\te.preventDefault();\n\t},\n\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\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\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\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\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\nclass Keybindings extends Module{\n\n\tstatic moduleName = \"keybindings\";\n\n\t//load defaults\n\tstatic bindings = defaultBindings;\n\tstatic actions = defaultActions;\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\nclass Menu extends Module{\n\n\tstatic moduleName = \"menu\";\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\t// this.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\t// if(!this.deprecationCheck(\"menuContainer\", \"popupContainer\")){\n\t\t// \tthis.table.options.popupContainer = this.table.options.menuContainer;\n\t\t// }\n\t}\t\n\t\n\tinitializeRowWatchers(){\n\t\tif(this.table.options.rowContextMenu){\n\t\t\tthis.subscribe(\"row-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\n\t\t\tthis.table.on(\"rowTapHold\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.rowClickMenu){\n\t\t\tthis.subscribe(\"row-click\", this.loadMenuEvent.bind(this, this.table.options.rowClickMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.rowDblClickMenu){\n\t\t\tthis.subscribe(\"row-dblclick\", this.loadMenuEvent.bind(this, this.table.options.rowDblClickMenu));\n\t\t}\n\t}\n\t\n\tinitializeGroupWatchers(){\n\t\tif(this.table.options.groupContextMenu){\n\t\t\tthis.subscribe(\"group-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\n\t\t\tthis.table.on(\"groupTapHold\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.groupClickMenu){\n\t\t\tthis.subscribe(\"group-click\", this.loadMenuEvent.bind(this, this.table.options.groupClickMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.groupDblClickMenu){\n\t\t\tthis.subscribe(\"group-dblclick\", this.loadMenuEvent.bind(this, this.table.options.groupDblClickMenu));\n\t\t}\n\t}\n\n\tinitializeColumn(column){\n\t\tvar\tdef = column.definition;\n\t\t\n\t\t//handle column events\n\t\tif(def.headerContextMenu && !this.columnSubscribers.headerContextMenu){\n\t\t\tthis.columnSubscribers.headerContextMenu = this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\");\n\t\t\tthis.subscribe(\"column-contextmenu\", this.columnSubscribers.headerContextMenu);\n\t\t\tthis.table.on(\"headerTapHold\", this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\"));\n\t\t}\n\t\t\n\t\tif(def.headerClickMenu && !this.columnSubscribers.headerClickMenu){\n\t\t\tthis.columnSubscribers.headerClickMenu = this.loadMenuTableColumnEvent.bind(this, \"headerClickMenu\");\n\t\t\tthis.subscribe(\"column-click\", this.columnSubscribers.headerClickMenu);\n\t\t}\n\t\t\n\t\tif(def.headerDblClickMenu && !this.columnSubscribers.headerDblClickMenu){\n\t\t\tthis.columnSubscribers.headerDblClickMenu = this.loadMenuTableColumnEvent.bind(this, \"headerDblClickMenu\");\n\t\t\tthis.subscribe(\"column-dblclick\", this.columnSubscribers.headerDblClickMenu);\n\t\t}\n\t\t\n\t\tif(def.headerMenu){\n\t\t\tthis.initializeColumnHeaderMenu(column);\n\t\t}\n\t\t\n\t\t//handle cell events\n\t\tif(def.contextMenu && !this.columnSubscribers.contextMenu){\n\t\t\tthis.columnSubscribers.contextMenu = this.loadMenuTableCellEvent.bind(this, \"contextMenu\");\n\t\t\tthis.subscribe(\"cell-contextmenu\", this.columnSubscribers.contextMenu);\n\t\t\tthis.table.on(\"cellTapHold\", this.loadMenuTableCellEvent.bind(this, \"contextMenu\"));\n\t\t}\n\t\t\n\t\tif(def.clickMenu && !this.columnSubscribers.clickMenu){\n\t\t\tthis.columnSubscribers.clickMenu = this.loadMenuTableCellEvent.bind(this, \"clickMenu\");\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.clickMenu);\n\t\t}\n\t\t\n\t\tif(def.dblClickMenu && !this.columnSubscribers.dblClickMenu){\n\t\t\tthis.columnSubscribers.dblClickMenu = this.loadMenuTableCellEvent.bind(this, \"dblClickMenu\");\n\t\t\tthis.subscribe(\"cell-dblclick\", this.columnSubscribers.dblClickMenu);\n\t\t}\n\t}\n\t\n\tinitializeColumnHeaderMenu(column){\n\t\tvar icon = column.definition.headerMenuIcon,\n\t\theaderMenuEl;\n\t\t\n\t\theaderMenuEl = document.createElement(\"span\");\n\t\theaderMenuEl.classList.add(\"tabulator-header-popup-button\");\n\t\t\n\t\tif(icon){\n\t\t\tif(typeof icon === \"function\"){\n\t\t\t\ticon = icon(column.getComponent());\n\t\t\t}\n\t\t\t\n\t\t\tif(icon instanceof HTMLElement){\n\t\t\t\theaderMenuEl.appendChild(icon);\n\t\t\t}else {\n\t\t\t\theaderMenuEl.innerHTML = icon;\n\t\t\t}\n\t\t}else {\n\t\t\theaderMenuEl.innerHTML = \"&vellip;\";\n\t\t}\n\t\t\n\t\theaderMenuEl.addEventListener(\"click\", (e) => {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tthis.loadMenuEvent(column.definition.headerMenu, e, column);\n\t\t});\n\t\t\n\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\n\t}\n\t\n\tloadMenuTableCellEvent(option, e, cell){\n\t\tif(cell._cell){\n\t\t\tcell = cell._cell;\n\t\t}\n\t\t\n\t\tif(cell.column.definition[option]){\n\t\t\tthis.loadMenuEvent(cell.column.definition[option], e, cell);\n\t\t}\n\t}\n\t\n\tloadMenuTableColumnEvent(option, e, column){\n\t\tif(column._column){\n\t\t\tcolumn = column._column;\n\t\t}\n\t\t\n\t\tif(column.definition[option]){\n\t\t\tthis.loadMenuEvent(column.definition[option], e, column);\n\t\t}\n\t}\n\t\n\tloadMenuEvent(menu, e, component){\n\t\tif(component._group){\n\t\t\tcomponent = component._group;\n\t\t}else if(component._row){\n\t\t\tcomponent = component._row;\n\t\t}\n\t\t\n\t\tmenu = typeof menu == \"function\" ? menu.call(this.table, e, component.getComponent()) : menu;\n\t\t\n\t\tthis.loadMenu(e, component, menu);\n\t}\n\t\n\tloadMenu(e, component, menu, parentEl, parentPopup){\n\t\tvar touch = !(e instanceof MouseEvent),\t\t\n\t\tmenuEl = document.createElement(\"div\"),\n\t\tpopup;\n\t\t\n\t\tmenuEl.classList.add(\"tabulator-menu\");\n\t\t\n\t\tif(!touch){\n\t\t\te.preventDefault();\n\t\t}\n\t\t\n\t\t//abort if no menu set\n\t\tif(!menu || !menu.length){\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif(!parentEl){\n\t\t\tif(this.nestedMenuBlock){\n\t\t\t\t//abort if child menu already open\n\t\t\t\tif(this.rootPopup){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tthis.nestedMenuBlock = setTimeout(() => {\n\t\t\t\t\tthis.nestedMenuBlock = false;\n\t\t\t\t}, 100);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.rootPopup){\n\t\t\t\tthis.rootPopup.hide();\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.rootPopup = popup = this.popup(menuEl);\n\t\t\t\n\t\t}else {\n\t\t\tpopup = parentPopup.child(menuEl);\n\t\t}\n\t\t\n\t\tmenu.forEach((item) => {\n\t\t\tvar itemEl = document.createElement(\"div\"),\n\t\t\tlabel = item.label,\n\t\t\tdisabled = item.disabled;\n\t\t\t\n\t\t\tif(item.separator){\n\t\t\t\titemEl.classList.add(\"tabulator-menu-separator\");\n\t\t\t}else {\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item\");\n\t\t\t\t\n\t\t\t\tif(typeof label == \"function\"){\n\t\t\t\t\tlabel = label.call(this.table, component.getComponent());\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(label instanceof Node){\n\t\t\t\t\titemEl.appendChild(label);\n\t\t\t\t}else {\n\t\t\t\t\titemEl.innerHTML = label;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(typeof disabled == \"function\"){\n\t\t\t\t\tdisabled = disabled.call(this.table, component.getComponent());\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(disabled){\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-disabled\");\n\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t});\n\t\t\t\t}else {\n\t\t\t\t\tif(item.menu && item.menu.length){\n\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tthis.loadMenu(e, component, item.menu, itemEl, popup);\n\t\t\t\t\t\t});\n\t\t\t\t\t}else {\n\t\t\t\t\t\tif(item.action){\n\t\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\titem.action(e, component.getComponent());\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(item.menu && item.menu.length){\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-submenu\");\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tmenuEl.appendChild(itemEl);\n\t\t});\n\t\t\n\t\tmenuEl.addEventListener(\"click\", (e) => {\n\t\t\tif(this.rootPopup){\n\t\t\t\tthis.rootPopup.hide();\n\t\t\t}\n\t\t});\n\t\t\n\t\tpopup.show(parentEl || e);\n\t\t\n\t\tif(popup === this.rootPopup){\n\t\t\tthis.rootPopup.hideOnBlur(() => {\n\t\t\t\tthis.rootPopup = null;\n\t\t\t\t\n\t\t\t\tif(this.currentComponent){\n\t\t\t\t\tthis.dispatch(\"menu-closed\", menu, popup);\n\t\t\t\t\tthis.dispatchExternal(\"menuClosed\", this.currentComponent.getComponent());\n\t\t\t\t\tthis.currentComponent = null;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tthis.currentComponent = component;\n\t\t\t\n\t\t\tthis.dispatch(\"menu-opened\", menu, popup);\n\t\t\tthis.dispatchExternal(\"menuOpened\", component.getComponent());\n\t\t}\n\t}\n}\n\nclass MoveColumns extends Module{\n\n\tstatic moduleName = \"moveColumn\";\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.placeholderElement = this.createPlaceholderElement();\n\t\tthis.hoverElement = false; //floating column header element\n\t\tthis.checkTimeout = false; //click check timeout holder\n\t\tthis.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click\n\t\tthis.moving = false; //currently moving column\n\t\tthis.toCol = false; //destination column\n\t\tthis.toColAfter = false; //position of moving column relative to the destination column\n\t\tthis.startX = 0; //starting position within header element\n\t\tthis.autoScrollMargin = 40; //auto scroll on edge when within margin\n\t\tthis.autoScrollStep = 5; //auto scroll distance in pixels\n\t\tthis.autoScrollTimeout = false; //auto scroll timeout\n\t\tthis.touchMove = false;\n\t\t\n\t\tthis.moveHover = this.moveHover.bind(this);\n\t\tthis.endMove = this.endMove.bind(this);\n\t\t\n\t\tthis.registerTableOption(\"movableColumns\", false); //enable movable columns\n\t}\n\t\n\tcreatePlaceholderElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-col\");\n\t\tel.classList.add(\"tabulator-col-placeholder\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.movableColumns){\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\t\tthis.subscribe(\"alert-show\", this.abortMove.bind(this));\n\t\t}\n\t}\n\n\tabortMove(){\n\t\tclearTimeout(this.checkTimeout);\n\t}\n\t\n\tinitializeColumn(column){\n\t\tvar self = this,\n\t\tconfig = {},\n\t\tcolEl;\n\n\t\tif(!column.modules.frozen && !column.isGroup && !column.isRowHeader){\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\t//Prevent moving columns when range selection is active\n\t\tif(this.table.modules.selectRange && this.table.modules.selectRange.columnSelection){\n\t\t\tif(this.table.modules.selectRange.mousedown && this.table.modules.selectRange.selecting === \"column\"){\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\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\n\t\tthis.dispatch(\"column-moving\", e, this.moving);\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\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\nvar defaultSenders = {\r\n\tdelete:function(fromRow, toRow, toTable){\r\n\t\tfromRow.delete();\r\n\t}\r\n};\n\nvar defaultReceivers = {\r\n\tinsert:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\treturn true;\r\n\t},\r\n\r\n\tadd:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData());\r\n\t\treturn true;\r\n\t},\r\n\r\n\tupdate:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\ttoRow.update(fromRow.getData());\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\treplace:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\t\ttoRow.delete();\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n};\n\nclass MoveRows extends Module{\n\n\tstatic moduleName = \"moveRow\";\n\n\t//load defaults\n\tstatic senders = defaultSenders;\n\tstatic receivers = defaultReceivers;\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 = MoveRows.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 = MoveRows.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\nvar defaultMutators = {};\n\nclass Mutator extends Module{\n\n\tstatic moduleName = \"mutator\";\n\n\t//load defaults\n\tstatic mutators = defaultMutators;\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.allowedTypes = [\"\", \"data\", \"edit\", \"clipboard\", \"import\"]; //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(\"mutatorImport\");\n\t\tthis.registerColumnOption(\"mutatorImportParams\");\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\t// console.log(\"key\", key)\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\nfunction rows(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}\n\nfunction pages(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}\n\nvar defaultPageCounters = {\n\trows:rows,\n\tpages:pages,\n};\n\nclass Page extends Module{\n\n\tstatic moduleName = \"page\";\n\n\t//load defaults\n\tstatic pageCounters = defaultPageCounters;\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\tthis.registerTableOption(\"paginationOutOfRange\", false); //reset the current page when the last page < this.page, values: false|function|any value accepted by setPage()\n\t\t\n\t\tthis.registerTableOption(\"progressiveLoad\", false); //progressive loading\n\t\tthis.registerTableOption(\"progressiveLoadDelay\", 0); //delay between requests\n\t\tthis.registerTableOption(\"progressiveLoadScrollMargin\", 0); //margin before scroll begins\n\t\t\n\t\tthis.registerTableFunction(\"setMaxPage\", this.setMaxPage.bind(this));\n\t\tthis.registerTableFunction(\"setPage\", this.setPage.bind(this));\n\t\tthis.registerTableFunction(\"setPageToRow\", this.userSetPageToRow.bind(this));\n\t\tthis.registerTableFunction(\"setPageSize\", this.userSetPageSize.bind(this));\n\t\tthis.registerTableFunction(\"getPageSize\", this.getPageSize.bind(this));\n\t\tthis.registerTableFunction(\"previousPage\", this.previousPage.bind(this));\n\t\tthis.registerTableFunction(\"nextPage\", this.nextPage.bind(this));\n\t\tthis.registerTableFunction(\"getPage\", this.getPage.bind(this));\n\t\tthis.registerTableFunction(\"getPageMax\", this.getPageMax.bind(this));\n\t\t\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"pageTo\", this.setPageToRow.bind(this));\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.pagination){\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"data-processed\", this.initialLoadComplete.bind(this));\n\t\t\tthis.subscribe(\"table-built\", this.calculatePageSizes.bind(this));\n\t\t\tthis.subscribe(\"footer-redraw\", this.footerRedraw.bind(this));\n\n\t\t\tif(this.table.options.paginationAddRow == \"page\"){\n\t\t\t\tthis.subscribe(\"row-adding-position\", this.rowAddingPosition.bind(this));\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.paginationMode === \"remote\"){\n\t\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\n\t\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.progressiveLoad){\n\t\t\t\tconsole.error(\"Progressive Load Error - Pagination and progressive load cannot be used at the same time\");\n\t\t\t}\n\t\t\t\n\t\t\tthis.registerDisplayHandler(this.restOnRenderBefore.bind(this), 40);\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 50);\n\t\t\t\n\t\t\tthis.createElements();\n\t\t\tthis.initializePageCounter();\n\t\t\tthis.initializePaginator();\n\t\t}else if(this.table.options.progressiveLoad){\n\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\n\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\n\t\t\tthis.subscribe(\"table-built\", this.calculatePageSizes.bind(this));\n\t\t\tthis.subscribe(\"data-processed\", this.initialLoadComplete.bind(this));\n\t\t\t\n\t\t\tthis.initializeProgressive(this.table.options.progressiveLoad);\n\t\t\t\n\t\t\tif(this.table.options.progressiveLoad === \"scroll\"){\n\t\t\t\tthis.subscribe(\"scroll-vertical\", this.scrollVertical.bind(this));\n\t\t\t}\n\t\t}\n\t}\n\t\n\trowAddingPosition(row, top){\n\t\tvar rowManager = this.table.rowManager,\n\t\tdisplayRows = rowManager.getDisplayRows(),\n\t\tindex;\n\t\t\n\t\tif(top){\n\t\t\tif(displayRows.length){\n\t\t\t\tindex = displayRows[0];\n\t\t\t}else {\n\t\t\t\tif(rowManager.activeRows.length){\n\t\t\t\t\tindex = rowManager.activeRows[rowManager.activeRows.length-1];\n\t\t\t\t\ttop = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}else {\n\t\t\tif(displayRows.length){\n\t\t\t\tindex = displayRows[displayRows.length - 1];\n\t\t\t\ttop = displayRows.length < this.size ? false : true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn {index, top};\n\t}\n\t\n\tcalculatePageSizes(){\n\t\tvar testElRow, testElCell;\n\t\t\n\t\tif(this.table.options.paginationSize){\n\t\t\tthis.size = this.table.options.paginationSize;\n\t\t}else {\n\t\t\ttestElRow = document.createElement(\"div\");\n\t\t\ttestElRow.classList.add(\"tabulator-row\");\n\t\t\ttestElRow.style.visibility = \"hidden\";\n\t\t\t\n\t\t\ttestElCell = document.createElement(\"div\");\n\t\t\ttestElCell.classList.add(\"tabulator-cell\");\n\t\t\ttestElCell.innerHTML = \"Page Row Test\";\n\t\t\t\n\t\t\ttestElRow.appendChild(testElCell);\n\t\t\t\n\t\t\tthis.table.rowManager.getTableElement().appendChild(testElRow);\n\t\t\t\n\t\t\tthis.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\n\t\t\t\n\t\t\tthis.table.rowManager.getTableElement().removeChild(testElRow);\n\t\t}\n\n\t\tthis.dispatchExternal(\"pageSizeChanged\", this.size);\n\t\t\n\t\tthis.generatePageSizeSelectList();\n\t}\n\t\n\tinitialLoadComplete(){\n\t\tthis.initialLoad = false;\n\t}\n\t\n\tremotePageParams(data, config, silent, params){\n\t\tif(!this.initialLoad){\n\t\t\tif((this.progressiveLoad && !silent) || (!this.progressiveLoad && !this.dataChanging)){\n\t\t\t\tthis.reset(true);\n\t\t\t}\n\t\t}\n\t\t\n\t\t//configure request params\n\t\tparams.page = this.page;\n\t\t\n\t\t//set page size if defined\n\t\tif(this.size){\n\t\t\tparams.size = this.size;\n\t\t}\n\t\t\n\t\treturn params;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\tuserSetPageToRow(row){\n\t\tif(this.table.options.pagination){\n\t\t\trow = this.table.rowManager.findRow(row);\n\t\t\t\n\t\t\tif(row){\n\t\t\t\treturn this.setPageToRow(row);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn Promise.reject();\n\t}\n\t\n\tuserSetPageSize(size){\n\t\tif(this.table.options.pagination){\n\t\t\tthis.setPageSize(size);\n\t\t\treturn this.setPage(1);\n\t\t}else {\n\t\t\treturn false;\n\t\t}\n\t}\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tscrollVertical(top, dir){\n\t\tvar element, diff, margin;\n\t\tif(!dir && !this.table.dataLoader.loading){\n\t\t\telement = this.table.rowManager.getElement();\n\t\t\tdiff = element.scrollHeight - element.clientHeight - top;\n\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (element.clientHeight * 2);\n\t\t\t\n\t\t\tif(diff < margin){\n\t\t\t\tthis.nextPage()\n\t\t\t\t\t.catch(() => {}); //consume the exception thrown when on the last page\n\t\t\t}\n\t\t}\n\t}\n\t\n\trestOnRenderBefore(rows, renderInPosition){\n\t\tif(!renderInPosition){\n\t\t\tif(this.mode === \"local\"){\n\t\t\t\tthis.reset();\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\trowsUpdated(){\n\t\tthis.refreshData(true, \"all\");\n\t}\n\t\n\tcreateElements(){\n\t\tvar button;\n\t\t\n\t\tthis.element = document.createElement(\"span\");\n\t\tthis.element.classList.add(\"tabulator-paginator\");\n\t\t\n\t\tthis.pagesElement = document.createElement(\"span\");\n\t\tthis.pagesElement.classList.add(\"tabulator-pages\");\n\t\t\n\t\tbutton = document.createElement(\"button\");\n\t\tbutton.classList.add(\"tabulator-page\");\n\t\tbutton.setAttribute(\"type\", \"button\");\n\t\tbutton.setAttribute(\"role\", \"button\");\n\t\tbutton.setAttribute(\"aria-label\", \"\");\n\t\tbutton.setAttribute(\"title\", \"\");\n\t\t\n\t\tthis.firstBut = button.cloneNode(true);\n\t\tthis.firstBut.setAttribute(\"data-page\", \"first\");\n\t\t\n\t\tthis.prevBut = button.cloneNode(true);\n\t\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\n\t\t\n\t\tthis.nextBut = button.cloneNode(true);\n\t\tthis.nextBut.setAttribute(\"data-page\", \"next\");\n\t\t\n\t\tthis.lastBut = button.cloneNode(true);\n\t\tthis.lastBut.setAttribute(\"data-page\", \"last\");\n\t\t\n\t\tif(this.table.options.paginationSizeSelector){\n\t\t\tthis.pageSizeSelect = document.createElement(\"select\");\n\t\t\tthis.pageSizeSelect.classList.add(\"tabulator-page-size\");\n\t\t}\n\t}\n\t\n\tgeneratePageSizeSelectList(){\n\t\tvar pageSizes = [];\n\t\t\n\t\tif(this.pageSizeSelect){\n\t\t\t\n\t\t\tif(Array.isArray(this.table.options.paginationSizeSelector)){\n\t\t\t\tpageSizes = this.table.options.paginationSizeSelector;\n\t\t\t\tthis.pageSizes = pageSizes;\n\t\t\t\t\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\n\t\t\t\t\tpageSizes.unshift(this.size);\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\t\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\n\t\t\t\t\tpageSizes = [];\n\t\t\t\t\t\n\t\t\t\t\tfor (let i = 1; i < 5; i++){\n\t\t\t\t\t\tpageSizes.push(this.size * i);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.pageSizes = pageSizes;\n\t\t\t\t}else {\n\t\t\t\t\tpageSizes = this.pageSizes;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\twhile(this.pageSizeSelect.firstChild) this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\n\t\t\t\n\t\t\tpageSizes.forEach((item) => {\n\t\t\t\tvar itemEl = document.createElement(\"option\");\n\t\t\t\titemEl.value = item;\n\t\t\t\t\n\t\t\t\tif(item === true){\n\t\t\t\t\tthis.langBind(\"pagination|all\", function(value){\n\t\t\t\t\t\titemEl.innerHTML = value;\n\t\t\t\t\t});\n\t\t\t\t}else {\n\t\t\t\t\titemEl.innerHTML = item;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tthis.pageSizeSelect.appendChild(itemEl);\n\t\t\t});\n\t\t\t\n\t\t\tthis.pageSizeSelect.value = this.size;\n\t\t}\n\t}\n\t\n\tinitializePageCounter(){\n\t\tvar counter = this.table.options.paginationCounter,\n\t\tpageCounter = null;\n\t\t\n\t\tif(counter){\n\t\t\tif(typeof counter === \"function\"){\n\t\t\t\tpageCounter = counter;\n\t\t\t}else {\n\t\t\t\tpageCounter = Page.pageCounters[counter];\n\t\t\t}\n\t\t\t\n\t\t\tif(pageCounter){\n\t\t\t\tthis.pageCounter = pageCounter;\n\t\t\t\t\n\t\t\t\tthis.pageCounterElement = document.createElement(\"span\");\n\t\t\t\tthis.pageCounterElement.classList.add(\"tabulator-page-counter\");\n\t\t\t}else {\n\t\t\t\tconsole.warn(\"Pagination Error - No such page counter found: \", counter);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//setup pagination\n\tinitializePaginator(hidden){\n\t\tvar pageSelectLabel, paginationCounterHolder;\n\t\t\n\t\tif(!hidden){\n\t\t\t//build pagination element\n\t\t\t\n\t\t\t//bind localizations\n\t\t\tthis.langBind(\"pagination|first\", (value) => {\n\t\t\t\tthis.firstBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|first_title\", (value) => {\n\t\t\t\tthis.firstBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.firstBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|prev\", (value) => {\n\t\t\t\tthis.prevBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|prev_title\", (value) => {\n\t\t\t\tthis.prevBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.prevBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|next\", (value) => {\n\t\t\t\tthis.nextBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|next_title\", (value) => {\n\t\t\t\tthis.nextBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.nextBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|last\", (value) => {\n\t\t\t\tthis.lastBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|last_title\", (value) => {\n\t\t\t\tthis.lastBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.lastBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\t//click bindings\n\t\t\tthis.firstBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.setPage(1);\n\t\t\t});\n\t\t\t\n\t\t\tthis.prevBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.previousPage();\n\t\t\t});\n\t\t\t\n\t\t\tthis.nextBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.nextPage();\n\t\t\t});\n\t\t\t\n\t\t\tthis.lastBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.setPage(this.max);\n\t\t\t});\n\t\t\t\n\t\t\tif(this.table.options.paginationElement){\n\t\t\t\tthis.element = this.table.options.paginationElement;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.pageSizeSelect){\n\t\t\t\tpageSelectLabel = document.createElement(\"label\");\n\t\t\t\t\n\t\t\t\tthis.langBind(\"pagination|page_size\", (value) => {\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"aria-label\", value);\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"title\", value);\n\t\t\t\t\tpageSelectLabel.innerHTML = value;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.element.appendChild(pageSelectLabel);\n\t\t\t\tthis.element.appendChild(this.pageSizeSelect);\n\t\t\t\t\n\t\t\t\tthis.pageSizeSelect.addEventListener(\"change\", (e) => {\n\t\t\t\t\tthis.setPageSize(this.pageSizeSelect.value == \"true\" ? true : this.pageSizeSelect.value);\n\t\t\t\t\tthis.setPage(1);\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t//append to DOM\n\t\t\tthis.element.appendChild(this.firstBut);\n\t\t\tthis.element.appendChild(this.prevBut);\n\t\t\tthis.element.appendChild(this.pagesElement);\n\t\t\tthis.element.appendChild(this.nextBut);\n\t\t\tthis.element.appendChild(this.lastBut);\n\t\t\t\n\t\t\tif(!this.table.options.paginationElement){\n\t\t\t\tif(this.table.options.paginationCounter){\n\n\t\t\t\t\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, paginationOutOfRange;\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\n\t\t\t\tif(this.page > this.max){\n\t\t\t\t\tconsole.warn( \"Remote Pagination Error - Server returned last page value lower than the current page\" );\n\n\t\t\t\t\tpaginationOutOfRange = this.options('paginationOutOfRange');\n\n\t\t\t\t\tif(paginationOutOfRange){\n\t\t\t\t\t\treturn this.setPage(typeof paginationOutOfRange === 'function' ? paginationOutOfRange.call(this, this.page, this.max) :\tpaginationOutOfRange);\n\t\t\t\t\t}\n\t\t\t\t}\n\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\n// read persistance information from storage\nvar defaultReaders = {\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\n//write persistence information to storage\nvar defaultWriters = {\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};\n\nclass Persistence extends Module{\n\n\tstatic moduleName = \"persistence\";\n\n\tstatic moduleInitOrder = -10;\n\n\t//load defaults\n\tstatic readers = defaultReaders;\n\tstatic writers = defaultWriters;\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.mode = \"\";\n\t\tthis.id = \"\";\n\t\t// this.persistProps = [\"field\", \"width\", \"visible\"];\n\t\tthis.defWatcherBlock = false;\n\t\tthis.config = {};\n\t\tthis.readFunc = false;\n\t\tthis.writeFunc = false;\n\n\t\tthis.registerTableOption(\"persistence\", false);\n\t\tthis.registerTableOption(\"persistenceID\", \"\"); //key for persistent storage\n\t\tthis.registerTableOption(\"persistenceMode\", true); //mode for storing persistence information\n\t\tthis.registerTableOption(\"persistenceReaderFunc\", false); //function for handling persistence data reading\n\t\tthis.registerTableOption(\"persistenceWriterFunc\", false); //function for handling persistence data writing\n\t}\n\n\t// Test for whether localStorage is available for use.\n\tlocalStorageTest() {\n\t\tvar testKey = \"_tabulator_test\";\n\n\t\ttry {\n\t\t\twindow.localStorage.setItem( testKey, testKey);\n\t\t\twindow.localStorage.removeItem( testKey );\n\t\t\treturn true;\n\t\t} catch(e) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//setup parameters\n\tinitialize(){\n\t\tif(this.table.options.persistence){\n\t\t\t//determine persistent layout storage type\n\t\t\tvar mode = this.table.options.persistenceMode,\n\t\t\tid = this.table.options.persistenceID,\n\t\t\tretrievedData;\n\n\t\t\tthis.mode = mode !== true ? mode : (this.localStorageTest() ? \"local\" : \"cookie\");\n\n\t\t\tif(this.table.options.persistenceReaderFunc){\n\t\t\t\tif(typeof this.table.options.persistenceReaderFunc === \"function\"){\n\t\t\t\t\tthis.readFunc = this.table.options.persistenceReaderFunc;\n\t\t\t\t}else {\n\t\t\t\t\tif(Persistence.readers[this.table.options.persistenceReaderFunc]){\n\t\t\t\t\t\tthis.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc];\n\t\t\t\t\t}else {\n\t\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.table.options.persistenceReaderFunc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tif(Persistence.readers[this.mode]){\n\t\t\t\t\tthis.readFunc = Persistence.readers[this.mode];\n\t\t\t\t}else {\n\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.mode);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(this.table.options.persistenceWriterFunc){\n\t\t\t\tif(typeof this.table.options.persistenceWriterFunc === \"function\"){\n\t\t\t\t\tthis.writeFunc = this.table.options.persistenceWriterFunc;\n\t\t\t\t}else {\n\t\t\t\t\tif(Persistence.writers[this.table.options.persistenceWriterFunc]){\n\t\t\t\t\t\tthis.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc];\n\t\t\t\t\t}else {\n\t\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid reader set\", this.table.options.persistenceWriterFunc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tif(Persistence.writers[this.mode]){\n\t\t\t\t\tthis.writeFunc = Persistence.writers[this.mode];\n\t\t\t\t}else {\n\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid writer set\", this.mode);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//set storage tag\n\t\t\tthis.id = \"tabulator-\" + (id || (this.table.element.getAttribute(\"id\") || \"\"));\n\n\t\t\tthis.config = {\n\t\t\t\tsort:this.table.options.persistence === true || this.table.options.persistence.sort,\n\t\t\t\tfilter:this.table.options.persistence === true || this.table.options.persistence.filter,\n\t\t\t\theaderFilter:this.table.options.persistence === true || this.table.options.persistence.headerFilter,\n\t\t\t\tgroup:this.table.options.persistence === true || this.table.options.persistence.group,\n\t\t\t\tpage:this.table.options.persistence === true || this.table.options.persistence.page,\n\t\t\t\tcolumns:this.table.options.persistence === true ? [\"title\", \"width\", \"visible\"] : this.table.options.persistence.columns,\n\t\t\t};\n\n\t\t\t//load pagination data if needed\n\t\t\tif(this.config.page){\n\t\t\t\tretrievedData = this.retrieveData(\"page\");\n\n\t\t\t\tif(retrievedData){\n\t\t\t\t\tif(typeof retrievedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)){\n\t\t\t\t\t\tthis.table.options.paginationSize = retrievedData.paginationSize;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(typeof retrievedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)){\n\t\t\t\t\t\tthis.table.options.paginationInitialPage = retrievedData.paginationInitialPage;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//load group data if needed\n\t\t\tif(this.config.group){\n\t\t\t\tretrievedData = this.retrieveData(\"group\");\n\n\t\t\t\tif(retrievedData){\n\t\t\t\t\tif(typeof retrievedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)){\n\t\t\t\t\t\tthis.table.options.groupBy = retrievedData.groupBy;\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof retrievedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)){\n\t\t\t\t\t\tthis.table.options.groupStartOpen = retrievedData.groupStartOpen;\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof retrievedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)){\n\t\t\t\t\t\tthis.table.options.groupHeader = retrievedData.groupHeader;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(this.config.columns){\n\t\t\t\tthis.table.options.columns = this.load(\"columns\", this.table.options.columns);\n\t\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\t\t\tthis.subscribe(\"column-show\", this.save.bind(this, \"columns\"));\n\t\t\t\tthis.subscribe(\"column-hide\", this.save.bind(this, \"columns\"));\n\t\t\t\tthis.subscribe(\"column-moved\", this.save.bind(this, \"columns\"));\n\t\t\t}\n\n\t\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this), 0);\n\n\t\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\n\n\t\t\tthis.subscribe(\"filter-changed\", this.eventSave.bind(this, \"filter\"));\n\t\t\tthis.subscribe(\"filter-changed\", this.eventSave.bind(this, \"headerFilter\"));\n\t\t\tthis.subscribe(\"sort-changed\", this.eventSave.bind(this, \"sort\"));\n\t\t\tthis.subscribe(\"group-changed\", this.eventSave.bind(this, \"group\"));\n\t\t\tthis.subscribe(\"page-changed\", this.eventSave.bind(this, \"page\"));\n\t\t\tthis.subscribe(\"column-resized\", this.eventSave.bind(this, \"columns\"));\n\t\t\tthis.subscribe(\"column-width\", this.eventSave.bind(this, \"columns\"));\n\t\t\tthis.subscribe(\"layout-refreshed\", this.eventSave.bind(this, \"columns\"));\n\t\t}\n\n\t\tthis.registerTableFunction(\"getColumnLayout\", this.getColumnLayout.bind(this));\n\t\tthis.registerTableFunction(\"setColumnLayout\", this.setColumnLayout.bind(this));\n\t}\n\n\teventSave(type){\n\t\tif(this.config[type]){\n\t\t\tthis.save(type);\n\t\t}\n\t}\n\n\ttableBuilt(){\n\t\tvar sorters, filters, headerFilters;\n\n\t\tif(this.config.sort){\n\t\t\tsorters = this.load(\"sort\");\n\n\t\t\tif(!sorters === false){\n\t\t\t\tthis.table.options.initialSort = sorters;\n\t\t\t}\n\t\t}\n\n\t\tif(this.config.filter){\n\t\t\tfilters = this.load(\"filter\");\n\n\t\t\tif(!filters === false){\n\t\t\t\tthis.table.options.initialFilter = filters;\n\t\t\t}\n\t\t}\n\t\tif(this.config.headerFilter){\n\t\t\theaderFilters = this.load(\"headerFilter\");\n\n\t\t\tif(!headerFilters === false){\n\t\t\t\tthis.table.options.initialHeaderFilter = headerFilters;\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\n\ttableRedraw(force){\n\t\tif(force && this.config.columns){\n\t\t\tthis.save(\"columns\");\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\tgetColumnLayout(){\n\t\treturn this.parseColumns(this.table.columnManager.getColumns());\n\t}\n\n\tsetColumnLayout(layout){\n\t\tthis.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns, layout, true));\n\t\treturn true;\n\t}\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\tinitializeColumn(column){\n\t\tvar def, keys;\n\n\t\tif(this.config.columns){\n\t\t\tthis.defWatcherBlock = true;\n\n\t\t\tdef = column.getDefinition();\n\n\t\t\tkeys = this.config.columns === true ? Object.keys(def) : this.config.columns;\n\n\t\t\tkeys.forEach((key)=>{\n\t\t\t\tvar props = Object.getOwnPropertyDescriptor(def, key);\n\t\t\t\tvar value = def[key];\n\n\t\t\t\tif(props){\n\t\t\t\t\tObject.defineProperty(def, key, {\n\t\t\t\t\t\tset: (newValue) => {\n\t\t\t\t\t\t\tvalue = newValue;\n\n\t\t\t\t\t\t\tif(!this.defWatcherBlock){\n\t\t\t\t\t\t\t\tthis.save(\"columns\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif(props.set){\n\t\t\t\t\t\t\t\tprops.set(newValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget:() => {\n\t\t\t\t\t\t\tif(props.get){\n\t\t\t\t\t\t\t\tprops.get();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.defWatcherBlock = false;\n\t\t}\n\t}\n\n\t//load saved definitions\n\tload(type, current){\n\t\tvar data = this.retrieveData(type);\n\n\t\tif(current){\n\t\t\tdata = data ? this.mergeDefinition(current, data) : current;\n\t\t}\n\n\t\treturn data;\n\t}\n\n\t//retrieve data from memory\n\tretrieveData(type){\n\t\treturn this.readFunc ? this.readFunc(this.id, type) : false;\n\t}\n\n\t//merge old and new column definitions\n\tmergeDefinition(oldCols, newCols, mergeAllNew){\n\t\tvar output = [];\n\n\t\tnewCols = newCols || [];\n\n\t\tnewCols.forEach((column, to) => {\n\t\t\tvar from = this._findColumn(oldCols, column),\n\t\t\tkeys;\n\n\t\t\tif(from){\n\t\t\t\tif(mergeAllNew){\n\t\t\t\t\tkeys = Object.keys(column);\n\t\t\t\t}else if(this.config.columns === true || this.config.columns == undefined){\n\t\t\t\t\tkeys = Object.keys(from);\n\t\t\t\t\tkeys.push(\"width\");\n\t\t\t\t}else {\n\t\t\t\t\tkeys = this.config.columns;\n\t\t\t\t}\n\n\t\t\t\tkeys.forEach((key)=>{\n\t\t\t\t\tif(key !== \"columns\" && typeof column[key] !== \"undefined\"){\n\t\t\t\t\t\tfrom[key] = column[key];\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif(from.columns){\n\t\t\t\t\tfrom.columns = this.mergeDefinition(from.columns, column.columns);\n\t\t\t\t}\n\n\t\t\t\toutput.push(from);\n\t\t\t}\n\t\t});\n\n\t\toldCols.forEach((column, i) => {\n\t\t\tvar from = this._findColumn(newCols, column);\n\n\t\t\tif (!from) {\n\t\t\t\tif(output.length>i){\n\t\t\t\t\toutput.splice(i, 0, column);\n\t\t\t\t}else {\n\t\t\t\t\toutput.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\t//find matching columns\n\t_findColumn(columns, subject){\n\t\tvar type = subject.columns ? \"group\" : (subject.field ? \"field\" : \"object\");\n\n\t\treturn columns.find(function(col){\n\t\t\tswitch(type){\n\t\t\t\tcase \"group\":\n\t\t\t\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\n\n\t\t\t\tcase \"field\":\n\t\t\t\t\treturn col.field === subject.field;\n\n\t\t\t\tcase \"object\":\n\t\t\t\t\treturn col === subject;\n\t\t\t}\n\t\t});\n\t}\n\n\t//save data\n\tsave(type){\n\t\tvar data = {};\n\n\t\tswitch(type){\n\t\t\tcase \"columns\":\n\t\t\t\tdata = this.parseColumns(this.table.columnManager.getColumns());\n\t\t\t\tbreak;\n\n\t\t\tcase \"filter\":\n\t\t\t\tdata = this.table.modules.filter.getFilters();\n\t\t\t\tbreak;\n\n\t\t\tcase \"headerFilter\":\n\t\t\t\tdata = this.table.modules.filter.getHeaderFilters();\n\t\t\t\tbreak;\n\n\t\t\tcase \"sort\":\n\t\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tdata = this.getGroupConfig();\n\t\t\t\tbreak;\n\n\t\t\tcase \"page\":\n\t\t\t\tdata = this.getPageConfig();\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(this.writeFunc){\n\t\t\tthis.writeFunc(this.id, type, data);\n\t\t}\n\n\t}\n\n\t//ensure sorters contain no function data\n\tvalidateSorters(data){\n\t\tdata.forEach(function(item){\n\t\t\titem.column = item.field;\n\t\t\tdelete item.field;\n\t\t});\n\n\t\treturn data;\n\t}\n\n\tgetGroupConfig(){\n\t\tvar data = {};\n\n\t\tif(this.config.group){\n\t\t\tif(this.config.group === true || this.config.group.groupBy){\n\t\t\t\tdata.groupBy = this.table.options.groupBy;\n\t\t\t}\n\n\t\t\tif(this.config.group === true || this.config.group.groupStartOpen){\n\t\t\t\tdata.groupStartOpen = this.table.options.groupStartOpen;\n\t\t\t}\n\n\t\t\tif(this.config.group === true || this.config.group.groupHeader){\n\t\t\t\tdata.groupHeader = this.table.options.groupHeader;\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tgetPageConfig(){\n\t\tvar data = {};\n\n\t\tif(this.config.page){\n\t\t\tif(this.config.page === true || this.config.page.size){\n\t\t\t\tdata.paginationSize = this.table.modules.page.getPageSize();\n\t\t\t}\n\n\t\t\tif(this.config.page === true || this.config.page.page){\n\t\t\t\tdata.paginationInitialPage = this.table.modules.page.getPage();\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t}\n\n\n\t//parse columns for data to store\n\tparseColumns(columns){\n\t\tvar definitions = [],\n\t\texcludedKeys = [\"headerContextMenu\", \"headerMenu\", \"contextMenu\", \"clickMenu\"];\n\n\t\tcolumns.forEach((column) => {\n\t\t\tvar defStore = {},\n\t\t\tcolDef = column.getDefinition(),\n\t\t\tkeys;\n\n\t\t\tif(column.isGroup){\n\t\t\t\tdefStore.title = colDef.title;\n\t\t\t\tdefStore.columns = this.parseColumns(column.getColumns());\n\t\t\t}else {\n\t\t\t\tdefStore.field = column.getField();\n\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\n\t\t\t\t\tkeys = Object.keys(colDef);\n\t\t\t\t\tkeys.push(\"width\");\n\t\t\t\t\tkeys.push(\"visible\");\n\t\t\t\t}else {\n\t\t\t\t\tkeys = this.config.columns;\n\t\t\t\t}\n\n\t\t\t\tkeys.forEach((key)=>{\n\t\t\t\t\tswitch(key){\n\t\t\t\t\t\tcase \"width\":\n\t\t\t\t\t\t\tdefStore.width = column.getWidth();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"visible\":\n\t\t\t\t\t\t\tdefStore.visible = column.visible;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif(typeof colDef[key] !== \"function\" && excludedKeys.indexOf(key) === -1){\n\t\t\t\t\t\t\t\tdefStore[key] = colDef[key];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tdefinitions.push(defStore);\n\t\t});\n\n\t\treturn definitions;\n\t}\n}\n\nclass Popup extends Module{\n\t\n\tstatic moduleName = \"popup\";\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.columnSubscribers = {};\n\t\t\n\t\tthis.registerTableOption(\"rowContextPopup\", false);\n\t\tthis.registerTableOption(\"rowClickPopup\", false);\n\t\tthis.registerTableOption(\"rowDblClickPopup\", false);\n\t\tthis.registerTableOption(\"groupContextPopup\", false);\n\t\tthis.registerTableOption(\"groupClickPopup\", false);\n\t\tthis.registerTableOption(\"groupDblClickPopup\", false);\n\t\t\n\t\tthis.registerColumnOption(\"headerContextPopup\");\n\t\tthis.registerColumnOption(\"headerClickPopup\");\n\t\tthis.registerColumnOption(\"headerDblClickPopup\");\n\t\tthis.registerColumnOption(\"headerPopup\");\n\t\tthis.registerColumnOption(\"headerPopupIcon\");\n\t\tthis.registerColumnOption(\"contextPopup\");\n\t\tthis.registerColumnOption(\"clickPopup\");\n\t\tthis.registerColumnOption(\"dblClickPopup\");\n\n\t\tthis.registerComponentFunction(\"cell\", \"popup\", this._componentPopupCall.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"popup\", this._componentPopupCall.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"popup\", this._componentPopupCall.bind(this));\n\t\tthis.registerComponentFunction(\"group\", \"popup\", this._componentPopupCall.bind(this));\n\t\t\n\t}\n\t\n\tinitialize(){\n\t\tthis.initializeRowWatchers();\n\t\tthis.initializeGroupWatchers();\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\n\t_componentPopupCall(component, contents, position){\n\t\tthis.loadPopupEvent(contents, null, component, position);\n\t}\n\t\n\tinitializeRowWatchers(){\n\t\tif(this.table.options.rowContextPopup){\n\t\t\tthis.subscribe(\"row-contextmenu\", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup));\n\t\t\tthis.table.on(\"rowTapHold\", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup));\n\t\t}\n\t\t\n\t\tif(this.table.options.rowClickPopup){\n\t\t\tthis.subscribe(\"row-click\", this.loadPopupEvent.bind(this, this.table.options.rowClickPopup));\n\t\t}\n\n\t\tif(this.table.options.rowDblClickPopup){\n\t\t\tthis.subscribe(\"row-dblclick\", this.loadPopupEvent.bind(this, this.table.options.rowDblClickPopup));\n\t\t}\n\t}\n\t\n\tinitializeGroupWatchers(){\n\t\tif(this.table.options.groupContextPopup){\n\t\t\tthis.subscribe(\"group-contextmenu\", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup));\n\t\t\tthis.table.on(\"groupTapHold\", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup));\n\t\t}\n\t\t\n\t\tif(this.table.options.groupClickPopup){\n\t\t\tthis.subscribe(\"group-click\", this.loadPopupEvent.bind(this, this.table.options.groupClickPopup));\n\t\t}\n\n\t\tif(this.table.options.groupDblClickPopup){\n\t\t\tthis.subscribe(\"group-dblclick\", this.loadPopupEvent.bind(this, this.table.options.groupDblClickPopup));\n\t\t}\n\t}\n\n\tinitializeColumn(column){\n\t\tvar def = column.definition;\n\t\t\n\t\t//handle column events\n\t\tif(def.headerContextPopup && !this.columnSubscribers.headerContextPopup){\n\t\t\tthis.columnSubscribers.headerContextPopup = this.loadPopupTableColumnEvent.bind(this, \"headerContextPopup\");\n\t\t\tthis.subscribe(\"column-contextmenu\", this.columnSubscribers.headerContextPopup);\n\t\t\tthis.table.on(\"headerTapHold\", this.loadPopupTableColumnEvent.bind(this, \"headerContextPopup\"));\n\t\t}\n\t\t\n\t\tif(def.headerClickPopup && !this.columnSubscribers.headerClickPopup){\n\t\t\tthis.columnSubscribers.headerClickPopup = this.loadPopupTableColumnEvent.bind(this, \"headerClickPopup\");\n\t\t\tthis.subscribe(\"column-click\", this.columnSubscribers.headerClickPopup);\n\t\t\n\t\t\n\t\t}if(def.headerDblClickPopup && !this.columnSubscribers.headerDblClickPopup){\n\t\t\tthis.columnSubscribers.headerDblClickPopup = this.loadPopupTableColumnEvent.bind(this, \"headerDblClickPopup\");\n\t\t\tthis.subscribe(\"column-dblclick\", this.columnSubscribers.headerDblClickPopup);\n\t\t}\n\t\t\n\t\tif(def.headerPopup){\n\t\t\tthis.initializeColumnHeaderPopup(column);\n\t\t}\n\t\t\n\t\t//handle cell events\n\t\tif(def.contextPopup && !this.columnSubscribers.contextPopup){\n\t\t\tthis.columnSubscribers.contextPopup = this.loadPopupTableCellEvent.bind(this, \"contextPopup\");\n\t\t\tthis.subscribe(\"cell-contextmenu\", this.columnSubscribers.contextPopup);\n\t\t\tthis.table.on(\"cellTapHold\", this.loadPopupTableCellEvent.bind(this, \"contextPopup\"));\n\t\t}\n\t\t\n\t\tif(def.clickPopup && !this.columnSubscribers.clickPopup){\n\t\t\tthis.columnSubscribers.clickPopup = this.loadPopupTableCellEvent.bind(this, \"clickPopup\");\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.clickPopup);\n\t\t}\n\n\t\tif(def.dblClickPopup && !this.columnSubscribers.dblClickPopup){\n\t\t\tthis.columnSubscribers.dblClickPopup = this.loadPopupTableCellEvent.bind(this, \"dblClickPopup\");\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.dblClickPopup);\n\t\t}\n\t}\n\t\n\tinitializeColumnHeaderPopup(column){\n\t\tvar icon = column.definition.headerPopupIcon,\n\t\theaderPopupEl;\n\t\t\n\t\theaderPopupEl = document.createElement(\"span\");\n\t\theaderPopupEl.classList.add(\"tabulator-header-popup-button\");\n\n\t\tif(icon){\n\t\t\tif(typeof icon === \"function\"){\n\t\t\t\ticon = icon(column.getComponent());\n\t\t\t}\n\n\t\t\tif(icon instanceof HTMLElement){\n\t\t\t\theaderPopupEl.appendChild(icon);\n\t\t\t}else {\n\t\t\t\theaderPopupEl.innerHTML = icon;\n\t\t\t}\n\t\t}else {\n\t\t\theaderPopupEl.innerHTML = \"&vellip;\";\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\t\tthis.dispatchExternal(\"popupOpened\", component.getComponent());\n\t}\n}\n\nclass Print extends Module{\n\n\tstatic moduleName = \"print\";\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\nclass ReactiveData extends Module{\n\n\tstatic moduleName = \"reactiveData\";\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\nclass ResizeColumns extends Module{\n\n\tstatic moduleName = \"resizeColumns\";\n\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\tthis.registerTableOption(\"resizableColumnGuide\", false);\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"column-rendered\", this.layoutColumnHeader.bind(this));\n\t}\n\t\n\tinitializeEventWatchers(){\n\t\tif(!this.initialized){\n\t\t\t\n\t\t\tthis.subscribe(\"cell-rendered\", this.layoutCellHandles.bind(this));\n\t\t\tthis.subscribe(\"cell-delete\", this.deInitializeComponent.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"cell-height\", this.resizeHandle.bind(this));\n\t\t\tthis.subscribe(\"column-moved\", this.columnLayoutUpdated.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"column-hide\", this.deInitializeColumn.bind(this));\n\t\t\tthis.subscribe(\"column-show\", this.columnLayoutUpdated.bind(this));\n\t\t\tthis.subscribe(\"column-width\", this.columnWidthUpdated.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"column-delete\", this.deInitializeComponent.bind(this));\n\t\t\tthis.subscribe(\"column-height\", this.resizeHandle.bind(this));\n\t\t\t\n\t\t\tthis.initialized = true;\n\t\t}\n\t}\n\t\n\t\n\tlayoutCellHandles(cell){\n\t\tif(cell.row.type === \"row\"){\n\t\t\tthis.deInitializeComponent(cell);\n\t\t\tthis.initializeColumn(\"cell\", cell, cell.column, cell.element);\n\t\t}\n\t}\n\t\n\tlayoutColumnHeader(column){\n\t\tif(column.definition.resizable){\n\t\t\tthis.initializeEventWatchers();\n\t\t\tthis.deInitializeComponent(column);\n\t\t\tthis.initializeColumn(\"header\", column, column, column.element);\n\t\t}\n\t}\n\t\n\tcolumnLayoutUpdated(column){\n\t\tvar prev = column.prevColumn();\n\t\t\n\t\tthis.reinitializeColumn(column);\n\t\t\n\t\tif(prev){\n\t\t\tthis.reinitializeColumn(prev);\n\t\t}\n\t}\n\t\n\tcolumnWidthUpdated(column){\n\t\tif(column.modules.frozen){\n\t\t\tif(this.table.modules.frozenColumns.leftColumns.includes(column)){\n\t\t\t\tthis.table.modules.frozenColumns.leftColumns.forEach((col) => {\n\t\t\t\t\tthis.reinitializeColumn(col);\n\t\t\t\t});\n\t\t\t}else if(this.table.modules.frozenColumns.rightColumns.includes(column)){\n\t\t\t\tthis.table.modules.frozenColumns.rightColumns.forEach((col) => {\n\t\t\t\t\tthis.reinitializeColumn(col);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tfrozenColumnOffset(column){\n\t\tvar offset = false;\n\n\t\tif(column.modules.frozen){\n\t\t\toffset = column.modules.frozen.marginValue; \n\n\t\t\tif(column.modules.frozen.position === \"left\"){\n\t\t\t\toffset += column.getWidth() - 3;\n\t\t\t}else {\n\t\t\t\tif(offset){\n\t\t\t\t\toffset -= 3;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn offset !== false ? offset + \"px\" : false;\n\t}\n\t\n\treinitializeColumn(column){\n\t\tvar frozenOffset = this.frozenColumnOffset(column);\n\t\t\n\t\tcolumn.cells.forEach((cell) => {\n\t\t\tif(cell.modules.resize && cell.modules.resize.handleEl){\n\t\t\t\tif(frozenOffset){\n\t\t\t\t\tcell.modules.resize.handleEl.style[column.modules.frozen.position] = frozenOffset;\n\t\t\t\t\tcell.modules.resize.handleEl.style[\"z-index\"] = 11;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcell.element.after(cell.modules.resize.handleEl);\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(column.modules.resize && column.modules.resize.handleEl){\n\t\t\tif(frozenOffset){\n\t\t\t\tcolumn.modules.resize.handleEl.style[column.modules.frozen.position] = frozenOffset;\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.element.after(column.modules.resize.handleEl);\n\t\t}\n\t}\n\t\n\tinitializeColumn(type, component, column, element){\n\t\tvar self = this,\n\t\tvariableHeight = false,\n\t\tmode = column.definition.resizable,\n\t\tconfig = {},\n\t\tnearestColumn = column.getLastColumn();\n\t\t\n\t\t//set column resize mode\n\t\tif(type === \"header\"){\n\t\t\tvariableHeight = column.definition.formatter == \"textarea\" || column.definition.variableHeight;\n\t\t\tconfig = {variableHeight:variableHeight};\n\t\t}\n\t\t\n\t\tif((mode === true || mode == type) && this._checkResizability(nearestColumn)){\n\t\t\t\n\t\t\tvar handle = document.createElement('span');\n\t\t\thandle.className = \"tabulator-col-resize-handle\";\n\t\t\t\n\t\t\thandle.addEventListener(\"click\", function(e){\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\t\t\t\n\t\t\tvar handleDown = function(e){\n\t\t\t\tself.startColumn = column;\n\t\t\t\tself.initialNextColumn = self.nextColumn = nearestColumn.nextColumn();\n\t\t\t\tself._mouseDown(e, nearestColumn, handle);\n\t\t\t};\n\t\t\t\n\t\t\thandle.addEventListener(\"mousedown\", handleDown);\n\t\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\n\t\t\t\n\t\t\t//resize column on double click\n\t\t\thandle.addEventListener(\"dblclick\", (e) => {\n\t\t\t\tvar oldWidth = nearestColumn.getWidth();\n\t\t\t\t\n\t\t\t\te.stopPropagation();\n\t\t\t\tnearestColumn.reinitializeWidth(true);\n\t\t\t\t\n\t\t\t\tif(oldWidth !== nearestColumn.getWidth()){\n\t\t\t\t\tself.dispatch(\"column-resized\", nearestColumn);\n\t\t\t\t\tself.dispatchExternal(\"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\tresize(e, column){\n\t\tvar x = typeof e.clientX === \"undefined\" ? e.touches[0].clientX : e.clientX,\n\t\tstartDiff = x - this.startX,\n\t\tmoveDiff = x - this.latestX,\n\t\tblockedBefore, blockedAfter;\n\n\t\tthis.latestX = x;\n\n\t\tif(this.table.rtl){\n\t\t\tstartDiff = -startDiff;\n\t\t\tmoveDiff = -moveDiff;\n\t\t}\n\n\t\tblockedBefore = column.width == column.minWidth || column.width == column.maxWidth;\n\n\t\tcolumn.setWidth(this.startWidth + startDiff);\n\n\t\tblockedAfter = column.width == column.minWidth || column.width == column.maxWidth;\n\n\t\tif(moveDiff < 0){\n\t\t\tthis.nextColumn = this.initialNextColumn;\n\t\t}\n\n\t\tif(this.table.options.resizableColumnFit && this.nextColumn && !(blockedBefore && blockedAfter)){\n\t\t\tlet colWidth = this.nextColumn.getWidth();\n\n\t\t\tif(moveDiff > 0){\n\t\t\t\tif(colWidth <= this.nextColumn.minWidth){\n\t\t\t\t\tthis.nextColumn = this.nextColumn.nextColumn();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(this.nextColumn){\n\t\t\t\tthis.nextColumn.setWidth(this.nextColumn.getWidth() - moveDiff);\n\t\t\t}\n\t\t}\n\n\t\tthis.table.columnManager.rerenderColumns(true);\n\n\t\tif(!this.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\n\t\t\tcolumn.checkCellHeights();\n\t\t}\n\t}\n\n\tcalcGuidePosition(e, column, handle) {\n\t\tvar mouseX = typeof e.clientX === \"undefined\" ? e.touches[0].clientX : e.clientX,\n\t\thandleX = handle.getBoundingClientRect().x - this.table.element.getBoundingClientRect().x,\n\t\ttableX = this.table.element.getBoundingClientRect().x,\n\t\tcolumnX = column.element.getBoundingClientRect().left - tableX,\n\t\tmouseDiff = mouseX - this.startX,\n\t\tpos = Math.max(handleX + mouseDiff, columnX + column.minWidth);\n\n\t\tif(column.maxWidth){\n\t\t\tpos = Math.min(pos, columnX + column.maxWidth);\n\t\t}\n\n\t\treturn pos;\n\t}\n\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\tguideEl;\n\n\t\tthis.dispatchExternal(\"columnResizing\", column.getComponent());\n\n\t\tif(self.table.options.resizableColumnGuide){\n\t\t\tguideEl = document.createElement(\"span\");\n\t\t\tguideEl.classList.add('tabulator-col-resize-guide');\n\t\t\tself.table.element.appendChild(guideEl);\n\t\t\tsetTimeout(() => {\n\t\t\t\tguideEl.style.left = self.calcGuidePosition(e, column, handle) + \"px\";\n\t\t\t});\n\t\t}\n\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\n\n\t\tfunction mouseMove(e){\n\t\t\tif(self.table.options.resizableColumnGuide){\n\t\t\t\tguideEl.style.left = self.calcGuidePosition(e, column, handle) + \"px\";\n\t\t\t}else {\n\t\t\t\tself.resize(e, column);\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction mouseUp(e){\n\t\t\tif(self.table.options.resizableColumnGuide){\n\t\t\t\tself.resize(e, column);\n\t\t\t\tguideEl.remove();\n\t\t\t}\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.dispatchExternal(\"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.clientX === \"undefined\" ? e.touches[0].clientX : e.clientX;\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\nclass ResizeRows extends Module{\n\n\tstatic moduleName = \"resizeRows\";\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\tthis.registerTableOption(\"resizableRowGuide\", false);\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\tresize(e, row) {\n\t\trow.setHeight(this.startHeight + ((typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY) - this.startY));\n\t}\n\n\tcalcGuidePosition(e, row, handle) {\n\t\tvar mouseY = typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY,\n\t\thandleY = handle.getBoundingClientRect().y - this.table.element.getBoundingClientRect().y,\n\t\ttableY = this.table.element.getBoundingClientRect().y,\n\t\trowY = row.element.getBoundingClientRect().top - tableY,\n\t\tmouseDiff = mouseY - this.startY;\n\n\t\treturn Math.max(handleY + mouseDiff, rowY);\n\t}\n\n\t_mouseDown(e, row, handle){\n\t\tvar self = this,\n\t\tguideEl;\n\n\t\tself.dispatchExternal(\"rowResizing\", row.getComponent());\n\n\t\tif(self.table.options.resizableRowGuide){\n\t\t\tguideEl = document.createElement(\"span\");\n\t\t\tguideEl.classList.add('tabulator-row-resize-guide');\n\t\t\tself.table.element.appendChild(guideEl);\n\t\t\tsetTimeout(() => {\n\t\t\t\tguideEl.style.top = self.calcGuidePosition(e, row, handle) + \"px\";\n\t\t\t});\n\t\t}\n\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\n\n\t\tfunction mouseMove(e){\n\t\t\tif(self.table.options.resizableRowGuide){\n\t\t\t\tguideEl.style.top = self.calcGuidePosition(e, row, handle) + \"px\";\n\t\t\t}else {\n\t\t\t\tself.resize(e, row);\n\t\t\t}\n\t\t}\n\n\t\tfunction mouseUp(e){\n\t\t\tif(self.table.options.resizableRowGuide){\n\t\t\t\tself.resize(e, row);\n\t\t\t\tguideEl.remove();\n\t\t\t}\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\nclass ResizeTable extends Module{\n\n\tstatic moduleName = \"resizeTable\";\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.binding = false;\n\t\tthis.visibilityObserver = false;\n\t\tthis.resizeObserver = false;\n\t\tthis.containerObserver = false;\n\t\t\n\t\tthis.tableHeight = 0;\n\t\tthis.tableWidth = 0;\n\t\tthis.containerHeight = 0;\n\t\tthis.containerWidth = 0;\n\t\t\n\t\tthis.autoResize = false;\n\t\t\n\t\tthis.visible = false;\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.initialRedraw = false;\n\t\t\n\t\tthis.registerTableOption(\"autoResize\", true); //auto resize table\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.autoResize){\n\t\t\tvar table = this.table,\n\t\t\ttableStyle;\n\t\t\t\n\t\t\tthis.tableHeight = table.element.clientHeight;\n\t\t\tthis.tableWidth = table.element.clientWidth;\n\t\t\t\n\t\t\tif(table.element.parentNode){\n\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\n\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\n\t\t\t}\n\t\t\t\n\t\t\tif(typeof IntersectionObserver !== \"undefined\" && typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\"){\n\t\t\t\t\n\t\t\t\tthis.initializeVisibilityObserver();\n\t\t\t\t\n\t\t\t\tthis.autoResize = true;\n\t\t\t\t\n\t\t\t\tthis.resizeObserver = new ResizeObserver((entry) => {\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\n\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.tableHeight != nodeHeight || this.tableWidth != nodeWidth){\n\t\t\t\t\t\t\tthis.tableHeight = nodeHeight;\n\t\t\t\t\t\t\tthis.tableWidth = nodeWidth;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(table.element.parentNode){\n\t\t\t\t\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\n\t\t\t\t\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.redrawTable();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.resizeObserver.observe(table.element);\n\t\t\t\t\n\t\t\t\ttableStyle = window.getComputedStyle(table.element);\n\t\t\t\t\n\t\t\t\tif(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))){\n\t\t\t\t\t\n\t\t\t\t\tthis.containerObserver = new ResizeObserver((entry) => {\n\t\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\n\t\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(this.containerHeight != nodeHeight || this.containerWidth != nodeWidth){\n\t\t\t\t\t\t\t\tthis.containerHeight = nodeHeight;\n\t\t\t\t\t\t\t\tthis.containerWidth = nodeWidth;\n\t\t\t\t\t\t\t\tthis.tableHeight = table.element.clientHeight;\n\t\t\t\t\t\t\t\tthis.tableWidth = table.element.clientWidth;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.redrawTable();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.subscribe(\"table-resize\", this.tableResized.bind(this));\n\t\t\t\t\n\t\t\t}else {\n\t\t\t\tthis.binding = function(){\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){\n\t\t\t\t\t\ttable.columnManager.rerenderColumns(true);\n\t\t\t\t\t\ttable.redraw();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\twindow.addEventListener(\"resize\", this.binding);\n\t\t\t}\n\t\t\t\n\t\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\n\t\t}\n\t}\n\t\n\tinitializeVisibilityObserver(){\n\t\tthis.visibilityObserver = new IntersectionObserver((entries) => {\n\t\t\tthis.visible = entries[0].isIntersecting;\n\t\t\t\n\t\t\tif(!this.initialized){\n\t\t\t\tthis.initialized = true;\n\t\t\t\tthis.initialRedraw = !this.visible;\n\t\t\t}else {\n\t\t\t\tif(this.visible){\n\t\t\t\t\tthis.redrawTable(this.initialRedraw);\n\t\t\t\t\tthis.initialRedraw = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.visibilityObserver.observe(this.table.element);\n\t}\n\t\n\tredrawTable(force){\n\t\tif(this.initialized && this.visible){\n\t\t\tthis.table.columnManager.rerenderColumns(true);\n\t\t\tthis.table.redraw(force);\n\t\t}\n\t}\n\t\n\ttableResized(){\n\t\tthis.table.rowManager.redraw();\n\t}\n\t\n\tclearBindings(){\n\t\tif(this.binding){\n\t\t\twindow.removeEventListener(\"resize\", this.binding);\n\t\t}\n\t\t\n\t\tif(this.resizeObserver){\n\t\t\tthis.resizeObserver.unobserve(this.table.element);\n\t\t}\n\t\t\n\t\tif(this.visibilityObserver){\n\t\t\tthis.visibilityObserver.unobserve(this.table.element);\n\t\t}\n\t\t\n\t\tif(this.containerObserver){\n\t\t\tthis.containerObserver.unobserve(this.table.element.parentNode);\n\t\t}\n\t}\n}\n\nfunction responsiveCollapse(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 = `<svg class='tabulator-responsive-collapse-toggle-open' viewbox=\"0 0 24 24\">\n <line x1=\"7\" y1=\"12\" x2=\"17\" y2=\"12\" fill=\"none\" stroke-width=\"3\" stroke-linecap=\"round\" />\n <line y1=\"7\" x1=\"12\" y2=\"17\" x2=\"12\" fill=\"none\" stroke-width=\"3\" stroke-linecap=\"round\" />\n</svg>\n\n<svg class='tabulator-responsive-collapse-toggle-close' viewbox=\"0 0 24 24\">\n <line x1=\"7\" y1=\"12\" x2=\"17\" y2=\"12\" fill=\"none\" stroke-width=\"3\" stroke-linecap=\"round\" />\n</svg>`;\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}\n\nvar extensions$2 = {\r\n\tformat:{\r\n\t\tformatters:{\r\n\t\t\tresponsiveCollapse:responsiveCollapse,\r\n\t\t}\r\n\t}\r\n};\n\nclass ResponsiveLayout extends Module{\n\n\tstatic moduleName = \"responsiveLayout\";\n\tstatic moduleExtensions = extensions$2;\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\tif(this.collapseFormatter){\n\t\t\tthis.collapseFormatter = this.collapseFormatter.bind(this.table);\n\t\t}\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\trow.calcHeight(true);\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((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\t\n\t\t\tthis.modules.localize.bind(\"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});\n\n\t\treturn Object.keys(data).length ? list : \"\";\n\t}\n}\n\nfunction rowSelection(cell, formatterParams, onRendered){\n\tvar checkbox = document.createElement(\"input\");\n\tvar blocked = false;\n\n\tcheckbox.type = 'checkbox';\n\n\tcheckbox.setAttribute(\"aria-label\", \"Select Row\");\n\t\n\tif(this.table.modExists(\"selectRow\", true)){\n\n\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tif(typeof cell.getRow == 'function'){\n\t\t\tvar row = cell.getRow();\n\n\t\t\tif(row instanceof RowComponent){\n\n\t\t\t\tcheckbox.addEventListener(\"change\", (e) => {\n\t\t\t\t\tif(this.table.options.selectableRowsRangeMode === \"click\"){\n\t\t\t\t\t\tif(!blocked){\n\t\t\t\t\t\t\trow.toggleSelect();\n\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\tblocked = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}else {\n\t\t\t\t\t\trow.toggleSelect();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif(this.table.options.selectableRowsRangeMode === \"click\"){\n\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\tblocked = true;\n\t\t\t\t\t\tthis.table.modules.selectRow.handleComplexRowClick(row._row, e);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tcheckbox.checked = row.isSelected && row.isSelected();\n\t\t\t\tthis.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);\n\t\t\t}else {\n\t\t\t\tcheckbox = \"\";\n\t\t\t}\n\t\t}else {\n\t\t\tcheckbox.addEventListener(\"change\", (e) => {\n\t\t\t\tif(this.table.modules.selectRow.selectedRows.length){\n\t\t\t\t\tthis.table.deselectRow();\n\t\t\t\t}else {\n\t\t\t\t\tthis.table.selectRow(formatterParams.rowRange);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);\n\t\t}\n\t}\n\n\treturn checkbox;\n}\n\nvar extensions$1 = {\r\n\tformat:{\r\n\t\tformatters:{\r\n\t\t\trowSelection:rowSelection,\r\n\t\t}\r\n\t}\r\n};\n\nclass SelectRow extends Module{\n\n\tstatic moduleName = \"selectRow\";\n\tstatic moduleExtensions = extensions$1;\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.selecting = false; //flag selecting in progress\n\t\tthis.lastClickedRow = false; //last clicked row\n\t\tthis.selectPrev = []; //hold previously selected element for drag drop selection\n\t\tthis.selectedRows = []; //hold selected rows\n\t\tthis.headerCheckboxElement = null; // hold header select element\n\t\t\n\t\tthis.registerTableOption(\"selectableRows\", \"highlight\"); //highlight rows on hover\n\t\tthis.registerTableOption(\"selectableRowsRangeMode\", \"drag\"); //highlight rows on hover\n\t\tthis.registerTableOption(\"selectableRowsRollingSelection\", true); //roll selection once maximum number of selectable rows is reached\n\t\tthis.registerTableOption(\"selectableRowsPersistence\", true); // maintain selection when table view is updated\n\t\tthis.registerTableOption(\"selectableRowsCheck\", function(data, row){return true;}); //check whether row is selectable\n\t\t\n\t\tthis.registerTableFunction(\"selectRow\", this.selectRows.bind(this));\n\t\tthis.registerTableFunction(\"deselectRow\", this.deselectRows.bind(this));\n\t\tthis.registerTableFunction(\"toggleSelectRow\", this.toggleRow.bind(this));\n\t\tthis.registerTableFunction(\"getSelectedRows\", this.getSelectedRows.bind(this));\n\t\tthis.registerTableFunction(\"getSelectedData\", this.getSelectedData.bind(this));\n\t\t\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"select\", this.selectRows.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"deselect\", this.deselectRows.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"toggleSelect\", this.toggleRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"isSelected\", this.isRowSelected.bind(this));\n\t}\n\t\n\tinitialize(){\n\n\t\tthis.deprecatedOptionsCheck();\n\n\t\tif(this.table.options.selectableRows === \"highlight\" && this.table.options.selectableRange){\n\t\t\tthis.table.options.selectableRows = false;\n\t\t}\n\n\t\tif(this.table.options.selectableRows !== false){\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleted.bind(this));\n\t\t\tthis.subscribe(\"rows-wipe\", this.clearSelectionData.bind(this));\n\t\t\tthis.subscribe(\"rows-retrieve\", this.rowRetrieve.bind(this));\n\t\t\t\n\t\t\tif(this.table.options.selectableRows && !this.table.options.selectableRowsPersistence){\n\t\t\t\tthis.subscribe(\"data-refreshing\", this.deselectRows.bind(this));\n\t\t\t}\n\t\t}\n\t}\n\n\tdeprecatedOptionsCheck(){\n\t\t// this.deprecationCheck(\"selectable\", \"selectableRows\", true);\n\t\t// this.deprecationCheck(\"selectableRollingSelection\", \"selectableRowsRollingSelection\", true);\n\t\t// this.deprecationCheck(\"selectableRangeMode\", \"selectableRowsRangeMode\", true);\n\t\t// this.deprecationCheck(\"selectablePersistence\", \"selectableRowsPersistence\", true);\n\t\t// this.deprecationCheck(\"selectableCheck\", \"selectableRowsCheck\", true);\n\t}\n\t\n\trowRetrieve(type, prevValue){\n\t\treturn type === \"selected\" ? this.selectedRows : prevValue;\n\t}\n\t\n\trowDeleted(row){\n\t\tthis._deselectRow(row, true);\n\t}\n\t\n\tclearSelectionData(silent){\n\t\tvar prevSelected = this.selectedRows.length;\n\n\t\tthis.selecting = false;\n\t\tthis.lastClickedRow = false;\n\t\tthis.selectPrev = [];\n\t\tthis.selectedRows = [];\n\t\t\n\t\tif(prevSelected && silent !== true){\n\t\t\tthis._rowSelectionChanged();\n\t\t}\n\t}\n\t\n\tinitializeRow(row){\n\t\tvar self = this,\n\t\tselectable = self.checkRowSelectability(row),\n\t\telement = row.getElement();\n\t\t\n\t\t// trigger end of row selection\n\t\tvar endSelect = function(){\n\t\t\t\n\t\t\tsetTimeout(function(){\n\t\t\t\tself.selecting = false;\n\t\t\t}, 50);\n\t\t\t\n\t\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\n\t\t};\n\t\t\n\t\trow.modules.select = {selected:false};\n\n\t\telement.classList.toggle(\"tabulator-selectable\", selectable);\n\t\telement.classList.toggle(\"tabulator-unselectable\", !selectable);\n\t\t\n\t\t//set row selection class\n\t\tif(self.checkRowSelectability(row)){\t\t\t\n\t\t\tif(self.table.options.selectableRows && self.table.options.selectableRows != \"highlight\"){\n\t\t\t\tif(self.table.options.selectableRowsRangeMode === \"click\"){\n\t\t\t\t\telement.addEventListener(\"click\", this.handleComplexRowClick.bind(this, row));\n\t\t\t\t}else {\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\n\t\t\t\t\t\tif(!self.table.modExists(\"edit\") || !self.table.modules.edit.getCurrentCell()){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(!self.selecting){\n\t\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\telement.addEventListener(\"mousedown\", function(e){\n\t\t\t\t\t\tif(e.shiftKey){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.selecting = true;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.selectPrev = [];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"mouseup\", endSelect);\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"keyup\", endSelect);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\telement.addEventListener(\"mouseenter\", function(e){\n\t\t\t\t\t\tif(self.selecting){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(self.selectPrev[1] == row){\n\t\t\t\t\t\t\t\tself.toggleRow(self.selectPrev[0]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\telement.addEventListener(\"mouseout\", function(e){\n\t\t\t\t\t\tif(self.selecting){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\tself.selectPrev.unshift(row);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\thandleComplexRowClick(row, e){\n\t\tif(e.shiftKey){\n\t\t\tthis.table._clearSelection();\n\t\t\tthis.lastClickedRow = this.lastClickedRow || row;\n\t\t\t\n\t\t\tvar lastClickedRowIdx = this.table.rowManager.getDisplayRowIndex(this.lastClickedRow);\n\t\t\tvar rowIdx = this.table.rowManager.getDisplayRowIndex(row);\n\t\t\t\n\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\n\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\n\t\t\t\n\t\t\tvar rows = this.table.rowManager.getDisplayRows().slice(0);\n\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\n\t\t\t\n\t\t\tif(e.ctrlKey || e.metaKey){\n\t\t\t\ttoggledRows.forEach((toggledRow)=>{\n\t\t\t\t\tif(toggledRow !== this.lastClickedRow){\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.table.options.selectableRows !== true && !this.isRowSelected(row)){\n\t\t\t\t\t\t\tif(this.selectedRows.length < this.table.options.selectableRows){\n\t\t\t\t\t\t\t\tthis.toggleRow(toggledRow);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\tthis.toggleRow(toggledRow);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tthis.lastClickedRow = row;\n\t\t\t}else {\n\t\t\t\tthis.deselectRows(undefined, true);\n\t\t\t\t\n\t\t\t\tif(this.table.options.selectableRows !== true){\n\t\t\t\t\tif(toggledRows.length > this.table.options.selectableRows){\n\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, this.table.options.selectableRows);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.selectRows(toggledRows);\n\t\t\t}\n\t\t\tthis.table._clearSelection();\n\t\t}\n\t\telse if(e.ctrlKey || e.metaKey){\n\t\t\tthis.toggleRow(row);\n\t\t\tthis.lastClickedRow = row;\n\t\t}else {\n\t\t\tthis.deselectRows(undefined, true);\n\t\t\tthis.selectRows(row);\n\t\t\tthis.lastClickedRow = row;\n\t\t}\n\t}\n\n\tcheckRowSelectability(row){\n\t\tif(row && row.type === \"row\"){\n\t\t\treturn this.table.options.selectableRowsCheck.call(this.table, row.getComponent());\n\t\t}\n\n\t\treturn false;\n\t}\n\t\n\t//toggle row selection\n\ttoggleRow(row){\n\t\tif(this.checkRowSelectability(row)){\n\t\t\tif(row.modules.select && row.modules.select.selected){\n\t\t\t\tthis._deselectRow(row);\n\t\t\t}else {\n\t\t\t\tthis._selectRow(row);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//select a number of rows\n\tselectRows(rows){\n\t\tvar changes = [], \n\t\trowMatch, change;\n\t\t\n\t\tswitch(typeof rows){\n\t\t\tcase \"undefined\":\n\t\t\t\trowMatch = this.table.rowManager.rows;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"number\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase \"string\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\n\t\t\t\tif(!rowMatch){\n\t\t\t\t\trowMatch = this.table.rowManager.getRows(rows);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\trowMatch = rows;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(Array.isArray(rowMatch)){\n\t\t\tif(rowMatch.length){\n\t\t\t\trowMatch.forEach((row) => {\n\t\t\t\t\tchange = this._selectRow(row, true, true);\n\n\t\t\t\t\tif(change){\n\t\t\t\t\t\tchanges.push(change);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis._rowSelectionChanged(false, changes);\n\t\t\t}\n\t\t}else {\n\t\t\tif(rowMatch){\n\t\t\t\tthis._selectRow(rowMatch, false, true);\n\t\t\t}\n\t\t}\t\n\t}\n\t\n\t//select an individual row\n\t_selectRow(rowInfo, silent, force){\n\t\t//handle max row count\n\t\tif(!isNaN(this.table.options.selectableRows) && this.table.options.selectableRows !== true && !force){\n\t\t\tif(this.selectedRows.length >= this.table.options.selectableRows){\n\t\t\t\tif(this.table.options.selectableRowsRollingSelection){\n\t\t\t\t\tthis._deselectRow(this.selectedRows[0]);\n\t\t\t\t}else {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar row = this.table.rowManager.findRow(rowInfo);\n\t\t\n\t\tif(row){\n\t\t\tif(this.selectedRows.indexOf(row) == -1){\n\t\t\t\trow.getElement().classList.add(\"tabulator-selected\");\n\t\t\t\tif(!row.modules.select){\n\t\t\t\t\trow.modules.select = {};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trow.modules.select.selected = true;\n\t\t\t\tif(row.modules.select.checkboxEl){\n\t\t\t\t\trow.modules.select.checkboxEl.checked = true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.selectedRows.push(row);\n\t\t\t\t\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\n\t\t\t\t\tthis.childRowSelection(row, true);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatchExternal(\"rowSelected\", row.getComponent());\n\t\t\t\t\n\t\t\t\tthis._rowSelectionChanged(silent, row);\n\n\t\t\t\treturn row;\n\t\t\t}\n\t\t}else {\n\t\t\tif(!silent){\n\t\t\t\tconsole.warn(\"Selection Error - No such row found, ignoring selection:\" + rowInfo);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tisRowSelected(row){\n\t\treturn this.selectedRows.indexOf(row) !== -1;\n\t}\n\t\n\t//deselect a number of rows\n\tdeselectRows(rows, silent){\n\t\tvar changes = [], \n\t\trowMatch, change;\n\t\t\n\t\tswitch(typeof rows){\n\t\t\tcase \"undefined\":\n\t\t\t\trowMatch = Object.assign([], this.selectedRows);\n\t\t\t\tbreak;\n\n\t\t\tcase \"number\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"string\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\n\t\t\t\tif(!rowMatch){\n\t\t\t\t\trowMatch = this.table.rowManager.getRows(rows);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\trowMatch = rows;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(Array.isArray(rowMatch)){\n\t\t\tif(rowMatch.length){\n\t\t\t\trowMatch.forEach((row) => {\n\t\t\t\t\tchange = this._deselectRow(row, true, true);\n\n\t\t\t\t\tif(change){\n\t\t\t\t\t\tchanges.push(change);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis._rowSelectionChanged(silent, [], changes);\n\t\t\t}\n\t\t}else {\n\t\t\tif(rowMatch){\n\t\t\t\tthis._deselectRow(rowMatch, silent, true);\n\t\t\t}\n\t\t}\t\n\t}\n\t\n\t//deselect an individual row\n\t_deselectRow(rowInfo, silent){\n\t\tvar self = this,\n\t\trow = self.table.rowManager.findRow(rowInfo),\n\t\tindex, element;\n\t\t\n\t\tif(row){\n\t\t\tindex = self.selectedRows.findIndex(function(selectedRow){\n\t\t\t\treturn selectedRow == row;\n\t\t\t});\n\t\t\t\n\t\t\tif(index > -1){\n\n\t\t\t\telement = row.getElement();\n\t\t\t\t\n\t\t\t\tif(element){\n\t\t\t\t\telement.classList.remove(\"tabulator-selected\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(!row.modules.select){\n\t\t\t\t\trow.modules.select = {};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trow.modules.select.selected = false;\n\t\t\t\tif(row.modules.select.checkboxEl){\n\t\t\t\t\trow.modules.select.checkboxEl.checked = false;\n\t\t\t\t}\n\t\t\t\tself.selectedRows.splice(index, 1);\n\t\t\t\t\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\n\t\t\t\t\tthis.childRowSelection(row, false);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatchExternal(\"rowDeselected\", row.getComponent());\n\t\t\t\t\n\t\t\t\tself._rowSelectionChanged(silent, undefined, row);\n\n\t\t\t\treturn row;\n\t\t\t}\n\t\t}else {\n\t\t\tif(!silent){\n\t\t\t\tconsole.warn(\"Deselection Error - No such row found, ignoring selection:\" + rowInfo);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tgetSelectedData(){\n\t\tvar data = [];\n\t\t\n\t\tthis.selectedRows.forEach(function(row){\n\t\t\tdata.push(row.getData());\n\t\t});\n\t\t\n\t\treturn data;\n\t}\n\t\n\tgetSelectedRows(){\n\t\tvar rows = [];\n\t\t\n\t\tthis.selectedRows.forEach(function(row){\n\t\t\trows.push(row.getComponent());\n\t\t});\n\t\t\n\t\treturn rows;\n\t}\n\t\n\t_rowSelectionChanged(silent, selected = [], deselected = []){\n\t\tif(this.headerCheckboxElement){\n\t\t\tif(this.selectedRows.length === 0){\n\t\t\t\tthis.headerCheckboxElement.checked = false;\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\n\t\t\t} else if(this.table.rowManager.rows.length === this.selectedRows.length){\n\t\t\t\tthis.headerCheckboxElement.checked = true;\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\n\t\t\t} else {\n\t\t\t\tthis.headerCheckboxElement.indeterminate = true;\n\t\t\t\tthis.headerCheckboxElement.checked = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(!silent){\n\t\t\tif(!Array.isArray(selected)){\n\t\t\t\tselected = [selected];\n\t\t\t}\n\n\t\t\tselected = selected.map(row => row.getComponent());\n\n\t\t\tif(!Array.isArray(deselected)){\n\t\t\t\tdeselected = [deselected];\n\t\t\t}\n\n\t\t\tdeselected = deselected.map(row => row.getComponent());\n\n\t\t\tthis.dispatchExternal(\"rowSelectionChanged\", this.getSelectedData(), this.getSelectedRows(), selected, deselected);\n\t\t}\n\t}\n\t\n\tregisterRowSelectCheckbox (row, element) {\n\t\tif(!row._row.modules.select){\n\t\t\trow._row.modules.select = {};\n\t\t}\n\t\t\n\t\trow._row.modules.select.checkboxEl = element;\n\t}\n\t\n\tregisterHeaderSelectCheckbox (element) {\n\t\tthis.headerCheckboxElement = element;\n\t}\n\t\n\tchildRowSelection(row, select){\n\t\tvar children = this.table.modules.dataTree.getChildren(row, true, 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\nclass RangeComponent {\n\tconstructor(range) {\n\t\tthis._range = range;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function (target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t} else {\n\t\t\t\t\treturn target._range.table.componentFunctionBinder.handle(\"range\", target._range, name);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t}\n\n\tgetElement() {\n\t\treturn this._range.element;\n\t}\n\n\tgetData() {\n\t\treturn this._range.getData();\n\t}\n\n\tgetCells() {\n\t\treturn this._range.getCells(true, true);\n\t}\n\n\tgetStructuredCells() {\n\t\treturn this._range.getStructuredCells();\n\t}\n\n\tgetRows() {\n\t\treturn this._range.getRows().map((row) => row.getComponent());\n\t}\n\n\tgetColumns() {\n\t\treturn this._range.getColumns().map((column) => column.getComponent());\n\t}\n\t\n\tgetBounds() {\n\t\treturn this._range.getBounds();\n\t}\n\n\tgetTopEdge() {\n\t\treturn this._range.top;\n\t}\n\n\tgetBottomEdge() {\n\t\treturn this._range.bottom;\n\t}\n\n\tgetLeftEdge() {\n\t\treturn this._range.left;\n\t}\n\n\tgetRightEdge() {\n\t\treturn this._range.right;\n\t}\n\n\tsetBounds(start, end){\n\t\tif(this._range.destroyedGuard(\"setBounds\")){\n\t\t\tthis._range.setBounds(start ? start._cell : start, end ? end._cell : end);\n\t\t}\n\t}\n\n\tsetStartBound(start){\n\t\tif(this._range.destroyedGuard(\"setStartBound\")){\n\t\t\tthis._range.setEndBound(start ? start._cell : start);\n\t\t\tthis._range.rangeManager.layoutElement();\n\t\t}\n\t}\n\n\tsetEndBound(end){\n\t\tif(this._range.destroyedGuard(\"setEndBound\")){\n\t\t\tthis._range.setEndBound(end ? end._cell : end);\n\t\t\tthis._range.rangeManager.layoutElement();\n\t\t}\n\t}\n\n\tclearValues(){\n\t\tif(this._range.destroyedGuard(\"clearValues\")){\n\t\t\tthis._range.clearValues();\n\t\t}\n\t}\n\n\tremove(){\n\t\tif(this._range.destroyedGuard(\"remove\")){\n\t\t\tthis._range.destroy(true);\n\t\t}\n\t}\n}\n\nclass Range extends CoreFeature{\n\tconstructor(table, rangeManager, start, end) {\n\t\tsuper(table);\n\t\t\n\t\tthis.rangeManager = rangeManager;\n\t\tthis.element = null;\n\t\tthis.initialized = false;\n\t\tthis.initializing = {\n\t\t\tstart:false,\n\t\t\tend:false,\n\t\t};\n\t\tthis.destroyed = false;\n\t\t\n\t\tthis.top = 0;\n\t\tthis.bottom = 0;\n\t\tthis.left = 0;\n\t\tthis.right = 0;\n\t\t\n\t\tthis.table = table;\n\t\tthis.start = {row:0, col:0};\n\t\tthis.end = {row:0, col:0};\n\n\t\tif(this.rangeManager.rowHeader){\n\t\t\tthis.left = 1;\n\t\t\tthis.right = 1;\n\t\t\tthis.start.col = 1;\n\t\t\tthis.end.col = 1;\n\t\t}\n\t\t\n\t\tthis.initElement();\n\t\t\n\t\tsetTimeout(() => {\n\t\t\tthis.initBounds(start, end);\n\t\t});\n\t}\n\t\n\tinitElement(){\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-range\");\n\t}\n\t\n\tinitBounds(start, end){\n\t\tthis._updateMinMax();\n\t\t\n\t\tif(start){\n\t\t\tthis.setBounds(start, end || start);\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Boundary Setup ///////\n\t///////////////////////////////////\n\t\n\tsetStart(row, col) {\n\t\tif(this.start.row !== row || this.start.col !== col){\n\t\t\tthis.start.row = row;\n\t\t\tthis.start.col = col;\n\t\t\t\n\t\t\tthis.initializing.start = true;\n\t\t\tthis._updateMinMax();\n\t\t}\n\t}\n\t\n\tsetEnd(row, col) {\n\t\tif(this.end.row !== row || this.end.col !== col){\n\t\t\tthis.end.row = row;\n\t\t\tthis.end.col = col;\n\t\t\t\n\t\t\tthis.initializing.end = true;\n\t\t\tthis._updateMinMax();\n\t\t}\n\t}\n\t\n\tsetBounds(start, end, visibleRows){\n\t\tif(start){\n\t\t\tthis.setStartBound(start);\n\t\t}\n\t\t\n\t\tthis.setEndBound(end || start);\n\t\tthis.rangeManager.layoutElement(visibleRows);\n\t}\n\t\n\tsetStartBound(element){\n\t\tvar row, col;\n\t\t\n\t\tif (element.type === \"column\") {\n\t\t\tif(this.rangeManager.columnSelection){\n\t\t\t\tthis.setStart(0, element.getPosition() - 1);\n\t\t\t}\n\t\t}else {\n\t\t\trow = element.row.position - 1;\n\t\t\tcol = element.column.getPosition() - 1;\n\t\t\t\n\t\t\tif (element.column === this.rangeManager.rowHeader) {\n\t\t\t\tthis.setStart(row, 1);\n\t\t\t} else {\n\t\t\t\tthis.setStart(row, col);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tsetEndBound(element){\n\t\tvar rowsCount = this._getTableRows().length,\n\t\trow, col, isRowHeader;\n\t\t\n\t\tif (element.type === \"column\") {\n\t\t\tif(this.rangeManager.columnSelection){\n\t\t\t\tif (this.rangeManager.selecting === \"column\") {\n\t\t\t\t\tthis.setEnd(rowsCount - 1, element.getPosition() - 1);\n\t\t\t\t} else if (this.rangeManager.selecting === \"cell\") {\n\t\t\t\t\tthis.setEnd(0, element.getPosition() - 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}else {\n\t\t\trow = element.row.position - 1;\n\t\t\tcol = element.column.getPosition() - 1;\n\t\t\tisRowHeader = element.column === this.rangeManager.rowHeader;\n\t\t\t\n\t\t\tif (this.rangeManager.selecting === \"row\") {\n\t\t\t\tthis.setEnd(row, this._getTableColumns().length - 1);\n\t\t\t} else if (this.rangeManager.selecting !== \"row\" && isRowHeader) {\n\t\t\t\tthis.setEnd(row, 0);\n\t\t\t} else if (this.rangeManager.selecting === \"column\") {\n\t\t\t\tthis.setEnd(rowsCount - 1, col);\n\t\t\t} else {\n\t\t\t\tthis.setEnd(row, col);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_updateMinMax() {\n\t\tthis.top = Math.min(this.start.row, this.end.row);\n\t\tthis.bottom = Math.max(this.start.row, this.end.row);\n\t\tthis.left = Math.min(this.start.col, this.end.col);\n\t\tthis.right = Math.max(this.start.col, this.end.col);\n\t\t\n\t\tif(this.initialized){\n\t\t\tthis.dispatchExternal(\"rangeChanged\", this.getComponent());\n\t\t}else {\n\t\t\tif(this.initializing.start && this.initializing.end){\n\t\t\t\tthis.initialized = true;\n\t\t\t\tthis.dispatchExternal(\"rangeAdded\", this.getComponent());\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_getTableColumns() {\n\t\treturn this.table.columnManager.getVisibleColumnsByIndex();\n\t}\n\t\n\t_getTableRows() {\n\t\treturn this.table.rowManager.getDisplayRows().filter(row=> row.type === \"row\");\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Rendering ///////\n\t///////////////////////////////////\n\t\n\tlayout() {\n\t\tvar _vDomTop = this.table.rowManager.renderer.vDomTop,\n\t\t_vDomBottom = this.table.rowManager.renderer.vDomBottom,\n\t\t_vDomLeft = this.table.columnManager.renderer.leftCol,\n\t\t_vDomRight = this.table.columnManager.renderer.rightCol,\t\t\n\t\ttop, bottom, left, right, topLeftCell, bottomRightCell, topLeftCellEl, bottomRightCellEl, topLeftRowEl, bottomRightRowEl;\n\n\t\tif(this.table.options.renderHorizontal === \"virtual\" && this.rangeManager.rowHeader) {\n\t\t\t_vDomRight += 1;\n\t\t}\n\t\t\n\t\tif (_vDomTop == null) {\n\t\t\t_vDomTop = 0;\n\t\t}\n\t\t\n\t\tif (_vDomBottom == null) {\n\t\t\t_vDomBottom = Infinity;\n\t\t}\n\t\t\n\t\tif (_vDomLeft == null) {\n\t\t\t_vDomLeft = 0;\n\t\t}\n\t\t\n\t\tif (_vDomRight == null) {\n\t\t\t_vDomRight = Infinity;\n\t\t}\n\t\t\n\t\tif (this.overlaps(_vDomLeft, _vDomTop, _vDomRight, _vDomBottom)) {\n\t\t\ttop = Math.max(this.top, _vDomTop);\n\t\t\tbottom = Math.min(this.bottom, _vDomBottom);\n\t\t\tleft = Math.max(this.left, _vDomLeft);\n\t\t\tright = Math.min(this.right, _vDomRight);\n\t\t\t\n\t\t\ttopLeftCell = this.rangeManager.getCell(top, left);\n\t\t\tbottomRightCell = this.rangeManager.getCell(bottom, right);\n\t\t\ttopLeftCellEl = topLeftCell.getElement();\n\t\t\tbottomRightCellEl = bottomRightCell.getElement();\n\t\t\ttopLeftRowEl = topLeftCell.row.getElement();\n\t\t\tbottomRightRowEl = bottomRightCell.row.getElement();\n\t\t\t\n\t\t\tthis.element.classList.add(\"tabulator-range-active\");\n\t\t\t// this.element.classList.toggle(\"tabulator-range-active\", this === this.rangeManager.activeRange);\n\n\t\t\tif(this.table.rtl){\n\t\t\t\tthis.element.style.right = topLeftRowEl.offsetWidth - topLeftCellEl.offsetLeft - topLeftCellEl.offsetWidth + \"px\";\n\t\t\t\tthis.element.style.width = topLeftCellEl.offsetLeft + topLeftCellEl.offsetWidth - bottomRightCellEl.offsetLeft + \"px\";\n\t\t\t}else {\n\t\t\t\tthis.element.style.left = topLeftRowEl.offsetLeft + topLeftCellEl.offsetLeft + \"px\";\n\t\t\t\tthis.element.style.width = bottomRightCellEl.offsetLeft + bottomRightCellEl.offsetWidth - topLeftCellEl.offsetLeft + \"px\";\n\t\t\t}\n\t\t\t\n\t\t\tthis.element.style.top = topLeftRowEl.offsetTop + \"px\";\n\t\t\tthis.element.style.height = bottomRightRowEl.offsetTop + bottomRightRowEl.offsetHeight - topLeftRowEl.offsetTop + \"px\";\n\t\t}\n\t}\n\t\n\tatTopLeft(cell) {\n\t\treturn cell.row.position - 1 === this.top && cell.column.getPosition() - 1 === this.left;\n\t}\n\t\n\tatBottomRight(cell) {\n\t\treturn cell.row.position - 1 === this.bottom && cell.column.getPosition() - 1 === this.right;\n\t}\n\t\n\toccupies(cell) {\n\t\treturn this.occupiesRow(cell.row) && this.occupiesColumn(cell.column);\n\t}\n\t\n\toccupiesRow(row) {\n\t\treturn this.top <= row.position - 1 && row.position - 1 <= this.bottom;\n\t}\n\t\n\toccupiesColumn(col) {\n\t\treturn this.left <= col.getPosition() - 1 && col.getPosition() - 1 <= this.right;\n\t}\n\t\n\toverlaps(left, top, right, bottom) {\n\t\tif ((this.left > right || left > this.right) || (this.top > bottom || top > this.bottom)){\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\treturn true;\n\t}\n\t\n\tgetData() {\n\t\tvar data = [],\n\t\trows = this.getRows(),\n\t\tcolumns = this.getColumns();\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tvar rowData = row.getData(),\n\t\t\tresult = {};\n\t\t\t\n\t\t\tcolumns.forEach((column) => {\n\t\t\t\tresult[column.field] = rowData[column.field];\n\t\t\t});\n\t\t\t\n\t\t\tdata.push(result);\n\t\t});\n\t\t\n\t\treturn data;\n\t}\n\t\n\tgetCells(structured, component) {\n\t\tvar cells = [],\n\t\trows = this.getRows(),\n\t\tcolumns = this.getColumns();\n\t\t\n\t\tif (structured) {\n\t\t\tcells = rows.map((row) => {\n\t\t\t\tvar arr = [];\n\t\t\t\t\n\t\t\t\trow.getCells().forEach((cell) => {\n\t\t\t\t\tif (columns.includes(cell.column)) {\n\t\t\t\t\t\tarr.push(component ? cell.getComponent() : cell);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn arr;\n\t\t\t});\n\t\t} else {\n\t\t\trows.forEach((row) => {\n\t\t\t\trow.getCells().forEach((cell) => {\n\t\t\t\t\tif (columns.includes(cell.column)) {\n\t\t\t\t\t\tcells.push(component ? cell.getComponent() : cell);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn cells;\n\t}\n\t\n\tgetStructuredCells() {\n\t\treturn this.getCells(true, true);\n\t}\n\t\n\tgetRows() {\n\t\treturn this._getTableRows().slice(this.top, this.bottom + 1);\n\t}\n\t\n\tgetColumns() {\n\t\treturn this._getTableColumns().slice(this.left, this.right + 1);\n\t}\n\t\n\tclearValues(){\n\t\tvar cells = this.getCells();\n\t\tvar clearValue = this.table.options.selectableRangeClearCellsValue;\n\t\t\n\t\tthis.table.blockRedraw();\n\t\t\n\t\tcells.forEach((cell) => {\n\t\t\tcell.setValue(clearValue);\n\t\t});\n\t\t\n\t\tthis.table.restoreRedraw();\n\t\t\n\t}\n\t\n\tgetBounds(component){\n\t\tvar cells = this.getCells(false, component),\n\t\toutput = {\n\t\t\tstart:null,\n\t\t\tend:null,\n\t\t};\n\t\t\n\t\tif(cells.length){\n\t\t\toutput.start = cells[0];\n\t\t\toutput.end = cells[cells.length - 1];\n\t\t}else {\n\t\t\tconsole.warn(\"No bounds defined on range\");\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetComponent() {\n\t\tif (!this.component) {\n\t\t\tthis.component = new RangeComponent(this);\n\t\t}\n\t\treturn this.component;\n\t}\n\t\n\tdestroy(notify) {\n\t\tthis.destroyed = true;\n\t\t\n\t\tthis.element.remove();\n\t\t\n\t\tif(notify){\n\t\t\tthis.rangeManager.rangeRemoved(this);\n\t\t}\n\t\t\n\t\tif(this.initialized){\n\t\t\tthis.dispatchExternal(\"rangeRemoved\", this.getComponent());\n\t\t}\n\t}\n\t\n\tdestroyedGuard(func){\n\t\tif(this.destroyed){\n\t\t\tconsole.warn(\"You cannot call the \" + func + \" function on a destroyed range\");\n\t\t}\n\t\t\n\t\treturn !this.destroyed;\n\t}\n}\n\nvar bindings = {\r\n\trangeJumpUp:[\"ctrl + 38\", \"meta + 38\"],\r\n\trangeJumpDown:[\"ctrl + 40\", \"meta + 40\"],\r\n\trangeJumpLeft:[\"ctrl + 37\", \"meta + 37\"],\r\n\trangeJumpRight:[\"ctrl + 39\", \"meta + 39\"],\r\n\trangeExpandUp:\"shift + 38\",\r\n\trangeExpandDown:\"shift + 40\",\r\n\trangeExpandLeft:\"shift + 37\",\r\n\trangeExpandRight:\"shift + 39\",\r\n\trangeExpandJumpUp:[\"ctrl + shift + 38\", \"meta + shift + 38\"],\r\n\trangeExpandJumpDown:[\"ctrl + shift + 40\", \"meta + shift + 40\"],\r\n\trangeExpandJumpLeft:[\"ctrl + shift + 37\", \"meta + shift + 37\"],\r\n\trangeExpandJumpRight:[\"ctrl + shift + 39\", \"meta + shift + 39\"],\r\n};\n\nvar actions = {\r\n\trangeJumpLeft: function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"left\", true, false);\r\n\t},\r\n\trangeJumpRight: function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"right\", true, false);\r\n\t},\r\n\trangeJumpUp: function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"up\", true, false);\r\n\t},\r\n\trangeJumpDown: function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"down\", true, false);\r\n\t},\r\n\trangeExpandLeft: function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"left\", false, true);\r\n\t},\r\n\trangeExpandRight: function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"right\", false, true);\r\n\t},\r\n\trangeExpandUp: function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"up\", false, true);\r\n\t},\r\n\trangeExpandDown: function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"down\", false, true);\r\n\t},\r\n\trangeExpandJumpLeft: function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"left\", true, true);\r\n\t},\r\n\trangeExpandJumpRight: function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"right\", true, true);\r\n\t},\r\n\trangeExpandJumpUp: function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"up\", true, true);\r\n\t},\r\n\trangeExpandJumpDown: function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"down\", true, true);\r\n\t},\r\n};\n\nvar pasteActions = {\r\n\trange:function(data){\r\n\t\tvar rows = [],\r\n\t\trange = this.table.modules.selectRange.activeRange,\r\n\t\tsingleCell = false,\r\n\t\tbounds, startCell, startRow, rowWidth, dataLength;\r\n\r\n\t\tdataLength = data.length;\r\n\t\t\r\n\t\tif(range){\r\n\t\t\tbounds = range.getBounds();\r\n\t\t\tstartCell = bounds.start;\r\n\t\t\t\r\n\t\t\tif(bounds.start === bounds.end){\r\n\t\t\t\tsingleCell = true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(startCell){\r\n\t\t\t\trows = this.table.rowManager.activeRows.slice();\r\n\t\t\t\tstartRow = rows.indexOf(startCell.row);\r\n\r\n\t\t\t\tif(singleCell){\r\n\t\t\t\t\trowWidth = data.length;\r\n\t\t\t\t}else {\r\n\t\t\t\t\trowWidth = (rows.indexOf(bounds.end.row) - startRow) + 1;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tif(startRow >-1){\r\n\t\t\t\t\tthis.table.blockRedraw();\r\n\t\t\t\t\t\r\n\t\t\t\t\trows = rows.slice(startRow, startRow + rowWidth);\r\n\t\t\t\t\t\r\n\t\t\t\t\trows.forEach((row, i) => {\r\n\t\t\t\t\t\trow.updateData(data[i % dataLength]);\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.table.restoreRedraw();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn rows;\r\n\t}\r\n};\n\nvar pasteParsers = {\r\n\trange:function(clipboard){\r\n\t\tvar data = [],\r\n\t\trows = [],\r\n\t\trange = this.table.modules.selectRange.activeRange,\r\n\t\tsingleCell = false,\r\n\t\tbounds, startCell, colWidth, columnMap, startCol;\r\n\t\t\r\n\t\tif(range){\r\n\t\t\tbounds = range.getBounds();\r\n\t\t\tstartCell = bounds.start;\r\n\r\n\t\t\tif(bounds.start === bounds.end){\r\n\t\t\t\tsingleCell = true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(startCell){\r\n\t\t\t\t//get data from clipboard into array of columns and rows.\r\n\t\t\t\tclipboard = clipboard.split(\"\\n\");\r\n\t\t\t\t\r\n\t\t\t\tclipboard.forEach(function(row){\r\n\t\t\t\t\tdata.push(row.split(\"\\t\"));\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\tif(data.length){\r\n\t\t\t\t\tcolumnMap = this.table.columnManager.getVisibleColumnsByIndex();\r\n\t\t\t\t\tstartCol = columnMap.indexOf(startCell.column);\r\n\r\n\t\t\t\t\tif(startCol > -1){\r\n\t\t\t\t\t\tif(singleCell){\r\n\t\t\t\t\t\t\tcolWidth = data[0].length;\r\n\t\t\t\t\t\t}else {\r\n\t\t\t\t\t\t\tcolWidth = (columnMap.indexOf(bounds.end.column) - startCol) + 1;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tcolumnMap = columnMap.slice(startCol, startCol + colWidth);\r\n\r\n\t\t\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\t\t\tvar row = {};\r\n\t\t\t\t\t\t\tvar itemLength = item.length;\r\n\r\n\t\t\t\t\t\t\tcolumnMap.forEach(function(col, i){\r\n\t\t\t\t\t\t\t\trow[col.field] = item[i % itemLength];\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\trows.push(row);\t\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\treturn rows;\r\n\t\t\t\t\t}\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn false;\r\n\t}\r\n};\n\nvar columnLookups = {\r\n\trange:function(){\r\n\t\tvar columns = this.modules.selectRange.selectedColumns();\r\n\r\n\t\tif(this.columnManager.rowHeader){\r\n\t\t\tcolumns.unshift(this.columnManager.rowHeader);\r\n\t\t}\r\n\r\n\t\treturn columns;\r\n\t},\r\n};\n\nvar rowLookups = {\r\n\trange:function(){\r\n\t\treturn this.modules.selectRange.selectedRows();\r\n\t},\r\n};\n\nvar extensions = {\r\n\tkeybindings:{\r\n\t\tbindings:bindings,\r\n\t\tactions:actions\r\n\t},\r\n\tclipboard:{\r\n\t\tpasteActions:pasteActions,\r\n\t\tpasteParsers:pasteParsers\r\n\t},\r\n\texport:{\r\n\t\tcolumnLookups:columnLookups,\r\n\t\trowLookups:rowLookups,\r\n\t}\r\n};\n\nclass SelectRange extends Module {\n\t\n\tstatic moduleName = \"selectRange\";\n\tstatic moduleInitOrder = 1;\n\tstatic moduleExtensions = extensions;\n\t\n\tconstructor(table) {\n\t\tsuper(table);\n\t\t\n\t\tthis.selecting = \"cell\";\n\t\tthis.mousedown = false;\n\t\tthis.ranges = [];\n\t\tthis.overlay = null;\n\t\tthis.rowHeader = null;\n\t\tthis.layoutChangeTimeout = null;\n\t\tthis.columnSelection = false;\n\t\tthis.rowSelection = false;\n\t\tthis.maxRanges = 0;\n\t\tthis.activeRange = false;\n\t\tthis.blockKeydown = false;\n\t\t\n\t\tthis.keyDownEvent = this._handleKeyDown.bind(this);\n\t\tthis.mouseUpEvent = this._handleMouseUp.bind(this);\n\t\t\n\t\tthis.registerTableOption(\"selectableRange\", false); //enable selectable range\n\t\tthis.registerTableOption(\"selectableRangeColumns\", false); //enable selectable range\n\t\tthis.registerTableOption(\"selectableRangeRows\", false); //enable selectable range\n\t\tthis.registerTableOption(\"selectableRangeClearCells\", false); //allow clearing of active range\n\t\tthis.registerTableOption(\"selectableRangeClearCellsValue\", undefined); //value for cleared active range\n\t\tthis.registerTableOption(\"selectableRangeAutoFocus\", true); //focus on a cell after resetRanges\n\t\t\n\t\tthis.registerTableFunction(\"getRangesData\", this.getRangesData.bind(this));\n\t\tthis.registerTableFunction(\"getRanges\", this.getRanges.bind(this));\n\t\tthis.registerTableFunction(\"addRange\", this.addRangeFromComponent.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"cell\", \"getRanges\", this.cellGetRanges.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"getRanges\", this.rowGetRanges.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"getRanges\", this.colGetRanges.bind(this));\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Initialization ///////\n\t///////////////////////////////////\n\t\n\tinitialize() {\n\t\tif (this.options(\"selectableRange\")) {\t\n\t\t\tif(!this.options(\"selectableRows\")){\n\t\t\t\tthis.maxRanges = this.options(\"selectableRange\");\n\t\t\t\t\n\t\t\t\tthis.initializeTable();\n\t\t\t\tthis.initializeWatchers();\n\t\t\t}else {\n\t\t\t\tconsole.warn(\"SelectRange functionality cannot be used in conjunction with row selection\");\n\t\t\t}\n\n\t\t\tif(this.options('columns').findIndex((column) => column.frozen) > 0) {\n\t\t\t\tconsole.warn(\"Having frozen column in arbitrary position with selectRange option may result in unpredictable behavior.\");\n\t\t\t}\n\n\t\t\tif(this.options('columns').filter((column) => column.frozen) > 1) {\n\t\t\t\tconsole.warn(\"Having multiple frozen columns with selectRange option may result in unpredictable behavior.\");\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\tinitializeTable() {\t\t\n\t\tthis.overlay = document.createElement(\"div\");\n\t\tthis.overlay.classList.add(\"tabulator-range-overlay\");\n\t\t\n\t\tthis.rangeContainer = document.createElement(\"div\");\n\t\tthis.rangeContainer.classList.add(\"tabulator-range-container\");\n\t\t\n\t\tthis.activeRangeCellElement = document.createElement(\"div\");\n\t\tthis.activeRangeCellElement.classList.add(\"tabulator-range-cell-active\");\n\t\t\n\t\tthis.overlay.appendChild(this.rangeContainer);\n\t\tthis.overlay.appendChild(this.activeRangeCellElement);\n\t\t\n\t\tthis.table.rowManager.element.addEventListener(\"keydown\", this.keyDownEvent);\n\t\t\n\t\tthis.resetRanges();\n\t\t\n\t\tthis.table.rowManager.element.appendChild(this.overlay);\n\t\tthis.table.columnManager.element.setAttribute(\"tabindex\", 0);\n\t\tthis.table.element.classList.add(\"tabulator-ranges\");\n\t}\n\t\n\tinitializeWatchers() {\n\t\tthis.columnSelection = this.options(\"selectableRangeColumns\");\n\t\tthis.rowSelection = this.options(\"selectableRangeRows\");\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"column-mousedown\", this.handleColumnMouseDown.bind(this));\n\t\tthis.subscribe(\"column-mousemove\", this.handleColumnMouseMove.bind(this));\n\t\tthis.subscribe(\"column-resized\", this.handleColumnResized.bind(this));\n\t\tthis.subscribe(\"column-moving\", this.handleColumnMoving.bind(this));\n\t\tthis.subscribe(\"column-moved\", this.handleColumnMoved.bind(this));\n\t\tthis.subscribe(\"column-width\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"column-height\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"column-resized\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"columns-loaded\", this.updateHeaderColumn.bind(this));\n\t\t\n\t\tthis.subscribe(\"cell-height\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"cell-rendered\", this.renderCell.bind(this));\n\t\tthis.subscribe(\"cell-mousedown\", this.handleCellMouseDown.bind(this));\n\t\tthis.subscribe(\"cell-mousemove\", this.handleCellMouseMove.bind(this));\n\t\tthis.subscribe(\"cell-click\", this.handleCellClick.bind(this));\n\t\tthis.subscribe(\"cell-editing\", this.handleEditingCell.bind(this));\n\t\t\n\t\tthis.subscribe(\"page-changed\", this.redraw.bind(this));\n\t\t\n\t\tthis.subscribe(\"scroll-vertical\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"scroll-horizontal\", this.layoutChange.bind(this));\n\t\t\n\t\tthis.subscribe(\"data-destroy\", this.tableDestroyed.bind(this));\n\t\tthis.subscribe(\"data-processed\", this.resetRanges.bind(this));\n\t\t\n\t\tthis.subscribe(\"table-layout\", this.layoutElement.bind(this));\n\t\tthis.subscribe(\"table-redraw\", this.redraw.bind(this));\n\t\tthis.subscribe(\"table-destroy\", this.tableDestroyed.bind(this));\n\t\t\n\t\tthis.subscribe(\"edit-editor-clear\", this.finishEditingCell.bind(this));\n\t\tthis.subscribe(\"edit-blur\", this.restoreFocus.bind(this));\n\t\t\n\t\tthis.subscribe(\"keybinding-nav-prev\", this.keyNavigate.bind(this, \"left\"));\n\t\tthis.subscribe(\"keybinding-nav-next\", this.keyNavigate.bind(this, \"right\"));\n\t\tthis.subscribe(\"keybinding-nav-left\", this.keyNavigate.bind(this, \"left\"));\n\t\tthis.subscribe(\"keybinding-nav-right\", this.keyNavigate.bind(this, \"right\"));\n\t\tthis.subscribe(\"keybinding-nav-up\", this.keyNavigate.bind(this, \"up\"));\n\t\tthis.subscribe(\"keybinding-nav-down\", this.keyNavigate.bind(this, \"down\"));\n\t\tthis.subscribe(\"keybinding-nav-range\", this.keyNavigateRange.bind(this));\n\t}\n\t\n\t\n\tinitializeColumn(column) {\n\t\tif(this.columnSelection && column.definition.headerSort && this.options(\"headerSortClickElement\") !== \"icon\"){\n\t\t\tconsole.warn(\"Using column headerSort with selectableRangeColumns option may result in unpredictable behavior. Consider using headerSortClickElement: 'icon'.\");\n\t\t}\n\t\t\n\t\tif (column.modules.edit) ;\n\t}\n\t\n\tupdateHeaderColumn(){\n\t\tvar frozenCols;\n\n\t\tif(this.rowSelection){\n\t\t\tthis.rowHeader = this.table.columnManager.getVisibleColumnsByIndex()[0];\n\t\t\t\n\t\t\tif(this.rowHeader){\n\t\t\t\tthis.rowHeader.definition.cssClass = this.rowHeader.definition.cssClass + \" tabulator-range-row-header\";\n\t\t\t\t\n\t\t\t\tif(this.rowHeader.definition.headerSort){\n\t\t\t\t\tconsole.warn(\"Using column headerSort with selectableRangeRows option may result in unpredictable behavior\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.rowHeader.definition.editor){\n\t\t\t\t\tconsole.warn(\"Using column editor with selectableRangeRows option may result in unpredictable behavior\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//warn if invalid frozen column configuration detected\n\t\tif(this.table.modules.frozenColumns && this.table.modules.frozenColumns.active){\n\t\t\tfrozenCols = this.table.modules.frozenColumns.getFrozenColumns();\n\n\t\t\tif(frozenCols.length > 1 || (frozenCols.length === 1 && frozenCols[0] !== this.rowHeader)){\n\t\t\t\tconsole.warn(\"Using frozen columns that are not the range header in combination with the selectRange option may result in unpredictable behavior\");\n\t\t\t}\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Table Functions ///////\n\t///////////////////////////////////\n\t\n\tgetRanges(){\n\t\treturn this.ranges.map((range) => range.getComponent());\n\t}\n\t\n\tgetRangesData() {\n\t\treturn this.ranges.map((range) => range.getData());\n\t}\n\t\n\taddRangeFromComponent(start, end){\n\t\tstart = start ? start._cell : null;\n\t\tend = end ? end._cell : null;\n\t\t\n\t\treturn this.addRange(start, end);\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Component Functions ///////\n\t///////////////////////////////////\n\t\n\tcellGetRanges(cell){\n\t\tvar ranges = [];\n\t\t\n\t\tif (cell.column === this.rowHeader) {\n\t\t\tranges = this.ranges.filter((range) => range.occupiesRow(cell.row));\n\t\t} else {\n\t\t\tranges = this.ranges.filter((range) => range.occupies(cell));\n\t\t}\n\t\t\n\t\treturn ranges.map((range) => range.getComponent());\n\t}\n\t\n\trowGetRanges(row){\n\t\tvar ranges = this.ranges.filter((range) => range.occupiesRow(row));\n\t\t\n\t\treturn ranges.map((range) => range.getComponent());\n\t}\n\t\n\tcolGetRanges(col){\n\t\tvar ranges = this.ranges.filter((range) => range.occupiesColumn(col));\n\t\t\n\t\treturn ranges.map((range) => range.getComponent());\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Event Handlers /////////\n\t///////////////////////////////////\n\t\n\t_handleMouseUp(e){\n\t\tthis.mousedown = false;\n\t\tdocument.removeEventListener(\"mouseup\", this.mouseUpEvent);\n\t}\n\t\n\t_handleKeyDown(e) {\n\t\tif (!this.blockKeydown && (!this.table.modules.edit || (this.table.modules.edit && !this.table.modules.edit.currentCell))) {\n\t\t\tif (e.key === \"Enter\") {\n\t\t\t\t// is editing a cell?\n\t\t\t\tif (this.table.modules.edit && this.table.modules.edit.currentCell) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.table.modules.edit.editCell(this.getActiveCell());\n\t\t\t\t\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tif ((e.key === \"Backspace\" || e.key === \"Delete\") && this.options(\"selectableRangeClearCells\")) {\n\t\t\t\tif(this.activeRange){\n\t\t\t\t\tthis.activeRange.clearValues();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinitializeFocus(cell){\n\t\tvar range;\n\n\t\tthis.restoreFocus();\n\t\t\n\t\ttry{\n\t\t\tif (document.selection) { // IE\n\t\t\t\trange = document.body.createTextRange();\n\t\t\t\trange.moveToElementText(cell.getElement());\n\t\t\t\trange.select();\n\t\t\t} else if (window.getSelection) {\n\t\t\t\trange = document.createRange();\n\t\t\t\trange.selectNode(cell.getElement());\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t\twindow.getSelection().addRange(range);\n\t\t\t}\n\t\t}catch(e){}\n\t}\n\t\n\trestoreFocus(element){\n\t\tthis.table.rowManager.element.focus();\n\t\t\n\t\treturn true;\n\t}\n\t\n\t///////////////////////////////////\n\t////// Column Functionality ///////\n\t///////////////////////////////////\n\t\n\thandleColumnResized(column) {\n\t\tvar selected;\n\t\t\n\t\tif (this.selecting !== \"column\" && this.selecting !== \"all\") {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tselected = this.ranges.some((range) => range.occupiesColumn(column));\n\t\t\n\t\tif (!selected) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.ranges.forEach((range) => {\n\t\t\tvar selectedColumns = range.getColumns(true);\n\t\t\t\n\t\t\tselectedColumns.forEach((selectedColumn) => {\n\t\t\t\tif (selectedColumn !== column) {\n\t\t\t\t\tselectedColumn.setWidth(column.width);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\t\n\thandleColumnMoving(_event, column) {\n\t\tthis.resetRanges().setBounds(column);\n\t\tthis.overlay.style.visibility = \"hidden\";\n\t}\n\n\thandleColumnMoved(from, _to, _after) {\n\t\tthis.activeRange.setBounds(from);\n\t\tthis.layoutElement();\n\t}\n\n\thandleColumnMouseDown(event, column) {\n\t\tif (event.button === 2 && (this.selecting === \"column\" || this.selecting === \"all\") && this.activeRange.occupiesColumn(column)) {\n\t\t\treturn;\n\t\t}\n\n\t\t//If columns are movable, allow dragging columns only if they are not\n\t\t//selected. Dragging selected columns should move the columns instead.\n\t\tif(this.table.options.movableColumns && this.selecting === \"column\" && this.activeRange.occupiesColumn(column)){\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.mousedown = true;\n\t\t\n\t\tdocument.addEventListener(\"mouseup\", this.mouseUpEvent);\n\t\t\n\t\tthis.newSelection(event, column);\n\t}\n\t\n\thandleColumnMouseMove(e, column) {\n\t\tif (column === this.rowHeader || !this.mousedown || this.selecting === 'all') {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.activeRange.setBounds(false, column, true);\n\t}\n\t\n\t///////////////////////////////////\n\t//////// Cell Functionality ///////\n\t///////////////////////////////////\n\t\n\trenderCell(cell) {\n\t\tvar el = cell.getElement(),\n\t\trangeIdx = this.ranges.findIndex((range) => range.occupies(cell));\n\t\t\n\t\tel.classList.toggle(\"tabulator-range-selected\", rangeIdx !== -1);\n\t\tel.classList.toggle(\"tabulator-range-only-cell-selected\", this.ranges.length === 1 && this.ranges[0].atTopLeft(cell) &&\tthis.ranges[0].atBottomRight(cell));\n\t\t\n\t\tel.dataset.range = rangeIdx;\n\t}\n\t\n\thandleCellMouseDown(event, cell) {\n\t\tif (event.button === 2 && (this.activeRange.occupies(cell) || ((this.selecting === \"row\" || this.selecting === \"all\") && this.activeRange.occupiesRow(cell.row)))) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.mousedown = true;\n\t\t\n\t\tdocument.addEventListener(\"mouseup\", this.mouseUpEvent);\n\t\t\n\t\tthis.newSelection(event, cell);\n\t}\n\t\n\thandleCellMouseMove(e, cell) {\n\t\tif (!this.mousedown || this.selecting === \"all\") {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.activeRange.setBounds(false, cell, true);\n\t}\n\t\n\thandleCellClick(e, cell){\n\t\tthis.initializeFocus(cell);\n\t}\n\t\n\thandleEditingCell(cell) {\n\t\tif(this.activeRange){\n\t\t\tthis.activeRange.setBounds(cell);\n\t\t}\n\t}\n\t\n\tfinishEditingCell() {\n\t\tthis.blockKeydown = true;\n\t\tthis.table.rowManager.element.focus();\n\t\t\n\t\tsetTimeout(() => {\n\t\t\tthis.blockKeydown = false;\n\t\t}, 10);\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Navigation ///////\n\t///////////////////////////////////\n\t\n\tkeyNavigate(dir, e){\n\t\tif(this.navigate(false, false, dir));\n\t\te.preventDefault();\n\t}\n\t\n\tkeyNavigateRange(e, dir, jump, expand){\n\t\tif(this.navigate(jump, expand, dir));\n\t\te.preventDefault();\n\t}\n\t\n\tnavigate(jump, expand, dir) {\n\t\tvar moved = false,\n\t\trange, rangeEdge, prevRect, nextRow, nextCol, row, column,\n\t\trowRect, rowManagerRect, columnRect, columnManagerRect;\n\t\t\n\t\t// Don't navigate while editing\n\t\tif (this.table.modules.edit && this.table.modules.edit.currentCell) {\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\t// If there are more than 1 range, use the active range and destroy the others\n\t\tif (this.ranges.length > 1) {\n\t\t\tthis.ranges = this.ranges.filter((range) => {\n\t\t\t\tif (range === this.activeRange) {\n\t\t\t\t\trange.setEnd(range.start.row, range.start.col);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\trange.destroy();\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}\n\t\t\n\t\trange = this.activeRange;\n\t\tprevRect = {\n\t\t\ttop: range.top,\n\t\t\tbottom: range.bottom,\n\t\t\tleft: range.left,\n\t\t\tright: range.right\n\t\t};\n\t\t\n\t\trangeEdge = expand ? range.end : range.start;\n\t\tnextRow = rangeEdge.row;\n\t\tnextCol = rangeEdge.col;\n\t\t\n\t\tif(jump){\n\t\t\tswitch(dir){\n\t\t\t\tcase \"left\":\n\t\t\t\t\tnextCol = this.findJumpCellLeft(range.start.row, rangeEdge.col);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"right\":\n\t\t\t\t\tnextCol = this.findJumpCellRight(range.start.row, rangeEdge.col);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"up\":\n\t\t\t\t\tnextRow = this.findJumpCellUp(rangeEdge.row, range.start.col);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"down\":\n\t\t\t\t\tnextRow = this.findJumpCellDown(rangeEdge.row, range.start.col);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}else {\n\t\t\tif(expand){\n\t\t\t\tif ((this.selecting === 'row' && (dir === 'left' || dir === 'right')) || (this.selecting === 'column' && (dir === 'up' || dir === 'down'))) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tswitch(dir){\n\t\t\t\tcase \"left\":\n\t\t\t\t\tnextCol = Math.max(nextCol - 1, 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"right\":\n\t\t\t\t\tnextCol = Math.min(nextCol + 1, this.getTableColumns().length - 1);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"up\":\n\t\t\t\t\tnextRow = Math.max(nextRow - 1, 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"down\":\n\t\t\t\t\tnextRow = Math.min(nextRow + 1, this.getTableRows().length - 1);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif(this.rowHeader && nextCol === 0) {\n\t\t\tnextCol = 1;\n\t\t}\n\t\t\n\t\tif(!expand){\n\t\t\trange.setStart(nextRow, nextCol);\n\t\t}\n\t\t\n\t\trange.setEnd(nextRow, nextCol);\n\t\t\n\t\tif(!expand){\n\t\t\tthis.selecting = \"cell\";\n\t\t}\n\n\t\tmoved = prevRect.top !== range.top || prevRect.bottom !== range.bottom || prevRect.left !== range.left || prevRect.right !== range.right;\n\n\t\tif (moved) {\n\t\t\trow = this.getRowByRangePos(range.end.row);\n\t\t\tcolumn = this.getColumnByRangePos(range.end.col);\n\t\t\trowRect = row.getElement().getBoundingClientRect();\n\t\t\tcolumnRect = column.getElement().getBoundingClientRect();\n\t\t\trowManagerRect = this.table.rowManager.getElement().getBoundingClientRect();\n\t\t\tcolumnManagerRect = this.table.columnManager.getElement().getBoundingClientRect();\n\t\t\t\n\t\t\tif(!(rowRect.top >= rowManagerRect.top && rowRect.bottom <= rowManagerRect.bottom)){\n\t\t\t\tif(row.getElement().parentNode && column.getElement().parentNode){\n\t\t\t\t\t// Use faster autoScroll when the elements are on the DOM\n\t\t\t\t\tthis.autoScroll(range, row.getElement(), column.getElement());\n\t\t\t\t}else {\n\t\t\t\t\trow.getComponent().scrollTo(undefined, false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!(columnRect.left >= columnManagerRect.left + this.getRowHeaderWidth() && columnRect.right <= columnManagerRect.right)){\n\t\t\t\tif(row.getElement().parentNode && column.getElement().parentNode){\n\t\t\t\t\t// Use faster autoScroll when the elements are on the DOM\n\t\t\t\t\tthis.autoScroll(range, row.getElement(), column.getElement());\n\t\t\t\t}else {\n\t\t\t\t\tcolumn.getComponent().scrollTo(undefined, false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.layoutElement();\n\t\t\t\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\trangeRemoved(removed){\n\t\tthis.ranges = this.ranges.filter((range) => range !== removed);\n\t\t\n\t\tif(this.activeRange === removed){\n\t\t\tif(this.ranges.length){\n\t\t\t\tthis.activeRange = this.ranges[this.ranges.length - 1];\n\t\t\t}else {\n\t\t\t\tthis.addRange();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.layoutElement();\n\t}\n\t\n\tfindJumpRow(column, rows, reverse, emptyStart, emptySide){\n\t\tif(reverse){\n\t\t\trows = rows.reverse();\n\t\t}\n\n\t\treturn this.findJumpItem(emptyStart, emptySide, rows, function(row){return row.getData()[column.getField()];});\n\t}\n\t\n\tfindJumpCol(row, columns, reverse, emptyStart, emptySide){\n\t\tif(reverse){\n\t\t\tcolumns = columns.reverse();\n\t\t}\n\n\t\treturn this.findJumpItem(emptyStart, emptySide, columns, function(column){return row.getData()[column.getField()];});\n\t}\n\n\tfindJumpItem(emptyStart, emptySide, items, valueResolver){\n\t\tvar nextItem;\n\n\t\tfor(let currentItem of items){\n\t\t\tlet currentValue = valueResolver(currentItem);\n\t\t\t\n\t\t\tif(emptyStart){\n\t\t\t\tnextItem = currentItem;\n\t\t\t\tif(currentValue){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tif(emptySide){\n\t\t\t\t\tnextItem = currentItem;\n\t\t\t\t\t\n\t\t\t\t\tif(currentValue){\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}else {\n\t\t\t\t\tif(currentValue){\n\t\t\t\t\t\tnextItem = currentItem;\n\t\t\t\t\t}else {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn nextItem;\n\t}\n\n\tfindJumpCellLeft(rowPos, colPos){\n\t\tvar row = this.getRowByRangePos(rowPos),\n\t\tcolumns = this.getTableColumns(),\n\t\tisStartingCellEmpty = this.isEmpty(row.getData()[columns[colPos].getField()]),\n\t\tisLeftOfStartingCellEmpty = columns[colPos - 1] ? this.isEmpty(row.getData()[columns[colPos - 1].getField()]) : false,\n\t\ttargetCols = this.rowHeader ? columns.slice(1, colPos) : columns.slice(0, colPos),\n\t\tjumpCol = this.findJumpCol(row, targetCols, true, isStartingCellEmpty, isLeftOfStartingCellEmpty);\n\t\t\n\t\tif(jumpCol){\n\t\t\treturn jumpCol.getPosition() - 1;\n\t\t}\n\t\t\n\t\treturn colPos;\n\t}\n\t\n\tfindJumpCellRight(rowPos, colPos){\n\t\tvar row = this.getRowByRangePos(rowPos),\n\t\tcolumns = this.getTableColumns(),\n\t\tisStartingCellEmpty = this.isEmpty(row.getData()[columns[colPos].getField()]),\n\t\tisRightOfStartingCellEmpty = columns[colPos + 1] ? this.isEmpty(row.getData()[columns[colPos + 1].getField()]) : false,\n\t\tjumpCol = this.findJumpCol(row, columns.slice(colPos + 1, columns.length), false, isStartingCellEmpty, isRightOfStartingCellEmpty);\n\t\t\n\t\tif(jumpCol){\n\t\t\treturn jumpCol.getPosition() - 1;\n\t\t}\n\t\t\n\t\treturn colPos;\n\t}\n\t\n\tfindJumpCellUp(rowPos, colPos) {\n\t\tvar column = this.getColumnByRangePos(colPos),\n\t\trows = this.getTableRows(),\n\t\tisStartingCellEmpty = this.isEmpty(rows[rowPos].getData()[column.getField()]),\n\t\tisTopOfStartingCellEmpty = rows[rowPos - 1] ? this.isEmpty(rows[rowPos - 1].getData()[column.getField()]) : false,\n\t\tjumpRow = this.findJumpRow(column, rows.slice(0, rowPos), true, isStartingCellEmpty, isTopOfStartingCellEmpty);\n\t\t\n\t\tif(jumpRow){\n\t\t\treturn jumpRow.position - 1;\n\t\t}\n\t\t\n\t\treturn rowPos;\n\t}\n\t\n\tfindJumpCellDown(rowPos, colPos) {\n\t\tvar column = this.getColumnByRangePos(colPos),\n\t\trows = this.getTableRows(),\n\t\tisStartingCellEmpty = this.isEmpty(rows[rowPos].getData()[column.getField()]),\n\t\tisBottomOfStartingCellEmpty = rows[rowPos + 1] ? this.isEmpty(rows[rowPos + 1].getData()[column.getField()]) : false,\n\t\tjumpRow = this.findJumpRow(column, rows.slice(rowPos + 1, rows.length), false, isStartingCellEmpty, isBottomOfStartingCellEmpty);\n\t\t\n\t\tif(jumpRow){\n\t\t\treturn jumpRow.position - 1;\n\t\t}\n\t\t\n\t\treturn rowPos;\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Selection ///////\n\t///////////////////////////////////\n\tnewSelection(event, element) {\n\t\tvar range;\n\t\t\n\t\tif (element.type === \"column\") {\n\t\t\tif(!this.columnSelection){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tif (element === this.rowHeader) {\n\t\t\t\trange = this.resetRanges();\n\t\t\t\tthis.selecting = \"all\";\n\t\t\t\t\n\t\t\t\tvar topLeftCell, bottomRightCell = this.getCell(-1, -1);\n\t\t\t\t\n\t\t\t\tif(this.rowHeader){\n\t\t\t\t\ttopLeftCell = this.getCell(0, 1);\n\t\t\t\t}else {\n\t\t\t\t\ttopLeftCell = this.getCell(0, 0);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trange.setBounds(topLeftCell, bottomRightCell);\t\t\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tthis.selecting = \"column\";\n\t\t\t}\n\t\t} else if (element.column === this.rowHeader) {\n\t\t\tthis.selecting = \"row\";\n\t\t} else {\n\t\t\tthis.selecting = \"cell\";\n\t\t}\n\t\t\n\t\tif (event.shiftKey) {\n\t\t\tthis.activeRange.setBounds(false, element);\n\t\t} else if (event.ctrlKey) {\n\t\t\tthis.addRange().setBounds(element);\n\t\t} else {\n\t\t\tthis.resetRanges().setBounds(element);\n\t\t}\n\t}\n\t\n\tautoScroll(range, row, column) {\n\t\tvar tableHolder = this.table.rowManager.element,\n\t\trect, view, withinHorizontalView, withinVerticalView;\n\t\t\n\t\tif (typeof row === 'undefined') {\n\t\t\trow = this.getRowByRangePos(range.end.row).getElement();\n\t\t}\n\t\t\n\t\tif (typeof column === 'undefined') {\n\t\t\tcolumn = this.getColumnByRangePos(range.end.col).getElement();\n\t\t}\n\t\t\n\t\trect = {\n\t\t\tleft: column.offsetLeft,\n\t\t\tright: column.offsetLeft + column.offsetWidth,\n\t\t\ttop: row.offsetTop,\n\t\t\tbottom: row.offsetTop + row.offsetHeight,\n\t\t};\n\t\t\n\t\tview = {\n\t\t\tleft: tableHolder.scrollLeft + this.getRowHeaderWidth(),\n\t\t\tright: Math.ceil(tableHolder.scrollLeft + tableHolder.clientWidth),\n\t\t\ttop: tableHolder.scrollTop,\n\t\t\tbottom:\ttableHolder.scrollTop +\ttableHolder.offsetHeight - this.table.rowManager.scrollbarWidth,\n\t\t};\n\t\t\n\t\twithinHorizontalView = view.left < rect.left &&\trect.left < view.right && view.left < rect.right &&\trect.right < view.right;\n\t\t\n\t\twithinVerticalView = view.top < rect.top &&\trect.top < view.bottom && view.top < rect.bottom &&\trect.bottom < view.bottom;\n\t\t\n\t\tif (!withinHorizontalView) {\n\t\t\tif (rect.left < view.left) {\n\t\t\t\ttableHolder.scrollLeft = rect.left - this.getRowHeaderWidth();\n\t\t\t} else if (rect.right > view.right) {\n\t\t\t\ttableHolder.scrollLeft = Math.min(rect.right - tableHolder.clientWidth, rect.left - this.getRowHeaderWidth());\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (!withinVerticalView) {\n\t\t\tif (rect.top < view.top) {\n\t\t\t\ttableHolder.scrollTop = rect.top;\n\t\t\t} else if (rect.bottom > view.bottom) {\n\t\t\t\ttableHolder.scrollTop = rect.bottom - tableHolder.clientHeight;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t/////// Layout ///////\n\t///////////////////////////////////\n\t\n\tlayoutChange(){\n\t\tthis.overlay.style.visibility = \"hidden\";\n\t\tclearTimeout(this.layoutChangeTimeout);\n\t\tthis.layoutChangeTimeout = setTimeout(this.layoutRanges.bind(this), 200);\n\t}\n\t\n\tredraw(force) {\n\t\tif (force) {\n\t\t\tthis.selecting = 'cell';\n\t\t\tthis.resetRanges();\n\t\t\tthis.layoutElement();\n\t\t}\n\t}\n\t\n\tlayoutElement(visibleRows) {\n\t\tvar rows;\n\t\t\n\t\tif (visibleRows) {\n\t\t\trows = this.table.rowManager.getVisibleRows(true);\n\t\t} else {\n\t\t\trows = this.table.rowManager.getRows();\n\t\t}\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tif (row.type === \"row\") {\n\t\t\t\tthis.layoutRow(row);\n\t\t\t\trow.cells.forEach((cell) => this.renderCell(cell));\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.getTableColumns().forEach((column) => {\n\t\t\tthis.layoutColumn(column);\n\t\t});\n\t\t\n\t\tthis.layoutRanges();\n\t}\n\t\n\tlayoutRow(row) {\n\t\tvar el = row.getElement(),\n\t\tselected = false,\n\t\toccupied = this.ranges.some((range) => range.occupiesRow(row));\n\t\t\n\t\tif (this.selecting === \"row\") {\n\t\t\tselected = occupied;\n\t\t} else if (this.selecting === \"all\") {\n\t\t\tselected = true;\n\t\t}\n\t\t\n\t\tel.classList.toggle(\"tabulator-range-selected\", selected);\n\t\tel.classList.toggle(\"tabulator-range-highlight\", occupied);\n\t}\n\t\n\tlayoutColumn(column) {\n\t\tvar el = column.getElement(),\t\t\n\t\tselected = false,\n\t\toccupied = this.ranges.some((range) => range.occupiesColumn(column));\n\t\t\n\t\tif (this.selecting === \"column\") {\n\t\t\tselected = occupied;\n\t\t} else if (this.selecting === \"all\") {\n\t\t\tselected = true;\n\t\t}\n\t\t\n\t\tel.classList.toggle(\"tabulator-range-selected\", selected);\n\t\tel.classList.toggle(\"tabulator-range-highlight\", occupied);\n\t}\n\t\n\tlayoutRanges() {\n\t\tvar activeCell, activeCellEl, activeRowEl;\n\t\t\n\t\tif (!this.table.initialized) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tactiveCell = this.getActiveCell();\n\t\t\n\t\tif (!activeCell) {\n\t\t\treturn;\n\t\t}\n\n\t\tactiveCellEl = activeCell.getElement();\n\t\tactiveRowEl = activeCell.row.getElement();\n\n\t\tif(this.table.rtl){\n\t\t\tthis.activeRangeCellElement.style.right = activeRowEl.offsetWidth - activeCellEl.offsetLeft - activeCellEl.offsetWidth + \"px\";\n\t\t}else {\n\t\t\tthis.activeRangeCellElement.style.left = activeRowEl.offsetLeft + activeCellEl.offsetLeft + \"px\";\n\t\t}\n\n\t\tthis.activeRangeCellElement.style.top =\tactiveRowEl.offsetTop + \"px\";\n\t\tthis.activeRangeCellElement.style.width = activeCellEl.offsetWidth + \"px\";\n\t\tthis.activeRangeCellElement.style.height = activeRowEl.offsetHeight + \"px\";\n\t\t\n\t\tthis.ranges.forEach((range) => range.layout());\n\t\t\n\t\tthis.overlay.style.visibility = \"visible\";\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t/////// Helper Functions ///////\n\t///////////////////////////////////\t\n\t\n\tgetCell(rowIdx, colIdx) {\n\t\tvar row;\n\t\t\n\t\tif (colIdx < 0) {\n\t\t\tcolIdx = this.getTableColumns().length + colIdx;\n\t\t\tif (colIdx < 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (rowIdx < 0) {\n\t\t\trowIdx = this.getTableRows().length + rowIdx;\n\t\t}\n\t\t\n\t\trow = this.table.rowManager.getRowFromPosition(rowIdx + 1);\n\t\t\n\t\treturn row ? row.getCells(false, true).filter((cell) => cell.column.visible)[colIdx] : null;\n\t}\n\t\n\t\n\tgetActiveCell() {\n\t\treturn this.getCell(this.activeRange.start.row, this.activeRange.start.col);\n\t}\n\t\n\tgetRowByRangePos(pos) {\n\t\treturn this.getTableRows()[pos];\n\t}\n\t\n\tgetColumnByRangePos(pos) {\n\t\treturn this.getTableColumns()[pos];\n\t}\n\t\n\tgetTableRows() {\n\t\treturn this.table.rowManager.getDisplayRows().filter(row=> row.type === \"row\");\n\t}\n\t\n\tgetTableColumns() {\n\t\treturn this.table.columnManager.getVisibleColumnsByIndex();\n\t}\n\t\n\taddRange(start, end) {\n\t\tvar range;\n\t\t\n\t\tif(this.maxRanges !== true && this.ranges.length >= this.maxRanges){\n\t\t\tthis.ranges.shift().destroy();\n\t\t}\n\t\t\n\t\trange = new Range(this.table, this, start, end);\n\t\t\n\t\tthis.activeRange = range;\n\t\tthis.ranges.push(range);\n\t\tthis.rangeContainer.appendChild(range.element);\n\t\t\n\t\treturn range;\n\t}\n\t\n\tresetRanges() {\n\t\tvar range, cell, visibleCells;\n\t\t\n\t\tthis.ranges.forEach((range) => range.destroy());\n\t\tthis.ranges = [];\n\t\t\n\t\trange = this.addRange();\n\t\t\n\t\tif(this.table.rowManager.activeRows.length){\n\t\t\tvisibleCells = this.table.rowManager.activeRows[0].cells.filter((cell) => cell.column.visible);\n\t\t\tcell = visibleCells[this.rowHeader ? 1 : 0];\n\n\t\t\tif(cell){\n\t\t\t\trange.setBounds(cell);\n\t\t\t\tif(this.options(\"selectableRangeAutoFocus\")){\n\t\t\t\t\tthis.initializeFocus(cell);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn range;\n\t}\n\t\n\ttableDestroyed(){\n\t\tdocument.removeEventListener(\"mouseup\", this.mouseUpEvent);\n\t\tthis.table.rowManager.element.removeEventListener(\"keydown\", this.keyDownEvent);\n\t}\n\t\n\tselectedRows(component) {\n\t\treturn component ? this.activeRange.getRows().map((row) => row.getComponent()) : this.activeRange.getRows();\n\t}\n\t\n\tselectedColumns(component) {\n\t\treturn component ? this.activeRange.getColumns().map((col) => col.getComponent()) : this.activeRange.getColumns();\n\t}\n\n\tgetRowHeaderWidth(){\n\t\tif(!this.rowHeader){\n\t\t\treturn 0;\n\t\t}\n\t\treturn this.rowHeader.getElement().offsetWidth;\n\t}\n\n\tisEmpty(value) {\n\t\treturn value === null || value === undefined || value === \"\";\n\t}\n}\n\n//sort numbers\nfunction number(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}\n\n//sort strings\nfunction string(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}\n\n//sort datetime\nfunction datetime(a, b, aRow, bRow, column, dir, params){\n\tvar DT = this.table.dependencyRegistry.lookup([\"luxon\", \"DateTime\"], \"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}\n\n//sort date\nfunction date(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}\n\n//sort times\nfunction time(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}\n\n//sort booleans\nfunction boolean(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}\n\n//sort if element contains any data\nfunction array(a, b, aRow, bRow, column, dir, params){\n\tvar type = params.type || \"length\",\n\talignEmptyValues = params.alignEmptyValues,\n\temptyAlign = 0,\n\ttable = this.table,\n\tvalueMap;\n\n\tif(params.valueMap){\n\t\tif(typeof params.valueMap === \"string\"){\n\t\t\tvalueMap = function(value){\n\t\t\t\treturn value.map((item) => {\n\t\t\t\t\treturn Helpers.retrieveNestedData(table.options.nestedFieldSeparator, params.valueMap, item);\n\t\t\t\t});\n\t\t\t};\n\t\t}else {\n\t\t\tvalueMap = params.valueMap;\n\t\t}\n\t}\n\n\tfunction calc(value){\n\t\tvar result;\n\t\t\n\t\tif(valueMap){\n\t\t\tvalue = valueMap(value);\n\t\t}\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\n\t\t\tcase \"string\":\n\t\t\t\tresult = value.join(\"\");\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\tif(type === \"string\"){\n\t\t\treturn String(calc(a)).toLowerCase().localeCompare(String(calc(b)).toLowerCase());\n\t\t}else {\n\t\t\treturn calc(b) - calc(a);\n\t\t}\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}\n\n//sort if element contains any data\nfunction exists(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}\n\n//sort alpha numeric strings\nfunction alphanum(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}\n\nvar defaultSorters = {\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};\n\nclass Sort extends Module{\n\n\tstatic moduleName = \"sort\";\n\n\t//load defaults\n\tstatic sorters = defaultSorters;\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.sortList = []; //holder current sort\n\t\tthis.changed = false; //has the sort changed since last render\n\t\t\n\t\tthis.registerTableOption(\"sortMode\", \"local\"); //local or remote sorting\n\t\t\n\t\tthis.registerTableOption(\"initialSort\", false); //initial sorting criteria\n\t\tthis.registerTableOption(\"columnHeaderSortMulti\", true); //multiple or single column sorting\n\t\tthis.registerTableOption(\"sortOrderReverse\", false); //reverse internal sort ordering\n\t\tthis.registerTableOption(\"headerSortElement\", \"<div class='tabulator-arrow'></div>\"); //header sort element\n\t\tthis.registerTableOption(\"headerSortClickElement\", \"header\"); //element which triggers sort when clicked\n\t\t\n\t\tthis.registerColumnOption(\"sorter\");\n\t\tthis.registerColumnOption(\"sorterParams\");\n\t\t\n\t\tthis.registerColumnOption(\"headerSort\", true);\n\t\tthis.registerColumnOption(\"headerSortStartingDir\");\n\t\tthis.registerColumnOption(\"headerSortTristate\");\n\t\t\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\n\t\tthis.registerDataHandler(this.sort.bind(this), 20);\n\t\t\n\t\tthis.registerTableFunction(\"setSort\", this.userSetSort.bind(this));\n\t\tthis.registerTableFunction(\"getSorters\", this.getSort.bind(this));\n\t\tthis.registerTableFunction(\"clearSort\", this.clearSort.bind(this));\n\t\t\n\t\tif(this.table.options.sortMode === \"remote\"){\n\t\t\tthis.subscribe(\"data-params\", this.remoteSortParams.bind(this));\n\t\t}\n\t}\n\t\n\ttableBuilt(){\n\t\tif(this.table.options.initialSort){\n\t\t\tthis.setSort(this.table.options.initialSort);\n\t\t}\n\t}\n\t\n\tremoteSortParams(data, config, silent, params){\n\t\tvar sorters = this.getSort();\n\t\t\n\t\tsorters.forEach((item) => {\n\t\t\tdelete item.column;\n\t\t});\n\t\t\n\t\tparams.sort = sorters;\n\t\t\n\t\treturn params;\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\tuserSetSort(sortList, dir){\n\t\tthis.setSort(sortList, dir);\n\t\t// this.table.rowManager.sorterRefresh();\n\t\tthis.refreshSort();\n\t}\n\t\n\tclearSort(){\n\t\tthis.clear();\n\t\t// this.table.rowManager.sorterRefresh();\n\t\tthis.refreshSort();\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\t//initialize column header for sorting\n\tinitializeColumn(column){\n\t\tvar sorter = false,\n\t\tcolEl,\n\t\tarrowEl;\n\t\t\n\t\tswitch(typeof column.definition.sorter){\n\t\t\tcase \"string\":\n\t\t\t\tif(Sort.sorters[column.definition.sorter]){\n\t\t\t\t\tsorter = Sort.sorters[column.definition.sorter];\n\t\t\t\t}else {\n\t\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\tsorter = column.definition.sorter;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tcolumn.modules.sort = {\n\t\t\tsorter:sorter, dir:\"none\",\n\t\t\tparams:column.definition.sorterParams || {},\n\t\t\tstartingDir:column.definition.headerSortStartingDir || \"asc\",\n\t\t\ttristate: column.definition.headerSortTristate,\n\t\t};\n\t\t\n\t\tif(column.definition.headerSort !== false){\n\t\t\t\n\t\t\tcolEl = column.getElement();\n\t\t\t\n\t\t\tcolEl.classList.add(\"tabulator-sortable\");\n\t\t\t\n\t\t\tarrowEl = document.createElement(\"div\");\n\t\t\tarrowEl.classList.add(\"tabulator-col-sorter\");\n\t\t\t\n\t\t\tswitch(this.table.options.headerSortClickElement){\n\t\t\t\tcase \"icon\":\n\t\t\t\t\tarrowEl.classList.add(\"tabulator-col-sorter-element\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"header\":\n\t\t\t\t\tcolEl.classList.add(\"tabulator-col-sorter-element\");\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tcolEl.classList.add(\"tabulator-col-sorter-element\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tswitch(this.table.options.headerSortElement){\n\t\t\t\tcase \"function\":\n\t\t\t\t//do nothing\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"object\":\n\t\t\t\t\tarrowEl.appendChild(this.table.options.headerSortElement);\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tdefault:\n\t\t\t\t\tarrowEl.innerHTML = this.table.options.headerSortElement;\n\t\t\t}\n\t\t\t\n\t\t\t//create sorter arrow\n\t\t\tcolumn.titleHolderElement.appendChild(arrowEl);\n\t\t\t\n\t\t\tcolumn.modules.sort.element = arrowEl;\n\t\t\t\n\t\t\tthis.setColumnHeaderSortIcon(column, \"none\");\n\t\t\t\n\t\t\tif(this.table.options.headerSortClickElement === \"icon\"){\n\t\t\t\tarrowEl.addEventListener(\"mousedown\", (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t//sort on click\n\t\t\t(this.table.options.headerSortClickElement === \"icon\" ? arrowEl : colEl).addEventListener(\"click\", (e) => {\n\t\t\t\tvar dir = \"\",\n\t\t\t\tsorters=[],\n\t\t\t\tmatch = false;\n\t\t\t\t\n\t\t\t\tif(column.modules.sort){\n\t\t\t\t\tif(column.modules.sort.tristate){\n\t\t\t\t\t\tif(column.modules.sort.dir == \"none\"){\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\n\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\tif(column.modules.sort.dir == column.modules.sort.startingDir){\n\t\t\t\t\t\t\t\tdir = column.modules.sort.dir == \"asc\" ? \"desc\" : \"asc\";\n\t\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\t\tdir = \"none\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else {\n\t\t\t\t\t\tswitch(column.modules.sort.dir){\n\t\t\t\t\t\t\tcase \"asc\":\n\t\t\t\t\t\t\t\tdir = \"desc\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcase \"desc\":\n\t\t\t\t\t\t\t\tdir = \"asc\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (this.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {\n\t\t\t\t\t\tsorters = this.getSort();\n\t\t\t\t\t\t\n\t\t\t\t\t\tmatch = sorters.findIndex((sorter) => {\n\t\t\t\t\t\t\treturn sorter.field === column.getField();\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(match > -1){\n\t\t\t\t\t\t\tsorters[match].dir = dir;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tmatch = sorters.splice(match, 1)[0];\n\t\t\t\t\t\t\tif(dir != \"none\"){\n\t\t\t\t\t\t\t\tsorters.push(match);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\tif(dir != \"none\"){\n\t\t\t\t\t\t\t\tsorters.push({column:column, dir:dir});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t//add to existing sort\n\t\t\t\t\t\tthis.setSort(sorters);\n\t\t\t\t\t}else {\n\t\t\t\t\t\tif(dir == \"none\"){\n\t\t\t\t\t\t\tthis.clear();\n\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\t//sort by column only\n\t\t\t\t\t\t\tthis.setSort(column, dir);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// this.table.rowManager.sorterRefresh(!this.sortList.length);\n\t\t\t\t\tthis.refreshSort();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\t\n\trefreshSort(){\n\t\tif(this.table.options.sortMode === \"remote\"){\n\t\t\tthis.reloadData(null, false, false);\n\t\t}else {\n\t\t\tthis.refreshData(true);\n\t\t}\n\t\t\n\t\t//TODO - Persist left position of row manager\n\t\t// left = this.scrollLeft;\n\t\t// this.scrollHorizontal(left);\n\t}\n\t\n\t//check if the sorters have changed since last use\n\thasChanged(){\n\t\tvar changed = this.changed;\n\t\tthis.changed = false;\n\t\treturn changed;\n\t}\n\t\n\t//return current sorters\n\tgetSort(){\n\t\tvar self = this,\n\t\tsorters = [];\n\t\t\n\t\tself.sortList.forEach(function(item){\n\t\t\tif(item.column){\n\t\t\t\tsorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir});\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn sorters;\n\t}\n\t\n\t//change sort list and trigger sort\n\tsetSort(sortList, dir){\n\t\tvar self = this,\n\t\tnewSortList = [];\n\t\t\n\t\tif(!Array.isArray(sortList)){\n\t\t\tsortList = [{column: sortList, dir:dir}];\n\t\t}\n\t\t\n\t\tsortList.forEach(function(item){\n\t\t\tvar column;\n\t\t\t\n\t\t\tcolumn = self.table.columnManager.findColumn(item.column);\n\t\t\t\n\t\t\tif(column){\n\t\t\t\titem.column = column;\n\t\t\t\tnewSortList.push(item);\n\t\t\t\tself.changed = true;\n\t\t\t}else {\n\t\t\t\tconsole.warn(\"Sort Warning - Sort field does not exist and is being ignored: \", item.column);\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t\n\t\tself.sortList = newSortList;\n\t\t\n\t\tthis.dispatch(\"sort-changed\");\n\t}\n\t\n\t//clear sorters\n\tclear(){\n\t\tthis.setSort([]);\n\t}\n\t\n\t//find appropriate sorter for column\n\tfindSorter(column){\n\t\tvar row = this.table.rowManager.activeRows[0],\n\t\tsorter = \"string\",\n\t\tfield, value;\n\t\t\n\t\tif(row){\n\t\t\trow = row.getData();\n\t\t\tfield = column.getField();\n\t\t\t\n\t\t\tif(field){\n\t\t\t\t\n\t\t\t\tvalue = column.getFieldValue(row);\n\t\t\t\t\n\t\t\t\tswitch(typeof value){\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\tsorter = \"boolean\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\n\t\t\t\t\t\t\tsorter = \"number\";\n\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\n\t\t\t\t\t\t\t\tsorter = \"alphanum\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn Sort.sorters[sorter];\n\t}\n\t\n\t//work through sort list sorting data\n\tsort(data, sortOnly){\n\t\tvar self = this,\n\t\tsortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,\n\t\tsortListActual = [],\n\t\trowComponents = [];\n\t\t\n\t\tif(this.subscribedExternal(\"dataSorting\")){\n\t\t\tthis.dispatchExternal(\"dataSorting\", self.getSort());\n\t\t}\n\t\t\n\t\tif(!sortOnly) {\n\t\t\tself.clearColumnHeaders();\n\t\t}\n\t\t\n\t\tif(this.table.options.sortMode !== \"remote\"){\n\t\t\t\n\t\t\t//build list of valid sorters and trigger column specific callbacks before sort begins\n\t\t\tsortList.forEach(function(item, i){\n\t\t\t\tvar sortObj;\n\t\t\t\t\n\t\t\t\tif(item.column){\n\t\t\t\t\tsortObj = item.column.modules.sort;\n\t\t\t\t\t\n\t\t\t\t\tif(sortObj){\n\t\t\t\t\t\t\n\t\t\t\t\t\t//if no sorter has been defined, take a guess\n\t\t\t\t\t\tif(!sortObj.sorter){\n\t\t\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\n\t\t\t\t\t\t\n\t\t\t\t\t\tsortListActual.push(item);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(!sortOnly) {\n\t\t\t\t\t\tself.setColumnHeader(item.column, item.dir);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t//sort data\n\t\t\tif (sortListActual.length) {\n\t\t\t\tself._sortItems(data, sortListActual);\n\t\t\t}\n\t\t\t\n\t\t}else if(!sortOnly) {\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\t\n\t\tif(this.subscribedExternal(\"dataSorted\")){\n\t\t\tdata.forEach((row) => {\n\t\t\t\trowComponents.push(row.getComponent());\n\t\t\t});\n\t\t\t\n\t\t\tthis.dispatchExternal(\"dataSorted\", self.getSort(), rowComponents);\n\t\t}\n\t\t\n\t\treturn data;\n\t}\n\t\n\t//clear sort arrows on columns\n\tclearColumnHeaders(){\n\t\tthis.table.columnManager.getRealColumns().forEach((column) => {\n\t\t\tif(column.modules.sort){\n\t\t\t\tcolumn.modules.sort.dir = \"none\";\n\t\t\t\tcolumn.getElement().setAttribute(\"aria-sort\", \"none\");\n\t\t\t\tthis.setColumnHeaderSortIcon(column, \"none\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//set the column header sort direction\n\tsetColumnHeader(column, dir){\n\t\tcolumn.modules.sort.dir = dir;\n\t\tcolumn.getElement().setAttribute(\"aria-sort\", dir === \"asc\" ? \"ascending\" : \"descending\");\n\t\tthis.setColumnHeaderSortIcon(column, dir);\n\t}\n\t\n\tsetColumnHeaderSortIcon(column, dir){\n\t\tvar sortEl = column.modules.sort.element,\n\t\tarrowEl;\n\t\t\n\t\tif(column.definition.headerSort && typeof this.table.options.headerSortElement === \"function\"){\n\t\t\twhile(sortEl.firstChild) sortEl.removeChild(sortEl.firstChild);\n\t\t\t\n\t\t\tarrowEl = this.table.options.headerSortElement.call(this.table, column.getComponent(), dir);\n\t\t\t\n\t\t\tif(typeof arrowEl === \"object\"){\n\t\t\t\tsortEl.appendChild(arrowEl);\n\t\t\t}else {\n\t\t\t\tsortEl.innerHTML = arrowEl;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//sort each item in sort list\n\t_sortItems(data, sortList){\n\t\tvar sorterCount = sortList.length - 1;\n\t\t\n\t\tdata.sort((a, b) => {\n\t\t\tvar result;\n\t\t\t\n\t\t\tfor(var i = sorterCount; i>= 0; i--){\n\t\t\t\tlet sortItem = sortList[i];\n\t\t\t\t\n\t\t\t\tresult = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\n\t\t\t\t\n\t\t\t\tif(result !== 0){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn result;\n\t\t});\n\t}\n\t\n\t//process individual rows for a sort function on active data\n\t_sortRow(a, b, column, dir, params){\n\t\tvar el1Comp, el2Comp;\n\t\t\n\t\t//switch elements depending on search direction\n\t\tvar el1 = dir == \"asc\" ? a : b;\n\t\tvar el2 = dir == \"asc\" ? b : a;\n\t\t\n\t\ta = column.getFieldValue(el1.getData());\n\t\tb = column.getFieldValue(el2.getData());\n\t\t\n\t\ta = typeof a !== \"undefined\" ? a : \"\";\n\t\tb = typeof b !== \"undefined\" ? b : \"\";\n\t\t\n\t\tel1Comp = el1.getComponent();\n\t\tel2Comp = el2.getComponent();\n\t\t\n\t\treturn column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);\n\t}\n}\n\nclass GridCalculator{\r\n\tconstructor(columns, rows){\r\n\t\tthis.columnCount = columns;\r\n\t\tthis.rowCount = rows;\r\n\r\n\t\tthis.columnString = [];\r\n\t\tthis.columns = [];\r\n\t\tthis.rows = [];\r\n\t}\r\n\r\n\tgenColumns(data){\r\n\t\tvar colCount = Math.max(this.columnCount, Math.max(...data.map(item => item.length)));\r\n\r\n\t\tthis.columnString = [];\r\n\t\tthis.columns = [];\r\n\r\n\t\tfor(let i = 1; i <= colCount; i++){\r\n\t\t\tthis.incrementChar(this.columnString.length - 1);\r\n\t\t\tthis.columns.push(this.columnString.join(\"\"));\r\n\t\t}\r\n\r\n\t\treturn this.columns;\r\n\t}\r\n\r\n\tgenRows(data){\r\n\t\tvar rowCount = Math.max(this.rowCount, data.length);\r\n\r\n\t\tthis.rows = [];\r\n\r\n\t\tfor(let i = 1; i <= rowCount; i++){\r\n\t\t\tthis.rows.push(i);\r\n\t\t}\r\n\t\t\r\n\t\treturn this.rows;\r\n\t}\r\n\r\n\tincrementChar(i){\r\n\t\tlet char = this.columnString[i];\r\n\r\n\t\tif(char){\r\n\t\t\tif(char !== \"Z\"){\r\n\t\t\t\tthis.columnString[i] = String.fromCharCode(this.columnString[i].charCodeAt(0) + 1);\r\n\t\t\t}else {\r\n\t\t\t\tthis.columnString[i] = \"A\";\r\n\t\t\t\t\r\n\t\t\t\tif(i){\r\n\t\t\t\t\tthis.incrementChar(i-1);\r\n\t\t\t\t}else {\r\n\t\t\t\t\tthis.columnString.push(\"A\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else {\r\n\t\t\tthis.columnString.push(\"A\");\r\n\t\t}\r\n\t}\r\n\r\n\tsetRowCount(count){\r\n\t\tthis.rowCount = count;\r\n\t}\r\n\r\n\tsetColumnCount(count){\r\n\t\tthis.columnCount = count;\r\n\t}\r\n}\n\nclass SheetComponent {\r\n\tconstructor(sheet) {\r\n\t\tthis._sheet = sheet;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function (target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn target._sheet.table.componentFunctionBinder.handle(\"sheet\", target._sheet, name);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t});\r\n\t}\r\n\r\n\tgetTitle(){\r\n\t\treturn this._sheet.title;\r\n\t}\r\n\r\n\tgetKey(){\r\n\t\treturn this._sheet.key;\r\n\t}\r\n\r\n\tgetDefinition(){\r\n\t\treturn this._sheet.getDefinition();\r\n\t}\r\n\r\n\tgetData() {\r\n\t\treturn this._sheet.getData();\r\n\t}\r\n\r\n\tsetData(data) {\r\n\t\treturn this._sheet.setData(data);\r\n\t}\r\n\r\n\tclear(){\r\n\t\treturn this._sheet.clear();\r\n\t}\r\n\r\n\tremove(){\r\n\t\treturn this._sheet.remove();\r\n\t}\r\n\t\r\n\tactive(){\r\n\t\treturn this._sheet.active();\r\n\t}\r\n\r\n\tsetTitle(title){\r\n\t\treturn this._sheet.setTitle(title);\r\n\t}\r\n\r\n\tsetRows(rows){\r\n\t\treturn this._sheet.setRows(rows);\r\n\t}\r\n\r\n\tsetColumns(columns){\r\n\t\treturn this._sheet.setColumns(columns);\r\n\t}\r\n}\n\nclass Sheet extends CoreFeature{\r\n\tconstructor(spreadsheetManager, definition) {\r\n\t\tsuper(spreadsheetManager.table);\r\n\t\t\r\n\t\tthis.spreadsheetManager = spreadsheetManager;\r\n\t\tthis.definition = definition;\r\n\t\t\r\n\t\tthis.title = this.definition.title || \"\";\r\n\t\tthis.key = this.definition.key || this.definition.title;\r\n\t\tthis.rowCount = this.definition.rows;\r\n\t\tthis.columnCount = this.definition.columns;\r\n\t\tthis.data = this.definition.data || [];\r\n\t\tthis.element = null;\r\n\t\tthis.isActive = false;\r\n\t\t\r\n\t\tthis.grid = new GridCalculator(this.columnCount, this.rowCount);\r\n\t\t\r\n\t\tthis.defaultColumnDefinition = {width:100, headerHozAlign:\"center\", headerSort:false};\r\n\t\tthis.columnDefinition = Object.assign(this.defaultColumnDefinition, this.options(\"spreadsheetColumnDefinition\"));\r\n\t\t\r\n\t\tthis.columnDefs = [];\r\n\t\tthis.rowDefs = [];\r\n\t\tthis.columnFields = [];\r\n\t\tthis.columns = [];\r\n\t\tthis.rows = [];\r\n\t\t\r\n\t\tthis.scrollTop = null;\r\n\t\tthis.scrollLeft = null;\r\n\t\t\r\n\t\tthis.initialize();\r\n\t\t\r\n\t\tthis.dispatchExternal(\"sheetAdded\", this.getComponent());\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Initialization //////////\r\n\t///////////////////////////////////\r\n\t\r\n\tinitialize(){\r\n\t\tthis.initializeElement();\r\n\t\tthis.initializeColumns();\r\n\t\tthis.initializeRows();\r\n\t}\r\n\t\r\n\treinitialize(){\r\n\t\tthis.initializeColumns();\r\n\t\tthis.initializeRows();\r\n\t}\r\n\t\r\n\tinitializeElement(){\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-spreadsheet-tab\");\r\n\t\tthis.element.innerText = this.title;\r\n\t\t\r\n\t\tthis.element.addEventListener(\"click\", () => {\r\n\t\t\tthis.spreadsheetManager.loadSheet(this);\r\n\t\t});\r\n\t}\r\n\t\r\n\tinitializeColumns(){\r\n\t\tthis.grid.setColumnCount(this.columnCount);\r\n\t\tthis.columnFields = this.grid.genColumns(this.data);\r\n\t\t\r\n\t\tthis.columnDefs = [];\r\n\t\t\r\n\t\tthis.columnFields.forEach((ref) => {\r\n\t\t\tvar def = Object.assign({}, this.columnDefinition);\r\n\t\t\tdef.field = ref;\r\n\t\t\tdef.title = ref;\r\n\t\t\t\r\n\t\t\tthis.columnDefs.push(def);\r\n\t\t});\r\n\t}\r\n\t\r\n\tinitializeRows(){\r\n\t\tvar refs;\r\n\t\t\r\n\t\tthis.grid.setRowCount(this.rowCount);\r\n\t\t\r\n\t\trefs = this.grid.genRows(this.data);\r\n\t\t\r\n\t\tthis.rowDefs = [];\r\n\t\t\r\n\t\trefs.forEach((ref, i) => {\r\n\t\t\tvar def = {\"_id\":ref};\r\n\t\t\tvar data = this.data[i];\r\n\t\t\t\r\n\t\t\tif(data){\r\n\t\t\t\tdata.forEach((val, j) => {\r\n\t\t\t\t\tvar field = this.columnFields[j];\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(field){\r\n\t\t\t\t\t\tdef[field] = val;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.rowDefs.push(def);\r\n\t\t});\r\n\t}\r\n\t\r\n\tunload(){\r\n\t\tthis.isActive = false;\r\n\t\tthis.scrollTop = this.table.rowManager.scrollTop;\r\n\t\tthis.scrollLeft = this.table.rowManager.scrollLeft;\r\n\t\tthis.data = this.getData(true);\r\n\t\tthis.element.classList.remove(\"tabulator-spreadsheet-tab-active\");\r\n\t}\r\n\t\r\n\tload(){\r\n\t\t\r\n\t\tvar wasInactive = !this.isActive;\r\n\t\t\r\n\t\tthis.isActive = true;\r\n\t\tthis.table.blockRedraw();\r\n\t\tthis.table.setData([]);\r\n\t\tthis.table.setColumns(this.columnDefs);\r\n\t\tthis.table.setData(this.rowDefs);\r\n\t\tthis.table.restoreRedraw();\r\n\t\t\r\n\t\tif(wasInactive && this.scrollTop !== null){\r\n\t\t\tthis.table.rowManager.element.scrollLeft = this.scrollLeft;\r\n\t\t\tthis.table.rowManager.element.scrollTop = this.scrollTop;\r\n\t\t}\r\n\t\t\r\n\t\tthis.element.classList.add(\"tabulator-spreadsheet-tab-active\");\r\n\t\t\r\n\t\tthis.dispatchExternal(\"sheetLoaded\", this.getComponent());\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t//////// Helper Functions /////////\r\n\t///////////////////////////////////\r\n\t\r\n\tgetComponent(){\r\n\t\treturn new SheetComponent(this);\r\n\t}\r\n\t\r\n\tgetDefinition(){\r\n\t\treturn {\r\n\t\t\ttitle:this.title,\r\n\t\t\tkey:this.key,\r\n\t\t\trows:this.rowCount,\r\n\t\t\tcolumns:this.columnCount,\r\n\t\t\tdata:this.getData(),\r\n\t\t};\r\n\t}\r\n\t\r\n\tgetData(full){\r\n\t\tvar output = [], \r\n\t\trowWidths,\r\n\t\toutputWidth, outputHeight;\r\n\t\t\r\n\t\t//map data to array format\r\n\t\tthis.rowDefs.forEach((rowData) => {\r\n\t\t\tvar row = [];\r\n\t\t\t\r\n\t\t\tthis.columnFields.forEach((field) => {\r\n\t\t\t\trow.push(rowData[field]);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\toutput.push(row);\r\n\t\t});\r\n\t\t\r\n\t\t//trim output\r\n\t\tif(!full && !this.options(\"spreadsheetOutputFull\")){\r\n\t\t\t\r\n\t\t\t//calculate used area of data\r\n\t\t\trowWidths = output.map(row => row.findLastIndex(val => typeof val !== 'undefined') + 1);\r\n\t\t\toutputWidth = Math.max(...rowWidths);\r\n\t\t\toutputHeight = rowWidths.findLastIndex(width => width > 0) + 1;\r\n\t\t\t\r\n\t\t\toutput = output.slice(0, outputHeight);\r\n\t\t\toutput = output.map(row => row.slice(0, outputWidth));\r\n\t\t}\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tsetData(data){\r\n\t\tthis.data = data;\r\n\t\tthis.reinitialize();\r\n\t\t\r\n\t\tthis.dispatchExternal(\"sheetUpdated\", this.getComponent());\r\n\t\t\r\n\t\tif(this.isActive){\r\n\t\t\tthis.load();\r\n\t\t}\r\n\t}\r\n\t\r\n\tclear(){\r\n\t\tthis.setData([]);\r\n\t}\r\n\t\r\n\tsetTitle(title){\r\n\t\tthis.title = title;\r\n\t\tthis.element.innerText = title;\r\n\t\t\r\n\t\tthis.dispatchExternal(\"sheetUpdated\", this.getComponent());\r\n\t}\r\n\t\r\n\tsetRows(rows){\r\n\t\tthis.rowCount = rows;\r\n\t\tthis.initializeRows();\r\n\t\t\r\n\t\tthis.dispatchExternal(\"sheetUpdated\", this.getComponent());\r\n\t\t\r\n\t\tif(this.isActive){\r\n\t\t\tthis.load();\r\n\t\t}\r\n\t}\r\n\t\r\n\tsetColumns(columns){\r\n\t\tthis.columnCount = columns;\r\n\t\tthis.reinitialize();\r\n\t\t\r\n\t\tthis.dispatchExternal(\"sheetUpdated\", this.getComponent());\r\n\t\t\r\n\t\tif(this.isActive){\r\n\t\t\tthis.load();\r\n\t\t}\r\n\t}\r\n\t\r\n\tremove(){\r\n\t\tthis.spreadsheetManager.removeSheet(this);\r\n\t}\r\n\t\r\n\tdestroy(){\r\n\t\tif(this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\t\t\r\n\t\tthis.dispatchExternal(\"sheetRemoved\", this.getComponent());\r\n\t}\r\n\t\r\n\tactive(){\r\n\t\tthis.spreadsheetManager.loadSheet(this);\r\n\t}\r\n}\n\nclass Spreadsheet extends Module{\r\n\t\r\n\tstatic moduleName = \"spreadsheet\";\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.sheets = [];\r\n\t\tthis.element = null;\r\n\t\t\r\n\t\tthis.registerTableOption(\"spreadsheet\", false); \r\n\t\tthis.registerTableOption(\"spreadsheetRows\", 50); \r\n\t\tthis.registerTableOption(\"spreadsheetColumns\", 50); \r\n\t\tthis.registerTableOption(\"spreadsheetColumnDefinition\", {}); \r\n\t\tthis.registerTableOption(\"spreadsheetOutputFull\", false); \r\n\t\tthis.registerTableOption(\"spreadsheetData\", false); \r\n\t\tthis.registerTableOption(\"spreadsheetSheets\", false); \r\n\t\tthis.registerTableOption(\"spreadsheetSheetTabs\", false); \r\n\t\tthis.registerTableOption(\"spreadsheetSheetTabsElement\", false); \r\n\t\t\r\n\t\tthis.registerTableFunction(\"setSheets\", this.setSheets.bind(this));\r\n\t\tthis.registerTableFunction(\"addSheet\", this.addSheet.bind(this));\r\n\t\tthis.registerTableFunction(\"getSheets\", this.getSheets.bind(this));\r\n\t\tthis.registerTableFunction(\"getSheetDefinitions\", this.getSheetDefinitions.bind(this));\r\n\t\tthis.registerTableFunction(\"setSheetData\", this.setSheetData.bind(this));\r\n\t\tthis.registerTableFunction(\"getSheet\", this.getSheet.bind(this));\r\n\t\tthis.registerTableFunction(\"getSheetData\", this.getSheetData.bind(this));\r\n\t\tthis.registerTableFunction(\"clearSheet\", this.clearSheet.bind(this));\r\n\t\tthis.registerTableFunction(\"removeSheet\", this.removeSheetFunc.bind(this));\r\n\t\tthis.registerTableFunction(\"activeSheet\", this.activeSheetFunc.bind(this));\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t////// Module Initialization //////\r\n\t///////////////////////////////////\r\n\t\r\n\t\r\n\tinitialize(){\r\n\t\tif(this.options(\"spreadsheet\")){\t\r\n\t\t\tthis.subscribe(\"table-initialized\", this.tableInitialized.bind(this));\r\n\t\t\tthis.subscribe(\"data-loaded\", this.loadRemoteData.bind(this));\r\n\t\t\t\r\n\t\t\tthis.table.options.index = \"_id\";\r\n\t\t\t\r\n\t\t\tif(this.options(\"spreadsheetData\") && this.options(\"spreadsheetSheets\")){\r\n\t\t\t\tconsole.warn(\"You cannot use spreadsheetData and spreadsheetSheets at the same time, ignoring spreadsheetData\");\r\n\t\t\t\t\r\n\t\t\t\tthis.table.options.spreadsheetData = false;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.compatibilityCheck();\r\n\t\t\t\r\n\t\t\tif(this.options(\"spreadsheetSheetTabs\")){\r\n\t\t\t\tthis.initializeTabset();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tcompatibilityCheck(){\r\n\t\tif(this.options(\"data\")){\r\n\t\t\tconsole.warn(\"Do not use the data option when working with spreadsheets, use either spreadsheetData or spreadsheetSheets to pass data into the table\");\r\n\t\t}\r\n\t\t\r\n\t\tif(this.options(\"pagination\")){\r\n\t\t\tconsole.warn(\"The spreadsheet module is not compatible with the pagination module\");\r\n\t\t}\r\n\t\t\r\n\t\tif(this.options(\"groupBy\")){\r\n\t\t\tconsole.warn(\"The spreadsheet module is not compatible with the row grouping module\");\r\n\t\t}\r\n\t\t\r\n\t\tif(this.options(\"responsiveCollapse\")){\r\n\t\t\tconsole.warn(\"The spreadsheet module is not compatible with the responsive collapse module\");\r\n\t\t}\r\n\t}\r\n\tinitializeTabset(){\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-spreadsheet-tabs\");\r\n\t\tvar altContainer = this.options(\"spreadsheetSheetTabsElement\");\r\n\t\t\r\n\t\tif(altContainer && !(altContainer instanceof HTMLElement)){\r\n\t\t\taltContainer = document.querySelector(altContainer);\r\n\t\t\t\r\n\t\t\tif(!altContainer){\r\n\t\t\t\tconsole.warn(\"Unable to find element matching spreadsheetSheetTabsElement selector:\", this.options(\"spreadsheetSheetTabsElement\"));\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(altContainer){\r\n\t\t\taltContainer.appendChild(this.element);\r\n\t\t}else {\r\n\t\t\tthis.footerAppend(this.element);\r\n\t\t}\r\n\t}\r\n\t\r\n\ttableInitialized(){\r\n\t\tif(this.sheets.length){\r\n\t\t\tthis.loadSheet(this.sheets[0]);\r\n\t\t}else {\r\n\t\t\t\r\n\t\t\tif(this.options(\"spreadsheetSheets\")){\r\n\t\t\t\tthis.loadSheets(this.options(\"spreadsheetSheets\"));\r\n\t\t\t}else if(this.options(\"spreadsheetData\")){\r\n\t\t\t\tthis.loadData(this.options(\"spreadsheetData\"));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t/////////// Ajax Parsing //////////\r\n\t///////////////////////////////////\r\n\r\n\tloadRemoteData(data, data1, data2){\r\n\t\tconsole.log(\"data\", data, data1, data2);\r\n\r\n\t\tif(Array.isArray(data)){\r\n\r\n\t\t\tthis.table.dataLoader.clearAlert();\r\n\t\t\tthis.dispatchExternal(\"dataLoaded\", data);\r\n\r\n\t\t\tif(!data.length || Array.isArray(data[0])){\r\n\t\t\t\tthis.loadData(data);\r\n\t\t\t}else {\r\n\t\t\t\tthis.loadSheets(data);\r\n\t\t\t}\r\n\t\t}else {\r\n\t\t\tconsole.error(\"Spreadsheet Loading Error - Unable to process remote data due to invalid data type \\nExpecting: array \\nReceived: \", typeof data, \"\\nData: \", data);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Sheet Management ////////\r\n\t///////////////////////////////////\r\n\t\r\n\t\r\n\tloadData(data){\r\n\t\tvar def = {\r\n\t\t\tdata:data,\r\n\t\t};\r\n\t\t\r\n\t\tthis.loadSheet(this.newSheet(def));\r\n\t}\r\n\t\r\n\tdestroySheets(){\r\n\t\tthis.sheets.forEach((sheet) => {\r\n\t\t\tsheet.destroy();\r\n\t\t});\r\n\t\t\r\n\t\tthis.sheets = [];\r\n\t\tthis.activeSheet = null;\r\n\t}\r\n\t\r\n\tloadSheets(sheets){\t\r\n\t\tif(!Array.isArray(sheets)){\r\n\t\t\tsheets = [];\r\n\t\t}\r\n\t\t\r\n\t\tthis.destroySheets();\r\n\t\t\r\n\t\tsheets.forEach((def) => {\r\n\t\t\tthis.newSheet(def);\r\n\t\t});\r\n\t\t\r\n\t\tthis.loadSheet(this.sheets[0]);\r\n\t}\r\n\t\r\n\tloadSheet(sheet){\r\n\t\tif(this.activeSheet !== sheet){\r\n\t\t\tif(this.activeSheet){\r\n\t\t\t\tthis.activeSheet.unload();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.activeSheet = sheet;\r\n\t\t\t\r\n\t\t\tsheet.load();\r\n\t\t}\r\n\t}\r\n\t\r\n\tnewSheet(definition = {}){\r\n\t\tvar sheet;\r\n\t\t\r\n\t\tif(!definition.rows){\r\n\t\t\tdefinition.rows = this.options(\"spreadsheetRows\");\r\n\t\t}\r\n\t\t\r\n\t\tif(!definition.columns){\r\n\t\t\tdefinition.columns = this.options(\"spreadsheetColumns\");\r\n\t\t}\r\n\t\t\r\n\t\tsheet = new Sheet(this, definition);\r\n\t\t\r\n\t\tthis.sheets.push(sheet);\r\n\t\t\r\n\t\tif(this.element){\r\n\t\t\tthis.element.appendChild(sheet.element);\r\n\t\t}\r\n\t\t\r\n\t\treturn sheet;\r\n\t}\r\n\t\r\n\tremoveSheet(sheet){\r\n\t\tvar index = this.sheets.indexOf(sheet),\r\n\t\tprevSheet;\r\n\t\t\r\n\t\tif(this.sheets.length > 1){\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.sheets.splice(index, 1);\r\n\t\t\t\tsheet.destroy();\r\n\t\t\t\t\r\n\t\t\t\tif(this.activeSheet === sheet){\r\n\t\t\t\t\t\r\n\t\t\t\t\tprevSheet = this.sheets[index - 1] || this.sheets[0];\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(prevSheet){\r\n\t\t\t\t\t\tthis.loadSheet(prevSheet);\r\n\t\t\t\t\t}else {\r\n\t\t\t\t\t\tthis.activeSheet = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else {\r\n\t\t\tconsole.warn(\"Unable to remove sheet, at least one sheet must be active\");\r\n\t\t}\r\n\t}\r\n\t\r\n\tlookupSheet(key){\r\n\t\tif(!key){\r\n\t\t\treturn this.activeSheet;\r\n\t\t}else if(key instanceof Sheet){\r\n\t\t\treturn key;\r\n\t\t}else if(key instanceof SheetComponent){\r\n\t\t\treturn key._sheet;\r\n\t\t}else {\r\n\t\t\treturn this.sheets.find(sheet => sheet.key === key) || false;\r\n\t\t}\r\n\t}\r\n\t\r\n\t\r\n\t///////////////////////////////////\r\n\t//////// Public Functions /////////\r\n\t///////////////////////////////////\r\n\t\r\n\tsetSheets(sheets){\r\n\t\tthis.loadSheets(sheets);\r\n\r\n\t\treturn this.getSheets();\r\n\t}\r\n\r\n\taddSheet(sheet){\r\n\t\treturn this.newSheet(sheet).getComponent();\r\n\t}\r\n\t\r\n\tgetSheetDefinitions(){\r\n\t\treturn this.sheets.map(sheet => sheet.getDefinition());\r\n\t}\r\n\t\r\n\tgetSheets(){\r\n\t\treturn this.sheets.map(sheet => sheet.getComponent());\r\n\t}\r\n\t\r\n\tgetSheet(key){\r\n\t\tvar sheet = this.lookupSheet(key);\r\n\t\t\r\n\t\treturn sheet ? sheet.getComponent() : false;\r\n\t}\r\n\t\r\n\tsetSheetData(key, data){\r\n\t\tif (key && !data){\r\n\t\t\tdata = key;\r\n\t\t\tkey = false;\r\n\t\t}\r\n\t\t\r\n\t\tvar sheet = this.lookupSheet(key);\r\n\t\t\r\n\t\treturn sheet ? sheet.setData(data) : false;\t\r\n\t}\r\n\t\r\n\tgetSheetData(key){\r\n\t\tvar sheet = this.lookupSheet(key);\r\n\t\t\r\n\t\treturn sheet ? sheet.getData() : false;\t\r\n\t}\r\n\t\r\n\tclearSheet(key){\r\n\t\tvar sheet = this.lookupSheet(key);\r\n\t\t\r\n\t\treturn sheet ? sheet.clear() : false;\r\n\t}\r\n\t\r\n\tremoveSheetFunc(key){\r\n\t\tvar sheet = this.lookupSheet(key);\r\n\t\t\r\n\t\tif(sheet){\r\n\t\t\tthis.removeSheet(sheet);\r\n\t\t}\r\n\t}\r\n\t\r\n\tactiveSheetFunc(key){\r\n\t\tvar sheet = this.lookupSheet(key);\r\n\t\t\r\n\t\treturn sheet ? this.loadSheet(sheet) : false;\r\n\t}\r\n}\n\nclass Tooltip extends Module{\n\n\tstatic moduleName = \"tooltip\";\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\t// this.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\t// this.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\nvar defaultValidators = {\n\t//is integer\n\tinteger: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tvalue = Number(value);\n\n\t\treturn !isNaN(value) && isFinite(value) && Math.floor(value) === value;\n\t},\n\n\t//is float\n\tfloat: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\tvalue = Number(value);\n\n\t\treturn !isNaN(value) && isFinite(value) && value % 1 !== 0;\n\t},\n\n\t//must be a number\n\tnumeric: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn !isNaN(value);\n\t},\n\n\t//must be a string\n\tstring: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn isNaN(value);\n\t},\n\n\t//must be alphanumeric\n\talphanumeric: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tvar reg = new RegExp(/^[a-z0-9]+$/i);\n\n\t\treturn reg.test(value);\n\t},\n\n\t//maximum value\n\tmax: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn parseFloat(value) <= parameters;\n\t},\n\n\t//minimum value\n\tmin: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn parseFloat(value) >= parameters;\n\t},\n\n\t//starts with value\n\tstarts: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).toLowerCase().startsWith(String(parameters).toLowerCase());\n\t},\n\n\t//ends with value\n\tends: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).toLowerCase().endsWith(String(parameters).toLowerCase());\n\t},\n\n\n\t//minimum string length\n\tminLength: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).length >= parameters;\n\t},\n\n\t//maximum string length\n\tmaxLength: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).length <= parameters;\n\t},\n\n\t//in provided value list\n\tin: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tif(typeof parameters == \"string\"){\n\t\t\tparameters = parameters.split(\"|\");\n\t\t}\n\n\t\treturn parameters.indexOf(value) > -1;\n\t},\n\n\t//must match provided regex\n\tregex: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\tvar reg = new RegExp(parameters);\n\n\t\treturn reg.test(value);\n\t},\n\n\t//value must be unique in this column\n\tunique: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\tvar unique = true;\n\n\t\tvar cellData = cell.getData();\n\t\tvar column = cell.getColumn()._getSelf();\n\n\t\tthis.table.rowManager.rows.forEach(function(row){\n\t\t\tvar data = row.getData();\n\n\t\t\tif(data !== cellData){\n\t\t\t\tif(value == column.getFieldValue(data)){\n\t\t\t\t\tunique = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn unique;\n\t},\n\n\t//must have a value\n\trequired:function(cell, value, parameters){\n\t\treturn value !== \"\" && value !== null && typeof value !== \"undefined\";\n\t},\n};\n\nclass Validate extends Module{\n\n\tstatic moduleName = \"validate\";\n\n\t//load defaults\n\tstatic validators = defaultValidators;\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\nvar allModules = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tAccessorModule: Accessor,\n\tAjaxModule: Ajax,\n\tClipboardModule: Clipboard,\n\tColumnCalcsModule: ColumnCalcs,\n\tDataTreeModule: DataTree,\n\tDownloadModule: Download,\n\tEditModule: Edit,\n\tExportModule: Export,\n\tFilterModule: Filter,\n\tFormatModule: Format,\n\tFrozenColumnsModule: FrozenColumns,\n\tFrozenRowsModule: FrozenRows,\n\tGroupRowsModule: GroupRows,\n\tHistoryModule: History,\n\tHtmlTableImportModule: HtmlTableImport,\n\tImportModule: Import,\n\tInteractionModule: Interaction,\n\tKeybindingsModule: Keybindings,\n\tMenuModule: Menu,\n\tMoveColumnsModule: MoveColumns,\n\tMoveRowsModule: MoveRows,\n\tMutatorModule: Mutator,\n\tPageModule: Page,\n\tPersistenceModule: Persistence,\n\tPopupModule: Popup,\n\tPrintModule: Print,\n\tReactiveDataModule: ReactiveData,\n\tResizeColumnsModule: ResizeColumns,\n\tResizeRowsModule: ResizeRows,\n\tResizeTableModule: ResizeTable,\n\tResponsiveLayoutModule: ResponsiveLayout,\n\tSelectRangeModule: SelectRange,\n\tSelectRowModule: SelectRow,\n\tSortModule: Sort,\n\tSpreadsheetModule: Spreadsheet,\n\tTooltipModule: Tooltip,\n\tValidateModule: Validate\n});\n\nvar defaultOptions = {\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\trowHeader:false,\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\tdataSendParams:{},\n\tdataReceiveParams:{},\n\n\tdependencies:{},\n};\n\nclass 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}\n\nclass 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}\n\nclass BasicHorizontal extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\t}\n\t\n\trenderRowCells(row, inFragment) {\n\t\tconst rowFrag = document.createDocumentFragment();\n\t\trow.cells.forEach((cell) => {\n\t\t\trowFrag.appendChild(cell.getElement());\n\t\t});\n\t\trow.element.appendChild(rowFrag);\n\t\t\n\t\tif(!inFragment){\n\t\t\trow.cells.forEach((cell) => {\n\t\t\t\tcell.cellRendered();\n\t\t\t});\n\t\t}\n\t}\n\t\n\treinitializeColumnWidths(columns){\n\t\tcolumns.forEach(function(column){\n\t\t\tcolumn.reinitializeWidth();\n\t\t});\n\t}\n}\n\nclass 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\t\t\t\t\t\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\t\t\t\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\tlet col = this.columns[i];\n\t\t\t\n\t\t\tif(col){\n\t\t\t\tcol.reinitializeWidth();\n\t\t\t}\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\t\t\n\t\tvisibleRows.forEach((row) => {\n\t\t\tthis.reinitializeRow(row, true);\n\t\t});\n\t\t\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\t\t\t\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\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\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\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\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\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\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\t\t\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\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\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\t\t\t\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\t\t\t\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\t\t\t\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\t\t\t\t\n\t\t\t\tthis.initializeRow(row);\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass 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.rowHeader = 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\t\t\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\t\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\": VirtualDomHorizontal,\n\t\t\t\"basic\": BasicHorizontal,\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\t\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\t\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\t\t\n\t\tthis.scrollLeft = left;\n\t\t\n\t\tthis.renderer.scrollColumns(left);\n\t}\n\t\n\tinitializeScrollWheelWatcher(){\n\t\tthis.contentsElement.addEventListener(\"wheel\", (e) => {\n\t\t\tvar left;\n\t\t\t\n\t\t\tif(e.deltaX){\n\t\t\t\tleft = this.contentsElement.scrollLeft + e.deltaX;\n\t\t\t\t\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\tcollProgress = {},\n\t\trowSample = this.table.options.autoColumns === \"full\" ? data : [data[0]],\n\t\tdefinitions = this.table.options.autoColumnsDefinitions;\n\t\t\n\t\tif(data && data.length){\n\t\t\t\n\t\t\trowSample.forEach((row) => {\n\t\t\t\t\n\t\t\t\tObject.keys(row).forEach((key, index) => {\n\t\t\t\t\tlet value = row[key],\n\t\t\t\t\tcol;\n\t\t\t\t\t\n\t\t\t\t\tif(!collProgress[key]){\n\t\t\t\t\t\tcol = {\n\t\t\t\t\t\t\tfield:key,\n\t\t\t\t\t\t\ttitle:key,\n\t\t\t\t\t\t\tsorter:this.calculateSorterFromValue(value),\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tcols.splice(index, 0, col);\n\t\t\t\t\t\tcollProgress[key] = typeof value === \"undefined\" ? col : true;\n\t\t\t\t\t}else if(collProgress[key] !== true){\n\t\t\t\t\t\tif(typeof value !== \"undefined\"){\n\t\t\t\t\t\t\tcollProgress[key].sorter = this.calculateSorterFromValue(value);\n\t\t\t\t\t\t\tcollProgress[key] = true;\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(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\tcalculateSorterFromValue(value){\n\t\tvar sorter;\n\t\t\n\t\tswitch(typeof value){\n\t\t\tcase \"undefined\":\n\t\t\t\tsorter = \"string\";\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"boolean\":\n\t\t\t\tsorter = \"boolean\";\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"number\":\n\t\t\t\tsorter = \"number\";\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"object\":\n\t\t\t\tif(Array.isArray(value)){\n\t\t\t\t\tsorter = \"array\";\n\t\t\t\t}else {\n\t\t\t\t\tsorter = \"string\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tif(!isNaN(value) && value !== \"\"){\n\t\t\t\t\tsorter = \"number\";\n\t\t\t\t}else {\n\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\n\t\t\t\t\t\tsorter = \"alphanum\";\n\t\t\t\t\t}else {\n\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\treturn sorter;\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\tthis.dispatchExternal(\"columnsLoading\");\n\t\t\n\t\tif(this.table.options.rowHeader){\n\t\t\tthis.rowHeader = new Column(this.table.options.rowHeader === true ? {} : this.table.options.rowHeader, this, true);\n\t\t\tthis.columns.push(this.rowHeader);\n\t\t\tthis.headersElement.appendChild(this.rowHeader.getElement());\n\t\t\tthis.rowHeader.columnRendered();\n\t\t}\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\n\t\tif(this.subscribedExternal(\"columnsLoaded\")){\n\t\t\tthis.dispatchExternal(\"columnsLoaded\", this.getComponents());\n\t\t}\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\t//prevent adding of rows in front of row header\n\t\tif(before && this.rowHeader && (!nextToColumn || nextToColumn === this.rowHeader)){\n\t\t\tbefore = false;\n\t\t\tnextToColumn = this.rowHeader;\n\t\t\tindex = 0;\n\t\t}\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\t\t\t\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\t\t\t\n\t\t\tthis.headersElement.style.height = minHeight + \"px\";\n\t\t\t\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\t\t\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\t\t\t\t\n\t\t\t\tcolumns = [];\n\t\t\t\t\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\t\t\t\t\n\t\t\t\t//subject is a HTML element of the column header\n\t\t\t\tlet match = columns.find((column) => {\n\t\t\t\t\treturn column.element === subject;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn match || false;\n\t\t\t}\n\t\t\t\n\t\t}else {\n\t\t\t//subject should be treated as the field name of the column\n\t\t\treturn this.columnsByField[subject] || false;\n\t\t}\n\t\t\n\t\t//catch all for any other type of input\n\t\treturn false;\n\t}\n\t\n\tgetColumnByField(field){\n\t\treturn this.columnsByField[field];\n\t}\n\t\n\tgetColumnsByFieldRoot(root){\n\t\tvar matches = [];\n\t\t\n\t\tObject.keys(this.columnsByField).forEach((field) => {\n\t\t\tvar fieldRoot = this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator)[0] : field;\n\t\t\tif(fieldRoot === root){\n\t\t\t\tmatches.push(this.columnsByField[field]);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn matches;\n\t}\n\t\n\tgetColumnByIndex(index){\n\t\treturn this.columnsByIndex[index];\n\t}\n\t\n\tgetFirstVisibleColumn(){\n\t\tvar index = this.columnsByIndex.findIndex((col) => {\n\t\t\treturn col.visible;\n\t\t});\n\t\t\n\t\treturn index > -1 ? this.columnsByIndex[index] : false;\n\t}\n\t\n\tgetVisibleColumnsByIndex() {\n\t\treturn this.columnsByIndex.filter((col) => col.visible);\n\t}\n\t\n\tgetColumns(){\n\t\treturn this.columns;\n\t}\n\t\n\tfindColumnIndex(column){\n\t\treturn this.columnsByIndex.findIndex((col) => {\n\t\t\treturn column === col;\n\t\t});\n\t}\n\t\n\t//return all columns that are not groups\n\tgetRealColumns(){\n\t\treturn this.columnsByIndex;\n\t}\n\t\n\t//traverse across columns and call action\n\ttraverse(callback){\n\t\tthis.columnsByIndex.forEach((column,i) =>{\n\t\t\tcallback(column, i);\n\t\t});\n\t}\n\t\n\t//get definitions of actual columns\n\tgetDefinitions(active){\n\t\tvar output = [];\n\t\t\n\t\tthis.columnsByIndex.forEach((column) => {\n\t\t\tif(!active || (active && column.visible)){\n\t\t\t\toutput.push(column.getDefinition());\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\t//get full nested definition tree\n\tgetDefinitionTree(){\n\t\tvar output = [];\n\t\t\n\t\tthis.columns.forEach((column) => {\n\t\t\toutput.push(column.getDefinition(true));\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetComponents(structured){\n\t\tvar output = [],\n\t\tcolumns = structured ? this.columns : this.columnsByIndex;\n\t\t\n\t\tcolumns.forEach((column) => {\n\t\t\toutput.push(column.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetWidth(){\n\t\tvar width = 0;\n\t\t\n\t\tthis.columnsByIndex.forEach((column) => {\n\t\t\tif(column.visible){\n\t\t\t\twidth += column.getWidth();\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn width;\n\t}\n\t\n\tmoveColumn(from, to, after){\n\t\tto.element.parentNode.insertBefore(from.element, to.element);\n\t\t\n\t\tif(after){\n\t\t\tto.element.parentNode.insertBefore(to.element, from.element);\n\t\t}\n\t\t\n\t\tthis.moveColumnActual(from, to, after);\n\t\t\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}\n\nclass BasicVertical extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.verticalFillMode = \"fill\";\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t}\n\t\n\tclearRows(){\n\t\tvar element = this.tableElement;\n\t\t\n\t\t// element.children.detach();\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\t\n\t\telement.scrollTop = 0;\n\t\telement.scrollLeft = 0;\n\t\t\n\t\telement.style.minWidth = \"\";\n\t\telement.style.minHeight = \"\";\n\t\telement.style.display = \"\";\n\t\telement.style.visibility = \"\";\n\t}\n\t\n\trenderRows() {\n\t\tvar element = this.tableElement,\n\t\tonlyGroupHeaders = true,\n\t\ttableFrag = document.createDocumentFragment(),\n\t\trows = this.rows();\n\t\t\n\t\trows.forEach((row, index) => {\n\t\t\tthis.styleRow(row, index);\n\t\t\trow.initialize(false, true);\n\t\t\t\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tonlyGroupHeaders = false;\n\t\t\t}\n\t\t\t\n\t\t\ttableFrag.appendChild(row.getElement());\n\t\t});\n\t\t\n\t\telement.appendChild(tableFrag);\n\t\t\n\t\trows.forEach((row) => {\n\t\t\trow.rendered();\n\t\t\t\n\t\t\tif(!row.heightInitialized) {\n\t\t\t\trow.calcHeight(true);\n\t\t\t}\n\t\t});\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tif(!row.heightInitialized) {\n\t\t\t\trow.setCellHeight();\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(onlyGroupHeaders){\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\t\t}else {\n\t\t\telement.style.minWidth = \"\";\n\t\t}\n\t}\n\t\n\t\n\trerenderRows(callback){\t\n\t\tthis.clearRows();\n\t\t\n\t\tif(callback){\n\t\t\tcallback();\n\t\t}\n\t\t\n\t\tthis.renderRows();\n\n\t\tif(!this.rows().length){\n\t\t\tthis.table.rowManager.tableEmpty();\n\t\t}\n\t}\n\t\n\tscrollToRowNearestTop(row){\n\t\tvar rowTop = Helpers.elOffset(row.getElement()).top;\n\t\t\n\t\treturn !(Math.abs(this.elementVertical.scrollTop - rowTop) > Math.abs(this.elementVertical.scrollTop + this.elementVertical.clientHeight - rowTop));\n\t}\n\t\n\tscrollToRow(row){\n\t\tvar rowEl = row.getElement();\n\t\t\n\t\tthis.elementVertical.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top + this.elementVertical.scrollTop;\n\t}\n\t\n\tvisibleRows(includingBuffer){\n\t\treturn this.rows();\n\t}\n\t\n}\n\nclass VirtualDomVertical extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.verticalFillMode = \"fill\";\n\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\n\t\tthis.vDomRowHeight = 20; //approximation of row heights for padding\n\n\t\tthis.vDomTop = 0; //hold position for first rendered row in the virtual DOM\n\t\tthis.vDomBottom = 0; //hold position for last rendered row in the virtual DOM\n\n\t\tthis.vDomScrollPosTop = 0; //last scroll position of the vDom top;\n\t\tthis.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;\n\n\t\tthis.vDomTopPad = 0; //hold value of padding for top of virtual DOM\n\t\tthis.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM\n\n\t\tthis.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go\n\n\t\tthis.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling\n\n\t\tthis.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)\n\t\tthis.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin\n\n\t\tthis.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed\n\t\tthis.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed\n\t}\n\n\t//////////////////////////////////////\n\t///////// Public Functions ///////////\n\t//////////////////////////////////////\n\n\tclearRows(){\n\t\tvar element = this.tableElement;\n\n\t\t// element.children.detach();\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\n\t\telement.style.paddingTop = \"\";\n\t\telement.style.paddingBottom = \"\";\n\t\telement.style.minHeight = \"\";\n\t\telement.style.display = \"\";\n\t\telement.style.visibility = \"\";\n\n\t\tthis.elementVertical.scrollTop = 0;\n\t\tthis.elementVertical.scrollLeft = 0;\n\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\n\t\tthis.vDomTop = 0;\n\t\tthis.vDomBottom = 0;\n\t\tthis.vDomTopPad = 0;\n\t\tthis.vDomBottomPad = 0;\n\t\tthis.vDomScrollPosTop = 0;\n\t\tthis.vDomScrollPosBottom = 0;\n\t}\n\n\trenderRows(){\n\t\tthis._virtualRenderFill();\n\t}\n\n\trerenderRows(callback){\n\t\tvar scrollTop = this.elementVertical.scrollTop;\n\t\tvar topRow = false;\n\t\tvar topOffset = false;\n\n\t\tvar left = this.table.rowManager.scrollLeft;\n\n\t\tvar rows = this.rows();\n\n\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\n\n\t\t\tif(rows[i]){\n\t\t\t\tvar diff = scrollTop - rows[i].getElement().offsetTop;\n\n\t\t\t\tif(topOffset === false || Math.abs(diff) < topOffset){\n\t\t\t\t\ttopOffset = diff;\n\t\t\t\t\ttopRow = i;\n\t\t\t\t}else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\trows.forEach((row) => {\n\t\t\trow.deinitializeHeight();\n\t\t});\n\n\t\tif(callback){\n\t\t\tcallback();\n\t\t}\n\n\t\tif(this.rows().length){\n\t\t\tthis._virtualRenderFill((topRow === false ? this.rows.length - 1 : topRow), true, topOffset || 0);\n\t\t}else {\n\t\t\tthis.clear();\n\t\t\tthis.table.rowManager.tableEmpty();\n\t\t}\n\n\t\tthis.scrollColumns(left);\n\t}\n\n\tscrollColumns(left){\n\t\tthis.table.rowManager.scrollHorizontal(left);\n\t}\n\n\tscrollRows(top, dir){\n\t\tvar topDiff = top - this.vDomScrollPosTop;\n\t\tvar bottomDiff = top - this.vDomScrollPosBottom;\n\t\tvar margin = this.vDomWindowBuffer * 2;\n\t\tvar rows = this.rows();\n\n\t\tthis.scrollTop = top;\n\n\t\tif(-topDiff > margin || bottomDiff > margin){\n\t\t\t//if big scroll redraw table;\n\t\t\tvar left = this.table.rowManager.scrollLeft;\n\t\t\tthis._virtualRenderFill(Math.floor((this.elementVertical.scrollTop / this.elementVertical.scrollHeight) * rows.length));\n\t\t\tthis.scrollColumns(left);\n\t\t}else {\n\n\t\t\tif(dir){\n\t\t\t\t//scrolling up\n\t\t\t\tif(topDiff < 0){\n\t\t\t\t\tthis._addTopRow(rows, -topDiff);\n\t\t\t\t}\n\n\t\t\t\tif(bottomDiff < 0){\n\t\t\t\t\t//hide bottom row if needed\n\t\t\t\t\tif(this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer){\n\t\t\t\t\t\tthis._removeBottomRow(rows, -bottomDiff);\n\t\t\t\t\t}else {\n\t\t\t\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else {\n\n\t\t\t\tif(bottomDiff >= 0){\n\t\t\t\t\tthis._addBottomRow(rows, bottomDiff);\n\t\t\t\t}\n\n\t\t\t\t//scrolling down\n\t\t\t\tif(topDiff >= 0){\n\t\t\t\t\t//hide top row if needed\n\t\t\t\t\tif(this.scrollTop > this.vDomWindowBuffer){\n\t\t\t\t\t\tthis._removeTopRow(rows, topDiff);\n\t\t\t\t\t}else {\n\t\t\t\t\t\tthis.vDomScrollPosTop = this.scrollTop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tresize(){\n\t\tthis.vDomWindowBuffer = this.table.options.renderVerticalBuffer || this.elementVertical.clientHeight;\n\t}\n\n\tscrollToRowNearestTop(row){\n\t\tvar rowIndex = this.rows().indexOf(row);\n\n\t\treturn !(Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex));\n\t}\n\n\tscrollToRow(row){\n\t\tvar index = this.rows().indexOf(row);\n\n\t\tif(index > -1){\n\t\t\tthis._virtualRenderFill(index, true);\n\t\t}\n\t}\n\n\tvisibleRows(includingBuffer){\n\t\tvar topEdge = this.elementVertical.scrollTop,\n\t\tbottomEdge = this.elementVertical.clientHeight + topEdge,\n\t\ttopFound = false,\n\t\ttopRow = 0,\n\t\tbottomRow = 0,\n\t\trows = this.rows();\n\n\t\tif(includingBuffer){\n\t\t\ttopRow = this.vDomTop;\n\t\t\tbottomRow = this.vDomBottom;\n\t\t}else {\n\t\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\n\t\t\t\tif(rows[i]){\n\t\t\t\t\tif(!topFound){\n\t\t\t\t\t\tif((topEdge - rows[i].getElement().offsetTop) >= 0){\n\t\t\t\t\t\t\ttopRow = i;\n\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\ttopFound = true;\n\n\t\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\n\t\t\t\t\t\t\t\tbottomRow = i;\n\t\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else {\n\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\n\t\t\t\t\t\t\tbottomRow = i;\n\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn rows.slice(topRow, bottomRow + 1);\n\t}\n\n\t//////////////////////////////////////\n\t//////// Internal Rendering //////////\n\t//////////////////////////////////////\n\n\t//full virtual render\n\t_virtualRenderFill(position, forceMove, offset) {\n\t\tvar\telement = this.tableElement,\n\t\tholder = this.elementVertical,\n\t\ttopPad = 0,\n\t\trowsHeight = 0,\n\t\trowHeight = 0,\n\t\theightOccupied = 0,\n\t\ttopPadHeight = 0,\n\t\ti = 0,\n\t\trows = this.rows(),\n\t\trowsCount = rows.length,\n\t\tindex = 0,\n\t\trow,\n\t\trowFragment,\n\t\trenderedRows = [],\n\t\ttotalRowsRendered = 0,\n\t\trowsToRender = 0,\n\t\tfixedHeight = this.table.rowManager.fixedHeight,\n\t\tcontainerHeight = this.elementVertical.clientHeight, \n\t\tavgRowHeight = this.table.options.rowHeight, \n\t\tresized = true;\n\n\t\tposition = position || 0;\n\n\t\toffset = offset || 0;\n\n\t\tif(!position){\n\t\t\tthis.clear();\n\t\t}else {\n\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\n\t\t\t//check if position is too close to bottom of table\n\t\t\theightOccupied = (rowsCount - position + 1) * this.vDomRowHeight;\n\n\t\t\tif(heightOccupied < containerHeight){\n\t\t\t\tposition -= Math.ceil((containerHeight - heightOccupied) / this.vDomRowHeight);\n\t\t\t\tif(position < 0){\n\t\t\t\t\tposition = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//calculate initial pad\n\t\t\ttopPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position);\n\t\t\tposition -= topPad;\n\t\t}\n\n\t\tif(rowsCount && Helpers.elVisible(this.elementVertical)){\n\t\t\tthis.vDomTop = position;\n\t\t\tthis.vDomBottom = position -1;\n\n\t\t\tif(fixedHeight || this.table.options.maxHeight) {\n\t\t\t\tif(avgRowHeight) {\n\t\t\t\t\trowsToRender = (containerHeight / avgRowHeight) + (this.vDomWindowBuffer / avgRowHeight);\n\t\t\t\t}\n\t\t\t\trowsToRender = Math.max(this.vDomWindowMinTotalRows, Math.ceil(rowsToRender));\n\t\t\t}\n\t\t\telse {\n\t\t\t\trowsToRender = rowsCount;\n\t\t\t}\n\n\t\t\twhile(((rowsToRender == rowsCount || rowsHeight <= containerHeight + this.vDomWindowBuffer) || totalRowsRendered < this.vDomWindowMinTotalRows) && this.vDomBottom < rowsCount -1) {\n\t\t\t\trenderedRows = [];\n\t\t\t\trowFragment = document.createDocumentFragment();\n\n\t\t\t\ti = 0;\n\n\t\t\t\twhile ((i < rowsToRender) && this.vDomBottom < rowsCount -1) {\t\n\t\t\t\t\tindex = this.vDomBottom + 1,\n\t\t\t\t\trow = rows[index];\n\n\t\t\t\t\tthis.styleRow(row, index);\n\n\t\t\t\t\trow.initialize(false, true);\n\t\t\t\t\tif(!row.heightInitialized && !this.table.options.rowHeight){\n\t\t\t\t\t\trow.clearCellHeight();\n\t\t\t\t\t}\n\n\t\t\t\t\trowFragment.appendChild(row.getElement());\n\t\t\t\t\trenderedRows.push(row);\n\t\t\t\t\tthis.vDomBottom ++;\n\t\t\t\t\ti++;\n\t\t\t\t}\n\n\t\t\t\tif(!renderedRows.length){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\telement.appendChild(rowFragment);\n\t\t\t\t\n\t\t\t\t// NOTE: The next 3 loops are separate on purpose\n\t\t\t\t// This is to batch up the dom writes and reads which drastically improves performance \n\n\t\t\t\trenderedRows.forEach((row) => {\n\t\t\t\t\trow.rendered();\n\n\t\t\t\t\tif(!row.heightInitialized) {\n\t\t\t\t\t\trow.calcHeight(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trenderedRows.forEach((row) => {\n\t\t\t\t\tif(!row.heightInitialized) {\n\t\t\t\t\t\trow.setCellHeight();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trenderedRows.forEach((row) => {\n\t\t\t\t\trowHeight = row.getHeight();\n\t\t\t\t\t\n\t\t\t\t\tif(totalRowsRendered < topPad){\n\t\t\t\t\t\ttopPadHeight += rowHeight;\n\t\t\t\t\t}else {\n\t\t\t\t\t\trowsHeight += rowHeight;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\n\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t\t\t}\n\t\t\t\t\ttotalRowsRendered++;\n\t\t\t\t});\n\n\t\t\t\tresized = this.table.rowManager.adjustTableSize();\n\t\t\t\tcontainerHeight = this.elementVertical.clientHeight;\n\t\t\t\tif(resized && (fixedHeight || this.table.options.maxHeight))\n\t\t\t\t{\n\t\t\t\t\tavgRowHeight = rowsHeight / totalRowsRendered;\n\t\t\t\t\trowsToRender = Math.max(this.vDomWindowMinTotalRows, Math.ceil((containerHeight / avgRowHeight) + (this.vDomWindowBuffer / avgRowHeight)));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!position){\n\t\t\t\tthis.vDomTopPad = 0;\n\t\t\t\t//adjust row height to match average of rendered elements\n\t\t\t\tthis.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / totalRowsRendered);\n\t\t\t\tthis.vDomBottomPad = this.vDomRowHeight * (rowsCount - this.vDomBottom -1);\n\n\t\t\t\tthis.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - containerHeight;\n\t\t\t}else {\n\t\t\t\tthis.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : (this.vDomRowHeight * this.vDomTop) + offset;\n\t\t\t\tthis.vDomBottomPad = this.vDomBottom == rowsCount-1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0);\n\t\t\t}\n\t\t\t\n\t\t\telement.style.paddingTop = this.vDomTopPad+\"px\";\n\t\t\telement.style.paddingBottom = this.vDomBottomPad+\"px\";\n\n\t\t\tif(forceMove){\n\t\t\t\tthis.scrollTop = this.vDomTopPad + (topPadHeight) + offset - (this.elementVertical.scrollWidth > this.elementVertical.clientWidth ? this.elementVertical.offsetHeight - containerHeight : 0);\n\t\t\t}\n\n\t\t\tthis.scrollTop = Math.min(this.scrollTop, this.elementVertical.scrollHeight - containerHeight);\n\n\t\t\t//adjust for horizontal scrollbar if present (and not at top of table)\n\t\t\tif(this.elementVertical.scrollWidth > this.elementVertical.clientWidth && forceMove){\n\t\t\t\tthis.scrollTop += this.elementVertical.offsetHeight - containerHeight;\n\t\t\t}\n\n\t\t\tthis.vDomScrollPosTop = this.scrollTop;\n\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\n\n\t\t\tholder.scrollTop = this.scrollTop;\n\n\t\t\tthis.dispatch(\"render-virtual-fill\");\n\t\t}\n\t}\n\n\t_addTopRow(rows, fillableSpace){\n\t\tvar table = this.tableElement,\n\t\taddedRows = [],\n\t\tpaddingAdjust = 0,\n\t\tindex = this.vDomTop -1,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tif(this.vDomTop){\n\t\t\t\tlet row = rows[index],\n\t\t\t\trowHeight, initialized;\n\n\t\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\t\t\t\t\tinitialized = row.initialized;\n\n\t\t\t\t\tif(fillableSpace >= rowHeight){\n\n\t\t\t\t\t\tthis.styleRow(row, index);\n\t\t\t\t\t\ttable.insertBefore(row.getElement(), table.firstChild);\n\n\t\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\n\t\t\t\t\t\t\taddedRows.push(row);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trow.initialize();\n\n\t\t\t\t\t\tif(!initialized){\n\t\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\n\n\t\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\n\t\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\t\tthis.vDomTop--;\n\t\t\t\t\t\tindex--;\n\t\t\t\t\t\ti++;\n\n\t\t\t\t\t}else {\n\t\t\t\t\t\tworking = false;\n\t\t\t\t\t}\n\n\t\t\t\t}else {\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\n\t\t\t}else {\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of addedRows){\n\t\t\trow.clearCellHeight();\n\t\t}\n\n\t\tthis._quickNormalizeRowHeight(addedRows);\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomTopPad -= paddingAdjust;\n\n\t\t\tif(this.vDomTopPad < 0){\n\t\t\t\tthis.vDomTopPad = index * this.vDomRowHeight;\n\t\t\t}\n\n\t\t\tif(index < 1){\n\t\t\t\tthis.vDomTopPad = 0;\n\t\t\t}\n\n\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\n\t\t\tthis.vDomScrollPosTop -= paddingAdjust;\n\t\t}\n\t}\n\n\t_removeTopRow(rows, fillableSpace){\n\t\tvar removableRows = [],\n\t\tpaddingAdjust = 0,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet row = rows[this.vDomTop],\n\t\t\trowHeight;\n\n\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\n\t\t\t\tif(fillableSpace >= rowHeight){\n\t\t\t\t\tthis.vDomTop++;\n\n\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\tremovableRows.push(row);\n\t\t\t\t\ti++;\n\t\t\t\t}else {\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of removableRows){\n\t\t\tlet rowEl = row.getElement();\n\n\t\t\tif(rowEl.parentNode){\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t}\n\t\t}\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomTopPad += paddingAdjust;\n\t\t\tthis.tableElement.style.paddingTop = this.vDomTopPad + \"px\";\n\t\t\tthis.vDomScrollPosTop += this.vDomTop ? paddingAdjust : paddingAdjust + this.vDomWindowBuffer;\n\t\t}\n\t}\n\n\t_addBottomRow(rows, fillableSpace){\n\t\tvar table = this.tableElement,\n\t\taddedRows = [],\n\t\tpaddingAdjust = 0,\n\t\tindex = this.vDomBottom + 1,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet row = rows[index],\n\t\t\trowHeight, initialized;\n\n\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\t\t\t\tinitialized = row.initialized;\n\n\t\t\t\tif(fillableSpace >= rowHeight){\n\n\t\t\t\t\tthis.styleRow(row, index);\n\t\t\t\t\ttable.appendChild(row.getElement());\n\n\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\n\t\t\t\t\t\taddedRows.push(row);\n\t\t\t\t\t}\n\n\t\t\t\t\trow.initialize();\n\n\t\t\t\t\tif(!initialized){\n\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\n\n\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\n\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\tthis.vDomBottom++;\n\t\t\t\t\tindex++;\n\t\t\t\t\ti++;\n\t\t\t\t}else {\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of addedRows){\n\t\t\trow.clearCellHeight();\n\t\t}\n\n\t\tthis._quickNormalizeRowHeight(addedRows);\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomBottomPad -= paddingAdjust;\n\n\t\t\tif(this.vDomBottomPad < 0 || index == rows.length -1){\n\t\t\t\tthis.vDomBottomPad = 0;\n\t\t\t}\n\n\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\n\t\t\tthis.vDomScrollPosBottom += paddingAdjust;\n\t\t}\n\t}\n\n\t_removeBottomRow(rows, fillableSpace){\n\t\tvar removableRows = [],\n\t\tpaddingAdjust = 0,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet row = rows[this.vDomBottom],\n\t\t\trowHeight;\n\n\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\n\t\t\t\tif(fillableSpace >= rowHeight){\n\t\t\t\t\tthis.vDomBottom --;\n\n\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\tremovableRows.push(row);\n\t\t\t\t\ti++;\n\t\t\t\t}else {\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of removableRows){\n\t\t\tlet rowEl = row.getElement();\n\n\t\t\tif(rowEl.parentNode){\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t}\n\t\t}\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomBottomPad += paddingAdjust;\n\n\t\t\tif(this.vDomBottomPad < 0){\n\t\t\t\tthis.vDomBottomPad = 0;\n\t\t\t}\n\n\t\t\tthis.tableElement.style.paddingBottom = this.vDomBottomPad + \"px\";\n\t\t\tthis.vDomScrollPosBottom -= paddingAdjust;\n\t\t}\n\t}\n\n\t_quickNormalizeRowHeight(rows){\n\t\tfor(let row of rows){\n\t\t\trow.calcHeight();\n\t\t}\n\n\t\tfor(let row of rows){\n\t\t\trow.setCellHeight();\n\t\t}\n\t}\n}\n\nclass 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.type === \"row\" && row.getPosition() === position && row.isDisplayed();\n\t\t});\n\t}\n\t\n\tscrollToRow(row, position, ifVisible){\n\t\treturn this.renderer.scrollToRowPosition(row, position, ifVisible);\n\t}\n\t\n\t////////////////// Data Handling //////////////////\n\tsetData(data, renderInPosition, columnsChanged){\n\t\treturn new Promise((resolve, reject)=>{\n\t\t\tif(renderInPosition && this.getDisplayRows().length){\n\t\t\t\tif(this.table.options.pagination){\n\t\t\t\t\tthis._setDataActual(data, true);\n\t\t\t\t}else {\n\t\t\t\t\tthis.reRenderInPosition(() => {\n\t\t\t\t\t\tthis._setDataActual(data);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tif(this.table.options.autoColumns && columnsChanged && this.table.initialized){\n\t\t\t\t\tthis.table.columnManager.generateColumnsFromRowData(data);\n\t\t\t\t}\n\t\t\t\tthis.resetScroll();\n\t\t\t\t\n\t\t\t\tthis._setDataActual(data);\n\t\t\t}\n\t\t\t\n\t\t\tresolve();\n\t\t});\n\t}\n\t\n\t_setDataActual(data, renderInPosition){\n\t\tthis.dispatchExternal(\"dataProcessing\", data);\n\t\t\n\t\tthis._wipeElements();\n\t\t\n\t\tif(Array.isArray(data)){\n\t\t\tthis.dispatch(\"data-processing\", data);\n\t\t\t\n\t\t\tdata.forEach((def, i) => {\n\t\t\t\tif(def && typeof def === \"object\"){\n\t\t\t\t\tvar row = new Row(def, this);\n\t\t\t\t\tthis.rows.push(row);\n\t\t\t\t}else {\n\t\t\t\t\tconsole.warn(\"Data Loading Warning - Invalid row data detected and ignored, expecting object but received:\", def);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tthis.refreshActiveData(false, false, renderInPosition);\n\t\t\t\n\t\t\tthis.dispatch(\"data-processed\", data);\n\t\t\tthis.dispatchExternal(\"dataProcessed\", data);\n\t\t}else {\n\t\t\tconsole.error(\"Data Loading Error - Unable to process data due to invalid data type \\nExpecting: array \\nReceived: \", typeof data, \"\\nData: \", data);\n\t\t}\n\t}\n\t\n\t_wipeElements(){\n\t\tthis.dispatch(\"rows-wipe\");\n\t\t\n\t\tthis.destroy();\n\t\t\n\t\tthis.adjustTableSize();\n\t\t\n\t\tthis.dispatch(\"rows-wiped\");\n\t}\n\t\n\tdestroy(){\n\t\tthis.rows.forEach((row) => {\n\t\t\trow.wipe();\n\t\t});\n\t\t\n\t\tthis.rows = [];\n\t\tthis.activeRows = [];\n\t\tthis.activeRowsPipeline = [];\n\t\tthis.activeRowsCount = 0;\n\t\tthis.displayRows = [];\n\t\tthis.displayRowsCount = 0;\n\t}\n\t\n\tdeleteRow(row, blockRedraw){\n\t\tvar allIndex = this.rows.indexOf(row),\n\t\tactiveIndex = this.activeRows.indexOf(row);\n\t\t\n\t\tif(activeIndex > -1){\n\t\t\tthis.activeRows.splice(activeIndex, 1);\n\t\t}\n\t\t\n\t\tif(allIndex > -1){\n\t\t\tthis.rows.splice(allIndex, 1);\n\t\t}\n\t\t\n\t\tthis.setActiveRows(this.activeRows);\n\t\t\n\t\tthis.displayRowIterator((rows) => {\n\t\t\tvar displayIndex = rows.indexOf(row);\n\t\t\t\n\t\t\tif(displayIndex > -1){\n\t\t\t\trows.splice(displayIndex, 1);\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(!blockRedraw){\n\t\t\tthis.reRenderInPosition();\n\t\t}\n\t\t\n\t\tthis.regenerateRowPositions();\n\t\t\n\t\tthis.dispatchExternal(\"rowDeleted\", row.getComponent());\n\t\t\n\t\tif(!this.displayRowsCount){\n\t\t\tthis.tableEmpty();\n\t\t}\n\t\t\n\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.getData());\n\t\t}\n\t}\n\t\n\taddRow(data, pos, index, blockRedraw){\n\t\tvar row = this.addRowActual(data, pos, index, blockRedraw);\n\t\treturn row;\n\t}\n\t\n\t//add multiple rows\n\taddRows(data, pos, index, refreshDisplayOnly){\n\t\tvar rows = [];\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tpos = this.findAddRowPos(pos);\n\t\t\t\n\t\t\tif(!Array.isArray(data)){\n\t\t\t\tdata = [data];\n\t\t\t}\n\t\t\t\n\t\t\tif((typeof index == \"undefined\" && pos) || (typeof index !== \"undefined\" && !pos)){\n\t\t\t\tdata.reverse();\n\t\t\t}\n\t\t\t\n\t\t\tdata.forEach((item, i) => {\n\t\t\t\tvar row = this.addRow(item, pos, index, true);\n\t\t\t\trows.push(row);\n\t\t\t\tthis.dispatch(\"row-added\", row, item, pos, index);\n\t\t\t});\n\t\t\t\n\t\t\tthis.refreshActiveData(refreshDisplayOnly ? \"displayPipeline\" : false, false, true);\n\t\t\t\n\t\t\tthis.regenerateRowPositions();\n\t\t\t\n\t\t\tif(this.displayRowsCount){\n\t\t\t\tthis._clearPlaceholder();\n\t\t\t}\n\t\t\t\n\t\t\tresolve(rows);\n\t\t});\n\t}\n\t\n\tfindAddRowPos(pos){\n\t\tif(typeof pos === \"undefined\"){\n\t\t\tpos = this.table.options.addRowPos;\n\t\t}\n\t\t\n\t\tif(pos === \"pos\"){\n\t\t\tpos = true;\n\t\t}\n\t\t\n\t\tif(pos === \"bottom\"){\n\t\t\tpos = false;\n\t\t}\n\t\t\n\t\treturn pos;\n\t}\n\t\n\taddRowActual(data, pos, index, blockRedraw){\n\t\tvar row = data instanceof Row ? data : new Row(data || {}, this),\n\t\ttop = this.findAddRowPos(pos),\n\t\tallIndex = -1,\n\t\tactiveIndex, chainResult;\n\t\t\n\t\tif(!index){\n\t\t\tchainResult = this.chain(\"row-adding-position\", [row, top], null, {index, top});\n\t\t\t\n\t\t\tindex = chainResult.index;\n\t\t\ttop = chainResult.top;\n\t\t}\n\t\t\n\t\tif(typeof index !== \"undefined\"){\n\t\t\tindex = this.findRow(index);\n\t\t}\n\t\t\n\t\tindex = this.chain(\"row-adding-index\", [row, index, top], null, index);\n\t\t\n\t\tif(index){\n\t\t\tallIndex = this.rows.indexOf(index);\n\t\t}\n\t\t\n\t\tif(index && allIndex > -1){\n\t\t\tactiveIndex = this.activeRows.indexOf(index);\n\t\t\t\n\t\t\tthis.displayRowIterator(function(rows){\n\t\t\t\tvar displayIndex = rows.indexOf(index);\n\t\t\t\t\n\t\t\t\tif(displayIndex > -1){\n\t\t\t\t\trows.splice((top ? displayIndex : displayIndex + 1), 0, row);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(activeIndex > -1){\n\t\t\t\tthis.activeRows.splice((top ? activeIndex : activeIndex + 1), 0, row);\n\t\t\t}\n\t\t\t\n\t\t\tthis.rows.splice((top ? allIndex : allIndex + 1), 0, row);\n\t\t\t\n\t\t}else {\n\t\t\t\n\t\t\tif(top){\n\t\t\t\t\n\t\t\t\tthis.displayRowIterator(function(rows){\n\t\t\t\t\trows.unshift(row);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.activeRows.unshift(row);\n\t\t\t\tthis.rows.unshift(row);\n\t\t\t}else {\n\t\t\t\tthis.displayRowIterator(function(rows){\n\t\t\t\t\trows.push(row);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.activeRows.push(row);\n\t\t\t\tthis.rows.push(row);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.setActiveRows(this.activeRows);\n\t\t\n\t\tthis.dispatchExternal(\"rowAdded\", row.getComponent());\n\t\t\n\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\n\t\t}\n\t\t\n\t\tif(!blockRedraw){\n\t\t\tthis.reRenderInPosition();\n\t\t}\n\t\t\n\t\treturn row;\n\t}\n\t\n\tmoveRow(from, to, after){\n\t\tthis.dispatch(\"row-move\", from, to, after);\n\t\t\n\t\tthis.moveRowActual(from, to, after);\n\t\t\n\t\tthis.regenerateRowPositions();\n\t\t\n\t\tthis.dispatch(\"row-moved\", from, to, after);\n\t\tthis.dispatchExternal(\"rowMoved\", from.getComponent());\n\t}\n\t\n\tmoveRowActual(from, to, after){\n\t\tthis.moveRowInArray(this.rows, from, to, after);\n\t\tthis.moveRowInArray(this.activeRows, from, to, after);\n\t\t\n\t\tthis.displayRowIterator((rows) => {\n\t\t\tthis.moveRowInArray(rows, from, to, after);\n\t\t});\n\t\t\n\t\tthis.dispatch(\"row-moving\", from, to, after);\n\t}\n\t\n\tmoveRowInArray(rows, from, to, after){\n\t\tvar\tfromIndex, toIndex, start, end;\n\t\t\n\t\tif(from !== to){\n\t\t\t\n\t\t\tfromIndex = rows.indexOf(from);\n\t\t\t\n\t\t\tif (fromIndex > -1) {\n\t\t\t\t\n\t\t\t\trows.splice(fromIndex, 1);\n\t\t\t\t\n\t\t\t\ttoIndex = rows.indexOf(to);\n\t\t\t\t\n\t\t\t\tif (toIndex > -1) {\n\t\t\t\t\t\n\t\t\t\t\tif(after){\n\t\t\t\t\t\trows.splice(toIndex+1, 0, from);\n\t\t\t\t\t}else {\n\t\t\t\t\t\trows.splice(toIndex, 0, from);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}else {\n\t\t\t\t\trows.splice(fromIndex, 0, from);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t//restyle rows\n\t\t\tif(rows === this.getDisplayRows()){\n\t\t\t\t\n\t\t\t\tstart = fromIndex < toIndex ? fromIndex : toIndex;\n\t\t\t\tend = toIndex > fromIndex ? toIndex : fromIndex +1;\n\t\t\t\t\n\t\t\t\tfor(let i = start; i <= end; i++){\n\t\t\t\t\tif(rows[i]){\n\t\t\t\t\t\tthis.styleRow(rows[i], i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tclearData(){\n\t\tthis.setData([]);\n\t}\n\t\n\tgetRowIndex(row){\n\t\treturn this.findRowIndex(row, this.rows);\n\t}\n\t\n\tgetDisplayRowIndex(row){\n\t\tvar index = this.getDisplayRows().indexOf(row);\n\t\treturn index > -1 ? index : false;\n\t}\n\t\n\tnextDisplayRow(row, rowOnly){\n\t\tvar index = this.getDisplayRowIndex(row),\n\t\tnextRow = false;\n\t\t\n\t\t\n\t\tif(index !== false && index < this.displayRowsCount -1){\n\t\t\tnextRow = this.getDisplayRows()[index+1];\n\t\t}\n\t\t\n\t\tif(nextRow && (!(nextRow instanceof Row) || nextRow.type != \"row\")){\n\t\t\treturn this.nextDisplayRow(nextRow, rowOnly);\n\t\t}\n\t\t\n\t\treturn nextRow;\n\t}\n\t\n\tprevDisplayRow(row, rowOnly){\n\t\tvar index = this.getDisplayRowIndex(row),\n\t\tprevRow = false;\n\t\t\n\t\tif(index){\n\t\t\tprevRow = this.getDisplayRows()[index-1];\n\t\t}\n\t\t\n\t\tif(rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != \"row\")){\n\t\t\treturn this.prevDisplayRow(prevRow, rowOnly);\n\t\t}\n\t\t\n\t\treturn prevRow;\n\t}\n\t\n\tfindRowIndex(row, list){\n\t\tvar rowIndex;\n\t\t\n\t\trow = this.findRow(row);\n\t\t\n\t\tif(row){\n\t\t\trowIndex = list.indexOf(row);\n\t\t\t\n\t\t\tif(rowIndex > -1){\n\t\t\t\treturn rowIndex;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tgetData(active, transform){\n\t\tvar output = [],\n\t\trows = this.getRows(active);\n\t\t\n\t\trows.forEach(function(row){\n\t\t\tif(row.type == \"row\"){\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetComponents(active){\n\t\tvar\toutput = [],\n\t\trows = this.getRows(active);\n\t\t\n\t\trows.forEach(function(row){\n\t\t\toutput.push(row.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetDataCount(active){\n\t\tvar rows = this.getRows(active);\n\t\t\n\t\treturn rows.length;\n\t}\n\t\n\tscrollHorizontal(left){\n\t\tthis.scrollLeft = left;\n\t\tthis.element.scrollLeft = left;\n\t\t\n\t\tthis.dispatch(\"scroll-horizontal\", left);\n\t}\n\t\n\tregisterDataPipelineHandler(handler, priority){\n\t\tif(typeof priority !== \"undefined\"){\n\t\t\tthis.dataPipeline.push({handler, priority});\n\t\t\tthis.dataPipeline.sort((a, b) => {\n\t\t\t\treturn a.priority - b.priority;\n\t\t\t});\n\t\t}else {\n\t\t\tconsole.error(\"Data pipeline handlers must have a priority in order to be registered\");\n\t\t}\n\t}\n\t\n\tregisterDisplayPipelineHandler(handler, priority){\n\t\tif(typeof priority !== \"undefined\"){\n\t\t\tthis.displayPipeline.push({handler, priority});\n\t\t\tthis.displayPipeline.sort((a, b) => {\n\t\t\t\treturn a.priority - b.priority;\n\t\t\t});\n\t\t}else {\n\t\t\tconsole.error(\"Display pipeline handlers must have a priority in order to be registered\");\n\t\t}\n\t}\n\t\n\t//set active data set\n\trefreshActiveData(handler, skipStage, renderInPosition){\n\t\tvar table = this.table,\n\t\tstage = \"\",\n\t\tindex = 0,\n\t\tcascadeOrder = [\"all\", \"dataPipeline\", \"display\", \"displayPipeline\", \"end\"];\n\t\t\n\t\tif(!this.table.destroyed){\n\t\t\tif(typeof handler === \"function\"){\n\t\t\t\tindex = this.dataPipeline.findIndex((item) => {\n\t\t\t\t\treturn item.handler === handler;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(index > -1){\n\t\t\t\t\tstage = \"dataPipeline\";\n\t\t\t\t\t\n\t\t\t\t\tif(skipStage){\n\t\t\t\t\t\tif(index == this.dataPipeline.length - 1){\n\t\t\t\t\t\t\tstage = \"display\";\n\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else {\n\t\t\t\t\tindex = this.displayPipeline.findIndex((item) => {\n\t\t\t\t\t\treturn item.handler === handler;\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(index > -1){\n\t\t\t\t\t\tstage = \"displayPipeline\";\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(skipStage){\n\t\t\t\t\t\t\tif(index == this.displayPipeline.length - 1){\n\t\t\t\t\t\t\t\tstage = \"end\";\n\t\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else {\n\t\t\t\t\t\tconsole.error(\"Unable to refresh data, invalid handler provided\", handler);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tstage = handler || \"all\";\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.redrawBlock){\n\t\t\t\tif(!this.redrawBlockRestoreConfig || (this.redrawBlockRestoreConfig && ((this.redrawBlockRestoreConfig.stage === stage && index < this.redrawBlockRestoreConfig.index) || (cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage))))){\n\t\t\t\t\tthis.redrawBlockRestoreConfig = {\n\t\t\t\t\t\thandler: handler,\n\t\t\t\t\t\tskipStage: skipStage,\n\t\t\t\t\t\trenderInPosition: renderInPosition,\n\t\t\t\t\t\tstage:stage,\n\t\t\t\t\t\tindex:index,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn;\n\t\t\t}else {\n\t\t\t\tif(Helpers.elVisible(this.element)){\n\t\t\t\t\tif(renderInPosition){\n\t\t\t\t\t\tthis.reRenderInPosition(this.refreshPipelines.bind(this, handler, stage, index, renderInPosition));\n\t\t\t\t\t}else {\n\t\t\t\t\t\tthis.refreshPipelines(handler, stage, index, renderInPosition);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(!handler){\n\t\t\t\t\t\t\tthis.table.columnManager.renderer.renderColumns();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.renderTable();\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(table.options.layoutColumnsOnNewData){\n\t\t\t\t\t\t\tthis.table.columnManager.redraw(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else {\n\t\t\t\t\tthis.refreshPipelines(handler, stage, index, renderInPosition);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"data-refreshed\");\n\t\t\t}\n\t\t}\n\t}\n\t\n\trefreshPipelines(handler, stage, index, renderInPosition){\n\t\tthis.dispatch(\"data-refreshing\");\n\t\t\n\t\tif(!handler || !this.activeRowsPipeline[0]){\n\t\t\tthis.activeRowsPipeline[0] = this.rows.slice(0);\n\t\t}\n\t\t\n\t\t//cascade through data refresh stages\n\t\tswitch(stage){\n\t\t\tcase \"all\":\n\t\t\t//handle case where all data needs refreshing\n\t\t\t\n\t\t\tcase \"dataPipeline\":\n\t\t\t\tfor(let i = index; i < this.dataPipeline.length; i++){\n\t\t\t\t\tlet result = this.dataPipeline[i].handler(this.activeRowsPipeline[i].slice(0));\n\t\t\t\t\n\t\t\t\t\tthis.activeRowsPipeline[i + 1] = result || this.activeRowsPipeline[i].slice(0);\n\t\t\t\t}\n\t\t\t\n\t\t\t\tthis.setActiveRows(this.activeRowsPipeline[this.dataPipeline.length]);\n\t\t\t\n\t\t\tcase \"display\":\n\t\t\t\tindex = 0;\n\t\t\t\tthis.resetDisplayRows();\n\t\t\t\n\t\t\tcase \"displayPipeline\":\n\t\t\t\tfor(let i = index; i < this.displayPipeline.length; i++){\n\t\t\t\t\tlet result = this.displayPipeline[i].handler((i ? this.getDisplayRows(i - 1) : this.activeRows).slice(0), renderInPosition);\n\t\t\t\t\n\t\t\t\t\tthis.setDisplayRows(result || this.getDisplayRows(i - 1).slice(0), i);\n\t\t\t\t}\n\t\t\t\n\t\t\tcase \"end\":\n\t\t\t//case to handle scenario when trying to skip past end stage\n\t\t\t\tthis.regenerateRowPositions();\n\t\t}\n\t\t\n\t\tif(this.getDisplayRows().length){\n\t\t\tthis._clearPlaceholder();\n\t\t}\n\t}\n\t\n\t//regenerate row positions\n\tregenerateRowPositions(){\n\t\tvar rows = this.getDisplayRows();\n\t\tvar index = 1;\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tif (row.type === \"row\"){\n\t\t\t\trow.setPosition(index);\n\t\t\t\tindex++;\n\t\t\t}\n\t\t});\n\t}\n\t\n\tsetActiveRows(activeRows){\n\t\tthis.activeRows = this.activeRows = Object.assign([], activeRows);\n\t\tthis.activeRowsCount = this.activeRows.length;\n\t}\n\t\n\t//reset display rows array\n\tresetDisplayRows(){\n\t\tthis.displayRows = [];\n\t\t\n\t\tthis.displayRows.push(this.activeRows.slice(0));\n\t\t\n\t\tthis.displayRowsCount = this.displayRows[0].length;\n\t}\n\t\n\t//set display row pipeline data\n\tsetDisplayRows(displayRows, index){\n\t\tthis.displayRows[index] = displayRows;\n\t\t\n\t\tif(index == this.displayRows.length -1){\n\t\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\n\t\t}\n\t}\n\t\n\tgetDisplayRows(index){\n\t\tif(typeof index == \"undefined\"){\n\t\t\treturn this.displayRows.length ? this.displayRows[this.displayRows.length -1] : [];\n\t\t}else {\n\t\t\treturn this.displayRows[index] || [];\n\t\t}\n\t}\n\t\n\tgetVisibleRows(chain, viewable){\n\t\tvar rows = Object.assign([], this.renderer.visibleRows(!viewable));\n\t\t\n\t\tif(chain){\n\t\t\trows = this.chain(\"rows-visible\", [viewable], rows, rows);\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\t//repeat action across display rows\n\tdisplayRowIterator(callback){\n\t\tthis.activeRowsPipeline.forEach(callback);\n\t\tthis.displayRows.forEach(callback);\n\t\t\n\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\n\t}\n\t\n\t//return only actual rows (not group headers etc)\n\tgetRows(type){\n\t\tvar rows = [];\n\t\t\n\t\tswitch(type){\n\t\t\tcase \"active\":\n\t\t\t\trows = this.activeRows;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"display\":\n\t\t\t\trows = this.table.rowManager.getDisplayRows();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"visible\":\n\t\t\t\trows = this.getVisibleRows(false, true);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\trows = this.chain(\"rows-retrieve\", type, null, this.rows) || this.rows;\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\t///////////////// Table Rendering /////////////////\n\t//trigger rerender of table in current position\n\treRenderInPosition(callback){\n\t\tif(this.redrawBlock){\n\t\t\tif(callback){\n\t\t\t\tcallback();\n\t\t\t}else {\n\t\t\t\tthis.redrawBlockRenderInPosition = true;\n\t\t\t}\n\t\t}else {\n\t\t\tthis.dispatchExternal(\"renderStarted\");\n\t\t\t\n\t\t\tthis.renderer.rerenderRows(callback);\n\t\t\t\n\t\t\tif(!this.fixedHeight){\n\t\t\t\tthis.adjustTableSize();\n\t\t\t}\n\t\t\t\n\t\t\tthis.scrollBarCheck();\n\t\t\t\n\t\t\tthis.dispatchExternal(\"renderComplete\");\n\t\t}\n\t}\n\t\n\tscrollBarCheck(){\n\t\tvar scrollbarWidth = 0;\n\t\t\n\t\t//adjust for vertical scrollbar moving table when present\n\t\tif(this.element.scrollHeight > this.element.clientHeight){\n\t\t\tscrollbarWidth = this.element.offsetWidth - this.element.clientWidth;\n\t\t}\n\t\t\n\t\tif(scrollbarWidth !== this.scrollbarWidth){\n\t\t\tthis.scrollbarWidth = scrollbarWidth;\n\t\t\tthis.dispatch(\"scrollbar-vertical\", scrollbarWidth);\n\t\t}\n\t}\n\t\n\tinitializeRenderer(){\n\t\tvar renderClass;\n\t\t\n\t\tvar renderers = {\n\t\t\t\"virtual\": VirtualDomVertical,\n\t\t\t\"basic\": BasicVertical,\n\t\t};\n\t\t\n\t\tif(typeof this.table.options.renderVertical === \"string\"){\n\t\t\trenderClass = renderers[this.table.options.renderVertical];\n\t\t}else {\n\t\t\trenderClass = this.table.options.renderVertical;\n\t\t}\n\t\t\n\t\tif(renderClass){\n\t\t\tthis.renderMode = this.table.options.renderVertical;\n\t\t\t\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\n\t\t\tthis.renderer.initialize();\n\t\t\t\n\t\t\tif((this.table.element.clientHeight || this.table.options.height) && !(this.table.options.minHeight && this.table.options.maxHeight)){\n\t\t\t\tthis.fixedHeight = true;\n\t\t\t}else {\n\t\t\t\tthis.fixedHeight = false;\n\t\t\t}\n\t\t}else {\n\t\t\tconsole.error(\"Unable to find matching renderer:\", this.table.options.renderVertical);\n\t\t}\n\t}\n\t\n\tgetRenderMode(){\n\t\treturn this.renderMode;\n\t}\n\t\n\trenderTable(){\n\t\tthis.dispatchExternal(\"renderStarted\");\n\t\t\n\t\tthis.element.scrollTop = 0;\n\t\t\n\t\tthis._clearTable();\n\t\t\n\t\tif(this.displayRowsCount){\n\t\t\tthis.renderer.renderRows();\n\t\t\t\n\t\t\tif(this.firstRender){\n\t\t\t\tthis.firstRender = false;\n\t\t\t\t\n\t\t\t\tif(!this.fixedHeight){\n\t\t\t\t\tthis.adjustTableSize();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.layoutRefresh(true);\n\t\t\t}\n\t\t}else {\n\t\t\tthis.renderEmptyScroll();\n\t\t}\n\t\t\n\t\tif(!this.fixedHeight){\n\t\t\tthis.adjustTableSize();\n\t\t}\n\t\t\n\t\tthis.dispatch(\"table-layout\");\n\t\t\n\t\tif(!this.displayRowsCount){\n\t\t\tthis._showPlaceholder();\n\t\t}\n\t\t\n\t\tthis.scrollBarCheck();\n\t\t\n\t\tthis.dispatchExternal(\"renderComplete\");\n\t}\n\t\n\t//show scrollbars on empty table div\n\trenderEmptyScroll(){\n\t\tif(this.placeholder){\n\t\t\tthis.tableElement.style.display = \"none\";\n\t\t}else {\n\t\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\t\t\t// this.tableElement.style.minHeight = \"1px\";\n\t\t\t// this.tableElement.style.visibility = \"hidden\";\n\t\t}\n\t}\n\t\n\t_clearTable(){\t\n\t\tthis._clearPlaceholder();\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.renderer.clearRows();\n\t}\n\t\n\ttableEmpty(){\n\t\tthis.renderEmptyScroll();\n\t\tthis._showPlaceholder();\n\t}\n\n\tcheckPlaceholder(){\n\t\tif(this.displayRowsCount){\n\t\t\tthis._clearPlaceholder();\n\t\t}else {\n\t\t\tthis.tableEmpty();\n\t\t}\n\t}\n\t\n\t_showPlaceholder(){\n\t\tif(this.placeholder){\n\t\t\tif(this.placeholder && this.placeholder.parentNode){\n\t\t\t\tthis.placeholder.parentNode.removeChild(this.placeholder);\n\t\t\t}\n\t\t\t\n\t\t\tthis.initializePlaceholder();\n\t\t\t\n\t\t\tthis.placeholder.setAttribute(\"tabulator-render-mode\", this.renderMode);\n\t\t\t\n\t\t\tthis.getElement().appendChild(this.placeholder);\n\t\t\tthis._positionPlaceholder();\n\n\t\t\tthis.adjustTableSize();\n\t\t}\n\t}\n\t\n\t_clearPlaceholder(){\n\t\tif(this.placeholder && this.placeholder.parentNode){\n\t\t\tthis.placeholder.parentNode.removeChild(this.placeholder);\n\t\t}\n\t\t\n\t\t// clear empty table placeholder min\n\t\tthis.tableElement.style.minWidth = \"\";\n\t\tthis.tableElement.style.display = \"\";\n\t}\n\t\n\t_positionPlaceholder(){\n\t\tif(this.placeholder && this.placeholder.parentNode){\n\t\t\tthis.placeholder.style.width = this.table.columnManager.getWidth() + \"px\";\n\t\t\tthis.placeholderContents.style.width = this.table.rowManager.element.clientWidth + \"px\";\n\t\t\tthis.placeholderContents.style.marginLeft = this.scrollLeft + \"px\";\n\t\t}\n\t}\n\t\n\tstyleRow(row, index){\n\t\tvar rowEl = row.getElement();\n\t\t\n\t\tif(index % 2){\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\n\t\t}else {\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\n\t\t}\n\t}\n\t\n\t//normalize height of active rows\n\tnormalizeHeight(force){\n\t\tthis.activeRows.forEach(function(row){\n\t\t\trow.normalizeHeight(force);\n\t\t});\n\t}\n\t\n\t//adjust the height of the table holder to fit in the Tabulator element\n\tadjustTableSize(){\n\t\tlet initialHeight = this.element.clientHeight, minHeight;\n\t\tlet resized = false;\n\t\t\n\t\tif(this.renderer.verticalFillMode === \"fill\"){\n\t\t\tlet otherHeight = Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));\n\t\t\t\n\t\t\tif(this.fixedHeight){\n\t\t\t\tminHeight = isNaN(this.table.options.minHeight) ? this.table.options.minHeight : this.table.options.minHeight + \"px\";\n\t\t\t\t\n\t\t\t\tconst height = \"calc(100% - \" + otherHeight + \"px)\";\n\t\t\t\tthis.element.style.minHeight = minHeight || \"calc(100% - \" + otherHeight + \"px)\";\n\t\t\t\tthis.element.style.height = height;\n\t\t\t\tthis.element.style.maxHeight = height;\n\t\t\t} else {\n\t\t\t\tthis.element.style.height = \"\";\n\t\t\t\tthis.element.style.height =\n\t\t\t\tthis.table.element.clientHeight - otherHeight + \"px\";\n\t\t\t\tthis.element.scrollTop = this.scrollTop;\n\t\t\t}\n\t\t\t\n\t\t\tthis.renderer.resize();\n\t\t\t\n\t\t\t//check if the table has changed size when dealing with variable height tables\n\t\t\tif(!this.fixedHeight && initialHeight != this.element.clientHeight){\n\t\t\t\tresized = true;\n\t\t\t\tif(this.subscribed(\"table-resize\")){\n\t\t\t\t\tthis.dispatch(\"table-resize\");\n\t\t\t\t}else {\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.scrollBarCheck();\n\t\t}\n\t\t\n\t\tthis._positionPlaceholder();\n\t\treturn resized;\n\t}\n\t\n\t//reinitialize all rows\n\treinitialize(){\n\t\tthis.rows.forEach(function(row){\n\t\t\trow.reinitialize(true);\n\t\t});\n\t}\n\t\n\t//prevent table from being redrawn\n\tblockRedraw (){\n\t\tthis.redrawBlock = true;\n\t\tthis.redrawBlockRestoreConfig = false;\n\t}\n\t\n\t//restore table redrawing\n\trestoreRedraw (){\n\t\tthis.redrawBlock = false;\n\t\t\n\t\tif(this.redrawBlockRestoreConfig){\n\t\t\tthis.refreshActiveData(this.redrawBlockRestoreConfig.handler, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition);\n\t\t\t\n\t\t\tthis.redrawBlockRestoreConfig = false;\n\t\t}else {\n\t\t\tif(this.redrawBlockRenderInPosition){\n\t\t\t\tthis.reRenderInPosition();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.redrawBlockRenderInPosition = false;\n\t}\n\t\n\t//redraw table\n\tredraw (force){\n\t\tthis.adjustTableSize();\n\t\tthis.table.tableWidth = this.table.element.clientWidth;\n\t\t\n\t\tif(!force){\t\n\t\t\tthis.reRenderInPosition();\n\t\t\tthis.scrollHorizontal(this.scrollLeft);\n\t\t}else {\n\t\t\tthis.renderTable();\n\t\t}\n\t}\n\t\n\tresetScroll(){\n\t\tthis.element.scrollLeft = 0;\n\t\tthis.element.scrollTop = 0;\n\t\t\n\t\tif(this.table.browser === \"ie\"){\n\t\t\tvar event = document.createEvent(\"Event\");\n\t\t\tevent.initEvent(\"scroll\", false, true);\n\t\t\tthis.element.dispatchEvent(event);\n\t\t}else {\n\t\t\tthis.element.dispatchEvent(new Event('scroll'));\n\t\t}\n\t}\n}\n\nclass 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}\n\nclass InteractionManager extends CoreFeature {\n\t\n\tconstructor (table){\n\t\tsuper(table);\n\t\t\n\t\tthis.el = null;\n\t\t\n\t\tthis.abortClasses = [\"tabulator-headers\", \"tabulator-table\"];\n\t\t\n\t\tthis.previousTargets = {};\n\t\t\n\t\tthis.listeners = [\n\t\t\t\"click\",\n\t\t\t\"dblclick\",\n\t\t\t\"contextmenu\",\n\t\t\t\"mouseenter\",\n\t\t\t\"mouseleave\",\n\t\t\t\"mouseover\",\n\t\t\t\"mouseout\",\n\t\t\t\"mousemove\",\n\t\t\t\"mouseup\",\n\t\t\t\"mousedown\",\n\t\t\t\"touchstart\",\n\t\t\t\"touchend\",\n\t\t];\n\t\t\n\t\tthis.componentMap = {\n\t\t\t\"tabulator-cell\":\"cell\",\n\t\t\t\"tabulator-row\":\"row\",\n\t\t\t\"tabulator-group\":\"group\",\n\t\t\t\"tabulator-col\":\"column\",\n\t\t};\n\t\t\n\t\tthis.pseudoTrackers = {\n\t\t\t\"row\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t\t\"cell\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t\t\"group\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t\t\"column\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t};\n\t\t\n\t\tthis.pseudoTracking = false;\n\t}\n\t\n\tinitialize(){\n\t\tthis.el = this.table.element;\n\t\t\n\t\tthis.buildListenerMap();\n\t\tthis.bindSubscriptionWatchers();\n\t}\n\t\n\tbuildListenerMap(){\n\t\tvar listenerMap = {};\n\t\t\n\t\tthis.listeners.forEach((listener) => {\n\t\t\tlistenerMap[listener] = {\n\t\t\t\thandler:null,\n\t\t\t\tcomponents:[],\n\t\t\t};\n\t\t});\n\t\t\n\t\tthis.listeners = listenerMap;\n\t}\n\t\n\tbindPseudoEvents(){\n\t\tObject.keys(this.pseudoTrackers).forEach((key) => {\n\t\t\tthis.pseudoTrackers[key].subscriber = this.pseudoMouseEnter.bind(this, key);\n\t\t\tthis.subscribe(key + \"-mouseover\", this.pseudoTrackers[key].subscriber);\n\t\t});\n\t\t\n\t\tthis.pseudoTracking = true;\n\t}\n\t\n\tpseudoMouseEnter(key, e, target){\n\t\tif(this.pseudoTrackers[key].target !== target){\n\t\t\t\n\t\t\tif(this.pseudoTrackers[key].target){\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, this.pseudoTrackers[key].target);\n\t\t\t}\n\t\t\t\n\t\t\tthis.pseudoMouseLeave(key, e);\n\t\t\t\n\t\t\tthis.pseudoTrackers[key].target = target;\n\t\t\t\n\t\t\tthis.dispatch(key + \"-mouseenter\", e, target);\n\t\t}\n\t}\n\t\n\tpseudoMouseLeave(key, e){\n\t\tvar leaveList = Object.keys(this.pseudoTrackers),\n\t\tlinkedKeys = {\n\t\t\t\"row\":[\"cell\"],\n\t\t\t\"cell\":[\"row\"],\n\t\t};\n\t\t\n\t\tleaveList = leaveList.filter((item) => {\n\t\t\tvar links = linkedKeys[key];\n\t\t\treturn item !== key && (!links || (links && !links.includes(item)));\n\t\t});\n\t\t\n\t\t\n\t\tleaveList.forEach((key) => {\n\t\t\tvar target = this.pseudoTrackers[key].target;\n\t\t\t\n\t\t\tif(this.pseudoTrackers[key].target){\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, target);\n\t\t\t\t\n\t\t\t\tthis.pseudoTrackers[key].target = null;\n\t\t\t}\n\t\t});\n\t}\n\t\n\t\n\tbindSubscriptionWatchers(){\n\t\tvar listeners = Object.keys(this.listeners),\n\t\tcomponents = Object.values(this.componentMap);\n\t\t\n\t\tfor(let comp of components){\n\t\t\tfor(let listener of listeners){\n\t\t\t\tlet key = comp + \"-\" + listener;\n\t\t\t\t\n\t\t\t\tthis.subscriptionChange(key, this.subscriptionChanged.bind(this, comp, listener));\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.subscribe(\"table-destroy\", this.clearWatchers.bind(this));\n\t}\n\t\n\tsubscriptionChanged(component, key, added){\n\t\tvar listener = this.listeners[key].components,\n\t\tindex = listener.indexOf(component),\n\t\tchanged = false;\n\t\t\n\t\tif(added){\n\t\t\tif(index === -1){\n\t\t\t\tlistener.push(component);\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t}else {\n\t\t\tif(!this.subscribed(component + \"-\" + key)){\n\t\t\t\tif(index > -1){\n\t\t\t\t\tlistener.splice(index, 1);\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif((key === \"mouseenter\" || key === \"mouseleave\") && !this.pseudoTracking){\n\t\t\tthis.bindPseudoEvents();\n\t\t}\n\t\t\n\t\tif(changed){\n\t\t\tthis.updateEventListeners();\n\t\t}\n\t}\n\t\n\tupdateEventListeners(){\n\t\tfor(let key in this.listeners){\n\t\t\tlet listener = this.listeners[key];\n\t\t\t\n\t\t\tif(listener.components.length){\n\t\t\t\tif(!listener.handler){\n\t\t\t\t\tlistener.handler = this.track.bind(this, key);\n\t\t\t\t\tthis.el.addEventListener(key, listener.handler);\n\t\t\t\t\t// this.el.addEventListener(key, listener.handler, {passive: true})\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tif(listener.handler){\n\t\t\t\t\tthis.el.removeEventListener(key, listener.handler);\n\t\t\t\t\tlistener.handler = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\ttrack(type, e){\n\t\tvar path = (e.composedPath && e.composedPath()) || e.path;\n\t\t\n\t\tvar targets = this.findTargets(path);\n\t\ttargets = this.bindComponents(type, targets);\n\t\t\n\t\tthis.triggerEvents(type, e, targets);\n\t\t\n\t\tif(this.pseudoTracking && (type == \"mouseover\" || type == \"mouseleave\") && !Object.keys(targets).length){\n\t\t\tthis.pseudoMouseLeave(\"none\", e);\n\t\t}\n\t}\n\t\n\tfindTargets(path){\n\t\tvar targets = {};\n\t\t\n\t\tlet componentMap = Object.keys(this.componentMap);\n\t\t\n\t\tfor (let el of path) {\n\t\t\tlet classList = el.classList ? [...el.classList] : [];\n\t\t\t\n\t\t\tlet abort = classList.filter((item) => {\n\t\t\t\treturn this.abortClasses.includes(item);\n\t\t\t});\n\t\t\t\n\t\t\tif(abort.length){\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tlet elTargets = classList.filter((item) => {\n\t\t\t\treturn componentMap.includes(item);\n\t\t\t});\n\t\t\t\n\t\t\tfor (let target of elTargets) {\n\t\t\t\tif(!targets[this.componentMap[target]]){\n\t\t\t\t\ttargets[this.componentMap[target]] = el;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(targets.group && targets.group === targets.row){\n\t\t\tdelete targets.row;\n\t\t}\n\n\t\treturn targets;\n\t}\n\t\n\tbindComponents(type, targets){\n\t\t//ensure row component is looked up before cell\n\t\tvar keys = Object.keys(targets).reverse(),\n\t\tlistener = this.listeners[type],\n\t\tmatches = {},\n\t\toutput = {},\n\t\ttargetMatches = {};\n\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\n\t\t//reverse order keys are set in so events trigger in correct sequence\n\t\tObject.keys(targets).forEach((key) => {\n\t\t\tlet value = matches[key];\n\t\t\toutput[key] = value;\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\ttriggerEvents(type, e, targets){\n\t\tvar listener = this.listeners[type];\n\n\t\tfor(let key in targets){\n\t\t\tif(targets[key] && listener.components.includes(key)){\n\t\t\t\tthis.dispatch(key + \"-\" + type, e, targets[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tclearWatchers(){\n\t\tfor(let key in this.listeners){\n\t\t\tlet listener = this.listeners[key];\n\t\t\t\n\t\t\tif(listener.handler){\n\t\t\t\tthis.el.removeEventListener(key, listener.handler);\n\t\t\t\tlistener.handler = null;\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass 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\nclass DataLoader extends CoreFeature{\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.requestOrder = 0; //prevent requests coming out of sequence if overridden by another load request\n\t\tthis.loading = false;\n\t}\n\t\n\tinitialize(){}\n\t\n\tload(data, params, config, replace, silent, columnsChanged){\n\t\tvar requestNo = ++this.requestOrder;\n\n\t\tif(this.table.destroyed){\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\t\n\t\tthis.dispatchExternal(\"dataLoading\", data);\n\t\t\n\t\t//parse json data to array\n\t\tif (data && (data.indexOf(\"{\") == 0 || data.indexOf(\"[\") == 0)){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\tif(this.confirm(\"data-loading\", [data, params, config, silent])){\n\t\t\tthis.loading = true;\n\t\t\t\n\t\t\tif(!silent){\n\t\t\t\tthis.alertLoader();\n\t\t\t}\n\t\t\t\n\t\t\t//get params for request\n\t\t\tparams = this.chain(\"data-params\", [data, config, silent], params || {}, params || {});\n\t\t\t\n\t\t\tparams = this.mapParams(params, this.table.options.dataSendParams);\n\t\t\t\n\t\t\tvar result = this.chain(\"data-load\", [data, params, config, silent], false, Promise.resolve([]));\n\t\t\t\n\t\t\treturn result.then((response) => {\n\t\t\t\tif(!this.table.destroyed){\n\t\t\t\t\tif(!Array.isArray(response) && typeof response == \"object\"){\n\t\t\t\t\t\tresponse = this.mapParams(response, this.objectInvert(this.table.options.dataReceiveParams));\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar rowData = this.chain(\"data-loaded\", [response], null, response);\n\t\t\t\t\t\n\t\t\t\t\tif(requestNo == this.requestOrder){\n\t\t\t\t\t\tthis.clearAlert();\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(rowData !== false){\n\t\t\t\t\t\t\tthis.dispatchExternal(\"dataLoaded\", rowData);\n\t\t\t\t\t\t\tthis.table.rowManager.setData(rowData, replace, typeof columnsChanged === \"undefined\" ? !replace : columnsChanged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else {\n\t\t\t\t\t\tconsole.warn(\"Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made\");\n\t\t\t\t\t}\n\t\t\t\t}else {\n\t\t\t\t\tconsole.warn(\"Data Load Response Blocked - Table has been destroyed\");\n\t\t\t\t}\n\t\t\t}).catch((error) => {\n\t\t\t\tconsole.error(\"Data Load Error: \", error);\n\t\t\t\tthis.dispatchExternal(\"dataLoadError\", error);\n\t\t\t\t\n\t\t\t\tif(!silent){\n\t\t\t\t\tthis.alertError();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.clearAlert();\n\t\t\t\t}, this.table.options.dataLoaderErrorTimeout);\n\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t});\n\t\t}else {\n\t\t\tthis.dispatchExternal(\"dataLoaded\", data);\n\t\t\t\n\t\t\tif(!data){\n\t\t\t\tdata = [];\n\t\t\t}\n\t\t\t\n\t\t\tthis.table.rowManager.setData(data, replace, typeof columnsChanged === \"undefined\" ? !replace : columnsChanged);\n\t\t\treturn Promise.resolve();\n\t\t}\n\t}\n\t\n\tmapParams(params, map){\n\t\tvar output = {};\n\t\t\n\t\tfor(let key in params){\n\t\t\toutput[map.hasOwnProperty(key) ? map[key] : key] = params[key];\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tobjectInvert(obj){\n\t\tvar output = {};\n\t\t\n\t\tfor(let key in obj){\n\t\t\toutput[obj[key]] = key;\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tblockActiveLoad(){\n\t\tthis.requestOrder++;\n\t}\n\t\n\talertLoader(){\n\t\tvar shouldLoad = typeof this.table.options.dataLoader === \"function\" ? this.table.options.dataLoader() : this.table.options.dataLoader;\n\t\t\n\t\tif(shouldLoad){\n\t\t\tthis.table.alertManager.alert(this.table.options.dataLoaderLoading || this.langText(\"data|loading\"));\n\t\t}\n\t}\n\t\n\talertError(){\n\t\tthis.table.alertManager.alert(this.table.options.dataLoaderError || this.langText(\"data|error\"), \"error\");\n\t}\n\t\n\tclearAlert(){\n\t\tthis.table.alertManager.clear();\n\t}\n}\n\nclass 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}\n\nclass 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}\n\nclass DeprecationAdvisor extends CoreFeature{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t}\n\t\n\t_warnUser(){\n\t\tif(this.options(\"debugDeprecation\")){\n\t\t\tconsole.warn(...arguments);\n\t\t}\n\t}\n\t\n\tcheck(oldOption, newOption, convert){\n\t\tvar msg = \"\";\n\t\t\n\t\tif(typeof this.options(oldOption) !== \"undefined\"){\n\t\t\tmsg = \"Deprecated Setup Option - Use of the %c\" + oldOption + \"%c option is now deprecated\";\n\t\t\t\n\t\t\tif(newOption){\n\t\t\t\tmsg = msg + \", Please use the %c\" + newOption + \"%c option instead\";\n\t\t\t\tthis._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;');\n\n\t\t\t\tif(convert){\n\t\t\t\t\tthis.table.options[newOption] = this.table.options[oldOption];\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tthis._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;');\n\t\t\t}\n\t\t\t\n\t\t\treturn false;\n\t\t}else {\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\tcheckMsg(oldOption, msg){\n\t\tif(typeof this.options(oldOption) !== \"undefined\"){\n\t\t\tthis._warnUser(\"%cDeprecated Setup Option - Use of the %c\" + oldOption + \" %c option is now deprecated, \" + msg, 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;');\n\t\t\t\n\t\t\treturn false;\n\t\t}else {\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\tmsg(msg){\n\t\tthis._warnUser(msg);\n\t}\n}\n\nclass DependencyRegistry extends CoreFeature{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.deps = {};\r\n\t\t\r\n\t\tthis.props = {\r\n\t\t\t\r\n\t\t};\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.deps = Object.assign({}, this.options(\"dependencies\"));\r\n\t}\r\n\t\r\n\tlookup(key, prop, silent){\r\n\t\tif(Array.isArray(key)){\r\n\t\t\tfor (const item of key) {\r\n\t\t\t\tvar match = this.lookup(item, prop, true);\r\n\r\n\t\t\t\tif(match){\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(match){\r\n\t\t\t\treturn match;\r\n\t\t\t}else {\r\n\t\t\t\tthis.error(key);\r\n\t\t\t}\r\n\t\t}else {\r\n\t\t\tif(prop){\r\n\t\t\t\treturn this.lookupProp(key, prop, silent);\r\n\t\t\t}else {\r\n\t\t\t\treturn this.lookupKey(key, silent);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tlookupProp(key, prop, silent){\r\n\t\tvar dependency;\r\n\t\t\r\n\t\tif(this.props[key] && this.props[key][prop]){\r\n\t\t\treturn this.props[key][prop];\r\n\t\t}else {\r\n\t\t\tdependency = this.lookupKey(key, silent);\r\n\t\t\t\r\n\t\t\tif(dependency){\r\n\t\t\t\tif(!this.props[key]){\r\n\t\t\t\t\tthis.props[key] = {};\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.props[key][prop] = dependency[prop] || dependency;\r\n\t\t\t\treturn this.props[key][prop];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tlookupKey(key, silent){\r\n\t\tvar dependency;\r\n\t\t\r\n\t\tif(this.deps[key]){\r\n\t\t\tdependency = this.deps[key];\r\n\t\t}else if(window[key]){\r\n\t\t\tthis.deps[key] = window[key];\r\n\t\t\tdependency = this.deps[key];\r\n\t\t}else {\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.error(key);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn dependency;\r\n\t}\r\n\r\n\terror(key){\r\n\t\tconsole.error(\"Unable to find dependency\", key, \"Please check documentation and ensure you have imported the required library into your project\");\r\n\t}\r\n}\n\n//resize columns to fit data they contain\nfunction fitData(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}\n\n//resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable\nfunction fitDataGeneral(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}\n\n//resize columns to fit data the contain and stretch last column to fill table\nfunction fitDataStretch(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}\n\n//resize columns to fit\nfunction fitColumns(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\nvar defaultModes = {\n\tfitData:fitData,\n\tfitDataFill:fitDataGeneral,\n\tfitDataTable:fitDataGeneral,\n\tfitDataStretch:fitDataStretch,\n\tfitColumns:fitColumns ,\n};\n\nclass Layout extends Module{\n\n\tstatic moduleName = \"layout\";\n\n\t//load defaults\n\tstatic modes = defaultModes;\n\n\tconstructor(table){\n\t\tsuper(table, \"layout\");\n\n\t\tthis.mode = null;\n\n\t\tthis.registerTableOption(\"layout\", \"fitData\"); //layout type\n\t\tthis.registerTableOption(\"layoutColumnsOnNewData\", false); //update column widths on setData\n\n\t\tthis.registerColumnOption(\"widthGrow\");\n\t\tthis.registerColumnOption(\"widthShrink\");\n\t}\n\n\t//initialize layout system\n\tinitialize(){\n\t\tvar layout = this.table.options.layout;\n\n\t\tif(Layout.modes[layout]){\n\t\t\tthis.mode = layout;\n\t\t}else {\n\t\t\tconsole.warn(\"Layout Error - invalid mode set, defaulting to 'fitData' : \" + layout);\n\t\t\tthis.mode = 'fitData';\n\t\t}\n\n\t\tthis.table.element.setAttribute(\"tabulator-layout\", this.mode);\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\n\tinitializeColumn(column){\n\t\tif(column.definition.widthGrow){\n\t\t\tcolumn.definition.widthGrow = Number(column.definition.widthGrow);\n\t\t}\n\t\tif(column.definition.widthShrink){\n\t\t\tcolumn.definition.widthShrink = Number(column.definition.widthShrink);\n\t\t}\n\t}\n\n\tgetMode(){\n\t\treturn this.mode;\n\t}\n\n\t//trigger table layout\n\tlayout(dataChanged){\n\n\t\tvar variableHeight = this.table.columnManager.columnsByIndex.find((column) => column.definition.variableHeight || column.definition.formatter === \"textarea\");\n\t\t\n\t\tthis.dispatch(\"layout-refreshing\");\n\t\tLayout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex, dataChanged);\n\n\t\tif(variableHeight){\n\t\t\tthis.table.rowManager.normalizeHeight(true);\n\t\t}\n\n\t\tthis.dispatch(\"layout-refreshed\");\n\t}\n}\n\nvar defaultLangs = {\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};\n\nclass Localize extends Module{\n\n\tstatic moduleName = \"localize\";\n\n\t//load defaults\n\tstatic langs = defaultLangs;\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\nclass Comms extends Module{\n\n\tstatic moduleName = \"comms\";\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 = this.table.constructor.registry.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\nvar coreModules = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tCommsModule: Comms,\n\tLayoutModule: Layout,\n\tLocalizeModule: Localize\n});\n\nclass TableRegistry {\n\tstatic registry = {\n\t\ttables:[],\n\t\t\n\t\tregister(table){\n\t\t\tTableRegistry.registry.tables.push(table);\n\t\t},\n\t\t\n\t\tderegister(table){\n\t\t\tvar index = TableRegistry.registry.tables.indexOf(table);\n\t\t\t\n\t\t\tif(index > -1){\n\t\t\t\tTableRegistry.registry.tables.splice(index, 1);\n\t\t\t}\n\t\t},\n\t\t\n\t\tlookupTable(query, silent){\n\t\t\tvar results = [],\n\t\t\tmatches, match;\n\t\t\t\n\t\t\tif(typeof query === \"string\"){\n\t\t\t\tmatches = document.querySelectorAll(query);\n\t\t\t\t\n\t\t\t\tif(matches.length){\n\t\t\t\t\tfor(var i = 0; i < matches.length; i++){\n\t\t\t\t\t\tmatch = TableRegistry.registry.matchElement(matches[i]);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(match){\n\t\t\t\t\t\t\tresults.push(match);\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}else if((typeof HTMLElement !== \"undefined\" && query instanceof HTMLElement) || query instanceof TableRegistry){\n\t\t\t\tmatch = TableRegistry.registry.matchElement(query);\n\t\t\t\t\n\t\t\t\tif(match){\n\t\t\t\t\tresults.push(match);\n\t\t\t\t}\n\t\t\t}else if(Array.isArray(query)){\n\t\t\t\tquery.forEach(function(item){\n\t\t\t\t\tresults = results.concat(TableRegistry.registry.lookupTable(item));\n\t\t\t\t});\n\t\t\t}else {\n\t\t\t\tif(!silent){\n\t\t\t\t\tconsole.warn(\"Table Connection Error - Invalid Selector\", query);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn results;\n\t\t},\n\t\t\n\t\tmatchElement(element){\n\t\t\treturn TableRegistry.registry.tables.find(function(table){\n\t\t\t\treturn element instanceof TableRegistry ? table === element : table.element === element;\n\t\t\t});\n\t\t}\n\t};\n\n\t\t\n\tstatic findTable(query){\n\t\tvar results = TableRegistry.registry.lookupTable(query, true);\n\t\treturn Array.isArray(results) && !results.length ? false : results;\n\t}\n}\n\nclass ModuleBinder extends TableRegistry {\n\t\n\tstatic moduleBindings = {};\n\tstatic moduleExtensions = {};\n\tstatic modulesRegistered = false;\n\t\n\tstatic defaultModules = false;\n\t\n\tconstructor(){\n\t\tsuper();\n\t}\n\t\n\tstatic initializeModuleBinder(defaultModules){\n\t\tif(!ModuleBinder.modulesRegistered){\n\t\t\tModuleBinder.modulesRegistered = true;\n\t\t\tModuleBinder._registerModules(coreModules, true);\n\t\t\t\n\t\t\tif(defaultModules){\n\t\t\t\tModuleBinder._registerModules(defaultModules);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tstatic _extendModule(name, property, values){\n\t\tif(ModuleBinder.moduleBindings[name]){\n\t\t\tvar source = ModuleBinder.moduleBindings[name][property];\n\t\t\t\n\t\t\tif(source){\n\t\t\t\tif(typeof values == \"object\"){\n\t\t\t\t\tfor(let key in values){\n\t\t\t\t\t\tsource[key] = values[key];\n\t\t\t\t\t}\n\t\t\t\t}else {\n\t\t\t\t\tconsole.warn(\"Module Error - Invalid value type, it must be an object\");\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tconsole.warn(\"Module Error - property does not exist:\", property);\n\t\t\t}\n\t\t}else {\n\t\t\tconsole.warn(\"Module Error - module does not exist:\", name);\n\t\t}\n\t}\n\t\n\tstatic _registerModules(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\tModuleBinder._registerModule(mods);\n\t}\n\t\n\tstatic _registerModule(modules){\n\t\tif(!Array.isArray(modules)){\n\t\t\tmodules = [modules];\n\t\t}\n\t\t\n\t\tmodules.forEach((mod) => {\n\t\t\tModuleBinder._registerModuleBinding(mod);\n\t\t\tModuleBinder._registerModuleExtensions(mod);\n\t\t});\n\t}\n\t\n\tstatic _registerModuleBinding(mod){\n\t\tif(mod.moduleName){\n\t\t\tModuleBinder.moduleBindings[mod.moduleName] = mod;\n\t\t}else {\n\t\t\tconsole.error(\"Unable to bind module, no moduleName defined\", mod.moduleName);\n\t\t}\n\t}\n\t\n\tstatic _registerModuleExtensions(mod){\n\t\tvar extensions = mod.moduleExtensions;\n\t\t\n\t\tif(mod.moduleExtensions){\n\t\t\tfor (let modKey in extensions) {\n\t\t\t\tlet ext = extensions[modKey];\n\t\t\t\t\n\t\t\t\tif(ModuleBinder.moduleBindings[modKey]){\n\t\t\t\t\tfor (let propKey in ext) {\n\t\t\t\t\t\tModuleBinder._extendModule(modKey, propKey, ext[propKey]);\n\t\t\t\t\t}\n\t\t\t\t}else {\n\t\t\t\t\tif(!ModuleBinder.moduleExtensions[modKey]){\n\t\t\t\t\t\tModuleBinder.moduleExtensions[modKey] = {};\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tfor (let propKey in ext) {\n\t\t\t\t\t\tif(!ModuleBinder.moduleExtensions[modKey][propKey]){\n\t\t\t\t\t\t\tModuleBinder.moduleExtensions[modKey][propKey] = {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tObject.assign(ModuleBinder.moduleExtensions[modKey][propKey], ext[propKey]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tModuleBinder._extendModuleFromQueue(mod);\n\t}\n\t\n\tstatic _extendModuleFromQueue(mod){\n\t\tvar extensions = ModuleBinder.moduleExtensions[mod.moduleName];\n\t\t\n\t\tif(extensions){\n\t\t\tfor (let propKey in extensions) {\n\t\t\t\tModuleBinder._extendModule(mod.moduleName, propKey, extensions[propKey]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//ensure that module are bound to instantiated function\n\t_bindModules(){\n\t\tvar orderedStartMods = [],\n\t\torderedEndMods = [],\n\t\tunOrderedMods = [];\n\t\t\n\t\tthis.modules = {};\n\t\t\n\t\tfor(var name in ModuleBinder.moduleBindings){\n\t\t\tlet mod = ModuleBinder.moduleBindings[name];\n\t\t\tlet module = new mod(this);\n\t\t\t\n\t\t\tthis.modules[name] = module;\n\t\t\t\n\t\t\tif(mod.prototype.moduleCore){\n\t\t\t\tthis.modulesCore.push(module);\n\t\t\t}else {\n\t\t\t\tif(mod.moduleInitOrder){\n\t\t\t\t\tif(mod.moduleInitOrder < 0){\n\t\t\t\t\t\torderedStartMods.push(module);\n\t\t\t\t\t}else {\n\t\t\t\t\t\torderedEndMods.push(module);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}else {\n\t\t\t\t\tunOrderedMods.push(module);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\torderedStartMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1);\n\t\torderedEndMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1);\n\t\t\n\t\tthis.modulesRegular = orderedStartMods.concat(unOrderedMods.concat(orderedEndMods));\n\t}\n}\n\nclass Alert extends CoreFeature{\n\tconstructor(table){\n\t\tsuper(table);\n \n\t\tthis.element = this._createAlertElement();\n\t\tthis.msgElement = this._createMsgElement();\n\t\tthis.type = null;\n \n\t\tthis.element.appendChild(this.msgElement);\n\t}\n \n\t_createAlertElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-alert\");\n\t\treturn el;\n\t}\n \n\t_createMsgElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-alert-msg\");\n\t\tel.setAttribute(\"role\", \"alert\");\n\t\treturn el;\n\t}\n \n\t_typeClass(){\n\t\treturn \"tabulator-alert-state-\" + this.type;\n\t}\n \n\talert(content, type = \"msg\"){\n\t\tif(content){\n\t\t\tthis.clear();\n\n\t\t\tthis.dispatch(\"alert-show\", type);\n \n\t\t\tthis.type = type;\n \n\t\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\n \n\t\t\tthis.msgElement.classList.add(this._typeClass());\n \n\t\t\tif(typeof content === \"function\"){\n\t\t\t\tcontent = content();\n\t\t\t}\n \n\t\t\tif(content instanceof HTMLElement){\n\t\t\t\tthis.msgElement.appendChild(content);\n\t\t\t}else {\n\t\t\t\tthis.msgElement.innerHTML = content;\n\t\t\t}\n \n\t\t\tthis.table.element.appendChild(this.element);\n\t\t}\n\t}\n \n\tclear(){\n\t\tthis.dispatch(\"alert-hide\", this.type);\n\n\t\tif(this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n \n\t\tthis.msgElement.classList.remove(this._typeClass());\n\t}\n}\n\nclass Tabulator extends ModuleBinder{\n\n\t//default setup options\n\tstatic defaultOptions = defaultOptions;\n\n\tstatic extendModule(){\n\t\tTabulator.initializeModuleBinder();\n\t\tTabulator._extendModule(...arguments);\n\t}\n\n\tstatic registerModule(){\n\t\tTabulator.initializeModuleBinder();\n\t\tTabulator._registerModule(...arguments);\n\t}\n\n\tconstructor(element, options, modules){\n\t\tsuper();\n\n\t\tTabulator.initializeModuleBinder(modules);\n\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\n\t\tthis.dependencyRegistry = new DependencyRegistry(this);\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\tthis.constructor.registry.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 InteractionManager(this);\n\t\t\n\t\tthis.dataLoader.initialize();\n\t\tthis.footerManager.initialize();\n\n\t\tthis.dependencyRegistry.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 6.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\n\t\tthis.initialized = true;\n\t\t\n\t\tthis._loadInitialData()\n\t\t\t.finally(() => {\n\t\t\t\tthis.eventBus.dispatch(\"table-initialized\");\n\t\t\t\tthis.externalEvents.dispatch(\"tableBuilt\");\n\t\t\t});\t\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\treturn this.dataLoader.load(this.options.data)\n\t\t\t.finally(() => {\n\t\t\t\tthis.columnManager.verticalAlignHeaders();\n\t\t\t});\t\t\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\tthis.constructor.registry.deregister(this); //deregister table from inter-device communication\n\t\t\n\t\tthis.eventBus.dispatch(\"table-destroy\");\n\t\t\n\t\t//clear row data\n\t\tthis.rowManager.destroy();\n\t\t\n\t\t//clear DOM\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\telement.classList.remove(\"tabulator\");\n\n\t\tthis.externalEvents.dispatch(\"tableDestroyed\");\n\t}\n\t\n\t_detectBrowser(){\n\t\tvar ua = navigator.userAgent||navigator.vendor||window.opera;\n\t\t\n\t\tif(ua.indexOf(\"Trident\") > -1){\n\t\t\tthis.browser = \"ie\";\n\t\t\tthis.browserSlow = true;\n\t\t}else if(ua.indexOf(\"Edge\") > -1){\n\t\t\tthis.browser = \"edge\";\n\t\t\tthis.browserSlow = true;\n\t\t}else if(ua.indexOf(\"Firefox\") > -1){\n\t\t\tthis.browser = \"firefox\";\n\t\t\tthis.browserSlow = false;\n\t\t}else if(ua.indexOf(\"Mac OS\") > -1){\n\t\t\tthis.browser = \"safari\";\n\t\t\tthis.browserSlow = false;\n\t\t}else {\n\t\t\tthis.browser = \"other\";\n\t\t\tthis.browserSlow = false;\n\t\t}\n\t\t\n\t\tthis.browserMobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(ua.slice(0,4));\n\t}\n\t\n\tinitGuard(func, msg){\n\t\tvar stack, line;\n\t\t\n\t\tif(this.options.debugInitialization && !this.initialized){\n\t\t\tif(!func){\n\t\t\t\tstack = new Error().stack.split(\"\\n\");\n\t\t\t\t\n\t\t\t\tline = stack[0] == \"Error\" ? stack[2] : stack[1];\n\t\t\t\t\n\t\t\t\tif(line[0] == \" \"){\n\t\t\t\t\tfunc = line.trim().split(\" \")[1].split(\".\")[1];\n\t\t\t\t}else {\n\t\t\t\t\tfunc = line.trim().split(\"@\")[0];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tconsole.warn(\"Table Not Initialized - Calling the \" + func + \" function before the table is initialized may result in inconsistent behavior, Please wait for the `tableBuilt` event before calling this function.\" + (msg ? \" \" + msg : \"\"));\n\t\t}\n\t\t\n\t\treturn this.initialized;\n\t}\n\t\n\t////////////////// Data Handling //////////////////\n\t//block table redrawing\n\tblockRedraw(){\n\t\tthis.initGuard();\n\n\t\tthis.eventBus.dispatch(\"redraw-blocking\");\n\t\t\n\t\tthis.rowManager.blockRedraw();\n\t\tthis.columnManager.blockRedraw();\n\n\t\tthis.eventBus.dispatch(\"redraw-blocked\");\n\t}\n\t\n\t//restore table redrawing\n\trestoreRedraw(){\n\t\tthis.initGuard();\n\n\t\tthis.eventBus.dispatch(\"redraw-restoring\");\n\n\t\tthis.rowManager.restoreRedraw();\n\t\tthis.columnManager.restoreRedraw();\n\n\t\tthis.eventBus.dispatch(\"redraw-restored\");\n\t}\n\t\n\t//load data\n\tsetData(data, params, config){\n\t\tthis.initGuard(false, \"To set initial data please use the 'data' property in the table constructor.\");\n\t\t\n\t\treturn this.dataLoader.load(data, params, config, false);\n\t}\n\t\n\t//clear data\n\tclearData(){\n\t\tthis.initGuard();\n\t\t\n\t\tthis.dataLoader.blockActiveLoad();\n\t\tthis.rowManager.clearData();\n\t}\n\t\n\t//get table data array\n\tgetData(active){\n\t\treturn this.rowManager.getData(active);\n\t}\n\t\n\t//get table data array count\n\tgetDataCount(active){\n\t\treturn this.rowManager.getDataCount(active);\n\t}\n\t\n\t//replace data, keeping table in position with same sort\n\treplaceData(data, params, config){\n\t\tthis.initGuard();\n\t\t\n\t\treturn this.dataLoader.load(data, params, config, true, true);\n\t}\n\t\n\t//update table data\n\tupdateData(data){\n\t\tvar responses = 0;\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.dataLoader.blockActiveLoad();\n\t\t\t\n\t\t\tif(typeof data === \"string\"){\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\t\t\t\n\t\t\tif(data && data.length > 0){\n\t\t\t\tdata.forEach((item) => {\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\n\t\t\t\t\t\n\t\t\t\t\tif(row){\n\t\t\t\t\t\tresponses++;\n\t\t\t\t\t\t\n\t\t\t\t\t\trow.updateData(item)\n\t\t\t\t\t\t\t.then(()=>{\n\t\t\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(!responses){\n\t\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.catch((e) => {\n\t\t\t\t\t\t\t\treject(\"Update Error - Unable to update row\", item, e);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}else {\n\t\t\t\t\t\treject(\"Update Error - Unable to find row\", item);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}else {\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\taddData(data, pos, index){\n\t\tthis.initGuard();\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.dataLoader.blockActiveLoad();\n\t\t\t\n\t\t\tif(typeof data === \"string\"){\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\t\t\t\n\t\t\tif(data){\n\t\t\t\tthis.rowManager.addRows(data, pos, index)\n\t\t\t\t\t.then((rows) => {\n\t\t\t\t\t\tvar output = [];\n\t\t\t\t\t\n\t\t\t\t\t\trows.forEach(function(row){\n\t\t\t\t\t\t\toutput.push(row.getComponent());\n\t\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\t\tresolve(output);\n\t\t\t\t\t});\n\t\t\t}else {\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//update table data\n\tupdateOrAddData(data){\n\t\tvar rows = [],\n\t\tresponses = 0;\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.dataLoader.blockActiveLoad();\n\t\t\t\n\t\t\tif(typeof data === \"string\"){\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\t\t\t\n\t\t\tif(data && data.length > 0){\n\t\t\t\tdata.forEach((item) => {\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\n\t\t\t\t\t\n\t\t\t\t\tresponses++;\n\t\t\t\t\t\n\t\t\t\t\tif(row){\n\t\t\t\t\t\trow.updateData(item)\n\t\t\t\t\t\t\t.then(()=>{\n\t\t\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\t\t\trows.push(row.getComponent());\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(!responses){\n\t\t\t\t\t\t\t\t\tresolve(rows);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}else {\n\t\t\t\t\t\tthis.rowManager.addRows(item)\n\t\t\t\t\t\t\t.then((newRows)=>{\n\t\t\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\t\t\trows.push(newRows[0].getComponent());\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(!responses){\n\t\t\t\t\t\t\t\t\tresolve(rows);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}else {\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//get row object\n\tgetRow(index){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tif(row){\n\t\t\treturn row.getComponent();\n\t\t}else {\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", index);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\t//get row object\n\tgetRowFromPosition(position){\n\t\tvar row = this.rowManager.getRowFromPosition(position);\n\t\t\n\t\tif(row){\n\t\t\treturn row.getComponent();\n\t\t}else {\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", position);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\t//delete row from table\n\tdeleteRow(index){\n\t\tvar foundRows = [];\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(!Array.isArray(index)){\n\t\t\tindex = [index];\n\t\t}\n\t\t\n\t\t//find matching rows\n\t\tfor(let item of index){\n\t\t\tlet row = this.rowManager.findRow(item, true);\n\t\t\t\n\t\t\tif(row){\n\t\t\t\tfoundRows.push(row);\n\t\t\t}else {\n\t\t\t\tconsole.error(\"Delete Error - No matching row found:\", item);\n\t\t\t\treturn Promise.reject(\"Delete Error - No matching row found\");\n\t\t\t}\n\t\t}\n\t\t\n\t\t//sort rows into correct order to ensure smooth delete from table\n\t\tfoundRows.sort((a, b) => {\n\t\t\treturn this.rowManager.rows.indexOf(a) > this.rowManager.rows.indexOf(b) ? 1 : -1;\n\t\t});\n\t\t\n\t\t//delete rows\n\t\tfoundRows.forEach((row) =>{\n\t\t\trow.delete();\n\t\t});\n\t\t\n\t\tthis.rowManager.reRenderInPosition();\n\t\t\n\t\treturn Promise.resolve();\n\t}\n\t\n\t//add row to table\n\taddRow(data, pos, index){\n\t\tthis.initGuard();\n\t\t\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\treturn this.rowManager.addRows(data, pos, index, true)\n\t\t\t.then((rows)=>{\n\t\t\t\treturn rows[0].getComponent();\n\t\t\t});\n\t}\n\t\n\t//update a row if it exists otherwise create it\n\tupdateOrAddRow(index, data){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\tif(row){\n\t\t\treturn row.updateData(data)\n\t\t\t\t.then(()=>{\n\t\t\t\t\treturn row.getComponent();\n\t\t\t\t});\n\t\t}else {\n\t\t\treturn this.rowManager.addRows(data)\n\t\t\t\t.then((rows)=>{\n\t\t\t\t\treturn rows[0].getComponent();\n\t\t\t\t});\n\t\t}\n\t}\n\t\n\t//update row data\n\tupdateRow(index, data){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\tif(row){\n\t\t\treturn row.updateData(data)\n\t\t\t\t.then(()=>{\n\t\t\t\t\treturn Promise.resolve(row.getComponent());\n\t\t\t\t});\n\t\t}else {\n\t\t\tconsole.warn(\"Update Error - No matching row found:\", index);\n\t\t\treturn Promise.reject(\"Update Error - No matching row found\");\n\t\t}\n\t}\n\t\n\t//scroll to row in DOM\n\tscrollToRow(index, position, ifVisible){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tif(row){\n\t\t\treturn this.rowManager.scrollToRow(row, position, ifVisible);\n\t\t}else {\n\t\t\tconsole.warn(\"Scroll Error - No matching row found:\", index);\n\t\t\treturn Promise.reject(\"Scroll Error - No matching row found\");\n\t\t}\n\t}\n\t\n\tmoveRow(from, to, after){\n\t\tvar fromRow = this.rowManager.findRow(from);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(fromRow){\n\t\t\tfromRow.moveToRow(to, after);\n\t\t}else {\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", from);\n\t\t}\n\t}\n\t\n\tgetRows(active){\n\t\treturn this.rowManager.getComponents(active);\t\n\t}\n\t\n\t//get position of row in table\n\tgetRowPosition(index){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tif(row){\n\t\t\treturn row.getPosition();\n\t\t}else {\n\t\t\tconsole.warn(\"Position Error - No matching row found:\", index);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\t/////////////// Column Functions ///////////////\n\tsetColumns(definition){\n\t\tthis.initGuard(false, \"To set initial columns please use the 'columns' property in the table constructor\");\n\t\t\n\t\tthis.columnManager.setColumns(definition);\n\t}\n\t\n\tgetColumns(structured){\n\t\treturn this.columnManager.getComponents(structured);\n\t}\n\t\n\tgetColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tif(column){\n\t\t\treturn column.getComponent();\n\t\t}else {\n\t\t\tconsole.warn(\"Find Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tgetColumnDefinitions(){\n\t\treturn this.columnManager.getDefinitionTree();\n\t}\n\t\n\tshowColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\tcolumn.show();\n\t\t}else {\n\t\t\tconsole.warn(\"Column Show Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\thideColumn(field){\n\t\tvar column = this.columnManager.findColumn(field); \n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\tcolumn.hide();\n\t\t}else {\n\t\t\tconsole.warn(\"Column Hide Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\ttoggleColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\tif(column.visible){\n\t\t\t\tcolumn.hide();\n\t\t\t}else {\n\t\t\t\tcolumn.show();\n\t\t\t}\n\t\t}else {\n\t\t\tconsole.warn(\"Column Visibility Toggle Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\taddColumn(definition, before, field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\treturn this.columnManager.addColumn(definition, before, column)\n\t\t\t.then((column) => {\n\t\t\t\treturn column.getComponent();\n\t\t\t});\n\t}\n\t\n\tdeleteColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\treturn column.delete();\n\t\t}else {\n\t\t\tconsole.warn(\"Column Delete Error - No matching column found:\", field);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tupdateColumnDefinition(field, definition){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\treturn column.updateDefinition(definition);\n\t\t}else {\n\t\t\tconsole.warn(\"Column Update Error - No matching column found:\", field);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tmoveColumn(from, to, after){\n\t\tvar fromColumn = this.columnManager.findColumn(from),\n\t\ttoColumn = this.columnManager.findColumn(to);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(fromColumn){\n\t\t\tif(toColumn){\n\t\t\t\tthis.columnManager.moveColumn(fromColumn, toColumn, after);\n\t\t\t}else {\n\t\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\n\t\t\t}\n\t\t}else {\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", from);\n\t\t}\n\t}\n\t\n\t//scroll to column in DOM\n\tscrollToColumn(field, position, ifVisible){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tvar column = this.columnManager.findColumn(field);\n\t\t\t\n\t\t\tif(column){\n\t\t\t\treturn this.columnManager.scrollToColumn(column, position, ifVisible);\n\t\t\t}else {\n\t\t\t\tconsole.warn(\"Scroll Error - No matching column found:\", field);\n\t\t\t\treturn Promise.reject(\"Scroll Error - No matching column found\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//////////// General Public Functions ////////////\n\t//redraw list without updating data\n\tredraw(force){\n\t\tthis.initGuard();\n\n\t\tthis.columnManager.redraw(force);\n\t\tthis.rowManager.redraw(force);\n\t}\n\t\n\tsetHeight(height){\n\t\tthis.options.height = isNaN(height) ? height : height + \"px\";\n\t\tthis.element.style.height = this.options.height;\n\t\tthis.rowManager.initializeRenderer();\n\t\tthis.rowManager.redraw(true);\n\t}\n\t\n\t//////////////////// Event Bus ///////////////////\n\t\n\ton(key, callback){\n\t\tthis.externalEvents.subscribe(key, callback);\n\t}\n\t\n\toff(key, callback){\n\t\tthis.externalEvents.unsubscribe(key, callback);\n\t}\n\t\n\tdispatchEvent(){\n\t\tvar args = Array.from(arguments);\n\t\targs.shift();\n\t\t\n\t\tthis.externalEvents.dispatch(...arguments);\n\t}\n\n\t//////////////////// Alerts ///////////////////\n\n\talert(contents, type){\n\t\tthis.initGuard();\n\n\t\tthis.alertManager.alert(contents, type);\n\t}\n\n\tclearAlert(){\n\t\tthis.initGuard();\n\n\t\tthis.alertManager.clear();\n\t}\n\t\n\t////////////// Extension Management //////////////\n\tmodExists(plugin, required){\n\t\tif(this.modules[plugin]){\n\t\t\treturn true;\n\t\t}else {\n\t\t\tif(required){\n\t\t\t\tconsole.error(\"Tabulator Module Not Installed: \" + plugin);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tmodule(key){\n\t\tvar mod = this.modules[key];\n\t\t\n\t\tif(!mod){\n\t\t\tconsole.error(\"Tabulator module not installed: \" + key);\n\t\t}\n\t\t\n\t\treturn mod;\n\t}\n}\n\nvar Tabulator$1 = Tabulator;\n\n//tabulator with all modules installed\n\nclass TabulatorFull extends Tabulator$1 {\n\tstatic extendModule(){\n\t\tTabulator$1.initializeModuleBinder(allModules);\n\t\tTabulator$1._extendModule(...arguments);\n\t}\n\n\tstatic registerModule(){\n\t\tTabulator$1.initializeModuleBinder(allModules);\n\t\tTabulator$1._registerModule(...arguments);\n\t}\n\n\tconstructor(element, options, modules){\n\t\tsuper(element, options, allModules);\n\t}\n}\n\nvar TabulatorFull$1 = TabulatorFull;\n\nclass PseudoRow {\n\n\tconstructor (type){\n\t\tthis.type = type;\n\t\tthis.element = this._createElement();\n\t}\n\n\t_createElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-row\");\n\t\treturn el;\n\t}\n\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\n\tgetComponent(){\n\t\treturn false;\n\t}\n\n\tgetData(){\n\t\treturn {};\n\t}\n\n\tgetHeight(){\n\t\treturn this.element.outerHeight;\n\t}\n\n\tinitialize(){}\n\n\treinitialize(){}\n\n\tnormalizeHeight(){}\n\n\tgenerateCells(){}\n\n\treinitializeHeight(){}\n\n\tcalcHeight(){}\n\n\tsetCellHeight(){}\n\n\tclearCellHeight(){}\n\n\trendered(){}\n}\n\nexport { Accessor as AccessorModule, Ajax as AjaxModule, CalcComponent, CellComponent, Clipboard as ClipboardModule, ColumnCalcs as ColumnCalcsModule, ColumnComponent, DataTree as DataTreeModule, Download as DownloadModule, Edit as EditModule, Export as ExportModule, Filter as FilterModule, Format as FormatModule, FrozenColumns as FrozenColumnsModule, FrozenRows as FrozenRowsModule, GroupComponent, GroupRows as GroupRowsModule, History as HistoryModule, HtmlTableImport as HtmlTableImportModule, Import as ImportModule, Interaction as InteractionModule, Keybindings as KeybindingsModule, Menu as MenuModule, Module, MoveColumns as MoveColumnsModule, MoveRows as MoveRowsModule, Mutator as MutatorModule, Page as PageModule, Persistence as PersistenceModule, Popup as PopupModule, Print as PrintModule, PseudoRow, RangeComponent, ReactiveData as ReactiveDataModule, Renderer, ResizeColumns as ResizeColumnsModule, ResizeRows as ResizeRowsModule, ResizeTable as ResizeTableModule, ResponsiveLayout as ResponsiveLayoutModule, RowComponent, SelectRange as SelectRangeModule, SelectRow as SelectRowModule, SheetComponent, Sort as SortModule, Spreadsheet as SpreadsheetModule, Tabulator$1 as Tabulator, TabulatorFull$1 as TabulatorFull, Tooltip as TooltipModule, Validate as ValidateModule };\n//# sourceMappingURL=tabulator_esm.mjs.map\n","import {COLUMN_NAMES, CURATION_STATUS} from \"@ose/js-core\";\nimport {ColumnComponent, ColumnDefinition, MenuObject, RowComponent, Tabulator} from \"tabulator-tables\";\n\n\nexport function setRowColor(row: RowComponent, data: Record<string, string | null | undefined>, navigateToRow: number = -1) {\n const curation_status = data[COLUMN_NAMES.CURATION_STATUS]?.toLowerCase()?.trim() ?? null\n\n if (curation_status !== null) {\n for (let status of Object.values(CURATION_STATUS)) {\n if (curation_status === status.toLowerCase()) {\n // Remove all other curation status css classes\n for (const c of row.getElement().classList) {\n if (c.startsWith(`ose-curation-status-`)) {\n row.getElement().classList.remove(c);\n }\n }\n // Add curation status css class\n row.getElement().classList.add(`ose-curation-status-${status.toLowerCase().replace(/[^a-z]/g, '_')}`)\n }\n }\n }\n\n if (navigateToRow === row.getIndex()) {\n row.getElement().style.boxShadow = \"inset 0 0 10px 5px #ffcb00\"\n }\n}\n\n\nconst headerMenuFactory = (table: () => Tabulator): MenuObject<ColumnComponent>[] => [\n {\n label: \"Hide Column\",\n action(_, column: ColumnComponent) {\n column.hide();\n }\n },\n {\n label: \"Show Hidden\",\n action() {\n const allColumns = table().getColumns();\n for (const column of allColumns) {\n column.show()\n }\n }\n },\n {\n label: \"Reset All Column Widths\",\n action() {\n const allColumns = table().getColumns();\n for (const column of allColumns) { //don't re-size checkbox column (column 0)\n //\"E-CigO\" and \"Fuzzy set\" are a different size\n if (column.getField() == \"E-CigO\" || column.getField() == \"Fuzzy set\") {\n column.setWidth(140);\n } else {\n column.setWidth(200);\n }\n }\n }\n },\n]\n\n\nexport function columnDefFor(fieldName: string, suggestionsRef: string[], table: () => Tabulator): ColumnDefinition {\n const headerMenu = headerMenuFactory(table);\n if (fieldName == COLUMN_NAMES.CURATION_STATUS) {\n return ({\n title: fieldName,\n field: fieldName,\n sorter: \"string\",\n editor: \"list\",\n editorParams: {values: [\"Pre-proposed\", \"Proposed\", \"To Be Discussed\", \"In Discussion\", \"Discussed\", \"Published\", \"Obsolete\", \"External\"]},\n headerFilter: \"input\",\n width: \"200\",\n formatter: \"textarea\",\n headerMenu\n });\n } else if (fieldName == \"E-CigO\") {\n return ({\n title: fieldName,\n field: fieldName,\n sorter: \"boolean\",\n hozAlign: \"center\",\n editor: true,\n formatter: \"tickCross\",\n headerFilter: true,\n width: \"140\",\n headerMenu\n });\n } else if (fieldName == \"Fuzzy set\") {\n return ({\n title: fieldName,\n field: fieldName,\n sorter: \"boolean\",\n hozAlign: \"center\",\n editor: true,\n formatter: \"tickCross\",\n headerFilter: true,\n width: \"140\",\n headerMenu\n });\n } else if (fieldName == \"To be reviewed by\") {\n return ({\n title: fieldName,\n field: fieldName,\n sorter: \"string\",\n editor: \"textarea\",\n headerFilter: \"input\",\n width: \"200\",\n formatter: \"textarea\",\n headerMenu\n });\n } else if (fieldName == \"Parent\") {\n // return({ title: fieldName, field: fieldName, sorter: \"string\", editor: \"autocomplete\", editorParams: { values: TODO_suggestValuesArray, freetext: true, allowEmpty: true }, editable: true, headerFilter: \"input\", width: \"200\", formatter: \"textarea\", headerMenu: HEADER_MENU });\n return ({\n title: fieldName,\n field: fieldName,\n sorter: \"string\",\n editor: \"list\",\n editorParams: {\n values: suggestionsRef,\n autocomplete: true,\n freetext: true,\n allowEmpty: true,\n elementAttributes: {formatter: \"textarea\"},\n },\n headerFilter: \"input\",\n width: \"200\",\n formatter: \"textarea\",\n headerMenu\n });\n } else if (fieldName.includes(\"REL\") || fieldName === \"Domain\" || fieldName === \"Range\") {\n return ({\n title: fieldName,\n field: fieldName,\n sorter: \"string\",\n editor: \"list\",\n editorParams: {\n values: suggestionsRef,\n autocomplete: true,\n freetext: true,\n allowEmpty: true,\n // elementAttributes: {formatter: \"textarea\"},\n },\n headerFilter: \"input\",\n width: \"200\",\n formatter: \"textarea\",\n headerMenu\n });\n } else {\n return ({\n title: fieldName,\n field: fieldName,\n sorter: \"string\",\n editor: \"textarea\",\n headerFilter: \"input\",\n width: \"200\",\n formatter: \"textarea\",\n headerMenu\n });\n }\n}\n","<script setup lang=\"ts\">\nimport {MergeConflict} from \"@ose/js-core\";\nimport {computed, onMounted, ref, watch, watchEffect} from \"vue\";\n\nonMounted(() => {\n document.body.style.removeProperty(\"overflow\")\n})\n\nconst props = defineProps<{\n conflicts: MergeConflict[],\n}>()\n\nconst merged_data = defineModel<Record<string, string | number | boolean | null>[]>();\n\nconst emits = defineEmits<{\n (e: 'save', strategy: \"manual\" | \"theirs\" | \"ours\"): void,\n}>()\n\nconst conflicts_by_row = computed(() => {\n const result: Record<number, MergeConflict[]> = {}\n for (const conflict of props.conflicts) {\n if (!result[conflict.row]) {\n result[conflict.row] = []\n }\n result[conflict.row].push(conflict)\n }\n return result\n})\n\nconst resolved = ref<{ [k: number]: { [k: string]: string | number | boolean | null } }>({})\n\nwatchEffect(() => {\n resolved.value = Object\n .entries(conflicts_by_row.value)\n .reduce((acc, [r, v]) => ({...acc, [r]: v.reduce((prev, cur) => ({...prev, [cur.col]: null}), {})}), {})\n})\n\nconst allResolved = computed(() => Object.values(resolved.value).every(v => Object.values(v).every(v => v !== null)))\n\nwatch(resolved, () => {\n for (const row in resolved.value) {\n for (const col in resolved.value[row]) {\n if (resolved.value[row][col] === null) {\n return\n } else {\n merged_data.value[row][col] = resolved.value[row][col]\n }\n }\n }\n}, {deep: true})\n\nfunction save() {\n emits('save', 'manual')\n}\n\nfunction saveTheirs() {\n for (const conflict of props.conflicts) {\n merged_data.value[conflict.row][conflict.col] = conflict.their_value\n }\n emits('save', 'theirs')\n}\n\nfunction saveOurs() {\n for (const conflict of props.conflicts) {\n merged_data.value[conflict.row][conflict.col] = conflict.our_value\n }\n emits('save', 'ours')\n}\n\n\nfunction highlight(row: number, col: string, selfValue: string): string[] {\n const val = resolved.value?.[row]?.[col];\n\n if (val === null) {\n return []\n } else if (val === selfValue) {\n return [\"text-success\"]\n } else {\n return [\"text-danger\"]\n }\n}\n\n</script>\n\n<template>\n <div class=\"container\">\n\n <div class=\"callout callout-info\">\n <h5>Resolving merge conflicts</h5>\n <p>\n While your worked on the file, other users have also made changes to it. Their and your changes conflict.\n The conflicts are shown below.\n </p>\n <p>\n For each conflict, you can choose to use your value, the value from the previous\n version, the value from the other user, or provide a new value. Click the checkmark symbol next to one of the\n values to accept this version. When you resolved all conflicts, click the \"Save and complete merge\" button.\n </p>\n <p>\n Alternatively, you can choose to overwrite their changes with yours, or to discard your changes and accept\n theirs.\n </p>\n </div>\n\n\n <div class=\"buttons\">\n <button class=\"btn btn-success\" :disabled=\"!allResolved\" @click=\"save()\"><i class=\"fa fa-save\"></i>Save and\n complete merge\n </button>\n <button class=\"btn btn-danger\" @click=\"saveTheirs()\"><i class=\"fa fa-globe\"></i>Loose your changes and use their\n version\n </button>\n <button class=\"btn btn-danger\" @click=\"saveOurs()\"><i class=\"fa fa-user\"></i>Overwrite their change with yours\n </button>\n </div>\n\n <div v-for=\"row in Object.keys(conflicts_by_row)\" class=\"card bg-danger-subtle\">\n <div class=\"card-body\">\n <h5 class=\"card-title\">{{ merged_data[row][\"Label\"] }} [{{ merged_data[row][\"ID\"] }}]</h5>\n <h6 class=\"card-subtitle mb-3\">Row {{ row }}</h6>\n <table class=\"table\">\n <thead>\n <tr>\n <th scope=\"col\">Column</th>\n <th scope=\"col\">Your value</th>\n <th scope=\"col\">Previous value</th>\n <th scope=\"col\">Their value</th>\n <th scope=\"col\">Final value</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"conflict in conflicts_by_row[row]\">\n <th scope=\"row\">{{ conflict.col }}</th>\n <td :class=\"highlight(row, conflict.col, conflict.our_value)\">\n <p>\n <template v-for=\"line in conflict.our_value.split('\\n')\">\n {{ line }}\n <br>\n </template>\n </p>\n <button title=\"Use my value\" class=\"btn btn-success\"\n @click=\"resolved[row][conflict.col] = conflict.our_value\">\n <i class=\"fa fa-check\"></i>\n </button>\n </td>\n <td :class=\"highlight(row, conflict.col, conflict.base_value)\">\n <p>\n <template v-for=\"line in conflict.base_value.split('\\n')\">\n {{ line }}\n <br>\n </template>\n </p>\n <button title=\"Don't change the value\" class=\"btn btn-success\"\n @click=\"resolved[row][conflict.col] = conflict.base_value\">\n <i class=\"fa fa-check\"></i>\n </button>\n </td>\n <td :class=\"highlight(row, conflict.col, conflict.their_value)\">\n <p>\n <template v-for=\"line in conflict.their_value.split('\\n')\">\n {{ line }}\n <br>\n </template>\n </p>\n <button title=\"Use their value\" class=\"btn btn-success\"\n @click=\"resolved[row][conflict.col] = conflict.their_value\">\n <i class=\"fa fa-check\"></i>\n </button>\n </td>\n <td>\n <textarea type=\"text\" v-model=\"resolved[row][conflict.col]\"\n style=\"width: 300px\"\n v-if=\"resolved?.[row]?.[conflict.col] !== undefined\">\n </textarea>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.conflict {\n display: flex;\n margin-bottom: 10px;\n}\n\n.container > * {\n margin-bottom: 1.25rem;\n\n td.text-danger {\n text-decoration: line-through;\n }\n}\n\n.buttons {\n display: flex;\n gap: 1.25rem;\n\n button i {\n margin-right: 0.75rem;\n }\n}\n\n</style>\n","import {ref, Ref} from \"vue\";\nimport {ChangeRecord} from \"@ose/js-core\";\n\nexport interface Updatable {\n updateData(updates: ({ id: number } & Record<string, any>)[]): unknown,\n\n addData(data: ({ id: number } & Record<string, any>)[], top?: boolean, before?: number): unknown,\n\n deleteRow(id: number): unknown\n\n}\n\nexport class HistoryService {\n\n private readonly _folder: string;\n private readonly _fileName: string;\n private readonly _repo: string\n\n public constructor(folder: string, fileName: string, repo: string) {\n this._folder = folder;\n this._fileName = fileName;\n this._repo = repo;\n\n this._history = ref([])\n this._future = ref([])\n }\n\n private _history: Ref<ChangeRecord[]>;\n\n public get history(): ChangeRecord[] {\n return this._history.value;\n }\n\n private _future: Ref<ChangeRecord[]>;\n\n public get future(): ChangeRecord[] {\n return this._future.value;\n }\n\n public canRedo(): boolean {\n return this._future.value.length > 0;\n }\n\n public canUndo(): boolean {\n return this._history.value.length > 0;\n }\n\n public canRestoreChanges(): boolean {\n return this.storedHistory().length > 0\n }\n\n public storedHistory(): ChangeRecord[] {\n const stored = localStorage.getItem(this.storageKey(\"history\"));\n return stored ? JSON.parse(stored) : [];\n }\n\n public storedFuture(): ChangeRecord[] {\n const stored = localStorage.getItem(this.storageKey(\"future\"));\n return stored ? JSON.parse(stored) : [];\n }\n\n public clear() {\n this._future.value = []\n this._history.value = []\n\n this.backupChanges();\n }\n\n public backupChanges() {\n const history = JSON.stringify(this._history.value);\n localStorage.setItem(this.storageKey(\"history\"), history);\n const future = JSON.stringify(this._future.value);\n localStorage.setItem(this.storageKey(\"future\"), future);\n }\n\n public restoreChanges(table: Updatable) {\n const jsonHistory = localStorage.getItem(this.storageKey(\"history\"));\n this._history.value = JSON.parse(jsonHistory ?? \"[]\");\n const jsonFuture = localStorage.getItem(this.storageKey(\"future\"))\n this._future.value = JSON.parse(jsonFuture ?? \"[]\");\n\n for (const change of this._history.value) {\n if (change.type === \"change\") {\n table.updateData([{id: change.row, ...change.newFields}])\n } else if (change.type === \"delete\") {\n table.deleteRow(change.row)\n } else if (change.type === \"add\") {\n table.addData([{id: change.row, ...change.newFields}], true, change.position)\n }\n }\n }\n\n public recordChange(value: Record<string, any>, oldValue: Record<string, any>, rowPosition: number,): void\n public recordChange(value: string, oldValue: string, rowPosition: number, columnName: string): void\n public recordChange<T extends string | Record<string, any>>(value: T, oldValue: T, rowPosition: number, columnName?: string): void {\n const oldFields: Record<string, any> = (typeof oldValue === \"object\" && oldValue !== null ? oldValue : {\n [columnName!]: oldValue ?? \"\"\n })\n const newFields: Record<string, any> = typeof value === \"object\" && oldValue !== null ? value : {\n [columnName!]: value ?? \"\"\n }\n\n if (Object.keys(oldFields).length !== Object.keys(newFields).length) {\n // Change cannot be reproduced - skip it\n return\n }\n\n if (Object.entries(oldFields).filter(([k, v]) => newFields[k] !== v).length === 0) {\n // No change - skip it\n return;\n }\n\n\n const changeRecord: ChangeRecord = {\n type: \"change\",\n row: rowPosition,\n newFields,\n oldFields\n }\n\n this._history.value.push(changeRecord)\n\n this._future.value = []\n\n this.backupChanges();\n }\n\n public recordRowAdded(id: number, position: number, values: Record<string, any> = {}) {\n this._history.value?.push({type: \"add\", row: id as number, position, newFields: values})\n\n this._future.value = []\n\n this.backupChanges();\n }\n\n public recordRowDeleted(id: number, position: number, data: Record<string, any>) {\n this._history.value?.push({type: \"delete\", row: id as number, position, oldFields: {...data}})\n\n this._future.value = []\n\n this.backupChanges();\n }\n\n public undo(table: Updatable, steps: number = 1) {\n let result = false;\n let change: ChangeRecord | undefined;\n for (change = this._history.value.pop(); change && steps !== 0; steps--) {\n if (change?.type === \"change\") {\n table.updateData([{id: change.row, ...change.oldFields}])\n this._future.value.push(change)\n\n result = true;\n } else if (change?.type === \"delete\") {\n table.addData([{id: change.row, ...change.oldFields}], true, change.position)\n this._future.value.push(change)\n\n result = true;\n } else if (change?.type === \"add\") {\n table.deleteRow(change.row)\n this._future.value.push(change)\n\n result = true;\n }\n }\n\n this.backupChanges()\n\n return result;\n }\n\n public redo(table: Updatable, steps: number = 1) {\n let result = false;\n let change: ChangeRecord | undefined;\n for (change = this._future.value.pop(); change && steps !== 0; steps--) {\n if (change?.type === \"change\") {\n table.updateData([{id: change.row, ...change.newFields}])\n this._history.value.push(change)\n\n result = true;\n } else if (change?.type === \"delete\") {\n table.deleteRow(change.row);\n this._history.value.push(change)\n\n result = true;\n } else if (change?.type === \"add\") {\n table.addData([{id: change.row, ...change.newFields}], true, change.position)\n this._history.value.push(change)\n\n result = true;\n }\n }\n\n this.backupChanges()\n\n return result;\n }\n\n private storageKey(subkey: string) {\n return `history_${this._repo}_${this._folder}_${this._fileName}_${subkey}`\n }\n\n}\n","import {CellComponent, ColumnComponent, RowComponent} from \"tabulator-tables\";\n\n/**\n * Same as `RowComponent.getCell` but returns `null` instead of `false` when the column does not exist.\n *\n * Returning `null` allows usage with the optional chaining operator `?.`\n *\n * @param row\n * @param column\n */\nexport function getCell(row: RowComponent, column: string | HTMLElement | ColumnComponent): CellComponent | null {\n const ret = row.getCell(column);\n return ret ? ret : null;\n}\n","<script lang=\"ts\" setup>\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\nimport \"tabulator-tables/dist/css/tabulator_bootstrap5.min.css\";\n\nimport { computed, h, onMounted, onUnmounted, ref, toRaw, watch, watchEffect } from 'vue';\nimport { RowComponent, TabulatorFull as Tabulator } from 'tabulator-tables';\nimport { columnDefFor, setRowColor } from \"./tabulator-config\"\nimport { COLUMN_NAMES, CURATION_STATUS } from \"@ose/js-core\";\nimport { alertDialog, confirmDialog, promptDialog } from \"../common/bootbox\"\nimport { Diagnostic as DiagnosticM, MergeConflict, RepositoryConfig } from \"@ose/js-core\";\nimport Diagnostic from \"../common/Diagnostic.vue\"\nimport { BModal, BSpinner, BToast, BToastOrchestrator, ControllerKey, useToastController } from \"bootstrap-vue-next\"\nimport { DIAGNOSTIC_DATA } from \"@ose/js-core\";\nimport { debounce, SpreadsheetData } from \"@ose/js-core\";\nimport Merger from \"./Merger.vue\";\nimport { HistoryService } from \"./HistoryService\"\nimport { getCell } from \"../common/tabulator-extensions\";\nimport { isFocusWindowMessage, isNavigateToSheetMessage, isNavigateToTermMessage, isScrollToRowMessage } from \"@ose/js-core\";\n\ndeclare var URLS: { [key: string]: any };\ndeclare var ALL_INITIALS: string[];\ndeclare var LOGIN_INITIALS: string;\ndeclare var REPOSITORY_CONFIG: RepositoryConfig;\nconst URL_PREFIX = URLS['prefix'];\n\nconst { show: showToast, remove: removeToast } = useToastController()\n\nconst table = ref<HTMLDivElement | null>(null); //reference to your table element\nconst tabulator = ref<Tabulator | null>(null); //variable to hold your table\n// const tableData = reactive([]); //data for table to display\nconst spreadsheetData = ref<SpreadsheetData | null>(null);\nconst suggestions = ref<string[]>([]);\nconst tableData = computed(() => spreadsheetData.value?.rows?.map((r, i) => ({\n id: i,\n ...r\n})) ?? [])\nconst tableColumns = computed(() => spreadsheetData.value?.header?.map(h => columnDefFor(h, suggestions.value, () => tabulator.value!)))\n\nconst path = location.pathname.split('/edit/')[1];\nconst repo = path.substring(0, path.indexOf(\"/\"));\nconst filePath = decodeURIComponent(path.substring(path.indexOf(\"/\") + 1));\nconst fileName = decodeURIComponent(filePath.split('/').at(-1)!)\nconst fileFolder = filePath.substring(0, filePath.lastIndexOf(\"/\"))\nconst downloadPath = computed(() => `https://raw.githubusercontent.com/${REPOSITORY_CONFIG?.full_name}/${REPOSITORY_CONFIG?.main_branch}/${filePath}`)\n\nconst urlParams = new URLSearchParams(window.location.search);\nconst navigateToRow = urlParams.has(\"row\") ? Number.parseInt(urlParams.get(\"row\") ?? \"0\") - 2 : null;\nconst urlFilter = JSON.parse(urlParams.get(\"filter\") ?? \"null\") as Record<string, string> | null\n\nconst tableBuilt = ref<boolean>(false);\nconst selectedRows = ref<RowComponent[]>([]);\n\nconst showDiagnosticList = ref<boolean>(false);\n\nconst filterToDiagnostics = ref<(\"error\" | \"warning\" | \"info\")[]>([]);\n\nconst historyService = new HistoryService(fileFolder, fileName, repo);\n\n// Submit fields\nconst submitCommitMessage = ref<string>(`Updating ${fileName}`);\nconst submitDetailedMessage = ref<string>(\"\");\n\nconst mode = ref<\"edit\" | \"merge\">(\"edit\");\nconst mergeConflicts = ref<MergeConflict[]>([])\nconst mergedData = ref<Record<string, string | number | boolean | null>[] | null>(null);\n\n// Generic flag to lock the UI\nconst lock = ref<boolean>(false);\nconst saving = ref<boolean>(false);\nconst validating = ref<boolean>(false);\nconst verifying = ref<boolean>(false);\nconst locked = computed(() => lock.value || !tableBuilt.value || saving.value || verifying.value)\n\nconst readOnlyMessage = REPOSITORY_CONFIG.readonly_files[filePath] ?? null;\nconst isReadOnly = readOnlyMessage !== null;\n\nconst valid = computed(() => errors.value.length <= 0 && warnings.value.length <= 0);\nconst canValidate = computed(() => !!spreadsheetData.value?.header?.includes(COLUMN_NAMES.ID));\nconst canReview = computed(() => spreadsheetData.value?.header?.includes(COLUMN_NAMES.CURATOR) && spreadsheetData.value?.header?.includes(COLUMN_NAMES.TO_BE_REVIEWED_BY) && !isReadOnly);\nconst canVisualise = computed(() => spreadsheetData.value?.header?.includes(COLUMN_NAMES.ID) && spreadsheetData.value?.header?.includes(COLUMN_NAMES.LABEL));\n\nconst saveDialogOpen = ref<boolean>(false);\n\nconst diagnostics = ref<{\n [k: number]: { type: \"error\" | \"warning\" | \"info\", diagnostic: DiagnosticM, _id: number }[]\n}>({});\nconst allDiagnostics = computed(() => Object.values(diagnostics.value).flatMap(x => x).sort((a, b) => a.diagnostic.row - b.diagnostic.row));\nconst errors = computed(() => allDiagnostics.value.filter(x => x.type === \"error\"));\nconst warnings = computed(() => allDiagnostics.value.filter(x => x.type === \"warning\"));\nconst infos = computed(() => allDiagnostics.value.filter(x => x.type === \"info\"));\n\nconst onBeforeUnload = (e: BeforeUnloadEvent) => {\n if (historyService.canUndo()) {\n e.preventDefault();\n }\n}\n\nconst onWindowSizeChanged = debounce(() => {\n if (!tableBuilt.value || tabulator.value === null) {\n return;\n }\n\n const firstRow = tabulator.value.getRows(\"visible\")?.[0]\n tabulator.value.setHeight(document.querySelector(\".row.editor-row\")?.getBoundingClientRect()?.height ?? 400)\n tabulator.value.scrollToRow(firstRow ?? 0, \"top\")\n})\n\nconst onKeyPress = (e: KeyboardEvent) => {\n if (tabulator.value) {\n if (e.ctrlKey && e.key === \"z\") {\n if (!document.execCommand(\"undo\", false)) {\n historyService.undo(tabulator.value);\n }\n\n e.preventDefault();\n }\n\n if (e.ctrlKey && (e.key === \"y\" || e.key === \"Z\")) {\n if (!document.execCommand(\"redo\", false)) {\n historyService.redo(tabulator.value);\n }\n\n e.preventDefault();\n }\n\n if (e.ctrlKey && e.key === \"s\") {\n if (!locked.value && historyService.canUndo()) {\n saveChanges()\n }\n\n e.preventDefault();\n }\n }\n}\n\nconst onMessage = (e: MessageEvent) => {\n if (isScrollToRowMessage(e.data)) {\n scrollAndHighlightRow(e.data.position)\n } else if (isFocusWindowMessage(e.data)) {\n window.focus();\n } else if (isNavigateToTermMessage(e.data)) {\n const filter = e.data.termID ? { \"ID\": e.data.termID } : { \"Label\": e.data.termLabel };\n const newurl = `${URL_PREFIX}/edit/${e.data.repo}/${e.data.sheet}?filter=${encodeURIComponent(JSON.stringify(filter))}`;\n window.location.href = newurl;\n window.focus();\n } else if (isNavigateToSheetMessage(e.data)) {\n const filter = e.data.filter ?? null;\n const filterParam = filter ? `?filter=${encodeURIComponent(JSON.stringify(filter))}` : \"\";\n window.location.href = `${URL_PREFIX}/edit/${e.data.repo}/${e.data.sheet}${filterParam}`;\n window.focus();\n }\n}\n\nlet checkForUpdatesTimer: number | undefined;\nonMounted(() => {\n loadData()\n\n if (isReadOnly) {\n showToast?.({\n props: {\n value: true,\n progressProps: {\n variant: 'info',\n }\n },\n component: h(BToast, { variant: \"warning\" }, {\n default: () => h(\"div\", { style: \"display: flex; align-items: center; gap: 16px\" }, [\n h(\"i\", { class: \"fa fa-lock\" }),\n h(\"span\", null, `This file is readonly: ${readOnlyMessage}`)\n ])\n })\n })\n }\n\n window.addEventListener(\"resize\", onWindowSizeChanged);\n window.addEventListener(\"beforeunload\", onBeforeUnload);\n window.addEventListener(\"keydown\", onKeyPress);\n window.addEventListener(\"message\", onMessage);\n})\nonUnmounted(() => {\n window.removeEventListener(\"resize\", onWindowSizeChanged);\n window.removeEventListener(\"beforeunload\", onBeforeUnload);\n window.removeEventListener(\"keydown\", onKeyPress);\n window.removeEventListener(\"message\", onMessage);\n if (checkForUpdatesTimer) {\n clearInterval(checkForUpdatesTimer)\n }\n})\n\nwatch(showDiagnosticList, () => {\n onWindowSizeChanged();\n})\n\nwatchEffect(() => {\n if (spreadsheetData.value !== null && tabulator.value === null) {\n //instantiate Tabulator when element is mounted\n const instance = new Tabulator(table.value!, {\n data: tableData.value, //link data to table\n reactiveData: true, //enable data reactivity\n columns: tableColumns.value, //define table columns\n columnDefaults: {\n editable: () => !locked.value && !isReadOnly,\n tooltip(_, cell) {\n const messages = diagnostics.value[cell.getRow().getData()[\"id\"]] ?? []\n\n if (messages.length === 0) {\n return \"\";\n }\n\n function diagnosticHTML(d: { type: \"error\" | \"warning\" | \"info\", diagnostic: DiagnosticM, _id: number }) {\n const badgeClass = d.type === 'error' ? 'danger' : d.type\n return `<li><span class=\"badge text-bg-${badgeClass}\" style=\"text-transform: capitalize\">${d.type}</span>\n ${DIAGNOSTIC_DATA[d.diagnostic.type].message(d.diagnostic)}</li>`;\n }\n\n return `<ul style=\"list-style: none\">${messages.map(diagnosticHTML).join(\"\\n\")}</ul>`\n },\n },\n groupToggleElement: \"header\",\n nestedFieldSeparator: \"|>\",\n layout: \"fitColumns\",\n movableRows: false,\n persistence: true,\n history: true, //records table interaction\n scrollToRowPosition: \"bottom\", //for scrollToRow()\n scrollToRowIfVisible: false, //don't scroll if row already on screen\n height: document.querySelector(\".row.editor-row\")?.scrollHeight,\n selectableRows: \"highlight\",\n rowHeader: {\n formatter: \"rowSelection\",\n titleFormatter: \"rowSelection\",\n headerSort: false,\n resizable: false,\n frozen: true,\n headerHozAlign: \"center\",\n hozAlign: \"center\",\n width: 50,\n },\n\n //highlight on load table:\n rowFormatter: (row: RowComponent) => {\n const data = row.getData();\n\n setRowColor(row, data);\n\n if (data[COLUMN_NAMES.CURATOR]?.indexOf(LOGIN_INITIALS) >= 0) {\n row.getElement()?.classList?.add(\"assigned-to-me\")\n } else {\n row.getElement()?.classList?.remove(\"assigned-to-me\")\n }\n\n row.getElement()?.classList?.remove(\"has-error\", \"has-warning\", \"changed\")\n row.getCells().forEach(c => c.getElement()?.classList?.remove(\"has-error\", \"has-warning\", \"changed\"))\n\n for (const change of historyService.history) {\n if (change.row === row.getData()[\"id\"] as number) {\n if (change.type === \"add\") {\n row.getElement()?.classList?.add(\"changed\")\n } else if (change.type === \"change\") {\n for (const field in change.newFields) {\n getCell(row, field)?.getElement()?.classList?.add(\"changed\")\n }\n }\n }\n }\n\n const messages = diagnostics.value?.[data?.id] ?? []\n for (const message of messages) {\n const d = message.diagnostic\n if (d.type.match(/-parent/)) {\n getCell(row, \"Parent\")?.getElement()?.classList?.add(`has-${message.type}`)\n } else if (d.type.match(/-label/)) {\n getCell(row, \"Label\")?.getElement()?.classList?.add(`has-${message.type}`)\n } else if (d.type.match(/-domain/)) {\n getCell(row, \"Domain\")?.getElement()?.classList?.add(`has-${message.type}`)\n } else if (d.type.match(/-range/)) {\n getCell(row, \"Range\")?.getElement()?.classList?.add(`has-${message.type}`)\n } else if (d.type.match(/-id/)) {\n getCell(row, \"ID\")?.getElement()?.classList?.add(`has-${message.type}`)\n } else if (d.type.match(/-relation-value/)) {\n getCell(row, `REL '${d.relation?.label}'`)?.getElement()?.classList?.add(`has-${message.type}`)\n } else {\n row.getElement().classList.add(`has-${message.type}`)\n }\n }\n\n if (navigateToRow === row.getIndex()) {\n row.getElement().style.boxShadow = \"inset 0 0 10px 5px #ffcb00\"\n }\n },\n });\n\n // Update reactive properties manually on change\n instance.on(\"tableBuilt\", () => {\n tableBuilt.value = true;\n validate();\n\n if (urlFilter) {\n for (const field in urlFilter) {\n instance.setHeaderFilterValue(field, urlFilter[field])\n }\n }\n\n if (history?.replaceState !== undefined && urlFilter) {\n // Remove filter from url so that on reload the table is not filtered again\n const newurl = window.location.protocol + \"//\" + window.location.host + window.location.pathname;\n window.history.replaceState({ path: newurl }, '', newurl);\n }\n\n if (navigateToRow !== null) {\n instance.scrollToRow(navigateToRow, \"top\")\n }\n })\n instance.on(\"rowSelectionChanged\", (_, selected) => selectedRows.value = selected)\n instance.on(\"cellEdited\", async cell => {\n historyService.recordChange(cell.getValue(), cell.getOldValue() ?? null, cell.getRow().getData()[\"id\"], cell.getColumn().getField())\n cell.getRow().reformat();\n });\n\n tabulator.value = instance;\n\n const state = {}\n checkForUpdatesTimer = setInterval(() => checkForUpdates(state), 60 * 1000)\n }\n})\n\nwatchEffect(() => {\n if (tabulator.value === null || !tableBuilt.value) {\n return\n }\n\n tabulator.value.setFilter(row => (filterToDiagnostics.value.length === 0 || !!diagnostics.value[row[\"id\"]]?.find(d => filterToDiagnostics.value.includes(d.type))))\n})\n\nwatch(tableBuilt, async () => {\n if (historyService.canRestoreChanges()) {\n const changes = historyService.storedHistory().map(c => {\n if (c.type === \"add\") {\n return `<li>Added row ${c.row}</li>`\n } else if (c.type === \"change\") {\n return `<li>Changed row ${c.row}: ${Object.keys(c.newFields ?? {}).map(f => `${f} from \"${c.oldFields?.[f]}\" to \"${c.newFields[f]}\"`).join(\", \")}</li>`\n } else if (c.type === \"delete\") {\n return `<li>Deleted row ${c.row}</li>`\n }\n }).join(\"\\n\")\n const restoreChanges = await confirmDialog({\n title: \"Unsaved changes\",\n message: `<p>You have unsaved changes. Do you want to restore them?</p><ul>${changes}</ul>`,\n buttons: {\n confirm: {\n label: 'Restore',\n className: 'btn-success',\n },\n cancel: {\n label: 'Discard',\n className: 'btn-danger',\n },\n }\n })\n\n if (restoreChanges) {\n historyService.restoreChanges(tabulator.value!);\n } else {\n historyService.clear()\n }\n }\n}, { once: true })\n\nasync function validateImmediate(progress: \"toast\" | \"popup\" = \"toast\") {\n if (!canValidate.value) {\n return\n }\n\n verifying.value = true;\n let toast: ControllerKey | null = null;\n if (progress === \"toast\") {\n toast = showToast?.({\n props: {\n value: true\n },\n component: h(BToast, null, {\n default: () => h(\"div\", { style: \"display: flex; align-items: center; gap: 16px\" }, [\n h(\"div\", { class: \"spinner-border text-primary spinner-border-sm\" }),\n \"Validating ...\"\n ])\n })\n }) ?? null;\n } else {\n validating.value = true;\n }\n const rows = tabulator?.value?.getData();\n\n if (!rows) {\n return;\n }\n\n const data = {\n repository: REPOSITORY_CONFIG.short_name,\n spreadsheet: filePath,\n rows\n }\n\n try {\n\n const response = await fetch(`${URL_PREFIX}/api/validate/file`, {\n method: \"POST\",\n headers: {\n \"Content-type\": \"application/json\",\n \"Accept\": \"application/json\"\n },\n body: JSON.stringify(data)\n })\n\n const result = await response.json();\n\n diagnostics.value = {}\n for (const error of result.errors) {\n if (!diagnostics.value[error.row - 2]) {\n diagnostics.value[error.row - 2] = []\n }\n\n diagnostics.value[error.row - 2].push({ type: 'error', diagnostic: error, _id: -1 })\n }\n\n for (const warning of result.warnings) {\n if (!diagnostics.value[warning.row - 2]) {\n diagnostics.value[warning.row - 2] = []\n }\n\n diagnostics.value[warning.row - 2].push({ type: 'warning', diagnostic: warning, _id: -1 })\n }\n\n allDiagnostics.value.forEach((d, i) => {\n d[\"_id\"] = i\n })\n\n tabulator.value?.getRows()?.forEach(r => r.reformat())\n\n if (toast) {\n removeToast?.(toast);\n } else {\n validating.value = false;\n }\n\n if (valid.value) {\n showToast?.({\n props: {\n value: 5000,\n progressProps: {\n variant: 'success',\n }\n },\n component: h(BToast, { variant: \"success\" }, {\n default: () => h(\"div\", { style: \"display: flex; align-items: center; gap: 16px\" }, [\n h(\"i\", { class: \"fa fa-check\" }),\n h(\"span\", null, \"No errors found!\")\n ])\n })\n })\n } else if (errors.value.length > 0) {\n showToast?.({\n props: {\n value: 5000,\n progressProps: {\n variant: 'danger',\n }\n },\n component: h(BToast, { variant: \"danger\" }, {\n default: () => h(\"div\", { style: \"display: flex; align-items: center; gap: 16px\" }, [\n h(\"i\", { class: \"fa fa-circle-xmark\" }),\n h(\"span\", null, `${errors.value.length} errors and ${warnings.value.length} warnings found`)\n ])\n })\n })\n } else {\n showToast?.({\n props: {\n value: 5000,\n progressProps: {\n variant: 'warning',\n }\n },\n component: h(BToast, { variant: \"warning\" }, {\n default: () => h(\"div\", { style: \"display: flex; align-items: center; gap: 16px\" }, [\n h(\"i\", { class: \"fa fa-triangle-exclamation\" }),\n h(\"span\", null, `${warnings.value.length} warnings found`)\n ])\n })\n })\n }\n\n showDiagnosticList.value = !valid.value;\n } catch (e) {\n console.error(e)\n if (toast) {\n removeToast?.(toast);\n }\n showToast?.({\n props: {\n value: 5000,\n progressProps: {\n variant: 'danger',\n }\n },\n component: h(BToast, { variant: \"danger\" }, {\n default: () => h(\"div\", { style: \"display: flex; align-items: center; gap: 16px\" }, [\n h(\"i\", { class: \"fa fa-triangle-exclamation\" }),\n h(\"span\", null, `Problem communicating with the server`)\n ])\n })\n })\n }\n\n verifying.value = false;\n}\n\nconst validate = debounce(() => validateImmediate());\n\n\nconst onError = (message: string) => alertDialog({\n title: \"Failed to load data\",\n message: `The spreadsheet '${filePath}' could not be loaded: ${message}`\n})\n\nasync function loadData() {\n try {\n const response = await (await fetch(`${URL_PREFIX}/api/edit/get/${repo}/${filePath}`)).json()\n\n if (!response.success) {\n await onError(response.error)\n } else {\n spreadsheetData.value = response.spreadsheet;\n }\n\n // load suggestions in background - don't wait for it here\n setTimeout(() => loadSuggestions(), 0)\n } catch (e) {\n await onError(e!.toString())\n }\n}\n\nasync function loadSuggestions() {\n try {\n const response = await (await fetch(`${URL_PREFIX}/api/edit/suggestions/${repo}`)).json()\n\n if (!response.success) {\n await onError(response.error)\n } else {\n\n // Mutate single object to ensure auto complete works\n suggestions.value.splice(0, suggestions.value.length)\n suggestions.value.push(...response.suggestions)\n }\n } catch (e) {\n await onError(e!.toString())\n }\n}\n\nasync function scrollAndHighlightRow(position: number) {\n const row = tabulator.value?.getRow(position)\n await row?.scrollTo(\"center\", true)\n\n row?.getElement()?.classList?.add(\"highlight\");\n await new Promise(r => setTimeout(r, 3000))\n row?.getElement()?.classList?.remove(\"highlight\");\n}\n\nasync function checkForUpdates(state: any) {\n if (state.toast || locked.value) {\n return;\n }\n\n const response = await fetch(`${URL_PREFIX}/checkForUpdates`, {\n method: \"POST\",\n headers: {\n \"Content-TYpe\": \"application/x-www-form-urlencoded\",\n \"Accept\": \"application/json\",\n },\n body: `repo_key=${repo}&folder=${fileFolder}&spreadsheet=${fileName}&file_sha=${spreadsheetData.value?.file_sha}`,\n });\n\n const result = await response.json();\n if (result.message === \"Success\") {\n // No updates\n } else {\n state.toast = showToast?.({\n props: {\n value: true,\n variant: \"warning\",\n pos: \"top-center\"\n },\n component: h(BToast, null, {\n default: () => h(\"div\", { style: \"display: flex; align-items: center; gap: 16px\" }, [\n h(\"div\", { class: \"spinner-grow spinner-grow-sm text-white mr-2\" }),\n \"Updates available\"\n ])\n })\n }) ?? null;\n }\n}\n\n\n/************* UTILITY FROM OLD ****************/\n\nfunction saveCurator(row: RowComponent) {\n //if a field in any column except \"Curator\" edited\n //check \"Curator\" column for loginInitials and auto fill\n const data = row.getData();\n\n if (data[COLUMN_NAMES.CURATOR] !== undefined) { // if curator column present in table\n const cellValue: string = data[COLUMN_NAMES.CURATOR];\n const curators = [...cellValue?.split(\";\")?.map(x => x.trim()), LOGIN_INITIALS]\n .filter((x, i, self) => !!x && self.indexOf(x) === i)\n .join(\"; \")\n const prev = data[COLUMN_NAMES.CURATOR];\n data[COLUMN_NAMES.CURATOR] = curators;\n\n if (curators !== \"\") {\n const cellValue = data[COLUMN_NAMES.CURATOR];\n const rowValue = data[\"id\"];//save absolute row position\n const columnValue = \"Curator\"; //column name\n historyService.recordChange(cellValue, prev, rowValue as number, columnValue);\n }\n }\n}\n\n\nfunction clearFormatting() {\n tabulator.value?.clearSort(); // clear sorting as well\n tabulator.value?.clearFilter(true); // clear header filters \n}\n\nfunction sendVisualisationRequest(sendType: \"sheet\" | \"select\") {\n const rows: RowComponent[] = tabulator.value?.getRows() ?? [];\n\n // Use a unique window name per spreadsheet to allow multiple visualisation windows\n const windowName = `VisualisationWindow_${repo}_${fileName}`.replace(/[^a-zA-Z0-9_]/g, '_');\n const visualisationWindow = window.open('', windowName);\n\n\n if (visualisationWindow === null) {\n alert(\"Pop-up blocked! Please allow pop-ups for this site to open the visualisation window.\");\n return;\n }\n\n // Build the sheet data to send - either full sheet or just selected rows\n const sheetDataToSend: SpreadsheetData = toRaw({\n header: spreadsheetData.value?.header ?? [],\n rows: rows.map(r => r.getData()),\n file_sha: spreadsheetData.value?.file_sha ?? '',\n repo_name: repo,\n folder: fileFolder,\n spreadsheet_name: fileName\n });\n\n\n visualisationWindow?.focus();\n visualisationWindow.ose = {\n ...visualisationWindow.ose ?? {},\n visualise: {\n selection: sendType === 'select' ? rows.map((r, i) => selectedRows.value.includes(r) ? i : null).filter(i => i !== null) : null,\n sheetData: sheetDataToSend\n }\n }\n\n console.log(\"Sent data to visualisation window:\", visualisationWindow.ose.visualise);\n\n if (visualisationWindow.oseDataChanged === undefined) {\n console.log(\"Opening new visualisation window\");\n visualisationWindow.location.href = URL_PREFIX + \"/openVisualise\";\n } else {\n visualisationWindow.oseDataChanged();\n }\n\n // Add hook for when the window reloads to resend the data\n visualisationWindow.onload = () => {\n console.log(\"Visualisation window reloading, will resend data on load\");\n visualisationWindow.ose = {\n ...visualisationWindow.ose ?? {},\n visualise: {\n selection: rows.map((r, i) => (selectedRows.value.includes(r) || sendType === 'sheet') ? i : null).filter(i => i !== null),\n sheetData: sheetDataToSend,\n }\n }\n visualisationWindow.oseDataChanged?.();\n }\n\n // const form = document.createElement(\"form\");\n // form.setAttribute(\"method\", \"post\");\n // form.setAttribute(\"action\", URL_PREFIX + \"/openVisualise\");\n // form.setAttribute(\"target\", 'VisualisationWindow');\n // const input = document.createElement('input');\n // input.type = 'hidden';\n // input.name = \"sheet\";\n // input.value = filePath;\n // form.appendChild(input);\n // const input2 = document.createElement('input');\n // input2.type = 'hidden';\n // input2.name = \"repo\";\n // input2.value = REPOSITORY_CONFIG.short_name;\n // form.appendChild(input2);\n // const input4 = document.createElement('input');\n // input4.type = 'hidden';\n // input4.name = \"table\";\n // input4.value = JSON.stringify(tabulator?.value?.getData());\n // form.appendChild(input4);\n // const input5 = document.createElement('input');\n // input5.type = 'hidden';\n // input5.name = \"indices\";\n // input5.value = JSON.stringify(indices);\n // form.appendChild(input5);\n // const input6 = document.createElement('input');\n // input6.type = 'hidden';\n // input6.name = \"filter\";\n // input6.value = JSON.stringify(filter);\n // form.appendChild(input6);\n // document.body.appendChild(form);\n // form.target = 'VisualisationWindow';\n // form.submit();\n // document.body.removeChild(form);\n}\n\nasync function saveChanges() {\n //check for validate errors:\n await validateImmediate(\"popup\")\n\n if (!valid.value) {\n const saveValidationMessage = `<ul style=\"list-style: none; padding: 0; margin: 0;\">${allDiagnostics.value\n .map(m => `<li style=\"margin: 0; padding: 0; display: block\"><span class=\"badge text-bg-${m.type === 'error' ? 'danger' : m.type}\">${m.type}</span>\n Row ${m.diagnostic.row}: ${DIAGNOSTIC_DATA[m.diagnostic.type].message(m.diagnostic)}</li>`)\n .join(\"\\n\")}</ul>`\n\n bootbox.dialog({\n title: \"There are validation errors, are you sure you want to save?\",\n message: saveValidationMessage,\n buttons: {\n confirm: {\n label: 'Submit anyway',\n className: 'btn-danger',\n callback: function () {\n saveDialogOpen.value = true;\n }\n },\n fix: {\n label: 'Show errors in table',\n className: 'btn-primary',\n callback: function () {\n filterToDiagnostics.value = [\"error\", \"warning\"];\n }\n },\n cancel: {\n label: 'Cancel',\n className: 'btn-success',\n },\n }\n });\n } else {\n saveDialogOpen.value = true;\n }\n}\n\nfunction resetSaveDialog() {\n saveDialogOpen.value = false;\n}\n\nasync function submitChanges(commitMessage: string, details: string, merge_strategy?: \"manual\" | \"theirs\" | \"ours\") {\n saveDialogOpen.value = false;\n saving.value = true;\n\n const spreadsheet = spreadsheetData.value!;\n const initialData = JSON.stringify(spreadsheetData.value?.rows).replaceAll(\"&\", \"and\")\n\n try {\n const data: Record<string, any> = {\n repo_key: spreadsheet.repo_name,\n file_sha: spreadsheet.file_sha,\n path: filePath,\n header: tabulator.value?.getColumns()?.map(c => c.getField())?.slice(1),\n commit_msg: commitMessage,\n commit_msg_extra: details,\n }\n\n if (merge_strategy === undefined) {\n data[\"initialData\"] = initialData;\n data[\"rowData\"] = JSON.stringify(tabulator.value?.getData())\n } else {\n data[\"merge_strategy\"] = merge_strategy;\n data[\"rowData\"] = JSON.stringify(mergedData.value!)\n }\n data[\"rowData\"] = data[\"rowData\"].replaceAll(\"&\", \"and\")\n\n const response = await fetch(`${URL_PREFIX}/save`, {\n method: \"POST\",\n headers: {\n \"Content-type\": \"application/json\",\n \"Accept\": \"application/json\",\n },\n body: JSON.stringify(data)\n })\n\n saving.value = false;\n\n try {\n const result = await response.json();\n if (result.success) {\n historyService.clear()\n\n mode.value = \"edit\";\n\n spreadsheetData.value!.file_sha = result.new_sha\n spreadsheetData.value!.header = result.new_header\n spreadsheetData.value!.rows = result.new_rows\n tabulator.value?.setData(tableData.value)\n validateImmediate()\n\n if (result.merge_strategy === \"automatic\") {\n await alertDialog({\n title: `Automatic merge successful!`,\n message: `Somebody else has changed the spreadsheet while you were editing - but the changes could be merged automatically. Your changes are saved to the repository.`,\n className: \"success\"\n })\n } else {\n showToast?.({\n props: {\n value: 5000,\n progressProps: {\n variant: 'success',\n }\n },\n component: h(BToast, { variant: \"success\" }, {\n default: () => h(\"div\", { style: \"display: flex; align-items: center; gap: 16px\" }, [\n h(\"i\", { class: \"fa fa-save\" }),\n h(\"span\", null, \"Changes were saved successfully to the repository.\")\n ])\n })\n })\n }\n\n\n } else {\n const error = result.error;\n if (error === \"merge-conflict\") {\n await alertDialog({\n title: `Merge conflicts`,\n message: `Somebody else has changed the spreadsheet while you were editing and your changes conflict with theirs. Please resolve the conflicts, choose to overwrite your changes, or cancel the operation.`\n }, \"hidden\")\n\n mergedData.value = result.merged_table\n mergeConflicts.value = result.merge_conflicts\n mode.value = \"merge\"\n } else {\n await alertDialog({\n title: `An error occurred while saving the file`,\n message: `<p>An error occured while saving the file:</p><p>${error}</p>`,\n className: \"danger\"\n })\n }\n }\n } catch {\n await alertDialog({\n title: `Error ${response.status}`,\n message: `<p>\n An error occured while saving the file:\n </p>\n ${await response.text()}`,\n className: \"danger\"\n })\n }\n } catch (e) {\n saving.value = false;\n\n await alertDialog({\n title: \"Connection problem\",\n message: \"There was a problem communicating with the server. Your changes have probably not been saved!\"\n })\n }\n}\n\n\n/************* END UTILITY FROM OLD ****************/\n\n\nconst RIBBON = {\n visualiseSheet() {\n sendVisualisationRequest(\"sheet\");\n },\n visualiseSelection() {\n sendVisualisationRequest(\"select\");\n },\n validate() {\n validate();\n },\n saveFile() {\n saveChanges()\n },\n undo() {\n if (tabulator.value) {\n historyService.undo(tabulator.value)\n }\n },\n redo() {\n if (tabulator.value) {\n historyService.redo(tabulator.value)\n }\n },\n async addRow() {\n const idNum = tabulator.value?.getDataCount() ?? 0;\n const rowObj: { id: number, [k: string]: unknown } = { id: idNum } // add to end of table! \n for (const column of tabulator.value?.getColumns() ?? []) {\n const field = column.getField();\n if (!field) {\n continue;\n }\n rowObj[field] = \"\";\n\n switch (field?.toLowerCase()) {\n case COLUMN_NAMES.CURATION_STATUS.toLowerCase():\n rowObj[field] = CURATION_STATUS.PROPOSED;\n break;\n case COLUMN_NAMES.E_CIGO.toLowerCase():\n case COLUMN_NAMES.FUZZY_SET.toLowerCase():\n rowObj[field] = 0\n break;\n case COLUMN_NAMES.RELATIONSHIP_TYPE.toLowerCase():\n rowObj[field] = \"ObjectProperty\"\n break;\n }\n }\n\n clearFormatting(); //needs to be here, not after table.addRow or bad things happen \n await tabulator.value!.addRow(rowObj);\n await tabulator.value?.scrollToRow(idNum, \"top\", true);\n\n historyService.recordRowAdded(rowObj[\"id\"], tabulator.value!.getRow(rowObj[\"id\"]).getPosition() as number, rowObj)\n },\n async deleteSelectedRows() {\n if (selectedRows.value.length > 1) {\n if (!await confirmDialog({\n title: `Delete row${selectedRows.value.length === 1 ? '' : 's'}?`,\n message: `Do you really want to delete ${selectedRows.value.length === 1 ? 'the row' : selectedRows.value.length + \" rows\"}?`\n })) {\n return;\n }\n }\n\n for (const row of selectedRows.value) {\n //if selectedRows ID column is not null and \"\" then don't delete!\n const data = row.getData();\n if (data[COLUMN_NAMES.ID] === undefined || data[COLUMN_NAMES.CURATION_STATUS] === undefined) {\n historyService.recordRowDeleted(data[\"id\"] as number, row.getPosition() as number, data)\n row.deselect();\n\n tabulator.value?.deleteRow(row);\n } else {\n const cell = getCell(row, COLUMN_NAMES.ID);\n if (cell?.getValue() !== null && cell?.getValue().trim() !== \"\") { //got a defined ID - don't delete!\n //set to obsolete and show a message here\n const prevCurationStatus = data[COLUMN_NAMES.CURATION_STATUS]\n data[COLUMN_NAMES.CURATION_STATUS] = CURATION_STATUS.OBSOLETE;\n\n await alertDialog({ message: \"You can't delete a row that has already had an ID assigned. Setting row status to 'Obsolete' instead.\" });\n row.deselect();\n\n\n //set initials of \"Curator\"\n const prevCurator = data[COLUMN_NAMES.CURATION_STATUS]\n if (COLUMN_NAMES.CURATOR in data) {\n data[COLUMN_NAMES.CURATOR] = [data[COLUMN_NAMES.CURATOR], LOGIN_INITIALS].filter(x => !!x).join(\"; \")\n }\n\n //save change:\n const prev = {\n [COLUMN_NAMES.CURATION_STATUS]: prevCurationStatus ?? null,\n [COLUMN_NAMES.CURATOR]: prevCurator ?? null\n }\n const value = {\n [COLUMN_NAMES.CURATION_STATUS]: data[COLUMN_NAMES.CURATION_STATUS],\n [COLUMN_NAMES.CURATOR]: data[COLUMN_NAMES.CURATOR]\n }\n\n const rowValue = data[\"id\"];\n historyService.recordChange(value, prev, rowValue);\n } else {\n // ID is \"\" or null, we can delete \n historyService.recordRowDeleted(data[\"id\"] as number, row.getPosition() as number, data)\n row.deselect();\n\n tabulator.value?.deleteRow(row);\n }\n }\n }\n },\n async markAsReviewed() {\n for (let row of selectedRows.value) {\n if (getCell(row, COLUMN_NAMES.TO_BE_REVIEWED_BY) === null) {\n continue;\n }\n\n const data = row.getData();\n const prev = data[COLUMN_NAMES.TO_BE_REVIEWED_BY]\n const cell = getCell(row, COLUMN_NAMES.TO_BE_REVIEWED_BY);\n //save \"curator\":\n saveCurator(row);\n\n const cellValue: string | undefined | null = cell?.getValue();\n const reviewers = cellValue?.split(\";\")?.map(x => x.trim()).filter(x => x !== LOGIN_INITIALS).join(\"; \");\n await row.update({ [COLUMN_NAMES.TO_BE_REVIEWED_BY]: reviewers });\n row.deselect(); //triggers rowDeselected()\n //backup changes\n\n const cellValueData = data[COLUMN_NAMES.TO_BE_REVIEWED_BY];\n const rowValue = data[\"id\"];//save absolute row position\n const columnValue = \"To be reviewed by\"; //column name\n historyService.recordChange(cellValueData, prev ?? null, rowValue, columnValue);\n }\n\n tabulator.value?.redraw();\n },\n highlightOwn() {\n table.value?.classList?.toggle(\"highlight-assigned\")\n },\n async askForReview() {\n const result = await promptDialog<string[]>({\n title: \"Choose reviewers\",\n inputType: 'checkbox',\n inputOptions: ALL_INITIALS.map(i => ({ value: i, text: i }))\n });\n if (result === null || result.length === 0) { //cancel or no curator selected\n return;\n }\n\n for (const row of selectedRows.value) {\n const cell = getCell(row, COLUMN_NAMES.TO_BE_REVIEWED_BY);\n if (cell === null) {\n continue\n }\n\n const prev = cell.getValue()\n\n const reviewers = [cell.getValue()?.trim(), ...result].filter(x => !!x).join(\"; \")\n\n row.update({ [COLUMN_NAMES.TO_BE_REVIEWED_BY]: reviewers });\n row.deselect();\n // backup changes:\n const cellValueData = reviewers;\n const rowValue = row.getData()[\"id\"];//save absolute row position\n const columnValue = \"To be reviewed by\"; //column name\n historyService.recordChange(cellValueData, prev ?? null, rowValue, columnValue);\n }\n },\n removeFilters() {\n tabulator.value?.clearFilter(true);\n\n },\n showHiddenColumns() {\n const allColumns = tabulator.value?.getColumns()?.slice(1) ?? [];\n for (const column of allColumns) {\n if (!column.isVisible()) {\n column.show()\n }\n }\n },\n resetColumnWidths() {\n const allColumns = tabulator.value?.getColumns()?.slice(1) ?? [];\n for (const column of allColumns) {\n column.setWidth(defColumnSize(column.getField()));\n }\n },\n filterToErrors() {\n const cur = filterToDiagnostics.value\n filterToDiagnostics.value = cur.includes(\"error\") ? cur.filter(x => x !== \"error\") : [\"error\", ...cur];\n },\n filterToWarnings() {\n const cur = filterToDiagnostics.value\n filterToDiagnostics.value = cur.includes(\"warning\") ? cur.filter(x => x !== \"warning\") : [\"warning\", ...cur];\n },\n filterToInfos() {\n const cur = filterToDiagnostics.value\n filterToDiagnostics.value = cur.includes(\"info\") ? cur.filter(x => x !== \"info\") : [\"info\", ...cur];\n }\n}\n\nconst MERGE_COMMANDS = {\n async save(strategy: \"manual\" | \"theirs\" | \"ours\") {\n await submitChanges(\"Resolve merge conflicts\", \"\", strategy);\n }\n}\n\n\nfunction defColumnSize(field: string): number {\n const defaultColumnSize = 200;\n return {\n \"e-cigo\": 140,\n \"fuzzy set\": 140\n }[field] ?? defaultColumnSize\n}\n\n\n</script>\n\n<template>\n <BToastOrchestrator />\n\n <div :class=\"{ 'visually-hidden': mode !== 'edit' }\" class=\"editor-container\">\n <div class=\"row mb-3\">\n <div class=\"col-md-12\">\n <div class=\"card p-0\">\n <div class=\"card-body ribbon p-0 m-0\">\n <div v-if=\"isReadOnly\" class=\"ribbon-full\">\n <a :class=\"{ disabled: locked }\" :download=\"fileName\" :href=\"downloadPath\" class=\"btn-ribbon\"\n target=\"_blank\">\n <i class=\"fas fa-download\" style=\"color: cornflowerblue\"></i><br>\n Download\n </a>\n </div>\n <div v-else class=\"ribbon-full\">\n <button :disabled=\"locked || !historyService.canUndo()\" class=\"btn-ribbon\" @click=\"RIBBON.saveFile()\">\n <i class=\"fas fa-save\" style=\"color: cornflowerblue\"></i><br>\n Save\n </button>\n </div>\n <span :style=\"{ gridColumn: `span ${2 - (+isReadOnly)}` }\" class=\"ribbon-title\">Edit</span>\n\n <div v-if=\"!isReadOnly\" class=\"ribbon-small\">\n <button :disabled=\"locked || !historyService.canUndo()\" class=\"btn-ribbon\" @click=\"RIBBON.undo()\">\n <i class=\"fas fa-undo\"></i> Undo\n </button>\n <button :disabled=\"locked || !historyService.canRedo()\" class=\"btn-ribbon\" @click=\"RIBBON.redo()\">\n <i class=\"fas fa-redo\"></i> Redo\n </button>\n\n <a :class=\"{ disabled: locked }\" :download=\"fileName\" :href=\"downloadPath\" class=\"btn-ribbon\"\n target=\"_blank\">\n <i class=\"fas fa-download\" style=\"color: cornflowerblue\"></i><br>\n Download\n </a>\n </div>\n\n <div class=\"ribbon-splitter\"></div>\n\n <template v-if=\"!isReadOnly\">\n <div class=\"ribbon-full\">\n <button :disabled=\"locked\" class=\"btn-ribbon\" @click=\"RIBBON.addRow()\">\n <i class=\"fas fa-plus\" style=\"color: green\"></i><br>\n Add row\n </button>\n\n <button :disabled=\"locked || selectedRows.length <= 0\" class=\"btn-ribbon\"\n @click=\"RIBBON.deleteSelectedRows()\">\n <i class=\"fas fa-trash-alt\" style=\"color: indianred\"></i><br>\n Delete\n </button>\n </div>\n <span class=\"ribbon-title\" style=\"column-span: 2\">Data</span>\n </template>\n\n <template v-if=\"canReview\">\n <div class=\"ribbon-splitter\"></div>\n\n <div class=\"ribbon-full\">\n <button :disabled=\"locked || selectedRows.length <= 0\" class=\"btn-ribbon\"\n @click=\"RIBBON.markAsReviewed()\">\n <i class=\"fas fa-clipboard-check\" style=\"color: green\"></i><br>\n Reviewed\n </button>\n </div>\n\n <span class=\"ribbon-title\" style=\"grid-column: span 2\">Review</span>\n\n <div class=\"ribbon-small\">\n <button :disabled=\"locked\" class=\"btn-ribbon\" @click=\"RIBBON.highlightOwn()\">\n <i class=\"fas fa-user\"></i> Highlight yours\n </button>\n <button :disabled=\"locked || selectedRows.length <= 0\" class=\"btn-ribbon\"\n @click=\"RIBBON.askForReview()\">\n <i class=\"fas fa-clipboard\"></i> Ask for review\n </button>\n </div>\n </template>\n\n\n <div class=\"ribbon-splitter\"></div>\n\n\n <div class=\"ribbon-small\">\n <button :disabled=\"locked\" class=\"btn-ribbon\" @click=\"RIBBON.removeFilters()\">\n <i class=\"fas fa-filter-circle-xmark\" style=\"color: indianred\"></i> Remove filters\n </button>\n <button :disabled=\"locked || !tabulator?.getColumns()?.find(c => !c.isVisible())\" class=\"btn-ribbon\"\n @click=\"RIBBON.showHiddenColumns\">\n <i class=\"fas fa-eye\" style=\"color: cornflowerblue\"></i> Show hidden columns\n </button>\n <button :disabled=\"locked\" class=\"btn-ribbon\" @click=\"RIBBON.resetColumnWidths()\">\n <i class=\"fas fa-text-width\"></i> Reset column widths\n </button>\n </div>\n\n <span class=\"ribbon-title\">View</span>\n\n <template v-if=\"canVisualise\">\n <div class=\"ribbon-splitter\"></div>\n <div class=\"ribbon-small\">\n <button :disabled=\"locked\" class=\"btn-ribbon\" @click=\"RIBBON.visualiseSheet()\">\n <i class=\"fab fa-uncharted\" style=\"color: #198754\"></i> Sheet\n </button>\n <button :disabled=\"locked\" class=\"btn-ribbon\" @click=\"RIBBON.visualiseSelection()\">\n <i class=\"fab fa-uncharted\" style=\"color: #198754\"></i> Selection\n </button>\n </div>\n\n <span class=\"ribbon-title\">Visualise</span>\n </template>\n\n <template v-if=\"canValidate\">\n <div class=\"ribbon-splitter\"></div>\n <div class=\"ribbon-full\">\n <button :disabled=\"locked\" class=\"btn-ribbon\" @click=\"RIBBON.validate()\">\n <i class=\"fas fa-spell-check\" style=\"color: orange\"></i><br>\n Validate\n </button>\n </div>\n <span class=\"ribbon-title\" style=\"grid-column: span 2\">Validation</span>\n </template>\n\n\n <div class=\"ribbon-splitter\"></div>\n\n <div class=\"ribbon-filler\"></div>\n </div>\n </div>\n </div>\n </div>\n\n <div :style=\"showDiagnosticList ? 'height: calc(100% - 200px)' : 'height: 100%'\" class=\"row editor-row\">\n <div id=\"contentTable\" ref=\"table\" class=\"table table-bordered table-hover table-sm\"\n style=\"font-size: 0.8em; margin-bottom: 0 !important;\">\n </div>\n <div v-if=\"!tabulator\" class=\"loading-data\">\n <div class=\"loader\"></div>\n </div>\n </div>\n\n\n <template v-if=\"canValidate\">\n <button :style=\"{ bottom: showDiagnosticList ? '200px' : '0' }\" class=\"toggle-diagnostics bg-secondary\"\n @click=\"showDiagnosticList = !showDiagnosticList\">\n <template v-if=\"showDiagnosticList\">\n <i class=\"fa fa-chevron-down\"></i> Hide validation messages\n </template>\n <template v-else>\n <i class=\"fa fa-chevron-up\"></i> Show validation messages\n </template>\n </button>\n <div v-if=\"showDiagnosticList\" class=\"row border-1 border-danger overflow-scroll bg-secondary-subtle\"\n style=\"height: 200px; min-height: 200px\">\n <div class=\"diagnostics-header bg-secondary\">\n <button :class=\"{ active: filterToDiagnostics.includes('error') }\" :disabled=\"locked\"\n class=\"btn-diagnostics-filter\" @click=\"RIBBON.filterToErrors()\">\n <i class=\"fas fa-circle-xmark\" style=\"color: indianred\"></i> Errors ({{ errors.length }})\n </button>\n <button :class=\"{ active: filterToDiagnostics.includes('warning') }\" :disabled=\"locked\"\n class=\"btn-diagnostics-filter\" @click=\"RIBBON.filterToWarnings()\">\n <i class=\"fas fa-exclamation-triangle\" style=\"color: orange\"></i> Warnings ({{ warnings.length }})\n </button>\n <button :class=\"{ active: filterToDiagnostics.includes('info') }\" :disabled=\"locked\"\n class=\"btn-diagnostics-filter\" @click=\"RIBBON.filterToInfos()\">\n <i class=\"fas fa-info-circle\" style=\"color: dodgerblue\"></i> Infos ({{ infos.length }})\n </button>\n </div>\n <div class=\"diagnostics-grid\">\n <template\n v-for=\"d of allDiagnostics.filter(x => filterToDiagnostics.length === 0 || filterToDiagnostics.includes(x.type))\">\n <i :class=\"{\n 'fa-circle-xmark': d.type === 'error',\n 'fa-triangle-exclamation': d.type === 'warning',\n 'fa-info-circle': d.type === 'info',\n [`text-${d.type === 'error' ? 'danger' : d.type}`]: true\n }\" class=\"fa dg-type\"></i>\n\n <a v-if=\"d.diagnostic.row > 0\" class=\"dg-row\" @click=\"scrollAndHighlightRow(d.diagnostic.row - 2)\">Row\n {{ d.diagnostic.row - 1 }}</a>\n\n <Diagnostic :diagnostic=\"d.diagnostic\" class=\"dg-diagnostic\" format=\"inline\"></Diagnostic>\n </template>\n </div>\n </div>\n </template>\n </div>\n <div v-if=\"mode === 'merge' && mergedData !== null\" class=\"merge-container\">\n <Merger v-model=\"mergedData\" :conflicts=\"mergeConflicts\" @save=\"MERGE_COMMANDS.save\"></Merger>\n </div>\n\n <BModal v-model=\"saveDialogOpen\" title=\"Submit changes\">\n <p>\n You are about to submit changes. Please describe the changes you have made to {{ fileName }}\n </p>\n <form class=\"form\" role=\"form\">\n <div class=\"form-group\">\n <label for=\"commit-msg\">Commit message</label>\n <input id=\"commit-msg\" v-model=\"submitCommitMessage\" class=\"form-control\" name=\"commit-msg\" required\n type=\"text\">\n </div>\n <div class=\"form-group\">\n <label for=\"descr\">Detailed description</label>\n <textarea id=\"descr\" v-model=\"submitDetailedMessage\" class=\"form-control\" name=\"descr\">\n </textarea>\n </div>\n </form>\n\n <template v-slot:footer>\n <button class=\"btn btn-danger\" @click=\"submitChanges(submitCommitMessage, submitDetailedMessage)\">Submit</button>\n <button class=\"btn btn-primary\" @click=\"resetSaveDialog()\">Cancel</button>\n </template>\n </BModal>\n\n <BModal v-model=\"saving\" centered no-close-on-backdrop no-close-on-esc no-footer no-header variant=\"primary\">\n <p class=\"text-center\">\n <BSpinner class=\"m-4\" style=\"width: 5rem; height: 5rem;\" />\n </p>\n\n <h4 class=\"text-center\">Saving file..</h4>\n </BModal>\n\n <BModal v-model=\"validating\" centered no-close-on-backdrop no-close-on-esc no-footer no-header variant=\"primary\">\n <p class=\"text-center\">\n <BSpinner class=\"m-4\" style=\"width: 5rem; height: 5rem;\" />\n </p>\n\n <h4 class=\"text-center\">Validating..</h4>\n </BModal>\n</template>\n\n<style lang=\"scss\">\n.editor-container {\n height: calc(100vh - 143px);\n width: 100%;\n display: flex;\n flex-direction: column;\n\n .editor-row {\n display: flex;\n flex-flow: column;\n flex: 1 1 auto;\n overflow-y: auto;\n }\n\n .ribbon {\n position: relative;\n display: grid;\n\n grid-auto-flow: column;\n grid-auto-columns: max-content;\n grid-template-rows: 1fr 2em;\n\n &>* {\n margin: 0 2em;\n }\n\n .ribbon-base {\n grid-row: 1;\n\n padding: 4px;\n margin: 4px;\n\n button,\n .btn-ribbon {\n background: none;\n border: none;\n\n text-decoration: unset;\n text-align: center;\n color: inherit;\n\n padding: 0 4px;\n\n &:hover:not([disabled], .disabled) {\n background: #aaaaaa;\n }\n\n &.active {\n background: #c8c8c8;\n }\n\n &[disabled],\n &[disabled]:hover,\n &.disabled {\n\n &,\n i {\n color: #ccc !important;\n }\n }\n }\n }\n\n .ribbon-title {\n grid-row: 2;\n margin: 0;\n padding: 0 2em;\n width: 100%;\n\n border-top: 1px solid grey;\n\n text-align: center;\n\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n }\n\n .ribbon-small {\n @extend .ribbon-base;\n\n align-self: start;\n display: flex;\n flex-direction: column;\n\n button,\n .btn-ribbon {\n border-radius: 3px;\n\n display: grid;\n grid-template-columns: 20px auto;\n gap: 4px;\n justify-items: start;\n align-items: center;\n }\n\n }\n\n .ribbon-full {\n @extend .ribbon-base;\n\n align-self: center;\n display: flex;\n\n flex-direction: row;\n justify-content: center;\n\n button,\n .btn-ribbon {\n padding-top: 8px;\n padding-bottom: 8px;\n border-radius: 3px;\n height: 85px;\n min-width: 85px;\n\n i {\n font-size: 1.5rem;\n }\n }\n\n\n }\n\n .ribbon-splitter {\n width: var(--bs-card-border-width);\n background: var(--bs-card-border-color);\n\n grid-row: 1/3;\n\n margin: 0;\n\n }\n\n .ribbon-filler {\n grid-row: 1/3;\n\n }\n }\n\n //grid-template-rows: auto auto auto 100%;\n //grid-auto-columns: 100%;\n\n .diagnostics-grid {\n margin-top: 32px;\n display: grid;\n gap: 4px 8px;\n align-items: center;\n grid-template-columns: 16px minmax(24px, auto) 1fr;\n grid-auto-rows: min-content;\n\n .dg-type {\n grid-column: 1\n }\n\n .dg-row {\n grid-column: 2;\n cursor: pointer;\n }\n\n .dg-diagnostic {\n grid-column: 3;\n margin-bottom: 0;\n }\n }\n\n .toggle-diagnostics {\n position: absolute;\n border: none;\n left: 0;\n height: 26px;\n border-radius: 5px 5px 0 0;\n padding: 0 8px;\n }\n\n .diagnostics-header {\n display: flex;\n height: 32px;\n margin-bottom: 4px;\n position: fixed;\n }\n\n .btn-diagnostics-filter {\n background: none;\n border: none;\n padding: 0 8px !important;\n\n\n &:hover:not([disabled]) {\n background: #aaaaaa;\n }\n\n &.active {\n background: #c8c8c8;\n }\n\n &[disabled],\n &[disabled]:hover {\n i {\n color: #ccc !important;\n }\n }\n }\n\n .ose-curation-status {\n &-discussed {\n background: var(--ose-curation-status-discussed) !important;\n }\n\n &-proposed {\n background: var(--ose-curation-status-proposed) !important;\n }\n\n &-to_be_discussed {\n background: var(--ose-curation-status-to_be_discussed) !important;\n }\n\n &-in_discussion {\n background: var(--ose-curation-status-in_discussion) !important;\n }\n\n &-published {\n background: var(--ose-curation-status-published) !important;\n }\n\n &-obsolete {\n background: var(--ose-curation-status-obsolete) !important;\n }\n\n &-external {\n background: var(--ose-curation-status-external) !important;\n }\n\n &-pre_proposed {\n background: var(--ose-curation-status-pre_proposed) !important;\n }\n }\n\n .tabulator-tableholder {\n padding-bottom: 200px;\n }\n\n .tabulator-cell input[type=text] {\n background: white;\n }\n\n .tabulator.table .tabulator-row.tabulator-selected {\n background-color: grey !important;\n }\n\n .tabulator.table.highlight-assigned .assigned-to-me .tabulator-cell {\n color: black;\n font-weight: bold;\n }\n\n .tabulator.table .tabulator-row {\n box-shadow: inset 0 0 0 0 transparent;\n transition: box-shadow 500ms;\n\n border-width: 1px !important;\n\n &.highlight {\n box-shadow: inset 0 0 10px 5px #ffcb00;\n }\n }\n\n .tabulator.table {\n\n .tabulator-headers,\n .tabulator-row {\n padding-left: 0;\n }\n }\n\n .changed {\n color: #003399;\n }\n\n\n .has-error {\n color: red !important;\n font-weight: bold;\n }\n\n .loading-data {\n display: grid;\n align-items: center;\n justify-items: center;\n height: 100%;\n\n .loader {\n transform: scale(2)\n }\n }\n\n}\n</style>\n","// // add the beginning of your app entry\n// import 'vite/modulepreload-polyfill'\n\nimport {createApp} from \"vue\";\nimport Editor from \"./Editor.vue\";\nimport {createBootstrap} from 'bootstrap-vue-next'\n\n// Add the necessary CSS\nimport 'bootstrap/dist/css/bootstrap.css'\nimport 'bootstrap-vue-next/dist/bootstrap-vue-next.css'\n\nimport {$filters} from \"@ose/js-core\";\n\nconst app = createApp(Editor)\n\n\napp.use(createBootstrap())\n\napp.config.globalProperties.$filters = $filters\n\napp.mount(\"#vue-app-editor\")\n"],"names":["modalOpenClassName","useSharedModalStack","modalManagerPlugin","inject","modalManagerPluginKey","dispose","modal","updateHTMLAttrs","getSSRHandler","selector","attribute","value","el","unrefElement","tryOnScopeDispose","watch","newValue","useModalManager","modalOpen","initialValue","pushRegistry","pushStack","removeStack","stack","countStack","currentModal","getCurrentInstance","setInStack","oldValue","computed","_a","_b","toValue","isEmptySlot","_hoisted_1","_sfc_main","defineComponent","__props","props","useDefaults","slots","useSlots","colorClasses","useColorVariantClasses","computedClasses","hasLabelSlot","_ctx","_cache","openBlock","createBlock","resolveDynamicComponent","unref","normalizeClass","withCtx","createElementBlock","renderSlot","createTextVNode","toDisplayString","createCommentVNode","mergeModels","__emit","emit","element","useTemplateRef","pressedValue","useModel","computedLink","computedLinkProps","useBLinkHelper","isToggle","isButton","isBLink","nonStandardTag","linkProps","computedAriaDisabled","variantIsLinkType","variantIsLinkTypeSubset","linkValueClasses","useLinkClasses","computedTag","_sfc_main$1","clicked","e","onKeyStroke","mergeProps","Fragment","createVNode","_sfc_main$2","_hoisted_2","fallbackClassSelector","defaultModalDialogZIndex","__expose","computedId","useId","modelValue","fallbackFocusElement","okButton","cancelButton","closeButton","pickFocusItem","okButtonFocus","closeButtonFocus","cancelButtonFocus","modalFocus","onAfterEnter","showRef","renderRef","renderBackdropRef","hide","show","toggle","computedNoAnimation","transitionProps","backdropTransitionProps","isLeaving","isVisible","trapActive","contentShowing","backdropReady","backdropVisible","useShowHide","needsFallback","useActivatedFocusTrap","useSafeScrollLock","useFocus","hasHeaderCloseSlot","modalDialogClasses","bodyColorClasses","bodyClasses","headerColorClasses","headerClasses","headerCloseAttrs","footerColorClasses","footerClasses","titleClasses","disableCancel","disableOk","activePosition","activeModalCount","stackWithoutSelf","computedZIndexNumber","computedZIndex","computedZIndexBackdrop","sharedSlots","Transition","withDirectives","createElementVNode","withModifiers","$event","normalizeProps","guardReactiveProps","_sfc_main$3","_sfc_main$4","vShow","normalizeStyle","BModal","_export_sfc","debounce","func","timeout","timer","args","resolve","r","isNavigateToSheetMessage","msg","isNavigateToTermMessage","isFocusWindowMessage","isScrollToRowMessage","CoreFeature","table","data","silent","columnsChanged","force","key","oldOption","newOption","convert","Helpers","box","separator","field","structure","length","output","i","obj","clone","list","objectProto","arrayProto","subject","match","copy","item","Popup$1","Popup","parent","container","callback","touch","x","y","parentOffset","position","offset","containerOffset","origin","parentEl","coords","scrollTop","offsetHeight","Module","name","component","handler","priority","adjust","index","lookupIndex","renderInPosition","menuEl","menuContainer","content","type","defaultAccessors","params","column","row","Accessor","config","accessor","rowComponent","colComponent","defaultConfig","generateParamsList$1","prefix","serializeParams","encoded","urlBuilder","url","defaultLoaderPromise","contentType","reject","response","error","generateParamsList","defaultContentTypeFormatters","form","Ajax","ajaxParams","previousData","ajaxConfig","defaultPasteActions","defaultPasteParsers","clipboard","headerFindSuccess","columns","columnMap","rows","bindings$2","actions$2","extensions$4","Clipboard","plain","html","rowData","col","range","internal","sel","textRange","action","parser","valid","blocked","CalcComponent","target","receiver","transform","cells","cell","CellComponent","mutate","Cell","vertAligns","hozAligns","classNames","className","val","containerOnly","changed","ColumnComponent","ifVisible","to","after","toColumn","nextCol","prevCol","updates","width","result","defaultColumnOptions","Column","def","rowHeader","newCol","defaults","contentElement","titleHolderElement","titleElement","text","title","contents","dataObj","alignment","height","parentHeight","traverse","updateBranches","colDefs","visible","responsiveToggle","childWidth","child","minWidth","maxWidth","cellCount","setTo","definition","RowComponent","Row","inFragment","children","maxHeight","minHeight","updatedData","tempData","newRowData","attrname","findCell","before","toRow","blockRedraw","defaultCalculations","values","calcParams","precision","sum","unique","ColumnCalcs","viewable","fragment","left","groups","group","hasDataTreeColumnCalcs","dataTree","dataRow","pos","calcs","paramKey","results","groupObj","subGroups","subGroupResults","subgroup","DataTree","dummyEl","options","firstCol","childArray","isArray","oldControl","allChildren","sortOnly","subChildren","sub","childData","childRow","childIndex","top","recurse","csv$1","setFileContents","delimiter","fileContents","headers","json$2","pdf","header","body","autoTableParams","rowGroupStyles","rowCalcStyles","jsPDFParams","jspdfLib","doc","parseRow","styles","xlsx$1","self","sheetName","XLSXLib","workbook","tableFeatures","compression","writeOptions","generateSheet","merges","worksheet","a","b","j","sheet","s2ab","s","buf","view","html$1","jsonLines","defaultDownloaders","Download","mimeType","filename","active","interceptCallback","downloadFunc","buildLink","mime","groupHeader","newTab","blob","maskInput","mask","maskLetter","maskNumber","maskWildcard","fillSymbols","symbol","char","input","onRendered","success","cancel","editorParams","cellValue","onChange","textarea$1","vertNav","scrollHeight","heightNow","number$1","blurFunc","date$1","inputFormat","DT","convertDate","newDatetime","luxDate","time$1","luxTime","datetime$2","luxDateTime","Edit$1","editor","cellEl","clickStop","listEl","attribs","valueKeys","valueCheck","character","iteration","responseValues","placeholder","term","inputValues","option","level","sorter","as","bs","a1","b1","L","rx","rd","emptyAlign","filterFunc","matches","label","startVis","blur","star$1","maxStars","size","stars","starsHolder","star","starChange","buildStar","starHolder","nextStar","changeValue","progress$1","max","min","percent","handle","bar","mouseDrag","mouseDragWidth","updateValue","style","calcVal","tickCross$1","tristate","indetermValue","indetermState","trueValueSet","falseValueSet","setValue","checkedValue","adaptable$1","lookup","editorFunc","defaultLookup","defaultEditors","Edit","newRow","nextCell","prevRow","nextRow","prevCell","convertEmpty","block","forceEdit","topEdge","bottomEdge","rowEl","leftEdge","rightEdge","check","allowEdit","rendered","editFinished","cellEditor","mod","checkFunc","editIndex","ExportRow","indent","ExportColumn","depth","columnLookups$1","rowLookups$1","Export","colVisProp","colLookup","rowLookup","colData","maxDepth","groupData","subGroup","subGroupData","visProp","headerDepth","exportRows","parseColumnGroup","exportCols","headerEl","bodyEl","rowFormatter","setup","cellStyle","styleProps","cellWrapper","formatComponent","holder","from","fromStyle","prop","defaultFilters","filterVal","rowVal","filterParams","keywords","keyword","Filter","all","filterType","filterChangeCheck","fieldVal","colVal","reinitialize","filterElement","editorElement","typingTimer","searchTrigger","onRenderedCallback","headerPos","filter","filters","ajax","filterList","searchType","activeRows","rowList","activeRowComponents","subFilter","plaintext","formatterParams","textarea","money","floatVal","sign","number","integer","decimal","rgx","decimalSym","thousandSym","negativeSign","link","urlPrefix","download","labelTraverse","path","image","src","tickCross","empty","truthy","tick","cross","datetime$1","outputFormat","invalid","datetimediff","suffix","unit","humanize","date","starActive","starInactive","traffic","colors","color","percentValue","progress","legendAlign","legend","legendColor","barEl","barContainer","legendEl","holderEl","buttonTick","buttonCross","sizePx","containEl","switchEl","onValue","offValue","state","rownum","adaptable","formatterFunc","formatter","array$2","valueMap","json$1","multiline","replacer","defaultFormatters","Format","mockCell","entityMap","FrozenColumns","allCells","leftParents","leftMargin","rightMargin","visibleRows","otherRows","FrozenRows","frozenRows","rowType","GroupComponent","Group","groupManager","generator","oldGroup","elementsOnly","arrow","toggleElement","groupID","groupKey","toIndex","count","prev","includeChildren","GroupRows","groupBy","startOpen","langValue","lang","cols","lookupFunc","prevValue","groupRows","groupValues","toGroup","fromGroup","groupComponents","groupList","groupListData","oldGroups","newGroupNeeded","oldRowGroup","oldGroupPath","newGroupPath","samePath","groupPath","groupId","onlyGroupHeaders","defaultUndoers","defaultRedoers","bindings$1","actions$1","extensions$3","History","oldRow","HtmlTableImport","defaultOptions","attributes","optionsArr","optionsList","attrib","exists","csv","inQuote","nextChar","json","array$1","xlsx","workbook2","defaultImporters","Import","err","importFormat","importer","extension","importReader","extensions","file","reader","parsedData","firstRow","Interaction","types","added","noTouch","watchers","componentObj","defaultBindings","defaultActions","rowManager","newPos","scrollMax","Keybindings","bindings","mergedBindings","binding","bindingList","symbolsList","symbols","code","Menu","icon","headerMenuEl","menu","parentPopup","popup","itemEl","disabled","MoveColumns","colEl","startXMove","nextColWidth","prevColWidth","nextColWidthLast","prevColWidthLast","diff","moveToCol","headerElement","headersElement","movingCells","columnHolder","scrollLeft","xPos","scrollPos","defaultSenders","fromRow","toTable","defaultReceivers","fromTable","MoveRows","startYMove","nextRowHeight","prevRowHeight","nextRowHeightLast","prevRowHeightLast","moveToRow","pageX","pageY","rowHolder","yPos","connectionTables","query","dropEvent","sender","defaultMutators","Mutator","mutator","links","linkCell","pageSize","currentRow","currentPage","totalRows","totalPages","showingEl","valueEl","ofEl","totalEl","rowsEl","pages","defaultPageCounters","Page","displayRows","testElRow","testElCell","dir","margin","button","pageSizes","counter","pageCounter","hidden","pageSelectLabel","paginationCounterHolder","mode","rowCount","page","leftSize","rightSize","actualRowPageSize","start","end","actualStartRow","actualRows","paginationOutOfRange","footer","defaultReaders","id","cookie","cookiePos","defaultWriters","expireDate","Persistence","testKey","retrievedData","sorters","headerFilters","layout","keys","current","oldCols","newCols","mergeAllNew","definitions","excludedKeys","defStore","colDef","headerPopupEl","renderedCallback","contentsEl","Print","scrollX","scrollY","footerEl","tableEl","headerContent","footerContent","ReactiveData","version","arg","newRows","startRow","oldRows","childField","origFuncs","update","ResizeColumns","frozenOffset","variableHeight","nearestColumn","handleDown","oldWidth","handleEl","startDiff","moveDiff","blockedBefore","blockedAfter","colWidth","mouseX","handleX","tableX","columnX","mouseDiff","guideEl","mouseMove","mouseUp","ResizeRows","prevHandle","prevHandleDown","mouseY","handleY","tableY","rowY","ResizeTable","tableStyle","entry","nodeHeight","nodeWidth","entries","responsiveCollapse","toggleList","isOpen","collapseEl","extensions$2","ResponsiveLayout","colCount","working","mockCellComponent","titleData","valueData","node_content","titleHighlight","rowSelection","checkbox","extensions$1","SelectRow","prevSelected","selectable","endSelect","lastClickedRowIdx","rowIdx","fromRowIdx","toRowIdx","toggledRows","toggledRow","changes","rowMatch","change","rowInfo","selectedRow","selected","deselected","select","RangeComponent","Range","rangeManager","rowsCount","isRowHeader","_vDomTop","_vDomBottom","_vDomLeft","_vDomRight","bottom","right","topLeftCell","bottomRightCell","topLeftCellEl","bottomRightCellEl","topLeftRowEl","bottomRightRowEl","structured","arr","clearValue","notify","actions","pasteActions","singleCell","bounds","startCell","rowWidth","dataLength","pasteParsers","startCol","itemLength","columnLookups","rowLookups","SelectRange","frozenCols","ranges","selectedColumns","selectedColumn","_event","_to","_after","event","rangeIdx","jump","expand","moved","rangeEdge","prevRect","rowRect","rowManagerRect","columnRect","columnManagerRect","removed","reverse","emptyStart","emptySide","items","valueResolver","nextItem","currentItem","currentValue","rowPos","colPos","isStartingCellEmpty","isLeftOfStartingCellEmpty","targetCols","jumpCol","isRightOfStartingCellEmpty","isTopOfStartingCellEmpty","jumpRow","isBottomOfStartingCellEmpty","tableHolder","rect","withinHorizontalView","withinVerticalView","occupied","activeCell","activeCellEl","activeRowEl","colIdx","visibleCells","aRow","bRow","alignEmptyValues","thousand","string","locale","datetime","format","time","boolean","el1","el2","array","calc","c","d","alphanum","defaultSorters","Sort","sortList","arrowEl","newSortList","sortListActual","rowComponents","sortObj","sortEl","sorterCount","sortItem","el1Comp","el2Comp","GridCalculator","SheetComponent","Sheet","spreadsheetManager","ref","refs","wasInactive","full","rowWidths","outputWidth","outputHeight","Spreadsheet","altContainer","data1","data2","sheets","prevSheet","Tooltip","tooltip","defaultValidators","parameters","reg","cellData","Validate","previousValue","cancelled","validator","validators","failedValidators","invalidIndex","allModules","OptionsList","msgType","userOptions","warn","Renderer","includingBuffer","rowIndex","BasicHorizontal","rowFrag","VirtualDomHorizontal","buffer","old","colEnd","ex","newWidth","widthDiff","ColumnManager","renderClass","renderers","collProgress","rowSample","nextToColumn","topColumn","parentIndex","nextEl","root","fieldRoot","updateRows","fromIndex","totalWidth","fixedWidth","BasicVertical","tableFrag","rowTop","VirtualDomVertical","topRow","topOffset","topDiff","bottomDiff","topFound","bottomRow","forceMove","topPad","rowsHeight","rowHeight","heightOccupied","topPadHeight","rowFragment","renderedRows","totalRowsRendered","rowsToRender","fixedHeight","containerHeight","avgRowHeight","resized","fillableSpace","addedRows","paddingAdjust","initialized","removableRows","RowManager","leftDir","topDir","allIndex","activeIndex","displayIndex","refreshDisplayOnly","chainResult","rowOnly","skipStage","stage","cascadeOrder","chain","scrollbarWidth","initialHeight","otherHeight","FooterManager","InteractionManager","listenerMap","listener","leaveList","linkedKeys","listeners","components","comp","targets","componentMap","classList","elTargets","targetMatches","previousTarget","ComponentFunctionBinder","funcName","DataLoader","replace","requestNo","map","shouldLoad","ExternalEventBus","debug","subscribed","notifiers","callResult","InternalEventBus","fallback","subscriber","confirmed","DeprecationAdvisor","DependencyRegistry","dependency","fitData","forced","fitDataGeneral","fitDataStretch","colsWidth","tableWidth","gap","lastCol","fitColumns","flexWidth","flexGrowUnits","flexColWidth","flexColumns","fixedShrinkColumns","flexShrinkUnits","overflowWidth","gapFill","calcWidth","scaleColumns","freeSpace","shrinkCols","oversizeCols","oversizeSpace","remainingSpace","remainingFlexGrowUnits","changeUnits","undersizeCols","calcGrow","calcShrink","defaultModes","Layout","dataChanged","defaultLangs","Localize","desiredLocale","traverseLang","trans","fillPath","pathArray","rootPath","Comms","selectors","connections","connection","con","module","coreModules","TableRegistry","ModuleBinder","defaultModules","property","source","modules","core","mods","modKey","ext","propKey","orderedStartMods","orderedEndMods","unOrderedMods","Alert","Tabulator","newElement","ua","line","responses","foundRows","fromColumn","plugin","required","Tabulator$1","TabulatorFull","TabulatorFull$1","setRowColor","navigateToRow","curation_status","COLUMN_NAMES","status","CURATION_STATUS","headerMenuFactory","_","allColumns","columnDefFor","fieldName","suggestionsRef","headerMenu","onMounted","merged_data","_useModel","emits","conflicts_by_row","conflict","resolved","watchEffect","acc","v","cur","allResolved","save","saveTheirs","saveOurs","highlight","selfValue","_openBlock","_createElementBlock","_createElementVNode","_Fragment","_hoisted_4","_hoisted_5","_hoisted_6","_toDisplayString","_hoisted_7","_hoisted_8","_renderList","_hoisted_9","_normalizeClass","_createTextVNode","_hoisted_13","_vModelText","HistoryService","folder","fileName","repo","stored","history","future","jsonHistory","jsonFuture","rowPosition","columnName","oldFields","newFields","k","changeRecord","steps","subkey","getCell","ret","URL_PREFIX","showToast","removeToast","useToastController","tabulator","spreadsheetData","suggestions","tableData","tableColumns","h","filePath","fileFolder","downloadPath","urlParams","urlFilter","tableBuilt","selectedRows","showDiagnosticList","filterToDiagnostics","historyService","submitCommitMessage","submitDetailedMessage","mergeConflicts","mergedData","lock","saving","validating","verifying","locked","readOnlyMessage","isReadOnly","errors","warnings","canValidate","canReview","canVisualise","saveDialogOpen","diagnostics","allDiagnostics","infos","onBeforeUnload","onWindowSizeChanged","onKeyPress","saveChanges","onMessage","scrollAndHighlightRow","newurl","filterParam","checkForUpdatesTimer","loadData","BToast","onUnmounted","instance","messages","diagnosticHTML","DIAGNOSTIC_DATA","message","validate","checkForUpdates","f","confirmDialog","validateImmediate","toast","warning","onError","alertDialog","loadSuggestions","saveCurator","curators","rowValue","clearFormatting","sendVisualisationRequest","sendType","windowName","visualisationWindow","sheetDataToSend","toRaw","saveValidationMessage","m","resetSaveDialog","submitChanges","commitMessage","details","merge_strategy","spreadsheet","initialData","RIBBON","idNum","rowObj","prevCurationStatus","prevCurator","reviewers","cellValueData","promptDialog","defColumnSize","MERGE_COMMANDS","strategy","_createVNode","_unref","BToastOrchestrator","_hoisted_3","_hoisted_16","_hoisted_18","_hoisted_21","_hoisted_25","_hoisted_28","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_36","_hoisted_37","Diagnostic","_hoisted_38","Merger","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","BSpinner","_hoisted_43","app","createApp","Editor","createBootstrap","$filters"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,7]}