{"version":3,"file":"canvas-datagrid.debug.js","mappings":"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","sources":["webpack://canvasDatagrid/webpack/universalModuleDefinition","webpack://canvasDatagrid/./lib/button.js","webpack://canvasDatagrid/./lib/component.js","webpack://canvasDatagrid/./lib/contextMenu.js","webpack://canvasDatagrid/./lib/defaults.js","webpack://canvasDatagrid/./lib/dom.js","webpack://canvasDatagrid/./lib/draw.js","webpack://canvasDatagrid/./lib/events/index.js","webpack://canvasDatagrid/./lib/events/util.js","webpack://canvasDatagrid/./lib/groups/util.js","webpack://canvasDatagrid/./lib/intf.js","webpack://canvasDatagrid/./lib/publicMethods.js","webpack://canvasDatagrid/./lib/selections/index.js","webpack://canvasDatagrid/./lib/selections/util.js","webpack://canvasDatagrid/./lib/touch.js","webpack://canvasDatagrid/./node_modules/is-printable-key-event/dist/index.js","webpack://canvasDatagrid/webpack/bootstrap","webpack://canvasDatagrid/webpack/runtime/compat get default export","webpack://canvasDatagrid/webpack/runtime/define property getters","webpack://canvasDatagrid/webpack/runtime/hasOwnProperty shorthand","webpack://canvasDatagrid/webpack/runtime/make namespace object","webpack://canvasDatagrid/./lib/main.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"canvasDatagrid\"] = factory();\n\telse\n\t\troot[\"canvasDatagrid\"] = factory();\n})(self, function() {\nreturn ","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false, Event: false*/\n'use strict';\n\nexport default function (self) {\n  let zIndexTop;\n\n  function applyButtonMenuItemStyle(buttonMenuItemContainer) {\n    self.createInlineStyle(\n      buttonMenuItemContainer,\n      'canvas-datagrid-button-menu-item' + (self.mobile ? '-mobile' : ''),\n    );\n    buttonMenuItemContainer.addEventListener('mouseover', function () {\n      self.createInlineStyle(\n        buttonMenuItemContainer,\n        'canvas-datagrid-button-menu-item:hover',\n      );\n    });\n    buttonMenuItemContainer.addEventListener('mouseout', function () {\n      self.createInlineStyle(\n        buttonMenuItemContainer,\n        'canvas-datagrid-button-menu-item',\n      );\n    });\n  }\n\n  function applyButtonStyle(button) {\n    self.createInlineStyle(button, 'canvas-datagrid-button-wrapper');\n    button.addEventListener('mouseover', function () {\n      if (!self.buttonMenu) {\n        self.createInlineStyle(button, 'canvas-datagrid-button-wrapper:hover');\n      }\n    });\n    button.addEventListener('mouseout', function () {\n      if (!self.buttonMenu) {\n        self.createInlineStyle(button, 'canvas-datagrid-button-wrapper');\n      }\n    });\n  }\n\n  function createButton(pos, items, imgSrc) {\n    var wrapper = document.createElement('div'),\n      buttonArrow = document.createElement('div'),\n      buttonIcon = document.createElement('div'),\n      intf = {};\n\n    if (!Array.isArray(items)) {\n      throw new Error('createButton expects an array.');\n    }\n\n    function init() {\n      var loc = {},\n        s = self.scrollOffset(self.canvas);\n\n      if (zIndexTop === undefined) {\n        zIndexTop = self.style.buttonZIndex;\n      }\n\n      applyButtonStyle(wrapper);\n      self.createInlineStyle(buttonIcon, 'canvas-datagrid-button-icon');\n      self.createInlineStyle(buttonArrow, 'canvas-datagrid-button-arrow');\n\n      loc.x = pos.left - s.left;\n      loc.y = pos.top - s.top;\n      loc.height = 0;\n      zIndexTop += 1;\n      wrapper.style.position = 'absolute';\n      wrapper.style.zIndex = zIndexTop;\n      wrapper.style.left = loc.x + 'px';\n      wrapper.style.top = loc.y + 'px';\n      wrapper.left = pos.left + self.scrollBox.scrollLeft;\n      wrapper.top = pos.top + self.scrollBox.scrollTop;\n      buttonArrow.innerHTML = self.style.buttonArrowDownHTML;\n      if (imgSrc) {\n        let img = document.createElement('img');\n        img.setAttribute('src', imgSrc);\n        img.style.maxWidth = '100%';\n        img.style.height = '100%';\n        buttonIcon.appendChild(img);\n      }\n      wrapper.appendChild(buttonIcon);\n      wrapper.appendChild(buttonArrow);\n      document.body.appendChild(wrapper);\n      wrapper.addEventListener('click', toggleButtonMenu);\n    }\n\n    intf.wrapper = wrapper;\n    intf.items = items;\n    init();\n\n    intf.dispose = function () {\n      if (wrapper.parentNode) {\n        wrapper.parentNode.removeChild(wrapper);\n      }\n    };\n    return intf;\n  }\n\n  function toggleButtonMenu() {\n    function createDisposeEvent() {\n      requestAnimationFrame(function () {\n        document.addEventListener('click', self.disposeButtonMenu);\n      });\n    }\n    if (self.buttonMenu) {\n      self.disposeButtonMenu();\n    } else {\n      let pos = {\n        left: self.button.wrapper.left - self.scrollBox.scrollLeft,\n        top:\n          self.button.wrapper.top +\n          self.button.wrapper.offsetHeight -\n          self.scrollBox.scrollTop,\n      };\n      self.buttonMenu = createButtonMenu(pos, self.button.items);\n      self.createInlineStyle(\n        self.button.wrapper,\n        'canvas-datagrid-button-wrapper:active',\n      );\n      createDisposeEvent();\n    }\n  }\n\n  function createButtonMenu(pos, items) {\n    var buttonMenu = document.createElement('div'),\n      selectedIndex = -1,\n      intf = {},\n      rect;\n\n    function createItems() {\n      function addItem(item, menuItemContainer) {\n        function addContent(content) {\n          if (content === null) {\n            return;\n          }\n\n          if (typeof content === 'object') {\n            menuItemContainer.appendChild(content);\n            return;\n          }\n\n          applyButtonMenuItemStyle(menuItemContainer);\n          menuItemContainer.innerHTML = content;\n          return;\n        }\n\n        addContent(item.title);\n        item.buttonMenuItemContainer = menuItemContainer;\n\n        if (item.click) {\n          menuItemContainer.addEventListener('click', function (ev) {\n            item.click.apply(self, [ev]);\n            self.disposeButton();\n          });\n        }\n      }\n\n      for (let item of items) {\n        var buttonMenuItemContainer = document.createElement('div');\n        addItem(item, buttonMenuItemContainer);\n        buttonMenu.appendChild(buttonMenuItemContainer);\n      }\n    }\n\n    function clickIndex(idx) {\n      items[idx].buttonMenuItemContainer.dispatchEvent(new Event('click'));\n    }\n\n    function init() {\n      var loc = {},\n        s = self.scrollOffset(self.canvas);\n\n      if (zIndexTop === undefined) {\n        zIndexTop = self.style.buttonZIndex;\n      }\n\n      createItems();\n      self.createInlineStyle(\n        buttonMenu,\n        'canvas-datagrid-button-menu' + (self.mobile ? '-mobile' : ''),\n      );\n\n      loc.x = pos.left - s.left;\n      loc.y = pos.top - s.top;\n      loc.height = 0;\n      zIndexTop += 1;\n      buttonMenu.style.position = 'absolute';\n      buttonMenu.style.zIndex = zIndexTop;\n      buttonMenu.style.left = loc.x + 'px';\n      buttonMenu.style.top = loc.y + 'px';\n      document.body.appendChild(buttonMenu);\n      rect = buttonMenu.getBoundingClientRect();\n\n      if (rect.bottom > window.innerHeight) {\n        loc.y =\n          self.button.wrapper.top -\n          buttonMenu.offsetHeight -\n          self.scrollBox.scrollTop;\n        if (loc.y < 0) {\n          loc.y = self.style.buttonMenuWindowMargin;\n        }\n\n        if (\n          buttonMenu.offsetHeight >\n          window.innerHeight - self.style.buttonMenuWindowMargin\n        ) {\n          buttonMenu.style.height =\n            window.innerHeight - self.style.buttonMenuWindowMargin * 2 + 'px';\n        }\n      }\n\n      if (rect.right > window.innerWidth) {\n        loc.x -=\n          rect.right - window.innerWidth + self.style.buttonMenuWindowMargin;\n      }\n\n      if (loc.x < 0) {\n        loc.x = self.style.buttonMenuWindowMargin;\n      }\n\n      if (loc.y < 0) {\n        loc.y = self.style.buttonMenuWindowMargin;\n      }\n\n      buttonMenu.style.left = loc.x + 'px';\n      buttonMenu.style.top = loc.y + 'px';\n    }\n\n    intf.buttonMenu = buttonMenu;\n    init();\n    intf.clickIndex = clickIndex;\n    intf.rect = rect;\n    intf.items = items;\n\n    intf.dispose = function () {\n      if (buttonMenu.parentNode) {\n        buttonMenu.parentNode.removeChild(buttonMenu);\n      }\n    };\n\n    Object.defineProperty(intf, 'selectedIndex', {\n      get: function get() {\n        return selectedIndex;\n      },\n      set: function set(value) {\n        if (typeof value !== 'number' || isNaN(value) || !isFinite(value)) {\n          throw new Error('Button menu selected index must be a sane number.');\n        }\n\n        selectedIndex = value;\n\n        if (selectedIndex > items.length - 1) {\n          selectedIndex = items.length - 1;\n        }\n\n        if (selectedIndex < 0) {\n          selectedIndex = 0;\n        }\n\n        items.forEach(function (item, index) {\n          if (index === selectedIndex) {\n            return self.createInlineStyle(\n              item.buttonMenuItemContainer,\n              'canvas-datagrid-button-menu-item:hover',\n            );\n          }\n\n          self.createInlineStyle(\n            item.buttonMenuItemContainer,\n            'canvas-datagrid-button-menu-item',\n          );\n        });\n      },\n    });\n    return intf;\n  }\n\n  self.disposeButtonMenu = function () {\n    if (self.buttonMenu) {\n      document.removeEventListener('click', self.disposeButtonMenu);\n      self.buttonMenu.dispose();\n      self.buttonMenu = undefined;\n      self.createInlineStyle(\n        self.button.wrapper,\n        'canvas-datagrid-button-wrapper:hover',\n      );\n    }\n  };\n\n  self.disposeButton = function (e) {\n    if (e && e.keyCode !== 27) return;\n    document.removeEventListener('keydown', self.disposeButton);\n    zIndexTop = self.style.buttonZIndex;\n    self.disposeButtonMenu();\n\n    if (self.button) {\n      self.button.dispose();\n    }\n\n    self.button = undefined;\n  };\n\n  self.moveButtonPos = function () {\n    self.button.wrapper.style.left =\n      self.button.wrapper.left - self.scrollBox.scrollLeft + 'px';\n    self.button.wrapper.style.top =\n      self.button.wrapper.top - self.scrollBox.scrollTop + 'px';\n    self.disposeButtonMenu();\n  };\n\n  self.attachButton = function (pos, items, imgSrc) {\n    function createDisposeEvent() {\n      requestAnimationFrame(function () {\n        document.addEventListener('keydown', self.disposeButton);\n      });\n    }\n\n    if (self.button) {\n      self.disposeButton();\n    }\n\n    self.button = createButton(pos, items, imgSrc);\n    createDisposeEvent();\n  };\n  return;\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport defaults from './defaults';\n\nexport default function () {\n  var typeMap,\n    component = {};\n  component.dehyphenateProperty = function hyphenateProperty(prop) {\n    prop = prop.replace('--cdg-', '');\n    var p = '',\n      nextLetterCap;\n    Array.prototype.forEach.call(prop, function (char) {\n      if (nextLetterCap) {\n        nextLetterCap = false;\n        p += char.toUpperCase();\n        return;\n      }\n      if (char === '-') {\n        nextLetterCap = true;\n        return;\n      }\n      p += char;\n    });\n    return p;\n  };\n  component.hyphenateProperty = function hyphenateProperty(prop, cust) {\n    var p = '';\n    Array.prototype.forEach.call(prop, function (char) {\n      if (char === char.toUpperCase()) {\n        p += '-' + char.toLowerCase();\n        return;\n      }\n      p += char;\n    });\n    return (cust ? '--cdg-' : '') + p;\n  };\n  function getDefaultItem(base, item) {\n    var i = {},\n      r;\n    defaults(i);\n    r = i.defaults[base].filter(function (i) {\n      return (\n        i[0].toLowerCase() === item.toLowerCase() ||\n        component.hyphenateProperty(i[0]) === item.toLowerCase() ||\n        component.hyphenateProperty(i[0], true) === item.toLowerCase()\n      );\n    })[0];\n    return r;\n  }\n  component.applyComponentStyle = function (supressChangeAndDrawEvents, intf) {\n    if (!intf.isComponent) {\n      return;\n    }\n    var cStyle = window.getComputedStyle(\n        intf.tagName === 'CANVAS-DATAGRID' ? intf : intf.canvas,\n        null,\n      ),\n      defs = {};\n    intf.computedStyle = cStyle;\n    defaults(defs);\n    defs.defaults.styles.forEach(function (def) {\n      var val;\n      val = cStyle.getPropertyValue(component.hyphenateProperty(def[0], true));\n      if (val === '') {\n        val = cStyle.getPropertyValue(\n          component.hyphenateProperty(def[0], false),\n        );\n      }\n      if (val !== '' && typeof val === 'string') {\n        intf.setStyleProperty(\n          def[0],\n          typeMap[typeof def[1]](\n            val.replace(/^\\s+/, '').replace(/\\s+$/, ''),\n            def[1],\n          ),\n          true,\n        );\n      }\n    });\n    if (!supressChangeAndDrawEvents && intf.dispatchEvent) {\n      requestAnimationFrame(function () {\n        intf.resize(true);\n      });\n      intf.dispatchEvent('stylechanged', intf.style);\n    }\n  };\n  typeMap = {\n    data: function (strData) {\n      try {\n        return JSON.parse(strData);\n      } catch (e) {\n        throw new Error('Cannot read JSON data in canvas-datagrid data.');\n      }\n    },\n    schema: function (strSchema) {\n      try {\n        return JSON.parse(strSchema);\n      } catch (e) {\n        throw new Error(\n          'Cannot read JSON data in canvas-datagrid schema attribute.',\n        );\n      }\n    },\n    number: function (strNum, def) {\n      var n = parseInt(strNum, 10);\n      return isNaN(n) ? def : n;\n    },\n    boolean: function (strBool) {\n      return /true/i.test(strBool);\n    },\n    string: function (str) {\n      return str;\n    },\n  };\n  component.getObservableAttributes = function () {\n    var i = {},\n      attrs = ['data', 'schema', 'style', 'className', 'name'];\n    defaults(i);\n    i.defaults.attributes.forEach(function (attr) {\n      attrs.push(attr[0].toLowerCase());\n    });\n    return attrs;\n  };\n  component.disconnectedCallback = function () {\n    this.connected = false;\n  };\n  component.connectedCallback = function () {\n    var intf = this;\n    intf.parentDOMNode.innerHTML = '';\n    intf.parentDOMNode.appendChild(intf.canvas);\n    intf.connected = true;\n    component.observe(intf);\n    component.applyComponentStyle(true, intf);\n    intf.resize(true);\n  };\n  component.adoptedCallback = function () {\n    this.resize();\n  };\n  component.attributeChangedCallback = function (attrName, oldVal, newVal) {\n    var tfn,\n      intf = this,\n      def;\n    if (attrName === 'style') {\n      component.applyComponentStyle(false, intf);\n      return;\n    }\n    if (attrName === 'data') {\n      if (intf.dataType === 'application/x-canvas-datagrid') {\n        intf.dataType = 'application/json+x-canvas-datagrid';\n      }\n      intf.data = newVal;\n      return;\n    }\n    if (attrName === 'schema') {\n      intf.schema = typeMap.schema(newVal);\n      return;\n    }\n    if (attrName === 'name') {\n      intf.name = newVal;\n      return;\n    }\n    if (attrName === 'class' || attrName === 'className') {\n      return;\n    }\n    def = getDefaultItem('attributes', attrName);\n    if (def) {\n      tfn = typeMap[typeof def[1]];\n      intf.attributes[def[0]] = tfn(newVal);\n      return;\n    }\n    if (/^on/.test(attrName)) {\n      intf.addEventListener('on' + attrName, Function('e', newVal));\n    }\n    return;\n  };\n  component.observe = function (intf) {\n    var observer;\n    if (!window.MutationObserver) {\n      return;\n    }\n    intf.applyComponentStyle = function () {\n      component.applyComponentStyle(false, intf);\n      intf.resize();\n    };\n    /**\n     * Applies the computed css styles to the grid.  In some browsers, changing directives in attached style sheets does not automatically update the styles in this component.  It is necessary to call this method to update in these cases.\n     * @memberof canvasDatagrid\n     * @name applyComponentStyle\n     * @method\n     */\n    observer = new window.MutationObserver(function (mutations) {\n      var checkInnerHTML, checkStyle;\n      Array.prototype.forEach.call(mutations, function (mutation) {\n        if (\n          mutation.attributeName === 'class' ||\n          mutation.attributeName === 'style'\n        ) {\n          checkStyle = true;\n          return;\n        }\n        if (mutation.target.nodeName === 'STYLE') {\n          checkStyle = true;\n          return;\n        }\n        if (\n          mutation.target.parentNode &&\n          mutation.target.parentNode.nodeName === 'STYLE'\n        ) {\n          checkStyle = true;\n          return;\n        }\n        if (\n          mutation.target === intf &&\n          (mutation.addedNodes.length > 0 || mutation.type === 'characterData')\n        ) {\n          checkInnerHTML = true;\n        }\n      });\n      if (checkStyle) {\n        intf.applyComponentStyle(false, intf);\n      }\n      if (checkInnerHTML) {\n        if (intf.dataType === 'application/x-canvas-datagrid') {\n          intf.dataType = 'application/json+x-canvas-datagrid';\n        }\n        intf.data = intf.innerHTML;\n      }\n    });\n    observer.observe(intf, {\n      characterData: true,\n      childList: true,\n      attributes: true,\n      subtree: true,\n    });\n    Array.prototype.forEach.call(\n      document.querySelectorAll('style'),\n      function (el) {\n        observer.observe(el, {\n          characterData: true,\n          childList: true,\n          attributes: true,\n          subtree: true,\n        });\n      },\n    );\n  };\n  return component;\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false, Event: false*/\n'use strict';\n\nexport default function (self) {\n  var zIndexTop, hoverScrollTimeout, autoCompleteContext;\n  function applyContextItemStyle(contextItemContainer) {\n    self.createInlineStyle(\n      contextItemContainer,\n      'canvas-datagrid-context-menu-item' + (self.mobile ? '-mobile' : ''),\n    );\n    contextItemContainer.addEventListener('mouseover', function () {\n      self.createInlineStyle(\n        contextItemContainer,\n        'canvas-datagrid-context-menu-item:hover',\n      );\n    });\n    contextItemContainer.addEventListener('mouseout', function () {\n      self.createInlineStyle(\n        contextItemContainer,\n        'canvas-datagrid-context-menu-item',\n      );\n    });\n  }\n  function createContextMenu(ev, pos, items, parentContextMenu) {\n    var container = document.createElement('div'),\n      upArrow = document.createElement('div'),\n      downArrow = document.createElement('div'),\n      children = [],\n      selectedIndex = -1,\n      intf = {},\n      rect;\n    if (!Array.isArray(items)) {\n      throw new Error('createContextMenu expects an array.');\n    }\n    function createItems() {\n      items.forEach(function (item) {\n        var contextItemContainer = document.createElement('div'),\n          childMenuArrow;\n        function removeChildContext(e) {\n          if (\n            e.relatedTarget === container ||\n            item.contextMenu.container === e.relatedTarget ||\n            childMenuArrow === e.relatedTarget ||\n            contextItemContainer === e.relatedTarget ||\n            item.contextMenu.container.contains(e.relatedTarget)\n          ) {\n            return;\n          }\n          item.contextMenu.dispose();\n          children.splice(children.indexOf(item.contextMenu), 1);\n          item.contextMenu = undefined;\n          contextItemContainer.removeEventListener(\n            'mouseout',\n            removeChildContext,\n          );\n          container.removeEventListener('mouseout', removeChildContext);\n          contextItemContainer.setAttribute('contextOpen', '0');\n          contextItemContainer.setAttribute('opening', '0');\n        }\n        function contextAddCallback(items) {\n          // check yet again if the user hasn't moved off\n          if (\n            contextItemContainer.getAttribute('opening') !== '1' ||\n            contextItemContainer.getAttribute('contextOpen') === '1'\n          ) {\n            return;\n          }\n          var cPos = contextItemContainer.getBoundingClientRect();\n          cPos = {\n            left:\n              cPos.left +\n              self.style.childContextMenuMarginLeft +\n              container.offsetWidth,\n            top: cPos.top + self.style.childContextMenuMarginTop,\n            bottom: cPos.bottom,\n            right: cPos.right,\n          };\n          item.contextMenu = createContextMenu(ev, cPos, items, intf);\n          contextItemContainer.setAttribute('contextOpen', '1');\n          contextItemContainer.addEventListener('mouseout', removeChildContext);\n          container.addEventListener('mouseout', removeChildContext);\n          children.push(item.contextMenu);\n        }\n        function createChildContext() {\n          var i;\n          if (contextItemContainer.getAttribute('contextOpen') === '1') {\n            return;\n          }\n          contextItemContainer.setAttribute('opening', '1');\n          if (typeof item.items === 'function') {\n            i = item.items.apply(intf, [\n              function (items) {\n                contextAddCallback(items);\n              },\n            ]);\n            if (i !== undefined && Array.isArray(i)) {\n              contextAddCallback(i);\n            }\n            return;\n          }\n          contextAddCallback(item.items);\n        }\n        function addItem(item) {\n          function addContent(content) {\n            if (content === null) {\n              return;\n            }\n            if (typeof content === 'function') {\n              return addContent(content(ev));\n            }\n            if (typeof content === 'object') {\n              contextItemContainer.appendChild(content);\n              return;\n            }\n            applyContextItemStyle(contextItemContainer);\n            contextItemContainer.innerHTML = content;\n            return;\n          }\n          addContent(item.title);\n          item.contextItemContainer = contextItemContainer;\n          if (\n            (item.items && item.items.length > 0) ||\n            typeof item.items === 'function'\n          ) {\n            childMenuArrow = document.createElement('div');\n            self.createInlineStyle(\n              childMenuArrow,\n              'canvas-datagrid-context-child-arrow',\n            );\n            childMenuArrow.innerHTML = self.style.childContextMenuArrowHTML;\n            contextItemContainer.appendChild(childMenuArrow);\n            contextItemContainer.addEventListener(\n              'mouseover',\n              createChildContext,\n            );\n            contextItemContainer.addEventListener('mouseout', function () {\n              contextItemContainer.setAttribute('opening', '0');\n            });\n          }\n          if (item.click) {\n            contextItemContainer.addEventListener('click', function (ev) {\n              item.click.apply(self, [ev]);\n            });\n          }\n        }\n        addItem(item);\n        container.appendChild(contextItemContainer);\n      });\n    }\n    function clickIndex(idx) {\n      items[idx].contextItemContainer.dispatchEvent(new Event('click'));\n    }\n    function checkArrowVisibility() {\n      if (container.scrollTop > 0) {\n        self.parentDOMNode.appendChild(upArrow);\n      } else if (upArrow.parentNode) {\n        upArrow.parentNode.removeChild(upArrow);\n      }\n      if (\n        container.scrollTop >=\n          container.scrollHeight - container.offsetHeight &&\n        downArrow.parentNode\n      ) {\n        downArrow.parentNode.removeChild(downArrow);\n      } else if (\n        container.scrollHeight - container.offsetHeight > 0 &&\n        !(\n          container.scrollTop >=\n          container.scrollHeight - container.offsetHeight\n        )\n      ) {\n        self.parentDOMNode.appendChild(downArrow);\n      }\n    }\n    function fade(element) {\n      var opacity = 1;\n      var timer = setInterval(function () {\n        if (opacity <= 0.1) {\n          clearInterval(timer);\n          element.style.display = 'none';\n          if (element.parentNode) {\n            element.parentNode.removeChild(element);\n          }\n        }\n        element.style.opacity = opacity;\n        element.style.filter = 'alpha(opacity=' + opacity * 100 + ')';\n        opacity -= opacity * 0.1;\n      }, self.attributes.animationDurationHideContextMenu * 0.1);\n    }\n    function unfade(element) {\n      var opacity = 0.1;\n      element.style.display = 'block';\n      var timer = setInterval(function () {\n        if (opacity >= 1) {\n          clearInterval(timer);\n        }\n        element.style.opacity = opacity;\n        element.style.filter = 'alpha(opacity=' + opacity * 100 + ')';\n        opacity += opacity * 0.1;\n      }, self.attributes.animationDurationShowContextMenu * 0.1);\n    }\n    function startHoverScroll(type) {\n      return function t() {\n        var a = self.attributes.contextHoverScrollAmount;\n        if (type === 'up' && container.scrollTop === 0) {\n          return;\n        }\n        if (type === 'down' && container.scrollTop === container.scrollHeight) {\n          return;\n        }\n        container.scrollTop += type === 'up' ? -a : a;\n        hoverScrollTimeout = setTimeout(\n          t,\n          self.attributes.contextHoverScrollRateMs,\n          type,\n        );\n      };\n    }\n    function endHoverScroll(type) {\n      return function () {\n        clearTimeout(hoverScrollTimeout);\n      };\n    }\n    function init() {\n      var loc = {},\n        s = self.scrollOffset(self.canvas);\n      if (zIndexTop === undefined) {\n        zIndexTop = self.style.contextMenuZIndex;\n      }\n      createItems();\n      self.createInlineStyle(\n        container,\n        'canvas-datagrid-context-menu' + (self.mobile ? '-mobile' : ''),\n      );\n      loc.x = pos.left - s.left;\n      loc.y = pos.top - s.top;\n      loc.height = 0;\n      zIndexTop += 1;\n      container.style.opacity = 0;\n      container.style.position = 'absolute';\n      upArrow.style.color = self.style.contextMenuArrowColor;\n      downArrow.style.color = self.style.contextMenuArrowColor;\n      [upArrow, downArrow].forEach(function (el) {\n        el.style.textAlign = 'center';\n        el.style.position = 'absolute';\n        el.style.zIndex = zIndexTop + 1;\n      });\n      container.style.zIndex = zIndexTop;\n      if (parentContextMenu && parentContextMenu.inputDropdown) {\n        container.style.maxHeight =\n          window.innerHeight -\n          loc.y -\n          self.style.autocompleteBottomMargin +\n          'px';\n        container.style.minWidth = pos.width + 'px';\n        loc.y += pos.height;\n      }\n      if (self.mobile) {\n        container.style.width = pos.width + 'px';\n      }\n      container.style.left = loc.x + 'px';\n      container.style.top = loc.y + 'px';\n      container.addEventListener('scroll', checkArrowVisibility);\n      container.addEventListener('wheel', function (e) {\n        if (self.hasFocus) {\n          container.scrollTop += e.deltaY;\n          container.scrollLeft += e.deltaX;\n        }\n        checkArrowVisibility();\n      });\n      upArrow.innerHTML = self.style.contextMenuArrowUpHTML;\n      downArrow.innerHTML = self.style.contextMenuArrowDownHTML;\n      container.appendChild(upArrow);\n      document.body.appendChild(downArrow);\n      document.body.appendChild(container);\n      unfade(container);\n      rect = container.getBoundingClientRect();\n      // TODO: fix !(parentContextMenu && parentContextMenu.inputDropdown) state (autocomplete)\n      if (rect.bottom > window.innerHeight) {\n        if (!(parentContextMenu && parentContextMenu.inputDropdown)) {\n          loc.y -=\n            rect.bottom +\n            self.style.contextMenuWindowMargin -\n            window.innerHeight;\n        }\n        if (loc.y < 0) {\n          loc.y = self.style.contextMenuWindowMargin;\n        }\n        if (\n          container.offsetHeight >\n          window.innerHeight - self.style.contextMenuWindowMargin\n        ) {\n          container.style.height =\n            window.innerHeight - self.style.contextMenuWindowMargin * 2 + 'px';\n        }\n      }\n      if (rect.right > window.innerWidth) {\n        loc.x -=\n          rect.right - window.innerWidth + self.style.contextMenuWindowMargin;\n      }\n      if (loc.x < 0) {\n        loc.x = self.style.contextMenuWindowMargin;\n      }\n      if (loc.y < 0) {\n        loc.y = self.style.contextMenuWindowMargin;\n      }\n      container.style.left = loc.x + 'px';\n      container.style.top = loc.y + 'px';\n      rect = container.getBoundingClientRect();\n      upArrow.style.top = rect.top + 'px';\n      downArrow.style.top =\n        rect.top + rect.height - downArrow.offsetHeight + 'px';\n      upArrow.style.left = rect.left + 'px';\n      downArrow.style.left = rect.left + 'px';\n      downArrow.style.width = container.offsetWidth + 'px';\n      upArrow.style.width = container.offsetWidth + 'px';\n      downArrow.addEventListener('mouseover', startHoverScroll('down'));\n      downArrow.addEventListener('mouseout', endHoverScroll('down'));\n      upArrow.addEventListener('mouseover', startHoverScroll('up'));\n      upArrow.addEventListener('mouseout', endHoverScroll('up'));\n      checkArrowVisibility();\n    }\n    intf.parentGrid = self.intf;\n    intf.parentContextMenu = parentContextMenu;\n    intf.container = container;\n    init();\n    intf.clickIndex = clickIndex;\n    intf.rect = rect;\n    intf.items = items;\n    intf.upArrow = upArrow;\n    intf.downArrow = downArrow;\n    intf.dispose = function () {\n      clearTimeout(hoverScrollTimeout);\n      children.forEach(function (c) {\n        c.dispose();\n      });\n      [downArrow, upArrow, container].forEach(function (el) {\n        fade(el);\n      });\n    };\n    Object.defineProperty(intf, 'selectedIndex', {\n      get: function () {\n        return selectedIndex;\n      },\n      set: function (value) {\n        if (typeof value !== 'number' || isNaN(value) || !isFinite(value)) {\n          throw new Error('Context menu selected index must be a sane number.');\n        }\n        selectedIndex = value;\n        if (selectedIndex > items.length - 1) {\n          selectedIndex = items.length - 1;\n        }\n        if (selectedIndex < 0) {\n          selectedIndex = 0;\n        }\n        items.forEach(function (item, index) {\n          if (index === selectedIndex) {\n            return self.createInlineStyle(\n              item.contextItemContainer,\n              'canvas-datagrid-context-menu-item:hover',\n            );\n          }\n          self.createInlineStyle(\n            item.contextItemContainer,\n            'canvas-datagrid-context-menu-item',\n          );\n        });\n      },\n    });\n    return intf;\n  }\n  function createFilterContextMenuItems(e) {\n    var filterContainer = document.createElement('div'),\n      filterLabel = document.createElement('div'),\n      filterAutoCompleteButton = document.createElement('button'),\n      filterInput = document.createElement('input'),\n      n =\n        e.cell && e.cell.header\n          ? e.cell.header.title || e.cell.header.name\n          : '',\n      iRect;\n    function checkRegExpErrorState() {\n      filterInput.style.background = self.style.contextFilterInputBackground;\n      filterInput.style.color = self.style.contextFilterInputColor;\n      if (self.invalidFilterRegEx) {\n        filterInput.style.background =\n          self.style.contextFilterInvalidRegExpBackground;\n        filterInput.style.color = self.style.contextFilterInvalidRegExpColor;\n      }\n    }\n    function fillAutoComplete() {\n      var count = 0;\n      var items = {};\n      var blanksItem = [];\n\n      self.viewData.forEach(function (row) {\n        var cellValue =\n          row[e.cell.header.name] == null\n            ? row[e.cell.header.name]\n            : String(row[e.cell.header.name]).trim();\n        var value = self.blankValues.includes(cellValue)\n          ? self.attributes.blanksText\n          : cellValue;\n\n        if (items[value] || count > self.attributes.maxAutoCompleteItems) {\n          return;\n        }\n        count += 1;\n        items[value] = {\n          title: self.formatters[e.cell.header.type || 'string']({\n            cell: { value: value },\n          }),\n          click: function (e) {\n            filterInput.value = value;\n            e.stopPropagation();\n            filterInput.dispatchEvent(new Event('keyup'));\n            self.disposeAutocomplete();\n            return;\n          },\n        };\n      });\n\n      if (Object.keys(items).indexOf(self.attributes.blanksText) !== -1) {\n        blanksItem.push(items[self.attributes.blanksText]);\n        delete items[self.attributes.blanksText];\n      }\n\n      return blanksItem.concat(\n        Object.keys(items).map(function (key) {\n          return items[key];\n        }),\n      );\n    }\n\n    function createAutoCompleteContext(ev) {\n      if (ev && ['ArrowDown', 'ArrowUp', 'Enter', 'Tab'].includes(ev.key)) {\n        return;\n      }\n\n      var autoCompleteItems = fillAutoComplete();\n\n      iRect = filterInput.getBoundingClientRect();\n      if (autoCompleteContext) {\n        autoCompleteContext.dispose();\n        autoCompleteContext = undefined;\n      }\n      autoCompleteContext = createContextMenu(\n        e,\n        {\n          left: iRect.left,\n          top: iRect.top,\n          right: iRect.right,\n          bottom: iRect.bottom,\n          height: iRect.height,\n          width: iRect.width,\n        },\n        autoCompleteItems,\n        { inputDropdown: true },\n      );\n      autoCompleteContext.selectedIndex = 0;\n    }\n    self.createInlineStyle(filterLabel, 'canvas-datagrid-context-menu-label');\n    self.createInlineStyle(\n      filterAutoCompleteButton,\n      'canvas-datagrid-context-menu-filter-button',\n    );\n    self.createInlineStyle(\n      filterInput,\n      'canvas-datagrid-context-menu-filter-input',\n    );\n    checkRegExpErrorState();\n    filterInput.onclick = self.disposeAutocomplete;\n    filterInput.addEventListener('keydown', function (e) {\n      if (e.key === 'ArrowDown') {\n        autoCompleteContext.selectedIndex += 1;\n      }\n\n      if (e.key === 'ArrowUp') {\n        autoCompleteContext.selectedIndex -= 1;\n      }\n\n      if (e.key === 'Enter') {\n        autoCompleteContext.clickIndex(autoCompleteContext.selectedIndex);\n        self.disposeContextMenu();\n      }\n\n      if (e.key === 'Tab') {\n        autoCompleteContext.clickIndex(autoCompleteContext.selectedIndex);\n        e.preventDefault();\n      }\n\n      if (e.key === 'Escape') {\n        self.disposeContextMenu();\n      }\n    });\n    filterInput.addEventListener('keyup', function () {\n      self.setFilter(e.cell.header.name, filterInput.value);\n    });\n    filterInput.addEventListener('keyup', createAutoCompleteContext);\n    ['focus', 'blur', 'keydown', 'keyup', 'change'].forEach(function (en) {\n      filterInput.addEventListener(en, checkRegExpErrorState);\n    });\n    filterInput.value = e.cell.header\n      ? self.columnFilters[e.cell.header.name] || ''\n      : '';\n    filterLabel.innerHTML = self.attributes.filterOptionText.replace(/%s/g, n);\n    filterAutoCompleteButton.onclick = function () {\n      if (autoCompleteContext) {\n        return self.disposeAutocomplete();\n      }\n      createAutoCompleteContext();\n    };\n    filterAutoCompleteButton.innerHTML = self.style.contextFilterButtonHTML;\n    filterContainer.addEventListener('click', function (e) {\n      return e.stopPropagation();\n    });\n    filterContainer.appendChild(filterLabel);\n    filterContainer.appendChild(filterInput);\n    filterContainer.appendChild(filterAutoCompleteButton);\n    e.items.push({\n      title: filterContainer,\n    });\n    if (Object.keys(self.columnFilters).length) {\n      Object.keys(self.columnFilters).forEach(function (cf) {\n        var h = self.getHeaderByName(cf);\n        e.items.push({\n          title: self.attributes.removeFilterOptionText.replace(\n            /%s/g,\n            h.title || h.name,\n          ),\n          click: function removeFilterClick(e) {\n            e.preventDefault();\n            self.setFilter(cf, '');\n            self.controlInput.focus();\n          },\n        });\n      });\n    }\n  }\n\n  function addDefaultContextMenuItem(e) {\n    const schema = self.getSchema();\n    /**\n     * A map between columnIndex and column data\n     * @type {Map<string,any>}\n     */\n    let columns;\n    const getColumnsMap = () => {\n      if (!columns)\n        columns = new Map(schema.map((_col) => [_col.columnIndex, _col]));\n      return columns;\n    };\n    const isSorting =\n      self.orderings.columns && self.orderings.columns.length > 0;\n\n    const isNormalCell =\n      !(\n        e.cell.isBackground ||\n        e.cell.isColumnHeaderCellCap ||\n        e.cell.isScrollBar ||\n        e.cell.isCorner ||\n        e.cell.isRowHeader\n      ) && e.cell.header;\n    if (self.attributes.showFilter && isNormalCell) {\n      createFilterContextMenuItems(e);\n    }\n    if (self.attributes.showCopy && self.canSelectionsBeCopied()) {\n      e.items.push({\n        title: self.attributes.copyText,\n        click: function () {\n          document.execCommand('copy');\n          self.disposeContextMenu();\n          self.controlInput.focus();\n        },\n      });\n    }\n    if (self.attributes.showPaste && self.clipBoardData) {\n      e.items.push({\n        title: self.attributes.pasteText,\n        click: function () {\n          // Original function call:\n          // self.paste(self.clipBoardData, e.cell.columnIndex, e.cell.rowIndex);\n          // We can remove the last two parameters follow\n          // because this function only need one parameter by following the function declaration\n          self.paste(self.clipBoardData);\n          self.draw();\n        },\n      });\n    }\n    if (self.attributes.showColumnSelector) {\n      e.items.push({\n        title: self.attributes.columnSelectorText,\n        items: function () {\n          var d = [];\n          self.getSchema().forEach(function (column) {\n            function toggleColumnVisibility(e) {\n              column.hidden = !column.hidden;\n              self.dispatchEvent('togglecolumn', {\n                column: column,\n                hidden: column.hidden,\n              });\n              e.preventDefault();\n              self.stopPropagation(e);\n              self.disposeContextMenu();\n              self.resize(true);\n              self.setStorageData();\n            }\n            var el = document.createElement('div');\n            applyContextItemStyle(el);\n            el.addEventListener('touchstart', toggleColumnVisibility);\n            el.addEventListener('click', toggleColumnVisibility);\n            el.innerHTML =\n              (column.hidden\n                ? self.attributes.columnSelectorHiddenText\n                : self.attributes.columnSelectorVisibleText) +\n              (column.title || column.name);\n            d.push({\n              title: el,\n            });\n          });\n          return d;\n        },\n      });\n      if (e.cell && e.cell.header && e.cell.columnIndex > -1) {\n        // This variable represents the order index because of the following codes from `draw.js`:\n        //     columnIndex: columnOrderIndex,\n        const columnOrderIndex = e.cell.columnIndex;\n        const columnIndex = self.orders.columns[columnOrderIndex];\n\n        const contiguousColumns = self.getSelectedContiguousColumns(schema);\n        let title = '';\n        if (contiguousColumns) {\n          title = contiguousColumns\n            .map((col) => col.title || col.name)\n            .join('-');\n        } else {\n          const column = schema[columnIndex];\n          if (column) title = column.title || column.name;\n        }\n        e.items.push({\n          title: self.attributes.hideColumnText.replace(/%s/gi, title),\n          click: function (ev) {\n            ev.preventDefault();\n            self.stopPropagation(ev);\n            self.disposeContextMenu();\n            if (contiguousColumns) {\n              self.hideColumns(\n                contiguousColumns[0].orderIndex,\n                contiguousColumns[1].orderIndex,\n              );\n            } else {\n              self.hideColumns(columnOrderIndex);\n            }\n          },\n        });\n      }\n    }\n    if (\n      self.attributes.saveAppearance &&\n      self.attributes.showClearSettingsOption &&\n      (Object.keys(self.sizes.rows).length > 0 ||\n        Object.keys(self.sizes.columns).length > 0)\n    ) {\n      e.items.push({\n        title: self.attributes.clearSettingsOptionText,\n        click: function (e) {\n          e.preventDefault();\n          self.sizes.rows = {};\n          self.sizes.columns = {};\n          self.createRowOrders();\n          self.createColumnOrders();\n          self.storedSettings = undefined;\n          self.dispatchEvent('resizecolumn', {\n            columnWidth: self.style.cellWidth,\n          });\n          self.dispatchEvent('resizerow', {\n            cellHeight: self.style.cellHeight,\n          });\n          self.setStorageData();\n          self.resize(true);\n          self.disposeContextMenu();\n          self.controlInput.focus();\n        },\n      });\n    }\n    if (\n      self.attributes.allowSorting &&\n      self.attributes.showOrderByOption &&\n      isNormalCell\n    ) {\n      e.items.push({\n        title: self.attributes.showOrderByOptionTextAsc.replace(\n          '%s',\n          e.cell.header.title || e.cell.header.name,\n        ),\n        click: function (ev) {\n          ev.preventDefault();\n          self.order(e.cell.header.name, 'asc');\n          self.controlInput.focus();\n        },\n      });\n      e.items.push({\n        title: self.attributes.showOrderByOptionTextDesc.replace(\n          '%s',\n          e.cell.header.title || e.cell.header.name,\n        ),\n        click: function (ev) {\n          ev.preventDefault();\n          self.order(e.cell.header.name, 'desc');\n          self.disposeContextMenu();\n          self.controlInput.focus();\n        },\n      });\n    }\n\n    //#region hide rows\n    const canHideRows = !isSorting && e.cell.isRowHeader && e.cell.header;\n    if (canHideRows) {\n      const range = self.getSelectedContiguousRows(true);\n      if (range) {\n        const boundRowIndexes = range.map((viewRowIndex) =>\n          self.getBoundRowIndexFromViewRowIndex(viewRowIndex),\n        );\n        let title;\n        if (boundRowIndexes.length === 1) {\n          if (typeof boundRowIndexes[0] === 'number')\n            title = boundRowIndexes[0] + 1;\n          else title = range[0] + 1;\n\n          title = self.attributes.showHideRow.replace('%s', title);\n          // hide one row\n          e.items.push({\n            title,\n            click: function (ev) {\n              ev.preventDefault();\n              self.hideRows(boundRowIndexes[0], boundRowIndexes[0]);\n            },\n          });\n        } else if (boundRowIndexes[0] <= boundRowIndexes[1]) {\n          title = boundRowIndexes\n            .map((it, index) => {\n              if (typeof it === 'number') return it + 1;\n              return range[index] + 1;\n            })\n            .join('-');\n          title = self.attributes.showHideRows.replace('%s', title);\n          // hide rows\n          e.items.push({\n            title,\n            click: function (ev) {\n              ev.preventDefault();\n              self.hideRows(boundRowIndexes[0], boundRowIndexes[1]);\n            },\n          });\n        }\n      }\n    }\n    //#endregion hide rows\n\n    //#region group/ungroup columns\n    const groupAreaHeight = self.getColumnGroupAreaHeight();\n    const groupAreaWidth = self.getRowGroupAreaWidth();\n    const setCollapseStateForAllGroups = (allGroups, collapsed) => {\n      if (allGroups.length === 0) return;\n      for (let i = 0; i < allGroups.length; i++) {\n        const groups = allGroups[i];\n        for (let j = 0; j < groups.length; j++) {\n          const group = groups[j];\n          group.collapsed = collapsed;\n        }\n      }\n      self.refresh();\n    };\n    if (e.pos && e.pos.y < groupAreaHeight) {\n      e.items.push({\n        title: self.attributes.showRemoveAllGroupColumns,\n        click: function (ev) {\n          ev.preventDefault();\n          self.groupedColumns = [];\n          self.refresh();\n        },\n      });\n      e.items.push({\n        title: self.attributes.showExpandAllGroupColumns,\n        click: function (ev) {\n          ev.preventDefault();\n          setCollapseStateForAllGroups(self.groupedColumns, false);\n        },\n      });\n      e.items.push({\n        title: self.attributes.showCollapseAllGroupColumns,\n        click: function (ev) {\n          ev.preventDefault();\n          setCollapseStateForAllGroups(self.groupedColumns, true);\n        },\n      });\n    }\n    if (e.pos && e.pos.x < groupAreaWidth) {\n      e.items.push({\n        title: self.attributes.showRemoveAllGroupRows,\n        click: function (ev) {\n          ev.preventDefault();\n          self.groupedRows = [];\n          self.refresh();\n        },\n      });\n      e.items.push({\n        title: self.attributes.showExpandAllGroupRows,\n        click: function (ev) {\n          ev.preventDefault();\n          setCollapseStateForAllGroups(self.groupedRows, false);\n        },\n      });\n      e.items.push({\n        title: self.attributes.showCollapseAllGroupRows,\n        click: function (ev) {\n          ev.preventDefault();\n          setCollapseStateForAllGroups(self.groupedRows, true);\n        },\n      });\n    }\n\n    const canGroupByColumns =\n      self.attributes.allowGroupingColumns &&\n      e.cell.isColumnHeader &&\n      e.cell.header &&\n      e.cell.header.index > 0;\n    const canUngroupColumns =\n      self.attributes.allowGroupingColumns && e.cell.isColumnHeader;\n    const canGroupByRows =\n      !isSorting &&\n      self.attributes.allowGroupingRows &&\n      e.cell.isRowHeader &&\n      e.cell.header;\n    const canUngroupRows =\n      self.attributes.allowGroupingRows && e.cell.isRowHeader;\n\n    if (canGroupByColumns) {\n      /** @type {number[]} */\n      const groupIndexes = [];\n      /** @type {number} */\n      const headerIndex = e.cell.header.index;\n      let col = headerIndex;\n      for (; col >= 0; col--) {\n        if (!self.isColumnSelected(col)) break;\n        groupIndexes[0] = col;\n      }\n      for (col = headerIndex; ; col++) {\n        if (!self.isColumnSelected(col)) break;\n        groupIndexes[1] = col;\n      }\n      if (\n        col !== headerIndex &&\n        groupIndexes.length === 2 &&\n        groupIndexes[1] > groupIndexes[0] &&\n        self.isNewGroupRangeValid(\n          self.groupedColumns,\n          groupIndexes[0],\n          groupIndexes[1],\n        )\n      ) {\n        const columns = getColumnsMap();\n        const groupTitles = [];\n        const groupNames = [];\n        for (let i = 0; i < groupIndexes.length; i++) {\n          const columnIndex = groupIndexes[i];\n          const column = columns.get(columnIndex);\n          if (column) {\n            groupNames.push(column.name);\n            groupTitles.push(column.title || column.name || column.index);\n          }\n        }\n        if (groupNames[0] && groupNames[1]) {\n          // show group options\n          e.items.push({\n            title: self.attributes.showGroupColumns.replace(\n              '%s',\n              groupTitles[0] + '-' + groupTitles[1],\n            ),\n            click: function (ev) {\n              ev.preventDefault();\n              self.groupColumns(groupNames[0], groupNames[1]);\n              self.controlInput.focus();\n            },\n          });\n        }\n      }\n    }\n    if (canUngroupColumns) {\n      const columnIndex = e.cell.columnIndex;\n      const groups = self.getGroupsColumnBelongsTo(columnIndex);\n      const columns = getColumnsMap();\n      for (let i = 0; i < groups.length; i++) {\n        const { from, to } = groups[i];\n        const cell0 = columns.get(from);\n        const cell1 = columns.get(to);\n        if (cell0 && cell1) {\n          const formatArgs =\n            (cell0.title || cell0.name || cell0.index) +\n            '-' +\n            (cell1.title || cell1.name || cell1.index);\n          e.items.push({\n            title: self.attributes.showRemoveGroupColumns.replace(\n              '%s',\n              formatArgs,\n            ),\n            click: function (ev) {\n              ev.preventDefault();\n              self.removeGroupColumns(cell0.name, cell1.name);\n              self.controlInput.focus();\n            },\n          });\n        } else {\n          console.warn(`Cannot find column ${from} or column ${to}`);\n        }\n      }\n    }\n    if (canGroupByRows) {\n      const range = self.getSelectedContiguousRows(false) || [];\n      const rangeTitle = range\n        .map((rowIndex) => {\n          const index = self.getBoundRowIndexFromViewRowIndex(rowIndex);\n          if (typeof index === 'number') return index + 1;\n          return rowIndex + 1;\n        })\n        .join('-');\n      if (\n        range.length === 2 &&\n        self.isNewGroupRangeValid(self.groupedRows, range[0], range[1])\n      ) {\n        e.items.push({\n          title: self.attributes.showGroupRows.replace('%s', rangeTitle),\n          click: function (ev) {\n            ev.preventDefault();\n            self.groupRows(range[0], range[1]);\n          },\n        });\n      }\n    }\n    if (canUngroupRows) {\n      const rowIndex = e.cell.rowIndex;\n      const groups = self.getGroupsRowBelongsTo(rowIndex);\n      for (let i = 0; i < groups.length; i++) {\n        const { from, to } = groups[i];\n        const rangeTitle = [from, to]\n          .map((rowIndex) => {\n            const index = self.getBoundRowIndexFromViewRowIndex(rowIndex);\n            if (typeof index === 'number') return index + 1;\n            return rowIndex + 1;\n          })\n          .join('-');\n        e.items.push({\n          title: self.attributes.showRemoveGroupRows.replace('%s', rangeTitle),\n          click: function (ev) {\n            ev.preventDefault();\n            self.removeGroupRows(from, to);\n            self.controlInput.focus();\n          },\n        });\n      }\n    }\n    //#endregion group/ungroup columns\n  }\n  self.disposeAutocomplete = function () {\n    if (autoCompleteContext) {\n      autoCompleteContext.dispose();\n      autoCompleteContext = undefined;\n    }\n  };\n  self.disposeContextMenu = function (event) {\n    document.removeEventListener('click', self.disposeContextMenu);\n    zIndexTop = self.style.contextMenuZIndex;\n    self.disposeAutocomplete();\n    if (self.contextMenu) {\n      self.contextMenu.dispose();\n    }\n    self.contextMenu = undefined;\n    if (event) {\n      self.canvas.focus();\n      self.mousedown(event);\n      self.mouseup(event);\n    }\n  };\n  self.contextmenuEvent = function (e, overridePos) {\n    if (!self.hasFocus && e.target !== self.canvas) {\n      return;\n    }\n    // don't create context menu for parents if current position is located in child grid\n    const children = Object.keys(self.childGrids);\n    for (let i = 0; i < children.length; i++) {\n      const childGrid = self.childGrids[children[i]];\n      const parentNode = childGrid && childGrid.parentNode;\n      if (!parentNode) continue;\n      const { offsetLeft, offsetWidth, offsetTop, offsetHeight } = parentNode;\n      if ((e.x >= offsetLeft && e.x <= offsetLeft + offsetWidth) === false)\n        continue;\n      if ((e.y >= offsetTop && e.y <= offsetTop + offsetHeight) === false)\n        continue;\n      return; // in child grid\n    }\n    // don't create context menu for child if current position is located in parent grid\n    if (self.isChildGrid && self.parentNode) {\n      //#region check is current child grid closed\n      const childGridsOfParent = self.parentGrid && self.parentGrid.childGrids;\n      if (!childGridsOfParent || !Array.isArray(childGridsOfParent)) return;\n      const matchedMe = childGridsOfParent.find((grid) => {\n        const nodeA = grid.parentNode;\n        const nodeB = self.parentNode;\n        return (\n          nodeA.offsetTop == nodeB.offsetTop &&\n          nodeA.offsetLeft === nodeB.offsetLeft\n        );\n      });\n      if (!matchedMe) return;\n      //#endregion\n\n      let x0 = self.parentNode.offsetLeft;\n      let x1 = self.parentNode.offsetLeft + self.parentNode.offsetWidth;\n      let y0 = self.parentNode.offsetTop;\n      let y1 = self.parentNode.offsetTop + self.parentNode.offsetHeight;\n      let node = self.parentNode.parentNode;\n      while (node) {\n        const { offsetLeft, offsetWidth, offsetTop, offsetHeight } = node;\n        if (offsetLeft > x0) x0 = offsetLeft;\n        if (offsetTop > y0) y0 = offsetTop;\n        const newX1 = offsetLeft + offsetWidth;\n        const newY1 = offsetTop + offsetHeight;\n        if (newX1 < x1) x1 = newX1;\n        if (newY1 < y1) y1 = newY1;\n        if (node.nodeType !== 'canvas-datagrid-tree') break;\n        node = node.parentNode;\n      }\n      if ((e.x >= x0 && e.x <= x1 && e.y >= y0 && e.y <= y1) === false) return;\n    }\n    function createDisposeEvent() {\n      requestAnimationFrame(function () {\n        document.addEventListener('click', self.disposeContextMenu);\n        window.removeEventListener('mouseup', createDisposeEvent);\n      });\n    }\n    var contextPosition,\n      items = [],\n      pos = overridePos || self.getLayerPos(e),\n      ev = {\n        NativeEvent: e,\n        cell: self.getCellAt(pos.x, pos.y),\n        pos,\n        items: items,\n      };\n    if (!ev.cell.isGrid) {\n      addDefaultContextMenuItem(ev);\n    }\n    if (e.type !== 'mousedown' && self.dispatchEvent('contextmenu', ev)) {\n      return;\n    }\n    if (!ev.cell.isGrid) {\n      if (self.contextMenu) {\n        self.disposeContextMenu();\n      }\n      contextPosition = {\n        left:\n          pos.x +\n          pos.rect.left +\n          self.style.contextMenuMarginLeft +\n          self.canvasOffsetLeft,\n        top:\n          pos.y +\n          pos.rect.top +\n          self.style.contextMenuMarginTop +\n          self.canvasOffsetTop,\n        right: ev.cell.width + ev.cell.x + pos.rect.left,\n        bottom: ev.cell.height + ev.cell.y + pos.rect.top,\n        height: ev.cell.height,\n        width: ev.cell.width,\n      };\n      if (self.mobile) {\n        contextPosition.left = self.style.mobileContextMenuMargin + 'px';\n        contextPosition.width =\n          self.width - self.style.mobileContextMenuMargin * 2 + 'px';\n      }\n      if (e.type == 'mousedown') {\n        contextPosition.top += self.style.filterButtonMenuOffsetTop;\n      }\n      self.contextMenu = createContextMenu(ev, contextPosition, items);\n      if (e.type == 'mousedown') {\n        window.addEventListener('mouseup', createDisposeEvent);\n      } else {\n        createDisposeEvent();\n      }\n      e.preventDefault();\n    }\n  };\n  return;\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n\n'use strict';\nexport default function (self) {\n  self.defaults = {\n    attributes: [\n      ['allowColumnReordering', true],\n      ['allowColumnResize', true],\n      ['allowColumnResizeFromCell', false],\n      ['allowFreezingRows', false],\n      ['allowFreezingColumns', false],\n      ['allowMovingSelection', true],\n      ['allowRowHeaderResize', true],\n      ['allowRowReordering', false],\n      ['allowRowResize', true],\n      ['allowRowResizeFromCell', false],\n      ['allowSorting', true],\n      ['allowGroupingRows', true],\n      ['allowGroupingColumns', true],\n      ['animationDurationShowContextMenu', 50],\n      ['animationDurationHideContextMenu', 50],\n      ['autoGenerateSchema', false],\n      ['autoResizeColumns', false],\n      ['autoResizeRows', false],\n      ['autoScrollOnMousemove', false],\n      ['autoScrollMargin', 5],\n      ['allowShrinkingSelection', false],\n      ['blanksText', '(Blanks)'],\n      ['borderDragBehavior', 'none'],\n      ['borderResizeZone', 10],\n      ['clearCellsWhenShrinkingSelection', false],\n      ['clearSettingsOptionText', 'Clear saved settings'],\n      ['columnHeaderClickBehavior', 'sort'],\n      ['columnSelectorHiddenText', '&nbsp;&nbsp;&nbsp;'],\n      ['columnSelectorText', 'Add/Remove columns'],\n      ['columnSelectorVisibleText', '\\u2713'],\n      ['contextHoverScrollAmount', 2],\n      ['contextHoverScrollRateMs', 5],\n      ['copyHeadersOnSelectAll', true],\n      ['copyText', 'Copy'],\n      ['debug', false],\n      ['editable', true],\n      ['ellipsisText', '...'],\n      ['filterOptionText', 'Filter %s'],\n      ['filterTextPrefix', '(filtered) '],\n      ['filterFrozenRows', true],\n      ['globalRowResize', false],\n      ['hideColumnText', 'Hide %s'],\n      ['showUnhideColumnsIndicator', false],\n      ['showUnhideRowsIndicator', false],\n      ['showHideRow', 'Hide row %s'],\n      ['showHideRows', 'Hide rows %s'],\n      ['hoverMode', 'cell'],\n      ['keepFocusOnMouseOut', false],\n      ['maxAutoCompleteItems', 200],\n      ['multiLine', false],\n      ['name', ''],\n      ['pageUpDownOverlap', 1],\n      ['pasteText', 'Paste'],\n      ['persistantSelectionMode', false],\n      ['removeFilterOptionText', 'Remove filter on %s'],\n      ['reorderDeadZone', 3],\n      ['resizeAfterDragged', false],\n      ['resizeScrollZone', 20],\n      ['rowGrabZoneSize', 5],\n      ['columnGrabZoneSize', 30],\n      ['saveAppearance', true],\n      ['scrollAnimationPPSThreshold', 0.75],\n      ['scrollPointerLock', false],\n      ['scrollRepeatRate', 75],\n      ['selectionFollowsActiveCell', false],\n      ['selectionHandleBehavior', 'none'],\n      ['selectionMode', 'cell'],\n      ['selectionScrollIncrement', 20],\n      ['selectionScrollZone', 20],\n      ['showClearSettingsOption', true],\n      ['showColumnHeaders', true],\n      ['showColumnSelector', true],\n      ['showCopy', false],\n      ['showFilter', true],\n      ['showFilterInCell', false],\n      ['showNewRow', false],\n      ['showOrderByOption', true],\n      ['showOrderByOptionTextAsc', 'Order by %s ascending'],\n      ['showOrderByOptionTextDesc', 'Order by %s descending'],\n      //#region grouping\n      ['showGroupColumns', 'Group columns %s'],\n      ['showGroupRows', 'Group rows %s'],\n      ['showRemoveGroupColumns', 'Remove group %s'],\n      ['showRemoveGroupRows', 'Remove group %s'],\n      ['showRemoveAllGroupColumns', 'Remove all column groups'],\n      ['showRemoveAllGroupRows', 'Remove all row groups'],\n      ['showExpandAllGroupColumns', 'Expand all column groups'],\n      ['showExpandAllGroupRows', 'Expand all row groups'],\n      ['showCollapseAllGroupColumns', 'Collapse all column groups'],\n      ['showCollapseAllGroupRows', 'Collapse all row groups'],\n      ['columnGroupIndicatorPosition', 'right'],\n      ['rowGroupIndicatorPosition', 'bottom'],\n      //#endregion grouping\n      ['showPaste', false],\n      ['showPerformance', false],\n      ['showRowHeaders', true],\n      ['showRowNumbers', true],\n      ['showRowNumberGaps', true],\n      ['singleSelectionMode', false],\n      ['snapToRow', false],\n      ['sortFrozenRows', true],\n      ['touchContextMenuTimeMs', 800],\n      ['touchDeadZone', 3],\n      ['touchEasingMethod', 'easeOutQuad'],\n      ['touchReleaseAcceleration', 1000],\n      ['touchReleaseAnimationDurationMs', 2000],\n      ['touchScrollZone', 20],\n      ['touchSelectHandleZone', 20],\n      ['touchZoomSensitivity', 0.005],\n      ['touchZoomMin', 0.5],\n      ['touchZoomMax', 1.75],\n      ['maxPixelRatio', 2],\n      ['tree', false],\n      ['treeHorizontalScroll', false],\n      ['rowTree', []],\n      ['rowTreeColIndex', 0],\n      ['columnTree', []],\n      ['columnTreeRowStartIndex', 0],\n      ['columnTreeRowEndIndex', 0],\n    ],\n    styles: [\n      ['activeCellBackgroundColor', 'rgba(255, 255, 255, 1)'],\n      ['activeCellBorderColor', 'rgba(110, 168, 255, 1)'],\n      ['activeCellBorderWidth', 1],\n      ['activeCellColor', 'rgba(0, 0, 0, 1)'],\n      ['activeCellFont', '16px sans-serif'],\n      ['activeCellHoverBackgroundColor', 'rgba(255, 255, 255, 1)'],\n      ['activeCellHorizontalAlignment', 'left'],\n      ['activeCellHoverColor', 'rgba(0, 0, 0, 1)'],\n      ['activeCellOverlayBorderColor', 'rgba(66, 133, 244, 1)'],\n      ['activeCellOverlayBorderWidth', 1],\n      ['activeCellPaddingBottom', 5],\n      ['activeCellPaddingLeft', 5],\n      ['activeCellPaddingRight', 5],\n      ['activeCellPaddingTop', 5],\n      ['activeCellSelectedBackgroundColor', 'rgba(236, 243, 255, 1)'],\n      ['activeCellSelectedColor', 'rgba(0, 0, 0, 1)'],\n      ['activeCellVerticalAlignment', 'center'],\n      ['activeColumnHeaderCellBackgroundColor', 'rgba(225, 225, 225, 1)'],\n      ['activeColumnHeaderCellColor', 'rgba(0, 0, 0, 1)'],\n      ['activeRowHeaderCellBackgroundColor', 'rgba(225, 225, 225, 1)'],\n      ['activeRowHeaderCellColor', 'rgba(0, 0, 0, 1)'],\n      ['autocompleteBottomMargin', 60],\n      ['autosizeHeaderCellPadding', 8],\n      ['autosizePadding', 5],\n      ['buttonActiveBackgroundColor', 'rgba(255, 255, 255, 1)'],\n      ['buttonActiveBorderColor', 'rgba(110, 168, 255, 1)'],\n      ['buttonArrowColor', 'rgba(50, 50, 50, 1)'],\n      ['buttonArrowDownHTML', '&#x25BC;'],\n      ['buttonZIndex', 10000],\n      ['buttonBackgroundColor', 'rgba(255, 255, 255, 1)'],\n      ['buttonBorderColor', 'rgba(172, 172, 172, 1)'],\n      ['buttonHoverBackgroundColor', 'rgba(240, 240, 240, 1)'],\n      ['buttonMenuWindowMargin', 30],\n      ['buttonPadding', '3px'],\n      ['cellAutoResizePadding', 13],\n      ['cellBackgroundColor', 'rgba(255, 255, 255, 1)'],\n      ['cellBorderColor', 'rgba(195, 199, 202, 1)'],\n      ['cellBorderWidth', 1],\n      ['cellColor', 'rgba(0, 0, 0, 1)'],\n      ['cellFont', '16px sans-serif'],\n      ['cellGridHeight', 250],\n      ['cellHeight', 24],\n      ['cellHeightWithChildGrid', 150],\n      ['cellHorizontalAlignment', 'left'],\n      ['cellHoverBackgroundColor', 'rgba(255, 255, 255, 1)'],\n      ['cellHoverColor', 'rgba(0, 0, 0, 1)'],\n      ['cellPaddingBottom', 5],\n      ['cellPaddingLeft', 5],\n      ['cellPaddingRight', 5],\n      ['cellPaddingTop', 5],\n      ['cellSelectedBackgroundColor', 'rgba(236, 243, 255, 1)'],\n      ['cellSelectedColor', 'rgba(0, 0, 0, 1)'],\n      ['cellTreeIconBorderColor', 'rgba(162, 174, 207, 1)'],\n      ['cellTreeIconFillColor', 'rgba(240, 240, 240, 1)'],\n      ['cellTreeIconHoverFillColor', 'rgba(198, 217, 233, 1)'],\n      ['cellTreeIconLineColor', 'rgba(43, 53, 81, 1)'],\n      ['cellTreeIconLineWidth', 1.5],\n      ['cellTreeIconMarginLeft', 0],\n      ['cellTreeIconMarginRight', 5],\n      ['cellTreeIconMarginTop', 6],\n      ['cellTreeIconWidth', 13],\n      ['cellVerticalAlignment', 'center'],\n      ['cellWidth', 250],\n      ['cellWidthWithChildGrid', 250],\n      ['cellWhiteSpace', 'nowrap'],\n      ['cellLineHeight', 1],\n      ['cellLineSpacing', 3],\n      ['childContextMenuArrowColor', 'rgba(43, 48, 43, 1)'],\n      ['childContextMenuArrowHTML', '&#x25BA;'],\n      ['childContextMenuMarginLeft', -11],\n      ['childContextMenuMarginTop', -6],\n      ['columnGroupRowHeight', 25],\n      ['columnHeaderCellBackgroundColor', 'rgba(240, 240, 240, 1)'],\n      ['columnHeaderCellBorderColor', 'rgba(172, 172, 172, 1)'],\n      ['columnHeaderCellBorderWidth', 1],\n      ['columnHeaderCellCapBackgroundColor', 'rgba(240, 240, 240, 1)'],\n      ['columnHeaderCellCapBorderColor', 'rgba(172, 172, 172, 1)'],\n      ['columnHeaderCellCapBorderWidth', 1],\n      ['columnHeaderCellColor', 'rgba(50, 50, 50, 1)'],\n      ['columnHeaderCellFont', '16px sans-serif'],\n      ['columnHeaderCellHeight', 25],\n      ['columnHeaderCellHorizontalAlignment', 'left'],\n      ['columnHeaderCellHoverBackgroundColor', 'rgba(235, 235, 235, 1)'],\n      ['columnHeaderCellHoverColor', 'rgba(0, 0, 0, 1)'],\n      ['columnHeaderCellPaddingBottom', 5],\n      ['columnHeaderCellPaddingLeft', 5],\n      ['columnHeaderCellPaddingRight', 5],\n      ['columnHeaderCellPaddingTop', 5],\n      ['columnHeaderCellVerticalAlignment', 'center'],\n      ['columnHeaderOrderByArrowBorderColor', 'rgba(195, 199, 202, 1)'],\n      ['columnHeaderOrderByArrowBorderWidth', 1],\n      ['columnHeaderOrderByArrowColor', 'rgba(155, 155, 155, 1)'],\n      ['columnHeaderOrderByArrowHeight', 8],\n      ['columnHeaderOrderByArrowMarginLeft', 0],\n      ['columnHeaderOrderByArrowMarginRight', 5],\n      ['columnHeaderOrderByArrowMarginTop', 6],\n      ['columnHeaderOrderByArrowWidth', 13],\n      ['contextFilterButtonBorder', 'solid 1px rgba(158, 163, 169, 1)'],\n      ['contextFilterButtonBorderRadius', '3px'],\n      ['contextFilterButtonHTML', '&#x25BC;'],\n      ['contextFilterInputBackground', 'rgba(255,255,255,1)'],\n      ['contextFilterInputBorder', 'solid 1px rgba(158, 163, 169, 1)'],\n      ['contextFilterInputBorderRadius', '0'],\n      ['contextFilterInputColor', 'rgba(0,0,0,1)'],\n      ['contextFilterInputFontFamily', 'sans-serif'],\n      ['contextFilterInputFontSize', '14px'],\n      ['contextFilterInvalidRegExpBackground', 'rgba(180, 6, 1, 1)'],\n      ['contextFilterInvalidRegExpColor', 'rgba(255, 255, 255, 1)'],\n      ['contextMenuArrowColor', 'rgba(43, 48, 43, 1)'],\n      ['contextMenuArrowDownHTML', '&#x25BC;'],\n      ['contextMenuArrowUpHTML', '&#x25B2;'],\n      ['contextMenuBackground', 'rgba(240, 240, 240, 1)'],\n      ['contextMenuBorder', 'solid 1px rgba(158, 163, 169, 1)'],\n      ['contextMenuBorderRadius', '3px'],\n      ['contextMenuChildArrowFontSize', '12px'],\n      ['contextMenuColor', 'rgba(43, 48, 43, 1)'],\n      ['contextMenuCursor', 'default'],\n      ['contextMenuFilterButtonFontFamily', 'sans-serif'],\n      ['contextMenuFilterButtonFontSize', '10px'],\n      ['contextMenuFilterInvalidExpresion', 'rgba(237, 155, 156, 1)'],\n      ['contextMenuFontFamily', 'sans-serif'],\n      ['contextMenuFontSize', '16px'],\n      ['contextMenuHoverBackground', 'rgba(182, 205, 250, 1)'],\n      ['contextMenuHoverColor', 'rgba(43, 48, 153, 1)'],\n      ['contextMenuItemBorderRadius', '3px'],\n      ['contextMenuItemMargin', '2px'],\n      ['contextMenuLabelDisplay', 'inline-block'],\n      ['contextMenuLabelMargin', '0 3px 0 0'],\n      ['contextMenuLabelMaxWidth', '700px'],\n      ['contextMenuLabelMinWidth', '75px'],\n      ['contextMenuMarginLeft', 3],\n      ['contextMenuMarginTop', -3],\n      ['contextMenuOpacity', '0.98'],\n      ['contextMenuPadding', '2px'],\n      ['contextMenuWindowMargin', 30],\n      ['contextMenuZIndex', 10000],\n      ['cornerCellBackgroundColor', 'rgba(240, 240, 240, 1)'],\n      ['cornerCellBorderColor', 'rgba(202, 202, 202, 1)'],\n      ['debugBackgroundColor', 'rgba(0, 0, 0, .0)'],\n      ['debugColor', 'rgba(255, 15, 24, 1)'],\n      ['debugEntitiesColor', 'rgba(76, 231, 239, 1.00)'],\n      ['debugFont', '11px sans-serif'],\n      ['debugPerfChartBackground', 'rgba(29, 25, 26, 1.00)'],\n      ['debugPerfChartTextColor', 'rgba(255, 255, 255, 0.8)'],\n      ['debugPerformanceColor', 'rgba(252, 255, 37, 1.00)'],\n      ['debugScrollHeightColor', 'rgba(248, 33, 103, 1.00)'],\n      ['debugScrollWidthColor', 'rgba(66, 255, 27, 1.00)'],\n      ['debugTouchPPSXColor', 'rgba(246, 102, 24, 1.00)'],\n      ['debugTouchPPSYColor', 'rgba(186, 0, 255, 1.00)'],\n      ['display', 'inline-block'],\n      ['editCellBackgroundColor', 'white'],\n      ['editCellBorder', 'solid 1px rgba(110, 168, 255, 1)'],\n      ['editCellBoxShadow', '0 2px 5px rgba(0,0,0,0.4)'],\n      ['editCellColor', 'black'],\n      ['editCellFontFamily', 'sans-serif'],\n      ['editCellFontSize', '16px'],\n      ['editCellPaddingLeft', 4],\n      ['editCellZIndex', 10000],\n      ['filterButtonActiveBackgroundColor', 'rgba(225, 225, 225, 1)'],\n      ['filterButtonArrowBorderColor', 'rgba(195, 199, 202, 1)'],\n      ['filterButtonArrowBorderWidth', 1],\n      ['filterButtonArrowClickRadius', 5],\n      ['filterButtonArrowColor', 'rgba(50, 50, 50, 1)'],\n      ['filterButtonArrowHeight', 5],\n      ['filterButtonArrowWidth', 8],\n      ['filterButtonBackgroundColor', 'rgba(240, 240, 240, 1)'],\n      ['filterButtonBorderColor', 'rgba(172, 172, 172, 1)'],\n      ['filterButtonBorderRadius', 3],\n      ['filterButtonHeight', 20],\n      ['filterButtonHoverBackgroundColor', 'rgba(235, 235, 235, 1)'],\n      ['filterButtonMenuOffsetTop', 10],\n      ['filterButtonWidth', 20],\n      ['frozenMarkerHoverColor', 'rgba(165, 198, 254, 1)'],\n      ['frozenMarkerHoverBorderColor', 'rgba(165, 198, 254, 1)'],\n      ['frozenMarkerActiveColor', 'rgba(165, 198, 254, 0.2)'],\n      ['frozenMarkerActiveBorderColor', 'rgba(165, 198, 254, 0.5)'],\n      ['frozenMarkerActiveHeaderColor', 'rgba(165, 198, 254, 1)'],\n      ['frozenMarkerColor', 'rgba(221, 221, 221, 1)'],\n      ['frozenMarkerBorderColor', 'rgba(221, 221, 221, 1)'],\n      ['frozenMarkerBorderWidth', 1],\n      ['frozenMarkerHeaderColor', 'rgba(188, 188, 188, 1)'],\n      ['frozenMarkerWidth', 4],\n      ['groupingAreaBackgroundColor', 'rgba(240, 240, 240, 1)'],\n      ['gridBackgroundColor', 'rgba(240, 240, 240, 1)'],\n      ['gridBorderCollapse', 'collapse'],\n      ['gridBorderColor', 'rgba(202, 202, 202, 1)'],\n      ['gridBorderWidth', 1],\n      ['groupIndicatorColor', 'rgba(155, 155, 155, 1)'],\n      ['groupIndicatorBackgroundColor', 'rgba(255, 255, 255, 1)'],\n      ['height', 'auto'],\n      ['maxHeight', 'inherit'],\n      ['maxWidth', 'inherit'],\n      ['minColumnWidth', 45],\n      ['minHeight', 'inherit'],\n      ['minRowHeight', 24],\n      ['minWidth', 'inherit'],\n      ['mobileContextMenuMargin', 10],\n      ['mobileEditInputHeight', 30],\n      ['mobileEditFontFamily', 'sans-serif'],\n      ['mobileEditFontSize', '16px'],\n      ['moveOverlayBorderWidth', 1],\n      ['moveOverlayBorderColor', 'rgba(66, 133, 244, 1)'],\n      ['moveOverlayBorderSegments', '12, 7'],\n      ['name', 'default'],\n      ['overflowY', 'auto'],\n      ['overflowX', 'auto'],\n      ['reorderMarkerBackgroundColor', 'rgba(0, 0, 0, 0.1)'],\n      ['reorderMarkerBorderColor', 'rgba(0, 0, 0, 0.2)'],\n      ['reorderMarkerBorderWidth', 1.25],\n      ['reorderMarkerIndexBorderColor', 'rgba(66, 133, 244, 1)'],\n      ['reorderMarkerIndexBorderWidth', 2.75],\n      ['resizeMarkerColor', 'rgba(0, 0, 0, 0.2)'],\n      ['resizeMarkerSize', 2],\n      ['rowGroupColumnWidth', 25],\n      ['rowHeaderCellBackgroundColor', 'rgba(240, 240, 240, 1)'],\n      ['rowHeaderCellBorderColor', 'rgba(200, 200, 200, 1)'],\n      ['rowHeaderCellBorderWidth', 1],\n      ['rowHeaderCellColor', 'rgba(50, 50, 50, 1)'],\n      ['rowHeaderCellFont', '16px sans-serif'],\n      ['rowHeaderCellHeight', 25],\n      ['rowHeaderCellHorizontalAlignment', 'left'],\n      ['rowHeaderCellHoverBackgroundColor', 'rgba(235, 235, 235, 1)'],\n      ['rowHeaderCellHoverColor', 'rgba(0, 0, 0, 1)'],\n      ['rowHeaderCellPaddingBottom', 5],\n      ['rowHeaderCellPaddingLeft', 5],\n      ['rowHeaderCellPaddingRight', 5],\n      ['rowHeaderCellPaddingTop', 5],\n      ['rowHeaderCellRowNumberGapHeight', 5],\n      ['rowHeaderCellRowNumberGapColor', 'rgba(50, 50, 50, 1)'],\n      ['rowHeaderCellSelectedBackgroundColor', 'rgba(217, 217, 217, 1)'],\n      ['rowHeaderCellSelectedColor', 'rgba(50, 50, 50, 1)'],\n      ['rowHeaderCellVerticalAlignment', 'center'],\n      ['rowHeaderCellWidth', 57],\n      ['scrollBarActiveColor', 'rgba(125, 125, 125, 1)'],\n      ['scrollBarBackgroundColor', 'rgba(240, 240, 240, 1)'],\n      ['scrollBarBorderColor', 'rgba(202, 202, 202, 1)'],\n      ['scrollBarBorderWidth', 0.5],\n      ['scrollBarBoxBorderRadius', 4.125],\n      ['scrollBarBoxColor', 'rgba(192, 192, 192, 1)'],\n      ['scrollBarBoxMargin', 2],\n      ['scrollBarBoxMinSize', 15],\n      ['scrollBarBoxWidth', 8],\n      ['scrollBarCornerBackgroundColor', 'rgba(240, 240, 240, 1)'],\n      ['scrollBarCornerBorderColor', 'rgba(202, 202, 202, 1)'],\n      ['scrollBarWidth', 11],\n      ['selectionHandleBorderColor', 'rgba(255, 255, 255, 1)'],\n      ['selectionHandleBorderWidth', 1.5],\n      ['selectionHandleColor', 'rgba(66, 133, 244, 1)'],\n      ['selectionHandleSize', 8],\n      ['selectionHandleType', 'square'],\n      ['fillOverlayBorderColor', 'rgba(127, 127, 127, 1)'],\n      ['fillOverlayBorderWidth', 2],\n      ['selectionOverlayBorderColor', 'rgba(66, 133, 244, 1)'],\n      ['selectionOverlayBorderWidth', 1],\n      ['treeArrowBorderColor', 'rgba(195, 199, 202, 1)'],\n      ['treeArrowBorderWidth', 1],\n      ['treeArrowClickRadius', 5],\n      ['treeArrowColor', 'rgba(155, 155, 155, 1)'],\n      ['treeArrowHeight', 8],\n      ['treeArrowMarginLeft', 0],\n      ['treeArrowMarginRight', 5],\n      ['treeArrowMarginTop', 6],\n      ['treeArrowWidth', 13],\n      ['treeGridHeight', 250],\n      ['unhideIndicatorColor', 'rgba(0, 0, 0, 1)'],\n      ['unhideIndicatorBackgroundColor', 'rgba(255, 255, 255, 1)'],\n      ['unhideIndicatorBorderColor', 'rgba(174, 193, 232, 1)'],\n      ['unhideIndicatorSize', 16],\n      ['width', 'auto'],\n    ],\n  };\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nexport default function (self) {\n  self.getClippingRect = function (ele) {\n    var boundingRect = self.position(self.parentNode),\n      eleRect = self.position(ele),\n      s = self.scrollOffset(self.canvas),\n      clipRect = {\n        x: 0,\n        y: 0,\n        h: 0,\n        w: 0,\n      },\n      parentRect = {\n        x: -Infinity,\n        y: -Infinity,\n        h: Infinity,\n        w: Infinity,\n      },\n      columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n      rowHeaderCellWidth = self.getRowHeaderCellWidth();\n    boundingRect.top -= s.top;\n    boundingRect.left -= s.left;\n    eleRect.top -= s.top;\n    eleRect.left -= s.left;\n    clipRect.h =\n      boundingRect.top +\n      boundingRect.height -\n      ele.offsetTop -\n      self.style.scrollBarWidth;\n    clipRect.w =\n      boundingRect.left +\n      boundingRect.width -\n      ele.offsetLeft -\n      self.style.scrollBarWidth;\n    clipRect.x = boundingRect.left + eleRect.left * -1 + rowHeaderCellWidth;\n    clipRect.y = boundingRect.top + eleRect.top * -1 + columnHeaderCellHeight;\n    return {\n      x: clipRect.x > parentRect.x ? clipRect.x : parentRect.x,\n      y: clipRect.y > parentRect.y ? clipRect.y : parentRect.y,\n      h: clipRect.h < parentRect.h ? clipRect.h : parentRect.h,\n      w: clipRect.w < parentRect.w ? clipRect.w : parentRect.w,\n    };\n  };\n  self.clipElement = function (ele) {\n    var clipRect = self.getClippingRect(ele);\n    if (clipRect.w < 0) {\n      clipRect.w = 0;\n    }\n    if (clipRect.h < 0) {\n      clipRect.h = 0;\n    }\n    ele.style.clip =\n      'rect(' +\n      clipRect.y +\n      'px,' +\n      clipRect.w +\n      'px,' +\n      clipRect.h +\n      'px,' +\n      clipRect.x +\n      'px' +\n      ')';\n    // INFO https://developer.mozilla.org/en-US/docs/Web/CSS/clip\n    // clip has been \"deprecated\" for clipPath.  Of course nothing but chrome\n    // supports clip path, so we'll keep using clip until someday clipPath becomes\n    // more widely support.  The code below works correctly, but setting clipPath and clip\n    // at the same time has undesirable results.\n    // ele.style.clipPath = 'polygon('\n    //     + clipRect.x + 'px ' + clipRect.y + 'px,'\n    //     + clipRect.x + 'px ' + clipRect.h + 'px,'\n    //     + clipRect.w + 'px ' + clipRect.h + 'px,'\n    //     + clipRect.w + 'px ' + clipRect.y + 'px'\n    //     + ')';\n  };\n  self.scrollOffset = function (e) {\n    var x = 0,\n      y = 0,\n      scrollingElement = document.scrollingElement || {\n        scrollLeft: 0,\n        scrollTop: 0,\n      };\n    while (\n      e.parentNode &&\n      e.nodeName !== 'CANVAS-DATAGRID' &&\n      e !== self.intf\n    ) {\n      if (\n        e.nodeType !== 'canvas-datagrid-tree' &&\n        e.nodeType !== 'canvas-datagrid-cell'\n      ) {\n        x -= e.scrollLeft;\n        y -= e.scrollTop;\n      }\n      e = e.parentNode;\n    }\n    return {\n      left: x - scrollingElement.scrollLeft,\n      top: y - scrollingElement.scrollTop,\n    };\n  };\n  self.resizeEditInput = function () {\n    if (self.input && self.input.editCell) {\n      var pos = self.canvas.getBoundingClientRect(),\n        s = self.scrollOffset(self.intf),\n        bm = self.style.gridBorderCollapse === 'collapse' ? 1 : 2,\n        borderWidth = self.style.cellBorderWidth * bm,\n        cell = self.getVisibleCellByIndex(\n          self.input.editCell.columnIndex,\n          self.input.editCell.rowIndex,\n        ) || { x: -100, y: -100, height: 0, width: 0 };\n      if (self.mobile) {\n        self.input.style.left = '0';\n        self.input.style.top =\n          self.height -\n          self.style.mobileEditInputHeight -\n          borderWidth -\n          1 +\n          'px';\n        self.input.style.height = self.style.mobileEditInputHeight + 'px';\n        self.input.style.width = self.width - borderWidth - 1 + 'px';\n        return;\n      }\n      let groupAreaOffsetY = self.getColumnGroupAreaHeight();\n      let groupAreaOffsetX = self.getRowGroupAreaWidth();\n      if (self.parentNode) {\n        const { columnGroupsAreaHeight, rowGroupsAreaWidth } = self.parentNode;\n        if (columnGroupsAreaHeight) groupAreaOffsetY += columnGroupsAreaHeight;\n        if (rowGroupsAreaWidth) groupAreaOffsetX += rowGroupsAreaWidth;\n      }\n      self.input.style.left =\n        pos.left +\n        cell.x +\n        self.canvasOffsetLeft -\n        s.left +\n        groupAreaOffsetX +\n        'px';\n      self.input.style.top =\n        pos.top +\n        cell.y -\n        self.style.cellBorderWidth +\n        self.canvasOffsetTop -\n        s.top +\n        groupAreaOffsetY +\n        'px';\n      self.input.style.height = cell.height - borderWidth + 'px';\n      self.input.style.width = cell.width - self.style.cellPaddingLeft + 'px';\n      self.clipElement(self.input);\n    }\n  };\n  self.position = function (e, ignoreScrollOffset) {\n    var x = 0,\n      y = 0,\n      s = e,\n      h,\n      w;\n    let calculatedTree = false;\n    while (e.offsetParent && e.nodeName !== 'CANVAS-DATAGRID') {\n      const isTree = e.nodeType === 'canvas-datagrid-tree';\n      if (!isTree || !calculatedTree) {\n        x += e.offsetLeft;\n        y += e.offsetTop;\n        h = e.offsetHeight;\n        w = e.offsetWidth;\n      }\n      if (isTree) calculatedTree = true;\n      e = e.offsetParent;\n    }\n    if (ignoreScrollOffset) {\n      return { left: x, top: y, height: h, width: w };\n    }\n    e = s;\n    s = self.scrollOffset(e);\n    return { left: x + s.left, top: y + s.top, height: h, width: w };\n  };\n  self.getLayerPos = function (e) {\n    var rect = self.canvas.getBoundingClientRect(),\n      pos = {\n        x: e.clientX - rect.left,\n        y: e.clientY - rect.top,\n      };\n    if (self.isChildGrid) {\n      pos.x -= self.canvasOffsetLeft;\n      pos.y -= self.canvasOffsetTop;\n      if (self.parentNode.rowGroupsAreaWidth)\n        pos.x -= self.parentNode.rowGroupsAreaWidth;\n      if (self.parentNode.columnGroupsAreaHeight)\n        pos.y -= self.parentNode.columnGroupsAreaHeight;\n    }\n    return {\n      x: pos.x,\n      y: pos.y,\n      rect: rect,\n    };\n  };\n  /**\n   * Ends editing, optionally aborting the edit.\n   * @memberof canvasDatagrid\n   * @name endEdit\n   * @method\n   * @param {boolean} abort When true, abort the edit.\n   */\n  self.endEdit = function (abort) {\n    var cell = self.input.editCell,\n      y = cell.rowIndex;\n    function abortEdit() {\n      abort = true;\n    }\n    if (\n      self.dispatchEvent('beforeendedit', {\n        cell: cell,\n        newValue: self.input.value,\n        oldValue: cell.value,\n        abort: abortEdit,\n        input: self.input,\n      })\n    ) {\n      return false;\n    }\n    if (self.input.value !== cell.value && !abort) {\n      self.changes[y] = self.changes[y] || {};\n      self.changes[y][cell.header.name] = self.input.value;\n      if (!cell.data) {\n        self.originalData[cell.boundRowIndex] = {};\n        cell.data = self.originalData[cell.boundRowIndex];\n      }\n      cell.data[cell.header.name] = self.input.value;\n      if (y === self.viewData.length) {\n        if (\n          self.dispatchEvent('newrow', {\n            value: self.input.value,\n            defaultValue: cell.value,\n            aborted: abort,\n            cell: cell,\n            input: self.input,\n          })\n        ) {\n          return false;\n        }\n        self.addRow(cell.data);\n        self.createNewRowData();\n      }\n      self.draw(true);\n    }\n    if (self.input.parentNode) {\n      self.input.parentNode.removeChild(self.input);\n    }\n    self.intf.focus();\n    self.dispatchEvent('endedit', {\n      cell: cell,\n      value: self.input.value,\n      aborted: abort,\n      input: self.input,\n    });\n    self.input = undefined;\n    return true;\n  };\n  /**\n   * Begins editing at cell x, row y.\n   * @memberof canvasDatagrid\n   * @name beginEditAt\n   * @method\n   * @param {number} x The column index of the cell to edit.\n   * @param {number} y The row index of the cell to edit.\n   * @param {boolean} inEnterMode If true, starting to type in cell will replace the\n   * cell's previous value instead of appending, and using the arrow keys will allow\n   * the user to navigate to adjacent cells instead of moving the text cursor around\n   * (default is false, and means user is in 'edit' mode).\n   */\n  self.beginEditAt = function (x, y, NativeEvent, inEnterMode = false) {\n    if (!self.attributes.editable) {\n      return;\n    }\n    if (self.input) {\n      self.endEdit();\n    }\n    var cell = self.getVisibleCellByIndex(x, y),\n      s = self.getSchema(),\n      adjacentCells,\n      enumItems,\n      enu,\n      option,\n      valueInEnum;\n    if (!(cell && cell.header)) {\n      return;\n    }\n    //HACK for IE10, does not like literal enum\n    enu = cell.header['enum'];\n    if (\n      self.dispatchEvent('beforebeginedit', {\n        cell: cell,\n        NativeEvent: NativeEvent,\n      })\n    ) {\n      return false;\n    }\n    self.scrollIntoView(x, y);\n    self.setActiveCell(x, y);\n    adjacentCells = self.getAdjacentCells();\n    if (enu) {\n      self.input = document.createElement('select');\n    } else {\n      self.input = document.createElement(\n        self.attributes.multiLine ? 'textarea' : 'input',\n      );\n    }\n    cell = self.getVisibleCellByIndex(x, y);\n    //HACK on mobile devices sometimes edit can begin without the cell being in view, I don't know how.\n    if (!cell) {\n      return;\n    }\n    if (enu) {\n      // add enums\n      if (typeof enu === 'function') {\n        enumItems = enu.apply(self.intf, [{ cell: cell }]);\n      } else if (Array.isArray(enu)) {\n        enumItems = enu;\n      }\n      enumItems.forEach(function (e) {\n        var i = document.createElement('option'),\n          val,\n          title;\n        if (Array.isArray(e)) {\n          val = e[0];\n          title = e[1];\n        } else {\n          val = e;\n          title = e;\n        }\n        if (val === cell.value) {\n          valueInEnum = true;\n        }\n        i.value = val;\n        i.innerHTML = title;\n        self.input.appendChild(i);\n      });\n      if (!valueInEnum) {\n        option = document.createElement('option');\n        option.value = cell.value;\n        option.innerHTML = cell.value;\n        self.input.appendChild(option);\n      }\n      self.input.addEventListener('change', function () {\n        self.endEdit();\n        self.draw(true);\n      });\n    }\n    // if the user has not prevented the default action, append to the body\n    if (\n      !self.dispatchEvent('appendeditinput', { cell: cell, input: self.input })\n    ) {\n      document.body.appendChild(self.input);\n    }\n    self.createInlineStyle(\n      self.input,\n      self.mobile\n        ? 'canvas-datagrid-edit-mobile-input'\n        : 'canvas-datagrid-edit-input',\n    );\n    self.input.style.position = 'absolute';\n    self.input.editCell = cell;\n    self.resizeEditInput();\n    self.input.style.zIndex = self.style.editCellZIndex;\n    self.input.style.fontSize =\n      parseInt(self.style.editCellFontSize, 10) * self.scale + 'px';\n\n    var cellValueIsEmpty = [null, undefined].indexOf(cell.value) !== -1;\n    var shouldClearCellValue = cellValueIsEmpty || inEnterMode;\n\n    self.input.value = shouldClearCellValue ? '' : cell.value;\n    let width = Math.round(\n      self.input.value.length *\n        parseInt(self.style.editCellFontSize, 10) *\n        0.7 *\n        self.scale,\n    );\n    if (width + self.style.cellPaddingLeft < cell.width) {\n      width = cell.width - self.style.cellPaddingLeft;\n    } else if (width > self.width - cell.x - self.style.scrollBarWidth) {\n      width = self.width - cell.x - self.style.scrollBarWidth;\n      self.input.style.height = 'auto';\n    }\n    self.input.style.width = width + 'px';\n    self.input.focus();\n    self.input.addEventListener('click', self.stopPropagation);\n    self.input.addEventListener('dblclick', self.stopPropagation);\n    self.input.addEventListener('mouseup', self.stopPropagation);\n    self.input.addEventListener('mousedown', self.stopPropagation);\n    self.input.addEventListener('keydown', function (e) {\n      var nx = cell.columnIndex,\n        ny = cell.rowIndex;\n\n      if (e.key === 'Escape') {\n        self.endEdit(true); // end edit and abort the value change\n        self.draw(true);\n      } else if (e.key === 'Enter' && self.attributes.multiLine && e.altKey) {\n        self.input.value = self.input.value + '\\n';\n        self.input.scrollTop = self.input.scrollHeight;\n      } else if (e.key === 'Enter') {\n        self.endEdit();\n\n        // Move to cell in next or previous row\n        var nextRowIndex = e.shiftKey\n          ? Math.max(0, ny - 1)\n          : Math.min(ny + 1, self.viewData.length - 1);\n\n        if (nextRowIndex !== ny) {\n          self.scrollIntoView(nx, nextRowIndex);\n          self.setActiveCell(nx, nextRowIndex);\n        }\n\n        self.draw(true);\n      } else if (\n        ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.key) &&\n        inEnterMode\n      ) {\n        switch (e.key) {\n          case 'ArrowUp':\n            ny = Math.max(0, ny - 1);\n            break;\n          case 'ArrowDown':\n            ny = Math.min(ny + 1, self.viewData.length - 1);\n            break;\n          case 'ArrowLeft':\n            nx = Math.max(nx - 1, 0);\n            break;\n          case 'ArrowRight':\n            nx = adjacentCells.right;\n            break;\n        }\n\n        self.endEdit();\n\n        self.scrollIntoView(nx, ny);\n        self.setActiveCell(nx, ny);\n\n        self.draw(true);\n      } else if (e.key === 'Tab') {\n        e.preventDefault();\n        if (!self.endEdit()) {\n          return;\n        }\n        if (e.shiftKey) {\n          nx = adjacentCells.left;\n        } else {\n          nx = adjacentCells.right;\n        }\n        if (adjacentCells.left === x && e.shiftKey) {\n          nx = adjacentCells.last;\n          ny -= 1;\n        }\n        if (adjacentCells.right === x && !e.shiftKey) {\n          nx = adjacentCells.first;\n          ny += 1;\n        }\n        if (ny < 0) {\n          ny = self.viewData.length - 1;\n        }\n        if (ny > self.viewData.length - 1) {\n          ny = 0;\n        }\n        self.scrollIntoView(nx, ny);\n        self.beginEditAt(nx, ny, e);\n      } else {\n        let width = Math.round(\n          self.input.value.length *\n            parseInt(self.style.editCellFontSize, 10) *\n            0.7 *\n            self.scale,\n        );\n        if (width + self.style.cellPaddingLeft < cell.width) {\n          width = cell.width - self.style.cellPaddingLeft;\n        } else if (width > self.width - cell.x - self.style.scrollBarWidth) {\n          width = self.width - cell.x - self.style.scrollBarWidth;\n          self.input.style.height = 'auto';\n        }\n        self.input.style.width = width + 'px';\n      }\n    });\n\n    self.dispatchEvent('beginedit', { cell: cell, input: self.input });\n  };\n  self.createInlineStyle = function (el, className) {\n    var css = {\n      'canvas-datagrid-button-wrapper': {\n        display: 'inline-block',\n        padding: self.style.buttonPadding,\n        borderWidth: '1px',\n        borderStyle: 'solid',\n        borderColor: self.style.buttonBorderColor,\n        cursor: 'pointer',\n        background: self.style.buttonBackgroundColor,\n        userSelect: 'none',\n      },\n      'canvas-datagrid-button-wrapper:hover': {\n        borderColor: self.style.buttonBorderColor,\n        background: self.style.buttonHoverBackgroundColor,\n      },\n      'canvas-datagrid-button-wrapper:active': {\n        borderColor: self.style.buttonActiveBorderColor,\n        background: self.style.buttonActiveBackgroundColor,\n      },\n      'canvas-datagrid-button-icon': {\n        width: '18px',\n        height: '18px',\n        display: 'inline-block',\n        verticalAlign: 'middle',\n      },\n      'canvas-datagrid-button-arrow': {\n        display: 'inline-block',\n        color: self.style.buttonArrowColor,\n        fontSize: '9px',\n      },\n      'canvas-datagrid-button-menu-item-mobile': {\n        lineHeight: 'normal',\n        fontWeight: 'normal',\n        fontFamily: self.style.contextMenuFontFamily,\n        fontSize: self.style.contextMenuFontSize,\n        color: 'inherit',\n        background: 'inherit',\n        margin: self.style.contextMenuItemMargin,\n        borderRadius: self.style.contextMenuItemBorderRadius,\n        verticalAlign: 'middle',\n      },\n      'canvas-datagrid-button-menu-item': {\n        lineHeight: 'normal',\n        fontWeight: 'normal',\n        fontFamily: self.style.contextMenuFontFamily,\n        fontSize: self.style.contextMenuFontSize,\n        color: 'inherit',\n        background: 'inherit',\n        margin: self.style.contextMenuItemMargin,\n        borderRadius: self.style.contextMenuItemBorderRadius,\n        verticalAlign: 'middle',\n      },\n      'canvas-datagrid-button-menu-item:hover': {\n        background: self.style.contextMenuHoverBackground,\n        color: self.style.contextMenuHoverColor,\n      },\n      'canvas-datagrid-button-menu-label': {\n        margin: self.style.contextMenuLabelMargin,\n        display: self.style.contextMenuLabelDisplay,\n        minWidth: self.style.contextMenuLabelMinWidth,\n        maxWidth: self.style.contextMenuLabelMaxWidth,\n      },\n      'canvas-datagrid-button-menu-mobile': {\n        lineHeight: 'normal',\n        fontWeight: 'normal',\n        fontFamily: self.style.contextMenuFontFamily,\n        fontSize: self.style.contextMenuFontSize,\n        background: self.style.contextMenuBackground,\n        color: self.style.contextMenuColor,\n        border: self.style.contextMenuBorder,\n        padding: self.style.contextMenuPadding,\n        borderRadius: self.style.contextMenuBorderRadius,\n        opacity: self.style.contextMenuOpacity,\n        overflow: 'hidden',\n        whiteSpace: 'nowrap',\n      },\n      'canvas-datagrid-button-menu': {\n        lineHeight: 'normal',\n        fontWeight: 'normal',\n        fontFamily: self.style.contextMenuFontFamily,\n        fontSize: self.style.contextMenuFontSize,\n        background: self.style.contextMenuBackground,\n        color: self.style.contextMenuColor,\n        border: self.style.contextMenuBorder,\n        padding: self.style.contextMenuPadding,\n        borderRadius: self.style.contextMenuBorderRadius,\n        opacity: self.style.contextMenuOpacity,\n        overflow: 'hidden',\n        whiteSpace: 'nowrap',\n        cursor: self.style.contextMenuCursor,\n      },\n      'canvas-datagrid-context-menu-filter-input': {\n        height: '19px',\n        verticalAlign: 'bottom',\n        marginLeft: '2px',\n        padding: '0',\n        background: self.style.contextFilterInputBackground,\n        color: self.style.contextFilterInputColor,\n        border: self.style.contextFilterInputBorder,\n        borderRadius: self.style.contextFilterInputBorderRadius,\n        lineHeight: 'normal',\n        fontWeight: 'normal',\n        fontFamily: self.style.contextFilterInputFontFamily,\n        fontSize: self.style.contextFilterInputFontSize,\n      },\n      'canvas-datagrid-context-menu-filter-button': {\n        height: '19px',\n        verticalAlign: 'bottom',\n        marginLeft: '2px',\n        padding: '0',\n        background: self.style.contextMenuBackground,\n        color: self.style.contextMenuColor,\n        border: self.style.contextFilterButtonBorder,\n        borderRadius: self.style.contextFilterButtonBorderRadius,\n        lineHeight: 'normal',\n        fontWeight: 'normal',\n        fontFamily: self.style.contextMenuFilterButtonFontFamily,\n        fontSize: self.style.contextMenuFilterButtonFontSize,\n      },\n      'canvas-datagrid-context-child-arrow': {\n        cssFloat: 'right',\n        color: self.style.childContextMenuArrowColor,\n        fontSize: self.style.contextMenuChildArrowFontSize,\n        fontFamily: self.style.contextMenuFontFamily,\n        verticalAlign: 'middle',\n      },\n      'canvas-datagrid-autocomplete': {\n        fontFamily: self.style.contextMenuFontFamily,\n        fontSize: self.style.contextMenuFontSize,\n        background: self.style.contextMenuBackground,\n        color: self.style.contextMenuColor,\n        border: self.style.contextMenuBorder,\n        padding: self.style.contextMenuPadding,\n        borderRadius: self.style.contextMenuBorderRadius,\n        opacity: self.style.contextMenuOpacity,\n        position: 'absolute',\n        zIndex: 9999,\n        overflow: 'hidden',\n      },\n      'canvas-datagrid-autocomplete-item': {\n        background: self.style.contextMenuBackground,\n        color: self.style.contextMenuColor,\n      },\n      'canvas-datagrid-autocomplete-item:hover': {\n        background: self.style.contextMenuHoverBackground,\n        color: self.style.contextMenuHoverColor,\n      },\n      'canvas-datagrid-canvas': {\n        position: 'absolute',\n        zIndex: '-1',\n      },\n      'canvas-datagrid': {\n        display: 'block',\n      },\n      'canvas-datagrid-control-input': {\n        position: 'fixed',\n        top: '-5px',\n        left: '-5px',\n        border: 'none',\n        opacity: '0',\n        cursor: 'pointer',\n        width: '1px',\n        height: '1px',\n        lineHeight: 'normal',\n        fontWeight: 'normal',\n        fontFamily: self.style.contextMenuFontFamily,\n        fontSize: self.style.contextMenuFontSize,\n      },\n      'canvas-datagrid-edit-mobile-input': {\n        boxSizing: 'content-box',\n        outline: 'none',\n        margin: '0',\n        padding: '0 0 0 0',\n        lineHeight: 'normal',\n        fontWeight: 'normal',\n        fontFamily: self.style.mobileEditFontFamily,\n        fontSize: self.style.mobileEditFontSize,\n        border: self.style.editCellBorder,\n        color: self.style.editCellColor,\n        background: self.style.editCellBackgroundColor,\n        appearance: 'none',\n        webkitAppearance: 'none',\n        mozAppearance: 'none',\n        borderRadius: '0',\n      },\n      'canvas-datagrid-edit-input': {\n        boxSizing: 'content-box',\n        outline: 'none',\n        margin: '0',\n        padding: '0 0 0 ' + self.style.editCellPaddingLeft + 'px',\n        lineHeight: 'normal',\n        fontWeight: 'normal',\n        fontFamily: self.style.editCellFontFamily,\n        fontSize: self.style.editCellFontSize,\n        boxShadow: self.style.editCellBoxShadow,\n        border: self.style.editCellBorder,\n        color: self.style.editCellColor,\n        background: self.style.editCellBackgroundColor,\n        appearance: 'none',\n        webkitAppearance: 'none',\n        mozAppearance: 'none',\n        borderRadius: '0',\n      },\n      'canvas-datagrid-context-menu-item-mobile': {\n        lineHeight: 'normal',\n        fontWeight: 'normal',\n        fontFamily: self.style.contextMenuFontFamily,\n        fontSize: self.style.contextMenuFontSize,\n        color: 'inherit',\n        background: 'inherit',\n        margin: self.style.contextMenuItemMargin,\n        borderRadius: self.style.contextMenuItemBorderRadius,\n        verticalAlign: 'middle',\n      },\n      'canvas-datagrid-context-menu-item': {\n        lineHeight: 'normal',\n        fontWeight: 'normal',\n        fontFamily: self.style.contextMenuFontFamily,\n        fontSize: self.style.contextMenuFontSize,\n        color: 'inherit',\n        background: 'inherit',\n        margin: self.style.contextMenuItemMargin,\n        borderRadius: self.style.contextMenuItemBorderRadius,\n        verticalAlign: 'middle',\n      },\n      'canvas-datagrid-context-menu-item:hover': {\n        background: self.style.contextMenuHoverBackground,\n        color: self.style.contextMenuHoverColor,\n      },\n      'canvas-datagrid-context-menu-label': {\n        margin: self.style.contextMenuLabelMargin,\n        display: self.style.contextMenuLabelDisplay,\n        minWidth: self.style.contextMenuLabelMinWidth,\n        maxWidth: self.style.contextMenuLabelMaxWidth,\n      },\n      'canvas-datagrid-context-menu-mobile': {\n        lineHeight: 'normal',\n        fontWeight: 'normal',\n        fontFamily: self.style.contextMenuFontFamily,\n        fontSize: self.style.contextMenuFontSize,\n        background: self.style.contextMenuBackground,\n        color: self.style.contextMenuColor,\n        border: self.style.contextMenuBorder,\n        padding: self.style.contextMenuPadding,\n        borderRadius: self.style.contextMenuBorderRadius,\n        opacity: self.style.contextMenuOpacity,\n        overflow: 'hidden',\n        whiteSpace: 'nowrap',\n      },\n      'canvas-datagrid-context-menu': {\n        lineHeight: 'normal',\n        fontWeight: 'normal',\n        fontFamily: self.style.contextMenuFontFamily,\n        fontSize: self.style.contextMenuFontSize,\n        background: self.style.contextMenuBackground,\n        color: self.style.contextMenuColor,\n        border: self.style.contextMenuBorder,\n        padding: self.style.contextMenuPadding,\n        borderRadius: self.style.contextMenuBorderRadius,\n        opacity: self.style.contextMenuOpacity,\n        overflow: 'hidden',\n        whiteSpace: 'nowrap',\n        cursor: self.style.contextMenuCursor,\n      },\n      'canvas-datagrid-invalid-search-regExp': {\n        background: self.style.contextMenuFilterInvalidExpresion,\n      },\n    };\n    if (css[className]) {\n      Object.keys(css[className]).map(function (prop) {\n        el.style[prop] = css[className][prop];\n      });\n      el.className = className;\n    }\n    return;\n  };\n  self.appendTo = function (e) {\n    self.parentNode = e;\n    self.setDom();\n  };\n  self.setDom = function () {\n    if (self.isChildGrid) {\n      self.parentGrid = self.parentNode.parentGrid;\n      self.ctx = self.parentGrid.context;\n      self.canvas = self.parentGrid.canvas;\n      self.controlInput = self.parentGrid.controlInput;\n      self.eventParent = self.canvas;\n    } else {\n      self.controlInput = self.controlInput || document.createElement('input');\n      self.controlInput.onblur = self.intf.blur;\n      self.createInlineStyle(\n        self.controlInput,\n        'canvas-datagrid-control-input',\n      );\n      self.isChildGrid = false;\n      self.parentDOMNode = self.parentNode;\n      self.parentIsCanvas = /^canvas$/i.test(self.parentDOMNode.tagName);\n      if (self.parentIsCanvas) {\n        self.canvas = self.parentDOMNode;\n      } else {\n        self.canvas = document.createElement('canvas');\n        self.parentDOMNode.appendChild(self.canvas);\n      }\n      document.body.appendChild(self.controlInput);\n      self.createInlineStyle(self.canvas, 'canvas-datagrid');\n      self.ctx = self.canvas.getContext('2d');\n      self.ctx.textBaseline = 'alphabetic';\n      self.eventParent = self.canvas;\n    }\n    self.parentNodeStyle = self.canvas.style;\n    self.controlInput.setAttribute('readonly', true);\n    self.controlInput.addEventListener('blur', function (e) {\n      if (e.target !== self.canvas) {\n        self.hasFocus = false;\n      }\n    });\n    self.eventParent.addEventListener('scroll', self.resize, false);\n    self.eventParent.addEventListener('touchstart', self.touchstart, false);\n    self.eventParent.addEventListener('mousedown', self.mousedown, false);\n    self.eventParent.addEventListener('dblclick', self.dblclick, false);\n    self.eventParent.addEventListener('click', self.click, false);\n    self.eventParent.addEventListener('mouseup', self.mouseup, false);\n    window.addEventListener('mousemove', self.mousemove);\n    self[self.isChildGrid ? 'parentGrid' : 'eventParent'].addEventListener(\n      'wheel',\n      self.scrollWheel,\n      false,\n    );\n    self.canvas.addEventListener('contextmenu', self.contextmenuEvent, false);\n    self.controlInput.addEventListener('copy', self.copy);\n    self.controlInput.addEventListener('cut', self.cut);\n    self.controlInput.addEventListener('paste', self.paste);\n    self.controlInput.addEventListener('keypress', self.keypress, false);\n    self.controlInput.addEventListener('keyup', self.keyup, false);\n    self.controlInput.addEventListener('keydown', self.keydown, false);\n    window.addEventListener('resize', self.resize);\n  };\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals XMLSerializer: false, define: true, Blob: false, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport { isCellSelected } from './selections/util';\n\nexport default function (self) {\n  var perfCounters = [],\n    cachedImagesDrawn = false,\n    drawCount = 0,\n    perfWindowSize = 300,\n    entityCount = [],\n    hiddenFrozenColumnCount = 0,\n    scrollDebugCounters = [],\n    touchPPSCounters = [];\n  self.htmlImageCache = {};\n  // more heavyweight version than fillArray defined in intf.js\n  function fillArray(low, high, step, def) {\n    step = step || 1;\n    var i = [],\n      x;\n    for (x = low; x <= high; x += step) {\n      i[x] = def === undefined ? x : typeof def === 'function' ? def(x) : def;\n    }\n    return i;\n  }\n  function drawPerfLine(w, h, x, y, perfArr, arrIndex, max, color, useAbs) {\n    var i = w / perfArr.length,\n      r = h / max;\n    x += self.canvasOffsetLeft;\n    y += self.canvasOffsetTop;\n    self.ctx.beginPath();\n    self.ctx.moveTo(x, y + h);\n    perfArr.forEach(function (n) {\n      var val = arrIndex === undefined ? n : n[arrIndex],\n        cx,\n        cy;\n      if (useAbs) {\n        val = Math.abs(val);\n      }\n      cx = x + i;\n      cy = y + h - val * r;\n      self.ctx.lineTo(cx, cy);\n      x += i;\n    });\n    self.ctx.moveTo(x + w, y + h);\n    self.ctx.strokeStyle = color;\n    self.ctx.stroke();\n  }\n  function drawOnAllImagesLoaded() {\n    var loaded = true;\n    Object.keys(self.htmlImageCache).forEach(function (html) {\n      if (!self.htmlImageCache[html].img.complete) {\n        loaded = false;\n      }\n    });\n    if (loaded && !cachedImagesDrawn) {\n      cachedImagesDrawn = true;\n      self.draw();\n    }\n  }\n  function drawHtml(cell) {\n    var img,\n      v = cell.innerHTML || cell.formattedValue,\n      cacheKey =\n        v.toString() + cell.rowIndex.toString() + cell.columnIndex.toString(),\n      x = Math.round(cell.x + self.canvasOffsetLeft),\n      y = Math.round(cell.y + self.canvasOffsetTop);\n    if (self.htmlImageCache[cacheKey]) {\n      img = self.htmlImageCache[cacheKey].img;\n      if (\n        self.htmlImageCache[cacheKey].height !== cell.height ||\n        self.htmlImageCache[cacheKey].width !== cell.width\n      ) {\n        // height and width of the cell has changed, invalidate cache\n        self.htmlImageCache[cacheKey] = undefined;\n      } else {\n        if (!img.complete) {\n          return;\n        }\n        return self.ctx.drawImage(img, x, y);\n      }\n    } else {\n      cachedImagesDrawn = false;\n    }\n    img = new Image(cell.width, cell.height);\n    self.htmlImageCache[cacheKey] = {\n      img,\n      width: cell.width,\n      height: cell.height,\n    };\n    img.onload = function () {\n      self.ctx.drawImage(img, x, y);\n      drawOnAllImagesLoaded();\n    };\n    img.src =\n      'data:image/svg+xml;base64,' +\n      btoa(\n        '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"' +\n          cell.width +\n          '\" height=\"' +\n          cell.height +\n          '\">\\n' +\n          '<foreignObject class=\"node\" x=\"0\" y=\"0\" width=\"100%\" height=\"100%\">\\n' +\n          '<body xmlns=\"http://www.w3.org/1999/xhtml\" style=\"margin:0;padding:0;\">\\n' +\n          v +\n          '\\n' +\n          '</body>' +\n          '</foreignObject>\\n' +\n          '</svg>\\n',\n      );\n  }\n  /**\n   * @param {number[]} coords [x0,y0, x1,y1, x2,y2, ...]\n   * @param {boolean} [fill] fill the area that construct by these lines but not stroke\n   */\n  function drawLines(coords, fill) {\n    if (coords.length < 4) return;\n    self.ctx.beginPath();\n    self.ctx.moveTo(\n      coords[0] + self.canvasOffsetLeft,\n      coords[1] + self.canvasOffsetTop,\n    );\n    for (let i = 2; i < coords.length; i += 2) {\n      const x = coords[i] + self.canvasOffsetLeft;\n      const y = coords[i + 1] + self.canvasOffsetTop;\n      self.ctx.lineTo(x, y);\n    }\n    if (fill) self.ctx.fill();\n    else self.ctx.stroke();\n  }\n  /**\n   * @param {number} x based-X (left-top)\n   * @param {number} y based-Y (left-top)\n   * @param {number} width\n   * @param {boolean} collapsed true: '+'; false: '-'\n   */\n  function drawGroupHandle(x, y, width, collapsed) {\n    fillRect(x, y, width, width);\n    strokeRect(x, y, width, width);\n    const cx = x + width * 0.5;\n    const cy = y + width * 0.5;\n    drawLines([x + width * 0.2, cy, x + width * 0.78, cy]);\n    if (collapsed) drawLines([cx, y + width * 0.22, cx, y + width * 0.8]);\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {number} size\n   * @param {string} dir Direction of the triangle, one of the 't','b','l' and 'r'\n   * @param {boolean} [active]\n   */\n  function drawUnhideIndicator(x, y, size, dir, active) {\n    const minPadding = size * 0.2;\n    const maxPadding = size * 0.3;\n    /** The long edge width of the triangle */\n    const longEdge = size - 2 * minPadding;\n    /** The median width of the triangle */\n    const median = size - 2 * maxPadding;\n    const halfLongEdge = longEdge * 0.5;\n    let x0, y0;\n    let coords, borderCoords;\n    switch (dir) {\n      case 'r':\n        x0 = x + maxPadding;\n        y0 = y + minPadding;\n        borderCoords = [x, y, x + size, y, x + size, y + size, x, y + size];\n        coords = [x0, y0, x0, y0 + longEdge, x0 + median, y0 + halfLongEdge];\n        break;\n      case 'l':\n        x0 = x + size - maxPadding;\n        y0 = y + minPadding;\n        borderCoords = [x + size, y, x, y, x, y + size, x + size, y + size];\n        coords = [x0, y0, x0, y0 + longEdge, x0 - median, y0 + halfLongEdge];\n        break;\n      case 't':\n        x0 = x + minPadding;\n        y0 = y + size - maxPadding;\n        borderCoords = [x, y + size, x, y, x + size, y, x + size, y + size];\n        coords = [x0, y0, x0 + longEdge, y0, x0 + halfLongEdge, y0 - median];\n        break;\n      case 'b':\n        x0 = x + minPadding;\n        y0 = y + maxPadding;\n        borderCoords = [x, y, x, y + size, x + size, y + size, x + size, y];\n        coords = [x0, y0, x0 + longEdge, y0, x0 + halfLongEdge, y0 + median];\n        break;\n    }\n\n    if (active) {\n      self.ctx.strokeStyle = self.style.unhideIndicatorBorderColor;\n      self.ctx.lineWidth = 2;\n      drawLines(borderCoords);\n\n      self.ctx.fillStyle = self.style.unhideIndicatorBackgroundColor;\n      let offset = dir === 'r' || dir === 'b' ? 1 : 0;\n      if (dir === 'l' || dir === 'r')\n        fillRect(x - offset, y, size + offset, size);\n      else fillRect(x, y - offset, size, size + offset);\n    }\n\n    self.ctx.fillStyle = self.style.unhideIndicatorColor;\n    drawLines(coords, true);\n  }\n  function drawOrderByArrow(x, y) {\n    var mt = self.style.columnHeaderOrderByArrowMarginTop * self.scale,\n      ml = self.style.columnHeaderOrderByArrowMarginLeft * self.scale,\n      mr = self.style.columnHeaderOrderByArrowMarginRight * self.scale,\n      aw = self.style.columnHeaderOrderByArrowWidth * self.scale,\n      ah = self.style.columnHeaderOrderByArrowHeight * self.scale;\n    x += self.canvasOffsetLeft;\n    y += self.canvasOffsetTop;\n    self.ctx.fillStyle = self.style.columnHeaderOrderByArrowColor;\n    self.ctx.strokeStyle = self.style.columnHeaderOrderByArrowBorderColor;\n    self.ctx.beginPath();\n    x = x + ml;\n    y = y + mt;\n    if (self.orderDirection === 'asc') {\n      self.ctx.lineTo(x, y + ah);\n      self.ctx.lineTo(x + aw, y + ah);\n      self.ctx.lineTo(x + aw * 0.5, y);\n      self.ctx.lineTo(x, y + ah);\n    } else {\n      self.ctx.moveTo(x, y);\n      self.ctx.lineTo(x + aw, y);\n      self.ctx.lineTo(x + aw * 0.5, y + ah);\n      self.ctx.moveTo(x, y);\n    }\n    self.ctx.stroke();\n    self.ctx.fill();\n    return ml + aw + mr;\n  }\n  function drawTreeArrow(cell, x, y) {\n    var mt = self.style.treeArrowMarginTop * self.scale,\n      mr = self.style.treeArrowMarginRight * self.scale,\n      ml = self.style.treeArrowMarginLeft * self.scale,\n      aw = self.style.treeArrowWidth * self.scale,\n      ah = self.style.treeArrowHeight * self.scale;\n    x += self.canvasOffsetLeft;\n    y += self.canvasOffsetTop;\n    self.ctx.fillStyle = self.style.treeArrowColor;\n    self.ctx.strokeStyle = self.style.treeArrowBorderColor;\n    self.ctx.beginPath();\n    x = x + ml;\n    y = y + mt;\n    if (self.openChildren[cell.rowIndex]) {\n      self.ctx.moveTo(x, y);\n      self.ctx.lineTo(x + aw, y);\n      self.ctx.lineTo(x + aw * 0.5, y + ah);\n      self.ctx.moveTo(x, y);\n    } else {\n      self.ctx.lineTo(x, y);\n      self.ctx.lineTo(x + ah, y + aw * 0.5);\n      self.ctx.lineTo(x, y + aw);\n      self.ctx.lineTo(x, y);\n    }\n    self.ctx.stroke();\n    self.ctx.fill();\n    return ml + aw + mr;\n  }\n  function drawCellTreeIcon(cell, tree, rowTree) {\n    const parentCount = rowTree ? tree.parentCount : 0;\n    const iconSize = self.style.cellTreeIconWidth * self.scale,\n      marginTop = self.style.cellTreeIconMarginTop * self.scale,\n      marginRight = self.style.cellTreeIconMarginRight * self.scale,\n      marginLeft =\n        self.style.cellTreeIconMarginLeft * self.scale +\n        parentCount * (iconSize + cell.paddingLeft);\n\n    let x = cell.x + cell.paddingLeft + self.canvasOffsetLeft + marginLeft,\n      y = cell.y + self.canvasOffsetTop + marginTop;\n\n    if (tree.icon) {\n      self.ctx.beginPath();\n      const oldFillStyle = self.ctx.fillStyle;\n      const oldStrokeStyle = self.ctx.strokeStyle;\n\n      if (cell.hovered && self.hovers.onCellTreeIcon) {\n        self.ctx.fillStyle = self.style.cellTreeIconHoverFillColor;\n      } else {\n        self.ctx.fillStyle = self.style.cellTreeIconFillColor;\n      }\n\n      self.ctx.fillRect(x, y, iconSize, iconSize);\n      self.ctx.strokeStyle = self.style.cellTreeIconBorderColor;\n      self.ctx.rect(x, y, iconSize, iconSize);\n      self.ctx.stroke();\n\n      self.ctx.beginPath();\n      if (tree.expand) {\n        self.ctx.moveTo(x + 3, y + iconSize * 0.5);\n        self.ctx.lineTo(x + iconSize - 3, y + iconSize * 0.5);\n      } else {\n        self.ctx.moveTo(x + 2, y + iconSize * 0.5);\n        self.ctx.lineTo(x + iconSize - 2, y + iconSize * 0.5);\n        self.ctx.moveTo(x + iconSize * 0.5, y + 2);\n        self.ctx.lineTo(x + iconSize * 0.5, y + iconSize - 2);\n      }\n      self.ctx.lineWidth = self.style.cellTreeIconLineWidth;\n      self.ctx.strokeStyle = self.style.cellTreeIconLineColor;\n      self.ctx.stroke();\n\n      self.ctx.strokeStyle = oldStrokeStyle;\n      self.ctx.fillStyle = oldFillStyle;\n    }\n\n    return marginLeft + iconSize + marginRight;\n  }\n  function drawFilterButtonArrow(x, y) {\n    var mt =\n        ((self.style.filterButtonHeight - self.style.filterButtonArrowHeight) /\n          2) *\n        self.scale,\n      ml =\n        ((self.style.filterButtonWidth - self.style.filterButtonArrowWidth) /\n          2) *\n        self.scale,\n      aw = self.style.filterButtonArrowWidth * self.scale,\n      ah = self.style.filterButtonArrowHeight * self.scale;\n    x += self.canvasOffsetLeft;\n    y += self.canvasOffsetTop;\n    self.ctx.fillStyle = self.style.filterButtonArrowColor;\n    self.ctx.strokeStyle = self.style.filterButtonArrowBorderColor;\n    self.ctx.beginPath();\n    x = x + ml;\n    y = y + mt;\n\n    self.ctx.moveTo(x, y);\n    self.ctx.lineTo(x + aw, y);\n    self.ctx.lineTo(x + aw * 0.5, y + ah);\n    self.ctx.moveTo(x, y);\n\n    self.ctx.stroke();\n    self.ctx.fill();\n    return ml + aw;\n  }\n  function radiusRect(x, y, w, h, radius) {\n    x += self.canvasOffsetLeft;\n    y += self.canvasOffsetTop;\n    var r = x + w,\n      b = y + h;\n    self.ctx.beginPath();\n    self.ctx.moveTo(x + radius, y);\n    self.ctx.lineTo(r - radius, y);\n    self.ctx.quadraticCurveTo(r, y, r, y + radius);\n    self.ctx.lineTo(r, y + h - radius);\n    self.ctx.quadraticCurveTo(r, b, r - radius, b);\n    self.ctx.lineTo(x + radius, b);\n    self.ctx.quadraticCurveTo(x, b, x, b - radius);\n    self.ctx.lineTo(x, y + radius);\n    self.ctx.quadraticCurveTo(x, y, x + radius, y);\n  }\n  function fillRect(x, y, w, h) {\n    x += self.canvasOffsetLeft;\n    y += self.canvasOffsetTop;\n    self.ctx.fillRect(x, y, w, h);\n  }\n  function strokeRect(x, y, w, h) {\n    x += self.canvasOffsetLeft;\n    y += self.canvasOffsetTop;\n    self.ctx.strokeRect(x, y, w, h);\n  }\n  function fillText(text, x, y) {\n    x += self.canvasOffsetLeft;\n    y += self.canvasOffsetTop;\n    self.ctx.fillText(text, x, y);\n  }\n  function fillCircle(x, y, r) {\n    x += self.canvasOffsetLeft;\n    y += self.canvasOffsetTop;\n    self.ctx.beginPath();\n    self.ctx.arc(x, y, r, 0, 2 * Math.PI);\n    self.ctx.fill();\n  }\n  function strokeCircle(x, y, r) {\n    x += self.canvasOffsetLeft;\n    y += self.canvasOffsetTop;\n    self.ctx.beginPath();\n    self.ctx.arc(x, y, r, 0, 2 * Math.PI);\n    self.ctx.stroke();\n  }\n  function clipFrozenArea(mode) {\n    // 0 both, 1 rows, 2 cols\n    // self.lastFrozenColumnPixel;\n    // self.lastFrozenRowPixel;\n    self.ctx.beginPath();\n    if (mode === 0) {\n      self.ctx.moveTo(self.lastFrozenColumnPixel, self.lastFrozenRowPixel);\n      self.ctx.lineTo(self.lastFrozenColumnPixel, self.height);\n      self.ctx.lineTo(self.width, self.height);\n      self.ctx.lineTo(self.width, self.lastFrozenRowPixel);\n    }\n    if (mode === 1) {\n      self.ctx.moveTo(0, self.lastFrozenRowPixel);\n      self.ctx.lineTo(0, self.height);\n      self.ctx.lineTo(self.width, self.height);\n      self.ctx.lineTo(self.width, self.lastFrozenRowPixel);\n    }\n    if (mode === 2) {\n      self.ctx.moveTo(self.lastFrozenColumnPixel, 0);\n      self.ctx.lineTo(self.width, 0);\n      self.ctx.lineTo(self.width, self.height);\n      self.ctx.lineTo(self.lastFrozenColumnPixel, self.height);\n    }\n    self.ctx.clip();\n  }\n  function fillHandle(x, y, r) {\n    if (self.style.selectionHandleType === 'circle') {\n      return fillCircle(x, y, r * 0.5);\n    }\n    fillRect(x - r * 0.5, y - r * 0.5, r, r);\n  }\n  function strokeHandle(x, y, r) {\n    if (self.style.selectionHandleType === 'circle') {\n      return strokeCircle(x, y, r * 0.5);\n    }\n    strokeRect(x - r * 0.5, y - r * 0.5, r, r);\n  }\n  function addselectionHandle(c, pos) {\n    var hw = self.style.selectionHandleSize,\n      p = {\n        tr: function () {\n          fillHandle(c.x + c.width, c.y, hw);\n          strokeHandle(c.x + c.width, c.y, hw);\n        },\n        br: function () {\n          fillHandle(c.x + c.width, c.y + c.height, hw);\n          strokeHandle(c.x + c.width, c.y + c.height, hw);\n        },\n        tl: function () {\n          fillHandle(c.x, c.y, hw);\n          strokeHandle(c.x, c.y, hw);\n        },\n        bl: function () {\n          fillHandle(c.x, c.y + c.height, hw);\n          strokeHandle(c.x, c.y + c.height, hw);\n        },\n      };\n    p[pos]();\n  }\n  function addBorderLine(c, pos) {\n    self.ctx.beginPath();\n    var p = {\n      t: function () {\n        self.ctx.moveTo(\n          c.x + self.canvasOffsetLeft,\n          c.y + self.canvasOffsetTop,\n        );\n        self.ctx.lineTo(\n          c.x + self.canvasOffsetLeft + c.width,\n          c.y + self.canvasOffsetTop,\n        );\n      },\n      r: function () {\n        self.ctx.moveTo(\n          c.x + self.canvasOffsetLeft + c.width,\n          c.y + self.canvasOffsetTop,\n        );\n        self.ctx.lineTo(\n          c.x + self.canvasOffsetLeft + c.width,\n          c.y + self.canvasOffsetTop + c.height,\n        );\n      },\n      b: function () {\n        self.ctx.moveTo(\n          c.x + self.canvasOffsetLeft,\n          c.y + self.canvasOffsetTop + c.height,\n        );\n        self.ctx.lineTo(\n          c.x + self.canvasOffsetLeft + c.width,\n          c.y + self.canvasOffsetTop + c.height,\n        );\n      },\n      l: function () {\n        self.ctx.moveTo(\n          c.x + self.canvasOffsetLeft,\n          c.y + self.canvasOffsetTop,\n        );\n        self.ctx.lineTo(\n          c.x + self.canvasOffsetLeft,\n          c.y + self.canvasOffsetTop + c.height,\n        );\n      },\n    };\n    p[pos]();\n    self.ctx.stroke();\n  }\n  function addEllipsis(text, width) {\n    var c,\n      w = 0;\n    if (self.ellipsisCache[text] && self.ellipsisCache[text][width]) {\n      return self.ellipsisCache[text][width];\n    }\n    //TODO Add ellipsis back when there is a fast way to do it\n    w = self.ctx.measureText(text).width;\n    self.ellipsisCache[text] = self.ellipsisCache[text] || {};\n    c = { value: text, width: w };\n    self.ellipsisCache[text][width] = c;\n    return c;\n  }\n  function wrapText(cell, splitChar) {\n    if (!cell.formattedValue) {\n      return {\n        lines: [{ width: 0, value: '' }],\n        width: 0,\n        height: cell.calculatedLineHeight,\n      };\n    }\n    var max = 0,\n      n = '\\n',\n      x,\n      word,\n      words = cell.formattedValue.split(splitChar),\n      textHeight = cell.calculatedLineHeight,\n      lines = [],\n      out = [],\n      wrap = self.style.cellWhiteSpace !== 'nowrap',\n      autoResize = self.attributes.autoResizeRows && wrap,\n      elWidth,\n      et = self.attributes.ellipsisText,\n      elClipLength,\n      plWidth,\n      clippedVal,\n      ogWordWidth,\n      previousLine,\n      line = {\n        width: 0,\n        value: '',\n      },\n      cHeight = wrap ? cell.paddedHeight : cell.calculatedLineHeight;\n    lines.push(line);\n    elWidth = self.ctx.measureText(' ' + et).width;\n    for (x = 0; x < words.length; x += 1) {\n      word = words[x];\n      var curSplitChar = word[word.length - 1] === '-' ? '' : splitChar;\n      var measure = self.ctx.measureText(word + curSplitChar);\n      if (line.width + measure.width + elWidth < cell.paddedWidth) {\n        line.value += word + curSplitChar;\n        line.width += measure.width;\n        continue;\n      }\n      // if there is a hyphenated word that is too long\n      // split it and add the split set to the array\n      // then back up and re-read new split set\n      // this behavior seems right, it might not be\n      if (/\\w-\\w/.test(word) && cell.paddedWidth < measure.width) {\n        var arr = word.split('-');\n        arr = arr.map((item, index) => {\n          return index === arr.length - 1 ? item : item + '-';\n        });\n        words.splice(x, 1, ...arr);\n        x -= 1;\n        continue;\n      }\n      line = {\n        width: measure.width,\n        value: word + curSplitChar,\n      };\n      if (x === 0) {\n        lines = [];\n        lines.push(line);\n      }\n      textHeight += cell.calculatedLineHeight;\n      if (textHeight > cHeight && !autoResize) {\n        if (lines.length === 0) {\n          break;\n        }\n        elClipLength = 1;\n        previousLine = lines[lines.length - 1];\n        if (previousLine.width < cell.paddedWidth && words.length === 1) {\n          break;\n        }\n        clippedVal = previousLine.value + word;\n        plWidth = self.ctx.measureText(clippedVal + et).width;\n        var originText = clippedVal;\n        if (plWidth > cell.paddedWidth) {\n          var stepLength = parseInt(clippedVal.length / 2);\n          var direction = -1;\n          while (stepLength > 0) {\n            clippedVal = originText.substr(\n              0,\n              stepLength * direction + clippedVal.length,\n            );\n            plWidth = self.ctx.measureText(clippedVal + et).width;\n            direction = plWidth > cell.paddedWidth ? -1 : 1;\n            stepLength = parseInt(stepLength / 2);\n          }\n        }\n        clippedVal =\n          clippedVal + (originText.length != clippedVal.length ? et : '');\n        previousLine.value = clippedVal;\n        previousLine.width = plWidth;\n        break;\n      }\n      if (x > 0) {\n        lines.push(line);\n      }\n    }\n    return {\n      lines: lines,\n      width: max,\n      height: cell.calculatedLineHeight * lines.length,\n    };\n  }\n  function drawText(cell, treeCellPadding = 0) {\n    var ll = cell.text.lines.length,\n      h = cell.fontHeight * cell.lineHeight,\n      x,\n      line,\n      wrap = self.style.cellWhiteSpace !== 'nowrap',\n      textHeight = 0;\n    for (x = 0; x < cell.text.lines.length; x += 1) {\n      line = cell.text.lines[x];\n      var vPos =\n          Math.max(\n            (cell.height -\n              (wrap ? cell.text.height : cell.calculatedLineHeight)) *\n              0.5,\n            0,\n          ) + h,\n        hPos =\n          cell.paddingLeft +\n          treeCellPadding +\n          cell.treeArrowWidth +\n          cell.orderByArrowWidth;\n      if (cell.horizontalAlignment === 'right') {\n        hPos =\n          cell.paddingLeft + treeCellPadding + cell.paddedWidth - line.width;\n      } else if (cell.horizontalAlignment === 'center') {\n        hPos =\n          cell.paddingLeft +\n          treeCellPadding +\n          (cell.paddedWidth + cell.paddingRight) / 2 -\n          line.width / 2;\n      }\n      if (cell.verticalAlignment === 'top') {\n        vPos = cell.calculatedLineHeight;\n      } else if (cell.verticalAlignment === 'bottom') {\n        vPos = cell.height - cell.paddingBottom - cell.text.height;\n      }\n      line.height = h + cell.lineSpacing;\n      line.offsetLeft = hPos;\n      line.offsetTop = vPos;\n      line.x = cell.x + hPos;\n      line.y = cell.y + textHeight + vPos;\n      textHeight += line.height;\n      fillText(line.value, line.x, line.y);\n    }\n    if (self.attributes.debug && cell.active) {\n      requestAnimationFrame(function () {\n        self.ctx.font = self.style.debugFont;\n        self.ctx.fillStyle = self.style.debugColor;\n        fillText(\n          JSON.stringify(\n            {\n              x: cell.x,\n              y: cell.y,\n              h: cell.height,\n              w: cell.width,\n              pw: cell.paddedWidth,\n              idx: cell.columnIndex,\n              idx_ord: cell.sortColumnIndex,\n            },\n            null,\n            '\\t',\n          ),\n          cell.x + 14,\n          cell.y + 14,\n        );\n        fillText(\n          JSON.stringify(\n            cell.text.lines.map(function (l) {\n              return { w: l.width, v: l.value.length };\n            }),\n            null,\n            '\\t',\n          ),\n          cell.x + 14,\n          cell.y + 30,\n        );\n      });\n    }\n  }\n  function getFrozenColumnsWidth() {\n    var w = 0,\n      s = self.getSchema(),\n      x = 0,\n      n = Math.min(self.frozenColumn, s.length),\n      collapsedGroups = self.getCollapsedColumnGroups(),\n      column;\n    hiddenFrozenColumnCount = 0;\n    while (x < n) {\n      column = s[x];\n      if (column.hidden) {\n        hiddenFrozenColumnCount += 1;\n      } else {\n        const isCollapsed =\n          collapsedGroups.findIndex(\n            (group) => x >= group.from && x <= group.to,\n          ) >= 0;\n        if (isCollapsed) {\n          hiddenFrozenColumnCount += 1;\n        } else {\n          w += self.getColumnWidth(x);\n        }\n      }\n      x += 1;\n    }\n    return w;\n  }\n  /**\n   * Redraws the grid. No matter what the change, this is the only method required to refresh everything.\n   * @memberof canvasDatagrid\n   * @name draw\n   * @method\n   */\n  // r = literal row index\n  // rd = row data array\n  // i = user order index\n  // o = literal data index\n  // y = y drawing cursor\n  // x = x drawing cursor\n  // s = visible schema array\n  // cx = current x drawing cursor sub calculation var\n  // cy = current y drawing cursor sub calculation var\n  // a = static cell (like corner cell)\n  // p = perf counter\n  // l = data length\n  // u = current cell\n  // h = current height\n  // w = current width\n  self.draw = function (internal) {\n    if (self.dispatchEvent('beforedraw', {})) {\n      return;\n    }\n    if (!self.isChildGrid && (!self.height || !self.width)) {\n      return;\n    }\n    if (self.isChildGrid && internal) {\n      requestAnimationFrame(self.parentGrid.draw);\n      return;\n    }\n    if (self.intf.visible === false) {\n      return;\n    }\n    // initial values\n    var checkScrollHeight,\n      rowHeaderCell,\n      p,\n      cx,\n      cy,\n      treeGrid,\n      rowOpen,\n      rowHeight,\n      cornerCell,\n      y,\n      x,\n      c,\n      h,\n      w,\n      schema,\n      rowIndex,\n      rowData,\n      aCell,\n      viewData = self.viewData || [],\n      bc = self.style.gridBorderCollapse === 'collapse',\n      selectionBorders = [],\n      moveBorders = [],\n      selectionHandles = [],\n      rowHeaders = [],\n      l = viewData.length,\n      u = self.currentCell || {},\n      columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n      rowHeaderCellWidth = self.getRowHeaderCellWidth(),\n      rowGroupsAreaWidth = self.getRowGroupAreaWidth(),\n      columnGroupsAreaHeight = self.getColumnGroupAreaHeight(),\n      /** key: boundRowIndex, value: `{y,h}` */\n      rowGroupsRectInfo = {},\n      /** value: `{y,h}` */\n      rowGroupsFrozenInfo = {},\n      /** key: columnIndex, value: `{x,w}` */\n      columnGroupsRectInfo = {},\n      collapsedColumnGroups = self.getCollapsedColumnGroups(),\n      collapsedRowGroups = self.getCollapsedRowGroups(),\n      cellHeight = self.style.cellHeight,\n      currentRowIndexOffset = 0,\n      /** @type {Array<{from:number,plus:number}>} */\n      rowIndexOffsetByHiddenRows = self.hiddenRowRanges\n        .map((range) => ({\n          from: range[0],\n          plus: range[1] - range[0] + 1,\n        }))\n        .sort((a, b) => a.from - b.from);\n    drawCount += 1;\n    p = performance.now();\n    self.visibleRowHeights = [];\n    // if data length has changed, there is no way to know\n    if (viewData.length > self.orders.rows.length) {\n      self.createRowOrders();\n    }\n    function saveRowGroupsRectInfo(cell) {\n      let index = cell.boundRowIndex;\n      if (index >= -1 === false)\n        if (cell.rowIndex === -1) index = -1;\n        else return;\n      if (rowGroupsRectInfo[index]) return;\n      rowGroupsRectInfo[index] = { y: cell.y, h: cell.height };\n    }\n    function saveColumnGroupsRectInfo(cell) {\n      const index = cell.columnIndex;\n      if (columnGroupsRectInfo[index]) return;\n      columnGroupsRectInfo[index] = { x: cell.x, w: cell.width };\n    }\n    /**\n     * @param {number} columnIndex\n     * @returns {boolean}\n     */\n    function isColumnCollapsedByGroup(columnIndex) {\n      return (\n        collapsedColumnGroups.findIndex(\n          (group) => columnIndex >= group.from && columnIndex <= group.to,\n        ) >= 0\n      );\n    }\n\n    function drawScrollBars() {\n      var drawCorner,\n        en = self.scrollBox.entities,\n        m = self.style.scrollBarBoxMargin * 2;\n      self.ctx.strokeStyle = self.style.scrollBarBorderColor;\n      self.ctx.lineWidth = self.style.scrollBarBorderWidth;\n      if (self.frozenColumn > 0) {\n        en.horizontalBox.x =\n          rowHeaderCellWidth +\n          self.style.scrollBarBoxMargin +\n          self.scrollCache.x[self.frozenColumn - 1] +\n          (en.horizontalBar.width -\n            self.scrollCache.x[self.frozenColumn - 1] -\n            self.scrollBox.scrollBoxWidth) *\n            (self.scrollBox.scrollLeft / self.scrollBox.scrollWidth);\n      } else {\n        en.horizontalBox.x =\n          rowHeaderCellWidth +\n          self.style.scrollBarBoxMargin +\n          (en.horizontalBar.width - self.scrollBox.scrollBoxWidth) *\n            (self.scrollBox.scrollLeft / self.scrollBox.scrollWidth);\n      }\n      en.verticalBox.y =\n        columnHeaderCellHeight +\n        self.style.scrollBarBoxMargin +\n        self.scrollCache.y[self.frozenRow] +\n        (en.verticalBar.height -\n          self.scrollBox.scrollBoxHeight -\n          self.scrollCache.y[self.frozenRow]) *\n          (self.scrollBox.scrollTop / self.scrollBox.scrollHeight);\n      if (self.scrollBox.horizontalBarVisible) {\n        self.ctx.fillStyle = self.style.scrollBarBackgroundColor;\n        fillRect(\n          en.horizontalBar.x,\n          en.horizontalBar.y,\n          en.horizontalBar.width + m,\n          en.horizontalBar.height,\n        );\n        strokeRect(\n          en.horizontalBar.x,\n          en.horizontalBar.y,\n          en.horizontalBar.width + m,\n          en.horizontalBar.height,\n        );\n        self.ctx.fillStyle = self.style.scrollBarBoxColor;\n        if (self.scrollBox.horizontalBoxVisible) {\n          if (/horizontal/.test(u.context)) {\n            self.ctx.fillStyle = self.style.scrollBarActiveColor;\n          }\n          radiusRect(\n            en.horizontalBox.x,\n            en.horizontalBox.y,\n            en.horizontalBox.width,\n            en.horizontalBox.height,\n            self.style.scrollBarBoxBorderRadius,\n          );\n          self.ctx.stroke();\n          self.ctx.fill();\n        }\n        drawCorner = true;\n        self.visibleCells.unshift(en.horizontalBar);\n        self.visibleCells.unshift(en.horizontalBox);\n      }\n      if (self.scrollBox.verticalBarVisible) {\n        self.ctx.fillStyle = self.style.scrollBarBackgroundColor;\n        fillRect(\n          en.verticalBar.x,\n          en.verticalBar.y,\n          en.verticalBar.width,\n          en.verticalBar.height + m,\n        );\n        strokeRect(\n          en.verticalBar.x,\n          en.verticalBar.y,\n          en.verticalBar.width,\n          en.verticalBar.height + m,\n        );\n        if (self.scrollBox.verticalBoxVisible) {\n          self.ctx.fillStyle = self.style.scrollBarBoxColor;\n          if (/vertical/.test(u.context)) {\n            self.ctx.fillStyle = self.style.scrollBarActiveColor;\n          }\n          radiusRect(\n            en.verticalBox.x,\n            en.verticalBox.y,\n            en.verticalBox.width,\n            en.verticalBox.height,\n            self.style.scrollBarBoxBorderRadius,\n          );\n          self.ctx.stroke();\n          self.ctx.fill();\n        }\n        drawCorner = true;\n        self.visibleCells.unshift(en.verticalBar);\n        self.visibleCells.unshift(en.verticalBox);\n      }\n      if (drawCorner) {\n        //corner\n        self.ctx.strokeStyle = self.style.scrollBarCornerBorderColor;\n        self.ctx.fillStyle = self.style.scrollBarCornerBackgroundColor;\n        radiusRect(\n          en.corner.x,\n          en.corner.y,\n          en.corner.width,\n          en.corner.height,\n          0,\n        );\n        self.ctx.stroke();\n        self.ctx.fill();\n        self.visibleCells.unshift(en.corner);\n      }\n    }\n    function createHandlesOverlayArray(cell) {\n      if (self.attributes.allowMovingSelection || self.mobile) {\n        if (\n          cell.selectionBorderTop &&\n          cell.selectionBorderRight &&\n          self.mobile\n        ) {\n          selectionHandles.push([cell, 'tr']);\n          cell.selectionHandle = 'tr';\n        }\n        if (cell.selectionBorderTop && cell.selectionBorderLeft) {\n          if (self.mobile) {\n            selectionHandles.push([cell, 'tl']);\n            cell.selectionHandle = 'tl';\n          }\n          if (self.fillOverlay.handle) {\n            self.fillOverlay.snapTo = {\n              x: cell.x,\n              y: cell.y,\n            };\n          }\n        }\n        if (\n          cell.selectionBorderBottom &&\n          cell.selectionBorderLeft &&\n          self.mobile\n        ) {\n          selectionHandles.push([cell, 'bl']);\n          cell.selectionHandle = 'bl';\n        }\n        if (\n          cell.selectionBorderBottom &&\n          cell.selectionBorderRight &&\n          (self.attributes.selectionHandleBehavior !== 'none' || self.mobile)\n        ) {\n          selectionHandles.push([cell, 'br']);\n          cell.selectionHandle = 'br';\n\n          if (self.fillOverlay.handle) {\n            self.fillOverlay.handle.x = cell.x + cell.width;\n            self.fillOverlay.handle.y = cell.y + cell.height;\n          }\n        }\n\n        if (self.fillOverlay.handle) {\n          // Some corners may not be displaying, so we get at least\n          // one correct axis in order to display a fill overlay.\n          if (self.fillOverlay.snapTo.x === -1 && cell.selectionBorderLeft) {\n            self.fillOverlay.snapTo.x = cell.x;\n          }\n          if (self.fillOverlay.snapTo.y === -1 && cell.selectionBorderTop) {\n            self.fillOverlay.snapTo.y = cell.y;\n          }\n        }\n      }\n    }\n    function createBorderOverlayArray(\n      cell,\n      drawArray,\n      propPrefix,\n      offsetPoint,\n    ) {\n      cell.selectionBorder = '';\n      // TODO: optimize it by `getSelectionStateFromCells`\n      const isSelected = offsetPoint\n        ? (row, col) =>\n            isCellSelected(\n              self.selections,\n              row - offsetPoint.y,\n              col - offsetPoint.x,\n            )\n        : (row, col) => isCellSelected(self.selections, row, col);\n      const lastColumnIndex = Math.max(schema.length - 1, 0);\n      const lastRowIndex = Math.max(viewData.length - 1, 0);\n      const { isRowHeader, rowIndex, columnIndex } = cell;\n\n      if (!isRowHeader && isSelected(rowIndex, columnIndex)) {\n        if (\n          (!isSelected(rowIndex - 1, columnIndex) || rowIndex === 0) &&\n          !cell.isHeader\n        ) {\n          drawArray.push([cell, 't']);\n          cell[propPrefix + 'BorderTop'] = true;\n          cell[propPrefix + 'Border'] += 't';\n        }\n        if (\n          rowIndex >= lastRowIndex ||\n          !isSelected(rowIndex + 1, columnIndex)\n        ) {\n          drawArray.push([cell, 'b']);\n          cell[propPrefix + 'BorderBottom'] = true;\n          cell[propPrefix + 'Border'] += 'b';\n        }\n        if (columnIndex === 0 || !isSelected(rowIndex, columnIndex - 1)) {\n          drawArray.push([cell, 'l']);\n          cell[propPrefix + 'BorderLeft'] = true;\n          cell[propPrefix + 'Border'] += 'l';\n        }\n        if (\n          columnIndex >= lastColumnIndex ||\n          !isSelected(rowIndex, columnIndex + 1)\n        ) {\n          drawArray.push([cell, 'r']);\n          cell[propPrefix + 'BorderRight'] = true;\n          cell[propPrefix + 'Border'] += 'r';\n        }\n      }\n    }\n    function drawCell(rowData, rowOrderIndex, rowIndex) {\n      const isActiveRowHeader =\n        self.orders.rows[self.activeCell.rowIndex] === rowOrderIndex ||\n        self.isRowSelected(rowOrderIndex);\n\n      return function drawEach(header, headerIndex, columnOrderIndex) {\n        if (header.hidden) {\n          return 0;\n        }\n        var cellStyle = header.style || 'cell',\n          cellGridAttributes,\n          cell,\n          isHeader = /HeaderCell/.test(cellStyle),\n          isCorner = /cornerCell/.test(cellStyle),\n          isRowHeader = 'rowHeaderCell' === cellStyle,\n          isColumnHeader = 'columnHeaderCell' === cellStyle,\n          isFilterable =\n            self.filterable.rows.includes(rowIndex) &&\n            self.filterable.columns.includes(headerIndex),\n          wrap = self.style.cellWhiteSpace !== 'nowrap',\n          // TODO: optimize it by `getSelectionStateFromCells`\n          selected = isCellSelected(\n            self.selections,\n            rowOrderIndex,\n            columnOrderIndex,\n          ),\n          hovered =\n            self.hovers.rowIndex === rowOrderIndex &&\n            (self.attributes.hoverMode === 'row' ||\n              self.hovers.columnIndex === columnOrderIndex),\n          openedFilter =\n            self.selectedFilterButton.rowIndex == rowIndex &&\n            self.selectedFilterButton.columnIndex == headerIndex,\n          active =\n            self.activeCell.rowIndex === rowOrderIndex &&\n            self.activeCell.columnIndex === columnOrderIndex,\n          isColumnHeaderCellCap = cellStyle === 'columnHeaderCellCap',\n          rawValue = rowData ? rowData[header.name] : undefined,\n          isGrid = header.type === 'canvas-datagrid',\n          val,\n          f = self.formatters[header.type || 'string'],\n          orderByArrowSize = 0,\n          treeArrowSize = 0,\n          cellWidth = self.sizes.columns[headerIndex] || header.width,\n          ev = {\n            value: rawValue,\n            row: rowData,\n            header: header,\n          };\n\n        const isActiveColumnHeader =\n          self.orders.columns[self.activeCell.columnIndex] === headerIndex ||\n          self.isColumnSelected(self.activeCell.viewColumnIndex);\n        let activeHeader = false;\n        if (\n          (isActiveColumnHeader || isActiveRowHeader) &&\n          (columnOrderIndex === -1 || rowOrderIndex === -1)\n        )\n          activeHeader = isRowHeader\n            ? 'activeRowHeaderCell'\n            : 'activeColumnHeaderCell';\n\n        if (isColumnHeaderCellCap) {\n          cellWidth = w - x;\n        }\n        // if no data or schema are defined, a width is provided to the stub column\n        if (cellWidth === undefined) {\n          cellWidth = self.style.cellWidth;\n        }\n        cellWidth = cellWidth * self.scale;\n        if (x + cellWidth + self.style.cellBorderWidth < 0) {\n          x += cellWidth + self.style.cellBorderWidth;\n        }\n        if (active && cellStyle !== 'cornerCell') {\n          cellStyle = 'activeCell';\n        }\n        if (self.visibleRows.indexOf(rowIndex) === -1 && !isHeader) {\n          self.visibleRows.push(rowIndex);\n        }\n        val = self.dispatchEvent('formatcellvalue', ev);\n        cx = x;\n        cy = y;\n        if (cellStyle === 'cornerCell') {\n          cx = 0;\n          cy = 0;\n        } else if (isRowHeader) {\n          cx = 0;\n        } else if (isHeader) {\n          cy = 0;\n        }\n        cell = {\n          type: isGrid ? 'canvas-datagrid-cell' : header.type,\n          style: cellStyle,\n          nodeType: 'canvas-datagrid-cell',\n          x: cx,\n          y: cy,\n          fontHeight: (self.style[cellStyle + 'FontHeight'] || 0) * self.scale,\n          horizontalAlignment: self.style[cellStyle + 'HorizontalAlignment'],\n          verticalAlignment: self.style[cellStyle + 'VerticalAlignment'],\n          paddingLeft:\n            (self.style[cellStyle + 'PaddingLeft'] || 0) * self.scale,\n          paddingTop: (self.style[cellStyle + 'PaddingTop'] || 0) * self.scale,\n          paddingRight:\n            (self.style[cellStyle + 'PaddingRight'] || 0) * self.scale,\n          paddingBottom:\n            (self.style[cellStyle + 'PaddingBottom'] || 0) * self.scale,\n          whiteSpace: self.style.cellWhiteSpace,\n          lineHeight: self.style.cellLineHeight,\n          lineSpacing: self.style.cellLineSpacing,\n          offsetTop: self.canvasOffsetTop + cy,\n          offsetLeft: self.canvasOffsetLeft + cx,\n          scrollTop: self.scrollBox.scrollTop,\n          scrollLeft: self.scrollBox.scrollLeft,\n          active: active || activeHeader,\n          hovered: hovered,\n          selected: selected,\n          width: cellWidth,\n          height: cellHeight,\n          offsetWidth: cellWidth,\n          offsetHeight: cellHeight,\n          parentNode: self.intf.parentNode,\n          offsetParent: self.intf.parentNode,\n          data: rowData,\n          isCorner: isCorner,\n          isHeader: isHeader,\n          isColumnHeader: isColumnHeader,\n          isColumnHeaderCellCap: isColumnHeaderCellCap,\n          isRowHeader: isRowHeader,\n          isFilterable: isFilterable,\n          openedFilter: openedFilter,\n          rowOpen: rowOpen,\n          header: header,\n\n          columnIndex: columnOrderIndex,\n          rowIndex: rowOrderIndex,\n\n          viewRowIndex: rowOrderIndex,\n          viewColumnIndex: columnOrderIndex,\n\n          boundRowIndex: self.getBoundRowIndexFromViewRowIndex(rowOrderIndex),\n          boundColumnIndex: self.getBoundColumnIndexFromViewColumnIndex(\n            columnOrderIndex,\n          ),\n\n          sortColumnIndex: headerIndex,\n          sortRowIndex: rowIndex,\n\n          isGrid: isGrid,\n          isNormal: !isGrid && !isCorner && !isHeader,\n          gridId: (self.attributes.name || '') + rowIndex + ':' + headerIndex,\n          parentGrid: self.intf,\n          innerHTML: '',\n          activeHeader: activeHeader,\n          value:\n            isHeader && !isRowHeader ? header.title || header.name : rawValue,\n          isRowTree:\n            rowOrderIndex >= 0 &&\n            columnOrderIndex == self.cellTree.rowTreeColIndex &&\n            self.cellTree.rows.length > 0 &&\n            self.cellTree.rows[rowOrderIndex].icon,\n          isColumnTree:\n            columnOrderIndex >= 0 &&\n            self.cellTree.columns[rowOrderIndex] &&\n            self.cellTree.columns[rowOrderIndex][columnOrderIndex].icon,\n        };\n        cell.calculatedLineHeight =\n          cell.fontHeight * cell.lineHeight + cell.lineSpacing;\n        cell.paddedWidth = cell.width - cell.paddingRight - cell.paddingLeft;\n        cell.paddedHeight = cell.height - cell.paddingTop - cell.paddingBottom;\n        ev.cell = cell;\n        cell.userHeight = cell.isHeader ? self.sizes.rows[-1] : rowHeight;\n        cell.userWidth = cell.isHeader\n          ? self.sizes.columns.cornerCell\n          : self.sizes.columns[headerIndex];\n        self.visibleCells.unshift(cell);\n        saveRowGroupsRectInfo(cell);\n        saveColumnGroupsRectInfo(cell);\n        if (self.dispatchEvent('beforerendercell', ev)) {\n          return;\n        }\n        self.ctx.fillStyle = self.style[cellStyle + 'BackgroundColor'];\n        self.ctx.strokeStyle = self.style[cellStyle + 'BorderColor'];\n        self.ctx.lineWidth = self.style[cellStyle + 'BorderWidth'];\n        if (hovered) {\n          self.ctx.fillStyle = self.style[cellStyle + 'HoverBackgroundColor'];\n          self.ctx.strokeStyle = self.style[cellStyle + 'HoverBorderColor'];\n        }\n        if (selected) {\n          self.ctx.fillStyle =\n            self.style[cellStyle + 'SelectedBackgroundColor'];\n          self.ctx.strokeStyle = self.style[cellStyle + 'SelectedBorderColor'];\n        }\n        if (activeHeader) {\n          self.ctx.fillStyle = self.style[activeHeader + 'BackgroundColor'];\n        }\n        self.dispatchEvent('rendercell', ev);\n        if (cell.isGrid) {\n          if (cell.height !== rowHeight) {\n            cell.height = rowHeight || self.style.cellHeightWithChildGrid;\n            checkScrollHeight = true;\n          }\n          cell.width =\n            self.sizes.columns[headerIndex] ||\n            self.style.cellWidthWithChildGrid;\n        }\n        if (rowOpen && !cell.isRowHeader) {\n          cell.height = self.sizes.rows[rowIndex] || self.style.cellHeight;\n        }\n        if (!cell.isGrid) {\n          fillRect(cx, cy, cell.width, cell.height);\n          strokeRect(cx, cy, cell.width, cell.height);\n        }\n        self.ctx.save();\n        radiusRect(cell.x, cell.y, cell.width, cell.height, 0);\n        self.ctx.clip();\n        self.dispatchEvent('afterrendercell', ev);\n        if (cell.height !== cellHeight && !(rowOpen && !cell.isRowHeader)) {\n          self.sizes.rows[isHeader ? -1 : rowIndex] = cell.height;\n          checkScrollHeight = true;\n        }\n        if (cell.width !== cellWidth) {\n          self.sizes.columns[headerIndex] = cell.width;\n          checkScrollHeight = true;\n        }\n        if (isRowHeader && self.attributes.tree) {\n          if (!self.dispatchEvent('rendertreearrow', ev)) {\n            treeArrowSize = drawTreeArrow(\n              cell,\n              self.style[cellStyle + 'PaddingLeft'],\n              cy,\n              0,\n            );\n          }\n        }\n        if ((self.attributes.showRowNumbers && isRowHeader) || !isRowHeader) {\n          if (cell.isGrid && !self.dispatchEvent('beforerendercellgrid', ev)) {\n            if (!self.childGrids[cell.gridId]) {\n              // HACK: this only allows setting of the child grids styles if data is set _after_\n              // this is less than desirable.  An interface needs to be made to effect the\n              // style of all cell grids.  One for individual grids already exists.\n              cellGridAttributes = self.cellGridAttributes;\n              cellGridAttributes.name = self.attributes.saveAppearance\n                ? cell.gridId\n                : undefined;\n              cellGridAttributes.component = false;\n              cellGridAttributes.parentNode = cell;\n              cellGridAttributes.data = rawValue;\n              ev.cellGridAttributes = cellGridAttributes;\n              if (self.dispatchEvent('beforecreatecellgrid', ev)) {\n                return;\n              }\n              self.childGrids[cell.gridId] = self.createGrid(\n                cellGridAttributes,\n              );\n              self.sizes.rows[rowIndex] =\n                self.sizes.rows[rowIndex] || self.style.cellGridHeight;\n              checkScrollHeight = true;\n            }\n            cell.grid = self.childGrids[cell.gridId];\n            cell.grid.parentNode = cell;\n            cell.grid.visible = true;\n            cell.grid.draw();\n            self.dispatchEvent('rendercellgrid', ev);\n          } else if (!cell.isGrid) {\n            if (self.childGrids[cell.gridId]) {\n              self.childGrids[cell.gridId].parentNode.offsetHeight = 0;\n            }\n            if (isHeader && self.orderBy === header.name) {\n              if (!self.dispatchEvent('renderorderbyarrow', ev)) {\n                orderByArrowSize = drawOrderByArrow(\n                  cx + self.style[cellStyle + 'PaddingLeft'],\n                  0,\n                );\n              }\n            }\n            self.ctx.fillStyle = self.style[cellStyle + 'Color'];\n            if (hovered) {\n              self.ctx.fillStyle = self.style[cellStyle + 'HoverColor'];\n            }\n            if (selected) {\n              self.ctx.fillStyle = self.style[cellStyle + 'SelectedColor'];\n            }\n            if (activeHeader) {\n              self.ctx.fillStyle = self.style[activeHeader + 'Color'];\n            }\n            cell.treeArrowWidth = treeArrowSize;\n            cell.orderByArrowWidth = orderByArrowSize;\n            // create text ref to see if height needs to expand\n            val = val !== undefined ? val : f ? f(ev) : '';\n            if (val === undefined && !f) {\n              val = '';\n              console.warn(\n                'canvas-datagrid: Unknown format ' +\n                  header.type +\n                  ' add a cellFormater',\n              );\n            }\n            cell.formattedValue = (val !== undefined && val !== null\n              ? val\n              : ''\n            ).toString();\n            if (\n              self.columnFilters &&\n              self.columnFilters[val] !== undefined &&\n              isHeader\n            ) {\n              cell.formattedValue = self.attributes.filterTextPrefix + val;\n            }\n            self.ctx.font =\n              self.style[cellStyle + 'FontHeight'] * self.scale +\n              'px ' +\n              self.style[cellStyle + 'FontName'];\n            if (!self.dispatchEvent('formattext', ev)) {\n              cell.text = wrapText(cell, ' ');\n            }\n            if (!self.dispatchEvent('rendertext', ev)) {\n              if (cell.innerHTML || header.type === 'html') {\n                drawHtml(cell);\n              } else {\n                let treeCellPadding = 0,\n                  isDrawText = true;\n                if (\n                  cell.columnIndex == self.cellTree.rowTreeColIndex &&\n                  !cell.isColumnHeader &&\n                  self.cellTree.rows.length > 0 &&\n                  Object.keys(self.cellTree.rows[cell.rowIndex]).length > 1\n                )\n                  treeCellPadding = drawCellTreeIcon(\n                    cell,\n                    self.cellTree.rows[cell.rowIndex],\n                    true,\n                  );\n\n                if (\n                  !cell.isRowHeader &&\n                  cell.rowIndex > 0 &&\n                  self.cellTree.columns[cell.rowIndex - 1] &&\n                  self.cellTree.columns[cell.rowIndex - 1][cell.columnIndex]\n                    .icon\n                ) {\n                  for (let r = cell.rowIndex - 1; r >= 0; r--) {\n                    if (!self.cellTree.columns[r]) break;\n                    if (!self.cellTree.columns[r][cell.columnIndex].icon) break;\n                    if (!self.cellTree.columns[r][cell.columnIndex].expand) {\n                      isDrawText = false;\n                      break;\n                    }\n                  }\n                }\n                if (\n                  isDrawText &&\n                  !cell.isRowHeader &&\n                  self.cellTree.columns[cell.rowIndex] &&\n                  self.cellTree.columns[cell.rowIndex][cell.columnIndex].icon\n                ) {\n                  if (\n                    self.viewData.length > 0 &&\n                    self.viewData[cell.rowIndex][cell.columnIndex].length > 0\n                  )\n                    treeCellPadding = drawCellTreeIcon(\n                      cell,\n                      self.cellTree.columns[cell.rowIndex][cell.columnIndex],\n                      false,\n                    );\n                }\n                if (isDrawText) drawText(cell, treeCellPadding);\n              }\n\n              if (wrap && cell.text && cell.text.height > rowHeight) {\n                self.sizes.rows[isHeader ? -1 : rowIndex] = cell.text.height;\n                checkScrollHeight = true;\n              }\n            }\n          }\n        }\n        if (active) {\n          aCell = cell;\n        }\n        createBorderOverlayArray(cell, selectionBorders, 'selection');\n        // createBorderOverlayArray calculates data for createHandlesOverlayArray so it must go 2nd\n        createHandlesOverlayArray(cell);\n        if (self.movingSelection) {\n          createBorderOverlayArray(cell, moveBorders, 'move', self.moveOffset);\n        }\n        self.ctx.restore();\n\n        if (isFilterable) {\n          drawFilterButton(cell);\n        }\n\n        // Gaps may occur in row numbers between consecutively rendered rows\n        // when we are filtering. We draw attention to this by drawing a thick\n        // border overlapping the two consecutive row headers. If sorting, visible\n        // row numbers stay the same (i.e. they don't correspond to the underlying\n        // data's row number), so we do not show row gaps in that case.\n        const isSorting =\n          self.orderings.columns && self.orderings.columns.length > 0;\n\n        if (\n          isRowHeader &&\n          self.attributes.showRowNumbers &&\n          self.attributes.showRowNumberGaps &&\n          isSorting === false\n        ) {\n          const previousRowNumber = self.getBoundRowIndexFromViewRowIndex(\n            rowOrderIndex - 1,\n          );\n          let hasRowGap =\n            previousRowNumber !== undefined &&\n            cell.boundRowIndex > 0 &&\n            cell.boundRowIndex - previousRowNumber > 1;\n          if (hasRowGap && collapsedRowGroups.length > 0) {\n            hasRowGap =\n              collapsedRowGroups.find(\n                (group) =>\n                  group.from === previousRowNumber &&\n                  group.to === cell.boundRowIndex,\n              ) >= 0;\n          }\n          // We don't treat the row index difference from hidden rows as the row gap.\n          if (hasRowGap && self.hiddenRowRanges.length > 0) {\n            for (let i = 0; i < self.hiddenRowRanges.length; i++) {\n              const [beginRowIndex, endRowIndex] = self.hiddenRowRanges[i];\n              if (\n                cell.boundRowIndex === endRowIndex + 1 &&\n                previousRowNumber === beginRowIndex - 1\n              ) {\n                hasRowGap = false;\n                break;\n              }\n            }\n          }\n\n          if (hasRowGap) {\n            const barHeight = self.style.rowHeaderCellRowNumberGapHeight;\n            const barColor = self.style.rowHeaderCellRowNumberGapColor;\n\n            self.ctx.save();\n\n            self.ctx.fillStyle = barColor;\n\n            fillRect(cell.x, cell.y - barHeight / 2, cell.width, barHeight);\n\n            self.ctx.restore();\n          }\n        }\n\n        //#region draw unhide indicator for column headers\n        if (isColumnHeader && self.attributes.showUnhideColumnsIndicator) {\n          const hovered = self.hovers.unhideIndicator;\n          const size = self.style.unhideIndicatorSize;\n          const cellX = x;\n          const topY = cell.y + Math.max(0.5 * (cell.height - size), 0);\n\n          const isActive = (orderIndex) =>\n            hovered &&\n            (hovered.dir === 'l' || hovered.dir === 'r') &&\n            orderIndex >= hovered.orderIndex0 &&\n            orderIndex <= hovered.orderIndex1;\n          const isHiddenColumn = (columnIndex) =>\n            columnIndex >= 0 &&\n            schema[columnIndex] &&\n            schema[columnIndex].hidden;\n\n          let orderIndex0, orderIndex1;\n          const drawIndicator = (leftX, dir, active) => {\n            self.visibleUnhideIndicators.push({\n              x: leftX - 1,\n              y: topY - 1,\n              x2: leftX + size + 2,\n              y2: topY + size + 2,\n              orderIndex0,\n              orderIndex1,\n              dir,\n            });\n            if (!active) {\n              const line = cell.text && cell.text.lines && cell.text.lines[0];\n              if (line) {\n                const iconsWidth = orderByArrowSize + treeArrowSize;\n                const lineX0 = iconsWidth > 0 ? iconsWidth : line.x;\n                const lineX1 = line.x + line.width;\n                if (leftX + size >= lineX0 && leftX <= lineX1) return;\n              }\n            }\n            drawUnhideIndicator(leftX, topY, size, dir, active);\n          }; // end of drawIndicator\n\n          let orderIndexPtr = columnOrderIndex - 1;\n          const prevColumnIndex = self.orders.columns[orderIndexPtr];\n          if (isHiddenColumn(prevColumnIndex)) {\n            const active = isActive(prevColumnIndex);\n            orderIndex0 = orderIndexPtr;\n            orderIndex1 = orderIndexPtr;\n            while (--orderIndexPtr >= 0) {\n              if (isHiddenColumn(self.orders.columns[orderIndexPtr]))\n                orderIndex0 = orderIndexPtr;\n              else break;\n            }\n            drawIndicator(cellX, 'r', active);\n          }\n\n          orderIndexPtr = columnOrderIndex + 1;\n          const nextColumnIndex = self.orders.columns[orderIndexPtr];\n          if (isHiddenColumn(nextColumnIndex)) {\n            const active = isActive(nextColumnIndex);\n            orderIndex0 = orderIndexPtr;\n            orderIndex1 = orderIndexPtr;\n            while (++orderIndexPtr < self.orders.columns.length) {\n              if (isHiddenColumn(self.orders.columns[orderIndexPtr]))\n                orderIndex1 = orderIndexPtr;\n              else break;\n            }\n            const indicatorX = x + cell.width - size;\n            drawIndicator(indicatorX, 'l', active);\n          }\n        }\n        //#endregion draw unhide indicator for column headers\n\n        //#region draw unhide indicator for row headers\n        if (\n          isRowHeader &&\n          self.attributes.showUnhideRowsIndicator &&\n          self.hiddenRowRanges.length > 0\n        ) {\n          // Leo's comment:\n          // from the first row to the last row, `rowIndex` is from 0 to the count of rows\n          // but `boundRowIndex` can be disordered if there are any ordered columns or filtered columns\n          // Like this statement:\n          // console.log(rowIndex, cell.boundRowIndex, cell.formattedValue);\n          // can output the result like this:\n          // 0 1 '2'\n          // 1 3 '4'\n          const hovered = self.hovers.unhideIndicator;\n          const size = self.style.unhideIndicatorSize;\n          const leftX = cell.x + cell.width - size - 2;\n          const cellY = y;\n          const topIndicators = {};\n          const bottomIndicators = {};\n          self.hiddenRowRanges.forEach((it) => {\n            topIndicators[it[0] - 1] = it;\n            bottomIndicators[it[1] + 1] = it;\n          });\n\n          const rowIndex = cell.rowIndex + currentRowIndexOffset;\n          const isActive = () =>\n            hovered &&\n            (hovered.dir === 't' || hovered.dir === 'b') &&\n            rowIndex >= hovered.orderIndex0 - 1 &&\n            rowIndex <= hovered.orderIndex1 + 1;\n\n          let orderIndex0, orderIndex1;\n          const drawIndicator = (topY, dir, active) => {\n            self.visibleUnhideIndicators.push({\n              x: leftX - 1,\n              y: topY - 1,\n              x2: leftX + size + 2,\n              y2: topY + size + 2,\n              orderIndex0,\n              orderIndex1,\n              dir,\n            });\n            drawUnhideIndicator(leftX, topY, size, dir, active);\n          }; // end of drawIndicator\n\n          let matched = topIndicators[rowIndex];\n          if (matched) {\n            const indicatorY = cellY + cell.height - size;\n            [orderIndex0, orderIndex1] = matched;\n            drawIndicator(indicatorY, 't', isActive());\n          }\n          matched = bottomIndicators[rowIndex];\n          if (matched) {\n            const indicatorY = cellY;\n            [orderIndex0, orderIndex1] = matched;\n            drawIndicator(indicatorY, 'b', isActive());\n          }\n        }\n        //#endregion draw unhide indicator for row headers\n\n        x += cell.width + (bc ? 0 : self.style.cellBorderWidth);\n        return cell.width;\n      }; // end of drawEach\n    }\n    function drawFilterButton(cell, ev) {\n      var posX = cell.x + cell.width - self.style.filterButtonWidth - 1;\n      var posY = cell.y + cell.height - self.style.filterButtonHeight - 2;\n      if (self.dispatchEvent('beforerenderfilterbutton', ev)) {\n        return;\n      }\n      self.ctx.save();\n      self.ctx.strokeStyle = self.style.filterButtonBorderColor;\n      self.ctx.fillStyle = self.style.filterButtonBackgroundColor;\n      if (cell.openedFilter) {\n        self.ctx.fillStyle = self.style.filterButtonActiveBackgroundColor;\n      } else if (cell.hovered && self.hovers.onFilterButton) {\n        self.ctx.fillStyle = self.style.filterButtonHoverBackgroundColor;\n      }\n      radiusRect(\n        posX,\n        posY,\n        self.style.filterButtonWidth,\n        self.style.filterButtonHeight,\n        self.style.filterButtonBorderRadius,\n      );\n      self.ctx.stroke();\n      self.ctx.fill();\n      drawFilterButtonArrow(posX, posY);\n      self.ctx.clip();\n      self.dispatchEvent('afterrenderfilterbutton', ev);\n      self.ctx.restore();\n    }\n    function drawRowHeader(rowData, rowIndex, rowOrderIndex) {\n      if (self.attributes.showRowHeaders) {\n        x = 0;\n\n        // When filtering we'd like to display the actual row numbers,\n        // as it is in the unfiltered data, instead of simply the viewed\n        // row index + 1. If rowIndex > viewData.length, it's a new row\n        // added to the end, and we want to render that new row's number\n        let filteredRowNumber;\n        if (self.viewData && rowIndex < self.viewData.length)\n          filteredRowNumber =\n            self.getBoundRowIndexFromViewRowIndex(rowIndex) + 1;\n        else\n          filteredRowNumber = self.originalData\n            ? self.originalData.length + 1\n            : rowOrderIndex + 1;\n\n        let rowHeaderValue =\n          self.hasActiveFilters() || self.hasCollapsedRowGroup()\n            ? filteredRowNumber\n            : rowIndex + 1;\n        rowHeaderValue += currentRowIndexOffset;\n\n        const rowHeaderCell = { rowHeaderCell: rowHeaderValue };\n        const headerDescription = {\n          name: 'rowHeaderCell',\n          width: self.sizes.columns[-1] || self.style.rowHeaderCellWidth,\n          style: 'rowHeaderCell',\n          type: 'string',\n          data: rowHeaderValue,\n          index: -1,\n        };\n        rowOpen = self.openChildren[rowIndex];\n        drawCell(rowHeaderCell, rowOrderIndex, rowIndex)(\n          headerDescription,\n          -1,\n          -1,\n        );\n\n        if (\n          rowIndexOffsetByHiddenRows[0] &&\n          rowHeaderValue >= rowIndexOffsetByHiddenRows[0].from\n        ) {\n          const { plus } = rowIndexOffsetByHiddenRows.shift();\n          currentRowIndexOffset += plus;\n        }\n      }\n    }\n    function drawHeaders() {\n      var d,\n        g = schema.length,\n        i,\n        o,\n        columnHeaderCell,\n        header,\n        nonFrozenHeaderWidth;\n      function drawHeaderColumnRange(start, end) {\n        end = Math.min(end, g);\n        for (o = start; o < end; o += 1) {\n          i = self.orders.columns[o];\n          header = schema[i];\n          if (!header.hidden && !isColumnCollapsedByGroup(o)) {\n            d = {\n              title: header.title,\n              name: header.name,\n              width: header.width || self.style.cellWidth,\n              style: 'columnHeaderCell',\n              type: 'string',\n              index: o,\n              order: i,\n            };\n            columnHeaderCell = {\n              columnHeaderCell: header.title || header.name,\n            };\n            x += drawCell(columnHeaderCell, -1, -1)(d, i, o);\n            if (x > self.width + self.scrollBox.scrollLeft) {\n              break;\n            }\n          }\n        }\n      }\n      rowHeaders.forEach(function (rArgs, rhIndex) {\n        y = rArgs[3];\n        cellHeight = rArgs[4];\n        if (rhIndex === self.frozenRow) {\n          self.ctx.save();\n          radiusRect(\n            0,\n            self.lastFrozenRowPixel,\n            self.width,\n            self.height - self.lastFrozenRowPixel,\n            0,\n          );\n          self.ctx.clip();\n        }\n        drawRowHeader(rArgs[0], rArgs[1], rArgs[2]);\n      });\n      self.ctx.restore();\n      if (self.attributes.showColumnHeaders) {\n        x =\n          -self.scrollBox.scrollLeft +\n          self.scrollPixelLeft +\n          self.style.columnHeaderCellBorderWidth;\n        if (self.attributes.showRowHeaders) {\n          x += rowHeaderCellWidth;\n        }\n        y = 0;\n        // cell height might have changed during drawing\n        cellHeight = self.getColumnHeaderCellHeight();\n        drawHeaderColumnRange(self.scrollIndexLeft, g);\n        nonFrozenHeaderWidth = x;\n        x = self.style.columnHeaderCellBorderWidth;\n        if (self.attributes.showRowHeaders) {\n          x += rowHeaderCellWidth;\n        }\n        drawHeaderColumnRange(0, self.frozenColumn);\n        // fill in the space right of the headers\n        x = nonFrozenHeaderWidth;\n        if (x < w) {\n          c = {\n            name: '',\n            width: self.style.scrollBarWidth,\n            style: 'columnHeaderCellCap',\n            isColumnHeaderCell: true,\n            isColumnHeaderCellCap: true,\n            type: 'string',\n            index: schema.length,\n          };\n          drawCell({ endCap: '' }, -1, -1)(c, -1, -1);\n        }\n        // fill in the space right of the headers\n        if (self.attributes.showRowHeaders) {\n          cornerCell = { cornerCell: '' };\n          x = 0;\n          c = {\n            name: 'cornerCell',\n            width: self.style.rowHeaderCellWidth,\n            style: 'cornerCell',\n            type: 'string',\n            index: -1,\n          };\n          drawCell(cornerCell, -1, -1)(c, -1, -1);\n        }\n      }\n    }\n    function drawRow(rowOrderIndex, rowIndex) {\n      var headerIndex,\n        treeHeight,\n        rowSansTreeHeight,\n        columnOrderIndex,\n        g = schema.length;\n      if (y - cellHeight * 2 > h) {\n        return false;\n      }\n      rowData = viewData[rowOrderIndex];\n      rowOpen = self.openChildren[rowOrderIndex];\n      rowSansTreeHeight =\n        (self.sizes.rows[rowOrderIndex] || self.style.cellHeight) * self.scale;\n      treeHeight = (rowOpen ? self.sizes.trees[rowOrderIndex] : 0) * self.scale;\n      rowHeight = rowSansTreeHeight + treeHeight;\n      if (y < -rowHeight) {\n        return false;\n      }\n      if (self.attributes.showRowHeaders) {\n        x += rowHeaderCellWidth;\n      }\n      cellHeight = rowHeight;\n      //draw normal columns\n      for (\n        columnOrderIndex = self.scrollIndexLeft;\n        columnOrderIndex < g;\n        columnOrderIndex += 1\n      ) {\n        if (!isColumnCollapsedByGroup(columnOrderIndex)) {\n          headerIndex = self.orders.columns[columnOrderIndex];\n          x += drawCell(rowData, rowOrderIndex, rowIndex)(\n            schema[headerIndex],\n            headerIndex,\n            columnOrderIndex,\n          );\n        }\n        if (x > self.width) {\n          self.scrollIndexRight = columnOrderIndex;\n          self.scrollPixelRight = x;\n          break;\n        }\n      }\n      //draw frozen columns\n      x = 1;\n      if (self.attributes.showRowHeaders) {\n        x += rowHeaderCellWidth;\n      }\n      for (\n        columnOrderIndex = 0;\n        columnOrderIndex < self.frozenColumn;\n        columnOrderIndex += 1\n      ) {\n        if (!isColumnCollapsedByGroup(columnOrderIndex)) {\n          headerIndex = self.orders.columns[columnOrderIndex];\n          x += drawCell(rowData, rowOrderIndex, rowIndex)(\n            schema[headerIndex],\n            headerIndex,\n            columnOrderIndex,\n          );\n        }\n        if (x > self.width) {\n          break;\n        }\n      }\n      self.lastFrozenColumnPixel = x;\n      // cell height might have changed during drawing\n      cellHeight = rowHeight;\n      x =\n        -self.scrollBox.scrollLeft +\n        self.scrollPixelLeft +\n        self.style.cellBorderWidth;\n      // don't draw a tree for the new row\n      treeGrid = self.childGrids[rowOrderIndex];\n      if (rowOrderIndex !== viewData.length && rowOpen) {\n        treeGrid.visible = true;\n        treeGrid.parentNode = {\n          offsetTop: y + rowSansTreeHeight + self.canvasOffsetTop,\n          offsetLeft: rowHeaderCellWidth - 1 + self.canvasOffsetLeft,\n          offsetHeight: treeHeight,\n          offsetWidth:\n            self.width - rowHeaderCellWidth - self.style.scrollBarWidth - 1,\n          offsetParent: self.intf.parentNode,\n          parentNode: self.intf.parentNode,\n          style: self.style,\n          nodeType: 'canvas-datagrid-tree',\n          scrollTop: self.scrollBox.scrollTop,\n          scrollLeft: self.scrollBox.scrollLeft,\n          rowIndex: rowOrderIndex,\n          columnGroupsAreaHeight: columnGroupsAreaHeight,\n          rowGroupsAreaWidth: rowGroupsAreaWidth,\n        };\n        if (self.intf.parentNode) {\n          const {\n            columnGroupsAreaHeight,\n            rowGroupsAreaWidth,\n          } = self.intf.parentNode;\n          treeGrid.parentNode.columnGroupsAreaHeight +=\n            columnGroupsAreaHeight || 0;\n          treeGrid.parentNode.rowGroupsAreaWidth += rowGroupsAreaWidth || 0;\n        }\n        self.visibleCells.unshift({\n          rowIndex: rowOrderIndex,\n          columnIndex: 0,\n          y: treeGrid.parentNode.offsetTop,\n          x: treeGrid.parentNode.offsetLeft,\n          height: treeGrid.height,\n          width: treeGrid.width,\n          style: 'tree-grid',\n          type: treeGrid.parentNode.nodeType,\n        });\n        treeGrid.draw();\n      } else if (treeGrid) {\n        treeGrid.parentNode.offsetHeight = 0;\n        delete self.sizes.trees[rowOrderIndex];\n      }\n      rowHeaders.push([rowData, rowOrderIndex, rowIndex, y, rowHeight]);\n      self.visibleRowHeights[rowOrderIndex] = rowHeight;\n      y += cellHeight + (bc ? 0 : self.style.cellBorderWidth);\n      return true;\n    }\n    function initDraw() {\n      self.visibleRows = [];\n      schema = self.getSchema();\n      self.visibleCells = [];\n      self.visibleGroups = [];\n      self.visibleUnhideIndicators = [];\n      self.canvasOffsetTop = self.isChildGrid ? self.parentNode.offsetTop : 0.5;\n      self.canvasOffsetLeft = self.isChildGrid\n        ? self.parentNode.offsetLeft\n        : -0.5;\n      h = self.height;\n      w = self.width;\n\n      // patch for first row being hidden\n      const firstRowIndexOffset = rowIndexOffsetByHiddenRows[0];\n      if (firstRowIndexOffset && firstRowIndexOffset.from === 0) {\n        currentRowIndexOffset = firstRowIndexOffset.plus;\n        rowIndexOffsetByHiddenRows.shift();\n      }\n    }\n    function drawBackground() {\n      radiusRect(0, 0, w, h, 0);\n      self.ctx.clip();\n      self.ctx.fillStyle = self.style.gridBackgroundColor;\n      fillRect(0, 0, w, h);\n    }\n    function initGroupArea() {\n      self.ctx.translate(rowGroupsAreaWidth, columnGroupsAreaHeight);\n    }\n    function drawGroupArea() {\n      const mx = rowGroupsAreaWidth;\n      const my = columnGroupsAreaHeight;\n      const frozenColumnsWidth = getFrozenColumnsWidth();\n      const frozenRowsHeight =\n        rowGroupsFrozenInfo.y + rowGroupsFrozenInfo.h - columnHeaderCellHeight;\n      const onTheLeft = self.attributes.columnGroupIndicatorPosition === 'left';\n      const onTheTop = self.attributes.rowGroupIndicatorPosition === 'top';\n\n      /** @type {CanvasRenderingContext2D} */\n      const ctx = self.ctx;\n      ctx.save();\n      ctx.fillStyle = self.style.groupingAreaBackgroundColor;\n      fillRect(0, -my, w, my);\n      fillRect(-mx, -my, mx, h);\n      ctx.restore();\n\n      //#region Columns Grouping\n      /** it extends `self.groupedRows` */\n      const groupedColumns = [];\n      for (let row = 0; row < self.groupedColumns.length; row++) {\n        const groups = self.groupedColumns[row];\n        for (let j = 0; j < groups.length; j++) {\n          groupedColumns.push(Object.assign({ row }, groups[j]));\n        }\n      }\n      if (groupedColumns.length > 0) {\n        const rowHeight = self.style.columnGroupRowHeight;\n        const toggleHandleSize = rowHeight * 0.5;\n        const toggleHandlePadding = (rowHeight - toggleHandleSize) * 0.5;\n\n        for (let i = 0; i < groupedColumns.length; i++) {\n          const group = groupedColumns[i];\n          const { row, collapsed } = group;\n\n          const topY = -my + row * rowHeight;\n          const centerY = topY + rowHeight * 0.5;\n          const bottomY = topY + rowHeight - toggleHandlePadding;\n          const leftmostX =\n            rowHeaderCellWidth - toggleHandleSize - toggleHandlePadding;\n\n          const drawGroupHandleAtX = (x) =>\n            drawGroupHandle(\n              x,\n              topY + toggleHandlePadding,\n              toggleHandleSize,\n              group.collapsed,\n            );\n          const pushToVisibleGroups = (leftX, rightX) =>\n            self.visibleGroups.push({\n              type: 'c',\n              collapsed,\n              from: group.from,\n              to: group.to,\n              row,\n              x: leftX + mx,\n              y: topY + my,\n              x2: rightX + mx,\n              y2: bottomY + my,\n            });\n\n          //#region check the relationship between this group and frozen columns\n          const crossTheFrozen =\n            group.from < self.frozenColumn && group.to >= self.frozenColumn;\n          const notInFrozen = group.from >= self.frozenColumn;\n          //#endregion\n\n          if (collapsed) {\n            let leftX = leftmostX + toggleHandleSize;\n            // This group is not sticking on the first column\n            if (group.from > 0) {\n              let colIndex = group.to + 1;\n              let col = columnGroupsRectInfo[colIndex];\n              if (!col) {\n                colIndex = group.from - 1;\n                col = columnGroupsRectInfo[colIndex];\n                if (!col) continue; // don't draw this group indicator because it is invisible\n                leftX = col.x + col.w - toggleHandleSize * 0.5;\n              } else {\n                leftX = col.x + toggleHandlePadding;\n              }\n              if (colIndex >= self.frozenColumn) {\n                const compare =\n                  frozenColumnsWidth + rowHeaderCellWidth - toggleHandlePadding;\n                // don't draw this group indicator because it is hidden by frozen columns\n                if (leftX < compare) continue;\n              }\n            }\n            const rightX = leftX + toggleHandleSize;\n            ctx.save();\n            ctx.strokeStyle = self.style.groupIndicatorColor;\n            ctx.fillStyle = self.style.groupIndicatorBackgroundColor;\n            drawGroupHandleAtX(leftX);\n            ctx.restore();\n            pushToVisibleGroups(leftX, rightX);\n          } // end of collapsed group\n\n          /** @type {number} pointer for loop */\n          let ptr;\n          let left = columnGroupsRectInfo[group.from];\n          let right = columnGroupsRectInfo[group.to];\n\n          let containsBegining = true;\n          let containsEnd = true;\n          ptr = group.from;\n          while (!left && ptr < group.to) {\n            left = columnGroupsRectInfo[++ptr];\n            containsBegining = false;\n          }\n          ptr = group.to;\n          while (!right && ptr > group.from) {\n            right = columnGroupsRectInfo[--ptr];\n            containsEnd = false;\n          }\n          if (!left || !right) continue;\n          let rightX = right.x + right.w;\n          let leftX = left.x;\n          if (crossTheFrozen) {\n            const rightCompare = columnGroupsRectInfo[self.frozenColumn - 1];\n            if (rightCompare) {\n              let compareX = rightCompare.x + rightCompare.w;\n              if (!onTheLeft) compareX += toggleHandleSize;\n              if (compareX >= rightX) {\n                right = rightCompare;\n                rightX = right.x + right.w;\n                containsEnd = false;\n              }\n            }\n          }\n\n          let minLeftX =\n            rowHeaderCellWidth + (notInFrozen ? frozenColumnsWidth : 0);\n          if (rightX + (onTheLeft ? 0 : toggleHandleSize) < minLeftX) continue;\n\n          rightX -= toggleHandlePadding;\n          leftX += toggleHandlePadding;\n\n          ctx.save();\n          ctx.strokeStyle = self.style.groupIndicatorColor;\n          ctx.fillStyle = self.style.groupIndicatorBackgroundColor;\n          const lineCoords = [];\n\n          if (onTheLeft) {\n            // avoid lines from two groups be overlapping\n            minLeftX += toggleHandlePadding * 2;\n            if (leftX < minLeftX) leftX = minLeftX;\n            if (group.from === 0) leftX -= toggleHandlePadding * 2;\n            if (rightX >= leftX) {\n              lineCoords.push(leftX, centerY, rightX, centerY);\n              if (containsEnd) lineCoords.push(rightX, bottomY);\n            } else {\n              rightX = leftX;\n            }\n\n            leftX -= toggleHandleSize;\n            drawGroupHandleAtX(leftX);\n            // add more clickable area into `visibleGroups`\n            rightX += toggleHandlePadding - 1;\n          } else {\n            // handle on the right\n            if (leftX < minLeftX) leftX = minLeftX;\n            if (group.from === 0) leftX -= toggleHandlePadding * 2;\n            if (containsEnd) {\n              if (group.to === self.frozenColumn - 1) {\n                rightX -= toggleHandleSize;\n              } else {\n                rightX += toggleHandlePadding * 2;\n              }\n              drawGroupHandleAtX(rightX);\n            }\n            if (leftX > rightX) {\n              leftX = rightX;\n            } else {\n              if (group.from === 0) {\n                containsBegining = true;\n                leftX = leftmostX + toggleHandleSize;\n              }\n              if (containsBegining) lineCoords.push(leftX, bottomY);\n              lineCoords.push(leftX, centerY, rightX, centerY);\n            }\n\n            // add more clickable area into `visibleGroups`\n            leftX -= toggleHandlePadding + 1;\n            if (containsEnd) rightX += toggleHandleSize;\n          }\n          drawLines(lineCoords);\n          ctx.restore();\n          pushToVisibleGroups(leftX, rightX);\n        }\n      }\n      //#endregion Columns Grouping\n\n      //#region Rows Grouping\n      /** it extends `self.groupedRows` */\n      const groupedRows = [];\n      for (let col = 0; col < self.groupedRows.length; col++) {\n        const groups = self.groupedRows[col];\n        for (let j = 0; j < groups.length; j++) {\n          groupedRows.push(Object.assign({ col }, groups[j]));\n        }\n      }\n      if (groupedRows.length > 0) {\n        const colWidth = self.style.rowGroupColumnWidth;\n        const toggleHandleSize = colWidth * 0.5;\n        const toggleHandlePadding = (colWidth - toggleHandleSize) * 0.5;\n\n        for (let i = 0; i < groupedRows.length; i++) {\n          const group = groupedRows[i];\n          const { col, collapsed } = group;\n\n          const leftX = -mx + col * colWidth;\n          const centerX = leftX + colWidth * 0.5;\n          const rightX = leftX + colWidth - toggleHandlePadding;\n          const topmostY =\n            columnHeaderCellHeight - toggleHandleSize - toggleHandlePadding;\n\n          const drawGroupHandleAtY = (y) =>\n            drawGroupHandle(\n              leftX + toggleHandlePadding,\n              y,\n              toggleHandleSize,\n              group.collapsed,\n            );\n          const pushToVisibleGroups = (topY, bottomY) =>\n            self.visibleGroups.push({\n              type: 'r',\n              collapsed,\n              from: group.from,\n              to: group.to,\n              col,\n              x: leftX + mx,\n              y: topY + my,\n              x2: rightX + mx,\n              y2: bottomY + my,\n            });\n\n          //#region check the relationship between this group and frozen columns\n          const crossTheFrozen =\n            group.from < self.frozenRow && group.to >= self.frozenRow;\n          const notInFrozen = group.from >= self.frozenRow;\n          //#endregion\n\n          if (collapsed) {\n            let topY = topmostY + toggleHandleSize;\n            // This group is not sticking on the first column\n            if (group.from > 0) {\n              let rowIndex = group.to + 1;\n              let row = rowGroupsRectInfo[rowIndex];\n              if (!row) {\n                rowIndex = group.from - 1;\n                row = rowGroupsRectInfo[rowIndex];\n                if (!row) continue; // don't draw this group indicator because it is invisible\n                topY = row.y + row.h - toggleHandleSize * 0.5;\n              } else {\n                topY = row.y;\n              }\n              if (rowIndex >= self.frozenRow) {\n                const compare =\n                  frozenRowsHeight +\n                  columnHeaderCellHeight -\n                  toggleHandlePadding;\n                // don't draw this group indicator because it is hidden by frozen columns\n                if (topY < compare) continue;\n              }\n            }\n            const bottomY = topY + toggleHandleSize;\n            ctx.save();\n            ctx.strokeStyle = self.style.groupIndicatorColor;\n            ctx.fillStyle = self.style.groupIndicatorBackgroundColor;\n            drawGroupHandleAtY(topY);\n            ctx.restore();\n            pushToVisibleGroups(topY, bottomY);\n          } // end of collapsed group\n\n          /** @type {number} pointer for loop */\n          let ptr;\n          let top = rowGroupsRectInfo[group.from];\n          let bottom = rowGroupsRectInfo[group.to];\n\n          let containsBegining = true;\n          let containsEnd = true;\n          ptr = group.from;\n          while (!top && ptr < group.to) {\n            top = rowGroupsRectInfo[++ptr];\n            containsBegining = false;\n          }\n          ptr = group.to;\n          while (!bottom && ptr > group.from) {\n            bottom = rowGroupsRectInfo[--ptr];\n            containsEnd = false;\n          }\n          if (!top || !bottom) continue;\n          let bottomY = bottom.y + bottom.h;\n          let topY = top.y;\n          if (crossTheFrozen) {\n            const bottomCompare = rowGroupsRectInfo[self.frozenRow - 1];\n            if (bottomCompare) {\n              let compareY = bottomCompare.y + bottomCompare.h;\n              if (!onTheTop) compareY += toggleHandleSize;\n              if (compareY >= bottomY) {\n                bottom = bottomCompare;\n                bottomY = bottom.y + bottom.h;\n                containsEnd = false;\n              }\n            }\n          }\n\n          let minTopY =\n            columnHeaderCellHeight + (notInFrozen ? frozenRowsHeight : 0);\n          if (bottomY + (onTheTop ? 0 : toggleHandleSize) < minTopY) continue;\n\n          bottomY -= toggleHandlePadding;\n          topY += toggleHandlePadding;\n\n          ctx.save();\n          ctx.strokeStyle = self.style.groupIndicatorColor;\n          ctx.fillStyle = self.style.groupIndicatorBackgroundColor;\n          const lineCoords = [];\n\n          if (onTheTop) {\n            // avoid lines from two groups be overlapping\n            minTopY += toggleHandlePadding * 2;\n            if (topY < minTopY) topY = minTopY;\n            if (group.from === 0) topY -= toggleHandlePadding * 2;\n            if (bottomY >= topY) {\n              lineCoords.push(centerX, topY, centerX, bottomY);\n              if (containsEnd) lineCoords.push(rightX, bottomY);\n            } else {\n              bottomY = topY;\n            }\n\n            topY -= toggleHandleSize;\n            drawGroupHandleAtY(topY);\n\n            // add more clickable area into `visibleGroups`\n            bottomY += toggleHandlePadding - 1;\n          } else {\n            // handle on the bottom\n            if (topY < minTopY) topY = minTopY;\n            if (group.from === 0) topY -= toggleHandlePadding * 2;\n            if (containsEnd) {\n              if (group.to === self.frozenRow - 1) {\n                bottomY -= toggleHandleSize;\n              } else {\n                // bottomY += toggleHandlePadding * 2;\n              }\n              drawGroupHandleAtY(bottomY);\n            }\n            if (topY > bottomY) {\n              topY = bottomY;\n            } else {\n              if (group.from === 0) {\n                containsBegining = true;\n                topY = topmostY + toggleHandleSize;\n              }\n              if (containsBegining) lineCoords.push(rightX, topY);\n              lineCoords.push(centerX, topY, centerX, bottomY);\n              // add more clickable area into `visibleGroups`\n              topY -= toggleHandlePadding + 1;\n            }\n            // add more clickable area into `visibleGroups`\n            if (containsEnd) bottomY += toggleHandleSize;\n          }\n          drawLines(lineCoords);\n          ctx.restore();\n          pushToVisibleGroups(topY, bottomY);\n        }\n      }\n      //#endregion Rows Grouping\n    }\n    function drawFrozenRows() {\n      var rowOrderIndex,\n        ln = Math.min(viewData.length, self.frozenRow);\n      x =\n        -self.scrollBox.scrollLeft +\n        self.scrollPixelLeft +\n        self.style.cellBorderWidth;\n      y = columnHeaderCellHeight;\n      for (rowIndex = 0; rowIndex < ln; rowIndex += 1) {\n        rowOrderIndex = self.orders.rows[rowIndex];\n        if (!drawRow(rowOrderIndex, rowIndex)) {\n          break;\n        }\n      }\n      if (self.attributes.allowFreezingRows) {\n        // HACK great, another stupid magic number.\n        // Background will appear as a 0.5px artifact behind the row freeze bar without this hack\n        if (y > columnHeaderCellHeight) y += self.style.frozenMarkerWidth;\n        y += self.style.frozenMarkerBorderWidth - 0.4999999999;\n      }\n      self.lastFrozenRowPixel = y;\n    }\n    function drawRows() {\n      self.ctx.save();\n      if (self.frozenRow > 0) {\n        radiusRect(\n          0,\n          self.lastFrozenRowPixel,\n          self.width,\n          self.height - self.lastFrozenRowPixel,\n          0,\n        );\n        self.ctx.clip();\n      }\n      var columnOrderIndex,\n        rowOrderIndex,\n        headerIndex,\n        g = schema.length;\n      x =\n        -self.scrollBox.scrollLeft +\n        self.scrollPixelLeft +\n        self.style.cellBorderWidth;\n      if (!self.attributes.snapToRow) {\n        y +=\n          -self.scrollBox.scrollTop +\n          self.scrollPixelTop +\n          self.style.cellBorderWidth;\n      }\n      for (\n        rowIndex = self.frozenRow + self.scrollIndexTop;\n        rowIndex < l;\n        rowIndex += 1\n      ) {\n        rowOrderIndex = self.orders.rows[rowIndex];\n        self.scrollIndexBottom = rowIndex;\n        self.scrollPixelBottom = y;\n        if (\n          self.cellTree.rows.length > 0 &&\n          Object.keys(self.cellTree.rows[rowOrderIndex]).length > 0 &&\n          self.cellTree.rows[rowOrderIndex].hide\n        )\n          continue;\n        if (!drawRow(rowOrderIndex, rowIndex)) {\n          break;\n        }\n      }\n      if (self.attributes.showNewRow) {\n        if (self.attributes.showRowHeaders) {\n          x += rowHeaderCellWidth;\n        }\n        rowHeight = cellHeight = self.style.cellHeight;\n        rowOpen = false;\n        for (\n          columnOrderIndex = self.scrollIndexLeft;\n          columnOrderIndex < g;\n          columnOrderIndex += 1\n        ) {\n          if (!isColumnCollapsedByGroup(columnOrderIndex)) {\n            headerIndex = self.orders.columns[columnOrderIndex];\n            x += drawCell(self.newRow, viewData.length, viewData.length)(\n              schema[headerIndex],\n              headerIndex,\n              columnOrderIndex,\n            );\n          }\n          if (x > self.width + self.scrollBox.scrollLeft) {\n            break;\n          }\n        }\n        rowHeaders.push([\n          self.newRow,\n          viewData.length,\n          viewData.length,\n          y,\n          rowHeight,\n        ]);\n      }\n      self.ctx.restore();\n    }\n    function drawMoveMarkers() {\n      if (!self.movingSelection) {\n        return;\n      }\n      self.ctx.lineWidth = self.style.moveOverlayBorderWidth;\n      self.ctx.strokeStyle = self.style.moveOverlayBorderColor;\n      self.ctx.setLineDash(self.style.moveOverlayBorderSegments);\n      moveBorders.forEach(function (c) {\n        addBorderLine(c[0], c[1]);\n      });\n      self.ctx.setLineDash([]);\n    }\n    function drawReorderMarkers() {\n      if (!self.reorderObject) {\n        return;\n      }\n      var b = {\n          height: self.reorderObject.height,\n          width: self.reorderObject.width,\n          x: self.reorderObject.x + self.reorderObject.dragOffset.x,\n          y: self.reorderObject.y + self.reorderObject.dragOffset.y,\n        },\n        m = {\n          width: w,\n          height: h,\n          x: 0,\n          y: 0,\n        };\n      self.ctx.fillStyle = self.style.reorderMarkerBackgroundColor;\n      self.ctx.lineWidth = self.style.reorderMarkerBorderWidth;\n      self.ctx.strokeStyle = self.style.reorderMarkerBorderColor;\n      if (self.dragMode === 'row-reorder') {\n        b.height = self.getSelectedRowsHeight();\n        b.width = w;\n        b.x = 0;\n        m.width = w;\n        m.height = self.currentCell.height;\n        m.y = self.currentCell.y;\n        fillRect(b.x, b.y, b.width, b.height);\n        strokeRect(b.x, b.y, b.width, b.height);\n        self.ctx.lineWidth = self.style.reorderMarkerIndexBorderWidth;\n        self.ctx.strokeStyle = self.style.reorderMarkerIndexBorderColor;\n        if (\n          !self.isRowSelected(self.reorderTarget.sortRowIndex) &&\n          self.currentCell.rowIndex !== self.reorderObject.rowIndex &&\n          self.currentCell.rowIndex > -1 &&\n          self.currentCell.rowIndex < l\n        ) {\n          addBorderLine(\n            m,\n            self.reorderTarget.sortRowIndex > self.reorderObject.sortRowIndex\n              ? 'b'\n              : 't',\n          );\n        }\n      } else if (self.dragMode === 'column-reorder' && self.reorderObject) {\n        b.width = self.getSelectedColumnsWidth();\n        b.height = h;\n        b.y = 0;\n        m.height = h;\n        m.width = self.currentCell.width;\n        m.y = 0;\n        m.x = self.currentCell.x;\n        fillRect(b.x, b.y, b.width, b.height);\n        strokeRect(b.x, b.y, b.width, b.height);\n        self.ctx.lineWidth = self.style.reorderMarkerIndexBorderWidth;\n        self.ctx.strokeStyle = self.style.reorderMarkerIndexBorderColor;\n        if (\n          !self.isColumnSelected(self.reorderTarget.sortColumnIndex) &&\n          self.currentCell.sortColumnIndex !==\n            self.reorderObject.sortColumnIndex &&\n          self.reorderTarget.columnIndex !== self.reorderObject.columnIndex &&\n          self.currentCell.sortColumnIndex > -1 &&\n          self.currentCell.sortColumnIndex < schema.length\n        ) {\n          addBorderLine(\n            m,\n            self.reorderTarget.columnIndex > self.reorderObject.columnIndex\n              ? 'r'\n              : 'l',\n          );\n        }\n      }\n    }\n    function drawResizeMarkers() {\n      if (\n        !self.attributes.resizeAfterDragged ||\n        !self.draggingItem ||\n        !self.pendingDragResize ||\n        (self.dragMode != 'ew-resize' && self.dragMode != 'ns-resize')\n      ) {\n        return;\n      }\n\n      const resizingRow = self.dragMode == 'ns-resize';\n      const height = resizingRow ? self.style.resizeMarkerSize : self.height;\n      const width = resizingRow ? self.width : self.style.resizeMarkerSize;\n      const minX =\n        self.dragStart.x -\n        (self.resizingStartingWidth - self.style.minColumnWidth);\n      const minY =\n        self.dragStart.y -\n        (self.resizingStartingHeight - self.style.minRowHeight);\n      const x = resizingRow ? 0 : Math.max(self.pendingDragResize.x, minX);\n      const y = !resizingRow ? 0 : Math.max(self.pendingDragResize.y, minY);\n\n      self.ctx.fillStyle = self.style.resizeMarkerColor;\n      fillRect(x, y, width, height);\n    }\n    function drawBorder() {\n      self.ctx.lineWidth = self.style.gridBorderWidth;\n      self.ctx.strokeStyle = self.style.gridBorderColor;\n      strokeRect(0, 0, self.width, self.height);\n    }\n    function drawSelectionBorders() {\n      function dsb(c) {\n        if (!self.fillOverlay.handle) {\n          self.ctx.lineWidth = self.style.selectionOverlayBorderWidth;\n          self.ctx.strokeStyle = self.style.selectionOverlayBorderColor;\n          addBorderLine(c[0], c[1]);\n        }\n      }\n      selectionBorders\n        .filter(function (c) {\n          return (\n            c[0].rowIndex < self.frozenRow &&\n            c[0].columnIndex < self.frozenColumn\n          );\n        })\n        .forEach(dsb);\n      self.ctx.save();\n      clipFrozenArea(0);\n      selectionBorders\n        .filter(function (c) {\n          return (\n            c[0].rowIndex >= self.frozenRow &&\n            c[0].columnIndex >= self.frozenColumn\n          );\n        })\n        .forEach(dsb);\n      self.ctx.restore();\n      self.ctx.save();\n      clipFrozenArea(1);\n      selectionBorders\n        .filter(function (c) {\n          return (\n            c[0].rowIndex >= self.frozenRow &&\n            c[0].columnIndex < self.frozenColumn\n          );\n        })\n        .forEach(dsb);\n      self.ctx.restore();\n      self.ctx.save();\n      clipFrozenArea(2);\n      selectionBorders\n        .filter(function (c) {\n          return (\n            c[0].rowIndex < self.frozenRow &&\n            c[0].columnIndex >= self.frozenColumn\n          );\n        })\n        .forEach(dsb);\n      self.ctx.restore();\n\n      drawFillOverlay();\n    }\n    function drawSelectionHandles() {\n      if (\n        (self.mobile || self.attributes.allowMovingSelection) &&\n        self.attributes.editable\n      ) {\n        self.ctx.lineWidth = self.style.selectionHandleBorderWidth;\n        self.ctx.strokeStyle = self.style.selectionHandleBorderColor;\n        self.ctx.fillStyle = self.style.selectionHandleColor;\n        selectionHandles.forEach(function (c) {\n          addselectionHandle(c[0], c[1]);\n          var az = self.attributes.touchSelectHandleZone / 2,\n            ax =\n              c[0].x + (c[1] === 'tl' || c[1] === 'bl' ? 0 : c[0].width) - az,\n            ay =\n              c[0].y + (c[1] === 'bl' || c[1] === 'br' ? c[0].height : 0) - az;\n          self.visibleCells.unshift({\n            x: ax,\n            y: ay,\n            height: self.style.selectionHandleSize + az,\n            width: self.style.selectionHandleSize + az,\n            style: 'selection-handle-' + c[1],\n          });\n        });\n      }\n    }\n    function drawFillOverlay() {\n      if (!self.fillOverlay.handle || !self.fillOverlay.snapTo) {\n        return;\n      }\n\n      self.ctx.save();\n\n      const overlay = self.fillOverlay;\n      const handle = overlay.handle;\n      const toX = overlay.snapTo.x;\n      const toY = overlay.snapTo.y;\n\n      // The cell that the cursor is moving over. This may be unavailable\n      // when the cursor is outside the grid or is pointing to something else.\n      //\n      // When unavailable, we use the actual position of the cursor to draw\n      // the overlay.\n      const snap = overlay.snap;\n\n      // Calculate the X, Y coordinates of the cursor with snap positions and\n      // the direction of the movement in mind.\n      //\n      // When the movement is horizontal, we get the Y coordinate from the handle,\n      // and vice-versa.\n      const cursorX =\n        overlay.direction === 'x'\n          ? snap\n            ? snap.x + (overlay.x < toX ? 0 : snap.width)\n            : overlay.x\n          : handle.x;\n      const cursorY =\n        overlay.direction === undefined || overlay.direction === 'y'\n          ? snap\n            ? snap.y + (overlay.y < toY ? 0 : snap.height)\n            : overlay.y\n          : handle.y;\n\n      // The final coordinates of the rect. We use 'minX' and 'minY' to avoid\n      // drawing on the frozen area.\n      const x = Math.max(Math.min(toX, cursorX), overlay.minX);\n      const y = Math.max(Math.min(toY, cursorY), overlay.minY);\n\n      // Width and height of the rect are the difference between the\n      // coordinates of both the rect and the cursor. The user may be pointing\n      // behind and/or upwards of the rect, so we need to take that into\n      // account.\n      const width = Math.max(toX, cursorX) - x;\n      const height = Math.max(toY, cursorY) - y;\n\n      self.ctx.strokeStyle = self.style.fillOverlayBorderColor;\n      self.ctx.lineWidth = self.style.fillOverlayBorderWidth;\n      self.ctx.setLineDash([3, 3]);\n      strokeRect(x, y, width, height);\n      self.ctx.setLineDash([]);\n      self.ctx.restore();\n    }\n    function drawActiveCell() {\n      if (!aCell) {\n        return;\n      }\n      self.ctx.save();\n      var cl =\n          self.activeCell.columnIndex + 1 > self.frozenColumn ||\n          self.activeCell.rowIndex + 1 > self.frozenRow,\n        acx = cl ? self.lastFrozenColumnPixel : 0,\n        acy = cl ? self.lastFrozenRowPixel : 0,\n        acw = cl ? self.width - self.lastFrozenColumnPixel : self.width,\n        ach = cl ? self.height - self.lastFrozenRowPixel : self.height;\n      radiusRect(acx, acy, acw, ach, 0);\n      self.ctx.clip();\n      if (self.attributes.selectionMode === 'row') {\n        if (self.activeCell && self.activeCell.rowIndex === aCell.rowIndex) {\n          self.ctx.lineWidth = self.style.activeCellOverlayBorderWidth;\n          self.ctx.strokeStyle = self.style.activeCellOverlayBorderColor;\n          strokeRect(\n            1,\n            aCell.y,\n            self.getHeaderWidth() + rowHeaderCellWidth,\n            self.visibleRowHeights[aCell.rowIndex],\n          );\n        }\n      } else {\n        self.ctx.lineWidth = self.style.activeCellOverlayBorderWidth;\n        self.ctx.strokeStyle = self.style.activeCellOverlayBorderColor;\n        strokeRect(aCell.x, aCell.y, aCell.width, aCell.height);\n      }\n      self.ctx.restore();\n    }\n    function drawFrozenMarkers() {\n      var my = self.lastFrozenRowPixel - self.style.frozenMarkerWidth,\n        mx = self.lastFrozenColumnPixel - self.style.frozenMarkerWidth,\n        xHover =\n          self.currentCell && self.currentCell.style === 'frozen-row-marker',\n        yHover =\n          self.currentCell && self.currentCell.style === 'frozen-column-marker';\n      let rowHeaderCellWidth = self.getRowHeaderCellWidth();\n      self.ctx.lineWidth = self.style.frozenMarkerBorderWidth;\n      if (self.attributes.allowFreezingColumns) {\n        if (\n          !self.freezeMarkerPosition ||\n          (self.freezeMarkerPosition && self.dragMode === 'frozen-row-marker')\n        ) {\n          if (mx > self.style.rowHeaderCellWidth) {\n            self.ctx.fillStyle = self.style.frozenMarkerColor;\n            self.ctx.strokeStyle = self.style.frozenMarkerBorderColor;\n            fillRect(mx, 0, self.style.frozenMarkerWidth, self.height);\n            strokeRect(mx, 0, self.style.frozenMarkerWidth, self.height);\n          }\n          self.ctx.fillStyle = yHover\n            ? self.style.frozenMarkerHoverColor\n            : self.style.frozenMarkerHeaderColor;\n          self.ctx.strokeStyle = yHover\n            ? self.style.frozenMarkerHoverBorderColor\n            : self.style.frozenMarkerHeaderColor;\n          fillRect(\n            mx,\n            0,\n            self.style.frozenMarkerWidth,\n            self.style.columnHeaderCellHeight,\n          );\n          strokeRect(\n            mx,\n            0,\n            self.style.frozenMarkerWidth,\n            self.style.columnHeaderCellHeight,\n          );\n        }\n\n        if (\n          !self.dragStartObject ||\n          (self.dragStartObject &&\n            self.dragStartObject.style !== 'rowHeaderCell')\n        ) {\n          self.visibleCells.unshift({\n            x: mx,\n            y: 0,\n            height: self.height,\n            width: self.style.frozenMarkerWidth, // + self.style.frozenMarkerBorderWidth,\n            style: 'frozen-column-marker',\n          });\n        }\n      }\n      if (self.attributes.allowFreezingRows) {\n        if (\n          !self.freezeMarkerPosition ||\n          (self.freezeMarkerPosition &&\n            self.dragMode === 'frozen-column-marker')\n        ) {\n          if (my > rowHeaderCellWidth) {\n            self.ctx.fillStyle = self.style.frozenMarkerColor;\n            self.ctx.strokeStyle = self.style.frozenMarkerBorderColor;\n            fillRect(0, my, self.width, self.style.frozenMarkerWidth);\n            strokeRect(0, my, self.width, self.style.frozenMarkerWidth);\n          }\n          self.ctx.fillStyle = xHover\n            ? self.style.frozenMarkerHoverColor\n            : self.style.frozenMarkerHeaderColor;\n          self.ctx.strokeStyle = xHover\n            ? self.style.frozenMarkerHoverBorderColor\n            : self.style.frozenMarkerHeaderColor;\n          fillRect(0, my, rowHeaderCellWidth, self.style.frozenMarkerWidth);\n          strokeRect(0, my, rowHeaderCellWidth, self.style.frozenMarkerWidth);\n        }\n        var height =\n          self.style.frozenMarkerWidth + self.style.frozenMarkerBorderWidth;\n        if (\n          !self.dragStartObject ||\n          (self.dragStartObject &&\n            self.dragStartObject.style !== 'columnHeaderCell')\n        ) {\n          self.visibleCells.unshift({\n            x: 0,\n            y: my,\n            height: height,\n            width: self.width,\n            style: 'frozen-row-marker',\n          });\n        }\n        rowGroupsFrozenInfo = { y: my, h: height };\n      }\n      if (self.freezeMarkerPosition) {\n        self.ctx.fillStyle = self.style.frozenMarkerActiveColor;\n        self.ctx.strokeStyle = self.style.frozenMarkerActiveBorderColor;\n        if (self.dragMode === 'frozen-column-marker') {\n          let posX = self.freezeMarkerPosition.x;\n          let nearCell = self.getCellAt(posX, 0);\n          if (self.freezeMarkerPosition.isGrab) posX = mx;\n          if (posX > rowHeaderCellWidth) {\n            let x =\n              nearCell.x -\n              self.style.frozenMarkerWidth -\n              self.style.frozenMarkerBorderWidth;\n            if (posX > x + nearCell.width / 2) x = x + nearCell.width;\n            self.ctx.fillStyle = self.style.frozenMarkerColor;\n            self.ctx.strokeStyle = self.style.frozenMarkerBorderColor;\n            fillRect(x, 0, self.style.frozenMarkerWidth, self.height);\n            strokeRect(x, 0, self.style.frozenMarkerWidth, self.height);\n            self.ctx.fillStyle = self.style.frozenMarkerHeaderColor;\n            self.ctx.strokeStyle = self.style.frozenMarkerHeaderColor;\n            fillRect(\n              x,\n              0,\n              self.style.frozenMarkerWidth,\n              self.style.columnHeaderCellHeight,\n            );\n            strokeRect(\n              x,\n              0,\n              self.style.frozenMarkerWidth,\n              self.style.columnHeaderCellHeight,\n            );\n          }\n          self.ctx.fillStyle = self.style.frozenMarkerActiveHeaderColor;\n          self.ctx.strokeStyle = self.style.frozenMarkerActiveBorderColor;\n          fillRect(\n            posX,\n            0,\n            self.style.frozenMarkerWidth,\n            self.style.columnHeaderCellHeight,\n          );\n          strokeRect(\n            posX,\n            0,\n            self.style.frozenMarkerWidth,\n            self.style.columnHeaderCellHeight,\n          );\n          self.ctx.fillStyle = self.style.frozenMarkerActiveColor;\n          fillRect(posX, 0, self.style.frozenMarkerWidth, self.height);\n          strokeRect(posX, 0, self.style.frozenMarkerWidth, self.height);\n        } else {\n          let posY = self.freezeMarkerPosition.y;\n          let nearCell = self.getCellAt(0, posY);\n          if (self.freezeMarkerPosition.isGrab) posY = my;\n          if (posY > self.style.columnHeaderCellHeight) {\n            let y =\n              nearCell.y -\n              self.style.frozenMarkerWidth -\n              self.style.frozenMarkerBorderWidth;\n            if (posY > y + nearCell.height / 2) y = y + nearCell.height;\n            self.ctx.fillStyle = self.style.frozenMarkerColor;\n            self.ctx.strokeStyle = self.style.frozenMarkerBorderColor;\n            fillRect(0, y, self.width, self.style.frozenMarkerWidth);\n            strokeRect(0, y, self.width, self.style.frozenMarkerWidth);\n            self.ctx.fillStyle = self.style.frozenMarkerHeaderColor;\n            self.ctx.strokeStyle = self.style.frozenMarkerHeaderColor;\n            fillRect(0, y, rowHeaderCellWidth, self.style.frozenMarkerWidth);\n            strokeRect(0, y, rowHeaderCellWidth, self.style.frozenMarkerWidth);\n          }\n          self.ctx.fillStyle = self.style.frozenMarkerActiveHeaderColor;\n          self.ctx.strokeStyle = self.style.frozenMarkerActiveBorderColor;\n          fillRect(0, posY, rowHeaderCellWidth, self.style.frozenMarkerWidth);\n          strokeRect(0, posY, rowHeaderCellWidth, self.style.frozenMarkerWidth);\n          self.ctx.fillStyle = self.style.frozenMarkerActiveColor;\n          fillRect(0, posY, self.width, self.style.frozenMarkerWidth);\n          strokeRect(0, posY, self.width, self.style.frozenMarkerWidth);\n        }\n      }\n    }\n    function drawPerfLines() {\n      if (!self.attributes.showPerformance) {\n        return;\n      }\n      var pw = 250,\n        px =\n          self.width -\n          pw -\n          self.style.scrollBarWidth -\n          self.style.scrollBarBorderWidth * 2,\n        py = columnHeaderCellHeight,\n        ph = 100;\n      if (scrollDebugCounters.length === 0) {\n        scrollDebugCounters = fillArray(0, perfWindowSize, 1, function () {\n          return [0, 0];\n        });\n      }\n      if (touchPPSCounters.length === 0) {\n        touchPPSCounters = fillArray(0, perfWindowSize, 1, function () {\n          return [0, 0];\n        });\n      }\n      if (entityCount.length === 0) {\n        entityCount = fillArray(0, perfWindowSize, 1, 0);\n      }\n      self.ctx.lineWidth = 0.5;\n      function dpl(name, perfArr, arrIndex, max, color, useAbs, rowIndex) {\n        var v;\n        drawPerfLine(pw, ph, px, py, perfArr, arrIndex, max, color, useAbs);\n        self.ctx.fillStyle = color;\n        fillRect(3 + px, py + 9 + rowIndex * 11, 8, 8);\n        self.ctx.fillStyle = self.style.debugPerfChartTextColor;\n        v = arrIndex !== undefined ? perfArr[0][arrIndex] : perfArr[0];\n        fillText(\n          name + ' ' + (isNaN(v) ? 0 : v).toFixed(3),\n          14 + px,\n          py + 16 + rowIndex * 11,\n        );\n      }\n      self.ctx.textAlign = 'left';\n      self.ctx.font = self.style.debugFont;\n      self.ctx.fillStyle = self.style.debugPerfChartBackground;\n      fillRect(px, py, pw, ph);\n      [\n        [\n          'Scroll Height',\n          scrollDebugCounters,\n          0,\n          self.scrollBox.scrollHeight,\n          self.style.debugScrollHeightColor,\n          false,\n        ],\n        [\n          'Scroll Width',\n          scrollDebugCounters,\n          1,\n          self.scrollBox.scrollWidth,\n          self.style.debugScrollWidthColor,\n          false,\n        ],\n        [\n          'Performance',\n          perfCounters,\n          undefined,\n          200,\n          self.style.debugPerformanceColor,\n          false,\n        ],\n        [\n          'Entities',\n          entityCount,\n          undefined,\n          1500,\n          self.style.debugEntitiesColor,\n          false,\n        ],\n        [\n          'TouchPPSX',\n          touchPPSCounters,\n          0,\n          1000,\n          self.style.debugTouchPPSXColor,\n          true,\n        ],\n        [\n          'TouchPPSY',\n          touchPPSCounters,\n          1,\n          1000,\n          self.style.debugTouchPPSYColor,\n          true,\n        ],\n      ].forEach(function (i, index) {\n        i.push(index);\n        dpl.apply(null, i);\n      });\n      self.ctx.fillStyle = self.style.debugPerfChartBackground;\n      entityCount.pop();\n      entityCount.unshift(self.visibleCells.length);\n      scrollDebugCounters.pop();\n      scrollDebugCounters.unshift([\n        self.scrollBox.scrollTop,\n        self.scrollBox.scrollLeft,\n      ]);\n      touchPPSCounters.pop();\n      touchPPSCounters.unshift([self.yPPS, self.xPPS]);\n    }\n    function drawDebug() {\n      self.ctx.save();\n      var d;\n      if (self.attributes.showPerformance || self.attributes.debug) {\n        if (perfCounters.length === 0) {\n          perfCounters = fillArray(0, perfWindowSize, 1, 0);\n        }\n        perfCounters.pop();\n        perfCounters.unshift(performance.now() - p);\n      }\n      if (!self.attributes.debug) {\n        self.ctx.restore();\n        return;\n      }\n      self.ctx.font = self.style.debugFont;\n      d = {};\n      d.perf = (\n        perfCounters.reduce(function (a, b) {\n          return a + b;\n        }, 0) / Math.min(drawCount, perfCounters.length)\n      ).toFixed(1);\n      d.perfDelta = perfCounters[0].toFixed(1);\n      d.frozenColumnsWidth = getFrozenColumnsWidth();\n      d.htmlImages = Object.keys(self.htmlImageCache).length;\n      d.reorderObject =\n        'x: ' +\n        (self.reorderObject || { columnIndex: 0 }).columnIndex +\n        ', y: ' +\n        (self.reorderObject || { rowIndex: 0 }).rowIndex;\n      d.reorderTarget =\n        'x: ' +\n        (self.reorderTarget || { columnIndex: 0 }).columnIndex +\n        ', y: ' +\n        (self.reorderTarget || { rowIndex: 0 }).rowIndex;\n      d.scale = self.scale;\n      d.startScale = self.startScale;\n      d.scaleDelta = self.scaleDelta;\n      d.zoomDeltaStart = self.zoomDeltaStart;\n      d.touchLength = self.touchLength;\n      d.touches =\n        'y0: ' +\n        (self.touchPosition || { y: 0 }).y +\n        ' y1: ' +\n        (self.touchPosition1 || { y: 0 }).y;\n      d.scrollBox = self.scrollBox.toString();\n      d.scrollIndex =\n        'x: ' + self.scrollIndexLeft + ', y: ' + self.scrollIndexTop;\n      d.scrollPixel =\n        'x: ' + self.scrollPixelLeft + ', y: ' + self.scrollPixelTop;\n      d.canvasOffset =\n        'x: ' + self.canvasOffsetLeft + ', y: ' + self.canvasOffsetTop;\n      d.touchDelta = 'x: ' + self.touchDelta.x + ', y: ' + self.touchDelta.y;\n      d.touchAnimateTo =\n        'x: ' + self.touchAnimateTo.x + ', y: ' + self.touchAnimateTo.y;\n      d.scrollAnimation =\n        'x: ' + self.scrollAnimation.x + ', y: ' + self.scrollAnimation.y;\n      d.touchPPS = 'x: ' + self.xPPS + ', y: ' + self.yPPS;\n      d.touchPPST = 'x: ' + self.xPPST + ', y: ' + self.yPPST;\n      d.touchDuration = self.touchDuration;\n      d.pointerLockPosition = self.pointerLockPosition\n        ? self.pointerLockPosition.x + ', ' + self.pointerLockPosition.y\n        : '';\n      d.size = 'w: ' + self.width + ', h: ' + self.height;\n      d.mouse = 'x: ' + self.mouse.x + ', y: ' + self.mouse.y;\n      d.touch = !self.touchStart\n        ? ''\n        : 'x: ' + self.touchStart.x + ', y: ' + self.touchStart.y;\n      d.entities = self.visibleCells.length;\n      d.hasFocus = self.hasFocus;\n      d.dragMode = self.dragMode;\n      if (self.currentCell) {\n        d.columnIndex = self.currentCell.columnIndex;\n        d.rowIndex = self.currentCell.rowIndex;\n        d.sortColumnIndex = self.currentCell.sortColumnIndex;\n        d.sortRowIndex = self.currentCell.sortRowIndex;\n        d.context = self.currentCell.context;\n        d.dragContext = self.currentCell.dragContext;\n        d.style = self.currentCell.style;\n        d.type = self.currentCell.type;\n      }\n      self.ctx.textAlign = 'right';\n      self.ctx.fillStyle = self.style.debugBackgroundColor;\n      fillRect(0, 0, self.width, self.height);\n      Object.keys(d).forEach(function (key, index) {\n        var m = key + ': ' + d[key],\n          lh = 14;\n        self.ctx.fillStyle = self.style.debugColor;\n        fillText(\n          m,\n          w - 20,\n          (self.attributes.showPerformance ? 140 : 24) + index * lh,\n        );\n      });\n      self.ctx.restore();\n    }\n    self.ctx.save();\n    initDraw();\n    drawBackground();\n    initGroupArea();\n    drawFrozenRows();\n    drawRows();\n    drawActiveCell();\n    drawHeaders();\n    drawFrozenMarkers();\n    drawSelectionHandles();\n    drawReorderMarkers();\n    drawMoveMarkers();\n    drawResizeMarkers();\n    drawBorder();\n    drawSelectionBorders();\n    drawScrollBars();\n    if (checkScrollHeight) {\n      self.resize(true);\n    }\n    drawGroupArea();\n    drawDebug();\n    drawPerfLines();\n    if (self.dispatchEvent('afterdraw', {})) {\n      return;\n    }\n    self.ctx.restore();\n  };\n}\n","/*jslint browser: true, unparam: true, todo: true, plusplus: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport isPrintableKeyEvent from 'is-printable-key-event';\nimport { isSupportedHtml, parseData } from './util';\n\nexport default function (self) {\n  var wheeling;\n  self.stopPropagation = function (e) {\n    e.stopPropagation();\n  };\n  /**\n   * Adds an event listener to the given event.\n   * @memberof canvasDatagrid\n   * @name addEventListener\n   * @method\n   * @param {string} ev The name of the event to subscribe to.\n   * @param {function} fn The event procedure to execute when the event is raised.\n   */\n  self.addEventListener = function (ev, fn) {\n    self.events[ev] = self.events[ev] || [];\n    self.events[ev].unshift(fn);\n  };\n  /**\n   * Removes the given listener function from the given event.  Must be an actual reference to the function that was bound.\n   * @memberof canvasDatagrid\n   * @name removeEventListener\n   * @method\n   * @param {string} ev The name of the event to unsubscribe from.\n   * @param {function} fn The event procedure to execute when the event is raised.\n   */\n  self.removeEventListener = function (ev, fn) {\n    (self.events[ev] || []).forEach(function removeEachListener(sfn, idx) {\n      if (fn === sfn) {\n        self.events[ev].splice(idx, 1);\n      }\n    });\n  };\n  /**\n   * Fires the given event, passing an event object to the event subscribers.\n   * @memberof canvasDatagrid\n   * @name dispatchEvent\n   * @method\n   * @param {number} ev The name of the event to dispatch.\n   * @param {number} e The event object.\n   */\n  self.dispatchEvent = function (ev, e) {\n    e = ev.type ? ev : e || {};\n    ev = ev.type || ev;\n    var defaultPrevented;\n    function preventDefault() {\n      defaultPrevented = true;\n    }\n    if (!self.events[ev]) {\n      return;\n    }\n    self.events[ev].forEach(function dispatchEachEvent(fn) {\n      e.ctx = self.ctx;\n      e.preventDefault = preventDefault;\n      fn.apply(self.intf, [e]);\n    });\n    return defaultPrevented;\n  };\n  self.getRatio = function () {\n    return Math.min(\n      self.attributes.maxPixelRatio,\n      (window.devicePixelRatio || 1) /\n        (self.ctx.webkitBackingStorePixelRatio ||\n          self.ctx.mozBackingStorePixelRatio ||\n          self.ctx.msBackingStorePixelRatio ||\n          self.ctx.oBackingStorePixelRatio ||\n          self.ctx.backingStorePixelRatio ||\n          1),\n    );\n  };\n  /**\n   * @returns {number} dataWidth\n   */\n  self.refreshScrollCacheX = function () {\n    const s = self.getSchema();\n    self.scrollCache.x = [];\n\n    /** @type {number} it will be used in `reduceSchema` only  */\n    let frozenWidth = 0;\n\n    const collapsedColumnGroups = self.getCollapsedColumnGroups();\n    const isColumnCollapsed = (columnIndex) =>\n      collapsedColumnGroups.findIndex(\n        (group) => columnIndex >= group.from && columnIndex <= group.to,\n      ) >= 0;\n\n    const dataWidth =\n      s.reduce(function reduceSchema(accumulator, column, columnIndex) {\n        // intentional redefintion of column.  This causes scrollCache to be in the correct order\n        const schemaIndex = self.orders.columns[columnIndex];\n        const columnWidth = self.getColumnWidth(schemaIndex);\n        column = s[schemaIndex];\n        if (!column.hidden && !isColumnCollapsed(columnIndex))\n          accumulator += columnWidth;\n        if (columnIndex < self.frozenColumn) {\n          self.scrollCache.x[columnIndex] = accumulator;\n          frozenWidth = accumulator;\n        } else {\n          self.scrollCache.x[columnIndex] = Math.max(\n            frozenWidth + columnWidth,\n            accumulator,\n          );\n        }\n        return accumulator;\n      }, 0) || 0;\n    return dataWidth;\n  };\n  self.resize = function (drawAfterResize) {\n    if (!self.canvas) {\n      return;\n    }\n    var x,\n      v = {\n        x: 0,\n        y: 0,\n        height: 0,\n        width: 0,\n        style: 'vertical-scroll-bar',\n      },\n      n = {\n        x: 0,\n        y: 0,\n        height: 0,\n        width: 0,\n        style: 'horizontal-scroll-bar',\n      },\n      vb = {\n        x: 0,\n        y: 0,\n        height: 0,\n        width: 0,\n        style: 'vertical-scroll-box',\n      },\n      nb = {\n        x: 0,\n        y: 0,\n        height: 0,\n        width: 0,\n        style: 'horizontal-scroll-box',\n      },\n      co = {\n        x: 0,\n        y: 0,\n        height: 0,\n        width: 0,\n        isCorner: true,\n        isScrollBoxCorner: true,\n        style: 'scroll-box-corner',\n      },\n      m = self.style.scrollBarBoxMargin * 2,\n      b = self.style.scrollBarBorderWidth * 2,\n      d = self.style.scrollBarBoxMargin * 0.5,\n      sbw = self.style.scrollBarWidth + self.style.scrollBarBorderWidth * 2,\n      ratio = self.getRatio(),\n      bm = self.style.gridBorderCollapse === 'collapse' ? 1 : 2,\n      cellBorder = self.style.cellBorderWidth * bm,\n      columnHeaderCellBorder = self.style.columnHeaderCellBorderWidth * bm,\n      dataHeight = 0,\n      dataWidth = 0,\n      dims,\n      l = (self.viewData || []).length,\n      columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n      rowHeaderCellWidth = self.getRowHeaderCellWidth(),\n      topGroupAreaHeight = self.getColumnGroupAreaHeight(),\n      leftGroupAreaWidth = self.getRowGroupAreaWidth(),\n      ch = self.style.cellHeight;\n    // sets actual DOM canvas element\n    function checkScrollBoxVisibility() {\n      self.scrollBox.horizontalBarVisible =\n        (self.style.width !== 'auto' &&\n          dataWidth > self.scrollBox.width &&\n          self.style.overflowX !== 'hidden') ||\n        self.style.overflowX === 'scroll';\n      self.scrollBox.horizontalBoxVisible = dataWidth > self.scrollBox.width;\n      self.scrollBox.verticalBarVisible =\n        (self.style.height !== 'auto' &&\n          dataHeight > self.scrollBox.height &&\n          self.style.overflowY !== 'hidden') ||\n        self.style.overflowY === 'scroll';\n      self.scrollBox.verticalBoxVisible = dataHeight > self.scrollBox.height;\n    }\n    function setScrollBoxSize() {\n      self.scrollBox.width =\n        self.width - rowHeaderCellWidth - leftGroupAreaWidth;\n      self.scrollBox.height =\n        self.height - columnHeaderCellHeight - topGroupAreaHeight;\n    }\n    function setCanvasSize() {\n      if (self.isChildGrid) {\n        return;\n      }\n      dims = {\n        // HACK +1 ? maybe it's a magic cell border?  Required to line up properly in auto height mode.\n        height:\n          columnHeaderCellHeight +\n          topGroupAreaHeight +\n          dataHeight +\n          cellBorder +\n          1,\n        width: dataWidth + rowHeaderCellWidth + cellBorder + leftGroupAreaWidth,\n      };\n      ['width', 'height'].forEach(function (dim) {\n        //TODO: support inherit\n        if (\n          ['auto', undefined].indexOf(self.style[dim]) !== -1 &&\n          ['auto', undefined].indexOf(self.appliedInlineStyles[dim]) !== -1\n        ) {\n          self.parentNodeStyle[dim] = dims[dim] + 'px';\n        } else if (\n          ['auto', undefined].indexOf(self.style[dim]) == -1 &&\n          ['auto', undefined].indexOf(self.appliedInlineStyles[dim]) == -1\n        ) {\n          self.parentNodeStyle[dim] = self.style[dim];\n          if (self.isComponent) {\n            self.canvas.style[dim] = self.style[dim];\n          }\n        }\n      });\n    }\n    dataWidth = self.refreshScrollCacheX();\n    self.scrollCache.y = [];\n    for (x = 0; x < l; x += 1) {\n      self.scrollCache.y[x] = dataHeight;\n      dataHeight +=\n        ((self.sizes.rows[x] || ch) + (self.sizes.trees[x] || 0)) * self.scale +\n        // HACK? if an expanded tree row is frozen it is necessary to add the tree row's height a second time.\n        (self.frozenRow > x ? self.sizes.trees[x] || 0 : 0);\n    }\n    if (l > 1) {\n      self.scrollCache.y[x] = dataHeight;\n    }\n    if (self.attributes.showNewRow) {\n      dataHeight += ch;\n    }\n    if (self.attributes.snapToRow) {\n      dataHeight += self.style.cellHeight;\n    }\n    setCanvasSize();\n    if (self.isChildGrid) {\n      self.width = self.parentNode.offsetWidth;\n      self.height = self.parentNode.offsetHeight;\n    } else if (\n      self.height !== self.canvas.offsetHeight ||\n      self.width !== self.canvas.offsetWidth\n    ) {\n      self.height = self.canvas.offsetHeight;\n      self.width = self.canvas.offsetWidth;\n      self.canvasOffsetLeft = self.args.canvasOffsetLeft || 0;\n      self.canvasOffsetTop = self.args.canvasOffsetTop || 0;\n    }\n    /// calculate scroll bar dimensions\n    // non-controversial\n    self.scrollBox.top =\n      columnHeaderCellHeight + topGroupAreaHeight + columnHeaderCellBorder;\n    self.scrollBox.left = rowHeaderCellWidth + leftGroupAreaWidth;\n    // width and height of scroll box\n    setScrollBoxSize();\n    // is the data larger than the scroll box\n    checkScrollBoxVisibility();\n    // if the scroll box is visible, make room for it by expanding the size of the element\n    // if the other dimension is set to auto\n    if (self.scrollBox.horizontalBarVisible) {\n      if (self.style.height === 'auto' && !self.isChildGrid) {\n        self.height += sbw;\n      }\n      dataHeight += sbw;\n      setCanvasSize();\n      setScrollBoxSize();\n      checkScrollBoxVisibility();\n    }\n    if (self.scrollBox.verticalBarVisible) {\n      if (self.style.width === 'auto' && !self.isChildGrid) {\n        self.width += sbw;\n      }\n      dataWidth += sbw;\n      setCanvasSize();\n      setScrollBoxSize();\n      checkScrollBoxVisibility();\n    }\n    // set again after bar visibility checks\n    setScrollBoxSize();\n    self.scrollBox.scrollWidth = dataWidth - self.scrollBox.width;\n    self.scrollBox.scrollHeight = dataHeight - self.scrollBox.height;\n    if (self.frozenColumn > 0) {\n      self.scrollBox.widthBoxRatio =\n        (self.scrollBox.width - self.scrollCache.x[self.frozenColumn - 1]) /\n        dataWidth;\n    } else {\n      self.scrollBox.widthBoxRatio = self.scrollBox.width / dataWidth;\n    }\n    self.scrollBox.scrollBoxWidth =\n      self.scrollBox.width * self.scrollBox.widthBoxRatio -\n      self.style.scrollBarWidth -\n      b -\n      d;\n    // TODO: This heightBoxRatio number is terribly wrong.\n    // They should be a result of the size of the grid/canvas?\n    // it being off causes the scroll bar to \"slide\" under\n    // the dragged mouse.\n    // https://github.com/TonyGermaneri/canvas-datagrid/issues/97\n    self.scrollBox.heightBoxRatio =\n      (self.scrollBox.height -\n        columnHeaderCellHeight -\n        topGroupAreaHeight -\n        self.scrollCache.y[self.frozenRow]) /\n      dataHeight;\n    self.scrollBox.scrollBoxHeight =\n      self.scrollBox.height * self.scrollBox.heightBoxRatio -\n      self.style.scrollBarWidth -\n      b -\n      d;\n    self.scrollBox.scrollBoxWidth = Math.max(\n      self.scrollBox.scrollBoxWidth,\n      self.style.scrollBarBoxMinSize,\n    );\n    self.scrollBox.scrollBoxHeight = Math.max(\n      self.scrollBox.scrollBoxHeight,\n      self.style.scrollBarBoxMinSize,\n    );\n    // horizontal\n    n.x += rowHeaderCellWidth;\n    n.y += self.height - self.style.scrollBarWidth - d - topGroupAreaHeight;\n    n.width =\n      self.width -\n      self.style.scrollBarWidth -\n      rowHeaderCellWidth -\n      leftGroupAreaWidth -\n      d -\n      m;\n    n.height = self.style.scrollBarWidth + self.style.scrollBarBorderWidth + d;\n    // horizontal box\n    nb.y = n.y + self.style.scrollBarBoxMargin;\n    nb.width = self.scrollBox.scrollBoxWidth;\n    nb.height = self.style.scrollBarBoxWidth;\n    // vertical\n    v.x +=\n      self.width -\n      leftGroupAreaWidth -\n      self.style.scrollBarWidth -\n      self.style.scrollBarBorderWidth -\n      d;\n    v.y += columnHeaderCellHeight + self.scrollCache.y[self.frozenRow];\n    v.width = self.style.scrollBarWidth + self.style.scrollBarBorderWidth + d;\n    v.height =\n      self.height -\n      columnHeaderCellHeight -\n      topGroupAreaHeight -\n      self.style.scrollBarWidth -\n      d -\n      m;\n    // vertical box\n    vb.x = v.x + self.style.scrollBarBoxMargin;\n    vb.y += self.scrollCache.y[self.frozenRow];\n    vb.width = self.style.scrollBarBoxWidth;\n    vb.height = self.scrollBox.scrollBoxHeight;\n    // corner\n    co.x = n.x + n.width + m;\n    co.y = v.y + v.height + m;\n    co.width = self.style.scrollBarWidth + self.style.scrollBarBorderWidth;\n    co.height = self.style.scrollBarWidth + self.style.scrollBarBorderWidth;\n    self.scrollBox.entities = {\n      horizontalBar: n,\n      horizontalBox: nb,\n      verticalBar: v,\n      verticalBox: vb,\n      corner: co,\n    };\n    self.scrollBox.bar = {\n      v: v,\n      h: n,\n    };\n    self.scrollBox.box = {\n      v: vb,\n      h: nb,\n    };\n    /// calculate page and dom elements\n    self.page = Math.max(\n      1,\n      self.visibleRows.length - 3 - self.attributes.pageUpDownOverlap,\n    );\n    // set canvas drawing related items\n    if (!self.isChildGrid) {\n      const newWidth = self.width * ratio;\n      const newHeight = self.height * ratio;\n      // We need to check is settings size to canvas necessary,\n      // because settings the canvas'size will cause the canvas and its state be cleared\n      // even if the size is the same.\n      // Notes: Please don't call `self.resize()` without a subsequent call to `self.draw()`\n      if (self.canvas.width !== newWidth || self.canvas.height !== newHeight) {\n        self.canvas.width = newWidth;\n        self.canvas.height = newHeight;\n        self.ctx.scale(ratio, ratio);\n      }\n    }\n    // resize any open dom elements (input/textarea)\n    self.resizeEditInput();\n    self.scroll(true);\n    if (drawAfterResize) {\n      self.draw(true);\n    }\n    self.dispatchEvent('resize', {});\n    return true;\n  };\n  self.scroll = function (dontDraw) {\n    var s = self.getSchema(),\n      l = (self.viewData || []).length,\n      ch = self.style.cellHeight;\n    // go too far in leaps, then get focused\n    self.scrollIndexTop = Math.floor(\n      l * (self.scrollBox.scrollTop / self.scrollBox.scrollHeight) - 100,\n    );\n    self.scrollIndexTop = Math.max(self.scrollIndexTop, 0);\n    self.scrollPixelTop = self.scrollCache.y[self.scrollIndexTop];\n    // sometimes the grid is rendered but the height is zero\n    if (self.scrollBox.scrollHeight === 0) {\n      self.scrollIndexTop = 0;\n    }\n    self.scrollPixelTop = 0;\n    self.scrollIndexLeft = self.frozenColumn;\n    self.scrollPixelLeft = 0;\n    while (\n      self.scrollPixelTop < self.scrollBox.scrollTop &&\n      self.scrollIndexTop < self.viewData.length\n    ) {\n      // start on index +1 since index 0 was used in \"go too far\" section above\n      self.scrollIndexTop += 1;\n      self.scrollPixelTop = self.scrollCache.y[self.scrollIndexTop];\n    }\n    while (\n      self.scrollPixelLeft < self.scrollBox.scrollLeft + 1 &&\n      self.scrollIndexLeft < s.length\n    ) {\n      self.scrollPixelLeft = self.scrollCache.x[self.scrollIndexLeft];\n      self.scrollIndexLeft += 1;\n    }\n    if (s.length > 0) {\n      self.scrollIndexLeft = Math.max(self.scrollIndexLeft - 1, 0);\n      self.scrollPixelLeft -= self.getColumnWidth(\n        self.orders.columns[self.scrollIndexLeft],\n      );\n    }\n    if ((self.viewData || []).length > 0) {\n      self.scrollIndexTop = Math.max(self.scrollIndexTop - 1, 0);\n      self.scrollPixelTop = Math.max(\n        self.scrollPixelTop -\n          (self.viewData[self.scrollIndexTop]\n            ? (self.sizes.rows[self.scrollIndexTop] || ch) +\n              (self.sizes.trees[self.scrollIndexTop] || 0)\n            : ch) *\n            self.scale,\n        0,\n      );\n    }\n    self.ellipsisCache = {};\n    if (!dontDraw) {\n      self.draw(true);\n    }\n    //TODO: figure out why this has to be delayed for child grids\n    //BUG: wheeling event on 3rd level hierarchy fails to move input box\n    requestAnimationFrame(self.resizeEditInput);\n    self.dispatchEvent('scroll', {\n      top: self.scrollBox.scrollTop,\n      left: self.scrollBox.scrollLeft,\n    });\n  };\n  self.mousemove = function (e, overridePos) {\n    if (self.contextMenu || self.input) {\n      return;\n    }\n\n    // Cancel dragging action if user ventures outside grid\n    if (self.draggingItem && e.which === 0) {\n      self.stopFreezeMove(e);\n      self.mouseup(e);\n      return;\n    }\n\n    self.mouse = overridePos || self.getLayerPos(e);\n    var ctrl =\n        (e.ctrlKey || e.metaKey || self.attributes.persistantSelectionMode) &&\n        !self.attributes.singleSelectionMode,\n      i,\n      s = self.getSchema(),\n      dragBounds,\n      sBounds,\n      x = self.mouse.x,\n      y = self.mouse.y,\n      cell = self.getCellAt(x, y),\n      delta,\n      disallowVerticalAutoScroll = false,\n      disallowHorizontalAutoScroll = false,\n      ev = { NativeEvent: e, cell: cell, x: x, y: y },\n      previousCell = self.currentCell;\n    clearTimeout(self.scrollTimer);\n    if (!self.isInGrid({ x: x, y: y })) {\n      self.hasFocus = false;\n    }\n    if (self.dispatchEvent('mousemove', ev)) {\n      return;\n    }\n    if (cell && self.currentCell) {\n      self.rowBoundaryCrossed = self.currentCell.rowIndex !== cell.rowIndex;\n      self.columnBoundaryCrossed =\n        self.currentCell.columnIndex !== cell.columnIndex;\n      self.cellBoundaryCrossed =\n        self.rowBoundaryCrossed || self.columnBoundaryCrossed;\n      ['row', 'column', 'cell'].forEach(function (prefix) {\n        if (self[prefix + 'BoundaryCrossed']) {\n          ev.cell = previousCell;\n          self.dispatchEvent(prefix + 'mouseout', ev);\n          ev.cell = cell;\n          self.dispatchEvent(prefix + 'mouseover', ev);\n        }\n      });\n    }\n    self.currentCell = cell;\n\n    if (\n      !self.draggingItem && // It is not in dragging mode (avoid changing hovers frequent)\n      cell &&\n      (cell.context === 'cell' || cell.context === self.cursorGrab)\n    ) {\n      const indicator = self.getUnhideIndicator(self.mouse.x, self.mouse.y);\n      if (indicator) {\n        self.cursor = 'pointer';\n        self.hovers = { unhideIndicator: indicator };\n        self.draw();\n        return;\n      }\n    }\n\n    self.hovers = {};\n    if (!self.draggingItem && cell) {\n      self.dragItem = cell;\n      self.dragMode = cell.dragContext;\n      self.cursor = cell.context;\n      if (cell.context === 'cell') {\n        self.cursor = 'default';\n        self.hovers = {\n          rowIndex: cell.rowIndex,\n          columnIndex: cell.columnIndex,\n          onFilterButton: false,\n          onCellTreeIcon: false,\n        };\n        if (\n          cell.isFilterable &&\n          x >\n            cell.x +\n              cell.width +\n              self.canvasOffsetLeft -\n              self.style.filterButtonWidth &&\n          x < cell.x + cell.width + self.canvasOffsetLeft &&\n          y >\n            cell.y +\n              cell.height +\n              self.canvasOffsetTop -\n              self.style.filterButtonHeight &&\n          y < cell.y + cell.height + self.canvasOffsetTop\n        ) {\n          self.hovers.onFilterButton = true;\n          self.draw();\n        }\n        if (cell.isRowTree || cell.isColumnTree) {\n          const pc = cell.isRowTree\n            ? self.cellTree.rows[cell.rowIndex].parentCount\n            : 0;\n          const rc = self.style.cellTreeIconWidth * self.scale,\n            rx =\n              cell.x +\n              cell.paddingLeft +\n              self.canvasOffsetLeft +\n              self.style.cellTreeIconMarginLeft +\n              pc * (rc + cell.paddingLeft),\n            ry =\n              cell.y +\n              self.canvasOffsetTop +\n              self.style.cellTreeIconMarginTop * self.scale;\n          if (x >= rx && x <= rx + rc && y >= ry && y < ry + rc) {\n            self.hovers.onCellTreeIcon = true;\n            self.draw();\n          }\n        }\n      }\n      if (self.selecting || self.reorderObject) {\n        delta = {\n          x: Math.abs(self.dragStart.x - x),\n          y: Math.abs(self.dragStart.y - y),\n        };\n        if (self.dragStartObject.columnIndex !== -1 && e.shiftKey) {\n          self.dragStartObject = {\n            rowIndex: self.activeCell.rowIndex,\n            columnIndex: self.activeCell.columnIndex,\n          };\n        }\n        dragBounds = {\n          top: Math.min(self.dragStartObject.rowIndex, cell.rowIndex),\n          left: Math.min(self.dragStartObject.columnIndex, cell.columnIndex),\n          bottom: Math.max(self.dragStartObject.rowIndex, cell.rowIndex),\n          right: Math.max(self.dragStartObject.columnIndex, cell.columnIndex),\n        };\n        if (self.dragStartObject.columnIndex === -1) {\n          sBounds = self.getSelectionBounds();\n          dragBounds.left = -1;\n          dragBounds.right = s.length - 1;\n          dragBounds.top = Math.min(sBounds.top, cell.rowIndex);\n          dragBounds.bottom = Math.max(sBounds.bottom, cell.rowIndex);\n          if (dragBounds.top < 0) dragBounds.top = 0;\n        }\n\n        if (self.dragStartObject.rowIndex === -1) {\n          sBounds = self.getSelectionBounds();\n          dragBounds.left =\n            cell.columnIndex === undefined\n              ? sBounds.left\n              : Math.min(sBounds.left, cell.columnIndex);\n          dragBounds.right =\n            cell.columnIndex === undefined\n              ? sBounds.right\n              : Math.max(sBounds.right, cell.columnIndex);\n          dragBounds.top = -1;\n          dragBounds.bottom = self.viewData.length - 1;\n          if (dragBounds.left < 0) dragBounds.left = 0;\n          if (dragBounds.left != dragBounds.right)\n            self.isMultiColumnsSelected = true;\n          else self.isMultiRowsSelected = false;\n        }\n\n        if (\n          self.dragStartObject.rowIndex !== cell.rowIndex ||\n          self.dragStartObject.columnIndex !== cell.columnIndex\n        ) {\n          self.ignoreNextClick = true;\n        }\n        if (\n          self.cellBoundaryCrossed ||\n          (delta.x === 0 && delta.y === 0) ||\n          self.attributes.selectionMode === 'row'\n        ) {\n          if (\n            cell.rowIndex !== undefined &&\n            (self.attributes.selectionMode === 'row' ||\n              self.dragStartObject.columnIndex === -1) &&\n            self.rowBoundaryCrossed\n          ) {\n            if (self.dragStartObject.rowIndex < cell.rowIndex) {\n              dragBounds.top = self.dragStartObject.rowIndex;\n              dragBounds.bottom = cell.rowIndex;\n            } else {\n              dragBounds.top = cell.rowIndex;\n              dragBounds.bottom = self.dragStartObject.rowIndex;\n            }\n          } else if (\n            cell.rowIndex !== undefined &&\n            (self.attributes.selectionMode === 'column' ||\n              self.dragStartObject.rowIndex === -1) &&\n            self.columnBoundaryCrossed\n          ) {\n            if (self.dragStartObject.columnIndex < cell.columnIndex) {\n              dragBounds.left = self.dragStartObject.columnIndex;\n              dragBounds.right = cell.columnIndex;\n            } else {\n              dragBounds.left = cell.columnIndex;\n              dragBounds.right = self.dragStartObject.columnIndex;\n            }\n          } else if (self.attributes.selectionMode !== 'row') {\n            if (cell.hovered && self.hovers.onFilterButton) {\n              if (cell.openedFilter) {\n                cell.openedFilter = false;\n                self.selectedFilterButton = {\n                  columnIndex: -1,\n                  rowIndex: -1,\n                };\n              } else {\n                self.selectedFilterButton.rowIndex = cell.rowIndex;\n                self.selectedFilterButton.columnIndex = cell.columnIndex;\n                self.contextmenuEvent(e, {\n                  x: cell.x + cell.width - self.style.filterButtonWidth,\n                  y: cell.y + cell.height,\n                  rect: { left: 0, top: 0 },\n                });\n              }\n              self.draw();\n              return;\n            } else if (\n              cell.hovered &&\n              self.hovers.onCellTreeIcon &&\n              e.type == 'mousedown'\n            ) {\n              self.toggleCollapseTree(cell.rowIndex, cell.columnIndex);\n              return;\n            } else {\n              self.selectedFilterButton = {\n                columnIndex: -1,\n                rowIndex: -1,\n              };\n              if (self.hovers.onFilterButton) return;\n              if (self.hovers.onCellTreeIcon) return;\n              if (!self.dragAddToSelection && cell.rowIndex !== undefined) {\n                if (self.isCellSelected(cell)) self.unselectCell(cell);\n              } else {\n                if (!self.isCellSelected(cell)) self.selectCell(cell);\n              }\n            }\n          }\n        }\n        if (\n          (!self.selectionBounds ||\n            dragBounds.top !== self.selectionBounds.top ||\n            dragBounds.left !== self.selectionBounds.left ||\n            dragBounds.bottom !== self.selectionBounds.bottom ||\n            dragBounds.right !== self.selectionBounds.right) &&\n          !ctrl\n        ) {\n          if (!(cell.hovered && self.hovers.onFilterButton))\n            self.clearSelections();\n          if (dragBounds.top === -1) {\n            dragBounds.top = 0;\n          }\n          sBounds = dragBounds;\n          if (self.attributes.selectionMode === 'row') {\n            for (i = sBounds.top; i <= sBounds.bottom; i += 1) {\n              self.selectRow(i, true, null, true);\n            }\n          } else {\n            self.selectArea(sBounds, true);\n            self.activeCell.rowIndex = sBounds.top;\n            self.activeCell.columnIndex = sBounds.left;\n            if (sBounds.left == -1 && sBounds.top !== sBounds.bottom) {\n              self.activeCell.columnIndex = 0;\n              self.isMultiRowsSelected = true;\n              self.isMultiColumnsSelected = false;\n            }\n          }\n        }\n      } else if (self.movingSelectionHandle) {\n        delta = {\n          x: Math.abs(self.dragStart.x - x),\n          y: Math.abs(self.dragStart.y - y),\n        };\n\n        // Disallow auto-scroll to the direction that overlay is not\n        // moving towards.\n        if (self.fillOverlay.direction === 'y') {\n          disallowHorizontalAutoScroll = true;\n        } else if (self.fillOverlay.direction === 'x') {\n          disallowVerticalAutoScroll = true;\n        }\n      }\n\n      if (delta) {\n        if (\n          self.attributes.autoScrollOnMousemove ||\n          disallowVerticalAutoScroll ||\n          disallowHorizontalAutoScroll\n        ) {\n          var movedVertically =\n            !disallowVerticalAutoScroll &&\n            delta.y > self.attributes.autoScrollMargin;\n          var movedHorizontally =\n            !disallowHorizontalAutoScroll &&\n            delta.x > self.attributes.autoScrollMargin;\n\n          if (movedVertically && !movedHorizontally)\n            self.autoScrollZone(e, -1, y, ctrl);\n          else if (movedHorizontally && !movedVertically)\n            self.autoScrollZone(e, x, -1, ctrl);\n          else if (movedHorizontally && movedVertically)\n            self.autoScrollZone(e, x, y, ctrl);\n        } else {\n          self.autoScrollZone(e, x, y, ctrl);\n        }\n      }\n    }\n    const columnGroup = self.getColumnGroupAt(self.mouse.x, self.mouse.y);\n    if (columnGroup) self.cursor = 'pointer';\n\n    const rowGroup = self.getRowGroupAt(self.mouse.x, self.mouse.y);\n    if (rowGroup) self.cursor = 'pointer';\n\n    self.cellBoundaryCrossed = false;\n    self.rowBoundaryCrossed = false;\n    self.columnBoundaryCrossed = false;\n    self.draw(true);\n  };\n  self.click = function (e, overridePos) {\n    var i,\n      startingBounds = JSON.stringify(self.getSelectionBounds()),\n      ctrl =\n        (e.ctrlKey || e.metaKey || self.attributes.persistantSelectionMode) &&\n        !self.attributes.singleSelectionMode,\n      pos = overridePos || self.getLayerPos(e);\n    self.currentCell = self.getCellAt(pos.x, pos.y);\n    if (self.currentCell.grid !== undefined) {\n      return;\n    }\n    function checkSelectionChange() {\n      var ev,\n        sb = self.getSelectionBounds();\n\n      if (startingBounds === JSON.stringify(sb)) {\n        return;\n      }\n      self.dispatchEvent('selectionchanged', self.getContextOfSelectionEvent());\n    }\n    if (self.input) {\n      self.endEdit();\n    }\n    if (self.ignoreNextClick) {\n      self.ignoreNextClick = false;\n      return;\n    }\n    i = self.currentCell;\n    if (\n      self.dispatchEvent('click', { NativeEvent: e, cell: self.currentCell })\n    ) {\n      return;\n    }\n\n    const unhideIndicator = self.getUnhideIndicator(pos.x, pos.y);\n    if (unhideIndicator) {\n      const { dir, orderIndex0, orderIndex1 } = unhideIndicator;\n      if (dir === 'l' || dir === 'r')\n        self.unhideColumns(orderIndex0, orderIndex1);\n      else self.unhideRows(orderIndex0, orderIndex1);\n      return;\n    }\n\n    let group = self.getColumnGroupAt(pos.x, pos.y);\n    if (!group) group = self.getRowGroupAt(pos.x, pos.y);\n    if (group) {\n      if (self.toggleGroup(group)) {\n        self.setStorageData();\n        self.refresh();\n        return;\n      }\n    }\n\n    if (!self.hasFocus) {\n      return;\n    }\n\n    const leftOffset = self.getRowGroupAreaWidth();\n    const topOffset = self.getColumnGroupAreaHeight();\n    const xInGrid = pos.x - leftOffset;\n    const yInGrid = pos.y - topOffset;\n    if (\n      ['rowHeaderCell', 'columnHeaderCell'].indexOf(self.currentCell.style) ===\n        -1 &&\n      !ctrl\n    ) {\n      if (!self.hovers.onFilterButton) {\n        self.setActiveCell(i.columnIndex, i.rowIndex);\n      }\n    }\n    if (self.currentCell.context === 'cell') {\n      if (self.currentCell.style === 'cornerCell') {\n        self.selectAll();\n        self.draw();\n        checkSelectionChange();\n        return;\n      }\n      if (self.currentCell.style === 'columnHeaderCell') {\n        if (self.attributes.columnHeaderClickBehavior === 'sort') {\n          if (self.orderBy === i.header.name) {\n            self.orderDirection =\n              self.orderDirection === 'asc' ? 'desc' : 'asc';\n          } else {\n            self.orderDirection = 'asc';\n          }\n          self.order(i.header.name, self.orderDirection);\n          checkSelectionChange();\n          return;\n        }\n      }\n      if (\n        self.attributes.selectionMode === 'row' ||\n        self.currentCell.style === 'rowHeaderCell'\n      ) {\n        if (\n          self.currentCell.style === 'rowHeaderCell' &&\n          self.attributes.tree &&\n          xInGrid > 0 &&\n          xInGrid - self.currentCell.x <\n            self.style.treeArrowWidth +\n              self.style.treeArrowMarginLeft +\n              self.style.treeArrowMarginRight +\n              self.style.treeArrowClickRadius &&\n          yInGrid - self.currentCell.y <\n            self.style.treeArrowHeight +\n              self.style.treeArrowMarginTop +\n              self.style.treeArrowClickRadius &&\n          yInGrid > 0\n        ) {\n          self.toggleTree(i.rowIndex);\n          return;\n        }\n      }\n      if (e.shiftKey && !ctrl) {\n        self.selectionBounds = self.getSelectionBounds();\n        self.selectArea(undefined, false);\n      }\n    }\n    checkSelectionChange();\n    self.draw(true);\n  };\n  self.dragResizeColumn = function (e) {\n    const resizingColumn = self.dragMode === 'ew-resize';\n    var pos, x, y;\n    pos = self.getLayerPos(e);\n    x = self.resizingStartingWidth + pos.x - self.dragStart.x;\n    y = self.resizingStartingHeight + pos.y - self.dragStart.y;\n    if (x < self.style.minColumnWidth) {\n      x = self.style.minColumnWidth;\n    }\n    if (y < self.style.minRowHeight) {\n      y = self.style.minRowHeight;\n    }\n    if (\n      self.dispatchEvent(resizingColumn ? 'resizecolumn' : 'resizerow', {\n        x: x,\n        y: y,\n        width: x,\n        height: y,\n        columnIndex: resizingColumn ? self.draggingItem.columnIndex : undefined,\n        rowIndex: resizingColumn ? undefined : self.draggingItem.rowIndex,\n        draggingItem: self.draggingItem,\n      })\n    ) {\n      return false;\n    }\n    if (self.attributes.resizeAfterDragged) {\n      self.pendingDragResize = {\n        item: self.draggingItem,\n        width: x,\n        height: y,\n        x: e.clientX,\n        y: e.clientY,\n      };\n    } else {\n      self.dragResizeApply(self.draggingItem, x, y);\n    }\n  };\n  self.dragResizeApply = function (draggingItem, width, height) {\n    if (\n      self.scrollBox.scrollLeft >\n        self.scrollBox.scrollWidth - self.attributes.resizeScrollZone &&\n      self.dragMode === 'ew-resize'\n    ) {\n      self.resize(true);\n    }\n    if (self.dragMode === 'ew-resize') {\n      self.sizes.columns[\n        draggingItem.header.style === 'rowHeaderCell'\n          ? 'cornerCell'\n          : draggingItem.sortColumnIndex\n      ] = width;\n      if (\n        ['rowHeaderCell', 'cornerCell'].indexOf(draggingItem.header.style) !==\n        -1\n      ) {\n        self.resize(true);\n      }\n      self.resizeChildGrids();\n      return;\n    } else if (self.dragMode === 'ns-resize') {\n      if (draggingItem.rowOpen) {\n        self.sizes.trees[draggingItem.rowIndex] = height;\n      } else if (self.attributes.globalRowResize) {\n        self.style.cellHeight = height;\n      } else {\n        self.sizes.rows[draggingItem.rowIndex] = height;\n      }\n      self.dispatchEvent('resizerow', { row: height });\n      self.resizeChildGrids();\n      return;\n    }\n    self.ellipsisCache = {};\n  };\n  self.stopDragResize = function (event) {\n    const pos = self.getLayerPos(event);\n\n    if (self.attributes.resizeAfterDragged) {\n      self.dragResizeApply(\n        self.pendingDragResize.item,\n        self.pendingDragResize.width,\n        self.pendingDragResize.height,\n      );\n      self.pendingDragResize = undefined;\n    }\n\n    if (self.dragMode === 'ew-resize') {\n      const hasMoved = !!(pos.x - self.dragStart.x);\n      // Check that dragItem is selected or part of selection.\n      const dragItemIsSelected = self.isColumnSelected(\n        self.dragItem.columnIndex,\n      );\n\n      if (hasMoved && dragItemIsSelected) {\n        const width = Math.max(\n          self.resizingStartingWidth + pos.x - self.dragStart.x,\n          self.style.minColumnWidth,\n        );\n        // If the column is selected, resize it to width plus any other selected columns.\n        self.fitSelectedColumns(width);\n      }\n    } else if (self.dragMode === 'ns-resize') {\n      // Do the above for rows.\n      const hasMoved = !!(pos.y - self.dragStart.y);\n      const dragItemIsSelected = self.isRowSelected(self.dragItem.rowIndex);\n\n      if (hasMoved && dragItemIsSelected) {\n        const height = Math.max(\n          self.resizingStartingHeight + pos.y - self.dragStart.y,\n          self.style.minRowHeight,\n        );\n        self.fitSelectedRows(height);\n      }\n    }\n\n    self.resize();\n    window.removeEventListener('mousemove', self.dragResizeColumn, false);\n    window.removeEventListener('mouseup', self.stopDragResize, false);\n    self.setStorageData();\n    self.draw(true);\n    self.ignoreNextClick = true;\n  };\n  self.scrollGrid = function (e) {\n    var pos = self.getLayerPos(e);\n    if (\n      self.attributes.scrollPointerLock &&\n      self.pointerLockPosition &&\n      ['horizontal-scroll-box', 'vertical-scroll-box'].indexOf(\n        self.scrollStartMode,\n      ) !== -1\n    ) {\n      self.pointerLockPosition.x += e.movementX;\n      self.pointerLockPosition.y += e.movementY;\n      self.pointerLockPosition.x = Math.min(\n        self.width - self.style.scrollBarWidth,\n        Math.max(0, self.pointerLockPosition.x),\n      );\n      self.pointerLockPosition.y = Math.min(\n        self.height - self.style.scrollBarWidth,\n        Math.max(0, self.pointerLockPosition.y),\n      );\n      pos = self.pointerLockPosition;\n    }\n    self.scrollMode = self.getCellAt(pos.x, pos.y).context;\n    if (\n      self.scrollMode === 'horizontal-scroll-box' &&\n      self.scrollStartMode !== 'horizontal-scroll-box'\n    ) {\n      self.scrollStartMode = 'horizontal-scroll-box';\n      self.dragStart = pos;\n      self.scrollStart.left = self.scrollBox.scrollLeft;\n      clearTimeout(self.scrollTimer);\n      return;\n    }\n    if (\n      self.scrollMode === 'vertical-scroll-box' &&\n      self.scrollStartMode !== 'vertical-scroll-box'\n    ) {\n      self.scrollStartMode = 'vertical-scroll-box';\n      self.dragStart = pos;\n      self.scrollStart.top = self.scrollBox.scrollTop;\n      clearTimeout(self.scrollTimer);\n      return;\n    }\n    if (\n      self.scrollStartMode === 'vertical-scroll-box' &&\n      self.scrollMode !== 'vertical-scroll-box'\n    ) {\n      self.scrollMode = 'vertical-scroll-box';\n    }\n    if (\n      self.scrollStartMode === 'horizontal-scroll-box' &&\n      self.scrollMode !== 'horizontal-scroll-box'\n    ) {\n      self.scrollMode = 'horizontal-scroll-box';\n    }\n    clearTimeout(self.scrollTimer);\n    if (self.scrollModes.indexOf(self.scrollMode) === -1) {\n      return;\n    }\n    if (self.scrollMode === 'vertical-scroll-box') {\n      self.scrollBox.scrollTop =\n        self.scrollStart.top +\n        (pos.y - self.dragStart.y) / self.scrollBox.heightBoxRatio;\n    } else if (self.scrollMode === 'vertical-scroll-top') {\n      self.scrollBox.scrollTop -= self.page * self.style.cellHeight;\n      self.scrollTimer = setTimeout(\n        self.scrollGrid,\n        self.attributes.scrollRepeatRate,\n        e,\n      );\n    } else if (self.scrollMode === 'vertical-scroll-bottom') {\n      self.scrollBox.scrollTop += self.page * self.style.cellHeight;\n      self.scrollTimer = setTimeout(\n        self.scrollGrid,\n        self.attributes.scrollRepeatRate,\n        e,\n      );\n    }\n    if (self.scrollMode === 'horizontal-scroll-box') {\n      self.scrollBox.scrollLeft =\n        self.scrollStart.left +\n        (pos.x - self.dragStart.x) / self.scrollBox.widthBoxRatio;\n    } else if (self.scrollMode === 'horizontal-scroll-right') {\n      self.scrollBox.scrollLeft += self.attributes.selectionScrollIncrement;\n      self.scrollTimer = setTimeout(\n        self.scrollGrid,\n        self.attributes.scrollRepeatRate,\n        e,\n      );\n    } else if (self.scrollMode === 'horizontal-scroll-left') {\n      self.scrollBox.scrollLeft -= self.attributes.selectionScrollIncrement;\n      self.scrollTimer = setTimeout(\n        self.scrollGrid,\n        self.attributes.scrollRepeatRate,\n        e,\n      );\n    }\n  };\n  self.stopScrollGrid = function () {\n    clearTimeout(self.scrollTimer);\n    if (document.exitPointerLock) {\n      document.exitPointerLock();\n    }\n    window.removeEventListener('mousemove', self.scrollGrid, false);\n  };\n  self.dragReorder = function (e) {\n    var pos,\n      x,\n      y,\n      columReorder = self.dragMode === 'column-reorder',\n      rowReorder = self.dragMode === 'row-reorder';\n    pos = self.getLayerPos(e);\n    x = pos.x - self.dragStart.x;\n    y = pos.y - self.dragStart.y;\n    if (!self.attributes.allowColumnReordering && columReorder) {\n      return;\n    }\n    if (!self.attributes.allowRowReordering && rowReorder) {\n      return;\n    }\n    if ((e.ctrlKey || e.metaKey || e.shiftKey) && self.reorderObject) {\n      if (self.dragMode === 'column-reorder' && !self.isMultiColumnsSelected) {\n        self.selectColumn(self.draggingItem.header.index, false, false);\n      }\n    }\n    if (\n      self.dispatchEvent('reordering', {\n        NativeEvent: e,\n        source: self.dragStartObject,\n        target: self.currentCell,\n        dragMode: self.dragMode,\n      })\n    ) {\n      return;\n    }\n    if (\n      Math.abs(x) > self.attributes.reorderDeadZone ||\n      Math.abs(y) > self.attributes.reorderDeadZone\n    ) {\n      self.reorderObject = self.draggingItem;\n      if (self.isMultiRowsSelected)\n        self.reorderObject = self.getVisibleCellByIndex(\n          -1,\n          self.activeCell.rowIndex,\n        );\n      if (self.isMultiColumnsSelected)\n        self.reorderObject = self.getVisibleCellByIndex(\n          self.activeCell.columnIndex,\n          -1,\n        );\n      if (!self.reorderObject) return;\n      self.reorderTarget = self.currentCell;\n      self.reorderObject.dragOffset = {\n        x: x,\n        y: y,\n      };\n      self.autoScrollZone(\n        e,\n        columReorder ? pos.x : -1,\n        rowReorder ? pos.y : -1,\n        false,\n      );\n    }\n  };\n  self.stopDragReorder = function (e) {\n    let originalIndex;\n    let targetIndex;\n    const orderLists = {\n      'row-reorder': self.orders.rows,\n      'column-reorder': self.orders.columns,\n    };\n    const indexName = {\n      'row-reorder': 'rowIndex',\n      'column-reorder': 'sortColumnIndex',\n    }[self.dragMode];\n    window.removeEventListener('mousemove', self.dragReorder, false);\n    window.removeEventListener('mouseup', self.stopDragReorder, false);\n    if (\n      self.reorderObject &&\n      self.reorderTarget &&\n      ((self.dragMode === 'column-reorder' &&\n        self.reorderTarget.sortColumnIndex > -1 &&\n        self.reorderTarget.sortColumnIndex < self.getSchema().length) ||\n        (self.dragMode === 'row-reorder' &&\n          self.reorderTarget.rowIndex > -1 &&\n          self.reorderTarget.rowIndex < self.viewData.length)) &&\n      self.reorderObject[indexName] !== self.reorderTarget[indexName] &&\n      !self.dispatchEvent('reorder', {\n        NativeEvent: e,\n        source: self.reorderObject,\n        target: self.reorderTarget,\n        dragMode: self.dragMode,\n      })\n    ) {\n      self.ignoreNextClick = true;\n      originalIndex = orderLists[self.dragMode].indexOf(\n        self.reorderObject[indexName],\n      );\n      targetIndex = orderLists[self.dragMode].indexOf(\n        self.reorderTarget[indexName],\n      );\n      if (self.dragMode === 'column-reorder') {\n        /** Select column view indexes in the first row */\n        const selectedIndexes = self.getRowSelectionStates(0);\n        const sortColumnIndices = [];\n        const selectedColumnIndices = [];\n        if (selectedIndexes) {\n          originalIndex = selectedIndexes[0];\n          selectedIndexes.forEach(function (value) {\n            sortColumnIndices.push(self.orders.columns[value]);\n          });\n        }\n        const deleteCount = sortColumnIndices.length;\n        if (\n          targetIndex < originalIndex ||\n          (targetIndex > originalIndex &&\n            Math.abs(targetIndex - originalIndex) >= deleteCount)\n        ) {\n          orderLists[self.dragMode].splice(originalIndex, deleteCount);\n          if (targetIndex > originalIndex)\n            targetIndex = targetIndex - (deleteCount - 1);\n\n          for (let i = 0; i < sortColumnIndices.length; i++) {\n            if (i === 0) self.activeCell.columnIndex = targetIndex;\n            selectedColumnIndices.push(targetIndex + i);\n            orderLists[self.dragMode].splice(\n              targetIndex + i,\n              0,\n              sortColumnIndices[i],\n            );\n          }\n\n          self.orders.columns = orderLists[self.dragMode];\n          self.selectColumnViewIndexes(selectedColumnIndices);\n        }\n      } else {\n        /** The original name of this variable is  `odata` */\n        const rowIndexes = self.getRowViewIndexesFromSelection();\n        const originalData = rowIndexes.map(\n          (rowIndex) => self.viewData[rowIndex],\n        );\n        if (\n          targetIndex < originalIndex ||\n          (targetIndex > originalIndex &&\n            Math.abs(targetIndex - originalIndex) >= originalData.length)\n        ) {\n          self.viewData.splice(originalIndex, originalData.length);\n          if (targetIndex > originalIndex)\n            targetIndex = targetIndex - (originalData.length - 1);\n          self.activeCell.rowIndex = targetIndex;\n          for (let i = 0; i < originalData.length; i++)\n            self.viewData.splice(targetIndex + i, 0, originalData[i]);\n          self.moveSelection(0, targetIndex);\n        }\n      }\n      self.resize();\n      self.setStorageData();\n    }\n    self.reorderObject = undefined;\n    self.reorderTarget = undefined;\n    self.draw(true);\n  };\n  self.dragMove = function (e) {\n    if (\n      self.dispatchEvent('moving', { NativeEvent: e, cell: self.currentCell })\n    ) {\n      return;\n    }\n    var pos = self.getLayerPos(e);\n    self.moveOffset = {\n      x: self.currentCell.columnIndex - self.dragStartObject.columnIndex,\n      y: self.currentCell.rowIndex - self.dragStartObject.rowIndex,\n    };\n    if (\n      Math.abs(pos.x) > self.attributes.reorderDeadZone ||\n      Math.abs(pos.y) > self.attributes.reorderDeadZone\n    ) {\n      setTimeout(function () {\n        self.autoScrollZone(e, pos.x, pos.y, false);\n      }, 1);\n    }\n  };\n  self.stopDragMove = function (e) {\n    window.removeEventListener('mousemove', self.dragMove, false);\n    window.removeEventListener('mouseup', self.stopDragMove, false);\n    var b = self.getSelectionBounds();\n    if (\n      self.dispatchEvent('endmove', { NativeEvent: e, cell: self.currentCell })\n    ) {\n      self.movingSelection = undefined;\n      self.moveOffset = undefined;\n      self.draw(true);\n      return;\n    }\n    if (self.moveOffset) {\n      self.moveTo(\n        self.movingSelection,\n        b.left + self.moveOffset.x,\n        b.top + self.moveOffset.y,\n      );\n      self.moveSelection(self.moveOffset.x, self.moveOffset.y);\n    }\n    self.movingSelection = undefined;\n    self.moveOffset = undefined;\n    self.draw(true);\n  };\n  self.freezeMove = function (e) {\n    if (\n      self.dispatchEvent('freezemoving', {\n        NativeEvent: e,\n        cell: self.currentCell,\n      })\n    ) {\n      return;\n    }\n    var pos = self.getLayerPos(e);\n\n    self.ignoreNextClick = true;\n    self.freezeMarkerPosition = pos;\n    pos.x -= self.getRowGroupAreaWidth();\n    pos.y -= self.getColumnGroupAreaHeight();\n    if (\n      Math.abs(pos.x) > self.attributes.reorderDeadZone ||\n      Math.abs(pos.y) > self.attributes.reorderDeadZone\n    ) {\n      setTimeout(function () {\n        self.autoScrollZone(e, pos.x, pos.y, false);\n      }, 1);\n    }\n  };\n  self.stopFreezeMove = function (e) {\n    let pos = self.getLayerPos(e),\n      bm = self.style.gridBorderCollapse === 'collapse' ? 1 : 2,\n      columnHeaderCellBorder = self.style.columnHeaderCellBorderWidth * bm,\n      columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n      rowHeaderCellWidth = self.getRowHeaderCellWidth();\n    pos.x -= self.getRowGroupAreaWidth();\n    pos.y -= self.getColumnGroupAreaHeight();\n\n    if (\n      self.currentCell &&\n      self.currentCell.rowIndex !== undefined &&\n      self.dragMode === 'frozen-row-marker'\n    ) {\n      self.scrollBox.scrollTop = 0;\n      self.frozenRow = self.currentCell.rowIndex + 1;\n      self.scrollBox.bar.v.y =\n        columnHeaderCellHeight +\n        columnHeaderCellBorder +\n        self.scrollCache.y[self.frozenRow];\n      self.scrollBox.box.v.y =\n        columnHeaderCellHeight +\n        columnHeaderCellBorder +\n        self.scrollCache.y[self.frozenRow];\n      var dataHeight = self.scrollCache.y[self.scrollCache.y.length - 1];\n      self.scrollBox.heightBoxRatio =\n        (self.scrollBox.height -\n          columnHeaderCellHeight -\n          self.scrollCache.y[self.frozenRow]) /\n        dataHeight;\n      self.scrollBox.scrollBoxHeight =\n        self.scrollBox.height * self.scrollBox.heightBoxRatio -\n        self.style.scrollBarWidth;\n      self.scrollBox.scrollBoxHeight = Math.max(\n        self.scrollBox.scrollBoxHeight,\n        self.style.scrollBarBoxMinSize,\n      );\n      self.scrollBox.box.v.height = self.scrollBox.scrollBoxHeight;\n    }\n    if (\n      self.currentCell &&\n      self.currentCell.columnIndex !== undefined &&\n      self.dragMode === 'frozen-column-marker'\n    ) {\n      const dataWidth = self.refreshScrollCacheX();\n      self.scrollBox.scrollLeft = 0;\n      let x =\n        self.currentCell.x -\n        self.style.frozenMarkerWidth -\n        self.style.frozenMarkerBorderWidth;\n      if (pos.x > x + self.currentCell.width / 2)\n        self.frozenColumn = self.currentCell.columnIndex + 1;\n      else if (self.currentCell.columnIndex >= 0)\n        self.frozenColumn = self.currentCell.columnIndex;\n      self.scrollBox.bar.h.x =\n        rowHeaderCellWidth + self.scrollCache.x[self.frozenColumn];\n      self.scrollBox.widthBoxRatio =\n        (self.scrollBox.width - self.scrollCache.x[self.frozenColumn]) /\n        dataWidth;\n      self.scrollBox.scrollBoxWidth =\n        self.scrollBox.width * self.scrollBox.widthBoxRatio -\n        self.style.scrollBarWidth;\n      self.scrollBox.scrollBoxWidth = Math.max(\n        self.scrollBox.scrollBoxWidth,\n        self.style.scrollBarBoxMinSize,\n      );\n      self.scrollBox.box.h.width = self.scrollBox.scrollBoxWidth;\n    }\n    if (\n      Math.abs(pos.x) > self.attributes.reorderDeadZone ||\n      Math.abs(pos.y) > self.attributes.reorderDeadZone\n    ) {\n      setTimeout(function () {\n        self.autoScrollZone(e, pos.x, pos.y, false);\n      }, 1);\n    }\n\n    window.removeEventListener('mousemove', self.freezeMove, false);\n    window.removeEventListener('mouseup', self.stopFreezeMove, false);\n    self.freezeMarkerPosition = undefined;\n    if (\n      self.dispatchEvent('endfreezemove', {\n        NativeEvent: e,\n        cell: self.currentCell,\n      })\n    ) {\n      self.frozenRow = self.startFreezeMove.x;\n      self.frozenColumn = self.startFreezeMove.y;\n      self.draw(true);\n      return;\n    }\n    self.draw(true);\n    self.resize();\n  };\n  self.mousedown = function (e, overridePos) {\n    self.lastMouseDownTarget = e.target;\n    if (\n      self.dispatchEvent('mousedown', {\n        NativeEvent: e,\n        cell: self.currentCell,\n      })\n    ) {\n      return;\n    }\n    if (!self.hasFocus) {\n      return;\n    }\n    if (e.button === 2 || self.input) {\n      return;\n    }\n    var ctrl = e.ctrlKey || e.metaKey,\n      move = /-move/.test(self.dragMode),\n      freeze = /frozen-row-marker|frozen-column-marker/.test(self.dragMode),\n      resize = /-resize/.test(self.dragMode),\n      selectionHandleMove = /selection-handle-br/.test(self.dragMode);\n    const onUnhideIndicator = self.hovers && self.hovers.unhideIndicator;\n    self.dragStart = overridePos || self.getLayerPos(e);\n    self.scrollStart = {\n      left: self.scrollBox.scrollLeft,\n      top: self.scrollBox.scrollTop,\n    };\n    self.dragStartObject = self.getCellAt(self.dragStart.x, self.dragStart.y);\n    self.dragAddToSelection = !self.dragStartObject.selected;\n    if (\n      !ctrl &&\n      !e.shiftKey &&\n      !/(vertical|horizontal)-scroll-(bar|box)/.test(\n        self.dragStartObject.context,\n      ) &&\n      self.currentCell &&\n      !self.currentCell.isColumnHeader &&\n      !move &&\n      !freeze &&\n      !resize &&\n      !selectionHandleMove\n    ) {\n      if (\n        !(self.dragMode == 'row-reorder' && self.isMultiRowsSelected) &&\n        !(self.currentCell.hovered && self.hovers.onFilterButton)\n      ) {\n        self.clearSelections();\n      }\n    }\n    if (self.dragStartObject.isGrid) {\n      return;\n    }\n    if (\n      self.scrollModes.indexOf(self.dragStartObject.context) !== -1 &&\n      !onUnhideIndicator\n    ) {\n      self.scrollMode = self.dragStartObject.context;\n      self.scrollStartMode = self.dragStartObject.context;\n      self.scrollGrid(e);\n      if (\n        self.attributes.scrollPointerLock &&\n        ['horizontal-scroll-box', 'vertical-scroll-box'].indexOf(\n          self.scrollStartMode,\n        ) !== -1\n      ) {\n        self.pointerLockPosition = {\n          x: self.dragStart.x,\n          y: self.dragStart.y,\n        };\n        self.canvas.requestPointerLock();\n      }\n      window.addEventListener('mousemove', self.scrollGrid, false);\n      window.addEventListener('mouseup', self.stopScrollGrid, false);\n      self.ignoreNextClick = true;\n      return;\n    }\n    if (self.dragMode === 'cell') {\n      self.selecting = true;\n      if (\n        (self.attributes.selectionMode === 'row' ||\n          self.dragStartObject.columnIndex === -1) &&\n        self.dragStartObject.rowIndex > -1\n      ) {\n        self.selectRow(self.dragStartObject.rowIndex, ctrl, null);\n      } else if (\n        (self.attributes.selectionMode === 'column' ||\n          self.dragStartObject.rowIndex === -1) &&\n        self.dragStartObject.columnIndex > -1\n      ) {\n        self.selectColumn(self.currentCell.header.index, ctrl, e.shiftKey);\n        return;\n      }\n      if (self.attributes.selectionMode !== 'row') {\n        self.mousemove(e);\n      }\n      return;\n    }\n    if (selectionHandleMove) {\n      self.movingSelectionHandle = true;\n      self.fillOverlay = {\n        handle: {\n          x: self.dragStartObject.x + self.dragStartObject.width / 2,\n          y: self.dragStartObject.y + self.dragStartObject.height / 2,\n        },\n        snapTo: { x: -1, y: -1 },\n        selection: self.getSelectionBounds(),\n      };\n      if (self.dispatchEvent('beginselectionhandlemove', { NativeEvent: e })) {\n        return;\n      }\n      window.addEventListener('mousemove', self.selectionHandleMove, false);\n      window.addEventListener('mouseup', self.stopSelectionHandleMove, false);\n      return self.selectionHandleMove(e);\n    }\n    if (move) {\n      self.draggingItem = self.dragItem;\n      self.movingSelection = self.cloneSelections();\n      self.dragging = self.dragStartObject;\n      if (\n        self.dispatchEvent('beginmove', {\n          NativeEvent: e,\n          cell: self.currentCell,\n        })\n      ) {\n        return;\n      }\n      window.addEventListener('mousemove', self.dragMove, false);\n      window.addEventListener('mouseup', self.stopDragMove, false);\n      return self.mousemove(e);\n    }\n    if (freeze) {\n      self.draggingItem = self.dragItem;\n      self.startFreezeMove = {\n        x: self.frozenRow,\n        y: self.frozenColumn,\n      };\n      if (self.dispatchEvent('beginfreezemove', { NativeEvent: e })) {\n        return;\n      }\n\n      self.freezeMarkerPosition = self.getLayerPos(e);\n      self.freezeMarkerPosition.isGrab = true;\n\n      window.addEventListener('mousemove', self.freezeMove, false);\n      window.addEventListener('mouseup', self.stopFreezeMove, false);\n      return self.mousemove(e);\n    }\n    if (resize && !onUnhideIndicator) {\n      self.draggingItem = self.dragItem;\n      if (self.draggingItem.rowOpen) {\n        self.resizingStartingHeight =\n          self.sizes.trees[self.draggingItem.rowIndex];\n      } else {\n        self.resizingStartingHeight =\n          self.sizes.rows[self.draggingItem.rowIndex] || self.style.cellHeight;\n      }\n      self.resizingStartingWidth =\n        self.sizes.columns[\n          self.draggingItem.header.style === 'rowHeaderCell'\n            ? 'cornerCell'\n            : self.draggingItem.sortColumnIndex\n        ] || self.draggingItem.width;\n      window.addEventListener('mousemove', self.dragResizeColumn, false);\n      window.addEventListener('mouseup', self.stopDragResize, false);\n      return;\n    }\n    if (['row-reorder', 'column-reorder'].indexOf(self.dragMode) !== -1) {\n      self.draggingItem = self.dragStartObject;\n      if (self.dragMode === 'column-reorder' && !self.isMultiColumnsSelected) {\n        self.selectColumn(self.currentCell.header.index, ctrl, e.shiftKey);\n      } else if (self.dragMode === 'row-reorder' && !self.isMultiRowsSelected) {\n        self.selectRow(self.dragStartObject.rowIndex, ctrl, null);\n      }\n      window.addEventListener('mousemove', self.dragReorder, false);\n      window.addEventListener('mouseup', self.stopDragReorder, false);\n      return;\n    }\n  };\n  self.mouseup = function (e) {\n    clearTimeout(self.scrollTimer);\n    self.cellBoundaryCrossed = true;\n    self.rowBoundaryCrossed = true;\n    self.columnBoundaryCrossed = true;\n    self.selecting = undefined;\n    self.draggingItem = undefined;\n    self.dragStartObject = undefined;\n    if (\n      self.dispatchEvent('mouseup', { NativeEvent: e, cell: self.currentCell })\n    ) {\n      return;\n    }\n    if (!self.hasFocus && e.target !== self.canvas) {\n      return;\n    }\n    if (self.currentCell && self.currentCell.grid !== undefined) {\n      return;\n    }\n    if (self.contextMenu || self.input) {\n      return;\n    }\n    if (self.dragStart && self.isInGrid(self.dragStart)) {\n      self.controlInput.focus();\n    }\n    e.preventDefault();\n  };\n  // gets the horizontal adjacent cells as well as first/last based on column visibility\n  self.getAdjacentCells = function () {\n    var x,\n      i,\n      s = self.getSchema(),\n      o = {};\n    for (x = 0; x < s.length; x += 1) {\n      i = self.orders.columns[x];\n      if (!s[i].hidden) {\n        if (o.first === undefined) {\n          o.first = x;\n          o.left = x;\n        }\n        o.last = x;\n        if (x > self.activeCell.columnIndex && o.right === undefined) {\n          o.right = x;\n        }\n        if (x < self.activeCell.columnIndex) {\n          o.left = x;\n        }\n      }\n    }\n    if (o.right === undefined) {\n      o.right = o.last;\n    }\n    return o;\n  };\n  self.keydown = function (e) {\n    var i,\n      ev,\n      adjacentCells = self.getAdjacentCells(),\n      x = Math.max(self.activeCell.columnIndex, 0),\n      y = Math.max(self.activeCell.rowIndex, 0),\n      ctrl = e.ctrlKey || e.metaKey,\n      last = self.viewData.length - 1,\n      s = self.getSchema(),\n      cols = s.length - 1;\n\n    var defaultPrevented = self.dispatchEvent('keydown', {\n      NativeEvent: e,\n      cell: self.currentCell,\n    });\n\n    if (defaultPrevented) {\n      return;\n    }\n\n    if (!self.attributes.keepFocusOnMouseOut && !self.hasFocus) {\n      return;\n    }\n\n    // If a user starts typing content, switch to \"Enter\" mode\n    if (isPrintableKeyEvent(e) && !ctrl) {\n      return self.beginEditAt(x, y, e, true);\n    }\n\n    if (self.attributes.showNewRow) {\n      last += 1;\n    }\n\n    if (e.key === 'Tab') {\n      e.preventDefault();\n    }\n\n    if (e.key === 'Escape') {\n      self.selectNone();\n    } else if (ctrl && e.key === 'a') {\n      self.selectAll();\n    } else if (['Backspace', 'Delete'].includes(e.key)) {\n      self.deleteSelectedData();\n    } else if (e.key === 'ArrowDown') {\n      y += 1;\n    } else if (e.key === 'ArrowUp') {\n      y -= 1;\n    } else if (\n      (e.key === 'ArrowLeft' && !ctrl) ||\n      (e.shiftKey && e.key === 'Tab')\n    ) {\n      x = adjacentCells.left;\n    } else if (\n      (e.key === 'ArrowRight' && !ctrl) ||\n      (!e.shiftKey && e.key === 'Tab')\n    ) {\n      x = adjacentCells.right;\n    } else if (e.key === 'PageUp') {\n      y -= self.page;\n      e.preventDefault();\n    } else if (e.key === 'PageDown') {\n      y += self.page;\n      e.preventDefault();\n    } else if (e.key === 'Home' || (ctrl && e.key === 'ArrowUp')) {\n      y = 0;\n    } else if (e.key === 'End' || (ctrl && e.key === 'ArrowDown')) {\n      y = self.viewData.length - 1;\n    } else if (ctrl && e.key === 'ArrowRight') {\n      x = adjacentCells.last;\n    } else if (ctrl && e.key === 'ArrowLeft') {\n      x = adjacentCells.first;\n    }\n\n    if (e.key === 'Enter') {\n      e.preventDefault();\n      return self.beginEditAt(x, y, e);\n    }\n    if (x < 0 || Number.isNaN(x)) {\n      x = adjacentCells.first;\n    }\n    if (y > last) {\n      y = last;\n    }\n    if (y < 0 || Number.isNaN(y)) {\n      y = 0;\n    }\n    if (x > cols) {\n      x = adjacentCells.last;\n    }\n\n    // TODO - most likely some column order related bugs in key based selection\n    // Arrows\n    const isArrowKey = [\n      'ArrowLeft',\n      'ArrowUp',\n      'ArrowRight',\n      'ArrowDown',\n    ].includes(e.key);\n\n    // Shrinking and expanding selection using shift and arrow keys\n    if (e.shiftKey && isArrowKey) {\n      const changed = self.shrinkOrExpandSelections(\n        { rowIndex: y, columnIndex: x },\n        e,\n        true,\n      );\n      if (changed) self.draw(true);\n    }\n\n    if (x !== self.activeCell.columnIndex || y !== self.activeCell.rowIndex) {\n      self.scrollIntoView(\n        x !== self.activeCell.columnIndex ? x : undefined,\n        y !== self.activeCell.rowIndex && !Number.isNaN(y) ? y : undefined,\n      );\n\n      self.setActiveCell(x, y);\n      if (!e.shiftKey && self.attributes.selectionFollowsActiveCell) {\n        if (!ctrl) self.clearSelections();\n        self.selectCell({ rowIndex: y, viewColumnIndex: x });\n      }\n      self.draw(true);\n    }\n  };\n  self.keyup = function (e) {\n    if (\n      self.dispatchEvent('keyup', { NativeEvent: e, cell: self.currentCell })\n    ) {\n      return;\n    }\n    if (!self.hasFocus) {\n      return;\n    }\n  };\n  self.keypress = function (e) {\n    if (!self.hasFocus) {\n      return;\n    }\n    if (\n      self.dispatchEvent('keypress', { NativeEvent: e, cell: self.currentCell })\n    ) {\n      return;\n    }\n  };\n  self.dblclick = function (e) {\n    if (\n      self.dispatchEvent('dblclick', { NativeEvent: e, cell: self.currentCell })\n    ) {\n      return;\n    }\n    if (!self.hasFocus) {\n      return;\n    }\n    if (\n      self.currentCell.context === 'ew-resize' &&\n      self.currentCell.style === 'columnHeaderCell'\n    ) {\n      // Check that double-clicked cell is selected or part of selection.\n      const currentCellIsSelected = self.isColumnSelected(\n        self.currentCell.columnIndex,\n      );\n\n      if (currentCellIsSelected) {\n        // There might be more\n        self.fitSelectedColumns();\n      } else {\n        self.fitColumnToValues(self.currentCell.header.name);\n      }\n    } else if (\n      self.currentCell.context === 'ew-resize' &&\n      self.currentCell.style === 'cornerCell'\n    ) {\n      self.autosize();\n    } else if (\n      ['cell', 'activeCell'].includes(self.currentCell.style) &&\n      !self.hovers.onFilterButton &&\n      !self.hovers.onCellTreeIcon\n    ) {\n      if (self.currentCell.isRowTree || self.currentCell.isColumnTree) {\n        self.cellTreeExpandCollapse(\n          self.currentCell.rowIndex,\n          self.currentCell.columnIndex,\n        );\n        self.draw();\n      } else {\n        self.beginEditAt(\n          self.currentCell.columnIndex,\n          self.currentCell.rowIndex,\n        );\n      }\n    }\n  };\n  self.scrollWheel = function (e) {\n    var l,\n      t,\n      ev = e,\n      deltaX = e.deltaX === undefined ? e.NativeEvent.deltaX : e.deltaX,\n      deltaY = e.deltaY === undefined ? e.NativeEvent.deltaY : e.deltaY,\n      deltaMode =\n        e.deltaMode === undefined ? e.NativeEvent.deltaMode : e.deltaMode;\n    if (e.NativeEvent) e = e.NativeEvent;\n    if (wheeling) {\n      ev.preventDefault(e);\n      return;\n    }\n    if (self.dispatchEvent('wheel', { NativeEvent: e })) {\n      return;\n    }\n    self.touchHaltAnimation = true;\n    l = self.scrollBox.scrollLeft;\n    t = self.scrollBox.scrollTop;\n    if (self.hasFocus) {\n      //BUG Issue 42: https://github.com/TonyGermaneri/canvas-datagrid/issues/42\n      //https://stackoverflow.com/questions/20110224/what-is-the-height-of-a-line-in-a-wheel-event-deltamode-dom-delta-line\n      if (deltaMode === 1) {\n        // line mode = 17 pixels per line\n        deltaY = deltaY * 17;\n      }\n      if (\n        (self.scrollBox.scrollTop < self.scrollBox.scrollHeight &&\n          deltaY > 0) ||\n        (self.scrollBox.scrollLeft < self.scrollBox.scrollWidth &&\n          deltaX > 0) ||\n        (self.scrollBox.scrollTop > 0 && deltaY < 0) ||\n        (self.scrollBox.scrollLeft > 0 && deltaX < 0)\n      ) {\n        ev.preventDefault(e);\n      }\n      wheeling = setTimeout(function () {\n        wheeling = undefined;\n        self.scrollBox.scrollTo(deltaX + l, deltaY + t);\n      }, 1);\n    }\n  };\n  self.pasteData = function (\n    pasteValue,\n    mimeType,\n    startRowIndex,\n    startColIndex,\n    minRowsLength = 0,\n    minColumnsLength = 0,\n  ) {\n    if (mimeType === 'text/html' && !isSupportedHtml(pasteValue)) {\n      console.warn(\n        'Unrecognized HTML format. HTML must be a simple table, e.g.: <table><tr><td>data</td></tr></table>.',\n      );\n      console.warn(\n        'Data with the mime type text/html not in this format will not be imported as row data.',\n      );\n\n      return;\n    }\n\n    const rows = parseData(pasteValue, mimeType);\n    const columnsLength = rows[0].length;\n\n    // selected cell. This mimics Excel's paste functionality, and works\n    // as a poor-man's fill-down.\n    if (\n      rows.length === 1 &&\n      columnsLength === 1 &&\n      minRowsLength <= 1 &&\n      minColumnsLength <= 1\n    ) {\n      var cellData = rows[0][0].value.map((item) => item.value).join();\n\n      self.forEachSelectedCell(function (data, rowIndex, colName) {\n        data[rowIndex][colName] = cellData;\n      });\n    } else {\n      let direction = null;\n\n      if (minRowsLength > rows.length && minColumnsLength > columnsLength) {\n        direction = 'both';\n      } else if (minRowsLength > rows.length) {\n        direction = 'vertical';\n      } else if (minColumnsLength > columnsLength) {\n        direction = 'horizontal';\n      }\n\n      self.insert({\n        rows: rows,\n        startRowIndex: startRowIndex,\n        startColumnIndex: startColIndex,\n        minRowsLength: minRowsLength,\n        minColumnsLength: minColumnsLength,\n        reverseRows: false,\n        reverseColumns: false,\n        clearSelections: true,\n        alwaysFilling: false,\n        direction: direction,\n      });\n    }\n\n    // selections is a sparse array, so we condense:\n    const affectedCells = [];\n    self.forEachSelectedCell((viewData, viewRowIndex, columnName, cell) => {\n      affectedCells.push([\n        viewRowIndex,\n        cell.viewColumnIndex,\n        cell.boundRowIndex,\n        cell.boundColumnIndex,\n      ]);\n    });\n\n    self.dispatchEvent('afterpaste', {\n      cells: affectedCells,\n    });\n\n    return rows.length;\n  };\n  self.insert = function ({\n    rows = [],\n    startRowIndex = 0,\n    startColumnIndex = 0,\n    minRowsLength = 0,\n    minColumnsLength = 0,\n    reverseRows = false,\n    reverseColumns = false,\n    clearSelections = false,\n    alwaysFilling = false,\n    direction = 'both',\n  }) {\n    var schema = self.getSchema();\n    const rowsLength = Math.max(rows.length, minRowsLength);\n    const fillCellCallback = self.fillCellCallback;\n    const filledCells = [];\n\n    if (clearSelections) self.selections = [];\n\n    for (\n      let rowPosReal = 0, rowDataPos = 0;\n      rowPosReal < rowsLength;\n      rowPosReal++, rowDataPos++\n    ) {\n      if (rowDataPos >= rows.length) {\n        rowDataPos = 0;\n      }\n\n      const fillingRow = rowPosReal >= rows.length;\n      const rowPosition = reverseRows\n        ? rowsLength - rowPosReal - 1\n        : rowPosReal;\n      // Rows may have been moved by user, so get the actual row index\n      // (instead of the row index at which the row is rendered):\n      var realRowIndex = self.orders.rows[startRowIndex + rowPosition];\n      var cells = rows[rowDataPos];\n      const cellsLength = Math.max(cells.length, minColumnsLength);\n\n      var existingRowData = self.viewData[realRowIndex];\n      var newRowData = Object.assign({}, existingRowData);\n      const fillArgs = fillCellCallback\n        ? {\n            rows: rows,\n            direction: direction,\n            rowData: newRowData,\n            existingRowData: existingRowData,\n            rowIndex: realRowIndex,\n            rowOffset: rowDataPos,\n            cells: cells,\n            reversed: direction === 'horizontal' ? reverseColumns : reverseRows,\n            isFillingRow: fillingRow || alwaysFilling,\n            fillingRowPosition: alwaysFilling\n              ? rowPosReal\n              : fillingRow\n              ? rowPosReal - rows.length\n              : -1,\n            fillingRowLength: alwaysFilling\n              ? rowsLength\n              : fillingRow\n              ? rowsLength - rows.length\n              : -1,\n          }\n        : undefined;\n\n      for (\n        var colPosReal = 0, cellDataPos = 0;\n        colPosReal < cellsLength;\n        colPosReal++, cellDataPos++\n      ) {\n        if (cellDataPos >= cells.length) {\n          cellDataPos = 0;\n        }\n\n        const fillingColumn = colPosReal >= cells.length;\n        const colPosition = reverseColumns\n          ? cellsLength - colPosReal - 1\n          : colPosReal;\n        const columnIndex = startColumnIndex + colPosition;\n        var column = schema[self.orders.columns[columnIndex]];\n\n        if (!column) {\n          console.warn('Paste data exceeded grid bounds. Skipping.');\n          continue;\n        }\n\n        var columnName = column.name;\n        var cellData = cells[cellDataPos];\n        if (cellData && cellData.value) {\n          cellData = cellData.value.map((item) => item.value).join('');\n        }\n\n        const existingCellData = existingRowData[columnName];\n\n        if (\n          fillCellCallback &&\n          (fillingColumn || fillingRow || alwaysFilling)\n        ) {\n          newRowData[columnName] = fillCellCallback({\n            ...fillArgs,\n            column: column,\n            columnIndex: columnIndex,\n            columnOffset: cellDataPos,\n            newCellData: cellData,\n            existingCellData: existingCellData,\n            isFillingColumn: fillingColumn || alwaysFilling,\n            fillingColumnPosition: alwaysFilling\n              ? colPosReal\n              : fillingColumn\n              ? colPosReal - cells.length\n              : -1,\n            fillingColumnLength: alwaysFilling\n              ? cellsLength\n              : fillingColumn\n              ? cellsLength - cells.length\n              : -1,\n          });\n        } else {\n          newRowData[columnName] =\n            cellData === undefined || cellData === null\n              ? existingCellData\n              : cellData;\n        }\n\n        self.selectCell(\n          { rowIndex: realRowIndex, viewColumnIndex: columnIndex },\n          true,\n        );\n\n        if (alwaysFilling || fillingRow || fillingColumn) {\n          filledCells.push([\n            realRowIndex,\n            columnIndex,\n            self.getBoundRowIndexFromViewRowIndex(realRowIndex),\n            self.getBoundColumnIndexFromViewColumnIndex(columnIndex),\n          ]);\n        }\n      }\n\n      self.originalData[self.boundRowIndexMap.get(realRowIndex)] = newRowData;\n      // Update view date here to avoid a full refresh of `viewData`.\n      // To stay in line with Excel and Google Sheet behaviour,\n      // don't perform a full refresh (and filter/sort results)\n      // as this would make any pasted values disappear and/or suddenly change position.\n      self.viewData[realRowIndex] = newRowData;\n    }\n\n    if (filledCells.length > 0 || alwaysFilling) {\n      self.dispatchEvent('afterfill', {\n        filledCells: filledCells,\n      });\n    }\n  };\n  self.getNextVisibleColumnIndex = function (visibleColumnIndex) {\n    var x,\n      s = self.getVisibleSchema();\n    for (x = 0; x < s.length; x += 1) {\n      if (s[x].columnIndex === visibleColumnIndex) {\n        return s[x + 1].columnIndex;\n      }\n    }\n    return -1;\n  };\n  self.getVisibleColumnIndexOf = function (columnIndex) {\n    var x,\n      s = self.getVisibleSchema();\n    for (x = 0; x < s.length; x += 1) {\n      if (s[x].columnIndex === columnIndex) {\n        return x;\n      }\n    }\n    return -1;\n  };\n  self.getSelectionIndex = function () {\n    const bounds = self.getSelectionBounds(true);\n    if (!bounds) return;\n    const { top, bottom } = bounds;\n    for (let rowIndex = top; rowIndex <= bottom; rowIndex++) {\n      const row = self.getRowSelectionStates(rowIndex);\n      if (row) {\n        if (row[0] === undefined) break;\n\n        return {\n          row: rowIndex,\n          column: row[0] < 0 ? row[1] : row[0],\n          rowLength: bottom - rowIndex + 1,\n          columnLength: row.length - (row[0] < 0 ? 1 : 0),\n        };\n      }\n    }\n\n    return null;\n  };\n  self.paste = function (event) {\n    if (!self.attributes.editable) {\n      return;\n    }\n\n    var defaultPrevented = self.dispatchEvent('beforepaste', {\n      NativeEvent: event,\n    });\n\n    if (defaultPrevented) {\n      return;\n    }\n\n    var clipboardItems = new Map(\n      Array.from(event.clipboardData.items).map((item) => [item.type, item]),\n    );\n\n    // Supported MIME types, in order of preference:\n    var supportedMimeTypes = ['text/html', 'text/csv', 'text/plain'];\n\n    // The clipboard will often contain the same data in multiple formats,\n    // which can be used depending on the context in which it's pasted. Here\n    // we'll prefere more structured (HTML/CSV) over less structured, when\n    // available, so we try to find those first:\n    var pasteableItems = supportedMimeTypes\n      .map((mimeType) => clipboardItems.get(mimeType))\n      .filter((item) => !!item); // filter out not-found MIME types (= undefined)\n\n    if (pasteableItems.length === 0) {\n      console.warn(\n        'Cannot find supported clipboard data type. Supported types are:',\n        supportedMimeTypes.join(', '),\n      );\n      return;\n    }\n\n    const selectionIndex = self.getSelectionIndex();\n    if (!selectionIndex) return;\n\n    var itemToPaste = pasteableItems[0];\n\n    // itemToPaste is cleared once accessed (getData or getAsString),\n    // so we need to store the type here, before reading its value:\n    var pasteType = itemToPaste.type;\n\n    itemToPaste.getAsString(function (pasteValue) {\n      self.pasteData(\n        pasteValue,\n        pasteType,\n        selectionIndex.row,\n        selectionIndex.column,\n        selectionIndex.rowLength,\n        selectionIndex.columnLength,\n      );\n\n      self.draw();\n    });\n  };\n  self.cut = function (event) {\n    if (self.dispatchEvent('cut', { NativeEvent: event })) {\n      return;\n    }\n\n    // Expecting instance of `ClipboardEvent` with `clipboardData` attribute\n    if (!self.hasFocus || !event.clipboardData) {\n      return;\n    }\n\n    self.copySelectedCellsToClipboard(event.clipboardData);\n\n    const affectedCells = self.clearSelectedCells();\n    const apiCompatibleCells = affectedCells.map((cell) => {\n      return [\n        cell.viewRowIndex,\n        cell.viewColumnIndex,\n        cell.boundRowIndex,\n        cell.boundColumnIndex,\n      ];\n    });\n\n    self.dispatchEvent('aftercut', {\n      cells: apiCompatibleCells,\n    });\n\n    requestAnimationFrame(() => self.draw());\n    event.preventDefault();\n  };\n  self.copy = function (event) {\n    if (self.dispatchEvent('copy', { NativeEvent: event })) {\n      return;\n    }\n\n    // Expecting instance of `ClipboardEvent` with `clipboardData` attribute\n    if (!self.hasFocus || !event.clipboardData) {\n      return;\n    }\n\n    self.copySelectedCellsToClipboard(event.clipboardData);\n\n    event.preventDefault();\n  };\n  self.selectionHandleMove = function (e) {\n    if (!self.movingSelectionHandle) {\n      return;\n    }\n\n    const clippingRect = self.getClippingRect(e);\n    const rowIndex = self.currentCell.rowIndex;\n    const columnIndex = self.currentCell.columnIndex;\n    const isInSelectionBounds =\n      rowIndex >= -1 &&\n      columnIndex >= -1 &&\n      self.fillOverlay.selection.left <= columnIndex &&\n      self.fillOverlay.selection.right >= columnIndex &&\n      self.fillOverlay.selection.top <= rowIndex &&\n      self.fillOverlay.selection.bottom >= rowIndex;\n\n    self.fillOverlay.minX = clippingRect.x;\n    self.fillOverlay.minY = clippingRect.y;\n    self.fillOverlay.x = Math.max(clippingRect.x, e.clientX);\n    self.fillOverlay.y = Math.max(clippingRect.y, e.clientY);\n\n    // If we are in the selection bounds, allow user to change directions.\n    if (isInSelectionBounds) {\n      self.fillOverlay.lastInBoundsLocation = {\n        x: e.clientX,\n        y: e.clientY,\n      };\n    } else if (\n      self.fillOverlay.lastInBoundsLocation ||\n      !self.fillOverlay.direction\n    ) {\n      const lastInBoundsLocation = self.fillOverlay.lastInBoundsLocation;\n      self.fillOverlay.lastInBoundsLocation = undefined;\n\n      const x = lastInBoundsLocation\n        ? lastInBoundsLocation.x\n        : self.fillOverlay.handle.x;\n      const y = lastInBoundsLocation\n        ? lastInBoundsLocation.y\n        : self.fillOverlay.handle.y;\n      const dx = Math.abs(e.clientX - x);\n      const dy = Math.abs(e.clientY - y);\n\n      if (dx > 5 || dy > 5) {\n        self.fillOverlay.direction = dx > dy ? 'x' : 'y';\n      }\n    }\n\n    if (rowIndex >= 0) {\n      self.fillOverlay.rowIndex = rowIndex;\n    }\n    if (columnIndex >= 0) {\n      self.fillOverlay.columnIndex = columnIndex;\n      if (rowIndex === -1 && self.visibleRows.length) {\n        self.fillOverlay.rowIndex = self.visibleRows[0];\n      }\n    }\n\n    if (rowIndex >= -1 && columnIndex >= -1) {\n      self.fillOverlay.snap = self.currentCell;\n    } else {\n      self.fillOverlay.snap = undefined;\n    }\n  };\n  self.stopSelectionHandleMove = function (e) {\n    if (!self.fillOverlay.handle) {\n      return false;\n    }\n\n    self.ignoreNextClick = true;\n\n    window.removeEventListener('mousemove', self.selectionHandleMove, false);\n    window.removeEventListener('mouseup', self.stopSelectionHandleMove, false);\n\n    const overlay = self.fillOverlay;\n    const selectionIndex = self.getSelectionIndex();\n    const bounds = overlay.selection;\n    if (!selectionIndex) return;\n\n    self.movingSelectionHandle = undefined;\n    self.fillOverlay = {};\n\n    if (overlay.rowIndex >= 0 && overlay.columnIndex >= 0) {\n      const boundsOld = { ...bounds };\n      const isVertical = overlay.direction === 'y';\n      const isHorizontal = overlay.direction === 'x';\n\n      let startRow,\n        rowLength,\n        startColumn,\n        columnLength,\n        reverseVertically = false,\n        reverseHorizontally = false;\n\n      if (isVertical) {\n        if (overlay.rowIndex < bounds.top) {\n          bounds.top = overlay.rowIndex;\n          reverseVertically = true;\n        } else if (overlay.rowIndex > bounds.bottom) {\n          bounds.bottom = overlay.rowIndex;\n        }\n\n        startRow =\n          bounds.top < boundsOld.top ? bounds.top : boundsOld.bottom + 1;\n        rowLength =\n          bounds.top < boundsOld.top\n            ? boundsOld.top - bounds.top\n            : bounds.bottom - boundsOld.bottom;\n        startColumn = selectionIndex.column;\n        columnLength = selectionIndex.columnLength;\n      } else if (isHorizontal) {\n        if (overlay.columnIndex < bounds.left) {\n          bounds.left = overlay.columnIndex;\n          reverseHorizontally = true;\n        } else if (overlay.columnIndex > bounds.right) {\n          bounds.right = overlay.columnIndex;\n        }\n\n        startColumn =\n          bounds.left < boundsOld.left ? bounds.left : boundsOld.right + 1;\n        columnLength =\n          bounds.left < boundsOld.left\n            ? boundsOld.left - bounds.left\n            : bounds.right - boundsOld.right;\n        startRow = selectionIndex.row;\n        rowLength = selectionIndex.rowLength;\n      }\n\n      if (\n        bounds.left <= bounds.right &&\n        bounds.top <= bounds.bottom &&\n        (bounds.left < boundsOld.left ||\n          bounds.top < boundsOld.top ||\n          bounds.right > boundsOld.right ||\n          bounds.bottom > boundsOld.bottom)\n      ) {\n        const schema = self.getSchema();\n        const rows = [];\n\n        for (\n          let rowIndex = 0;\n          rowIndex < Math.min(rowLength, selectionIndex.rowLength);\n          rowIndex++\n        ) {\n          const rowData = self.viewData[selectionIndex.row + rowIndex];\n\n          rows[rowIndex] = [];\n\n          for (\n            let columnIndex = 0;\n            columnIndex < Math.min(columnLength, selectionIndex.columnLength);\n            columnIndex++\n          ) {\n            const column = schema[selectionIndex.column + columnIndex];\n            if (!column) continue;\n\n            const cellData = rowData[column.name];\n\n            rows[rowIndex][columnIndex] = cellData;\n          }\n        }\n\n        self.insert({\n          rows: rows,\n          startRowIndex: startRow,\n          startColumnIndex: startColumn,\n          minRowsLength: rowLength,\n          minColumnsLength: columnLength,\n          reverseRows: reverseVertically,\n          reverseColumns: reverseHorizontally,\n          clearSelections: false,\n          alwaysFilling: true,\n          direction: isHorizontal ? 'horizontal' : 'vertical',\n        });\n\n        self.draw();\n      }\n    }\n\n    return true;\n  };\n  return;\n}\n","'use strict';\n\nconst isSupportedHtml = function (pasteValue) {\n  // We need to match new lines in the HTML, .* won't match new line characters.\n  // `s` regex modifier can't be used with `ecmaVersion === 2017`.\n  // As a workaround using [\\s\\S]*. Fix when we upgrade `ecmaVersion`.\n  const genericDiv = /(?:^(<meta[^>]*>)?[\\s\\S]*<div[^>]*>)/;\n  const genericSpan = /(?:^(<meta[^>]*>)?[\\s\\S]*<span[^>]*>)/;\n  const genericTable = /(?:^(<meta[^>]*>)?[\\s\\S]*<table[^>]*>)/; // Matches Google Sheets format clipboard data format too.\n  const excelTable = /(?:<!--StartFragment-->[\\s\\S]*<tr[^>]*>)/;\n  const excelTableRow = /(?:<!--StartFragment-->[\\s\\S]*<td[^>]*>)/;\n\n  return [\n    genericDiv,\n    genericTable,\n    genericSpan,\n    excelTable,\n    excelTableRow,\n  ].some((expression) => expression.test(pasteValue));\n};\n\n// Explanation of nodeType here: https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst IGNORE_NODETYPES = [8, 3]; // '#text' and '#comment'\n\nconst isHtmlTable = function (pasteValue) {\n  return /(?:<table[^>]*>)|(?:<tr[^]*>)/.test(pasteValue);\n};\n\nconst sanitizeElementData = function (element) {\n  // It is not entirely clear if this check on nodeType is required.\n  let elementData = element.nodeType === 1 ? element.innerText : element.data;\n\n  return String(elementData).replace(/\\s+/g, ' ').trim();\n};\n\nconst parseHtmlText = function (data) {\n  const doc = new DOMParser().parseFromString(data, 'text/html');\n  const element = doc.querySelector('div') || doc.querySelector('span');\n  const elementData = sanitizeElementData(element);\n\n  return elementData\n    .split('\\n')\n    .map((item) => item.split('\\t').map((value) => ({ value: [{ value }] })));\n};\n\nconst parseHtmlTable = function (data) {\n  const doc = new DOMParser().parseFromString(data, 'text/html');\n  const trs = doc.querySelectorAll('table tr');\n  const rows = [];\n\n  for (const tr of trs) {\n    const row = [];\n\n    for (const childNode of tr.childNodes) {\n      if (IGNORE_NODETYPES.includes(childNode.nodeType)) continue;\n\n      const col = { value: [] };\n      const value = sanitizeElementData(childNode);\n\n      if (value) col.value.push({ value });\n\n      row.push(col);\n    }\n\n    rows.push(row);\n  }\n\n  return rows;\n};\n\nconst parseText = function (data) {\n  return data\n    .split('\\n')\n    .map((item) => item.split('\\t').map((value) => ({ value: [{ value }] })));\n};\n\nconst parseData = function (data, mimeType) {\n  if (mimeType === 'text/html' && isHtmlTable(data)) {\n    return parseHtmlTable(data);\n  } else if (mimeType === 'text/html') {\n    return parseHtmlText(data);\n  }\n\n  // Default data format is string, so split on new line,\n  // and then enclose in an array (a row with one cell):\n  return parseText(data);\n};\n\nconst htmlSafe = function (value) {\n  if (typeof value !== 'string') return value;\n\n  return value.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n};\n\nconst createTextString = function (selectedData, isNeat) {\n  // Selected like [[0, 1], [0, 1]] of [[0, 3]] is neat; Selected like [[0, 1], [1, 2]] is untidy.\n  // If not isNeat we just return a simple string of concatenated values.\n  if (!isNeat)\n    return selectedData.map((row) => Object.values(row).join('')).join('');\n\n  // If isNeat, we can create tab separated mutti-line text.\n  return selectedData.map((row) => Object.values(row).join('\\t')).join('\\n');\n};\n\nconst createHTMLString = function (selectedData, isNeat) {\n  if (!isNeat) return createTextString(selectedData, isNeat);\n\n  // If isNeat, we can create a HTML table with the selected data.\n  let htmlString = '<table>';\n  htmlString += selectedData\n    .map(\n      (row) =>\n        '<tr>' +\n        Object.values(row)\n          .map((value) => ['<td>', htmlSafe(value), '</td>'].join(''))\n          .join('') +\n        '</tr>',\n    )\n    .join('');\n  htmlString += '</table>';\n\n  return htmlString;\n};\n\nexport {\n  createTextString,\n  createHTMLString,\n  isSupportedHtml,\n  htmlSafe,\n  parseData,\n  parseHtmlTable,\n  parseHtmlText,\n  parseText,\n  sanitizeElementData,\n};\n","'use strict';\n\n/**\n * Merge a new hidden row range into existed ranges array\n * @param {any[]} hiddenRowRanges tuples: Array<[bgeinRowIndex, endRowIndex]>\n * @param {number[]} newRange tuple: [beginRowIndex, endRowIndex]\n * @returns {boolean}\n */\nconst mergeHiddenRowRanges = function (hiddenRowRanges, newRange) {\n  const [beginRowIndex, endRowIndex] = newRange;\n  if (endRowIndex < beginRowIndex) return false;\n  let inserted = false;\n  for (let i = 0; i < hiddenRowRanges.length; i++) {\n    const range = hiddenRowRanges[i];\n    if (beginRowIndex > range[1] + 1) continue;\n    if (beginRowIndex <= range[0] && endRowIndex >= range[0]) {\n      hiddenRowRanges[i] = [beginRowIndex, Math.max(endRowIndex, range[1])];\n      inserted = true;\n      break;\n    }\n    if (beginRowIndex >= range[0]) {\n      hiddenRowRanges[i] = [range[0], Math.max(endRowIndex, range[1])];\n      inserted = true;\n      break;\n    }\n  }\n  if (!inserted) hiddenRowRanges.push([beginRowIndex, endRowIndex]);\n  // merge intersections after sorting ranges\n  hiddenRowRanges.sort((a, b) => a[0] - b[0]);\n  for (let i = 0; i < hiddenRowRanges.length - 1; i++) {\n    const range = hiddenRowRanges[i];\n    const nextRange = hiddenRowRanges[i + 1];\n    if (nextRange[0] <= range[1] + 1) {\n      hiddenRowRanges[i] = [range[0], Math.max(range[1], nextRange[1])];\n      hiddenRowRanges.splice(i + 1, 1);\n      i--;\n    }\n  }\n  return true;\n};\n\nexport { mergeHiddenRowRanges };\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals HTMLElement: false, Reflect: false, define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport { createHTMLString, createTextString } from './events/util';\n\nexport default function (self, ctor) {\n  self.scale = 1;\n  self.orders = {\n    rows: [],\n    columns: [],\n  };\n  self.appliedInlineStyles = {};\n  self.cellGridAttributes = {};\n  self.treeGridAttributes = {};\n  self.visibleRowHeights = [];\n  self.hasFocus = false;\n  self.activeCell = {\n    columnIndex: 0,\n    rowIndex: 0,\n  };\n  self.innerHTML = '';\n  self.storageName = 'canvasDataGrid';\n  self.invalidSearchExpClass = 'canvas-datagrid-invalid-search-regExp';\n  self.localStyleLibraryStorageKey = 'canvas-datagrid-user-style-library';\n  self.dataType = 'application/x-canvas-datagrid';\n  self.orderBy = null;\n  self.orderDirection = 'asc';\n  self.orderings = {\n    columns: [],\n    add: function (orderBy, orderDirection, sortFunction) {\n      self.orderings.columns = self.orderings.columns.filter(function (col) {\n        return col.orderBy !== orderBy;\n      });\n      self.orderings.columns.push({\n        orderBy: orderBy,\n        orderDirection: orderDirection,\n        sortFunction: sortFunction,\n      });\n    },\n    sort: function () {\n      console.warn(\n        'grid.orderings.sort has been deprecated. Please use grid.refresh().',\n      );\n\n      self.orderings.columns.forEach(function (col) {\n        self.viewData.sort(col.sortFunction(col.orderBy, col.orderDirection));\n      });\n    },\n  };\n  self.columnFilters = {};\n  self.filters = {};\n  self.frozenRow = 0;\n  self.frozenColumn = 0;\n  self.ellipsisCache = {};\n  self.scrollCache = { x: [], y: [] };\n  self.scrollBox = {};\n  self.visibleRows = [];\n  self.visibleCells = [];\n  /**\n   * Each item of this  array contains these properties:\n   * - `x`, `y`, `x2`, `y2`\n   * - `orderIndex0`, `orderIndex1`: The closed interval of the hiding rows/columns.\n   * - `dir`: The directon of the unhide indicator. 'l' and 'r' for columns, 't' and 'b' for rows\n   */\n  self.visibleUnhideIndicators = [];\n  /**\n   * Each item is a tuple conatins two numbers:\n   * its type difination: Array<[beginRowIndex, endRowIndex]>\n   * Each tuple represents a closed Interval\n   */\n  self.hiddenRowRanges = [];\n  /**\n   * This array stored all groups information with context for drawing,\n   * it is generated by drawing functions,\n   * and be used for searching groups when users operate on the spreadsheet\n   * Each item of this array contains these properties:\n   * - `type`: its available values: 'c' and 'r'. indicates the type of this item, 'c' for column group\n   *           and 'r' for row group.\n   * - `x`,`y`: the left-top point of this group's rendering area.\n   * - `x2`, `y2`: the right-bottom of this group's rendering area.\n   * - `collapsed`: this value indicates the collapsed status of this group.\n   * - `from`, `to`: The column index range of this group (We use this value for searching the group)\n   * - `row`: The row index for column groups (We use this value for searching the group)\n   */\n  self.visibleGroups = [];\n  self.sizes = {\n    rows: {},\n    columns: {},\n    trees: {},\n  };\n  self.fillOverlay = {};\n  self.filterable = {\n    rows: [],\n    columns: [],\n  };\n  self.selectedFilterButton = {\n    columnIndex: -1,\n    rowIndex: -1,\n  };\n  self.cellTree = {\n    rows: [],\n    columns: {},\n    tempSchema: {},\n    rowTreeColIndex: 0,\n    columnTreeRowStartIndex: 0,\n    columnTreeRowEndIndex: 0,\n    origin: {\n      rows: [],\n      columns: {},\n    },\n  };\n  self.hovers = {};\n  self.attributes = {};\n  self.style = {};\n  self.formatters = {};\n  self.sorters = {};\n  self.parsers = {};\n  self.schemaHashes = {};\n  self.events = {};\n  self.changes = [];\n  self.scrollIndexTop = 0;\n  self.scrollPixelTop = 0;\n  self.scrollIndexLeft = 0;\n  self.scrollPixelLeft = 0;\n  self.childGrids = {};\n  self.openChildren = {};\n\n  /**\n   * Array for grouped columns\n   * Each item in this array is an array and it represents some grouping in one row\n   * A grouping descriptor has three properties:\n   * - `from`: The column index of the first column\n   * - `to`: The column index of the last column\n   * - `collapsed`: Is this group be collapsed\n   * @example [[{ from: 1, to: 2, collapsed: false }]]\n   */\n  self.groupedColumns = [];\n\n  /**\n   * Array for grouped rows\n   * Each item in this array is an array and it represents some grouping in one column\n   * A grouping descriptor has three properties:\n   * - `from`: The row index of the first row\n   * - `to`: The row index of the last row\n   * - `collapsed`: Is this group be collapsed\n   * @example [[{ from: 1, to: 2, collapsed: false }]]\n   */\n  self.groupedRows = [];\n\n  self.scrollModes = [\n    'vertical-scroll-box',\n    'vertical-scroll-top',\n    'vertical-scroll-bottom',\n    'horizontal-scroll-box',\n    'horizontal-scroll-right',\n    'horizontal-scroll-left',\n  ];\n  self.componentL1Events = {};\n  self.eventNames = [\n    'afterdraw',\n    'afterrendercell',\n    'afterrenderfilterbutton',\n    'aftercreategroup',\n    'attributechanged',\n    'beforebeginedit',\n    'beforecreatecellgrid',\n    'beforedraw',\n    'beforeendedit',\n    'beforerendercell',\n    'beforerendercellgrid',\n    'beforerenderfilterbutton',\n    'beginedit',\n    'cellmouseout',\n    'cellmouseover',\n    'click',\n    'collapsetree',\n    'columnhide',\n    'columnunhide',\n    'contextmenu',\n    'copy',\n    'datachanged',\n    'dblclick',\n    'endedit',\n    'expandtree',\n    'formatcellvalue',\n    'keydown',\n    'keypress',\n    'keyup',\n    'mousedown',\n    'mousemove',\n    'mouseup',\n    'newrow',\n    'ordercolumn',\n    'rendercell',\n    'rendercellgrid',\n    'renderorderbyarrow',\n    'rendertext',\n    'rendertreearrow',\n    'reorder',\n    'reordering',\n    'resize',\n    'resizecolumn',\n    'resizerow',\n    'schemachanged',\n    'scroll',\n    'selectionchanged',\n    'stylechanged',\n    'touchcancel',\n    'touchend',\n    'touchmove',\n    'touchstart',\n    'wheel',\n  ];\n  self.mouse = { x: 0, y: 0 };\n\n  self.getBoundRowIndexFromViewRowIndex = function (viewRowIndex) {\n    if (self.boundRowIndexMap && self.boundRowIndexMap.has(viewRowIndex)) {\n      return self.boundRowIndexMap.get(viewRowIndex);\n    }\n\n    return undefined;\n  };\n  self.getBoundColumnIndexFromViewColumnIndex = function (viewColumnIndex) {\n    return self.orders.columns[viewColumnIndex];\n  };\n  /**\n   * Get the height of the area about column groups for rendering and handling events.\n   */\n  self.getColumnGroupAreaHeight = function () {\n    if (!self.attributes.allowGroupingColumns) {\n      return 0;\n    }\n    const groups = self.groupedColumns.length;\n    const base = self.style.columnGroupRowHeight * self.scale;\n    return base * groups;\n  };\n  /**\n   * Get the width of the area about row groups for rendering and handling events.\n   */\n  self.getRowGroupAreaWidth = function () {\n    if (!self.attributes.allowGroupingRows) {\n      return 0;\n    }\n    const groups = self.groupedRows.length;\n    const base = self.style.rowGroupColumnWidth * self.scale;\n    return base * groups;\n  };\n  self.getCollapsedColumnGroups = function () {\n    const result = [];\n    for (let rowIndex = 0; rowIndex < self.groupedColumns.length; rowIndex++) {\n      const groups = self.groupedColumns[rowIndex];\n      for (let groupIndex = 0; groupIndex < groups.length; groupIndex++) {\n        const group = groups[groupIndex];\n        if (group.collapsed) result.push(group);\n      }\n    }\n    return result;\n  };\n  self.getCollapsedRowGroups = function () {\n    const result = [];\n    for (let rowIndex = 0; rowIndex < self.groupedRows.length; rowIndex++) {\n      const groups = self.groupedRows[rowIndex];\n      for (let groupIndex = 0; groupIndex < groups.length; groupIndex++) {\n        const group = groups[groupIndex];\n        if (group.collapsed) result.push(group);\n      }\n    }\n    return result;\n  };\n  /**\n   * Toggle the collapse status of a group (expanded/collapsed)\n   * @param {{type:string,from:number,to:number}} group\n   */\n  self.toggleGroup = function (group) {\n    if (group.type === 'c') {\n      const { from, to } = group;\n      /** @type {{from:number,to:number,collapsed:boolean}} */\n      let matchedGroup;\n      /** @type {Array<Array<{from:number,to:number,collapsed:boolean}>>} */\n      const allGroups = self.groupedColumns;\n      for (let i = 0; i < allGroups.length; i++) {\n        const groups = allGroups[i];\n        for (let gi = 0; gi < groups.length; gi++) {\n          const group = groups[gi];\n          if (group.from === from && group.to === to) {\n            matchedGroup = group;\n            break;\n          }\n        }\n        if (matchedGroup) break;\n      }\n      if (!matchedGroup) return;\n      const nextCollapsed = !matchedGroup.collapsed;\n      matchedGroup.collapsed = nextCollapsed;\n      return true;\n    }\n    if (group.type === 'r') {\n      const { from, to } = group;\n      /** @type {{from:number,to:number,collapsed:boolean}} */\n      let matchedGroup;\n      /** @type {Array<Array<{from:number,to:number,collapsed:boolean}>>} */\n      const allGroups = self.groupedRows;\n      for (let i = 0; i < allGroups.length; i++) {\n        const groups = allGroups[i];\n        for (let gi = 0; gi < groups.length; gi++) {\n          const group = groups[gi];\n          if (group.from === from && group.to === to) {\n            matchedGroup = group;\n            break;\n          }\n        }\n        if (matchedGroup) break;\n      }\n      if (!matchedGroup) return;\n      const nextCollapsed = !matchedGroup.collapsed;\n      matchedGroup.collapsed = nextCollapsed;\n      return true;\n    }\n    return false;\n  };\n  self.isNewGroupRangeValid = function (groupsArray, from, to) {\n    for (let i = 0; i < groupsArray.length; i++) {\n      const groups = groupsArray[i];\n      for (let gIndex = 0; gIndex < groups.length; gIndex++) {\n        const group = groups[gIndex];\n        if (from === group.to + 1) return false;\n        if (from > group.to) continue;\n\n        if (from === group.from) {\n          if (to === group.to) return false;\n          if (to > group.to) return true;\n          break; // check smaller range\n        }\n        if (from > group.from) {\n          if (to > group.to) return false;\n          break; // check smaller range\n        }\n        if (to < group.to) return false;\n        return true;\n      }\n    }\n    return true;\n  };\n  self.getColumnHeaderCellHeight = function () {\n    if (!self.attributes.showColumnHeaders) {\n      return 0;\n    }\n    return (\n      (self.sizes.rows[-1] || self.style.columnHeaderCellHeight) * self.scale\n    );\n  };\n  self.getRowHeaderCellWidth = function () {\n    if (!self.attributes.showRowHeaders) {\n      return 0;\n    }\n    return (\n      (self.sizes.columns[-1] || self.style.rowHeaderCellWidth) * self.scale\n    );\n  };\n  self.setStorageData = function () {\n    if (!self.attributes.saveAppearance || !self.attributes.name) {\n      return;\n    }\n    var visibility = {};\n    self.getSchema().forEach(function (column) {\n      visibility[column.name] = !column.hidden;\n    });\n    localStorage.setItem(\n      self.storageName + '-' + self.attributes.name,\n      JSON.stringify({\n        sizes: {\n          rows: self.sizes.rows,\n          columns: self.sizes.columns,\n        },\n        orders: {\n          rows: self.orders.rows,\n          columns: self.orders.columns,\n        },\n        orderBy: self.orderBy,\n        orderDirection: self.orderDirection,\n        visibility: visibility,\n      }),\n    );\n  };\n  self.getSchema = function () {\n    return self.schema || self.tempSchema || [];\n  };\n  function fillArray(low, high) {\n    var i = [],\n      x;\n    for (x = low; x <= high; x += 1) {\n      i[x] = x;\n    }\n    return i;\n  }\n  self.createColumnOrders = function () {\n    var s = self.getSchema();\n    self.orders.columns = fillArray(0, s.length - 1);\n  };\n  self.createRowOrders = function () {\n    self.orders.rows = fillArray(0, self.originalData.length - 1);\n  };\n  self.getVisibleSchema = function () {\n    return self.getSchema().filter(function (col) {\n      return !col.hidden;\n    });\n  };\n  self.applyDefaultValue = function (row, header, rowIndex) {\n    var d = header.defaultValue || '';\n    if (typeof d === 'function') {\n      d = d.apply(self.intf, [header, rowIndex]);\n    }\n    row[header.name] = d;\n  };\n  self.createNewRowData = function () {\n    self.newRow = {};\n\n    // The third argument of applyDefaultValue is the row index\n    // of the row for which to apply the default value. In this\n    // case, we're creating a new row but not yet appending it\n    // to self.originalData, so no row index exists\n    const newRowIndex = undefined;\n\n    self.getSchema().forEach(function forEachHeader(header) {\n      self.applyDefaultValue(self.newRow, header, newRowIndex);\n    });\n  };\n  self.getSchemaNameHash = function (key) {\n    var n = 0;\n    while (self.schemaHashes[key]) {\n      n += 1;\n      key = key + n;\n    }\n    return key;\n  };\n  self.filter = function (type) {\n    var f = self.filters[type];\n    if (!f && type !== undefined) {\n      console.warn(\n        'Cannot find filter for type %s, falling back to substring match.',\n        type,\n      );\n      f = self.filters.string;\n    }\n    return f;\n  };\n  self.hasActiveFilters = function () {\n    return self.columnFilters && Object.keys(self.columnFilters).length > 0;\n  };\n  self.hasCollapsedRowGroup = function () {\n    for (let i = 0; i < self.groupedRows.length; i++) {\n      const groups = self.groupedRows[i];\n      for (let j = 0; j < groups.length; j++) {\n        const g = groups[j];\n        if (g.collapsed) return true;\n      }\n    }\n    return false;\n  };\n  self.getFilteredAndSortedViewData = function (originalData) {\n    // We make a copy of originalData here in order be able to\n    // filter and sort rows without modifying the original array.\n    // Each row is turned into a (row, rowIndex) tuple\n    // so that when we apply filters, we can refer back to the\n    // row's original row number in originalData. This becomes\n    // useful when emitting cell events.\n    let newViewData = originalData.map((row, originalRowIndex) => [\n      row,\n      originalRowIndex,\n    ]);\n\n    // Remove hidden rows here. So we can keep the bound indexes correct\n    if (self.hiddenRowRanges.length > 0) {\n      const ranges = self.hiddenRowRanges.sort((a, b) => b[1] - a[1]);\n      for (let i = 0; i < ranges.length; i++) {\n        const [beginRowIndex, endRowIndex] = ranges[i];\n        const countOfRows = endRowIndex - beginRowIndex + 1;\n        newViewData.splice(beginRowIndex, countOfRows);\n      }\n    }\n\n    // Apply filtering\n    for (const [headerName, filterText] of Object.entries(self.columnFilters)) {\n      const header = self.getHeaderByName(headerName);\n\n      if (!header) {\n        continue;\n      }\n\n      const currentFilterFunction =\n        header.filter || self.filter(header.type || 'string');\n\n      newViewData = newViewData.filter(function ([row, originalRowIndex]) {\n        if (\n          self.attributes.allowFreezingRows &&\n          !self.attributes.filterFrozenRows &&\n          originalRowIndex < self.frozenRow\n        )\n          return true;\n\n        return currentFilterFunction(row[headerName], filterText);\n      });\n    }\n\n    //#region Hide rows from collapsed group\n    /** @type {number[][]} */\n    let collapsedGroups = [];\n    for (let i = 0; i < self.groupedRows.length; i++) {\n      const rows = self.groupedRows[i];\n      for (let j = 0; j < rows.length; j++) {\n        const r = rows[j];\n        if (!r.collapsed) continue;\n        collapsedGroups.push([r.from, r.to]);\n      }\n    }\n    if (collapsedGroups.length > 0) {\n      //#region merge groups\n      collapsedGroups.sort((a, b) => a[0] - b[0]);\n      let newLen = 0;\n      const len = collapsedGroups.length;\n      for (let i = 0; i < len; i++) {\n        const r = collapsedGroups[i];\n        if (i === len - 1) {\n          collapsedGroups[newLen++] = r;\n          break;\n        }\n        const to = r[1];\n        const [from2, to2] = collapsedGroups[i + 1];\n        if (from2 > to + 1) {\n          collapsedGroups[newLen++] = r;\n          continue;\n        }\n        collapsedGroups[i + 1] = r;\n        if (to2 > to) collapsedGroups[i + 1][1] = to2;\n      }\n      collapsedGroups = collapsedGroups.slice(0, newLen);\n      //#endregion merge groups\n\n      //#region omit rows by groups\n      let g = collapsedGroups.shift();\n      for (let start = 0; start < newViewData.length; start++) {\n        const it = newViewData[start][1];\n        if (it < g[0]) continue;\n        let end = start + 1;\n        for (; end < newViewData.length; end++) {\n          const it2 = newViewData[end][1];\n          if (it2 > g[1]) break;\n        }\n        newViewData.splice(start, end - start);\n        g = collapsedGroups.shift();\n        if (!g) break;\n        start--;\n      }\n      //#endregion omit rows by groups\n    }\n    //#endregion Hide rows from collapsed group\n\n    // Apply sorting\n    for (const column of self.orderings.columns) {\n      const sortFn = column.sortFunction(column.orderBy, column.orderDirection);\n\n      newViewData.sort(([rowA], [rowB, rowIndexB]) => {\n        if (\n          self.attributes.allowFreezingRows &&\n          !self.attributes.sortFrozenRows &&\n          rowIndexB < self.frozenRow\n        )\n          return 0;\n        return sortFn(rowA, rowB);\n      });\n    }\n\n    return {\n      viewData: newViewData.map(([row]) => row),\n      boundRowIndexMap: new Map(\n        newViewData.map(([_row, originalRowIndex], viewRowIndex) => [\n          viewRowIndex,\n          originalRowIndex,\n        ]),\n      ),\n    };\n  };\n  self.refresh = function () {\n    const { viewData, boundRowIndexMap } = self.getFilteredAndSortedViewData(\n      self.originalData,\n    );\n\n    self.viewData = viewData;\n    self.boundRowIndexMap = boundRowIndexMap;\n\n    self.resize();\n    self.draw(true);\n  };\n  self.getBestGuessDataType = function (columnName, data) {\n    var t,\n      x,\n      l = data.length;\n    for (x = 0; x < l; x += 1) {\n      if (\n        data[x] !== undefined &&\n        data[x] !== null &&\n        [null, undefined].indexOf(data[x][columnName]) !== -1\n      ) {\n        t = typeof data[x];\n        return t === 'object' ? 'string' : t;\n      }\n    }\n    return 'string';\n  };\n  self.drawChildGrids = function () {\n    Object.keys(self.childGrids).forEach(function (gridKey) {\n      self.childGrids[gridKey].draw();\n    });\n  };\n  self.resizeChildGrids = function () {\n    Object.keys(self.childGrids).forEach(function (gridKey) {\n      self.childGrids[gridKey].resize();\n    });\n  };\n  self.autoScrollZone = function (e, x, y, ctrl) {\n    var setTimer,\n      rowHeaderCellWidth = self.getRowHeaderCellWidth(),\n      columnHeaderCellHeight = self.getColumnHeaderCellHeight();\n    if (x !== -1) {\n      if (x > self.width - self.attributes.selectionScrollZone) {\n        self.scrollBox.scrollLeft += self.attributes.selectionScrollIncrement;\n        setTimer = true;\n      }\n      if (x - self.attributes.selectionScrollZone - rowHeaderCellWidth < 0) {\n        self.scrollBox.scrollLeft -= self.attributes.selectionScrollIncrement;\n        setTimer = true;\n      }\n    }\n    if (y !== -1) {\n      if (y > self.height - self.attributes.selectionScrollZone) {\n        self.scrollBox.scrollTop += self.attributes.selectionScrollIncrement;\n        setTimer = true;\n      }\n      if (\n        y - self.attributes.selectionScrollZone - columnHeaderCellHeight <\n        0\n      ) {\n        self.scrollBox.scrollTop -= self.attributes.selectionScrollIncrement;\n        setTimer = true;\n      }\n    }\n    if (\n      setTimer &&\n      !ctrl &&\n      self.currentCell &&\n      self.currentCell.columnIndex !== -1\n    ) {\n      self.scrollTimer = setTimeout(\n        self.mousemove,\n        self.attributes.scrollRepeatRate,\n        e,\n      );\n    }\n  };\n  self.validateColumn = function (c, s) {\n    if (!c.name) {\n      throw new Error('A column must contain at least a name.');\n    }\n    if (\n      s.filter(function (i) {\n        return i.name === c.name;\n      }).length > 0\n    ) {\n      throw new Error(\n        'A column with the name ' +\n          c.name +\n          ' already exists and cannot be added again.',\n      );\n    }\n    return true;\n  };\n  self.setDefaults = function (obj1, obj2, key, def) {\n    obj1[key] = obj2[key] === undefined ? def : obj2[key];\n  };\n  self.setAttributes = function () {\n    self.defaults.attributes.forEach(function eachAttribute(i) {\n      self.setDefaults(self.attributes, self.args, i[0], i[1]);\n    });\n  };\n  self.setStyle = function () {\n    self.defaults.styles.forEach(function eachStyle(i) {\n      self.setDefaults(self.style, self.args.style || {}, i[0], i[1]);\n    });\n  };\n  self.autosize = function (colName) {\n    self.getVisibleSchema().forEach(function (col, colIndex) {\n      if (col.name === colName || colName === undefined) {\n        self.sizes.columns[colIndex] = Math.max(\n          self.findColumnMaxTextLength(col.name),\n          self.style.minColumnWidth,\n        );\n      }\n    });\n    self.sizes.columns[-1] = self.findColumnMaxTextLength('cornerCell');\n  };\n  self.dispose = function () {\n    if (!self.isChildGrid && self.canvas && self.canvas.parentNode) {\n      self.canvas.parentNode.removeChild(self.canvas);\n    }\n    if (!self.isChildGrid) {\n      document.body.removeChild(self.controlInput);\n    }\n    self.eventParent.removeEventListener('mousedown', self.mousedown, false);\n    self.eventParent.removeEventListener('dblclick', self.dblclick, false);\n    self.eventParent.removeEventListener('click', self.click, false);\n    self.eventParent.removeEventListener('mousemove', self.mousemove);\n    self.eventParent.removeEventListener('wheel', self.scrollWheel, false);\n    self.canvas.removeEventListener(\n      'contextmenu',\n      self.contextmenuEvent,\n      false,\n    );\n    self.canvas.removeEventListener('copy', self.copy);\n    self.controlInput.removeEventListener('copy', self.copy);\n    self.controlInput.removeEventListener('cut', self.cut);\n    self.controlInput.removeEventListener('paste', self.paste);\n    self.controlInput.removeEventListener('keypress', self.keypress, false);\n    self.controlInput.removeEventListener('keyup', self.keyup, false);\n    self.controlInput.removeEventListener('keydown', self.keydown, false);\n    window.removeEventListener('mouseup', self.mouseup, false);\n    window.removeEventListener('mousemove', self.mousemove);\n    window.removeEventListener('resize', self.resize);\n    if (self.observer && self.observer.disconnect) {\n      self.observer.disconnect();\n    }\n  };\n  self.tryLoadStoredSettings = function () {\n    var s;\n    self.reloadStoredValues();\n    if (\n      self.storedSettings &&\n      typeof self.storedSettings.orders === 'object' &&\n      self.storedSettings.orders !== null\n    ) {\n      if (\n        self.storedSettings.orders.rows.length >= (self.viewData || []).length\n      ) {\n        self.orders.rows = self.storedSettings.orders.rows;\n      }\n      s = self.getSchema();\n      if (self.storedSettings.orders.columns.length === s.length) {\n        self.orders.columns = self.storedSettings.orders.columns;\n      }\n      self.orderBy =\n        self.storedSettings.orderBy === undefined\n          ? s[0].name\n          : self.storedSettings.orderBy;\n      self.orderDirection =\n        self.storedSettings.orderDirection === undefined\n          ? 'asc'\n          : self.storedSettings.orderDirection;\n      if (\n        self.storedSettings.orderBy !== undefined &&\n        self.getHeaderByName(self.orderBy) &&\n        self.orderDirection\n      ) {\n        self.order(self.orderBy, self.orderDirection);\n      }\n    }\n  };\n  self.toggleCollapseTree = function (rowIndex, columnIndex, type) {\n    let tempData = [];\n    let collapsedCount = 0;\n    if (\n      columnIndex == self.cellTree.rowTreeColIndex &&\n      (rowIndex > 0 || (rowIndex == 0 && self.cellTree.rows[0].icon))\n    ) {\n      let ctr = self.cellTree.rows;\n      switch (type) {\n        case 'Expand':\n          ctr[rowIndex].expand = true;\n          self.cellTree.origin.rows[ctr[rowIndex].index].expand = true;\n          break;\n\n        case 'Collapse':\n          ctr[rowIndex].expand = false;\n          self.cellTree.origin.rows[ctr[rowIndex].index].expand = false;\n          break;\n\n        default:\n          ctr[rowIndex].expand = !ctr[rowIndex].expand;\n          self.cellTree.origin.rows[ctr[rowIndex].index].expand =\n            ctr[rowIndex].expand;\n      }\n      for (\n        let ri = ctr[rowIndex].index + 1;\n        ri <= ctr[rowIndex].lastchild;\n        ri++\n      ) {\n        let orTree = self.cellTree.origin.rows[ri];\n        if (ctr[rowIndex].expand) {\n          orTree.hide = false;\n          if (orTree.icon && !orTree.expand) ri = orTree.lastchild;\n        } else {\n          orTree.hide = true;\n        }\n      }\n    } else if (self.cellTree.columns[rowIndex]) {\n      let ctc = self.cellTree.columns[rowIndex];\n\n      switch (type) {\n        case 'Expand':\n          ctc[columnIndex].expand = true;\n          break;\n\n        case 'Collapse':\n          ctc[columnIndex].expand = false;\n          break;\n\n        default:\n          ctc[columnIndex].expand = !ctc[columnIndex].expand;\n      }\n      for (\n        let ci = ctc[columnIndex].index + 1;\n        ci <= ctc[columnIndex].lastchild;\n        ci++\n      ) {\n        if (ctc[columnIndex].expand)\n          self.cellTree.tempSchema[ci].hidden = false;\n        else self.cellTree.tempSchema[ci].hidden = true;\n      }\n      let rc = 0,\n        _ri;\n\n      if (ctc[columnIndex].expand) {\n        while (rc < ctc[columnIndex].child) {\n          _ri = rowIndex + rc + 1;\n\n          for (\n            let _ci = ctc[columnIndex].index;\n            _ci <= ctc[columnIndex].lastchild;\n            _ci++\n          ) {\n            if (\n              self.cellTree.origin.columns[_ri] &&\n              self.cellTree.origin.columns[_ri][_ci].icon &&\n              !self.cellTree.origin.columns[_ri][_ci].expand\n            ) {\n              for (\n                let si = _ci + 1;\n                si <= self.cellTree.origin.columns[_ri][_ci].lastchild;\n                si++\n              ) {\n                self.cellTree.tempSchema[si].hidden = true;\n              }\n            }\n          }\n\n          rc++;\n        }\n      }\n    }\n    let otherData = {};\n    let collapsed = [];\n    self.cellTree.rows = [];\n    self.cellTree.columns = {};\n    for (let k in self.cellTree.origin.rows) {\n      let tempRow = [];\n      let tree = self.cellTree.origin.rows[k];\n      if (!tree.hide) {\n        let colTrees = [];\n        let collapsedColCount = 0;\n        if (k < self.cellTree.columnTreeRowStartIndex) {\n          tempData.push(self.originalData[k]);\n        } else {\n          if (k > self.cellTree.columnTreeRowEndIndex) {\n            otherData[k] = self.viewData[k];\n            collapsedCount++;\n          } else {\n            for (let l = 0; l < self.originalData[k].length; l++) {\n              if (!self.cellTree.tempSchema[l].hidden) {\n                if (l < self.cellTree.rowTreeColIndex) {\n                  if (!Object.prototype.hasOwnProperty.call(otherData, k))\n                    otherData[k] = [];\n                  otherData[k].push(self.viewData[k][l]);\n                }\n                tempRow.push(self.originalData[k][l]);\n                if (\n                  Object.prototype.hasOwnProperty.call(\n                    self.cellTree.origin.columns,\n                    k,\n                  )\n                )\n                  colTrees.push(self.cellTree.origin.columns[k][l]);\n              } else collapsedColCount++;\n            }\n            tempRow.push(...Array(collapsedColCount).fill(''));\n            if (colTrees.length) {\n              colTrees.push(\n                ...Array(collapsedColCount)\n                  .fill()\n                  .map(() => {\n                    return {};\n                  }),\n              );\n              self.cellTree.columns[k] = colTrees;\n            }\n            tempData.push(tempRow);\n          }\n        }\n        self.cellTree.rows.push(tree);\n      } else {\n        for (let l = 0; l < self.cellTree.rowTreeColIndex; l++) {\n          tempRow.push(self.viewData[k][l]);\n        }\n        otherData[k] = tempRow;\n        collapsed.push(Array(self.viewData[0].length).fill(''));\n        collapsedCount++;\n      }\n    }\n    if (collapsedCount) {\n      self.cellTree.rows.push(\n        ...Array(collapsedCount)\n          .fill()\n          .map((u, index) => {\n            return { index: self.cellTree.rows.length + index };\n          }),\n      );\n      tempData.push(...collapsed);\n    }\n    for (let k in otherData) {\n      if (k > self.cellTree.columnTreeRowEndIndex) tempData[k] = otherData[k];\n      else\n        for (let l in otherData[k]) {\n          tempData[k][l] = otherData[k][l];\n        }\n    }\n    self.viewData = tempData;\n  };\n  self.cellTreeExpandCollapse = function (rowIndex, columnIndex, type) {\n    if (\n      columnIndex == self.cellTree.rowTreeColIndex &&\n      (rowIndex > 0 || (rowIndex == 0 && self.cellTree.rows[0].icon))\n    ) {\n      const ctr = self.cellTree.rows;\n      switch (type) {\n        case 'Expand':\n          ctr[rowIndex].expand = true;\n          break;\n        case 'Collapse':\n          ctr[rowIndex].expand = false;\n          break;\n        default:\n          ctr[rowIndex].expand = !ctr[rowIndex].expand;\n      }\n      for (let ri = rowIndex + 1; ri <= ctr[rowIndex].lastchild; ri++) {\n        if (ctr[rowIndex].expand) {\n          ctr[ri].hide = false;\n          if (ctr[ri].icon && !ctr[ri].expand) ri = ctr[ri].lastchild;\n        } else {\n          ctr[ri].hide = true;\n        }\n      }\n    } else if (self.cellTree.columns[rowIndex]) {\n      const ctc = self.cellTree.columns[rowIndex];\n      switch (type) {\n        case 'Expand':\n          ctc[columnIndex].expand = true;\n          break;\n        case 'Collapse':\n          ctc[columnIndex].expand = false;\n          break;\n        default:\n          ctc[columnIndex].expand = !ctc[columnIndex].expand;\n      }\n\n      for (let ci = columnIndex + 1; ci <= ctc[columnIndex].lastchild; ci++) {\n        if (ctc[columnIndex].expand) self.tempSchema[ci].hidden = false;\n        else self.tempSchema[ci].hidden = true;\n      }\n\n      let rc = 0,\n        ri;\n      if (ctc[columnIndex].expand) {\n        while (rc < ctc[columnIndex].child) {\n          ri = rowIndex + rc + 1;\n          for (let ci = columnIndex; ci <= ctc[columnIndex].lastchild; ci++) {\n            if (\n              self.cellTree.columns[ri] &&\n              self.cellTree.columns[ri][ci].icon &&\n              !self.cellTree.columns[ri][ci].expand\n            ) {\n              for (\n                let si = ci + 1;\n                si <= self.cellTree.columns[ri][ci].lastchild;\n                si++\n              )\n                self.tempSchema[si].hidden = true;\n            }\n          }\n          rc++;\n        }\n      }\n    }\n  };\n\n  self.initCellTreeSettings = function () {\n    if (self.viewData === undefined) return;\n    if (self.attributes.rowTree.length > 0 && self.viewData.length > 0) {\n      self.cellTree.rows = Array(self.viewData.length)\n        .fill()\n        .map((u, index) => ({ index: index }));\n      self.cellTree.rowTreeColIndex = self.attributes.rowTreeColIndex;\n      let invalidRowTree = false;\n      for (let rt of self.attributes.rowTree) {\n        if (self.cellTree.rows.length <= rt.end) {\n          invalidRowTree = true;\n          break;\n        }\n\n        for (let ri = rt.begin; ri <= rt.end; ri++) {\n          if (ri == rt.begin) {\n            self.cellTree.rows[ri].icon = true;\n            self.cellTree.rows[ri].lastchild = rt.end;\n            self.cellTree.rows[ri].expand = true;\n            if (!self.cellTree.rows[ri].parentCount)\n              self.cellTree.rows[ri].parentCount = 0;\n          } else {\n            self.cellTree.rows[ri].hide = false;\n            self.cellTree.rows[ri].parentIndex = rt.begin;\n            if (self.cellTree.rows[ri] && self.cellTree.rows[ri].parentCount)\n              self.cellTree.rows[ri].parentCount += 1;\n            else self.cellTree.rows[ri].parentCount = 1;\n          }\n        }\n      }\n      if (invalidRowTree) self.cellTree.rows = {};\n    }\n    if (self.attributes.columnTree.length > 0 && self.viewData.length > 0) {\n      self.cellTree.columnTreeRowStartIndex =\n        self.attributes.columnTreeRowStartIndex;\n      self.cellTree.columnTreeRowEndIndex =\n        self.attributes.columnTreeRowEndIndex;\n      let dataColumnLength = Object.keys(self.viewData[0]).length;\n      let invalidColumnTree = false;\n      for (let ct of self.attributes.columnTree) {\n        if (dataColumnLength <= ct.end) {\n          invalidColumnTree = true;\n          break;\n        }\n\n        if (!self.cellTree.columns[ct.row])\n          self.cellTree.columns[ct.row] = Array(dataColumnLength)\n            .fill()\n            .map((u, index) => ({ index: index }));\n\n        for (let i = ct.begin; i <= ct.end; i++) {\n          const ctc = self.cellTree.columns[ct.row][i];\n          if (i == ct.begin) {\n            ctc.icon = true;\n            ctc.lastchild = ct.end;\n            ctc.length = ct.end - ct.begin;\n            ctc.expand = true;\n            if (ct.child) ctc.child = ct.child;\n            else ctc.child = 0;\n          }\n        }\n      }\n      self.cellTree.tempSchema = Array(dataColumnLength)\n        .fill()\n        .map(function () {\n          return { hidden: false };\n        });\n      if (invalidColumnTree) self.cellTree.columns = {};\n    }\n    self.cellTree.origin = {\n      rows: self.cellTree.rows,\n      columns: self.cellTree.columns,\n    };\n  };\n\n  self.getDomRoot = function () {\n    return self.shadowRoot ? self.shadowRoot.host : self.parentNode;\n  };\n  self.getFontName = function (fontStyle) {\n    return fontStyle.replace(/\\d+\\.?\\d*px/, '');\n  };\n  self.getFontHeight = function (fontStyle) {\n    return parseFloat(fontStyle);\n  };\n  self.parseStyleValue = function (key) {\n    if (/Font/.test(key)) {\n      self.style[key + 'Height'] = self.getFontHeight(self.style[key]);\n      self.style[key + 'Name'] = self.getFontName(self.style[key]);\n      return;\n    }\n    // when inheriting styles from already instantiated grids, don't parse already parsed values.\n    if (\n      key === 'moveOverlayBorderSegments' &&\n      typeof self.style[key] === 'string'\n    ) {\n      self.style[key] = self.style[key].split(',').map(function (i) {\n        return parseInt(i, 10);\n      });\n    }\n  };\n  self.initProp = function (propName) {\n    if (!self.args[propName]) {\n      return;\n    }\n    Object.keys(self.args[propName]).forEach(function (key) {\n      self[propName][key] = self.args[propName][key];\n    });\n  };\n  self.getStyleProperty = function (key) {\n    if (self.styleKeys.indexOf(key) === -1) {\n      return self.parentNodeStyle[key];\n    }\n    return self.style[key];\n  };\n  self.setStyleProperty = function (key, value, supressDrawAndEvent) {\n    var isDim =\n      [\n        'height',\n        'width',\n        'minHeight',\n        'minWidth',\n        'maxHeight',\n        'maxWidth',\n      ].indexOf(key) !== -1;\n    if (self.styleKeys.indexOf(key) === -1) {\n      self.parentNodeStyle[key] = value;\n    } else {\n      if (/-/.test(key)) {\n        key = self.dehyphenateProperty(key);\n      }\n      self.style[key] = value;\n      self.parseStyleValue(key);\n    }\n    if (isDim) {\n      self.resize();\n    }\n    if (!supressDrawAndEvent) {\n      self.draw(true);\n      self.dispatchEvent('stylechanged', { name: 'style', value: value });\n    }\n  };\n  self.reloadStoredValues = function () {\n    if (self.attributes.name && self.attributes.saveAppearance) {\n      try {\n        self.storedSettings = localStorage.getItem(\n          self.storageName + '-' + self.attributes.name,\n        );\n      } catch (e) {\n        console.warn('Error loading stored values. ' + e.message);\n        self.storedSettings = undefined;\n      }\n      if (self.storedSettings) {\n        try {\n          self.storedSettings = JSON.parse(self.storedSettings);\n        } catch (e) {\n          console.warn('could not read settings from localStore', e);\n          self.storedSettings = undefined;\n        }\n      }\n      if (self.storedSettings) {\n        if (\n          typeof self.storedSettings.sizes === 'object' &&\n          self.storedSettings.sizes !== null\n        ) {\n          self.sizes.rows = self.storedSettings.sizes.rows;\n          self.sizes.columns = self.storedSettings.sizes.columns;\n          ['trees', 'columns', 'rows'].forEach(function (i) {\n            if (!self.sizes[i]) {\n              self.sizes[i] = {};\n            }\n          });\n        }\n        if (typeof self.storedSettings.visibility === 'object') {\n          self.getSchema().forEach(function (column) {\n            if (\n              self.storedSettings.visibility &&\n              self.storedSettings.visibility[column.name] !== undefined\n            ) {\n              column.hidden = !self.storedSettings.visibility[column.name];\n            }\n          });\n        }\n      }\n    }\n  };\n  self.init = function () {\n    if (self.initialized) {\n      return;\n    }\n    function addStyleKeyIfNoneExists(key) {\n      if (self.styleKeys.indexOf(key) === -1) {\n        self.styleKeys.push(key);\n      }\n    }\n    var publicStyleKeyIntf = {};\n    self.setAttributes();\n    self.setStyle();\n    self.initScrollBox();\n    self.setDom();\n    self.nodeType = 'canvas-datagrid';\n    self.ie = /Trident/.test(window.navigator.userAgent);\n    self.edge = /Edge/.test(window.navigator.userAgent);\n    self.webKit = /WebKit/.test(window.navigator.userAgent);\n    self.moz = /Gecko/.test(window.navigator.userAgent);\n    self.mobile = /Mobile/i.test(window.navigator.userAgent);\n    self.blankValues = [undefined, null, ''];\n    self.cursorGrab = 'grab';\n    self.cursorGrabing = 'grabbing';\n    self.cursorGrab = self.webKit ? '-webkit-grab' : self.cursorGrab;\n    self.cursorGrabing = self.moz ? '-webkit-grabbing' : self.cursorGrabbing;\n    self.pointerLockPosition = { x: 0, y: 0 };\n    Object.keys(self.style).forEach(self.parseStyleValue);\n    self.intf.moveSelection = self.moveSelection;\n    self.intf.deleteSelectedData = self.deleteSelectedData;\n    self.intf.moveTo = self.moveTo;\n    self.intf.addEventListener = self.addEventListener;\n    self.intf.removeEventListener = self.removeEventListener;\n    self.intf.dispatchEvent = self.dispatchEvent;\n    /**\n     * Releases grid resources and removes grid elements.\n     * @memberof canvasDatagrid\n     * @name dispose\n     * @method\n     */\n    self.intf.dispose = self.dispose;\n    /**\n     * Appends the grid to another element later.  Not implemented.\n     * @memberof canvasDatagrid\n     * @name appendTo\n     * @method\n     * @param {number} el The element to append the grid to.\n     */\n    self.intf.appendTo = self.appendTo;\n    self.intf.getVisibleCellByIndex = self.getVisibleCellByIndex;\n    self.intf.filters = self.filters;\n    self.intf.sorters = self.sorters;\n    self.intf.autosize = self.autosize;\n    self.intf.beginEditAt = self.beginEditAt;\n    self.intf.endEdit = self.endEdit;\n    self.intf.setActiveCell = self.setActiveCell;\n    self.intf.forEachSelectedCell = self.forEachSelectedCell;\n    self.intf.scrollIntoView = self.scrollIntoView;\n    self.intf.clearChangeLog = self.clearChangeLog;\n    self.intf.gotoCell = self.gotoCell;\n    self.intf.gotoRow = self.gotoRow;\n    self.intf.addButton = self.addButton;\n    self.intf.toggleCellCollapseTree = self.toggleCellCollapseTree;\n    self.intf.expandCollapseCellTree = self.expandCollapseCellTree;\n    self.intf.getHeaderByName = self.getHeaderByName;\n    self.intf.findColumnScrollLeft = self.findColumnScrollLeft;\n    self.intf.findRowScrollTop = self.findRowScrollTop;\n    self.intf.fitColumnToValues = self.fitColumnToValues;\n    self.intf.findColumnMaxTextLength = self.findColumnMaxTextLength;\n    self.intf.disposeContextMenu = self.disposeContextMenu;\n    self.intf.getCellAt = self.getCellAt;\n    self.intf.groupColumns = self.groupColumns;\n    self.intf.groupRows = self.groupRows;\n    self.intf.removeGroupColumns = self.removeGroupColumns;\n    self.intf.removeGroupRows = self.removeGroupRows;\n    self.intf.toggleGroupColumns = self.toggleGroupColumns;\n    self.intf.toggleGroupRows = self.toggleGroupRows;\n    self.intf.getGroupsColumnBelongsTo = self.getGroupsColumnBelongsTo;\n    self.intf.getGroupsRowBelongsTo = self.getGroupsRowBelongsTo;\n    self.intf.isCellVisible = self.isCellVisible;\n    self.intf.isRowVisible = self.isRowVisible;\n    self.intf.isColumnVisible = self.isColumnVisible;\n    self.intf.order = self.order;\n    self.intf.draw = self.draw;\n    self.intf.refresh = self.refresh;\n    self.intf.isComponent = self.isComponent;\n    self.intf.selectArea = self.selectArea;\n    self.intf.clipElement = self.clipElement;\n    self.intf.getSchemaFromData = self.getSchemaFromData;\n    self.intf.setFilter = self.setFilter;\n    self.intf.parentGrid = self.parentGrid;\n    self.intf.toggleTree = self.toggleTree;\n    self.intf.expandTree = self.expandTree;\n    self.intf.collapseTree = self.collapseTree;\n    self.intf.canvas = self.canvas;\n    self.intf.context = self.ctx;\n    self.intf.insertRow = self.insertRow;\n    self.intf.deleteRow = self.deleteRow;\n    self.intf.addRow = self.addRow;\n    self.intf.insertColumn = self.insertColumn;\n    self.intf.deleteColumn = self.deleteColumn;\n    self.intf.addColumn = self.addColumn;\n    self.intf.getClippingRect = self.getClippingRect;\n    self.intf.setRowHeight = self.setRowHeight;\n    self.intf.setColumnWidth = self.setColumnWidth;\n    self.intf.resetColumnWidths = self.resetColumnWidths;\n    self.intf.resetRowHeights = self.resetRowHeights;\n    self.intf.resize = self.resize;\n    self.intf.selectColumn = self.selectColumn;\n    self.intf.selectRow = self.selectRow;\n    self.intf.selectAll = self.selectAll;\n    self.intf.selectNone = self.selectNone;\n    self.intf.drawChildGrids = self.drawChildGrids;\n    self.intf.assertPxColor = self.assertPxColor;\n    self.intf.clearPxColorAssertions = self.clearPxColorAssertions;\n    self.intf.integerToAlpha = self.integerToAlpha;\n    self.intf.copy = self.copy;\n    self.intf.cut = self.cut;\n    self.intf.paste = self.paste;\n    self.intf.setStyleProperty = self.setStyleProperty;\n    self.intf.hideColumns = self.hideColumns;\n    self.intf.unhideColumns = self.unhideColumns;\n    self.intf.hideRows = self.hideRows;\n    self.intf.unhideRows = self.unhideRows;\n    Object.defineProperty(self.intf, 'defaults', {\n      get: function () {\n        return {\n          styles: self.defaults.styles.reduce(function (a, i) {\n            a[i[0]] = i[1];\n            return a;\n          }, {}),\n          attributes: self.defaults.attributes.reduce(function (a, i) {\n            a[i[0]] = i[1];\n            return a;\n          }, {}),\n        };\n      },\n    });\n    self.styleKeys = Object.keys(self.intf.defaults.styles);\n    self.styleKeys\n      .map(function (i) {\n        return self.hyphenateProperty(i, false);\n      })\n      .forEach(addStyleKeyIfNoneExists);\n    self.styleKeys\n      .map(function (i) {\n        return self.hyphenateProperty(i, true);\n      })\n      .forEach(addStyleKeyIfNoneExists);\n    self.DOMStyles = window.getComputedStyle(document.body, null);\n    self.styleKeys.concat(Object.keys(self.DOMStyles)).forEach(function (key) {\n      // unless this line is here, Object.keys() will not work on <instance>.style\n      publicStyleKeyIntf[key] = undefined;\n      Object.defineProperty(publicStyleKeyIntf, key, {\n        get: function () {\n          return self.getStyleProperty(key);\n        },\n        set: function (value) {\n          if (self.initialized) {\n            self.appliedInlineStyles[key] = value;\n          }\n          self.setStyleProperty(key, value);\n        },\n      });\n    });\n    Object.defineProperty(self.intf, 'shadowRoot', {\n      get: function () {\n        return self.shadowRoot;\n      },\n    });\n    Object.defineProperty(self.intf, 'activeCell', {\n      get: function () {\n        return self.activeCell;\n      },\n    });\n    Object.defineProperty(self.intf, 'hasFocus', {\n      get: function () {\n        return self.hasFocus;\n      },\n    });\n    Object.defineProperty(self.intf, 'hasActiveFilters', {\n      get: function () {\n        return self.hasActiveFilters();\n      },\n    });\n    Object.defineProperty(self.intf, 'style', {\n      get: function () {\n        return publicStyleKeyIntf;\n      },\n      set: function (valueObject) {\n        Object.keys(valueObject).forEach(function (key) {\n          self.setStyleProperty(key, valueObject[key], true);\n        });\n        self.draw(true);\n        self.dispatchEvent('stylechanged', {\n          name: 'style',\n          value: valueObject,\n        });\n      },\n    });\n    Object.defineProperty(self.intf, 'attributes', { value: {} });\n    Object.keys(self.attributes).forEach(function (key) {\n      Object.defineProperty(self.intf.attributes, key, {\n        get: function () {\n          return self.attributes[key];\n        },\n        set: function (value) {\n          self.attributes[key] = value;\n          if (key === 'name') {\n            self.tryLoadStoredSettings();\n          }\n          if (\n            key === 'rowTree' ||\n            key === 'columnTree' ||\n            key === 'columnTreeRowEndIndex'\n          ) {\n            self.initCellTreeSettings();\n          }\n          self.draw(true);\n          self.dispatchEvent('attributechanged', {\n            name: key,\n            value: value[key],\n          });\n        },\n      });\n    });\n    self.filters.string = function (value, filterFor) {\n      if (filterFor === self.attributes.blanksText) {\n        return self.blankValues.includes(\n          value == null ? value : String(value).trim(),\n        );\n      }\n\n      value = String(value);\n      var filterRegExp,\n        regEnd = /\\/(i|g|m)*$/,\n        pattern = regEnd.exec(filterFor),\n        flags = pattern ? pattern[0].substring(1) : '',\n        flagLength = flags.length;\n      self.invalidFilterRegEx = undefined;\n      if (filterFor.substring(0, 1) === '/' && pattern) {\n        try {\n          filterRegExp = new RegExp(\n            filterFor.substring(1, filterFor.length - (flagLength + 1)),\n            flags,\n          );\n        } catch (e) {\n          self.invalidFilterRegEx = e;\n          return;\n        }\n        return filterRegExp.test(value);\n      }\n      return value.toString\n        ? value\n            .toString()\n            .toLocaleUpperCase()\n            .indexOf(filterFor.toLocaleUpperCase()) !== -1\n        : false;\n    };\n    self.filters.number = function (value, filterFor) {\n      if (filterFor === self.attributes.blanksText) {\n        return self.blankValues.includes(\n          value == null ? value : String(value).trim(),\n        );\n      }\n\n      if (!filterFor) {\n        return true;\n      }\n      return value === filterFor;\n    };\n    ['formatters', 'filters', 'sorters'].forEach(self.initProp);\n    self.applyComponentStyle(false, self.intf);\n    self.reloadStoredValues();\n    if (self.args.data) {\n      self.intf.data = self.args.data;\n    }\n    if (self.intf.innerText || self.intf.textContent) {\n      if (self.intf.dataType === 'application/x-canvas-datagrid') {\n        self.intf.dataType = 'application/json+x-canvas-datagrid';\n      }\n      self.intf.data = self.intf.innerText || self.intf.textContent;\n    }\n    if (self.args.schema) {\n      self.intf.schema = self.args.schema;\n    }\n    if (self.isChildGrid || !self.isComponent) {\n      requestAnimationFrame(function () {\n        self.resize(true);\n      });\n    } else {\n      self.resize(true);\n    }\n    self.initialized = true;\n    return self;\n  };\n  /**\n   * Removes focus from the grid.\n   * @memberof canvasDatagrid\n   * @name blur\n   * @method\n   */\n  self.intf.blur = function (e) {\n    self.hasFocus = false;\n  };\n  /**\n   * Focuses on the grid.\n   * @memberof canvasDatagrid\n   * @name focus\n   * @method\n   */\n  self.intf.focus = function () {\n    self.hasFocus = true;\n    self.controlInput.focus();\n  };\n  if (self.shadowRoot || self.isChildGrid) {\n    Object.defineProperty(self.intf, 'height', {\n      get: function () {\n        if (self.shadowRoot) {\n          return self.shadowRoot.height;\n        }\n        return self.parentNode.height;\n      },\n      set: function (value) {\n        if (self.shadowRoot) {\n          self.shadowRoot.height = value;\n        } else {\n          self.parentNode.height = value;\n        }\n        self.resize(true);\n      },\n    });\n    Object.defineProperty(self.intf, 'width', {\n      get: function () {\n        if (self.shadowRoot) {\n          return self.shadowRoot.width;\n        }\n        return self.parentNode.width;\n      },\n      set: function (value) {\n        if (self.shadowRoot) {\n          self.shadowRoot.width = value;\n        } else {\n          self.parentNode.width = value;\n        }\n        self.resize(true);\n      },\n    });\n    Object.defineProperty(self.intf, 'parentNode', {\n      get: function () {\n        return self.parentNode;\n      },\n      set: function (value) {\n        if (!self.isChildGrid) {\n          throw new TypeError(\n            'Cannot set property parentNode which has only a getter',\n          );\n        }\n        self.parentNode = value;\n      },\n    });\n  }\n  Object.defineProperty(self.intf, 'visibleRowHeights', {\n    get: function () {\n      return self.visibleRowHeights;\n    },\n  });\n  Object.defineProperty(self.intf, 'openChildren', {\n    get: function () {\n      return self.openChildren;\n    },\n  });\n  Object.defineProperty(self.intf, 'childGrids', {\n    get: function () {\n      return Object.keys(self.childGrids).map(function (gridId) {\n        return self.childGrids[gridId];\n      });\n    },\n  });\n  Object.defineProperty(self.intf, 'isChildGrid', {\n    get: function () {\n      return self.isChildGrid;\n    },\n  });\n  Object.defineProperty(self, 'cursor', {\n    get: function () {\n      return self.parentNodeStyle.cursor;\n    },\n    set: function (value) {\n      if (value === 'cell') {\n        value = 'default';\n      }\n      if (self.currentCursor !== value) {\n        self.parentNodeStyle.cursor = value;\n        self.currentCursor = value;\n      }\n    },\n  });\n  Object.defineProperty(self.intf, 'orderDirection', {\n    get: function () {\n      return self.orderDirection;\n    },\n    set: function (value) {\n      if (value !== 'desc') {\n        value = 'asc';\n      }\n      self.orderDirection = value;\n      self.order(self.orderBy, self.orderDirection);\n    },\n  });\n  Object.defineProperty(self.intf, 'orderBy', {\n    get: function () {\n      return self.orderBy;\n    },\n    set: function (value) {\n      if (\n        self.getSchema().find(function (col) {\n          return col.name === value;\n        }) === undefined\n      ) {\n        throw new Error('Cannot sort by unknown column name.');\n      }\n      self.orderBy = value;\n      self.order(self.orderBy, self.orderDirection);\n    },\n  });\n  if (self.isComponent) {\n    Object.defineProperty(self.intf, 'offsetHeight', {\n      get: function () {\n        return self.canvas.offsetHeight;\n      },\n    });\n    Object.defineProperty(self.intf, 'offsetWidth', {\n      get: function () {\n        return self.canvas.offsetWidth;\n      },\n    });\n  }\n  Object.defineProperty(self.intf, 'scrollHeight', {\n    get: function () {\n      return self.scrollBox.scrollHeight;\n    },\n  });\n  Object.defineProperty(self.intf, 'scrollWidth', {\n    get: function () {\n      return self.scrollBox.scrollWidth;\n    },\n  });\n  Object.defineProperty(self.intf, 'scrollTop', {\n    get: function () {\n      return self.scrollBox.scrollTop;\n    },\n    set: function (value) {\n      self.scrollBox.scrollTop = value;\n    },\n  });\n  Object.defineProperty(self.intf, 'scrollLeft', {\n    get: function () {\n      return self.scrollBox.scrollLeft;\n    },\n    set: function (value) {\n      self.scrollBox.scrollLeft = value;\n    },\n  });\n  Object.defineProperty(self.intf, 'sizes', {\n    get: function () {\n      return self.sizes;\n    },\n  });\n  Object.defineProperty(self.intf, 'parentDOMNode', {\n    get: function () {\n      return self.parentDOMNode;\n    },\n  });\n  Object.defineProperty(self.intf, 'input', {\n    get: function () {\n      return self.input;\n    },\n  });\n  Object.defineProperty(self.intf, 'controlInput', {\n    get: function () {\n      return self.controlInput;\n    },\n  });\n  Object.defineProperty(self.intf, 'currentCell', {\n    get: function () {\n      return self.currentCell;\n    },\n  });\n  Object.defineProperty(self.intf, 'visibleCells', {\n    get: function () {\n      return self.visibleCells;\n    },\n  });\n  Object.defineProperty(self.intf, 'visibleRows', {\n    get: function () {\n      return self.visibleRows;\n    },\n  });\n  let warnedForObsoleteSelections;\n  Object.defineProperty(self.intf, 'selections', {\n    get: function () {\n      if (!warnedForObsoleteSelections) {\n        console.warn(\n          `DeprecationWarning: The property 'selections' is deprecated due to performance issue. ` +\n            `And it will be removed in the future.` +\n            `Please use new property 'selectionList' instead. ` +\n            `Visit this link to get more information: ` +\n            `https://github.com/TonyGermaneri/canvas-datagrid/pull/498`,\n        );\n        warnedForObsoleteSelections = true;\n      }\n      return self.getObsoleteSelectionMatrix();\n    },\n  });\n  Object.defineProperty(self.intf, 'selectionList', {\n    get: function () {\n      return self.selections;\n    },\n  });\n  Object.defineProperty(self.intf, 'dragMode', {\n    get: function () {\n      return self.dragMode;\n    },\n  });\n  Object.defineProperty(self.intf, 'changes', {\n    get: function () {\n      return self.changes;\n    },\n  });\n  self.intf.formatters = self.formatters;\n  Object.defineProperty(self.intf, 'dataType', {\n    get: function () {\n      return self.dataType;\n    },\n    set: function (value) {\n      if (!self.parsers[value]) {\n        throw new Error('No parser for MIME type ' + value);\n      }\n      self.dataType = value;\n    },\n  });\n  self.eventNames.forEach(function (eventName) {\n    Object.defineProperty(self.intf, 'on' + eventName, {\n      get: function () {\n        return self.componentL1Events[eventName];\n      },\n      set: function (value) {\n        self.events[eventName] = [];\n        self.componentL1Events[eventName] = value;\n        if (!value) {\n          return;\n        }\n        self.addEventListener(eventName, value);\n      },\n    });\n  });\n  Object.defineProperty(self.intf, 'frozenRow', {\n    get: function () {\n      return self.frozenRow;\n    },\n    set: function (val) {\n      if (isNaN(val)) {\n        throw new TypeError('Expected value for frozenRow to be a number.');\n      }\n      if (self.visibleRows.length < val) {\n        throw new RangeError(\n          'Cannot set a value larger than the number of visible rows.',\n        );\n      }\n      self.frozenRow = val;\n    },\n  });\n  Object.defineProperty(self.intf, 'frozenColumn', {\n    get: function () {\n      return self.frozenColumn;\n    },\n    set: function (val) {\n      if (isNaN(val)) {\n        throw new TypeError('Expected value for frozenRow to be a number.');\n      }\n      if (self.getVisibleSchema().length < val) {\n        throw new RangeError(\n          'Cannot set a value larger than the number of visible columns.',\n        );\n      }\n      self.frozenColumn = val;\n    },\n  });\n  Object.defineProperty(self.intf, 'scrollIndexRect', {\n    get: function () {\n      return {\n        top: self.scrollIndexTop,\n        right: self.scrollIndexRight,\n        bottom: self.scrollIndexBottom,\n        left: self.scrollIndexLeft,\n      };\n    },\n  });\n  Object.defineProperty(self.intf, 'scrollPixelRect', {\n    get: function () {\n      return {\n        top: self.scrollPixelTop,\n        right: self.scrollPixelRight,\n        bottom: self.scrollPixelBottom,\n        left: self.scrollPixelLeft,\n      };\n    },\n  });\n  Object.defineProperty(self.intf, 'rowOrder', {\n    get: function () {\n      return self.orders.rows;\n    },\n    set: function (val) {\n      if (!Array.isArray(val)) {\n        throw new TypeError('Value must be an array.');\n      }\n      if (!self.originalData || val.length < self.originalData.length) {\n        throw new RangeError(\n          'Array length must be equal to or greater than number of rows.',\n        );\n      }\n      self.orders.rows = val;\n    },\n  });\n  Object.defineProperty(self.intf, 'columnOrder', {\n    get: function () {\n      return self.orders.columns;\n    },\n    set: function (val) {\n      if (!Array.isArray(val)) {\n        throw new TypeError('Value must be an array.');\n      }\n      if (val.length < self.getSchema().length) {\n        throw new RangeError(\n          'Array length must be equal to or greater than number of columns.',\n        );\n      }\n      self.orders.columns = val;\n    },\n  });\n  Object.defineProperty(self.intf, 'selectionBounds', {\n    get: function () {\n      return self.getSelectionBounds();\n    },\n  });\n  Object.defineProperty(self.intf, 'selectedRows', {\n    get: function () {\n      return self.getSelectedData(true);\n    },\n  });\n  Object.defineProperty(self.intf, 'selectedCells', {\n    get: function () {\n      return self.getSelectedData();\n    },\n  });\n  Object.defineProperty(self.intf, 'visibleSchema', {\n    get: function () {\n      return self.getVisibleSchema().map(function eachDataRow(col) {\n        return col;\n      });\n    },\n  });\n  Object.defineProperty(self.intf, 'treeGridAttributes', {\n    get: function () {\n      return self.treeGridAttributes;\n    },\n    set: function setTreeGridAttributes(value) {\n      self.treeGridAttributes = value;\n    },\n  });\n  Object.defineProperty(self.intf, 'cellGridAttributes', {\n    get: function () {\n      return self.cellGridAttributes;\n    },\n    set: function setCellGridAttributes(value) {\n      self.cellGridAttributes = value;\n    },\n  });\n  Object.defineProperty(self.intf, 'fillCellCallback', {\n    get: function () {\n      return self.fillCellCallback;\n    },\n    set: function setFillCellCallback(value) {\n      self.fillCellCallback = value;\n    },\n  });\n  Object.defineProperty(self.intf, 'ctx', {\n    get: function () {\n      return self.ctx;\n    },\n  });\n  Object.defineProperty(self.intf, 'schema', {\n    get: function schemaGetter() {\n      return self.getSchema();\n    },\n    set: function schemaSetter(value) {\n      if (value === undefined) {\n        // Issue #89 - allow schema to be set to initialized state\n        self.schema = undefined;\n        self.tempSchema = undefined;\n        self.dispatchEvent('schemachanged', { schema: undefined });\n        return;\n      }\n      if (!Array.isArray(value) || typeof value[0] !== 'object') {\n        throw new Error('Schema must be an array of objects.');\n      }\n      if (value[0].name === undefined) {\n        throw new Error(\n          'Expected schema to contain an object with at least a name property.',\n        );\n      }\n      self.schema = value.map(function eachSchemaColumn(column, index) {\n        column.width = column.width || self.style.cellWidth;\n        column.filter = column.filter || self.filter(column.type);\n        column.type = column.type || 'string';\n        column.index = index;\n        column.columnIndex = index;\n        column.rowIndex = -1;\n        return column;\n      });\n      self.tempSchema = undefined;\n      self.createNewRowData();\n      self.createColumnOrders();\n      self.tryLoadStoredSettings();\n      if (\n        self.storedSettings &&\n        typeof self.storedSettings.visibility === 'object'\n      ) {\n        self.schema.forEach(function hideEachSchemaColumn(column, index) {\n          if (\n            self.storedSettings &&\n            self.storedSettings.visibility[column.name] !== undefined\n          ) {\n            column.hidden = !self.storedSettings.visibility[column.name];\n          }\n        });\n      }\n      self.resize(true);\n      self.dispatchEvent('schemachanged', { schema: self.schema });\n    },\n  });\n  /**\n   * Gets an array of currently registered MIME types.\n   * @memberof canvasDatagrid\n   * @name getDataTypes\n   * @method\n   */\n  self.intf.getTypes = function () {\n    return Object.keys(self.parsers);\n  };\n  self.parseInnerHtml = function (data) {\n    if (!data || /^ +$/.test(data)) {\n      return [];\n    }\n    try {\n      data = JSON.parse(data);\n    } catch (e) {\n      console.warn(\n        Error(\n          'Cannot parse application/json+x-canvas-datagrid formated data. ' +\n            e.message +\n            '  \\nNote: canvas-datagrid.innerHTML is for string data only.  ' +\n            'Use the canvas-datagrid.data property to set object data.',\n        ),\n      );\n    }\n    return data;\n  };\n  self.parsers['application/json+x-canvas-datagrid'] = function (\n    data,\n    callback,\n  ) {\n    self.parsers['application/x-canvas-datagrid'](\n      self.parseInnerHtml(data),\n      function (data, schema) {\n        return callback(data, schema);\n      },\n    );\n  };\n  self.parsers['application/x-canvas-datagrid'] = function (data, callback) {\n    return callback(data);\n  };\n  self.intf.parsers = self.parsers;\n  // send to dataType ETL function to extract from input data\n  // and transform into native [{}, {}] format\n  self.etl = function (data, callback) {\n    if (!self.intf.parsers[self.dataType]) {\n      throw new Error('Unsupported data type.');\n    }\n    self.intf.parsers[self.dataType](data, function (data, schema) {\n      // set the unfiltered/sorted data array\n      self.originalData = data;\n      self.viewData = Array.from(self.originalData);\n\n      if (Array.isArray(schema)) {\n        self.schema = schema;\n      }\n      // Issue #89 - allow schema to be auto-created every time data is set\n      if (self.attributes.autoGenerateSchema) {\n        self.schema = self.getSchemaFromData(data);\n      }\n      if (!self.schema) {\n        self.tempSchema = self.getSchemaFromData(data);\n      }\n      if (self.getSchema()) {\n        self.createColumnOrders();\n      }\n      // apply filter, sort, etc to incoming dataset, set viewData:\n      self.refresh();\n      // empty data was set\n      if (!self.schema && (self.originalData || []).length === 0) {\n        self.tempSchema = [{ name: '' }];\n      }\n      self.fitColumnToValues('cornerCell', true);\n      if (\n        (self.tempSchema && !self.schema) ||\n        self.attributes.autoGenerateSchema\n      ) {\n        self.createColumnOrders();\n        self.dispatchEvent('schemachanged', { schema: self.tempSchema });\n      }\n      callback();\n    });\n  };\n  Object.defineProperty(self.intf, 'viewData', {\n    get: function () {\n      return self.viewData;\n    },\n  });\n  Object.defineProperty(self.intf, 'boundData', {\n    get: function () {\n      return self.originalData;\n    },\n  });\n  Object.defineProperty(self.intf, 'data', {\n    get: function dataGetter() {\n      return self.originalData;\n    },\n    set: function dataSetter(value) {\n      self.etl(value, function () {\n        self.changes = [];\n        self.createNewRowData();\n        if (\n          self.attributes.autoResizeColumns &&\n          self.originalData.length > 0 &&\n          self.storedSettings === undefined\n        ) {\n          self.autosize();\n        }\n        // set the header column to fit the numbers in it\n        self.fitColumnToValues('cornerCell', true);\n        self.createRowOrders();\n        self.tryLoadStoredSettings();\n        self.dispatchEvent('datachanged', { data: self.originalData });\n        self.initCellTreeSettings();\n        self.resize(true);\n      });\n    },\n  });\n  self.initScrollBox = function () {\n    var sHeight = 0,\n      sWidth = 0,\n      scrollTop = 0,\n      scrollLeft = 0,\n      scrollHeight = 0,\n      scrollWidth = 0,\n      scrollBoxHeight = 20,\n      scrollBoxWidth = 20;\n    function setScrollTop(value, preventScrollEvent) {\n      if (isNaN(value)) {\n        throw new Error('ScrollTop value must be a number');\n      }\n      if (value < 0) {\n        value = 0;\n      }\n      if (value > scrollHeight) {\n        value = scrollHeight;\n      }\n      if (scrollHeight < 0) {\n        value = 0;\n      }\n      scrollTop = value;\n      if (!preventScrollEvent) {\n        self.scroll();\n      }\n      if (self.button) {\n        self.moveButtonPos();\n      }\n    }\n    function setScrollLeft(value, preventScrollEvent) {\n      if (isNaN(value)) {\n        throw new Error('ScrollLeft value must be a number');\n      }\n      if (value < 0) {\n        value = 0;\n      }\n      if (value > scrollWidth) {\n        value = scrollWidth;\n      }\n      if (scrollWidth < 0) {\n        value = 0;\n      }\n      scrollLeft = value;\n      if (!preventScrollEvent) {\n        self.scroll();\n      }\n      if (self.button) {\n        self.moveButtonPos();\n      }\n    }\n    self.scrollBox.toString = function () {\n      return (\n        '{\"width\": ' +\n        scrollWidth.toFixed(2) +\n        ', \"height\": ' +\n        scrollHeight.toFixed(2) +\n        ', \"left\": ' +\n        scrollLeft.toFixed(2) +\n        ', \"top\": ' +\n        scrollTop.toFixed(2) +\n        ', \"widthRatio\": ' +\n        self.scrollBox.widthBoxRatio.toFixed(5) +\n        ', \"heightRatio\": ' +\n        self.scrollBox.heightBoxRatio.toFixed(5) +\n        '}'\n      );\n    };\n    self.scrollBox.scrollTo = function (x, y, supressDrawEvent) {\n      setScrollLeft(x, true);\n      setScrollTop(y, supressDrawEvent);\n    };\n    Object.defineProperty(self.scrollBox, 'scrollBoxHeight', {\n      get: function () {\n        return scrollBoxHeight;\n      },\n      set: function (value) {\n        scrollBoxHeight = value;\n      },\n    });\n    Object.defineProperty(self.scrollBox, 'scrollBoxWidth', {\n      get: function () {\n        return scrollBoxWidth;\n      },\n      set: function (value) {\n        scrollBoxWidth = value;\n      },\n    });\n    Object.defineProperty(self.scrollBox, 'height', {\n      get: function () {\n        return sHeight;\n      },\n      set: function (value) {\n        sHeight = value;\n      },\n    });\n    Object.defineProperty(self.scrollBox, 'width', {\n      get: function () {\n        return sWidth;\n      },\n      set: function (value) {\n        sWidth = value;\n      },\n    });\n    Object.defineProperty(self.scrollBox, 'scrollTop', {\n      get: function () {\n        return scrollTop;\n      },\n      set: setScrollTop,\n    });\n    Object.defineProperty(self.scrollBox, 'scrollLeft', {\n      get: function () {\n        return scrollLeft;\n      },\n      set: setScrollLeft,\n    });\n    Object.defineProperty(self.scrollBox, 'scrollHeight', {\n      get: function () {\n        return scrollHeight;\n      },\n      set: function (value) {\n        if (scrollTop > value) {\n          scrollTop = Math.max(value, 0);\n        }\n        scrollHeight = value;\n      },\n    });\n    Object.defineProperty(self.scrollBox, 'scrollWidth', {\n      get: function () {\n        return scrollWidth;\n      },\n      set: function (value) {\n        if (scrollLeft > value) {\n          scrollLeft = Math.max(value, 0);\n        }\n        scrollWidth = value;\n      },\n    });\n  };\n  return;\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport { mergeHiddenRowRanges } from './groups/util';\n\nexport default function (self) {\n  /**\n   * Converts a integer into a letter A - ZZZZZ...\n   * @memberof canvasDatagrid\n   * @name integerToAlpha\n   * @method\n   * @param {column} n The number to convert.\n   */\n  self.integerToAlpha = function (n) {\n    var ordA = 'a'.charCodeAt(0),\n      ordZ = 'z'.charCodeAt(0),\n      len = ordZ - ordA + 1,\n      s = '';\n    while (n >= 0) {\n      s = String.fromCharCode((n % len) + ordA) + s;\n      n = Math.floor(n / len) - 1;\n    }\n    return s;\n  };\n  /**\n   * Inserts a new column before the specified index into the schema.\n   * @tutorial schema\n   * @memberof canvasDatagrid\n   * @name insertColumn\n   * @method\n   * @param {column} c The column to insert into the schema.\n   * @param {number} index The index of the column to insert before.\n   */\n  self.insertColumn = function (c, index) {\n    var s = self.getSchema();\n    if (s.length < index) {\n      throw new Error('Index is beyond the length of the schema.');\n    }\n    self.validateColumn(c, s);\n    s.splice(index, 0, c);\n\n    self.originalData.forEach(function (row, rowIndex) {\n      self.applyDefaultValue(row, c, rowIndex);\n    });\n    self.intf.schema = s;\n\n    self.refresh();\n  };\n  /**\n   * Deletes a column from the schema at the specified index.\n   * @memberof canvasDatagrid\n   * @name deleteColumn\n   * @tutorial schema\n   * @method\n   * @param {number} index The index of the column to delete.\n   */\n  self.deleteColumn = function (index) {\n    var schema = self.getSchema();\n\n    // remove data matching this column name from data\n    self.originalData.forEach(function (row) {\n      delete row[schema[index].name];\n    });\n\n    schema.splice(index, 1);\n    self.intf.schema = schema;\n\n    self.refresh();\n  };\n  /**\n   * Adds a new column into the schema.\n   * @tutorial schema\n   * @memberof canvasDatagrid\n   * @name addColumn\n   * @method\n   * @param {column} c The column to add to the schema.\n   */\n  self.addColumn = function (c) {\n    var s = self.getSchema();\n    self.validateColumn(c, s);\n    s.push(c);\n    self.originalData.forEach(function (row, rowIndex) {\n      self.applyDefaultValue(row, c, rowIndex);\n    });\n    self.intf.schema = s;\n\n    self.refresh();\n  };\n  /**\n   * Deletes a row from the dataset at the specified index.\n   * @memberof canvasDatagrid\n   * @name deleteRow\n   * @method\n   * @param {number} index The index of the row to delete.\n   */\n  self.deleteRow = function (index) {\n    self.originalData.splice(index, 1);\n    self.setFilter();\n    self.resize(true);\n  };\n  /**\n   * Inserts a new row into the dataset before the specified index.\n   * @memberof canvasDatagrid\n   * @name insertRow\n   * @method\n   * @param {object} d data.\n   * @param {number} index The index of the row to insert before.\n   */\n  self.insertRow = function (d, index) {\n    if (self.originalData.length < index) {\n      throw new Error('Index is beyond the length of the dataset.');\n    }\n    self.originalData.splice(index, 0, d);\n    self.getSchema().forEach(function (c) {\n      if (d[c.name] === undefined) {\n        self.applyDefaultValue(self.originalData[index], c, index);\n      }\n    });\n\n    // setFilter calls .refresh(), so we need not call it again:\n    self.setFilter();\n\n    self.resize(true);\n  };\n  /**\n   * Adds a new row into the dataset.\n   * @memberof canvasDatagrid\n   * @name addRow\n   * @method\n   * @param {object} d data.\n   */\n  self.addRow = function (d) {\n    self.originalData.push(d);\n    self.getSchema().forEach(function (c) {\n      if (d[c.name] === undefined) {\n        self.applyDefaultValue(\n          self.originalData[self.originalData.length - 1],\n          c,\n          self.originalData.length - 1,\n        );\n      }\n    });\n\n    // setFilter calls .refresh(), so we need not call it again:\n    self.setFilter();\n\n    self.resize(true);\n  };\n  /**\n   * Sets the height of a given row by index number.\n   * @memberof canvasDatagrid\n   * @name setRowHeight\n   * @method\n   * @param {number} rowIndex The index of the row to set.\n   * @param {number} height Height to set the row to.\n   */\n  self.setRowHeight = function (rowIndex, height) {\n    self.sizes.rows[rowIndex] = height;\n    self.draw(true);\n  };\n  /**\n   * Sets the width of a given column by index number.\n   * @memberof canvasDatagrid\n   * @name setColumnWidth\n   * @method\n   * @param {number} colIndex The index of the column to set.\n   * @param {number} width Width to set the column to.\n   */\n  self.setColumnWidth = function (colIndex, width) {\n    self.sizes.columns[colIndex] = width;\n    self.draw(true);\n  };\n  /**\n   * Removes any changes to the width of the columns due to user or api interaction, setting them back to the schema or style default.\n   * @memberof canvasDatagrid\n   * @name resetColumnWidths\n   * @tutorial schema\n   * @method\n   */\n  self.resetColumnWidths = function () {\n    self.sizes.columns = {};\n    self.draw(true);\n  };\n  /**\n   * Removes any changes to the height of the rows due to user or api interaction, setting them back to the schema or style default.\n   * @memberof canvasDatagrid\n   * @name resetRowHeights\n   * @tutorial schema\n   * @method\n   */\n  self.resetRowHeights = function () {\n    self.sizes.rows = {};\n    self.draw(true);\n  };\n  /**\n   * Sets the value of the filter.\n   * @memberof canvasDatagrid\n   * @name setFilter\n   * @method\n   * @param {string} column Name of the column to filter.\n   * @param {string} value The value to filter for.\n   */\n  self.setFilter = function (column, value) {\n    if (column === undefined && value === undefined) {\n      self.columnFilters = {};\n    } else if (column && (value === '' || value === undefined)) {\n      delete self.columnFilters[column];\n    } else {\n      self.columnFilters[column] = value;\n      if (self.attributes.showFilterInCell) {\n        self.filterable.rows.push(0);\n        self.orders.columns.forEach(function (value, index) {\n          self.filterable.columns.push(index);\n        });\n      }\n    }\n    if (!Object.keys(self.columnFilters).length) {\n      self.filterable = {\n        rows: [],\n        columns: [],\n      };\n    }\n    self.refresh();\n  };\n  /**\n   * Returns the number of pixels to scroll down to line up with row rowIndex.\n   * @memberof canvasDatagrid\n   * @name findRowScrollTop\n   * @method\n   * @param {number} rowIndex The row index of the row to scroll find.\n   */\n  self.findRowScrollTop = function (rowIndex) {\n    if (self.scrollCache.y[rowIndex] === undefined) {\n      throw new RangeError(\n        `Row index ${rowIndex} out of range: ${self.scrollCache.y.length}.`,\n      );\n    }\n    return self.scrollCache.y[rowIndex];\n  };\n  /**\n   * Returns the number of pixels to scroll to the left to line up with column columnIndex.\n   * @memberof canvasDatagrid\n   * @name findColumnScrollLeft\n   * @method\n   * @param {number} columnIndex The column index of the column to find.\n   */\n  self.findColumnScrollLeft = function (columnIndex) {\n    var i = Math.max(columnIndex - 1, 0);\n    if (self.scrollCache.x[i] === undefined) {\n      throw new Error('Column index out of range.');\n    }\n    return (\n      self.scrollCache.x[i] -\n      self.getColumnWidth(self.orders.columns[columnIndex])\n    );\n  };\n  /**\n   * Scrolls to the cell at columnIndex x, and rowIndex y.  If you define both rowIndex and columnIndex additional calculations can be made to center the cell using the target cell's height and width.  Defining only one rowIndex or only columnIndex will result in simpler calculations.\n   * @memberof canvasDatagrid\n   * @name gotoCell\n   * @method\n   * @param {number} x The column index of the cell to scroll to.\n   * @param {number} y The row index of the cell to scroll to.\n   * @param {number} [offsetX=0] Percentage offset the cell should be from the left edge (not including headers).  The default is 0, meaning the cell will appear at the left edge. Valid values are 0 through 1. 1 = Left, 0 = Right, 0.5 = Center.\n   * @param {number} [offsetY=0] Percentage offset the cell should be from the top edge (not including headers).  The default is 0, meaning the cell will appear at the top edge. Valid values are 0 through 1. 1 = Bottom, 0 = Top, 0.5 = Center.\n   */\n  self.gotoCell = function (x, y, offsetX, offsetY) {\n    var targetX = x === undefined ? undefined : self.findColumnScrollLeft(x),\n      targetY = y === undefined ? undefined : self.findRowScrollTop(y),\n      cell,\n      sbw =\n        self.scrollBox.width -\n        (self.scrollBox.verticalBarVisible ? self.style.scrollBarWidth : 0),\n      sbh =\n        self.scrollBox.height -\n        (self.scrollBox.horizontalBarVisible ? self.style.scrollBarWidth : 0);\n    offsetX = offsetX === undefined ? 0 : offsetX;\n    offsetY = offsetY === undefined ? 0 : offsetY;\n    targetX -= sbw * offsetX;\n    targetY -= sbh * offsetY;\n    if (x !== undefined && y !== undefined) {\n      self.scrollBox.scrollTo(targetX, targetY);\n      requestAnimationFrame(function () {\n        cell = self.getVisibleCellByIndex(x, y);\n        // HACK: just don't offset if the target cell cannot be seen\n        // TODO: offset does not work on very small grids, not sure why\n        if (!cell) {\n          return;\n        }\n        targetX += cell.width * offsetX;\n        targetY += cell.height * offsetY;\n        self.scrollBox.scrollTo(targetX, targetY);\n      });\n    } else if (x !== undefined) {\n      self.scrollBox.scrollLeft = targetX;\n    } else if (y !== undefined) {\n      self.scrollBox.scrollTop = targetY;\n    }\n  };\n  /**\n   * Scrolls the row y.\n   * @memberof canvasDatagrid\n   * @name gotoRow\n   * @method\n   * @param {number} y The row index of the cell to scroll to.\n   */\n  self.gotoRow = function (y) {\n    self.gotoCell(0, y);\n  };\n  /**\n   * Add a button into the cell.\n   * @memberof canvasDatagrid\n   * @name addButton\n   * @method\n   * @param {number} columnIndex The column index of the cell to to add a button.\n   * @param {number} rowIndex The row index of the cell to to add a button.\n   * @param {object} offset Offset how far go away from cell.\n   * @param {object} items a list of items to add into button menu.\n   * @param {string} imgSrc icon path to add into button.\n   */\n  self.addButton = function (columnIndex, rowIndex, offset, items, imgSrc) {\n    var cells = self.visibleCells.filter(function (c) {\n      return c.sortColumnIndex === columnIndex && c.sortRowIndex === rowIndex;\n    });\n\n    self.attachButton(\n      {\n        top: cells[0].y + cells[0].height + offset.y,\n        left: cells[0].x + cells[0].width + offset.x,\n      },\n      items,\n      imgSrc,\n    );\n  };\n\n  /**\n   * Expand/Collapse CellTree.\n   * @memberof canvasDatagrid\n   * @name toggleCellCollapseTree\n   * @method\n   * @param {array} treeData The array of cellTree to expand or collapse.\n   */\n\n  self.toggleCellCollapseTree = function (treeData) {\n    for (let type in treeData) {\n      for (let t of treeData[type])\n        if (t.length > 0) self.toggleCollapseTree(t[0], t[1], type);\n    }\n    self.draw();\n  };\n\n  /**\n   * Expand/Collapse CellTree.\n   * @memberof canvasDatagrid\n   * @name expandCollapseCellTree\n   * @method\n   * @param {array} treeData The array of cellTree to expand or collapse.\n   */\n\n  self.expandCollapseCellTree = function (treeData) {\n    for (let type in treeData) {\n      for (let t of treeData[type])\n        if (t.length > 0) self.cellTreeExpandCollapse(t[0], t[1], type);\n    }\n    self.draw();\n  };\n\n  /**\n   * Scrolls the cell at cell x, row y into view if it is not already.\n   * @memberof canvasDatagrid\n   * @name scrollIntoView\n   * @method\n   * @param {number} x The column index of the cell to scroll into view.\n   * @param {number} y The row index of the cell to scroll into view.\n   * @param {number} [offsetX=0] Percentage offset the cell should be from the left edge (not including headers).  The default is 0, meaning the cell will appear at the left edge. Valid values are 0 through 1. 1 = Left, 0 = Right, 0.5 = Center.\n   * @param {number} [offsetY=0] Percentage offset the cell should be from the top edge (not including headers).  The default is 0, meaning the cell will appear at the top edge. Valid values are 0 through 1. 1 = Bottom, 0 = Top, 0.5 = Center.\n   */\n  self.scrollIntoView = function (x, y, offsetX, offsetY) {\n    const matched = self.visibleCells.filter(function (cell) {\n      return (\n        (cell.rowIndex === y || y === undefined) &&\n        (cell.columnIndex === x || x === undefined) &&\n        cell.x > 0 &&\n        cell.y > 0 &&\n        cell.x + cell.width < self.width &&\n        cell.y + cell.height < self.height\n      );\n    });\n    if (matched.length === 1 && x !== undefined && y !== undefined) {\n      // goto specific cell and its part be hidden by header\n      if (\n        matched[0].x < self.getRowHeaderCellWidth() ||\n        matched[0].y < self.getColumnHeaderCellHeight()\n      )\n        matched.length = 0;\n    }\n    if (matched.length === 0) {\n      self.gotoCell(x, y, offsetX, offsetY);\n    }\n  };\n  /**\n   * Sets the active cell. Requires redrawing.\n   * @memberof canvasDatagrid\n   * @name setActiveCell\n   * @method\n   * @param {number} x The column index of the cell to set active.\n   * @param {number} y The row index of the cell to set active.\n   */\n  self.setActiveCell = function (x, y) {\n    if (typeof x === 'undefined') return;\n    if (x < 0) {\n      x = 0;\n    }\n    if (y < 0) {\n      y = 0;\n    }\n    self.activeCell = {\n      rowIndex: y,\n      columnIndex: x,\n    };\n  };\n\n  /**\n   * Collapse a tree grid by row index.\n   * @memberof canvasDatagrid\n   * @name collapseTree\n   * @method\n   * @param {number} index The index of the row to collapse.\n   */\n  self.collapseTree = function (rowIndex) {\n    self.dispatchEvent('collapsetree', {\n      childGrid: self.childGrids[rowIndex],\n      data: self.viewData[rowIndex],\n      rowIndex: rowIndex,\n    });\n    self.openChildren[rowIndex].blur();\n    self.openChildren[rowIndex].dispose();\n    delete self.openChildren[rowIndex];\n    delete self.sizes.trees[rowIndex];\n    delete self.childGrids[rowIndex];\n    self.dispatchEvent('resizerow', {\n      cellHeight: self.style.cellHeight,\n    });\n    self.resize(true);\n    self.draw(true);\n  };\n  /**\n   * Expands a tree grid by row index.\n   * @memberof canvasDatagrid\n   * @name expandTree\n   * @method\n   * @param {number} index The index of the row to expand.\n   */\n  self.expandTree = function (rowIndex) {\n    var trArgs = self.args.treeGridAttributes || {},\n      columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n      rowHeaderCellWidth =\n        self.sizes.columns.cornerCell || self.style.rowHeaderCellWidth,\n      h = self.sizes.trees[rowIndex] || self.style.treeGridHeight,\n      treeGrid;\n    if (!self.childGrids[rowIndex]) {\n      trArgs.debug = self.attributes.debug;\n      trArgs.name = self.attributes.saveAppearance\n        ? self.attributes.name + 'tree' + rowIndex\n        : undefined;\n      trArgs.style = trArgs.style || self.style;\n      trArgs.parentNode = {\n        parentGrid: self.intf,\n        nodeType: 'canvas-datagrid-tree',\n        offsetHeight: h,\n        offsetWidth: self.width - rowHeaderCellWidth,\n        header: { width: self.width - rowHeaderCellWidth },\n        offsetLeft: rowHeaderCellWidth,\n        offsetTop: columnHeaderCellHeight,\n        offsetParent: self.intf.parentNode,\n        parentNode: self.intf.parentNode,\n        style: 'tree',\n        data: self.viewData[rowIndex],\n      };\n      treeGrid = self.createGrid(trArgs);\n      self.childGrids[rowIndex] = treeGrid;\n    }\n    treeGrid = self.childGrids[rowIndex];\n    treeGrid.visible = true;\n    self.dispatchEvent('expandtree', {\n      treeGrid: treeGrid,\n      data: self.viewData[rowIndex],\n      rowIndex: rowIndex,\n    });\n    self.openChildren[rowIndex] = treeGrid;\n    self.sizes.trees[rowIndex] = h;\n    self.dispatchEvent('resizerow', { height: self.style.cellHeight });\n    self.resize(true);\n  };\n  /**\n   * Toggles tree grid open and close by row index.\n   * @memberof canvasDatagrid\n   * @name toggleTree\n   * @method\n   * @param {number} index The index of the row to toggle.\n   */\n  self.toggleTree = function (rowIndex) {\n    var i = self.openChildren[rowIndex];\n    if (i) {\n      return self.collapseTree(rowIndex);\n    }\n    self.expandTree(rowIndex);\n  };\n  /**\n   * Returns a header from the schema by name.\n   * @memberof canvasDatagrid\n   * @name getHeaderByName\n   * @tutorial schema\n   * @method\n   * @returns {header} header with the selected name, or undefined.\n   * @param {string} name The name of the column to resize.\n   */\n  self.getHeaderByName = function (name) {\n    var x,\n      i = self.getSchema();\n    for (x = 0; x < i.length; x += 1) {\n      if (i[x].name === name) {\n        return i[x];\n      }\n    }\n  };\n  /**\n   * Hide column/columns\n   * @memberof canvasDatagrid\n   * @name hideColumns\n   * @method\n   * @param {number} beginColumnOrderIndex The begin column order index\n   * @param {number} [endColumnOrderIndex] The end column order index\n   */\n  self.hideColumns = function (beginColumnOrderIndex, endColumnOrderIndex) {\n    const schema = self.getSchema();\n    const orders = self.orders.columns;\n    const hiddenColumns = [];\n    if (typeof endColumnOrderIndex !== 'number')\n      endColumnOrderIndex = beginColumnOrderIndex;\n    for (\n      let orderIndex = beginColumnOrderIndex;\n      orderIndex <= endColumnOrderIndex;\n      orderIndex++\n    ) {\n      const columnIndex = orders[orderIndex];\n      if (columnIndex >= 0 && !schema[columnIndex].hidden) {\n        hiddenColumns.push(columnIndex);\n        schema[columnIndex].hidden = true;\n\n        self.dispatchEvent('columnhide', {\n          columnIndex,\n        });\n      }\n    }\n\n    if (hiddenColumns.length > 0) {\n      self.setStorageData();\n      setTimeout(function () {\n        self.resize(true);\n      }, 10);\n    }\n\n    self.dispatchEvent('hidecolumns', {\n      hiddenColumns,\n    });\n  };\n  /**\n   * Unihde column/columns\n   * @memberof canvasDatagrid\n   * @name unhideColumns\n   * @method\n   * @param {number} beginColumnOrderIndex The begin column order index\n   * @param {number} [endColumnOrderIndex] The end column order index\n   */\n  self.unhideColumns = function (beginColumnOrderIndex, endColumnOrderIndex) {\n    const orders = self.orders.columns;\n    const schema = self.getSchema();\n\n    for (let i = beginColumnOrderIndex; i <= endColumnOrderIndex; i++) {\n      const columnIndex = orders[i];\n      const s = schema[columnIndex];\n\n      if (s && s.hidden) {\n        s.hidden = false;\n\n        self.dispatchEvent('columnunhide', {\n          columnIndex,\n        });\n      }\n    }\n    self.refresh();\n  };\n  /**\n   * Hide rows\n   * @memberof canvasDatagrid\n   * @name hideRows\n   * @method\n   * @param {number} beginRowIndex The begin row index\n   * @param {number} endRowIndex The end row index\n   */\n  self.hideRows = function (beginRowIndex, endRowIndex) {\n    if (\n      mergeHiddenRowRanges(self.hiddenRowRanges, [beginRowIndex, endRowIndex])\n    )\n      self.refresh();\n  };\n  /**\n   * Unhide rows\n   * @memberof canvasDatagrid\n   * @name unhideRows\n   * @method\n   * @param {number} beginRowIndex The begin row index\n   * @param {number} endRowIndex The end row index\n   */\n  self.unhideRows = function (beginRowIndex, endRowIndex) {\n    self.hiddenRowRanges = self.hiddenRowRanges.filter(\n      (range) => range[0] !== beginRowIndex || range[1] !== endRowIndex,\n    );\n    self.refresh();\n  };\n  /**\n   * Resizes a column to fit the longest value in the column. Call without a value to resize all columns.\n   * Warning, can be slow on very large record sets (1m records ~3-5 seconds on an i7).\n   * @memberof canvasDatagrid\n   * @name fitColumnToValues\n   * @method\n   * @param {string} name The name of the column to resize.\n   */\n  self.fitColumnToValues = function (name, internal) {\n    if (!self.canvas) {\n      return;\n    }\n\n    const columnIndex =\n      name === 'cornerCell' ? -1 : self.getHeaderByName(name).index;\n\n    const newSize = Math.max(\n      self.findColumnMaxTextLength(name),\n      self.style.minColumnWidth,\n    );\n\n    self.sizes.columns[columnIndex] = newSize;\n\n    self.dispatchEvent('resizecolumn', {\n      x: newSize,\n      y: self.resizingStartingHeight,\n      draggingItem: self.currentCell,\n    });\n\n    if (!internal) {\n      self.resize();\n      self.draw(true);\n    }\n  };\n  /**\n   * Checks if a cell is currently visible.\n   * @memberof canvasDatagrid\n   * @name isCellVisible\n   * @overload\n   * @method\n   * @returns {boolean} when true, the cell is visible, when false the cell is not currently drawn.\n   * @param {number} columnIndex The column index of the cell to check.\n   * @param {number} rowIndex The row index of the cell to check.\n   */\n  self.isCellVisible = function (cell, rowIndex) {\n    // overload\n    if (rowIndex !== undefined) {\n      return (\n        self.visibleCells.filter(function (c) {\n          return c.columnIndex === cell && c.rowIndex === rowIndex;\n        }).length > 0\n      );\n    }\n    var x,\n      l = self.visibleCells.length;\n    for (x = 0; x < l; x += 1) {\n      if (\n        cell.x === self.visibleCells[x].x &&\n        cell.y === self.visibleCells[x].y\n      ) {\n        return true;\n      }\n    }\n    return false;\n  };\n  /**\n   * Sets the order of the data.\n   * @memberof canvasDatagrid\n   * @name order\n   * @method\n   * @param {number} columnName Name of the column to be sorted.\n   * @param {string} direction `asc` for ascending or `desc` for descending.\n   * @param {function} [sortFunction] When defined, override the default sorting method defined in the column's schema and use this one.\n   * @param {bool} [dontSetStorageData] Don't store this setting for future use.\n   */\n  self.order = function (\n    columnName,\n    direction,\n    sortFunction,\n    dontSetStorageData,\n  ) {\n    if (!self.attributes.allowSorting) {\n      self.refresh();\n      return;\n    }\n    var f,\n      c = self.getSchema().filter(function (col) {\n        return col.name === columnName;\n      });\n    if (\n      self.dispatchEvent('beforesortcolumn', {\n        name: columnName,\n        direction: direction,\n      })\n    ) {\n      return;\n    }\n    self.orderBy = columnName;\n    self.orderDirection = direction;\n    if (!self.viewData || self.viewData.length === 0) {\n      return;\n    }\n    if (c.length === 0) {\n      throw new Error('Cannot sort.  No such column name');\n    }\n    f = sortFunction || c[0].sorter || self.sorters[c[0].type];\n    if (!f && c[0].type !== undefined) {\n      console.warn(\n        'Cannot sort type \"%s\" falling back to string sort.',\n        c[0].type,\n      );\n    }\n    self.orderings.add(\n      columnName,\n      direction,\n      typeof f === 'function' ? f : self.sorters.string,\n    );\n    self.refresh();\n    self.dispatchEvent('sortcolumn', {\n      name: columnName,\n      direction: direction,\n    });\n\n    if (dontSetStorageData) {\n      return;\n    }\n    self.setStorageData();\n  };\n\n  /**\n   * Add grouping\n   * @param {'columns'|'rows'} groupFor\n   * @method\n   * @param {number} from\n   * @param {number} to\n   */\n  function addGroup(groupFor, from, to) {\n    let newRow = false;\n    const allGroups =\n      groupFor === 'rows' ? self.groupedRows : self.groupedColumns;\n    for (let i = allGroups.length - 1; i >= 0; i--) {\n      const groups = allGroups[i];\n      const min = groups[0].from,\n        max = groups[groups.length - 1].to;\n      if (from <= min && to >= max) {\n        if (from === min && to === max && groups.length === 1) return; // nothings happened\n        // new group wrap this row\n        continue;\n      }\n      for (let gi = 0; gi < groups.length; gi++) {\n        const g = groups[gi];\n        if (from > g.to) continue;\n        if (from >= g.from) {\n          if (to > g.to) {\n            if (from === g.from) {\n              allGroups.splice(i, 0, [{ from, to, collapsed: false }]);\n              self.refresh();\n              return;\n            }\n            throw new Error(`Can't group these ${groupFor}`);\n          }\n          if (to === g.to) {\n            if (from === g.from) return; // nothings happened\n          }\n          newRow = true;\n          break;\n        }\n        if (to >= g.from) {\n          if (to < g.to) throw new Error(`Can't group these ${groupFor}`);\n          allGroups.splice(i, 0, [{ from, to, collapsed: false }]);\n        } else {\n          groups.splice(gi, 0, { from, to, collapsed: false });\n        }\n        self.refresh();\n        return;\n      }\n      if (newRow) continue;\n      groups.push({ from, to, collapsed: false });\n      self.refresh();\n      return;\n    }\n    if (newRow) allGroups.push([{ from, to, collapsed: false }]);\n    else allGroups.unshift([{ from, to, collapsed: false }]);\n    self.refresh();\n  }\n  /**\n   * Remove grouping\n   * @param {Array<Array<{from:number,to:number,collapsed:boolean}>>} allGroups\n   * @method\n   * @param {number} from\n   * @param {number} to\n   */\n  function removeGroup(allGroups, from, to) {\n    for (let i = 0; i < allGroups.length; i++) {\n      const groups = allGroups[i];\n      for (let gi = 0; gi < groups.length; gi++) {\n        const group = groups[gi];\n        if (group.from === from && group.to === to) {\n          if (groups.length <= 1) allGroups.splice(i, 1);\n          else groups.splice(gi, 1);\n          self.refresh();\n          return;\n        }\n      }\n    }\n  }\n  /**\n   * Grouping columns\n   * @memberof canvasDatagrid\n   * @name groupColumns\n   * @method\n   * @param {number|string} firstColumnName Name of the first column to be grouped.\n   * @param {number|string} lastColumnName Name of the last column to be grouped.\n   */\n  self.groupColumns = function (firstColumnName, lastColumnName) {\n    /** @type {Array<{name: string,columnIndex:number}>} */\n    const schema = self.getSchema();\n    let firstOne, lastOne;\n    for (let i = 0; i < schema.length; i++) {\n      const it = schema[i];\n      if (firstOne && lastOne) break;\n      if (it.name === firstColumnName) {\n        firstOne = it;\n        continue;\n      }\n      if (it.name === lastColumnName) {\n        lastOne = it;\n        continue;\n      }\n    }\n    if (!firstOne) throw new Error(`No such column name for first column`);\n    if (!lastOne) throw new Error(`No such column name for last column`);\n    if (lastOne.columnIndex > firstOne.columnIndex !== true)\n      throw new Error(`Can't group these columns`);\n\n    const from = firstOne.columnIndex;\n    const to = lastOne.columnIndex;\n    const ev = { group: { type: 'columns', from, to } };\n    try {\n      addGroup('columns', from, to);\n    } catch (error) {\n      ev.error = error;\n    }\n    self.dispatchEvent('aftercreategroup', ev);\n  };\n  /**\n   * Grouping columns\n   * @memberof canvasDatagrid\n   * @name groupRows\n   * @method\n   * @param {number} rowIndexFrom The row index which is the beginning of the group\n   * @param {number} rowIndexTo The row index which is the end of the group\n   */\n  self.groupRows = function (rowIndexFrom, rowIndexTo) {\n    if (!Number.isInteger(rowIndexFrom) || rowIndexFrom < 0)\n      throw new Error(`No such row for the beginning of the group`);\n\n    const dataLength = self.viewData.length;\n    if (\n      !Number.isInteger(rowIndexFrom) ||\n      rowIndexTo <= rowIndexFrom ||\n      rowIndexTo >= dataLength\n    )\n      throw new Error(`No such row for the end of the group`);\n    const ev = {\n      group: {\n        type: 'rows',\n        from: rowIndexFrom,\n        to: rowIndexTo,\n      },\n    };\n    try {\n      addGroup('rows', rowIndexFrom, rowIndexTo);\n    } catch (error) {\n      ev.error = error;\n    }\n    self.dispatchEvent('aftercreategroup', ev);\n  };\n  /**\n   * Remove grouping columns\n   * @memberof canvasDatagrid\n   * @name removeGroupColumns\n   * @method\n   * @param {number|string} firstColumnName Name of the first column to be grouped.\n   * @param {number|string} lastColumnName Name of the last column to be grouped.\n   */\n  self.removeGroupColumns = function (firstColumnName, lastColumnName) {\n    /** @type {Array<{name:string,columnIndex:number}>} */\n    const schema = self.getSchema();\n    let firstOne, lastOne;\n    for (let i = 0; i < schema.length; i++) {\n      const it = schema[i];\n      if (firstOne && lastOne) break;\n      if (it.name === firstColumnName) {\n        firstOne = it;\n        continue;\n      }\n      if (it.name === lastColumnName) {\n        lastOne = it;\n        continue;\n      }\n    }\n    if (!firstOne) throw new Error(`No such column name for first column`);\n    if (!lastOne) throw new Error(`No such column name for last column`);\n    const from = firstOne.columnIndex;\n    const to = lastOne.columnIndex;\n    removeGroup(self.groupedColumns, from, to);\n  };\n  /**\n   * Remove grouping columns\n   * @memberof canvasDatagrid\n   * @name removeGroupRows\n   * @method\n   * @param {number} rowIndexFrom The row index which is the beginning of the group\n   * @param {number} rowIndexTo The row index which is the end of the group\n   */\n  self.removeGroupRows = function (rowIndexFrom, rowIndexTo) {\n    removeGroup(self.groupedRows, rowIndexFrom, rowIndexTo);\n  };\n  /**\n   * Toggle(expand/collapsed) grouping columns\n   * @memberof canvasDatagrid\n   * @name toggleGroupColumns\n   * @method\n   * @param {number|string} firstColumnName Name of the first column to be grouped.\n   * @param {number|string} lastColumnName Name of the last column to be grouped.\n   */\n  self.toggleGroupColumns = function (firstColumnName, lastColumnName) {\n    /** @type {Array<{name:string,columnIndex:number}>} */\n    const schema = self.getSchema();\n    let firstOne, lastOne;\n    for (let i = 0; i < schema.length; i++) {\n      const it = schema[i];\n      if (firstOne && lastOne) break;\n      if (it.name === firstColumnName) {\n        firstOne = it;\n        continue;\n      }\n      if (it.name === lastColumnName) {\n        lastOne = it;\n        continue;\n      }\n    }\n    if (!firstOne || !lastOne) return;\n    const from = firstOne.columnIndex;\n    const to = lastOne.columnIndex;\n    if (self.toggleGroup({ type: 'c', from, to })) {\n      self.disposeContextMenu();\n      self.setStorageData();\n      self.refresh();\n    }\n  };\n  /**\n   * Toggle(expand/collapsed) grouping rows\n   * @memberof canvasDatagrid\n   * @name toggleGroupRows\n   * @method\n   * @param {number} rowIndexFrom The row index which is the beginning of the group\n   * @param {number} rowIndexTo The row index which is the end of the group\n   */\n  self.toggleGroupRows = function (rowIndexFrom, rowIndexTo) {\n    if (self.toggleGroup({ type: 'r', from: rowIndexFrom, to: rowIndexTo })) {\n      self.disposeContextMenu();\n      self.setStorageData();\n      self.refresh();\n    }\n  };\n\n  self.isInGrid = function (e) {\n    if (e.x < 0 || e.x > self.width || e.y < 0 || e.y > self.height) {\n      return false;\n    }\n    return true;\n  };\n\n  /**\n   * Moves data in the provided selection to another position in the grid.  Moving data off the edge of the schema (columns/x) will truncate data.\n   * @memberof canvasDatagrid\n   * @name moveTo\n   * @method\n   * @param {array} sel 2D array representing selected rows and columns.  `canvasDatagrid.selections` is in this format and can be used here.\n   * @param {number} x The column index to start inserting the selection at.\n   * @param {number} y The row index to start inserting the selection at.\n   */\n  self.moveTo = function (sel, x, y) {\n    // TODO: optimize this function,\n    // we just transform the `sel` to obselete selection matrix\n    sel = self.getObsoleteSelectionMatrix(sel);\n\n    // TODO: this function is not migrated done\n    var selectedData = self.getSelectedData(),\n      visibleSchema = self.getVisibleSchema(),\n      selectionLength = sel.length,\n      xi,\n      maxRowLength = -Infinity,\n      minXi = Infinity,\n      yi = y - 1;\n\n    sel.forEach(function (row, rowIndex) {\n      if (rowIndex === selectionLength) {\n        return;\n      }\n      if (row.length === 0) {\n        return;\n      }\n      minXi = Math.min(self.getVisibleColumnIndexOf(x), minXi);\n      maxRowLength = Math.max(maxRowLength, row.length);\n      row.forEach(function (colIndex) {\n        // intentional redef of colIndex\n        colIndex = self.getVisibleColumnIndexOf(colIndex);\n        if (!visibleSchema[colIndex]) {\n          return;\n        }\n        // TODO:\n        if (!self.data) {\n          self.data = {};\n        }\n        if (!self.data[rowIndex]) {\n          self.data[rowIndex] = {};\n        }\n        // TODO:\n        self.data[rowIndex][visibleSchema[colIndex].name] = null;\n      });\n    });\n\n    sel.forEach(function (row, index) {\n      var lastSourceIndex;\n      yi += 1;\n      xi = self.getVisibleColumnIndexOf(x);\n      row.forEach(function (colIndex, cidx) {\n        colIndex = self.getVisibleColumnIndexOf(colIndex);\n        if (cidx > 0) {\n          // this confusing bit of nonsense figures out\n          // if the selection has skipped cells\n          xi += colIndex - lastSourceIndex;\n        }\n        lastSourceIndex = colIndex;\n        if (\n          colIndex === -1 ||\n          !visibleSchema[xi] ||\n          !visibleSchema[colIndex] ||\n          // TODO:\n          self.data.length - 1 < yi ||\n          yi < 0\n        ) {\n          return;\n        }\n        // TODO:\n        if (!self.data[yi]) {\n          self.data[yi] = {};\n        }\n        // TODO:\n        self.data[yi][visibleSchema[xi].name] =\n          selectedData[index][visibleSchema[colIndex].name];\n      });\n    });\n  };\n  /**\n   * Get the column group info given column belongs to\n   * @memberof canvasDatagrid\n   * @name getGroupsColumnBelongsTo\n   * @method\n   * @param {number} columnIndex Column index.\n   * @returns {Array<{from:number,to:number,collapsed:boolean}>}\n   */\n  self.getGroupsColumnBelongsTo = function (columnIndex) {\n    if (!self.attributes.allowGroupingColumns) return [];\n    const result = [];\n    for (let i = 0; i < self.groupedColumns.length; i++) {\n      const groups = self.groupedColumns[i];\n      for (let j = 0; j < groups.length; j++) {\n        const group = groups[j];\n        if (columnIndex >= group.from && columnIndex <= group.to) {\n          result.push(group);\n          break;\n        }\n      }\n    }\n    return result;\n  };\n  /**\n   * Get the row group info given row belongs to\n   * @memberof canvasDatagrid\n   * @name getGroupsRowBelongsTo\n   * @method\n   * @param {number} rowIndex Row index.\n   * @returns {Array<{from:number,to:number,collapsed:boolean}>}\n   */\n  self.getGroupsRowBelongsTo = function (rowIndex) {\n    if (!self.attributes.allowGroupingRows) return [];\n    const result = [];\n    for (let i = 0; i < self.groupedRows.length; i++) {\n      const groups = self.groupedRows[i];\n      for (let j = 0; j < groups.length; j++) {\n        const group = groups[j];\n        if (rowIndex >= group.from && rowIndex <= group.to) {\n          result.push(group);\n          break;\n        }\n      }\n    }\n    return result;\n  };\n\n  /**\n   * Checks if a given column is visible.\n   * @memberof canvasDatagrid\n   * @name isColumnVisible\n   * @method\n   * @returns {boolean} When true, the column is visible.\n   * @param {number} columnIndex Column index.\n   */\n  self.isColumnVisible = function (columnIndex) {\n    return (\n      self.visibleCells.filter(function (c) {\n        return c.columnIndex === columnIndex;\n      }).length > 0\n    );\n  };\n  /**\n   * Checks if a given row is visible.\n   * @memberof canvasDatagrid\n   * @name isRowVisible\n   * @method\n   * @returns {boolean} When true, the row is visible.\n   * @param {number} rowIndex Row index.\n   */\n  self.isRowVisible = function (rowIndex) {\n    return (\n      self.visibleCells.filter(function (c) {\n        return c.rowIndex === rowIndex;\n      }).length > 0\n    );\n  };\n  /**\n   * Gets the cell at columnIndex and rowIndex.\n   * @memberof canvasDatagrid\n   * @name getVisibleCellByIndex\n   * @method\n   * @returns {cell} cell at the selected location.\n   * @param {number} x Column index.\n   * @param {number} y Row index.\n   */\n  self.getVisibleCellByIndex = function (x, y) {\n    return self.visibleCells.filter(function (c) {\n      return c.columnIndex === x && c.rowIndex === y;\n    })[0];\n  };\n  /**\n   * Get an unhide indicator at grid pixel coordinate x and y.\n   * @memberof canvasDatagrid\n   * @name getUnhideIndicator\n   * @method\n   * @param {number} x Number of pixels from the left.\n   * @param {number} y Number of pixels from the top.\n   */\n  self.getUnhideIndicator = function (x, y) {\n    const indicators = self.visibleUnhideIndicators;\n    if (indicators.length <= 0) return;\n    for (let i = 0; i < indicators.length; i++) {\n      const indicator = indicators[i];\n      if (\n        x >= indicator.x &&\n        y >= indicator.y &&\n        x <= indicator.x2 &&\n        y <= indicator.y2\n      )\n        return indicator;\n    }\n  };\n  /**\n   * Get a column group at grid pixel coordinate x and y.\n   * @memberof canvasDatagrid\n   * @name getColumnGroupAt\n   * @method\n   * @param {number} x Number of pixels from the left.\n   * @param {number} y Number of pixels from the top.\n   */\n  self.getColumnGroupAt = function (x, y) {\n    const groups = self.groupedColumns.length;\n    if (groups <= 0) return;\n    const yZero = self.getColumnGroupAreaHeight();\n    if (y >= yZero) return;\n    for (let i = 0; i < self.visibleGroups.length; i++) {\n      const g = self.visibleGroups[i];\n      if (g.type !== 'c') continue;\n      if (x >= g.x && y >= g.y && x <= g.x2 && y <= g.y2) return g;\n    }\n  };\n  /**\n   * Get a row group at grid pixel coordinate x and y.\n   * @memberof canvasDatagrid\n   * @name getRowGroupAt\n   * @method\n   * @param {number} x Number of pixels from the left.\n   * @param {number} y Number of pixels from the top.\n   */\n  self.getRowGroupAt = function (x, y) {\n    const groups = self.groupedRows.length;\n    if (groups <= 0) return;\n    const xZero = self.getRowGroupAreaWidth();\n    if (x >= xZero) return;\n    for (let i = 0; i < self.visibleGroups.length; i++) {\n      const g = self.visibleGroups[i];\n      if (g.type !== 'r') continue;\n      if (x >= g.x && y >= g.y && x <= g.x2 && y <= g.y2) return g;\n    }\n  };\n  /**\n   * Gets the cell at grid pixel coordinate x and y.  Author's note.  This function ties drawing and events together.  This is a very complex function and is core to the component.\n   * @memberof canvasDatagrid\n   * @name getCellAt\n   * @method\n   * @returns {cell} cell at the selected location.\n   * @param {number} x Number of pixels from the left.\n   * @param {number} y Number of pixels from the top.\n   */\n  self.getCellAt = function (x, y, useTouchScrollZones) {\n    function getBorder(entitiy) {\n      if (\n        entitiy.x + entitiy.width - self.attributes.borderResizeZone * 0.4 <\n          x &&\n        entitiy.x + entitiy.width + self.attributes.borderResizeZone * 0.6 > x\n      ) {\n        return 'r';\n      }\n      if (\n        entitiy.x - self.attributes.borderResizeZone * 0.4 < x &&\n        entitiy.x + self.attributes.borderResizeZone * 0.6 > x\n      ) {\n        return 'l';\n      }\n      if (\n        entitiy.y + entitiy.height - self.attributes.borderResizeZone * 0.4 <\n          y &&\n        entitiy.y + entitiy.height + self.attributes.borderResizeZone * 0.6 > y\n      ) {\n        return 'b';\n      }\n      if (\n        entitiy.y - self.attributes.borderResizeZone * 0.4 < y &&\n        entitiy.y + self.attributes.borderResizeZone * 0.6 > y\n      ) {\n        return 't';\n      }\n    }\n    if (!self.visibleCells) {\n      return;\n    }\n    x -= self.getRowGroupAreaWidth();\n    y -= self.getColumnGroupAreaHeight();\n\n    if (self.dragStartObject !== undefined) {\n      if (x <= 0) x = 1;\n      if (x >= self.width) x = self.width - 1;\n      if (y <= 0) y = 1;\n      if (y >= self.height) y = self.height - 1;\n    }\n\n    var border,\n      tsz = useTouchScrollZones ? self.attributes.touchScrollZone : 0,\n      moveMode = self.attributes.borderDragBehavior === 'move',\n      i,\n      l = self.visibleCells.length,\n      moveBorder,\n      xBorderBehavior = moveMode ? self.cursorGrab : 'ew-resize',\n      yBorderBehavior = moveMode ? self.cursorGrab : 'ns-resize',\n      cell,\n      entitiy;\n    if (!self.visibleCells || !self.visibleCells.length) {\n      return;\n    }\n    self.hasFocus = true;\n    if (!(y < self.height && y > 0 && x < self.width && x > 0)) {\n      self.hasFocus = false;\n      return {\n        dragContext: 'inherit',\n        context: 'inherit',\n      };\n    }\n    for (i = 0; i < l; i += 1) {\n      cell = self.visibleCells[i];\n      // interactive dimensions of the cell.  used for touch \"over size\" zones\n      entitiy = {\n        x: cell.x,\n        y: cell.y,\n        height: cell.height,\n        width: cell.width,\n      };\n      if (\n        useTouchScrollZones &&\n        /(vertical|horizontal)-scroll-/.test(cell.style)\n      ) {\n        entitiy.x -= tsz;\n        entitiy.y -= tsz;\n        entitiy.height += tsz;\n        entitiy.width += tsz;\n      }\n      if (\n        entitiy.x - self.style.cellBorderWidth < x &&\n        entitiy.x + entitiy.width + self.style.cellBorderWidth > x &&\n        entitiy.y - self.style.cellBorderWidth < y &&\n        entitiy.y + entitiy.height + self.style.cellBorderWidth > y\n      ) {\n        if (/frozen-row-marker/.test(cell.style)) {\n          if (self.dragMode === 'frozen-column-marker') continue;\n          cell.dragContext = cell.style;\n          cell.context = 'grab';\n          return cell;\n        }\n        if (/frozen-column-marker/.test(cell.style)) {\n          if (self.dragMode === 'frozen-row-marker') continue;\n          cell.dragContext = cell.style;\n          cell.context = 'grab';\n          return cell;\n        }\n        if (/selection-handle-/.test(cell.style)) {\n          cell.dragContext = cell.style;\n          cell.context = 'crosshair';\n          return cell;\n        }\n        if (/vertical-scroll-(bar|box)/.test(cell.style)) {\n          cell.dragContext = 'vertical-scroll-box';\n          cell.context = 'vertical-scroll-box';\n          cell.isScrollBar = true;\n          cell.isVerticalScrollBar = true;\n          if (y > self.scrollBox.box.v.y + self.scrollBox.scrollBoxHeight) {\n            cell.dragContext = 'vertical-scroll-bottom';\n            cell.context = 'vertical-scroll-bottom';\n          } else if (y < self.scrollBox.box.v.y) {\n            cell.dragContext = 'vertical-scroll-top';\n            cell.context = 'vertical-scroll-top';\n          }\n          self.cursor = 'default';\n          return cell;\n        }\n        if (/horizontal-scroll-(bar|box)/.test(cell.style)) {\n          cell.dragContext = 'horizontal-scroll-box';\n          cell.context = 'horizontal-scroll-box';\n          cell.isScrollBar = true;\n          cell.isHorizontalScrollBar = true;\n          if (x > self.scrollBox.box.h.x + self.scrollBox.scrollBoxWidth) {\n            cell.dragContext = 'horizontal-scroll-right';\n            cell.context = 'horizontal-scroll-right';\n          } else if (x < self.scrollBox.box.h.x) {\n            cell.dragContext = 'horizontal-scroll-left';\n            cell.context = 'horizontal-scroll-left';\n          }\n          self.cursor = 'default';\n          return cell;\n        }\n        border = getBorder(entitiy);\n        // check if the border of this cell is the border of the selection and if so show move cursor in move mode\n        moveBorder =\n          moveMode &&\n          cell.selectionBorder &&\n          cell.selectionBorder.indexOf(border) !== -1;\n        if (\n          ['l', 'r'].indexOf(border) !== -1 &&\n          (self.attributes.allowColumnResize || moveBorder) &&\n          ((self.attributes.allowColumnResizeFromCell && cell.isNormal) ||\n            !cell.isNormal ||\n            moveBorder) &&\n          ((self.attributes.allowRowHeaderResize &&\n            (cell.isRowHeader || cell.isCorner)) ||\n            !(cell.isRowHeader && cell.isCorner))\n        ) {\n          if (\n            (cell.isColumnHeader ||\n              cell.isCorner ||\n              (self.attributes.allowColumnResizeFromCell && cell.isNormal)) &&\n            border === 'r'\n          ) {\n            cell.context = 'ew-resize';\n            cell.dragContext = 'ew-resize';\n            return cell;\n          }\n          if (!(cell.isColumnHeader || cell.isCorner) && moveBorder) {\n            cell.context = xBorderBehavior;\n            cell.dragContext = border + '-move';\n            return cell;\n          }\n        }\n        if (\n          ['t', 'b'].indexOf(border) !== -1 &&\n          cell.rowIndex > -1 &&\n          (self.attributes.allowRowResize || moveBorder) &&\n          ((self.attributes.allowRowResizeFromCell && cell.isNormal) ||\n            !cell.isNormal ||\n            moveBorder) &&\n          !cell.isColumnHeader\n        ) {\n          if (\n            (cell.isRowHeader ||\n              cell.isCorner ||\n              (self.attributes.allowRowResizeFromCell && cell.isNormal)) &&\n            border === 'b'\n          ) {\n            cell.context = 'ns-resize';\n            cell.dragContext = 'ns-resize';\n            return cell;\n          }\n          if (!(cell.isRowHeader || cell.isCorner) && moveBorder) {\n            cell.context = yBorderBehavior;\n            cell.dragContext = border + '-move';\n            return cell;\n          }\n        }\n        if (cell.style === 'columnHeaderCell') {\n          if (\n            (!self.isColumnSelected(cell.columnIndex) &&\n              cell.x +\n                cell.width -\n                self.attributes.columnGrabZoneSize -\n                self.style.cellBorderWidth >\n                x) ||\n            !self.attributes.allowRowReordering\n          ) {\n            cell.dragContext = 'cell';\n            cell.context = 'cell';\n          } else {\n            cell.context = self.cursorGrab;\n            cell.dragContext = 'column-reorder';\n          }\n          return cell;\n        }\n        if (cell.style === 'rowHeaderCell') {\n          if (\n            (!self.isRowSelected(cell.rowIndex) &&\n              self.attributes.rowGrabZoneSize +\n                (cell.y - self.style.cellBorderWidth) <\n                y) ||\n            !self.attributes.allowRowReordering\n          ) {\n            cell.dragContext = 'cell';\n            cell.context = 'cell';\n          } else {\n            cell.context = self.cursorGrab;\n            cell.dragContext = 'row-reorder';\n          }\n          return cell;\n        }\n        if (cell.isGrid) {\n          self.hasFocus = false;\n          cell.dragContext = 'cell-grid';\n          cell.context = 'cell-grid';\n          return cell;\n        }\n        if (cell.style === 'tree-grid') {\n          self.hasFocus = false;\n          cell.dragContext = 'tree';\n          cell.context = 'tree';\n          return cell;\n        }\n        cell.dragContext = 'cell';\n        cell.context = 'cell';\n        return cell;\n      }\n    }\n    self.hasFocus = true;\n    self.cursor = 'default';\n    return {\n      dragContext: 'background',\n      context: 'background',\n      style: 'background',\n      isBackground: true,\n    };\n  };\n  /**\n   * Returns an auto generated schema based on data structure.\n   * @memberof canvasDatagrid\n   * @name getSchemaFromData\n   * @method\n   * @tutorial schema\n   * @returns {schema} schema A schema based on the first item in the data array.\n   */\n  self.getSchemaFromData = function (d) {\n    d = d || self.originalData;\n    return Object.keys(d[0] || { ' ': '' }).map(function mapEachSchemaColumn(\n      key,\n      index,\n    ) {\n      var type = self.getBestGuessDataType(key, d),\n        i = {\n          name: key,\n          title: isNaN(parseInt(key, 10))\n            ? key\n            : self.integerToAlpha(key).toUpperCase(),\n          index: index,\n          columnIndex: index,\n          type: type,\n          filter: self.filter(type),\n        };\n      if (\n        self.storedSettings &&\n        self.storedSettings.visibility &&\n        self.storedSettings.visibility[i.name] !== undefined\n      ) {\n        i.hidden = !self.storedSettings.visibility[i.name];\n      }\n      return i;\n    });\n  };\n  /**\n   * Clears the change log grid.changes that keeps track of changes to the data set.\n   * This does not undo changes or alter data it is simply a convince array to keep\n   * track of changes made to the data since last this method was called.\n   * @memberof canvasDatagrid\n   * @name clearChangeLog\n   * @method\n   */\n  self.clearChangeLog = function () {\n    self.changes = [];\n  };\n  /**\n   * Returns the maximum text width for a given column by column name.\n   * @memberof canvasDatagrid\n   * @name findColumnMaxTextLength\n   * @method\n   * @returns {number} The number of pixels wide the maximum width value in the selected column.\n   * @param {string} name The name of the column to calculate the value's width of.\n   */\n  self.findColumnMaxTextLength = function (name) {\n    var m = -Infinity;\n    if (name === 'cornerCell') {\n      self.ctx.font = self.style.rowHeaderCellFont;\n      return (\n        self.ctx.measureText(\n          (\n            self.viewData.length + (self.attributes.showNewRow ? 1 : 0)\n          ).toString(),\n        ).width +\n        self.style.autosizePadding +\n        self.style.autosizeHeaderCellPadding +\n        self.style.rowHeaderCellPaddingRight +\n        self.style.rowHeaderCellPaddingLeft +\n        (self.attributes.tree\n          ? self.style.treeArrowWidth +\n            self.style.treeArrowMarginLeft +\n            self.style.treeArrowMarginRight\n          : 0)\n      );\n    }\n    var formatter = null;\n    self.getSchema().forEach(function (col) {\n      if (col.name !== name) {\n        return;\n      }\n      self.ctx.font = self.style.columnHeaderCellFont;\n      var t =\n        self.ctx.measureText(col.title || col.name).width +\n        self.style.columnHeaderCellPaddingRight +\n        self.style.columnHeaderCellPaddingLeft +\n        self.style.cellAutoResizePadding;\n      m = t > m ? t : m;\n      formatter = self.formatters[col.type];\n    });\n    self.viewData.forEach(function (row) {\n      var text = row[name];\n      if (formatter) {\n        text = formatter({ cell: { value: text } });\n      }\n      self.ctx.font = self.style.cellFont;\n      var t =\n        self.ctx.measureText(text).width +\n        self.style.cellPaddingRight +\n        self.style.cellPaddingLeft +\n        self.style.cellAutoResizePadding;\n      m = t > m ? t : m;\n    });\n    return m;\n  };\n  /**\n   * Gets the total width of all header columns.\n   * @memberof canvasDatagrid\n   * @name getHeaderWidth\n   * @method\n   */\n  self.getHeaderWidth = function () {\n    return self.getVisibleSchema().reduce(function (total, header) {\n      return total + parseInt(header.width || self.style.cellWidth, 10);\n    }, 0);\n  };\n  /**\n   * Gets the height of a row by index.\n   * @memberof canvasDatagrid\n   * @name getRowHeight\n   * @method\n   * @param {number} rowIndex The row index to lookup.\n   */\n  self.getRowHeight = function (rowIndex) {\n    return (self.sizes.rows[rowIndex] || self.style.cellHeight) * self.scale;\n  };\n  /**\n   * Gets the width of a column by index.\n   * @memberof canvasDatagrid\n   * @name getColumnWidth\n   * @method\n   * @param {number} columnIndex The column index to lookup.\n   */\n  self.getColumnWidth = function (columnIndex) {\n    return (\n      (self.sizes.columns[columnIndex] ||\n        self.getSchema()[columnIndex].width ||\n        self.style.cellWidth) * self.scale\n    );\n  };\n  self.formatters.string = function cellFormatterString(e) {\n    return e.cell.value !== undefined ? e.cell.value : '';\n  };\n  self.formatters.rowHeaderCell = self.formatters.string;\n  self.formatters.headerCell = self.formatters.string;\n  self.formatters.number = self.formatters.string;\n  self.formatters.int = self.formatters.string;\n  self.formatters.html = self.formatters.string;\n  self.sorters.string = function (columnName, direction) {\n    var asc = direction === 'asc';\n    return function (a, b) {\n      const aValue = a[columnName] || '';\n      const bValue = b[columnName] || '';\n      if (asc) {\n        if (!aValue.localeCompare) {\n          return 1;\n        }\n        return aValue.localeCompare(bValue);\n      }\n      if (!bValue.localeCompare) {\n        return 1;\n      }\n      return bValue.localeCompare(aValue);\n    };\n  };\n  self.sorters.number = function (columnName, direction) {\n    var asc = direction === 'asc';\n    return function (a, b) {\n      if (asc) {\n        return a[columnName] - b[columnName];\n      }\n      return b[columnName] - a[columnName];\n    };\n  };\n  self.sorters.date = function (columnName, direction) {\n    var asc = direction === 'asc';\n    return function (a, b) {\n      if (asc) {\n        return (\n          new Date(a[columnName]).getTime() - new Date(b[columnName]).getTime()\n        );\n      }\n      return (\n        new Date(b[columnName]).getTime() - new Date(a[columnName]).getTime()\n      );\n    };\n  };\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false, Event: false*/\n/// <reference path=\"./type.d.ts\" />\n'use strict';\n\nimport { createHTMLString, createTextString } from '../events/util';\nimport {\n  addIntoSelections,\n  areSelectionsComplex,\n  areSelectionsNeat,\n  cleanupSelections,\n  cloneSelections,\n  getSelectedContiguousColumns,\n  getSelectedContiguousRows,\n  getSelectionBounds,\n  getSelectionStateFromCells,\n  isCellSelected,\n  isColumnSelected,\n  isRowSelected,\n  moveSelections,\n  normalizeSelection,\n  removeFromSelections,\n  SelectionType,\n  shrinkOrExpandSelections,\n} from './util';\n\n/**\n * Before reading the code of this module, you must know these things:\n *\n * You may see words like \"obsolete\", \"old API\", \"compatibility\" in the code later.\n * Because this grid component has used a different selection mechanism in the past.\n *\n * The old mechanism use a 2D array to represent the selection state.\n * For example: `[undefined x 10, [0, 5]]` indicates\n * there are two cells are selected in current grid. they are located in row 11.\n * and one in column 1, another in column 6.\n * And `[undefined x 5, [-1, 0,1,2,3,4,5,6...], undefined x 2, [1]]` indicates\n * the row 6 is selected and the cell that located in row 9 column 2 is selected.\n *\n * But this implementation has performance issue when the grid is shipping a large dataset.\n * You can just imagine about what will happen when you select all cells in a grid with 1 million rows.\n *\n * So we create a new way to implement the selection.\n * In this way, we use a selection list to represent the selection state.\n * Each element in this selection list is a selection descriptor.\n * Each descriptor represents an area whose selected or unselected by the user.\n * And we have four types for the descriptor: UnselectedCells, Cells, Rows and Columns\n *\n * Because the old selection mechanism has been in used for a long time and\n * we have many public APIs about it.\n * We still need to keep these APIs working in the 0.x versions in the future.\n * So we create some functions to make sure these APIs and context objects work like previous version.\n * This is the reason why you may see there are some functions in this file\n * be marked \"for compatibility\" without best practice.\n */\nexport default function (self) {\n  /**\n   * Here are explanation for the item of this array:\n   *\n   * The type of properties about the row in it is viewRowIndex (startRow, endRow).\n   * Here is an example of accessing the row data from the selection object:\n   * `const rowData = originalData[self.getBoundRowIndexFromViewRowIndex(selection.startRow)]`\n   *\n   * The type of properties about the column in it is columnOrderIndex (startColumn, endColumn)\n   * Here is an example of accessing thr column schema from the selection object:\n   * `const columnSchema = schema[self.orders.columns[selection.startColumn]]`\n   * @type {SelectionDescriptor[]}\n   */\n  self.selections = [];\n\n  /**\n   * TODO support the cache\n   */\n  self.selectionCache = [];\n  self.selectionCacheWidth = 0;\n  self.selectionCacheHeight = 0;\n\n  /**\n   * This method is used for adapting old API and it has performance issue for the large data set.\n   * We should keep this function and its related functions until version 1.x,\n   * because this action can cause incompatible API changes <https://semver.org/>\n   *\n   * Generate a selection 2 dimensional array from the selection list.\n   * Each row in this 2D array is a number array that indicates which columns are selected in this row.\n   * And -1 in the result means entire cells are selected in particular row/column\n   *\n   * @param {object[]} [otherSelections] The function create a 2d array based on this selection list\n   * if this parameter is provided. Otherwise, this function uses self.selections as the list input.\n   * @returns {number[][]}\n   */\n  self.getObsoleteSelectionMatrix = (otherSelections) => {\n    const bounds = self.getSelectionBounds(true, otherSelections);\n    if (!bounds) return [];\n    const { top, bottom, left, right } = bounds;\n    const height = bottom - top + 1;\n    const width = right - left + 1;\n    const states = getSelectionStateFromCells(self.selections, {\n      startRow: top,\n      endRow: bottom,\n      startColumn: left,\n      endColumn: right,\n    });\n    if (states === false) return [];\n\n    const result = [];\n    for (let row = top, row2 = top + height; row < row2; row++) {\n      if (states === true) {\n        result[row] = new Array(width).fill(0).map((_, i) => left + i);\n        continue;\n      }\n\n      const rowState = states[row - top];\n      if (!rowState) continue;\n      result[row] = [];\n      for (let col = left, col2 = left + width; col < col2; col++) {\n        if (rowState !== true && !rowState[col - left]) continue;\n        result[row].push(col);\n      }\n    }\n    for (let i = 0; i < self.selections.length; i++) {\n      const selection = self.selections[i];\n      if (selection.type !== SelectionType.Rows) continue;\n      for (let row = selection.startRow; row <= selection.endRow; row++) {\n        if (!result[row]) {\n          result[row] = [-1];\n          continue;\n        }\n        if (result[row][0] === -1) continue;\n        result[row].unshift(-1);\n      }\n    }\n    return result;\n  };\n\n  /**\n   * Return a tuple if the user selected contiguous columns, otherwise `null`.\n   * Info: Because the user may reorder the columns,\n   * the schemaIndex of the first item may be greater than the schemaIndex of the second item,\n   * but the columnIndex of the firs item must less than the columnIndex of the second item.\n   * @param {object[]} [schema] from `self.getSchema()`\n   * @returns {object[]} column schemas tuple (each schema has an additional field `schemaIndex`)\n   */\n  self.getSelectedContiguousColumns = function (schema) {\n    if (!schema) schema = self.getSchema();\n    const columnOrderIndexes = getSelectedContiguousColumns(\n      self.selections,\n      false,\n    );\n    if (!Array.isArray(columnOrderIndexes)) return;\n\n    /** @type {number[]} orders[index] => columnIndex */\n    const orders = self.orders.columns;\n    return columnOrderIndexes.map((orderIndex) => {\n      const schemaIndex = orders[orderIndex];\n      const columnSchema = schema[schemaIndex];\n      return Object.assign({}, columnSchema, { orderIndex });\n    });\n  };\n\n  /**\n   * @param {boolean} [allowOnlyOneRow]\n   * @returns {number[]} a viewRowIndex tuple. It can contains one row index or two row indexes.\n   */\n  self.getSelectedContiguousRows = function (allowOnlyOneRow) {\n    const viewRowIndexes = getSelectedContiguousRows(self.selections, false);\n    if (!Array.isArray(viewRowIndexes)) return;\n    if (!allowOnlyOneRow && viewRowIndexes[0] === viewRowIndexes[1]) return;\n    return viewRowIndexes;\n  };\n\n  /**\n   * Check if current selection are copyable for the system clipbaord\n   * @returns {boolean}\n   */\n  self.canSelectionsBeCopied = function () {\n    return self.selections.length > 0 && !areSelectionsComplex(self.selections);\n  };\n\n  /**\n   * Return the height of the selection area.\n   * This function is used for rendering the overlay for the dnd(drag and drop)\n   * @returns {number} The height of the selection area\n   */\n  self.getSelectedRowsHeight = function () {\n    const selected = getSelectedContiguousRows(self.selections, true);\n    if (!selected) return 0;\n    let height = 0;\n    for (let row = selected[0]; row <= selected[1]; row++)\n      height += self.getRowHeight(row);\n    return height;\n  };\n\n  /**\n   * Return the width of the selection area.\n   * This function is used for rendering the overlay for the dnd(drag and drop)\n   * @returns {number} The width of the selection area\n   */\n  self.getSelectedColumnsWidth = function () {\n    const selected = getSelectedContiguousColumns(self.selections, true);\n    if (!selected) return 0;\n    let width = 0;\n    for (let col = selected[0]; col <= selected[1]; col++)\n      width += self.getColumnWidth(self.orders.columns[col]);\n    return width;\n  };\n\n  /**\n   * @param {object} cell This method needs two properties in this parameter: `rowIndex`\n   * and `viewColumnIndex`\n   */\n  self.isCellSelected = (cell) => {\n    return isCellSelected(self.selections, cell.rowIndex, cell.viewColumnIndex);\n  };\n\n  /**\n   * Returns true if the selected columnIndex is selected on every row.\n   * @memberof canvasDatagrid\n   * @name isColumnSelected\n   * @method\n   * @param {number} columnIndex The column index to check.\n   */\n  self.isColumnSelected = (viewColumnIndex) => {\n    if (typeof viewColumnIndex !== 'number') return false;\n    return isColumnSelected(self.selections, viewColumnIndex);\n  };\n\n  /**\n   * Returns true if the selected rowIndex is selected on every column.\n   * @memberof canvasDatagrid\n   * @name isRowSelected\n   * @method\n   * @param {number} rowIndex The row index to check.\n   */\n  self.isRowSelected = (rowIndex) => {\n    if (typeof rowIndex !== 'number') return false;\n    return isRowSelected(self.selections, rowIndex);\n  };\n\n  /**\n   * Removes the selection.\n   * @param {boolean} triggerEvent true for trigger a event\n   */\n  self.clearSelections = (triggerEvent) => {\n    self.selections = [];\n    if (triggerEvent) self.dispatchSelectionChangedEvent();\n  };\n\n  /**\n   * Removes the selection.\n   * @memberof canvasDatagrid\n   * @name selectNone\n   * @param {boolean} dontDraw Suppress the draw method after the selection change.\n   * @method\n   */\n  self.selectNone = (dontDraw) => {\n    self.clearSelections(true);\n    if (dontDraw) return;\n    self.draw();\n  };\n\n  /**\n   * Selects every visible cell.\n   * @memberof canvasDatagrid\n   * @name selectAll\n   * @param {boolean} dontDraw Suppress the draw method after the selection change.\n   * @method\n   */\n  self.selectAll = function (dontDraw) {\n    const changed = addIntoSelections(self.selections, {\n      type: SelectionType.Columns,\n      startColumn: 0,\n      endColumn: self.getSchema().length - 1,\n    });\n    if (!changed || dontDraw) return;\n    self.draw();\n  };\n\n  /**\n   * @param {object} cell This method needs two properties in this parameter: `rowIndex`\n   * and `viewColumnIndex`\n   * @param {boolean} [suppressEvent]\n   */\n  self.unselectCell = (cell, suppressEvent) => {\n    const result = removeFromSelections(\n      self.selections,\n      normalizeSelection({\n        type: SelectionType.Cells,\n        startRow: cell.rowIndex,\n        startColumn: cell.viewColumnIndex,\n      }),\n    );\n    if (result && !suppressEvent) self.dispatchSelectionChangedEvent();\n    return result;\n  };\n\n  /**\n   * @param {number} startRow rowViewIndex\n   * @param {number} endRow rowViewIndex\n   * @param {boolean} suppressEvent When true, prevents the `selectionchanged` event from firing.\n   * @returns {boolean} It returns whether the selection changed\n   */\n  self.unselectRows = (startRow, endRow, suppressEvent) => {\n    const result = removeFromSelections(\n      self.selections,\n      normalizeSelection({\n        type: SelectionType.Rows,\n        startRow: startRow,\n        endRow: endRow,\n      }),\n    );\n    if (result && !suppressEvent) self.dispatchSelectionChangedEvent();\n    return result;\n  };\n\n  /**\n   * @param {object} cell This method needs two properties in this parameter: `rowIndex`\n   * and `viewColumnIndex`\n   * @param {boolean} [suppressEvent]\n   */\n  self.selectCell = (cell, suppressEvent) => {\n    const result = addIntoSelections(\n      self.selections,\n      normalizeSelection({\n        type: SelectionType.Cells,\n        startRow: cell.rowIndex,\n        startColumn: cell.viewColumnIndex,\n      }),\n    );\n    if (result && !suppressEvent) self.dispatchSelectionChangedEvent();\n    return result;\n  };\n\n  /**\n   * Moves the current selection relative to the its current position.  Note: this method does not move the selected data, just the selection itself.\n   * @memberof canvasDatagrid\n   * @name moveSelection\n   * @method\n   * @param {number} offsetX The number of columns to offset the selection.\n   * @param {number} offsetY The number of rows to offset the selection.\n   */\n  self.moveSelection = function (offsetX, offsetY) {\n    moveSelections(self.selections, offsetX, offsetY);\n  };\n\n  /**\n   * Dispatch a event named `selectionchanged` with context info\n   */\n  self.dispatchSelectionChangedEvent = () => {\n    self.dispatchEvent('selectionchanged', self.getContextOfSelectionEvent());\n  };\n\n  /**\n   * Return the event context for event `selectionchanged`\n   * @returns {object} the context for the event\n   */\n  self.getContextOfSelectionEvent = () => {\n    const context = { selectionList: self.cloneSelections() };\n    //#region for API compatibility\n    Object.defineProperty(context, 'selections', {\n      get: function () {\n        return self.getObsoleteSelectionMatrix();\n      },\n    });\n    Object.defineProperty(context, 'selectedData', {\n      get: function () {\n        return self.getSelectedData();\n      },\n    });\n    Object.defineProperty(context, 'selectedCells', {\n      get: function () {\n        return self.getSelectedCells();\n      },\n    });\n    Object.defineProperty(context, 'selectionBounds', {\n      get: function () {\n        return self.getSelectionBounds();\n      },\n    });\n    //#endregion for API compatibility\n    return context;\n  };\n\n  /**\n   * Return a cloned selection list from current selection list\n   * @returns {object[]} A cloned selection list\n   */\n  self.cloneSelections = () => {\n    return cloneSelections(self.selections);\n  };\n\n  /**\n   * Gets the bounds of current selection.\n   * @param {boolean} [sanitized] sanitize the bound object if the value of thie paramater is `true`\n   * @memberof canvasDatagrid\n   * @name getSelectionBounds\n   * @method\n   * @returns {rect} two situations:\n   * 1. The result is always a bound object if `sanitized` is not `true`.\n   * And the result is `{top: Infinity, left: Infinity, bottom: -Infinity, right: -Infinity}` if there haven't selections.\n   * This is used for keeping compatibility with existing APIs.\n   * 2. When the parameter `sanitized` is true. The result will be null if there haven't selections.\n   */\n  self.getSelectionBounds = (sanitized, otherSelections) => {\n    const bounds = getSelectionBounds(otherSelections || self.selections);\n    if (sanitized) {\n      // nothing is selected\n      if (bounds.top > bounds.bottom || bounds.left > bounds.right) return null;\n      self.sanitizeSelectionBounds(bounds);\n    }\n    return bounds;\n  };\n  self.sanitizeSelectionBounds = (bounds) => {\n    if (!bounds) return bounds;\n    if (bounds.top < 0) bounds.top = 0;\n    if (bounds.left < 0) bounds.left = 0;\n\n    const viewDataLength = self.viewData.length;\n    if (bounds.bottom > viewDataLength) bounds.bottom = viewDataLength - 1;\n\n    const schemaLength = self.getSchema().length;\n    if (bounds.right > schemaLength) bounds.right = schemaLength - 1;\n    return bounds;\n  };\n\n  /**\n   * This function is migrated from the old API,\n   * It needs to be refactoring/deprecated to work with the large dataset.\n   * @param {boolean} [expandToRow]\n   * @returns {any[]}\n   */\n  self.getSelectedData = (expandToRow) => {\n    const bounds = self.getSelectionBounds(true);\n    if (!bounds) return [];\n\n    const selectedData = [];\n    const { top, bottom, left, right } = bounds;\n    const height = bottom - top + 1;\n    const width = right - left + 1;\n    const states = getSelectionStateFromCells(self.selections, {\n      startRow: top,\n      endRow: bottom,\n      startColumn: left,\n      endColumn: right,\n    });\n    if (states === false) return [];\n\n    const orderedSchema = getSchemaOrderByViewIndex(left, width);\n    for (let row = top, row2 = top + height; row < row2; row++) {\n      const viewData = self.viewData[row] || {};\n      const rowData = {};\n      let hasData = false;\n      const rowState = states === true || states[row - top];\n      if (!rowState) continue;\n\n      for (let col = left, col2 = left + width; col < col2; col++) {\n        if (states !== true && !rowState[col - left]) continue;\n        const header = orderedSchema[col];\n        if (!header || header.hidden) continue;\n        hasData = true;\n        if (expandToRow) break;\n        rowData[header.name] = viewData[header.name];\n      }\n      if (hasData)\n        selectedData[row] = expandToRow ? Object.assign({}, viewData) : rowData;\n    }\n    return selectedData;\n  };\n\n  /**\n   * This function is migrated from the old API,\n   * @param {boolean} [expandToRow]\n   * @returns {any[]}\n   */\n  self.getSelectedCells = (expandToRow) => {\n    const selectedCells = [];\n    const bounds = self.getSelectionBounds(true);\n    iterateSelectedCells(\n      (cell) => selectedCells.push(cell),\n      bounds,\n      expandToRow,\n    );\n    return selectedCells;\n  };\n\n  /**\n   * This function is migrated from the old API,\n   * @returns {any[]} affected cells\n   */\n  self.clearSelectedCells = () => {\n    const affectedCells = [];\n    const bounds = self.getSelectionBounds(true);\n    iterateSelectedCells(\n      (cell) => {\n        affectedCells.push(cell);\n        self.viewData[cell.viewRowIndex][cell.columnName] = '';\n      },\n      bounds,\n      false,\n    );\n    return affectedCells;\n  };\n\n  /**\n   * Deletes currently selected data.\n   * @memberof canvasDatagrid\n   * @name deleteSelectedData\n   * @method\n   * @param {boolean} dontDraw Suppress the draw method after the selection change.\n   */\n  self.deleteSelectedData = (dontDraw) => {\n    const affectedCells = self.clearSelectedCells();\n    const apiCompatibleCells = affectedCells.map((cell) => {\n      return [\n        cell.viewRowIndex,\n        cell.viewColumnIndex,\n        cell.boundRowIndex,\n        cell.boundColumnIndex,\n      ];\n    });\n    self.dispatchEvent('afterdelete', {\n      cells: apiCompatibleCells,\n    });\n    if (dontDraw) return;\n    requestAnimationFrame(() => self.draw());\n  };\n\n  /**\n   * Runs the defined method on each selected cell.\n   * @memberof canvasDatagrid\n   * @name forEachSelectedCell\n   * @method\n   * @param {number} fn The function to execute.  The signature of the function is: (data, rowIndex, columnName).\n   * @param {number} expandToRow When true the data in the array is expanded to the entire row.\n   */\n  self.forEachSelectedCell = function (fn, expandToRow) {\n    const bounds = self.getSelectionBounds(true);\n    iterateSelectedCells(\n      (cell) => fn(self.viewData, cell.viewRowIndex, cell.columnName, cell),\n      bounds,\n      expandToRow,\n    );\n  };\n\n  /**\n   * @param {ClipboardInterface} clipboardData\n   */\n  self.copySelectedCellsToClipboard = (clipboardData) => {\n    const isNeat = areSelectionsNeat(self.selections);\n    const selectedData = self.getSelectedData();\n    const data = selectedData.filter((row) => row != null);\n\n    if (data.length > 0) {\n      const textString = createTextString(data, isNeat);\n      const htmlString = createHTMLString(data, isNeat);\n\n      const copiedData = {\n        'text/plain': textString,\n        'text/html': htmlString,\n        'text/csv': textString,\n        'application/json': JSON.stringify(data),\n      };\n      for (const [mimeType, data] of Object.entries(copiedData)) {\n        clipboardData.setData(mimeType, data);\n      }\n    }\n  };\n\n  /**\n   * (This function is migrated from the old API)\n   * Modify the width of columns that contain selected cells to fit the content.\n   * @param {number} [width] Custom width for each column\n   */\n  self.fitSelectedColumns = (width) => {\n    const bounds = self.getSelectionBounds(true);\n    if (!bounds) return;\n\n    const hasCustomWidth = typeof width === 'number' && width > 0;\n    // convert rectangle's height to only 1 row\n    bounds.bottom = bounds.top;\n    iterateSelectedCells(\n      (cell) => {\n        const { columnName, viewColumnIndex } = cell;\n        if (hasCustomWidth) {\n          self.sizes.columns[viewColumnIndex] = width;\n          self.dispatchEvent('resizecolumn', {\n            // TODO: Drop x, y from all 'resizecolumn' events and use height and width instead.\n            x: width,\n            y: self.resizingStartingHeight,\n            width: width,\n            height: self.resizingStartingHeight,\n            columnIndex: viewColumnIndex,\n            draggingItem: self.currentCell,\n          });\n        } else {\n          self.fitColumnToValues(columnName);\n        }\n      },\n      bounds,\n      false,\n    );\n  };\n\n  /**\n   * Set the height of the selected rows to the given value.\n   * @param {number} [height]\n   */\n  self.fitSelectedRows = (height) => {\n    const bounds = self.getSelectionBounds(true);\n    if (!bounds) return;\n\n    for (let row = bounds.top; row <= bounds.bottom; row++) {\n      if (!self.isRowSelected(row)) {\n        continue;\n      }\n      self.sizes.rows[row] = height;\n      self.dispatchEvent('resizerow', {\n        width: self.resizingStartingWidth,\n        height: height,\n        rowIndex: row,\n        draggingItem: self.currentCell,\n      });\n    }\n  };\n\n  /**\n   * Selects a column.\n   * @memberof canvasDatagrid\n   * @name selectColumn\n   * @method\n   * @param {number} columnIndex The column index to select.\n   * @param {boolean} toggleSelectMode When true, behaves as if you were holding control/command when you clicked the column.\n   * @param {boolean} shift When true, behaves as if you were holding shift when you clicked the column.\n   * @param {boolean} suppressEvent When true, prevents the selectionchanged event from firing.\n   */\n  self.selectColumn = (columnIndex, ctrl, shift, suppressEvent) => {\n    self.isMultiRowsSelected = false;\n    self.isMultiColumnsSelected = false;\n    function addCol(i) {\n      addIntoSelections(\n        self.selections,\n        normalizeSelection({\n          type: SelectionType.Columns,\n          startColumn: i,\n        }),\n      );\n    }\n    function removeCol(i) {\n      removeFromSelections(\n        self.selections,\n        normalizeSelection({\n          type: SelectionType.Columns,\n          startColumn: i,\n        }),\n      );\n    }\n    if (shift) {\n      if (!self.activeCell) {\n        return;\n      }\n      const s = Math.min(self.activeCell.columnIndex, columnIndex);\n      const e = Math.max(self.activeCell.columnIndex, columnIndex);\n      addIntoSelections(\n        self.selections,\n        normalizeSelection({\n          type: SelectionType.Columns,\n          startColumn: s,\n          endColumn: e - 1,\n        }),\n      );\n      if (s != e) self.isMultiColumnsSelected = true;\n    }\n    if (!ctrl && !shift) {\n      self.selections = [];\n      self.activeCell.columnIndex = columnIndex;\n      self.activeCell.rowIndex = self.scrollIndexTop;\n    }\n    if (ctrl && self.isColumnSelected(columnIndex)) {\n      removeCol(columnIndex);\n    } else {\n      addCol(columnIndex);\n    }\n    if (suppressEvent) {\n      return;\n    }\n    self.dispatchSelectionChangedEvent();\n  };\n\n  /**\n   * Selects a row.\n   * @memberof canvasDatagrid\n   * @name selectRow\n   * @method\n   * @param {number} rowIndex The row index to select.\n   * @param {boolean} ctrl When true, behaves as if you were holding control/command when you clicked the row.\n   * @param {boolean} shift When true, behaves as if you were holding shift when you clicked the row.\n   * @param {boolean} supressSelectionchangedEvent When true, prevents the selectionchanged event from firing.\n   */\n  self.selectRow = (rowIndex, ctrl, shift, suppressEvent) => {\n    self.isMultiRowsSelected = false;\n    function de() {\n      if (suppressEvent) {\n        return;\n      }\n      self.dispatchSelectionChangedEvent();\n    }\n    function addRow(ri) {\n      addIntoSelections(\n        self.selections,\n        normalizeSelection({\n          type: SelectionType.Rows,\n          startRow: ri,\n        }),\n      );\n    }\n    if (self.dragAddToSelection === false || self.dragObject === undefined) {\n      if (isRowSelected(self.selections, rowIndex) && ctrl) {\n        removeFromSelections(\n          self.selections,\n          normalizeSelection({\n            type: SelectionType.Rows,\n            startRow: rowIndex,\n          }),\n        );\n        de();\n        return;\n      }\n    }\n    if (self.dragAddToSelection === true || self.dragObject === undefined) {\n      if (shift && self.dragObject === undefined) {\n        if (!self.activeCell) {\n          return;\n        }\n        const st = Math.min(self.activeCell.rowIndex, rowIndex);\n        const en = Math.max(self.activeCell.rowIndex, rowIndex);\n        addIntoSelections(\n          self.selections,\n          normalizeSelection({\n            type: SelectionType.Rows,\n            startRow: st,\n            endRow: en,\n          }),\n        );\n      } else {\n        addRow(rowIndex);\n      }\n    }\n    de();\n  };\n\n  /**\n   * @param {function} iterator signature: `(cell: any) => any`\n   * @param {object} bounds type: `{left:number;right:number;top:number;bottom:number}`\n   * @param {boolean} [expandToRow]\n   */\n  function iterateSelectedCells(iterator, bounds, expandToRow) {\n    if (!bounds) return;\n    const { top, bottom, left, right } = bounds;\n    const height = bottom - top + 1;\n    const width = right - left + 1;\n    const states = getSelectionStateFromCells(self.selections, {\n      startRow: top,\n      endRow: bottom,\n      startColumn: left,\n      endColumn: right,\n    });\n    if (states === false) return;\n\n    const orderedSchema = getSchemaOrderByViewIndex(left, width);\n    for (let row = top, row2 = top + height; row < row2; row++) {\n      const viewData = self.viewData[row] || {};\n      const rowState = states === true || states[row - top];\n      if (!rowState) continue;\n      for (let col = left, col2 = left + width; col < col2; col++) {\n        if (rowState !== true && !rowState[col - left]) continue;\n\n        const header = orderedSchema[col];\n        if (!header || (header.hidden && !expandToRow)) continue;\n\n        const cell = {\n          value: viewData[header.name],\n          header,\n          columnName: header.name,\n          boundRowIndex: self.getBoundRowIndexFromViewRowIndex(row),\n          boundColumnIndex: self.orders.columns[col],\n          viewRowIndex: row,\n          viewColumnIndex: col,\n        };\n        iterator(cell);\n      }\n    }\n  }\n\n  /**\n   * Selects an area of the grid.\n   * @memberof canvasDatagrid\n   * @name selectArea\n   * @method\n   * @param {rect} [bounds] A rect object representing the selected values.\n   * @param {boolean} [ctrl]\n   */\n  self.selectArea = function (bounds, ctrl) {\n    const schemaLength = self.getSchema().length;\n    if (bounds) {\n      if (bounds.right < 0) {\n        // patch for API compatibility\n        bounds.right = Math.max(schemaLength - 1, bounds.left, 0);\n      }\n      if (bounds.top > bounds.bottom || bounds.left > bounds.right)\n        throw new Error('Impossible selection area');\n      self.selectionBounds = self.sanitizeSelectionBounds(bounds);\n    }\n    let { top, bottom, left, right } = self.selectionBounds;\n    if (!ctrl) self.selections = [];\n\n    if (bottom >= self.viewData.length)\n      bottom = Math.max(self.viewData.length - 1, top);\n    if (top < -1 || left < -1 || right > schemaLength)\n      throw new Error('Impossible selection area');\n\n    /** @type {ContextForSelectionAction} */\n    const context = { rows: self.viewData.length, columns: schemaLength };\n    let changed = false;\n\n    // In original API, number -1 indicates selecting whole row or selecting while column.\n    if (top === -1) {\n      // select whole columns\n      const startColumn = Math.max(left, 0);\n      // left eq -1 means selecting all cells\n      const endRow =\n        left === -1 ? schemaLength - 1 : Math.min(right, schemaLength - 1);\n      changed = addIntoSelections(\n        self.selections,\n        normalizeSelection({\n          type: SelectionType.Columns,\n          startColumn: startColumn,\n          endColumn: endRow,\n        }),\n        context,\n      );\n    } else if (left === -1) {\n      // select whole rows\n      const startRow = Math.max(top, 0);\n      const endRow = Math.min(bottom, self.viewData.length - 1);\n      changed = addIntoSelections(\n        self.selections,\n        normalizeSelection({\n          type: SelectionType.Rows,\n          startRow: startRow,\n          endRow: endRow,\n        }),\n        context,\n      );\n    } else {\n      changed = addIntoSelections(\n        self.selections,\n        normalizeSelection({\n          type: SelectionType.Cells,\n          startRow: top,\n          endRow: bottom,\n          startColumn: left,\n          endColumn: right,\n        }),\n        context,\n      );\n    }\n    if (changed) self.dispatchSelectionChangedEvent();\n  };\n\n  /**\n   * This private method is using for make existing API about selection works.\n   * TODO: This method can be removed by a better way.\n   * @param {number} [rowIndex] 0 by default\n   * @returns {number[]|undefined}\n   */\n  self.getRowSelectionStates = (rowIndex) => {\n    if (typeof rowIndex !== 'number' || rowIndex < 0) rowIndex = 0;\n    const startColumn = 0;\n    const endRow = self.getSchema().length - 1;\n    const width = endRow - startColumn + 1;\n    const state = getSelectionStateFromCells(self.selections, {\n      startRow: rowIndex,\n      startColumn: startColumn,\n      endRow: rowIndex,\n      endColumn: endRow,\n    });\n    if (state === false) return;\n    if (state === true) return new Array(width).fill(true).map((_, i) => i);\n\n    const firstRow = state[0];\n    if (!firstRow) return;\n\n    const result = [];\n    for (let col = 0; col < firstRow.length; col++)\n      if (firstRow[col]) result.push(col);\n    return result;\n  };\n\n  /**\n   * Replace current selection list with new selection list\n   * @param {object[]} newSelections New selection list\n   */\n  self.replaceAllSelections = (newSelections) => {\n    cleanupSelections(newSelections);\n    self.selections = newSelections;\n  };\n\n  /**\n   * Select given columns and remove other existing selection area\n   * @param {number[]} viewIndexes A number array that represents column view indexes\n   */\n  self.selectColumnViewIndexes = (viewIndexes) => {\n    const selections = viewIndexes.map((col) => ({\n      type: SelectionType.Columns,\n      startColumn: col,\n      endRow: col,\n    }));\n    self.replaceAllSelections(selections);\n  };\n\n  /**\n   * This method will be a bottleneck in the future if this component\n   * need to ship large dataset. But why I wrote this function:\n   * 1. it is used for compatibility with existing APIs\n   * 2. this component still has a bottleneck on the selection even there is not this function.\n   * @returns {number[]}\n   */\n  self.getRowViewIndexesFromSelection = () => {\n    if (self.selections.length === 0) return [];\n    const bounds = getSelectionBounds(self.selections, true);\n    const result = [];\n    for (let rowIndex = bounds.top; rowIndex <= bounds.bottom; rowIndex++)\n      result.push(rowIndex);\n    return result;\n  };\n\n  /**\n   * @param {object} cell Signature: `{rowIndex:number;columnIndex:number}`\n   * @param {object} keyEvent Signature: `{key:string;shiftKey:boolean}`\n   * @param {boolean} [suppressEvent]\n   */\n  self.shrinkOrExpandSelections = (cell, keyEvent, suppressEvent) => {\n    const result = shrinkOrExpandSelections(self.selections, cell, keyEvent, {\n      columns: self.getSchema().length,\n      rows: self.viewData.length,\n    });\n    if (result && !suppressEvent) self.dispatchSelectionChangedEvent();\n    return result;\n  };\n\n  /**\n   * @param {number} [fromIndex]\n   * @param {number} [len]\n   */\n  function getSchemaOrderByViewIndex(fromIndex, len) {\n    const schema = self.getSchema();\n    const orderedSchema = [];\n    for (let col = fromIndex, col2 = fromIndex + len; col < col2; col++) {\n      const orderedIndex = self.orders.columns[col];\n      const header = schema[orderedIndex];\n      orderedSchema[col] = header;\n    }\n    return orderedSchema;\n  }\n\n  /**\n   * TODO: this function will be used for caching\n   * Concatenating two 2-dimensional array.\n   * It is simuliar with the method `concatenating` method of the Python module named `numpy`\n   * @template T\n   * @param {T[][]} a the first 2d array\n   * @param {T[][]} b the second 2d array\n   * @param {number} axis 1 implies that it is being done column-wise, otherwise row-wise\n   * @returns {T[][]}\n   */\n  function concatenate2DArray(a, b, axis) {\n    if (axis === 1) {\n      const result = new Array(a.length);\n      for (let i = 0; i < a.length; i++) {\n        const rowInA = a[i];\n        const rowInB = b[i];\n        result[i] = rowInA.concat(rowInB);\n      }\n    }\n    return a.concat(b);\n  }\n}\n","'use strict';\n//@ts-check\n/// <reference path=\"./type.d.ts\" />\n\n// Abbreviation in this file\n// - sel: selection\n// - sel0, sel1: If there are two selections in the parameters, these two names are for them.\n\n// Types of Selection\n// 0. (High Priority) Unselected cells from [startRow, startColumn] to [endRow, endColumn]\n// 1. Cells from [startRow, startColumn] to [endRow, endColumn]\n// 2. Rows from startRow to endRow\n// 3. Columns from startColumn to endColumn\n\nconst SelectionType = {\n  UnselectedCells: 0,\n  Cells: 1,\n  Rows: 2,\n  Columns: 3,\n};\n\n/**\n * Swap values between two properties in an object\n * @param {object} obj The object\n * @param {string} prop0 First property name\n * @param {string} prop1 Another property name\n */\nconst swapProps = (obj, prop0, prop1) => {\n  const t = obj[prop0];\n  obj[prop0] = obj[prop1];\n  obj[prop1] = t;\n};\n\n/**\n * This function transforms a selection object to normalized.\n * Here is the definition of **normalized selection object**:\n * - It contains these required properties: type, startRow, startColumn, endRow, endColumn\n * - Property `endRow` and property `endColumn` must exist even if their value are the same with `startRow` or `startColumn`.\n * - The value of `endRow` must be equals or greater than the value of `startRow`\n * - The value of `endColumn` must be equals or greater than the value of `startColumn`\n * @param {SelectionDescriptor} sel\n * @returns {SelectionDescriptor}\n */\nconst normalizeSelection = (sel) => {\n  if (!sel) return sel;\n  switch (sel.type) {\n    case SelectionType.UnselectedCells:\n    case SelectionType.Cells:\n      if (typeof sel.endRow !== 'number') sel.endRow = sel.startRow;\n      else if (sel.endRow < sel.startRow) swapProps(sel, 'startRow', 'endRow');\n\n      if (typeof sel.endColumn !== 'number') sel.endColumn = sel.startColumn;\n      else if (sel.endColumn < sel.startColumn)\n        swapProps(sel, 'startColumn', 'endColumn');\n\n      break;\n    case SelectionType.Rows:\n      if (typeof sel.endRow !== 'number') sel.endRow = sel.startRow;\n      else if (sel.endRow < sel.startRow) swapProps(sel, 'startRow', 'endRow');\n\n      break;\n    case SelectionType.Columns:\n      if (typeof sel.endColumn !== 'number') sel.endColumn = sel.startColumn;\n      else if (sel.endColumn < sel.startColumn)\n        swapProps(sel, 'startColumn', 'endColumn');\n\n      break;\n  }\n  return sel;\n};\n\n/**\n * Parse a string expression to a selection object. Here are some example expressions:\n * - cells:20,30-40,50\n * - row:5\n * - cols:5-9\n * @param {string} str\n * @returns {SelectionDescriptor}\n */\nconst getSelectionFromString = (str) => {\n  if (typeof str !== 'string') return;\n\n  const index = str.indexOf(':');\n  if (index < 0) return;\n\n  const type = str.slice(0, index);\n  const num = str\n    .slice(index + 1)\n    .split(/[,:;-]+/)\n    .map((it) => parseInt(it, 10));\n  switch (type) {\n    case 'cell':\n    case 'cells':\n    case '-cell':\n    case '-cells':\n      return normalizeSelection({\n        type: SelectionType[type[0] === '-' ? 'UnselectedCells' : 'Cells'],\n        startRow: num[0],\n        startColumn: num[1],\n        endRow: num[2],\n        endColumn: num[3],\n      });\n    case 'row':\n    case 'rows':\n      return normalizeSelection({\n        type: SelectionType.Rows,\n        startRow: num[0],\n        endRow: num[1],\n      });\n    case 'col':\n    case 'cols':\n      return normalizeSelection({\n        type: SelectionType.Columns,\n        startColumn: num[0],\n        endColumn: num[1],\n      });\n  }\n};\n\n/**\n * Check are two cells block the same\n * @param {SelectionDescriptor} block0\n * @param {SelectionDescriptor} block1\n * @returns {boolean}\n */\nconst isSameCellsBlock = (block0, block1) => {\n  return (\n    block0.startRow === block1.startRow &&\n    block0.endRow === block1.endRow &&\n    block0.startColumn === block1.startColumn &&\n    block0.endColumn === block1.endColumn\n  );\n};\n\n/**\n * This function is used in the function `mergeSelections`\n * @see mergeSelections\n * @param {SelectionDescriptor} cells\n * @param {SelectionDescriptor} rowsOrColumns\n * @returns {SelectionDescriptor}\n */\nconst mergeCellsIntoRowsOrColumns = (cells, rowsOrColumns) => {\n  if (rowsOrColumns.type === SelectionType.Rows) {\n    if (\n      cells.startRow >= rowsOrColumns.startRow &&\n      cells.endRow <= rowsOrColumns.endRow\n    )\n      return rowsOrColumns;\n    return;\n  }\n  if (\n    cells.startColumn >= rowsOrColumns.startColumn &&\n    cells.endColumn <= rowsOrColumns.endColumn\n  )\n    return rowsOrColumns;\n};\n\n/**\n * Merge two selection objects (Splicing, Containing)\n * @param {SelectionDescriptor} sel0\n * @param {SelectionDescriptor} sel1\n * @returns {SelectionDescriptor} A concatenated selection object based on `block0`.\n * Or `undefined` if they can't be concatenated\n */\nconst mergeSelections = (sel0, sel1) => {\n  if (sel0.type !== sel1.type) {\n    if (sel1.type <= SelectionType.Cells && sel0.type > SelectionType.Cells)\n      return mergeCellsIntoRowsOrColumns(sel1, sel0);\n    if (sel0.type <= SelectionType.Cells && sel1.type > SelectionType.Cells)\n      return mergeCellsIntoRowsOrColumns(sel0, sel1);\n    return;\n  }\n\n  /** These two selection objects may be concatenated horizontally */\n  const horizontalConcat =\n    sel0.type === SelectionType.Columns\n      ? true\n      : sel0.startRow === sel1.startRow && sel0.endRow === sel1.endRow;\n\n  /** These two selection objects may be concatenated vertically */\n  const verticalConcat =\n    sel0.type === SelectionType.Rows\n      ? true\n      : sel0.startColumn === sel1.startColumn &&\n        sel0.endColumn === sel1.endColumn;\n\n  if (horizontalConcat) {\n    // Are they the same\n    if (verticalConcat) return sel0;\n    // Are they neighbor\n    if (\n      sel1.startColumn > sel0.endColumn + 1 ||\n      sel1.endColumn < sel0.startColumn - 1\n    )\n      return;\n    return Object.assign({}, sel0, {\n      startColumn: Math.min(sel0.startColumn, sel1.startColumn),\n      endColumn: Math.max(sel0.endColumn, sel1.endColumn),\n    });\n  }\n\n  if (verticalConcat) {\n    // Are they neighbor\n    if (sel1.startRow > sel0.endRow + 1 || sel1.endRow < sel0.startRow - 1)\n      return;\n    return Object.assign({}, sel0, {\n      startRow: Math.min(sel0.startRow, sel1.startRow),\n      endRow: Math.max(sel0.endRow, sel1.endRow),\n    });\n  }\n\n  // Does one of them contain other one\n  if (\n    sel0.type === SelectionType.Cells ||\n    sel0.type === SelectionType.UnselectedCells\n  ) {\n    const intersection = getIntersection(sel0, sel1);\n    if (intersection) {\n      if (isSameCellsBlock(intersection, sel0)) return sel1;\n      if (isSameCellsBlock(intersection, sel1)) return sel0;\n    }\n  }\n};\n\n/**\n * Remove some rows from a rows selection\n * @param {SelectionDescriptor} selection It must be a selection with type as `Rows`\n * @param {SelectionDescriptor} remove It must be a selection with type as `Rows`\n * @returns {SelectionDescriptor[]} Returning a `undefined` represents parameter `remove` doesn't intersect with parameter `selection`\n */\nconst removePartOfRowsSelection = (selection, remove) => {\n  if (remove.endRow < selection.startRow) return;\n  if (remove.startRow > selection.endRow) return;\n  if (remove.startRow <= selection.startRow) {\n    // all rows of the selection is removed\n    if (remove.endRow >= selection.endRow) return [];\n    return [Object.assign({}, selection, { startRow: remove.endRow + 1 })];\n  }\n  if (remove.endRow >= selection.endRow)\n    return [Object.assign({}, selection, { endRow: remove.startRow - 1 })];\n  // the selection be divided into two parts\n  return [\n    Object.assign({}, selection, { endRow: remove.startRow - 1 }),\n    Object.assign({}, selection, { startRow: remove.endRow + 1 }),\n  ];\n};\n\n/**\n * Remove some columns from a columns selection\n * @param {object} selection It must be a selection with type as `Columns`\n * @param {object} remove It must be a selection with type as `Columns`\n * @returns {object[]} Returning a `undefined` represents parameter `remove` doesn't intersect with parameter `selection`\n */\nconst removePartOfColumnsSelection = (selection, remove) => {\n  if (remove.endColumn < selection.startColumn) return;\n  if (remove.startColumn > selection.endColumn) return;\n  if (remove.startColumn <= selection.startColumn) {\n    // all cols of the selection is removed\n    if (remove.endColumn >= selection.endColumn) return [];\n    return [\n      Object.assign({}, selection, { startColumn: remove.endColumn + 1 }),\n    ];\n  }\n  if (remove.endColumn >= selection.endColumn)\n    return [\n      Object.assign({}, selection, { endColumn: remove.startColumn - 1 }),\n    ];\n  // the selection be divided into two parts\n  return [\n    Object.assign({}, selection, { endColumn: remove.startColumn - 1 }),\n    Object.assign({}, selection, { startColumn: remove.endColumn + 1 }),\n  ];\n};\n\n/**\n * Remove a cells block from a cells selection\n * @param {SelectionDescriptor} selection It must be a selection with type as `Cells` or `UnselectedCells`\n * @param {SelectionDescriptor} remove It must be a selection\n * @returns {SelectionDescriptor[]} Returning a `undefined` represents parameter `remove` doesn't intersect with parameter `selection`\n */\nconst removePartOfCellsSelection = (selection, remove) => {\n  const intersect = getIntersection(selection, remove);\n  if (!intersect) return;\n  // all of cells in the selection are removed\n  if (isSameCellsBlock(selection, intersect)) return [];\n  const result = [];\n  let minStartRow = selection.startRow;\n  let maxEndRow = selection.endRow;\n  let maxEndColumn = selection.endColumn;\n  if (intersect.startRow > selection.startRow) {\n    // Top\n    result.push(\n      Object.assign({}, selection, { endRow: intersect.startRow - 1 }),\n    );\n    minStartRow = intersect.startRow;\n  }\n  if (intersect.endColumn < selection.endColumn) {\n    // Right\n    result.push(\n      Object.assign({}, selection, {\n        startRow: minStartRow,\n        startColumn: intersect.endColumn + 1,\n      }),\n    );\n    maxEndColumn = intersect.endColumn;\n  }\n  if (intersect.endRow < selection.endRow) {\n    // Bottom\n    result.push(\n      Object.assign({}, selection, {\n        endColumn: maxEndColumn,\n        startRow: intersect.endRow + 1,\n      }),\n    );\n    maxEndRow = intersect.endRow;\n  }\n  if (intersect.startColumn > selection.startColumn) {\n    // Bottom\n    result.push(\n      Object.assign({}, selection, {\n        startRow: minStartRow,\n        endRow: maxEndRow,\n        endColumn: intersect.startColumn - 1,\n      }),\n    );\n  }\n  return result;\n};\n\n/**\n * Get intersection of two selection object\n * @param {SelectionDescriptor} sel0\n * @param {SelectionDescriptor} sel1\n * @returns {SelectionDescriptor} a selection object or undefined\n */\nconst getIntersection = (sel0, sel1) => {\n  if (sel0.type > sel1.type) return getIntersection(sel1, sel0);\n  if (sel0.type <= SelectionType.Cells) {\n    if (sel1.type <= SelectionType.Cells) {\n      const startColumn = Math.max(sel0.startColumn, sel1.startColumn);\n      const endColumn = Math.min(sel0.endColumn, sel1.endColumn);\n      if (startColumn > endColumn) return;\n\n      const startRow = Math.max(sel0.startRow, sel1.startRow);\n      const endRow = Math.min(sel0.endRow, sel1.endRow);\n      if (startRow > endRow) return;\n\n      return {\n        type: SelectionType.Cells,\n        startRow: startRow,\n        startColumn: startColumn,\n        endRow: endRow,\n        endColumn: endColumn,\n      };\n    }\n    if (sel1.type === SelectionType.Rows) {\n      const startRow = Math.max(sel0.startRow, sel1.startRow);\n      const endRow = Math.min(sel0.endRow, sel1.endRow);\n      if (startRow > endRow) return;\n      return {\n        type: SelectionType.Cells,\n        startRow: startRow,\n        startColumn: sel0.startColumn,\n        endRow: endRow,\n        endColumn: sel0.endColumn,\n      };\n    } else {\n      // SelectionType.Columns\n      const startColumn = Math.max(sel0.startColumn, sel1.startColumn);\n      const endColumn = Math.min(sel0.endColumn, sel1.endColumn);\n      if (startColumn > endColumn) return;\n      return {\n        type: SelectionType.Cells,\n        startColumn: startColumn,\n        startRow: sel0.startRow,\n        endColumn: endColumn,\n        endRow: sel0.endRow,\n      };\n    }\n  }\n  if (sel0.type === SelectionType.Rows) {\n    if (sel1.type === SelectionType.Rows) {\n      const startRow = Math.max(sel0.startRow, sel1.startRow);\n      const endRow = Math.min(sel0.endRow, sel1.endRow);\n      if (startRow > endRow) return;\n      return { type: SelectionType.Rows, startRow: startRow, endRow: endRow };\n    } else {\n      // SelectionType.Columns\n      return {\n        type: SelectionType.Cells,\n        startRow: sel0.startRow,\n        startColumn: sel1.startColumn,\n        endRow: sel0.endRow,\n        endColumn: sel1.endColumn,\n      };\n    }\n  }\n  // SelectionType.Columns\n  const startColumn = Math.max(sel0.startColumn, sel1.startColumn);\n  const endColumn = Math.min(sel0.endColumn, sel1.endColumn);\n  if (startColumn > endColumn) return;\n  return {\n    type: SelectionType.Columns,\n    startColumn: startColumn,\n    endColumn: endColumn,\n  };\n};\n\n/**\n * Add a selection object into `selections` array. And there are two behaviours if this function:\n * - It appends a new selection object into the `selections` array\n * - It rewrites the selection item in the `selections` array (merge or change its type)\n *\n * @param {SelectionDescriptor[]} selections\n * @param {SelectionDescriptor} add Supported types: Cells, Rows, Columns\n * @param {ContextForSelectionAction} [context] Eg: {rows:1000, columns:1000}\n * @returns {boolean} is the selections array changed\n */\nconst addIntoSelections = (selections, add, context) => {\n  if (!add || typeof add.type !== 'number') return false;\n  if (add.type === SelectionType.Cells) {\n    for (let i = 0; i < selections.length; i++) {\n      const sel = selections[i];\n      if (sel.type === SelectionType.UnselectedCells) {\n        const parts = removePartOfCellsSelection(sel, add);\n        if (parts) {\n          selections.splice(i, 1, ...parts);\n          i += parts.length - 1;\n        }\n        continue;\n      }\n      if (sel.type === SelectionType.Cells) {\n        const parts = removePartOfCellsSelection(add, sel);\n        if (Array.isArray(parts)) {\n          let result = false;\n          for (let i = 0; i < parts.length; i++) {\n            const isChanged = addIntoSelections(selections, parts[i], context);\n            if (isChanged) result = true;\n          }\n          if (result) cleanupSelections(selections);\n          return result;\n        }\n      }\n    }\n\n    // has context info of the grid\n    if (context) {\n      const selectedAllRows =\n        add.startRow === 0 && add.endRow + 1 >= context.rows;\n      const selectedAllColumns =\n        add.startColumn === 0 && add.endColumn + 1 >= context.columns;\n      let isChanged0, isChanged1;\n      if (selectedAllRows) {\n        isChanged0 = addIntoSelections(\n          selections,\n          {\n            type: SelectionType.Columns,\n            startColumn: add.startColumn,\n            endColumn: add.endColumn,\n          },\n          context,\n        );\n      }\n      if (selectedAllColumns) {\n        isChanged1 = addIntoSelections(\n          selections,\n          {\n            type: SelectionType.Rows,\n            startRow: add.startRow,\n            endRow: add.endRow,\n          },\n          context,\n        );\n      }\n      if (selectedAllRows || selectedAllColumns)\n        return isChanged0 || isChanged1;\n    }\n\n    selections.push(add);\n    cleanupSelections(selections);\n    return true;\n  }\n  // end of cells selection\n\n  const isRowsSelection = add.type === SelectionType.Rows;\n  if (isRowsSelection || add.type === SelectionType.Columns) {\n    for (let i = 0; i < selections.length; i++) {\n      const sel = selections[i];\n      if (sel.type === SelectionType.UnselectedCells) {\n        const parts = removePartOfCellsSelection(\n          sel,\n          isRowsSelection\n            ? {\n                startRow: add.startRow,\n                endRow: add.endRow,\n                startColumn: 0,\n                endColumn: sel.endColumn,\n              }\n            : {\n                startColumn: add.startColumn,\n                endColumn: add.endColumn,\n                startRow: 0,\n                endRow: sel.endRow,\n              },\n        );\n        if (parts) {\n          selections.splice(i, 1, ...parts);\n          i += parts.length - 1;\n        }\n        continue;\n      }\n      if (sel.type !== add.type) continue;\n      // try to concat them\n      let merged = mergeSelections(sel, add);\n      if (merged) {\n        for (let j = i + 1; j < selections.length; j++) {\n          if (selections[j].type !== add.type) continue;\n          const newMerged = mergeSelections(selections[j], merged);\n          if (newMerged) {\n            selections.splice(j, 1);\n            j--;\n            merged = newMerged;\n          }\n        }\n        selections[i] = merged;\n        cleanupSelections(selections);\n        return true;\n      }\n    }\n    selections.push(add);\n    cleanupSelections(selections);\n    return true;\n  }\n  return false;\n};\n\n/**\n * Remove a selection area from `selections` array\n * @param {SelectionDescriptor[]} selections\n * @param {SelectionDescriptor} remove Supported types: Cells, Rows, Columns\n * @param {ContextForSelectionAction} [context] Eg: {rows:1000, columns:1000}\n * @returns {boolean} is the selections array changed\n */\nconst removeFromSelections = (selections, remove, context) => {\n  if (!remove || typeof remove.type !== 'number') return false;\n  if (remove.type === SelectionType.Cells) {\n    for (let i = 0; i < selections.length; i++) {\n      const sel = selections[i];\n      if (sel.type === SelectionType.UnselectedCells) {\n        const parts = removePartOfCellsSelection(remove, sel);\n        if (Array.isArray(parts)) {\n          let result = false;\n          for (let i = 0; i < parts.length; i++) {\n            const isChanged = removeFromSelections(\n              selections,\n              parts[i],\n              context,\n            );\n            if (isChanged) result = true;\n          }\n          if (result) cleanupSelections(selections);\n          return result;\n        }\n      }\n      if (sel.type === SelectionType.Cells) {\n        const parts = removePartOfCellsSelection(sel, remove);\n        if (parts) {\n          selections.splice(i, 1, ...parts);\n          i += parts.length - 1;\n        }\n        continue;\n      }\n    }\n    // has context info of the grid\n    if (context) {\n      const unselectedAllRows =\n        remove.startRow === 0 && remove.endRow + 1 >= context.rows;\n      const unselectedAllColumns =\n        remove.startColumn === 0 && remove.endColumn + 1 >= context.columns;\n      let isChanged0, isChanged1;\n      if (unselectedAllRows) {\n        isChanged0 = removeFromSelections(\n          selections,\n          {\n            type: SelectionType.Columns,\n            startColumn: remove.startColumn,\n            endColumn: remove.endColumn,\n          },\n          context,\n        );\n      }\n      if (unselectedAllColumns) {\n        isChanged1 = removeFromSelections(\n          selections,\n          {\n            type: SelectionType.Rows,\n            startRow: remove.startRow,\n            endRow: remove.endRow,\n          },\n          context,\n        );\n      }\n      if (unselectedAllRows || unselectedAllColumns)\n        return isChanged0 || isChanged1;\n    }\n\n    remove.type = SelectionType.UnselectedCells;\n    selections.unshift(remove);\n    cleanupSelections(selections);\n    return true;\n  }\n  // end of cells selection\n\n  const isRowsSelection = remove.type === SelectionType.Rows;\n  if (isRowsSelection || remove.type === SelectionType.Columns) {\n    let isChanged = false;\n    for (let i = 0; i < selections.length; i++) {\n      const sel = selections[i];\n      if (sel.type === SelectionType.Cells) {\n        const parts = removePartOfCellsSelection(\n          sel,\n          isRowsSelection\n            ? {\n                startRow: remove.startRow,\n                endRow: remove.endRow,\n                startColumn: 0,\n                endColumn: sel.endColumn,\n              }\n            : {\n                startColumn: remove.startColumn,\n                endColumn: remove.endColumn,\n                startRow: 0,\n                endRow: sel.endRow,\n              },\n        );\n        if (parts) {\n          selections.splice(i, 1, ...parts);\n          i += parts.length - 1;\n        }\n        continue;\n      }\n      if (sel.type === SelectionType.UnselectedCells) {\n        if (isRowsSelection) {\n          if (sel.startRow >= remove.startRow && sel.endRow <= remove.endRow) {\n            selections.splice(i, 1);\n            i--;\n          }\n        } else {\n          if (\n            sel.startColumn >= remove.startColumn &&\n            sel.endColumn <= remove.endColumn\n          ) {\n            selections.splice(i, 1);\n            i--;\n          }\n        }\n        continue;\n      }\n      if (sel.type === remove.type) {\n        const newSelection = isRowsSelection\n          ? removePartOfRowsSelection(sel, remove)\n          : removePartOfColumnsSelection(sel, remove);\n        if (!newSelection) continue;\n        isChanged = true;\n        selections.splice(i, 1, ...newSelection);\n        i += newSelection.length - 1;\n      } else {\n        isChanged = true;\n        /** @type {SelectionDescriptor} */\n        let newSelection;\n        if (sel.type === SelectionType.Rows) {\n          newSelection = {\n            type: SelectionType.UnselectedCells,\n            startColumn: remove.startColumn,\n            endColumn: remove.endColumn,\n            startRow: sel.startRow,\n            endRow: sel.endRow,\n          };\n        } else {\n          newSelection = {\n            type: SelectionType.UnselectedCells,\n            startRow: remove.startRow,\n            endRow: remove.endRow,\n            startColumn: sel.startColumn,\n            endColumn: sel.endColumn,\n          };\n        }\n        selections.unshift(newSelection);\n      }\n    }\n    if (isChanged) cleanupSelections(selections);\n    return isChanged;\n  }\n  return false;\n};\n\n/**\n * Clean up a selections array.\n * This function removes unnecessary selection object, and it tries to merge different selections.\n * @param {SelectionDescriptor[]} selections\n */\nconst cleanupSelections = (selections) => {\n  let unselect = [];\n  let select = [];\n  for (let i = 0; i < selections.length; i++) {\n    const sel = selections[i];\n    if (sel.type === SelectionType.UnselectedCells) unselect.push(sel);\n    else select.push(sel);\n  }\n  // clean unused unselected objects\n  unselect = unselect.filter((unsel) => {\n    for (let i = 0; i < select.length; i++)\n      if (getIntersection(unsel, select[i])) return true;\n    return false;\n  });\n  // merge neighbor cells block selections\n  let endMerge = false;\n  while (!endMerge) {\n    endMerge = true;\n    for (let i = 0; i < select.length; i++) {\n      const sel0 = select[i];\n      for (let j = i + 1; j < select.length; j++) {\n        const sel1 = select[j];\n        const newSel = mergeSelections(sel0, sel1);\n        if (!newSel) continue;\n        select[i] = newSel;\n        select.splice(j, 1);\n        endMerge = false;\n        break;\n      }\n      if (!endMerge) break;\n    }\n  }\n  // save back to `selections`\n  let ptr = 0;\n  for (let i = 0; i < unselect.length; i++) selections[ptr++] = unselect[i];\n  for (let i = 0; i < select.length; i++) selections[ptr++] = select[i];\n  selections.splice(ptr, selections.length - ptr);\n};\n\n/**\n * Check if all cells in a given row selected\n * @param {SelectionDescriptor[]} selections\n * @param {number} rowIndex\n */\nconst isRowSelected = (selections, rowIndex) => {\n  for (let i = 0; i < selections.length; i++) {\n    const sel = selections[i];\n    switch (sel.type) {\n      case SelectionType.UnselectedCells:\n        if (rowIndex >= sel.startRow && rowIndex <= sel.endRow) return false;\n        break;\n      case SelectionType.Rows:\n        if (rowIndex >= sel.startRow && rowIndex <= sel.endRow) return true;\n    }\n  }\n  return false;\n};\n\n/**\n * Check if all cells in a given column selected\n * @param {SelectionDescriptor[]} selections\n * @param {number} columnIndex\n */\nconst isColumnSelected = (selections, columnIndex) => {\n  for (let i = 0; i < selections.length; i++) {\n    const sel = selections[i];\n    switch (sel.type) {\n      case SelectionType.UnselectedCells:\n        if (columnIndex >= sel.startColumn && columnIndex <= sel.endColumn)\n          return false;\n        break;\n      case SelectionType.Columns:\n        if (columnIndex >= sel.startColumn && columnIndex <= sel.endColumn)\n          return true;\n    }\n  }\n  return false;\n};\n\n/**\n * Check if a given cell selected\n * @param {SelectionDescriptor[]} selections\n * @param {number} rowIndex\n * @param {number} columnIndex\n */\nconst isCellSelected = (selections, rowIndex, columnIndex) => {\n  for (let i = 0; i < selections.length; i++) {\n    const sel = selections[i];\n    switch (sel.type) {\n      case SelectionType.UnselectedCells:\n      case SelectionType.Cells:\n        if (\n          columnIndex >= sel.startColumn &&\n          columnIndex <= sel.endColumn &&\n          rowIndex >= sel.startRow &&\n          rowIndex <= sel.endRow\n        )\n          return sel.type === SelectionType.Cells;\n        break;\n      case SelectionType.Rows:\n        if (rowIndex >= sel.startRow && rowIndex <= sel.endRow) return true;\n        break;\n      case SelectionType.Columns:\n        if (columnIndex >= sel.startColumn && columnIndex <= sel.endColumn)\n          return true;\n    }\n  }\n  return false;\n};\n\n/**\n * Check if all given cells selected\n * @param {SelectionDescriptor[]} selections\n * @param {RangeDescriptor} range the range of cells block\n * @returns {boolean}\n */\nconst areAllCellsSelected = (selections, range) => {\n  const {\n    startRow: startRow,\n    startColumn: startColumn,\n    endRow: endRow,\n    endColumn: endColumn,\n  } = range;\n  for (let i = 0, iTo = selections.length; i < iTo; i++) {\n    const sel = selections[i];\n    if (!sel) continue;\n    switch (sel.type) {\n      case SelectionType.UnselectedCells:\n      case SelectionType.Cells:\n        {\n          const matched0 =\n            startColumn >= sel.startColumn && startRow >= sel.startRow;\n          const matched1 = endColumn <= sel.endColumn && endRow <= sel.endRow;\n          if (matched0 || matched1) {\n            if (matched0 && matched1) return sel.type === SelectionType.Cells;\n            if (\n              (matched0 &&\n                startColumn <= sel.endColumn &&\n                startRow <= sel.endRow) ||\n              (matched1 &&\n                endColumn >= sel.startColumn &&\n                endRow >= sel.startRow)\n            )\n              return false;\n          }\n        }\n        break;\n      case SelectionType.Rows:\n        if (startRow >= sel.startRow) {\n          if (endRow <= sel.endRow) return true;\n          if (startRow <= sel.endRow) return false;\n        } else if (endRow >= sel.startRow) return false;\n        break;\n      case SelectionType.Columns:\n        if (startColumn >= sel.startColumn) {\n          if (endColumn <= sel.endColumn) return true;\n          if (startColumn <= sel.endColumn) return false;\n        } else if (endColumn >= sel.startColumn) return false;\n    }\n  }\n  return false;\n};\n\n/**\n * Get selection state from cells\n * @param {SelectionDescriptor[]} selections\n * @param {RangeDescriptor} range\n * @returns {boolean|boolean[][]} Returning `true` means all given cells are selected,\n * Returning `false` means all given cells are not selected.\n * Returning a two-dimensional array means some cells are selected and some cells are not selected.\n * A reference for returned value: `state[rowIndex - range.startRow][colIndex - range.startColumn]`\n */\nconst getSelectionStateFromCells = (selections, range) => {\n  if (!Array.isArray(selections) || selections.length === 0) return false;\n  selections = selections.filter((sel) => {\n    if (typeof sel.startRow === 'number')\n      if (sel.endRow < range.startRow || sel.startRow > range.endRow)\n        return false;\n    if (typeof sel.startColumn === 'number')\n      if (\n        sel.endColumn < range.startColumn ||\n        sel.startColumn > range.endColumn\n      )\n        return false;\n    return sel;\n  });\n  if (selections.length === 0) return false;\n  if (areAllCellsSelected(selections, range)) return true;\n\n  const countOfColumns = range.endColumn - range.startColumn + 1;\n  const result = new Array(range.endRow - range.startRow + 1)\n    .fill(null)\n    .map(() => new Array(countOfColumns));\n\n  const test = Object.assign({ type: SelectionType.Cells }, range);\n  for (let i = selections.length - 1; i >= 0; i--) {\n    const sel = selections[i];\n    const intersection = getIntersection(test, sel);\n    if (!intersection) continue;\n    const value = sel.type !== SelectionType.UnselectedCells;\n    for (\n      let rowIndex = intersection.startRow;\n      rowIndex <= intersection.endRow;\n      rowIndex++\n    ) {\n      const row = result[rowIndex - range.startRow];\n      let columnOffset = intersection.startColumn - range.startColumn;\n      const columnOffsetEnd = intersection.endColumn - range.startColumn;\n      for (; columnOffset <= columnOffsetEnd; columnOffset++)\n        row[columnOffset] = value;\n    }\n  }\n  return result;\n};\n\n/**\n * Get verbose selection state from cells.\n * (`verbose` in here means that you can locate particular selection for selected cells)\n * @param {SelectionDescriptor[]} selections\n * @param {RangeDescriptor} range\n * @returns {number[][]} Each item in this two-dimensional array is 0 or a positive int,\n * it represents the index of matched selection plus 1 if it is a positive int.\n * And if the value of item is 0, it means this cell is not selected.\n * A reference for returned value: `state[rowIndex - range.startRow][colIndex - range.startColumn]`\n */\nconst getVerboseSelectionStateFromCells = (selections, range) => {\n  if (!Array.isArray(selections) || selections.length === 0) return [];\n  selections = selections.map((sel) => {\n    if (typeof sel.startRow === 'number')\n      if (sel.endRow < range.startRow || sel.startRow > range.endRow)\n        return null;\n    if (typeof sel.startColumn === 'number')\n      if (\n        sel.endColumn < range.startColumn ||\n        sel.startColumn > range.endColumn\n      )\n        return null;\n    return sel;\n  });\n  if (selections.length === 0) return [];\n\n  const countOfColumns = range.endColumn - range.startColumn + 1;\n  const result = new Array(range.endRow - range.startRow + 1)\n    .fill(null)\n    .map(() => new Array(countOfColumns));\n\n  const test = Object.assign({ type: SelectionType.Cells }, range);\n  for (let i = selections.length - 1; i >= 0; i--) {\n    const sel = selections[i];\n    if (!sel) continue;\n    const intersection = getIntersection(test, sel);\n    if (!intersection) continue;\n    const value = sel.type !== SelectionType.UnselectedCells;\n    for (\n      let rowIndex = intersection.startRow;\n      rowIndex <= intersection.endRow;\n      rowIndex++\n    ) {\n      const row = result[rowIndex - range.startRow];\n      let columnOffset = intersection.startColumn - range.startColumn;\n      const columnOffsetEnd = intersection.endColumn - range.startColumn;\n      for (; columnOffset <= columnOffsetEnd; columnOffset++)\n        row[columnOffset] = value ? i + 1 : 0;\n    }\n  }\n  return result;\n};\n\n/**\n * Check if any contiguous columns are selected.\n * (This function is useful for the preconditions for actions on columns, Eg: grouping, hiding)\n * @param {SelectionDescriptor[]} selections\n * @param {boolean} allowImpurity This function ignores other selected rows/cells if its value is `true`\n * @returns {number[]} a tuple [beginViewColumnIndex, endViewColumnIndex] or `undefined`\n */\nconst getSelectedContiguousColumns = (selections, allowImpurity) => {\n  if (!selections || selections.length === 0) return;\n  /** A selection object */\n  let matched;\n  for (let i = selections.length - 1; i >= 0; i--) {\n    const selection = selections[i];\n    switch (selection.type) {\n      case SelectionType.Columns:\n        if (matched) {\n          const newMatched = mergeSelections(matched, selection);\n          if (newMatched) {\n            matched = newMatched;\n            break;\n          }\n        }\n        matched = selection;\n        break;\n      case SelectionType.Rows:\n      case SelectionType.Cells:\n        if (!allowImpurity) return;\n        break;\n      case SelectionType.UnselectedCells:\n        if (!matched) return;\n        if (getIntersection(selection, matched)) return;\n    }\n  }\n  if (matched) return [matched.startColumn, matched.endColumn];\n};\n\n/**\n * Check if any contiguous rows are selected.\n * (This function is useful for the preconditions for actions on rows, Eg: grouping, hiding)\n * @param {SelectionDescriptor[]} selections\n * @param {boolean} allowImpurity This function ignores other selected columns/cells if its value is `true`\n * @returns {number[]} a tuple [beginRowOrderIndex, endRowOrderIndex] or `undefined`\n */\nconst getSelectedContiguousRows = (selections, allowImpurity) => {\n  if (!selections || selections.length === 0) return;\n  /** A selection object */\n  let matched;\n  for (let i = selections.length - 1; i >= 0; i--) {\n    const selection = selections[i];\n    switch (selection.type) {\n      case SelectionType.Rows:\n        if (matched) {\n          const newMatched = mergeSelections(matched, selection);\n          if (newMatched) {\n            matched = newMatched;\n            break;\n          }\n        }\n        matched = selection;\n        break;\n      case SelectionType.Columns:\n      case SelectionType.Cells:\n        if (!allowImpurity) return;\n        break;\n      case SelectionType.UnselectedCells:\n        if (!matched) return;\n        if (getIntersection(selection, matched)) return;\n    }\n  }\n  if (matched) return [matched.startRow, matched.endRow];\n};\n\n/**\n * Check if current selections are complex.\n * How we defined \"complex\" in here:\n * - There are any unselected cells in selected rows/columns\n * - More than one selection type in current selections\n * @param {SelectionDescriptor[]} selections\n * @returns {boolean}\n */\nconst areSelectionsComplex = (selections) => {\n  if (!selections || selections.length <= 1) return false;\n  const baseType = selections[0].type;\n  if (baseType === SelectionType.UnselectedCells) return true;\n  return selections.findIndex((it) => it.type !== baseType) >= 0;\n};\n\n/**\n * Check if current selections are neat.\n * This method is used for make new API are compatible with obsolete API\n * For example:\n * - Selected like <0,0-10,10> or rows<5-10>  is neat\n * - Selected like <0,0-10,10>&<11,1-11,10> is untidy\n * @param {SelectionDescriptor[]} selections selections after clean up\n * @returns {boolean}\n */\nconst areSelectionsNeat = (selections) => {\n  if (!selections) return false;\n  if (selections.length === 1) return true;\n\n  const base = selections[0];\n  const baseType = base.type;\n  if (baseType === SelectionType.UnselectedCells) return true;\n\n  for (let i = 0; i < selections.length; i++) {\n    const sel = selections[i];\n    if (baseType !== sel.type) return false;\n    if (baseType === SelectionType.Cells) {\n      if (\n        sel.startColumn === base.startColumn &&\n        sel.endColumn === base.endColumn\n      )\n        continue;\n      if (sel.startRow === base.startRow && sel.endRow === base.endRow)\n        continue;\n      // they are not aligned\n      return false;\n    }\n  }\n  return true;\n};\n\n/**\n * @param {SelectionDescriptor[]} selections\n * @param {number} offsetX\n * @param {number} offsetY\n */\nconst moveSelections = (selections, offsetX, offsetY) => {\n  for (let i = 0; i < selections.length; i++) {\n    const selection = selections[i];\n    switch (selection.type) {\n      case SelectionType.Cells:\n      case SelectionType.UnselectedCells:\n        selection.startRow += offsetY;\n        selection.endRow += offsetY;\n        selection.startColumn += offsetX;\n        selection.endColumn += offsetX;\n        break;\n      case SelectionType.Rows:\n        selection.startRow += offsetY;\n        selection.endRow += offsetY;\n        break;\n      case SelectionType.Columns:\n        selection.startColumn += offsetX;\n        selection.endColumn += offsetX;\n        break;\n    }\n  }\n};\n\n/**\n * @param {SelectionDescriptor[]} selections\n * @returns {SelectionDescriptor[]}\n */\nconst cloneSelections = (selections) => {\n  const clonedSelections = [];\n  for (let i = 0; i < selections.length; i++) {\n    const sel = selections[i];\n    if (!sel) continue;\n    clonedSelections.push(Object.assign({}, sel));\n  }\n  return clonedSelections;\n};\n\n/**\n * @param {SelectionDescriptor[]} selections\n * @returns {RectangleObject}\n */\nconst getSelectionBounds = (selections) => {\n  /**\n   * The reason why the initialize values are `Infinity` is used for making\n   * the bound is compatible with the obsolete API.\n   */\n  let top = Infinity,\n    bottom = -Infinity,\n    left = Infinity,\n    right = -Infinity;\n  for (let i = 0; i < selections.length; i++) {\n    const sel = selections[i];\n    if (sel.type === SelectionType.UnselectedCells) continue;\n\n    if (typeof sel.startColumn !== 'number') left = 0;\n    else if (sel.startColumn < left) left = sel.startColumn;\n\n    if (typeof sel.endColumn !== 'number') right = Infinity;\n    else if (sel.endColumn > right) right = sel.endColumn;\n\n    if (typeof sel.startRow !== 'number') top = 0;\n    else if (sel.startRow < top) top = sel.startRow;\n\n    if (typeof sel.endRow !== 'number') bottom = Infinity;\n    else if (sel.endRow > bottom) bottom = sel.endRow;\n  }\n  return { top, left, bottom, right };\n};\n\n/**\n * @param {SelectionDescriptor[]} selections\n * @param {object} cell Signature: `{rowIndex:number;columnIndex:number}`\n * @param {object} keyEvent Signature: `{key:string;shiftKey:boolean}`\n * @param {object} context Signature: `{columns:number;rows:number}`\n * @returns {boolean}\n */\nconst shrinkOrExpandSelections = (selections, cell, keyEvent, context) => {\n  const { rowIndex, columnIndex } = cell;\n  if (rowIndex < 0 || columnIndex < 0) return false;\n\n  const keyInfo = {\n    ArrowLeft: { x: 1, y: 0, isLeft: true },\n    ArrowUp: { x: 0, y: 1, isUp: true },\n    ArrowRight: { x: -1, y: 0, isRight: true },\n    ArrowDown: { x: 0, y: -1, isDown: true },\n  }[keyEvent.key];\n  if (!keyInfo) return false;\n\n  const originalRowIndex = rowIndex + keyInfo.y;\n  const originalColumnIndex = columnIndex + keyInfo.x;\n\n  /** @type {number[]} */\n  let matchedSelections = [];\n  for (let i = 0; i < selections.length; i++) {\n    /** @type {SelectionDescriptor} */\n    const sel = selections[i];\n    switch (sel.type) {\n      case SelectionType.Cells:\n      case SelectionType.UnselectedCells:\n        if (\n          (originalRowIndex === sel.startRow ||\n            originalRowIndex === sel.endRow) &&\n          (originalColumnIndex === sel.startColumn ||\n            originalColumnIndex === sel.endColumn)\n        ) {\n          // we can't shrink or expand from a unselected areas\n          if (sel.type === SelectionType.UnselectedCells) return false;\n          matchedSelections.push(sel);\n        }\n        break;\n      case SelectionType.Rows:\n        if (\n          originalRowIndex === sel.startRow ||\n          originalRowIndex === sel.endRow\n        )\n          matchedSelections.push(sel);\n        break;\n      case SelectionType.Columns:\n        if (\n          originalColumnIndex === sel.startColumn ||\n          originalColumnIndex === sel.endColumn\n        )\n          matchedSelections.push(sel);\n        break;\n    }\n  }\n  // The selection is complex.\n  // Or the expanding / shrinking action is not from the border cell of selected area\n  if (matchedSelections.length !== 1) return false;\n  const selection = matchedSelections[0];\n\n  const isTopBorder = selection.startRow === originalRowIndex;\n  const isBottomBorder = selection.endRow === originalRowIndex;\n\n  const isLeftBorder = selection.startColumn === originalColumnIndex;\n  const isRightBorder = selection.endColumn === originalColumnIndex;\n\n  const maxRow = context ? context.rows - 1 : Infinity;\n  const maxColumn = context ? context.columns - 1 : Infinity;\n\n  const afterChange = () => {\n    cleanupSelections(selections);\n    return true;\n  };\n\n  if (isTopBorder) {\n    if (keyInfo.isUp) {\n      // at the topmost row\n      if (selection.startRow === 0) return false;\n      // expand to the up\n      selection.startRow--;\n      return afterChange();\n    } else if (keyInfo.isDown && selection.startRow < selection.endRow) {\n      selection.startRow++;\n      return afterChange();\n    }\n  }\n  if (isBottomBorder) {\n    if (keyInfo.isDown) {\n      // at the bottomost row\n      if (selection.endRow >= maxRow) return false;\n      // expand to the down\n      selection.endRow++;\n      return afterChange();\n    } else if (keyInfo.isUp && selection.startRow < selection.endRow) {\n      selection.endRow--;\n      return afterChange();\n    }\n  }\n  if (isLeftBorder) {\n    if (keyInfo.isLeft) {\n      // at the leftmost column\n      if (selection.startColumn === 0) return false;\n      // expand to the left\n      selection.startColumn--;\n      return afterChange();\n    } else if (keyInfo.isRight && selection.startColumn < selection.endColumn) {\n      selection.startColumn++;\n      return afterChange();\n    }\n  }\n  if (isRightBorder) {\n    if (keyInfo.isRight) {\n      // at the rightmost column\n      if (selection.endColumn >= maxColumn) return false;\n      // expand to the down\n      selection.endColumn++;\n      return afterChange();\n    } else if (keyInfo.isLeft && selection.startColumn < selection.endColumn) {\n      selection.endColumn--;\n      return afterChange();\n    }\n  }\n  return false;\n};\n\nexport {\n  SelectionType,\n  getSelectionFromString,\n  normalizeSelection,\n  addIntoSelections,\n  removeFromSelections,\n  mergeSelections,\n  removePartOfRowsSelection,\n  removePartOfColumnsSelection,\n  removePartOfCellsSelection,\n  cleanupSelections,\n  getIntersection,\n  isRowSelected,\n  isColumnSelected,\n  isCellSelected,\n  areAllCellsSelected,\n  areSelectionsNeat,\n  getSelectionStateFromCells,\n  getVerboseSelectionStateFromCells,\n  areSelectionsComplex,\n  getSelectedContiguousColumns,\n  getSelectedContiguousRows,\n  moveSelections,\n  cloneSelections,\n  getSelectionBounds,\n  shrinkOrExpandSelections,\n};\n","/*jslint browser: true, unparam: true, todo: true, plusplus: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nexport default function (self) {\n  var touchTimerMs = 50,\n    debounceTouchMove,\n    touchMoving,\n    touchScrollTimeout;\n  self.scrollAnimation = {};\n  self.touchDelta = {};\n  self.touchAnimateTo = {};\n  self.animationFrames = 0;\n  self.getTouchPos = function (e, touchIndex) {\n    var t = touchIndex ? e.touches[touchIndex] : e.touches[0],\n      rect = self.canvas.getBoundingClientRect(),\n      pos;\n    if (!t) {\n      return;\n    }\n    pos = {\n      x: t.clientX - rect.left,\n      y: t.clientY - rect.top,\n    };\n    if (self.isChildGrid) {\n      pos.x -= self.canvasOffsetLeft;\n      pos.y -= self.canvasOffsetTop;\n    }\n    return {\n      x: pos.x,\n      y: pos.y,\n      rect: rect,\n    };\n  };\n  // shamelessly stolen from from https://gist.github.com/gre/1650294\n  self.easingFunctions = {\n    linear: function (t) {\n      return t;\n    },\n    easeInQuad: function (t) {\n      return t * t;\n    },\n    easeOutQuad: function (t) {\n      return t * (2 - t);\n    },\n    easeInOutQuad: function (t) {\n      return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n    },\n    easeInCubic: function (t) {\n      return t * t * t;\n    },\n    easeOutCubic: function (t) {\n      return --t * t * t + 1;\n    },\n    easeInOutCubic: function (t) {\n      return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n    },\n    easeInQuart: function (t) {\n      return t * t * t * t;\n    },\n    easeOutQuart: function (t) {\n      return 1 - --t * t * t * t;\n    },\n    easeInOutQuart: function (t) {\n      return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n    },\n    easeInQuint: function (t) {\n      return t * t * t * t * t;\n    },\n    easeOutQuint: function (t) {\n      return 1 + --t * t * t * t * t;\n    },\n    easeInOutQuint: function (t) {\n      return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\n    },\n  };\n  self.easing = function (t, b, c, d) {\n    return (\n      c * self.easingFunctions[self.attributes.touchEasingMethod](t / d) + b\n    );\n  };\n  self.calculatePPSTimed = function () {\n    self.xPPST = -(\n      (self.touchDelta.x - self.touchSigmaTimed.x) /\n      (self.touchDelta.t - self.touchSigmaTimed.t)\n    );\n    self.yPPST = -(\n      (self.touchDelta.y - self.touchSigmaTimed.y) /\n      (self.touchDelta.t - self.touchSigmaTimed.t)\n    );\n    self.touchSigmaTimed = {\n      x: self.touchDelta.x,\n      y: self.touchDelta.y,\n      t: performance.now(),\n    };\n  };\n  self.calculatePPS = function () {\n    self.xPPS = -(\n      (self.touchDelta.x - self.touchSigma.x) /\n      (self.touchDelta.t - self.touchSigma.t)\n    );\n    self.yPPS = -(\n      (self.touchDelta.y - self.touchSigma.y) /\n      (self.touchDelta.t - self.touchSigma.t)\n    );\n    self.touchSigma = {\n      x: self.touchDelta.x,\n      y: self.touchDelta.y,\n      t: performance.now(),\n    };\n  };\n  self.touchEndAnimation = function () {\n    if (!self.canvas || !self.scrollBox.scrollTo) {\n      return requestAnimationFrame(self.touchEndAnimation);\n    }\n    var n = performance.now(),\n      d = self.attributes.touchReleaseAnimationDurationMs,\n      t;\n    t = n - self.touchDelta.t;\n    self.animationFrames += 1;\n    self.scrollAnimation.x = self.easing(\n      t,\n      self.touchDelta.scrollLeft,\n      self.touchAnimateTo.x,\n      d,\n    );\n    self.scrollAnimation.y = self.easing(\n      t,\n      self.touchDelta.scrollTop,\n      self.touchAnimateTo.y,\n      d,\n    );\n    if (\n      t > d ||\n      (self.scrollAnimation.y === self.scrollBox.scrollTop &&\n        self.scrollAnimation.x === self.scrollBox.scrollLeft) ||\n      self.stopAnimation\n    ) {\n      return;\n    }\n    self.scrollBox.scrollTo(self.scrollAnimation.x, self.scrollAnimation.y);\n    requestAnimationFrame(self.touchEndAnimation);\n  };\n  self.touchEditCell = function (cell) {\n    self.beginEditAt(cell.columnIndex, cell.rowIndex);\n  };\n  self.touchstart = function (e) {\n    if (e.changedTouches[0]) {\n      self.touchStart = self.getTouchPos(e);\n      self.startingCell = self.getCellAt(\n        self.touchStart.x,\n        self.touchStart.y,\n        true,\n      );\n    }\n    if (\n      self.dispatchEvent('touchstart', {\n        NativeEvent: e,\n        cell: self.startingCell,\n      })\n    ) {\n      return;\n    }\n    self.disposeContextMenu();\n    clearInterval(self.calculatePPSTimer);\n    clearTimeout(self.touchContextTimeout);\n    self.touchStartEvent = e;\n    self.stopAnimation = true;\n    self.animationFrames = 0;\n    self.stopPropagation(e);\n    if (e.touches.length === 1 && e.changedTouches[0] && !self.zoomAltered) {\n      self.touchLength = 1;\n      self.touchStart = self.touchStart || self.touchStart1;\n      self.touchScrollStart = {\n        x: self.scrollBox.scrollLeft,\n        y: self.scrollBox.scrollTop,\n        t: performance.now(),\n      };\n      self.touchDelta = {\n        x: 0,\n        y: 0,\n        scrollLeft: self.scrollBox.scrollLeft,\n        scrollTop: self.scrollBox.scrollTop,\n        t: self.touchScrollStart.t,\n      };\n      self.touchSigma = {\n        x: self.touchDelta.x,\n        y: self.touchDelta.y,\n        t: self.touchDelta.t,\n      };\n      self.touchSigmaTimed = {\n        x: self.touchDelta.x,\n        y: self.touchDelta.y,\n        t: self.touchDelta.t,\n      };\n      self.touchContextTimeout = setTimeout(function () {\n        self.contextmenuEvent(e, self.touchStart);\n      }, self.attributes.touchContextMenuTimeMs);\n      self.calculatePPSTimer = setInterval(\n        self.calculatePPSTimed,\n        touchTimerMs,\n      );\n      if (\n        self.startingCell &&\n        (self.startingCell.isGrid ||\n          ['tree', 'inherit'].indexOf(self.startingCell.context) !== -1)\n      ) {\n        self.hasFocus = false;\n        return;\n      }\n      self.hasFocus = true;\n      if (self.startingCell.isHeader) {\n        if (self.startingCell.isRowHeader) {\n          self.selectArea({\n            top: self.startingCell.rowIndex,\n            bottom: self.startingCell.rowIndex,\n            left: 0,\n            right: self.getVisibleSchema().length - 1,\n          });\n          self.draw(true);\n        } else if (self.startingCell.isColumnHeader) {\n          if (self.attributes.columnHeaderClickBehavior === 'sort') {\n            if (self.orderBy === self.startingCell.header.name) {\n              self.orderDirection =\n                self.orderDirection === 'asc' ? 'desc' : 'asc';\n            } else {\n              self.orderDirection = 'asc';\n            }\n            self.order(self.startingCell.header.name, self.orderDirection);\n          }\n          if (self.attributes.columnHeaderClickBehavior === 'select') {\n            self.selectArea({\n              top: 0,\n              bottom: self.viewData.length - 1,\n              left: self.startingCell.columnIndex,\n              right: self.startingCell.columnIndex,\n            });\n            self.draw(true);\n          }\n        }\n        self.touchEndEvents(e);\n        return;\n      }\n    }\n    if (self.zoomAltered) {\n      return;\n    }\n    document.body.addEventListener('touchmove', self.touchmove, {\n      passive: false,\n    });\n    document.body.addEventListener('touchend', self.touchend, false);\n    document.body.addEventListener('touchcancel', self.touchcancel, false);\n    self.draw(true);\n  };\n  self.touchSelect = function (cell, handleType) {\n    if (cell.rowIndex === undefined || cell.columnIndex === undefined) {\n      return;\n    }\n    self.touchSelecting = true;\n    var bounds = self.getSelectionBounds();\n    if (\n      handleType === 'selection-handle-bl' &&\n      cell.rowIndex >= bounds.top &&\n      cell.columnIndex <= bounds.right\n    ) {\n      bounds.bottom = cell.rowIndex;\n      bounds.left = cell.columnIndex;\n    } else if (\n      handleType === 'selection-handle-tl' &&\n      cell.rowIndex <= bounds.bottom &&\n      cell.columnIndex <= bounds.right\n    ) {\n      bounds.top = cell.rowIndex;\n      bounds.left = cell.columnIndex;\n    } else if (\n      handleType === 'selection-handle-tr' &&\n      cell.rowIndex <= bounds.bottom &&\n      cell.columnIndex >= bounds.left\n    ) {\n      bounds.top = cell.rowIndex;\n      bounds.right = cell.columnIndex;\n    } else if (\n      handleType === 'selection-handle-br' &&\n      cell.rowIndex >= bounds.top &&\n      cell.columnIndex >= bounds.left\n    ) {\n      bounds.bottom = cell.rowIndex;\n      bounds.right = cell.columnIndex;\n    }\n    if (self.attributes.selectionMode === 'row' || cell.rowIndex === -1) {\n      bounds.left = 0;\n      bounds.right = self.getSchema().length - 1;\n    } else {\n      bounds.left = Math.max(0, bounds.left);\n    }\n    self.selectArea(bounds);\n    self.draw(true);\n  };\n  function touchMove(e) {\n    var ch, rw, rScrollZone, lScrollZone, bScrollZone, tScrollZone, sbw, t1, t2;\n    if (self.dispatchEvent('beforetouchmove', { NativeEvent: e })) {\n      return;\n    }\n    clearTimeout(touchScrollTimeout);\n    if (e.changedTouches[0]) {\n      self.touchPosition = self.getTouchPos(e);\n    }\n    if (e.changedTouches[1]) {\n      self.touchPosition1 = self.getTouchPos(e, 1);\n    }\n    if (\n      Math.abs(self.touchDelta.x) + Math.abs(self.touchDelta.y) >\n      self.attributes.touchDeadZone\n    ) {\n      clearTimeout(self.touchContextTimeout);\n    }\n    if (e.touches.length === 2 && self.touchPosition && self.touchPosition1) {\n      t1 = self.touchPosition.y;\n      t2 = self.touchPosition1.y;\n      if (!self.zoomDeltaStart) {\n        self.zoomDeltaStart = Math.abs(t1 - t2);\n        self.startScale = self.scale;\n      }\n      self.touchLength = 2;\n      self.scaleDelta = self.zoomDeltaStart - Math.abs(t1 - t2);\n      self.scale =\n        self.startScale -\n        self.scaleDelta * self.attributes.touchZoomSensitivity;\n      self.scale = Math.min(\n        Math.max(self.scale, self.attributes.touchZoomMin),\n        self.attributes.touchZoomMax,\n      );\n      self.zoomAltered = true;\n      self.resize(true);\n      self.resizeChildGrids();\n      return;\n    }\n    if (self.zoomAltered) {\n      return;\n    }\n    self.touchLength = 1;\n    self.touchPosition = self.touchPosition || self.touchPosition1;\n    ch = self.getColumnHeaderCellHeight();\n    rw = self.getRowHeaderCellWidth();\n    rScrollZone =\n      self.width - self.style.scrollBarWidth - self.touchPosition.x <\n      self.attributes.selectionScrollZone;\n    lScrollZone =\n      self.touchPosition.x - rw < self.attributes.selectionScrollZone;\n    bScrollZone =\n      self.height - self.style.scrollBarWidth - self.touchPosition.y <\n      self.attributes.selectionScrollZone;\n    tScrollZone =\n      self.touchPosition.y - ch < self.attributes.selectionScrollZone;\n    sbw = self.style.scrollBarWidth;\n    function touchScroll() {\n      var x = self.scrollBox.scrollLeft,\n        y = self.scrollBox.scrollTop;\n      x += rScrollZone ? self.attributes.selectionScrollIncrement : 0;\n      y += bScrollZone ? self.attributes.selectionScrollIncrement : 0;\n      y -= tScrollZone ? self.attributes.selectionScrollIncrement : 0;\n      x -= lScrollZone ? self.attributes.selectionScrollIncrement : 0;\n      self.scrollBox.scrollTo(x, y);\n      touchScrollTimeout = setTimeout(\n        touchScroll,\n        self.attributes.scrollRepeatRate,\n      );\n    }\n    e.stopPropagation();\n    self.touchDelta = {\n      x: self.touchPosition.x - self.touchStart.x,\n      y: self.touchPosition.y - self.touchStart.y,\n      scrollLeft: self.scrollBox.scrollLeft,\n      scrollTop: self.scrollBox.scrollTop,\n      t: performance.now(),\n    };\n    self.currentCell = self.getCellAt(\n      self.touchPosition.x,\n      self.touchPosition.y,\n    );\n    self.dispatchEvent('touchmove', { NativeEvent: e, cell: self.currentCell });\n    self.calculatePPS();\n    self.touchDuration = performance.now() - self.touchScrollStart.t;\n    self.stopAnimation = true;\n    self.animationFrames = 0;\n    if (\n      self.touchSelecting &&\n      (rScrollZone || lScrollZone || tScrollZone || bScrollZone)\n    ) {\n      touchScroll();\n    }\n    if (/vertical-scroll-/.test(self.startingCell.style)) {\n      self.scrollBox.scrollTop =\n        self.scrollBox.scrollHeight *\n        ((self.touchPosition.y - ch - sbw) /\n          (self.scrollBox.height - sbw - ch));\n      return;\n    }\n    if (/horizontal-scroll-/.test(self.startingCell.style)) {\n      self.scrollBox.scrollLeft =\n        self.scrollBox.scrollWidth *\n        ((self.touchPosition.x - rw - sbw) / (self.scrollBox.width - sbw - rw));\n      return;\n    }\n    if (/selection-handle-/.test(self.startingCell.style)) {\n      self.touchSelect(self.currentCell, self.startingCell.style);\n      return;\n    }\n    self.scrollBox.scrollTo(\n      self.touchScrollStart.x - self.touchDelta.x,\n      self.touchScrollStart.y - self.touchDelta.y,\n    );\n  }\n  self.touchmove = function (e) {\n    if (touchMoving) {\n      return;\n    }\n    requestAnimationFrame(function () {\n      touchMoving = true;\n      touchMove(e);\n      touchMoving = false;\n    });\n  };\n  self.touchEndEvents = function (e) {\n    self.zoomDeltaStart = undefined;\n    self.touchSelecting = false;\n    clearInterval(self.touchScrollTimeout);\n    clearInterval(self.touchContextTimeout);\n    clearInterval(self.calculatePPSTimer);\n    e.stopPropagation();\n    document.body.removeEventListener('touchmove', self.touchmove, {\n      passive: false,\n    });\n    document.body.removeEventListener('touchend', self.touchend, false);\n    document.body.removeEventListener('touchcancel', self.touchcancel, false);\n  };\n  self.touchend = function (e) {\n    if (\n      self.dispatchEvent('touchend', { NativeEvent: e, cell: self.currentCell })\n    ) {\n      return;\n    }\n    self.zoomDeltaStart = undefined;\n    if (e.changedTouches[0]) {\n      self.touchPosition = undefined;\n    }\n    if (e.changedTouches[1]) {\n      self.touchPosition1 = undefined;\n    }\n    if (self.zoomAltered) {\n      if (e.touches.length === 0) {\n        self.zoomAltered = false;\n      }\n      return;\n    }\n    var dz =\n      Math.abs(self.touchDelta.x) + Math.abs(self.touchDelta.y) <\n      self.attributes.touchDeadZone;\n    if (isNaN(self.xPPS)) {\n      self.xPPS = 0;\n    }\n    if (isNaN(self.yPPS)) {\n      self.yPPS = 0;\n    }\n    if (isNaN(self.xPPST)) {\n      self.xPPST = 0;\n    }\n    if (isNaN(self.yPPST)) {\n      self.yPPST = 0;\n    }\n    self.touchAnimateTo.x =\n      self.xPPS * self.attributes.touchReleaseAcceleration;\n    self.touchAnimateTo.y =\n      self.yPPS * self.attributes.touchReleaseAcceleration;\n    self.calculatePPSTimed();\n    if (\n      !dz &&\n      self.animationFrames === 0 &&\n      (Math.abs(self.xPPST) > self.attributes.scrollAnimationPPSThreshold ||\n        Math.abs(self.yPPST) > self.attributes.scrollAnimationPPSThreshold) &&\n      !/-scroll-/.test(self.startingCell.style) &&\n      !dz\n    ) {\n      self.stopAnimation = false;\n      self.touchEndAnimation();\n    }\n    self.touchEndEvents(e);\n  };\n  self.touchcancel = function (e) {\n    if (\n      self.dispatchEvent('touchcancel', {\n        NativeEvent: e,\n        cell: self.currentCell,\n      })\n    ) {\n      return;\n    }\n    self.touchEndEvents(e);\n  };\n}\n","module.exports=function(e){var o={};function a(t){if(o[t])return o[t].exports;var r=o[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,a),r.l=!0,r.exports}return a.m=e,a.c=o,a.d=function(e,o,t){a.o(e,o)||Object.defineProperty(e,o,{enumerable:!0,get:t})},a.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},a.t=function(e,o){if(1&o&&(e=a(e)),8&o)return e;if(4&o&&\"object\"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,\"default\",{enumerable:!0,value:e}),2&o&&\"string\"!=typeof e)for(var r in e)a.d(t,r,function(o){return e[o]}.bind(null,r));return t},a.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(o,\"a\",o),o},a.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},a.p=\"\",a(a.s=0)}([function(e,o,a){\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0});var t=a(1),r=Object.keys(t.default).reduce((function(e,o){return e.concat(t.default[o])}),[]);o.default=function(e){return-1===r.indexOf(e.key)}},function(e,o,a){\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0});o.default={modifier:[\"Alt\",\"AltGraph\",\"CapsLock\",\"Control\",\"Fn\",\"FnLock\",\"Meta\",\"NumLock\",\"ScrollLock\",\"Shift\",\"Symbol\",\"SymbolLock\"],legacyModifier:[\"Hyper\",\"Super\"],whiteSpace:[\"Enter\",\"Tab\"],navigation:[\"ArrowDown\",\"ArrowLeft\",\"ArrowRight\",\"ArrowUp\",\"End\",\"Home\",\"PageDown\",\"PageUp\"],editing:[\"Backspace\",\"Clear\",\"Copy\",\"CrSel\",\"Cut\",\"Delete\",\"EraseEof\",\"ExSel\",\"Insert\",\"Paste\",\"Redo\",\"Undo\"],ui:[\"Accept\",\"Again\",\"Attn\",\"Cancel\",\"ContextMenu\",\"Escape\",\"Execute\",\"Find\",\"Help\",\"Pause\",\"Play\",\"Props\",\"Select\",\"ZoomIn\",\"ZoomOut\"],device:[\"BrightnessDown\",\"BrightnessUp\",\"Eject\",\"LogOff\",\"Power\",\"PowerOff\",\"PrintScreen\",\"Hibernate\",\"Standby\",\"WakeUp\"],imeCompositionKeys:[\"AllCandidates\",\"Alphanumeric\",\"CodeInput\",\"Compose\",\"Convert\",\"Dead\",\"FinalMode\",\"GroupFirst\",\"GroupLast\",\"GroupNext\",\"GroupPrevious\",\"ModeChange\",\"NextCandidate\",\"NonConvert\",\"PreviousCandidate\",\"Process\",\"SingleCandidate\"],koreanSpecific:[\"HangulMode\",\"HanjaMode\",\"JunjaMode\"],japaneseSpecific:[\"Eisu\",\"Hankaku\",\"Hiragana\",\"HiraganaKatakana\",\"KanaMode\",\"KanjiMode\",\"Katakana\",\"Romaji\",\"Zenkaku\",\"ZenkakuHankaku\"],commonFunction:[\"F1\",\"F2\",\"F3\",\"F4\",\"F5\",\"F6\",\"F7\",\"F8\",\"F9\",\"F10\",\"F11\",\"F12\",\"Soft1\",\"Soft2\",\"Soft3\",\"Soft4\"],multimedia:[\"ChannelDown\",\"ChannelUp\",\"Close\",\"MailForward\",\"MailReply\",\"MailSend\",\"MediaClose\",\"MediaFastForward\",\"MediaPause\",\"MediaPlay\",\"MediaPlayPause\",\"MediaRecord\",\"MediaRewind\",\"MediaStop\",\"MediaTrackNext\",\"MediaTrackPrevious\",\"New\",\"Open\",\"Print\",\"Save\",\"SpellCheck\"],multimediaNumpad:[\"Key11\",\"Key12\"],audio:[\"AudioBalanceLeft\",\"AudioBalanceRight\",\"AudioBassBoostDown\",\"AudioBassBoostToggle\",\"AudioBassBoostUp\",\"AudioFaderFront\",\"AudioFaderRear\",\"AudioSurroundModeNext\",\"AudioTrebleDown\",\"AudioTrebleUp\",\"AudioVolumeDown\",\"AudioVolumeUp\",\"AudioVolumeMute\",\"MicrophoneToggle\",\"MicrophoneVolumeDown\",\"MicrophoneVolumeUp\",\"MicrophoneVolumeMute\"],speech:[\"SpeechCorrectionList\",\"SpeechInputToggle\"],application:[\"LaunchApplication1\",\"LaunchApplication2\",\"LaunchCalendar\",\"LaunchContacts\",\"LaunchMail\",\"LaunchMediaPlayer\",\"LaunchMusicPlayer\",\"LaunchPhone\",\"LaunchScreenSaver\",\"LaunchSpreadsheet\",\"LaunchWebBrowser\",\"LaunchWebCam\",\"LaunchWordProcessor\"],browser:[\"BrowserBack\",\"BrowserFavorites\",\"BrowserForward\",\"BrowserHome\",\"BrowserRefresh\",\"BrowserSearch\",\"BrowserStop\"],mobilePhone:[\"AppSwitch\",\"Call\",\"Camera\",\"CameraFocus\",\"EndCall\",\"GoBack\",\"GoHome\",\"HeadsetHook\",\"LastNumberRedial\",\"Notification\",\"MannerMode\",\"VoiceDial\"],tv:[\"TV\",\"TV3DMode\",\"TVAntennaCable\",\"TVAudioDescription\",\"TVAudioDescriptionMixDown\",\"TVAudioDescriptionMixUp\",\"TVContentsMenu\",\"TVDataService\",\"TVInput\",\"TVInputComponent1\",\"TVInputComponent2\",\"TVInputComposite1\",\"TVInputComposite2\",\"TVInputHDMI1\",\"TVInputHDMI2\",\"TVInputHDMI3\",\"TVInputHDMI4\",\"TVInputVGA1\",\"TVMediaContext\",\"TVNetwork\",\"TVNumberEntry\",\"TVPower\",\"TVRadioService\",\"TVSatellite\",\"TVSatelliteBS\",\"TVSatelliteCS\",\"TVSatelliteToggle\",\"TVTerrestrialAnalog\",\"TVTerrestrialDigital\",\"TVTimer\"],mediaControls:[\"AVRInput\",\"AVRPower\",\"ColorF0Red\",\"ColorF1Green\",\"ColorF2Yellow\",\"ColorF3Blue\",\"ColorF4Grey\",\"ColorF5Brown\",\"ClosedCaptionToggle\",\"Dimmer\",\"DisplaySwap\",\"DVR\",\"Exit\",\"FavoriteClear0\",\"FavoriteClear1\",\"FavoriteClear2\",\"FavoriteClear3\",\"FavoriteRecall0\",\"FavoriteRecall1\",\"FavoriteRecall2\",\"FavoriteRecall3\",\"FavoriteStore0\",\"FavoriteStore1\",\"FavoriteStore2\",\"FavoriteStore3\",\"Guide\",\"GuideNextDay\",\"GuidePreviousDay\",\"Info\",\"InstantReplay\",\"Link\",\"ListProgram\",\"LiveContent\",\"Lock\",\"MediaApps\",\"MediaAudioTrack\",\"MediaLast\",\"MediaSkipBackward\",\"MediaSkipForward\",\"MediaStepBackward\",\"MediaStepForward\",\"MediaTopMenu\",\"NavigateIn\",\"NavigateNext\",\"NavigateOut\",\"NavigatePrevious\",\"NextFavoriteChannel\",\"NextUserProfile\",\"OnDemand\",\"Pairing\",\"PinPDown\",\"PinPMove\",\"PinPToggle\",\"PinPUp\",\"PlaySpeedDown\",\"PlaySpeedReset\",\"PlaySpeedUp\",\"RandomToggle\",\"RcLowBattery\",\"RecordSpeedNext\",\"RfBypass\",\"ScanChannelsToggle\",\"ScreenModeNext\",\"Settings\",\"SplitScreenToggle\",\"STBInput\",\"STBPower\",\"Subtitle\",\"Teletext\",\"VideoModeNext\",\"Wink\",\"ZoomToggle\"]}}]).default;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/*jslint browser: true, unparam: true, todo: true, evil: true*/\n/*globals Reflect: false, HTMLElement: true, define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport component from './component';\nimport defaults from './defaults';\nimport draw from './draw';\nimport events from './events';\nimport touch from './touch';\nimport intf from './intf';\nimport selections from './selections/index';\nimport contextMenu from './contextMenu';\nimport button from './button';\nimport dom from './dom';\nimport publicMethods from './publicMethods';\n\nvar webComponent = component();\n\nvar modules = [\n  defaults,\n  draw,\n  events,\n  touch,\n  intf,\n  selections,\n  contextMenu,\n  button,\n  dom,\n  publicMethods,\n];\n\nfunction Grid(args) {\n  args = args || {};\n  var self = {};\n  self.isComponent = args.component === undefined;\n  self.isChildGrid =\n    args.parentNode &&\n    /canvas-datagrid-(cell|tree)/.test(args.parentNode.nodeType);\n  if (self.isChildGrid) {\n    self.intf = {};\n  } else {\n    self.intf = self.isComponent\n      ? eval('Reflect.construct(HTMLElement, [], new.target)')\n      : document.createElement('canvas');\n  }\n  self.args = args;\n  self.intf.args = args;\n  self.applyComponentStyle = webComponent.applyComponentStyle;\n  self.hyphenateProperty = webComponent.hyphenateProperty;\n  self.dehyphenateProperty = webComponent.dehyphenateProperty;\n  self.createGrid = function grid(args) {\n    args.component = false;\n    return new Grid(args);\n  };\n\n  modules.forEach(function (module) {\n    module(self);\n  });\n\n  if (self.isChildGrid) {\n    self.shadowRoot = args.parentNode.shadowRoot;\n    self.parentNode = args.parentNode;\n  } else {\n    self.shadowRoot = self.intf.attachShadow({ mode: 'open' });\n    self.parentNode = self.shadowRoot;\n  }\n  self.init();\n  return self.intf;\n}\nif (window.HTMLElement) {\n  Grid.prototype = Object.create(window.HTMLElement.prototype);\n}\n// export web component\nif (window.customElements) {\n  Grid.observedAttributes = webComponent.getObservableAttributes();\n  Grid.prototype.disconnectedCallback = webComponent.disconnectedCallback;\n  Grid.prototype.attributeChangedCallback =\n    webComponent.attributeChangedCallback;\n  Grid.prototype.connectedCallback = webComponent.connectedCallback;\n  Grid.prototype.adoptedCallback = webComponent.adoptedCallback;\n  window.customElements.define('canvas-datagrid', Grid);\n}\n\n// export global\nif (\n  window &&\n  !window.canvasDatagrid &&\n  !window.require &&\n  // Present to exclude global declarations from ES Module bundles\n  !window.EXCLUDE_GLOBAL\n) {\n  window.canvasDatagrid = function (args) {\n    return new Grid(args);\n  };\n}\n\n// export amd loader\nexport default function canvasDatagrid(args) {\n  args = args || {};\n  var i,\n    tKeys = [\n      'style',\n      'formatters',\n      'sorters',\n      'filters',\n      'treeGridAttributes',\n      'cellGridAttributes',\n      'fillCellCallback',\n      'data',\n      'schema',\n    ];\n  if (window.customElements) {\n    i = document.createElement('canvas-datagrid');\n    Object.keys(args).forEach(function (argKey) {\n      // set data and parentNode after everything else\n      if (argKey === 'data') {\n        return;\n      }\n      if (argKey === 'parentNode') {\n        return;\n      }\n      // top level keys in args\n      if (tKeys.indexOf(argKey) !== -1) {\n        tKeys.forEach(function (tKey) {\n          if (args[tKey] === undefined || tKey !== argKey) {\n            return;\n          }\n          if (['formatters', 'sorters', 'filters'].indexOf(argKey) !== -1) {\n            if (typeof args[tKey] === 'object' && args[tKey] !== null) {\n              Object.keys(args[tKey]).forEach(function (sKey) {\n                i[tKey][sKey] = args[tKey][sKey];\n              });\n            }\n          } else {\n            i[tKey] = args[tKey];\n          }\n        });\n        return;\n      }\n      // all others are attribute level keys\n      i.attributes[argKey] = args[argKey];\n    });\n    if (args.data) {\n      i.data = args.data;\n    }\n    // add to the dom very last to avoid redraws\n    if (args.parentNode) {\n      args.parentNode.appendChild(i);\n    }\n    return i;\n  }\n  args.component = false;\n  i = new Grid(args);\n  if (args.parentNode && args.parentNode.appendChild) {\n    args.parentNode.appendChild(i);\n  }\n  return i;\n}\n"],"names":["self","zIndexTop","applyButtonMenuItemStyle","buttonMenuItemContainer","createInlineStyle","mobile","addEventListener","applyButtonStyle","button","buttonMenu","createButton","pos","items","imgSrc","wrapper","document","createElement","buttonArrow","buttonIcon","intf","Array","isArray","Error","init","loc","s","scrollOffset","canvas","undefined","style","buttonZIndex","x","left","y","top","height","position","zIndex","scrollBox","scrollLeft","scrollTop","innerHTML","buttonArrowDownHTML","img","setAttribute","maxWidth","appendChild","body","toggleButtonMenu","dispose","parentNode","removeChild","createDisposeEvent","requestAnimationFrame","disposeButtonMenu","offsetHeight","createButtonMenu","selectedIndex","rect","createItems","addItem","item","menuItemContainer","addContent","content","title","click","ev","apply","disposeButton","clickIndex","idx","dispatchEvent","Event","getBoundingClientRect","bottom","window","innerHeight","buttonMenuWindowMargin","right","innerWidth","Object","defineProperty","get","set","value","isNaN","isFinite","length","forEach","index","removeEventListener","e","keyCode","moveButtonPos","attachButton","defaults","typeMap","component","dehyphenateProperty","hyphenateProperty","prop","replace","p","nextLetterCap","prototype","call","char","toUpperCase","cust","toLowerCase","getDefaultItem","base","i","r","filter","applyComponentStyle","supressChangeAndDrawEvents","isComponent","cStyle","getComputedStyle","tagName","defs","computedStyle","styles","def","val","getPropertyValue","setStyleProperty","resize","data","strData","JSON","parse","schema","strSchema","number","strNum","n","parseInt","strBool","test","string","str","getObservableAttributes","attrs","attributes","attr","push","disconnectedCallback","connected","connectedCallback","parentDOMNode","observe","adoptedCallback","attributeChangedCallback","attrName","oldVal","newVal","tfn","dataType","name","Function","observer","MutationObserver","mutations","checkInnerHTML","checkStyle","mutation","attributeName","target","nodeName","addedNodes","type","characterData","childList","subtree","querySelectorAll","el","hoverScrollTimeout","autoCompleteContext","applyContextItemStyle","contextItemContainer","createContextMenu","parentContextMenu","container","upArrow","downArrow","children","childMenuArrow","removeChildContext","relatedTarget","contextMenu","contains","splice","indexOf","contextAddCallback","getAttribute","cPos","childContextMenuMarginLeft","offsetWidth","childContextMenuMarginTop","createChildContext","childContextMenuArrowHTML","checkArrowVisibility","scrollHeight","fade","element","opacity","timer","setInterval","clearInterval","display","animationDurationHideContextMenu","unfade","animationDurationShowContextMenu","startHoverScroll","t","a","contextHoverScrollAmount","setTimeout","contextHoverScrollRateMs","endHoverScroll","clearTimeout","contextMenuZIndex","color","contextMenuArrowColor","textAlign","inputDropdown","maxHeight","autocompleteBottomMargin","minWidth","width","hasFocus","deltaY","deltaX","contextMenuArrowUpHTML","contextMenuArrowDownHTML","contextMenuWindowMargin","parentGrid","c","createFilterContextMenuItems","filterContainer","filterLabel","filterAutoCompleteButton","filterInput","cell","header","iRect","checkRegExpErrorState","background","contextFilterInputBackground","contextFilterInputColor","invalidFilterRegEx","contextFilterInvalidRegExpBackground","contextFilterInvalidRegExpColor","fillAutoComplete","count","blanksItem","viewData","row","cellValue","String","trim","blankValues","includes","blanksText","maxAutoCompleteItems","formatters","stopPropagation","disposeAutocomplete","keys","concat","map","key","createAutoCompleteContext","autoCompleteItems","onclick","disposeContextMenu","preventDefault","setFilter","en","columnFilters","filterOptionText","contextFilterButtonHTML","cf","h","getHeaderByName","removeFilterOptionText","removeFilterClick","controlInput","focus","addDefaultContextMenuItem","getSchema","columns","getColumnsMap","Map","_col","columnIndex","isSorting","orderings","isNormalCell","isBackground","isColumnHeaderCellCap","isScrollBar","isCorner","isRowHeader","showFilter","showCopy","canSelectionsBeCopied","copyText","execCommand","showPaste","clipBoardData","pasteText","paste","draw","showColumnSelector","columnSelectorText","d","column","toggleColumnVisibility","hidden","setStorageData","columnSelectorHiddenText","columnSelectorVisibleText","columnOrderIndex","orders","contiguousColumns","getSelectedContiguousColumns","col","join","hideColumnText","hideColumns","orderIndex","saveAppearance","showClearSettingsOption","sizes","rows","clearSettingsOptionText","createRowOrders","createColumnOrders","storedSettings","columnWidth","cellWidth","cellHeight","allowSorting","showOrderByOption","showOrderByOptionTextAsc","order","showOrderByOptionTextDesc","canHideRows","range","getSelectedContiguousRows","boundRowIndexes","viewRowIndex","getBoundRowIndexFromViewRowIndex","showHideRow","hideRows","it","showHideRows","groupAreaHeight","getColumnGroupAreaHeight","groupAreaWidth","getRowGroupAreaWidth","setCollapseStateForAllGroups","allGroups","collapsed","groups","j","group","refresh","showRemoveAllGroupColumns","groupedColumns","showExpandAllGroupColumns","showCollapseAllGroupColumns","showRemoveAllGroupRows","groupedRows","showExpandAllGroupRows","showCollapseAllGroupRows","canGroupByColumns","allowGroupingColumns","isColumnHeader","canUngroupColumns","canGroupByRows","allowGroupingRows","canUngroupRows","groupIndexes","headerIndex","isColumnSelected","isNewGroupRangeValid","groupTitles","groupNames","showGroupColumns","groupColumns","getGroupsColumnBelongsTo","from","to","cell0","cell1","formatArgs","showRemoveGroupColumns","removeGroupColumns","console","warn","rangeTitle","rowIndex","showGroupRows","groupRows","getGroupsRowBelongsTo","showRemoveGroupRows","removeGroupRows","event","mousedown","mouseup","contextmenuEvent","overridePos","childGrids","childGrid","offsetLeft","offsetTop","isChildGrid","childGridsOfParent","matchedMe","find","grid","nodeA","nodeB","x0","x1","y0","y1","node","newX1","newY1","nodeType","contextPosition","getLayerPos","NativeEvent","getCellAt","isGrid","contextMenuMarginLeft","canvasOffsetLeft","contextMenuMarginTop","canvasOffsetTop","mobileContextMenuMargin","filterButtonMenuOffsetTop","getClippingRect","ele","boundingRect","eleRect","clipRect","w","parentRect","Infinity","columnHeaderCellHeight","getColumnHeaderCellHeight","rowHeaderCellWidth","getRowHeaderCellWidth","scrollBarWidth","clipElement","clip","scrollingElement","resizeEditInput","input","editCell","bm","gridBorderCollapse","borderWidth","cellBorderWidth","getVisibleCellByIndex","mobileEditInputHeight","groupAreaOffsetY","groupAreaOffsetX","columnGroupsAreaHeight","rowGroupsAreaWidth","cellPaddingLeft","ignoreScrollOffset","calculatedTree","offsetParent","isTree","clientX","clientY","endEdit","abort","abortEdit","newValue","oldValue","changes","originalData","boundRowIndex","defaultValue","aborted","addRow","createNewRowData","beginEditAt","inEnterMode","editable","adjacentCells","enumItems","enu","option","valueInEnum","scrollIntoView","setActiveCell","getAdjacentCells","multiLine","editCellZIndex","fontSize","editCellFontSize","scale","cellValueIsEmpty","shouldClearCellValue","Math","round","nx","ny","altKey","nextRowIndex","shiftKey","max","min","last","first","className","css","padding","buttonPadding","borderStyle","borderColor","buttonBorderColor","cursor","buttonBackgroundColor","userSelect","buttonHoverBackgroundColor","buttonActiveBorderColor","buttonActiveBackgroundColor","verticalAlign","buttonArrowColor","lineHeight","fontWeight","fontFamily","contextMenuFontFamily","contextMenuFontSize","margin","contextMenuItemMargin","borderRadius","contextMenuItemBorderRadius","contextMenuHoverBackground","contextMenuHoverColor","contextMenuLabelMargin","contextMenuLabelDisplay","contextMenuLabelMinWidth","contextMenuLabelMaxWidth","contextMenuBackground","contextMenuColor","border","contextMenuBorder","contextMenuPadding","contextMenuBorderRadius","contextMenuOpacity","overflow","whiteSpace","contextMenuCursor","marginLeft","contextFilterInputBorder","contextFilterInputBorderRadius","contextFilterInputFontFamily","contextFilterInputFontSize","contextFilterButtonBorder","contextFilterButtonBorderRadius","contextMenuFilterButtonFontFamily","contextMenuFilterButtonFontSize","cssFloat","childContextMenuArrowColor","contextMenuChildArrowFontSize","boxSizing","outline","mobileEditFontFamily","mobileEditFontSize","editCellBorder","editCellColor","editCellBackgroundColor","appearance","webkitAppearance","mozAppearance","editCellPaddingLeft","editCellFontFamily","boxShadow","editCellBoxShadow","contextMenuFilterInvalidExpresion","appendTo","setDom","ctx","context","eventParent","onblur","blur","parentIsCanvas","getContext","textBaseline","parentNodeStyle","touchstart","dblclick","mousemove","scrollWheel","copy","cut","keypress","keyup","keydown","isCellSelected","perfCounters","cachedImagesDrawn","drawCount","perfWindowSize","entityCount","hiddenFrozenColumnCount","scrollDebugCounters","touchPPSCounters","htmlImageCache","fillArray","low","high","step","drawPerfLine","perfArr","arrIndex","useAbs","beginPath","moveTo","cx","cy","abs","lineTo","strokeStyle","stroke","drawOnAllImagesLoaded","loaded","html","complete","drawHtml","v","formattedValue","cacheKey","toString","drawImage","Image","onload","src","btoa","drawLines","coords","fill","drawGroupHandle","fillRect","strokeRect","drawUnhideIndicator","size","dir","active","minPadding","maxPadding","longEdge","median","halfLongEdge","borderCoords","unhideIndicatorBorderColor","lineWidth","fillStyle","unhideIndicatorBackgroundColor","offset","unhideIndicatorColor","drawOrderByArrow","mt","columnHeaderOrderByArrowMarginTop","ml","columnHeaderOrderByArrowMarginLeft","mr","columnHeaderOrderByArrowMarginRight","aw","columnHeaderOrderByArrowWidth","ah","columnHeaderOrderByArrowHeight","columnHeaderOrderByArrowColor","columnHeaderOrderByArrowBorderColor","orderDirection","drawTreeArrow","treeArrowMarginTop","treeArrowMarginRight","treeArrowMarginLeft","treeArrowWidth","treeArrowHeight","treeArrowColor","treeArrowBorderColor","openChildren","drawCellTreeIcon","tree","rowTree","parentCount","iconSize","cellTreeIconWidth","marginTop","cellTreeIconMarginTop","marginRight","cellTreeIconMarginRight","cellTreeIconMarginLeft","paddingLeft","icon","oldFillStyle","oldStrokeStyle","hovered","hovers","onCellTreeIcon","cellTreeIconHoverFillColor","cellTreeIconFillColor","cellTreeIconBorderColor","expand","cellTreeIconLineWidth","cellTreeIconLineColor","drawFilterButtonArrow","filterButtonHeight","filterButtonArrowHeight","filterButtonWidth","filterButtonArrowWidth","filterButtonArrowColor","filterButtonArrowBorderColor","radiusRect","radius","b","quadraticCurveTo","fillText","text","fillCircle","arc","PI","strokeCircle","clipFrozenArea","mode","lastFrozenColumnPixel","lastFrozenRowPixel","fillHandle","selectionHandleType","strokeHandle","addselectionHandle","hw","selectionHandleSize","tr","br","tl","bl","addBorderLine","l","addEllipsis","ellipsisCache","measureText","wrapText","splitChar","lines","calculatedLineHeight","word","words","split","textHeight","out","wrap","cellWhiteSpace","autoResize","autoResizeRows","elWidth","et","ellipsisText","elClipLength","plWidth","clippedVal","ogWordWidth","previousLine","line","cHeight","paddedHeight","curSplitChar","measure","paddedWidth","arr","originText","stepLength","direction","substr","drawText","treeCellPadding","ll","fontHeight","vPos","hPos","orderByArrowWidth","horizontalAlignment","paddingRight","verticalAlignment","paddingBottom","lineSpacing","debug","font","debugFont","debugColor","stringify","pw","idx_ord","sortColumnIndex","getFrozenColumnsWidth","frozenColumn","collapsedGroups","getCollapsedColumnGroups","isCollapsed","findIndex","getColumnWidth","internal","visible","checkScrollHeight","rowHeaderCell","treeGrid","rowOpen","rowHeight","cornerCell","rowData","aCell","bc","selectionBorders","moveBorders","selectionHandles","rowHeaders","u","currentCell","rowGroupsRectInfo","rowGroupsFrozenInfo","columnGroupsRectInfo","collapsedColumnGroups","collapsedRowGroups","getCollapsedRowGroups","currentRowIndexOffset","rowIndexOffsetByHiddenRows","hiddenRowRanges","plus","sort","performance","now","visibleRowHeights","saveRowGroupsRectInfo","saveColumnGroupsRectInfo","isColumnCollapsedByGroup","drawScrollBars","drawCorner","entities","m","scrollBarBoxMargin","scrollBarBorderColor","scrollBarBorderWidth","horizontalBox","scrollCache","horizontalBar","scrollBoxWidth","scrollWidth","verticalBox","frozenRow","verticalBar","scrollBoxHeight","horizontalBarVisible","scrollBarBackgroundColor","scrollBarBoxColor","horizontalBoxVisible","scrollBarActiveColor","scrollBarBoxBorderRadius","visibleCells","unshift","verticalBarVisible","verticalBoxVisible","scrollBarCornerBorderColor","scrollBarCornerBackgroundColor","corner","createHandlesOverlayArray","allowMovingSelection","selectionBorderTop","selectionBorderRight","selectionHandle","selectionBorderLeft","fillOverlay","handle","snapTo","selectionBorderBottom","selectionHandleBehavior","createBorderOverlayArray","drawArray","propPrefix","offsetPoint","selectionBorder","isSelected","selections","lastColumnIndex","lastRowIndex","isHeader","drawCell","rowOrderIndex","isActiveRowHeader","activeCell","isRowSelected","drawEach","cellStyle","cellGridAttributes","isFilterable","filterable","selected","hoverMode","openedFilter","selectedFilterButton","rawValue","f","orderByArrowSize","treeArrowSize","isActiveColumnHeader","viewColumnIndex","activeHeader","visibleRows","paddingTop","cellLineHeight","cellLineSpacing","boundColumnIndex","getBoundColumnIndexFromViewColumnIndex","sortRowIndex","isNormal","gridId","isRowTree","cellTree","rowTreeColIndex","isColumnTree","userHeight","userWidth","cellHeightWithChildGrid","cellWidthWithChildGrid","save","showRowNumbers","createGrid","cellGridHeight","orderBy","filterTextPrefix","isDrawText","movingSelection","moveOffset","restore","drawFilterButton","showRowNumberGaps","previousRowNumber","hasRowGap","beginRowIndex","endRowIndex","barHeight","rowHeaderCellRowNumberGapHeight","barColor","rowHeaderCellRowNumberGapColor","showUnhideColumnsIndicator","unhideIndicator","unhideIndicatorSize","cellX","topY","isActive","orderIndex0","orderIndex1","isHiddenColumn","drawIndicator","leftX","visibleUnhideIndicators","x2","y2","iconsWidth","lineX0","lineX1","orderIndexPtr","prevColumnIndex","nextColumnIndex","indicatorX","showUnhideRowsIndicator","cellY","topIndicators","bottomIndicators","matched","indicatorY","posX","posY","filterButtonBorderColor","filterButtonBackgroundColor","filterButtonActiveBackgroundColor","onFilterButton","filterButtonHoverBackgroundColor","filterButtonBorderRadius","drawRowHeader","showRowHeaders","filteredRowNumber","rowHeaderValue","hasActiveFilters","hasCollapsedRowGroup","headerDescription","shift","drawHeaders","g","o","columnHeaderCell","nonFrozenHeaderWidth","drawHeaderColumnRange","start","end","rArgs","rhIndex","showColumnHeaders","scrollPixelLeft","columnHeaderCellBorderWidth","scrollIndexLeft","isColumnHeaderCell","endCap","drawRow","treeHeight","rowSansTreeHeight","trees","scrollIndexRight","scrollPixelRight","initDraw","visibleGroups","firstRowIndexOffset","drawBackground","gridBackgroundColor","initGroupArea","translate","drawGroupArea","mx","my","frozenColumnsWidth","frozenRowsHeight","onTheLeft","columnGroupIndicatorPosition","onTheTop","rowGroupIndicatorPosition","groupingAreaBackgroundColor","assign","columnGroupRowHeight","toggleHandleSize","toggleHandlePadding","centerY","bottomY","leftmostX","drawGroupHandleAtX","pushToVisibleGroups","rightX","crossTheFrozen","notInFrozen","colIndex","compare","groupIndicatorColor","groupIndicatorBackgroundColor","ptr","containsBegining","containsEnd","rightCompare","compareX","minLeftX","lineCoords","colWidth","rowGroupColumnWidth","centerX","topmostY","drawGroupHandleAtY","bottomCompare","compareY","minTopY","drawFrozenRows","ln","allowFreezingRows","frozenMarkerWidth","frozenMarkerBorderWidth","drawRows","snapToRow","scrollPixelTop","scrollIndexTop","scrollIndexBottom","scrollPixelBottom","hide","showNewRow","newRow","drawMoveMarkers","moveOverlayBorderWidth","moveOverlayBorderColor","setLineDash","moveOverlayBorderSegments","drawReorderMarkers","reorderObject","dragOffset","reorderMarkerBackgroundColor","reorderMarkerBorderWidth","reorderMarkerBorderColor","dragMode","getSelectedRowsHeight","reorderMarkerIndexBorderWidth","reorderMarkerIndexBorderColor","reorderTarget","getSelectedColumnsWidth","drawResizeMarkers","resizeAfterDragged","draggingItem","pendingDragResize","resizingRow","resizeMarkerSize","minX","dragStart","resizingStartingWidth","minColumnWidth","minY","resizingStartingHeight","minRowHeight","resizeMarkerColor","drawBorder","gridBorderWidth","gridBorderColor","drawSelectionBorders","dsb","selectionOverlayBorderWidth","selectionOverlayBorderColor","drawFillOverlay","drawSelectionHandles","selectionHandleBorderWidth","selectionHandleBorderColor","selectionHandleColor","az","touchSelectHandleZone","ax","ay","overlay","toX","toY","snap","cursorX","cursorY","fillOverlayBorderColor","fillOverlayBorderWidth","drawActiveCell","cl","acx","acy","acw","ach","selectionMode","activeCellOverlayBorderWidth","activeCellOverlayBorderColor","getHeaderWidth","drawFrozenMarkers","xHover","yHover","allowFreezingColumns","freezeMarkerPosition","frozenMarkerColor","frozenMarkerBorderColor","frozenMarkerHoverColor","frozenMarkerHeaderColor","frozenMarkerHoverBorderColor","dragStartObject","frozenMarkerActiveColor","frozenMarkerActiveBorderColor","nearCell","isGrab","frozenMarkerActiveHeaderColor","drawPerfLines","showPerformance","px","py","ph","dpl","debugPerfChartTextColor","toFixed","debugPerfChartBackground","debugScrollHeightColor","debugScrollWidthColor","debugPerformanceColor","debugEntitiesColor","debugTouchPPSXColor","debugTouchPPSYColor","pop","yPPS","xPPS","drawDebug","perf","reduce","perfDelta","htmlImages","startScale","scaleDelta","zoomDeltaStart","touchLength","touches","touchPosition","touchPosition1","scrollIndex","scrollPixel","canvasOffset","touchDelta","touchAnimateTo","scrollAnimation","touchPPS","touchPPST","xPPST","yPPST","touchDuration","pointerLockPosition","mouse","touch","touchStart","dragContext","debugBackgroundColor","lh","isPrintableKeyEvent","isSupportedHtml","parseData","wheeling","fn","events","removeEachListener","sfn","defaultPrevented","dispatchEachEvent","getRatio","maxPixelRatio","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","refreshScrollCacheX","frozenWidth","isColumnCollapsed","dataWidth","reduceSchema","accumulator","schemaIndex","drawAfterResize","vb","nb","co","isScrollBoxCorner","sbw","ratio","cellBorder","columnHeaderCellBorder","dataHeight","dims","topGroupAreaHeight","leftGroupAreaWidth","ch","checkScrollBoxVisibility","overflowX","overflowY","setScrollBoxSize","setCanvasSize","dim","appliedInlineStyles","args","widthBoxRatio","heightBoxRatio","scrollBarBoxMinSize","scrollBarBoxWidth","bar","box","page","pageUpDownOverlap","newWidth","newHeight","scroll","dontDraw","floor","which","stopFreezeMove","ctrl","ctrlKey","metaKey","persistantSelectionMode","singleSelectionMode","dragBounds","sBounds","delta","disallowVerticalAutoScroll","disallowHorizontalAutoScroll","previousCell","scrollTimer","isInGrid","rowBoundaryCrossed","columnBoundaryCrossed","cellBoundaryCrossed","prefix","cursorGrab","indicator","getUnhideIndicator","dragItem","pc","rc","rx","ry","selecting","getSelectionBounds","isMultiColumnsSelected","isMultiRowsSelected","ignoreNextClick","toggleCollapseTree","dragAddToSelection","unselectCell","selectCell","selectionBounds","clearSelections","selectRow","selectArea","movingSelectionHandle","autoScrollOnMousemove","movedVertically","autoScrollMargin","movedHorizontally","autoScrollZone","columnGroup","getColumnGroupAt","rowGroup","getRowGroupAt","startingBounds","checkSelectionChange","sb","getContextOfSelectionEvent","unhideColumns","unhideRows","toggleGroup","leftOffset","topOffset","xInGrid","yInGrid","selectAll","columnHeaderClickBehavior","treeArrowClickRadius","toggleTree","dragResizeColumn","resizingColumn","dragResizeApply","resizeScrollZone","resizeChildGrids","globalRowResize","stopDragResize","hasMoved","dragItemIsSelected","fitSelectedColumns","fitSelectedRows","scrollGrid","scrollPointerLock","scrollStartMode","movementX","movementY","scrollMode","scrollStart","scrollModes","scrollRepeatRate","selectionScrollIncrement","stopScrollGrid","exitPointerLock","dragReorder","columReorder","rowReorder","allowColumnReordering","allowRowReordering","selectColumn","source","reorderDeadZone","stopDragReorder","originalIndex","targetIndex","orderLists","indexName","selectedIndexes","getRowSelectionStates","sortColumnIndices","selectedColumnIndices","deleteCount","selectColumnViewIndexes","rowIndexes","getRowViewIndexesFromSelection","moveSelection","dragMove","stopDragMove","freezeMove","startFreezeMove","lastMouseDownTarget","move","freeze","selectionHandleMove","onUnhideIndicator","requestPointerLock","selection","stopSelectionHandleMove","cloneSelections","dragging","cols","keepFocusOnMouseOut","selectNone","deleteSelectedData","Number","isArrowKey","changed","shrinkOrExpandSelections","selectionFollowsActiveCell","currentCellIsSelected","fitColumnToValues","autosize","cellTreeExpandCollapse","deltaMode","touchHaltAnimation","scrollTo","pasteData","pasteValue","mimeType","startRowIndex","startColIndex","minRowsLength","minColumnsLength","columnsLength","cellData","forEachSelectedCell","colName","insert","startColumnIndex","reverseRows","reverseColumns","alwaysFilling","affectedCells","columnName","cells","rowsLength","fillCellCallback","filledCells","rowPosReal","rowDataPos","fillingRow","rowPosition","realRowIndex","cellsLength","existingRowData","newRowData","fillArgs","rowOffset","reversed","isFillingRow","fillingRowPosition","fillingRowLength","colPosReal","cellDataPos","fillingColumn","colPosition","existingCellData","columnOffset","newCellData","isFillingColumn","fillingColumnPosition","fillingColumnLength","boundRowIndexMap","getNextVisibleColumnIndex","visibleColumnIndex","getVisibleSchema","getVisibleColumnIndexOf","getSelectionIndex","bounds","rowLength","columnLength","clipboardItems","clipboardData","supportedMimeTypes","pasteableItems","selectionIndex","itemToPaste","pasteType","getAsString","copySelectedCellsToClipboard","clearSelectedCells","apiCompatibleCells","clippingRect","isInSelectionBounds","lastInBoundsLocation","dx","dy","boundsOld","isVertical","isHorizontal","startRow","startColumn","reverseVertically","reverseHorizontally","genericDiv","genericSpan","genericTable","excelTable","excelTableRow","some","expression","IGNORE_NODETYPES","isHtmlTable","sanitizeElementData","elementData","innerText","parseHtmlText","doc","DOMParser","parseFromString","querySelector","parseHtmlTable","trs","childNodes","childNode","parseText","htmlSafe","createTextString","selectedData","isNeat","values","createHTMLString","htmlString","mergeHiddenRowRanges","newRange","inserted","nextRange","ctor","treeGridAttributes","storageName","invalidSearchExpClass","localStyleLibraryStorageKey","add","sortFunction","filters","tempSchema","columnTreeRowStartIndex","columnTreeRowEndIndex","origin","sorters","parsers","schemaHashes","componentL1Events","eventNames","has","result","groupIndex","matchedGroup","gi","nextCollapsed","groupsArray","gIndex","visibility","localStorage","setItem","applyDefaultValue","newRowIndex","forEachHeader","getSchemaNameHash","getFilteredAndSortedViewData","newViewData","originalRowIndex","ranges","countOfRows","headerName","filterText","currentFilterFunction","filterFrozenRows","entries","newLen","len","from2","to2","slice","it2","sortFn","rowA","rowB","rowIndexB","sortFrozenRows","_row","getBestGuessDataType","drawChildGrids","gridKey","setTimer","selectionScrollZone","validateColumn","setDefaults","obj1","obj2","setAttributes","eachAttribute","setStyle","eachStyle","findColumnMaxTextLength","disconnect","tryLoadStoredSettings","reloadStoredValues","tempData","collapsedCount","ctr","ri","lastchild","orTree","ctc","ci","_ri","child","_ci","si","otherData","k","tempRow","colTrees","collapsedColCount","hasOwnProperty","initCellTreeSettings","invalidRowTree","rt","begin","parentIndex","columnTree","dataColumnLength","invalidColumnTree","ct","getDomRoot","shadowRoot","host","getFontName","fontStyle","getFontHeight","parseFloat","parseStyleValue","initProp","propName","getStyleProperty","styleKeys","supressDrawAndEvent","isDim","getItem","message","initialized","addStyleKeyIfNoneExists","publicStyleKeyIntf","initScrollBox","ie","navigator","userAgent","edge","webKit","moz","cursorGrabing","cursorGrabbing","clearChangeLog","gotoCell","gotoRow","addButton","toggleCellCollapseTree","expandCollapseCellTree","findColumnScrollLeft","findRowScrollTop","toggleGroupColumns","toggleGroupRows","isCellVisible","isRowVisible","isColumnVisible","getSchemaFromData","expandTree","collapseTree","insertRow","deleteRow","insertColumn","deleteColumn","addColumn","setRowHeight","setColumnWidth","resetColumnWidths","resetRowHeights","assertPxColor","clearPxColorAssertions","integerToAlpha","DOMStyles","valueObject","filterFor","filterRegExp","regEnd","pattern","exec","flags","substring","flagLength","RegExp","toLocaleUpperCase","textContent","TypeError","currentCursor","warnedForObsoleteSelections","getObsoleteSelectionMatrix","eventName","RangeError","getSelectedData","eachDataRow","setTreeGridAttributes","setCellGridAttributes","setFillCellCallback","schemaGetter","schemaSetter","eachSchemaColumn","hideEachSchemaColumn","getTypes","parseInnerHtml","callback","etl","autoGenerateSchema","dataGetter","dataSetter","autoResizeColumns","sHeight","sWidth","setScrollTop","preventScrollEvent","setScrollLeft","supressDrawEvent","ordA","charCodeAt","ordZ","fromCharCode","showFilterInCell","offsetX","offsetY","targetX","targetY","sbh","treeData","trArgs","treeGridHeight","beginColumnOrderIndex","endColumnOrderIndex","hiddenColumns","newSize","dontSetStorageData","sorter","addGroup","groupFor","removeGroup","firstColumnName","lastColumnName","firstOne","lastOne","error","rowIndexFrom","rowIndexTo","isInteger","dataLength","sel","visibleSchema","selectionLength","xi","maxRowLength","minXi","yi","lastSourceIndex","cidx","indicators","yZero","xZero","useTouchScrollZones","getBorder","entitiy","borderResizeZone","tsz","touchScrollZone","moveMode","borderDragBehavior","moveBorder","xBorderBehavior","yBorderBehavior","isVerticalScrollBar","isHorizontalScrollBar","allowColumnResize","allowColumnResizeFromCell","allowRowHeaderResize","allowRowResize","allowRowResizeFromCell","columnGrabZoneSize","rowGrabZoneSize","mapEachSchemaColumn","rowHeaderCellFont","autosizePadding","autosizeHeaderCellPadding","rowHeaderCellPaddingRight","rowHeaderCellPaddingLeft","formatter","columnHeaderCellFont","columnHeaderCellPaddingRight","columnHeaderCellPaddingLeft","cellAutoResizePadding","cellFont","cellPaddingRight","total","getRowHeight","cellFormatterString","headerCell","asc","aValue","bValue","localeCompare","date","Date","getTime","addIntoSelections","areSelectionsComplex","areSelectionsNeat","cleanupSelections","getSelectionStateFromCells","moveSelections","normalizeSelection","removeFromSelections","SelectionType","selectionCache","selectionCacheWidth","selectionCacheHeight","otherSelections","states","endRow","endColumn","row2","_","rowState","col2","Rows","columnOrderIndexes","columnSchema","allowOnlyOneRow","viewRowIndexes","triggerEvent","dispatchSelectionChangedEvent","Columns","suppressEvent","Cells","unselectRows","selectionList","getSelectedCells","sanitized","sanitizeSelectionBounds","viewDataLength","schemaLength","expandToRow","orderedSchema","getSchemaOrderByViewIndex","hasData","selectedCells","iterateSelectedCells","textString","copiedData","setData","hasCustomWidth","addCol","removeCol","de","dragObject","st","iterator","state","firstRow","replaceAllSelections","newSelections","viewIndexes","keyEvent","fromIndex","orderedIndex","concatenate2DArray","axis","rowInA","rowInB","UnselectedCells","swapProps","obj","prop0","prop1","getSelectionFromString","num","isSameCellsBlock","block0","block1","mergeCellsIntoRowsOrColumns","rowsOrColumns","mergeSelections","sel0","sel1","horizontalConcat","verticalConcat","intersection","getIntersection","removePartOfRowsSelection","remove","removePartOfColumnsSelection","removePartOfCellsSelection","intersect","minStartRow","maxEndRow","maxEndColumn","parts","isChanged","selectedAllRows","selectedAllColumns","isChanged0","isChanged1","isRowsSelection","merged","newMerged","unselectedAllRows","unselectedAllColumns","newSelection","unselect","select","unsel","endMerge","newSel","areAllCellsSelected","iTo","matched0","matched1","countOfColumns","columnOffsetEnd","getVerboseSelectionStateFromCells","allowImpurity","newMatched","baseType","clonedSelections","keyInfo","ArrowLeft","isLeft","ArrowUp","isUp","ArrowRight","isRight","ArrowDown","isDown","originalColumnIndex","matchedSelections","isTopBorder","isBottomBorder","isLeftBorder","isRightBorder","maxRow","maxColumn","afterChange","touchTimerMs","debounceTouchMove","touchMoving","touchScrollTimeout","animationFrames","getTouchPos","touchIndex","easingFunctions","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easing","touchEasingMethod","calculatePPSTimed","touchSigmaTimed","calculatePPS","touchSigma","touchEndAnimation","touchReleaseAnimationDurationMs","stopAnimation","touchEditCell","changedTouches","startingCell","calculatePPSTimer","touchContextTimeout","touchStartEvent","zoomAltered","touchStart1","touchScrollStart","touchContextMenuTimeMs","touchEndEvents","touchmove","passive","touchend","touchcancel","touchSelect","handleType","touchSelecting","touchMove","rw","rScrollZone","lScrollZone","bScrollZone","tScrollZone","t1","t2","touchDeadZone","touchZoomSensitivity","touchZoomMin","touchZoomMax","touchScroll","dz","touchReleaseAcceleration","scrollAnimationPPSThreshold","dom","publicMethods","webComponent","modules","Grid","eval","module","attachShadow","HTMLElement","create","customElements","observedAttributes","define","canvasDatagrid","require","EXCLUDE_GLOBAL","tKeys","argKey","tKey","sKey"],"sourceRoot":""}