{"version":3,"file":"index-CyBXARuf.mjs","sources":["../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/element.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/alphabet.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/cell_range.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/selector.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/scroll.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/history.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/clipboard.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/auto_filter.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/merge.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/helper.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/row.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/col.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/locale/en.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/locale/locale.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/validator.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/validation.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/data_proxy.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/event.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/config.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/resizer.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/scrollbar.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/selector.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/suggest.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/icon.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/calendar.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/datepicker.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/editor.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/button.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/canvas/draw.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/font.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/cell.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/formula.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/format.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/table.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/print.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/contextmenu.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/tooltip.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/item.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/dropdown_item.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_align.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/align.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/valign.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/toggle_item.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/autofilter.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/bold.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/italic.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/strike.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/underline.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/color_palette.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_color.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_linetype.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/border_palette.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_border.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/border.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/icon_item.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/clearformat.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/paintformat.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/text_color.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/fill_color.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_fontsize.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/font_size.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_font.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/font.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_format.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/format.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_formula.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/formula.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/freeze.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/merge.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/redo.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/undo.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/print.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/textwrap.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/more.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/index.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/modal.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/form_input.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/form_select.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/form_field.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/modal_validation.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/sort_filter.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/message.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/sheet.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/bottombar.js","../../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/index.js"],"sourcesContent":["/* global document */\n/* global window */\nclass Element {\n  constructor(tag, className = '') {\n    if (typeof tag === 'string') {\n      this.el = document.createElement(tag);\n      this.el.className = className;\n    } else {\n      this.el = tag;\n    }\n    this.data = {};\n  }\n\n  data(key, value) {\n    if (value !== undefined) {\n      this.data[key] = value;\n      return this;\n    }\n    return this.data[key];\n  }\n\n  on(eventNames, handler) {\n    const [fen, ...oen] = eventNames.split('.');\n    let eventName = fen;\n    if (eventName === 'mousewheel' && /Firefox/i.test(window.navigator.userAgent)) {\n      eventName = 'DOMMouseScroll';\n    }\n    this.el.addEventListener(eventName, (evt) => {\n      handler(evt);\n      for (let i = 0; i < oen.length; i += 1) {\n        const k = oen[i];\n        if (k === 'left' && evt.button !== 0) {\n          return;\n        }\n        if (k === 'right' && evt.button !== 2) {\n          return;\n        }\n        if (k === 'stop') {\n          evt.stopPropagation();\n        }\n      }\n    });\n    return this;\n  }\n\n  offset(value) {\n    if (value !== undefined) {\n      Object.keys(value).forEach((k) => {\n        this.css(k, `${value[k]}px`);\n      });\n      return this;\n    }\n    const {\n      offsetTop, offsetLeft, offsetHeight, offsetWidth,\n    } = this.el;\n    return {\n      top: offsetTop,\n      left: offsetLeft,\n      height: offsetHeight,\n      width: offsetWidth,\n    };\n  }\n\n  scroll(v) {\n    const { el } = this;\n    if (v !== undefined) {\n      if (v.left !== undefined) {\n        el.scrollLeft = v.left;\n      }\n      if (v.top !== undefined) {\n        el.scrollTop = v.top;\n      }\n    }\n    return { left: el.scrollLeft, top: el.scrollTop };\n  }\n\n  box() {\n    return this.el.getBoundingClientRect();\n  }\n\n  parent() {\n    return new Element(this.el.parentNode);\n  }\n\n  children(...eles) {\n    if (arguments.length === 0) {\n      return this.el.childNodes;\n    }\n    eles.forEach(ele => this.child(ele));\n    return this;\n  }\n\n  removeChild(el) {\n    this.el.removeChild(el);\n  }\n\n  /*\n  first() {\n    return this.el.firstChild;\n  }\n\n  last() {\n    return this.el.lastChild;\n  }\n\n  remove(ele) {\n    return this.el.removeChild(ele);\n  }\n\n  prepend(ele) {\n    const { el } = this;\n    if (el.children.length > 0) {\n      el.insertBefore(ele, el.firstChild);\n    } else {\n      el.appendChild(ele);\n    }\n    return this;\n  }\n\n  prev() {\n    return this.el.previousSibling;\n  }\n\n  next() {\n    return this.el.nextSibling;\n  }\n  */\n\n  child(arg) {\n    let ele = arg;\n    if (typeof arg === 'string') {\n      ele = document.createTextNode(arg);\n    } else if (arg instanceof Element) {\n      ele = arg.el;\n    }\n    this.el.appendChild(ele);\n    return this;\n  }\n\n  contains(ele) {\n    return this.el.contains(ele);\n  }\n\n  className(v) {\n    if (v !== undefined) {\n      this.el.className = v;\n      return this;\n    }\n    return this.el.className;\n  }\n\n  addClass(name) {\n    this.el.classList.add(name);\n    return this;\n  }\n\n  hasClass(name) {\n    return this.el.classList.contains(name);\n  }\n\n  removeClass(name) {\n    this.el.classList.remove(name);\n    return this;\n  }\n\n  toggle(cls = 'active') {\n    return this.toggleClass(cls);\n  }\n\n  toggleClass(name) {\n    return this.el.classList.toggle(name);\n  }\n\n  active(flag = true, cls = 'active') {\n    if (flag) this.addClass(cls);\n    else this.removeClass(cls);\n    return this;\n  }\n\n  checked(flag = true) {\n    this.active(flag, 'checked');\n    return this;\n  }\n\n  disabled(flag = true) {\n    if (flag) this.addClass('disabled');\n    else this.removeClass('disabled');\n    return this;\n  }\n\n  // key, value\n  // key\n  // {k, v}...\n  attr(key, value) {\n    if (value !== undefined) {\n      this.el.setAttribute(key, value);\n    } else {\n      if (typeof key === 'string') {\n        return this.el.getAttribute(key);\n      }\n      Object.keys(key).forEach((k) => {\n        this.el.setAttribute(k, key[k]);\n      });\n    }\n    return this;\n  }\n\n  removeAttr(key) {\n    this.el.removeAttribute(key);\n    return this;\n  }\n\n  html(content) {\n    if (content !== undefined) {\n      this.el.innerHTML = content;\n      return this;\n    }\n    return this.el.innerHTML;\n  }\n\n  val(v) {\n    if (v !== undefined) {\n      this.el.value = v;\n      return this;\n    }\n    return this.el.value;\n  }\n\n  focus() {\n    this.el.focus();\n  }\n\n  cssRemoveKeys(...keys) {\n    keys.forEach(k => this.el.style.removeProperty(k));\n    return this;\n  }\n\n  // css( propertyName )\n  // css( propertyName, value )\n  // css( properties )\n  css(name, value) {\n    if (value === undefined && typeof name !== 'string') {\n      Object.keys(name).forEach((k) => {\n        this.el.style[k] = name[k];\n      });\n      return this;\n    }\n    if (value !== undefined) {\n      this.el.style[name] = value;\n      return this;\n    }\n    return this.el.style[name];\n  }\n\n  computedStyle() {\n    return window.getComputedStyle(this.el, null);\n  }\n\n  show() {\n    this.css('display', 'block');\n    return this;\n  }\n\n  hide() {\n    this.css('display', 'none');\n    return this;\n  }\n}\n\nconst h = (tag, className = '') => new Element(tag, className);\n\nexport {\n  Element,\n  h,\n};\n","import './_.prototypes';\n\nconst alphabets = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];\n\n/** index number 2 letters\n * @example stringAt(26) ==> 'AA'\n * @date 2019-10-10\n * @export\n * @param {number} index\n * @returns {string}\n */\nexport function stringAt(index) {\n  let str = '';\n  let cindex = index;\n  while (cindex >= alphabets.length) {\n    cindex /= alphabets.length;\n    cindex -= 1;\n    str += alphabets[parseInt(cindex, 10) % alphabets.length];\n  }\n  const last = index % alphabets.length;\n  str += alphabets[last];\n  return str;\n}\n\n/** translate letter in A1-tag to number\n * @date 2019-10-10\n * @export\n * @param {string} str \"AA\" in A1-tag \"AA1\"\n * @returns {number}\n */\nexport function indexAt(str) {\n  let ret = 0;\n  for (let i = 0; i < str.length - 1; i += 1) {\n    const cindex = str.charCodeAt(i) - 65;\n    const exponet = str.length - 1 - i;\n    ret += (alphabets.length ** exponet) + (alphabets.length * cindex);\n  }\n  ret += str.charCodeAt(str.length - 1) - 65;\n  return ret;\n}\n\n// B10 => x,y\n/** translate A1-tag to XY-tag\n * @date 2019-10-10\n * @export\n * @param {tagA1} src\n * @returns {tagXY}\n */\nexport function expr2xy(src) {\n  let x = '';\n  let y = '';\n  for (let i = 0; i < src.length; i += 1) {\n    if (src.charAt(i) >= '0' && src.charAt(i) <= '9') {\n      y += src.charAt(i);\n    } else {\n      x += src.charAt(i);\n    }\n  }\n  return [indexAt(x), parseInt(y, 10) - 1];\n}\n\n/** translate XY-tag to A1-tag\n * @example x,y => B10\n * @date 2019-10-10\n * @export\n * @param {number} x\n * @param {number} y\n * @returns {tagA1}\n */\nexport function xy2expr(x, y) {\n  return `${stringAt(x)}${y + 1}`;\n}\n\n/** translate A1-tag src by (xn, yn)\n * @date 2019-10-10\n * @export\n * @param {tagA1} src\n * @param {number} xn\n * @param {number} yn\n * @returns {tagA1}\n */\nexport function expr2expr(src, xn, yn, condition = () => true) {\n  if (xn === 0 && yn === 0) return src;\n  const [x, y] = expr2xy(src);\n  if (!condition(x, y)) return src;\n  return xy2expr(x + xn, y + yn);\n}\n\nexport default {\n  stringAt,\n  indexAt,\n  expr2xy,\n  xy2expr,\n  expr2expr,\n};\n","import { xy2expr, expr2xy } from './alphabet';\n\nclass CellRange {\n  constructor(sri, sci, eri, eci, w = 0, h = 0) {\n    this.sri = sri;\n    this.sci = sci;\n    this.eri = eri;\n    this.eci = eci;\n    this.w = w;\n    this.h = h;\n  }\n\n  set(sri, sci, eri, eci) {\n    this.sri = sri;\n    this.sci = sci;\n    this.eri = eri;\n    this.eci = eci;\n  }\n\n  multiple() {\n    return this.eri - this.sri > 0 || this.eci - this.sci > 0;\n  }\n\n  // cell-index: ri, ci\n  // cell-ref: A10\n  includes(...args) {\n    let [ri, ci] = [0, 0];\n    if (args.length === 1) {\n      [ci, ri] = expr2xy(args[0]);\n    } else if (args.length === 2) {\n      [ri, ci] = args;\n    }\n    const {\n      sri, sci, eri, eci,\n    } = this;\n    return sri <= ri && ri <= eri && sci <= ci && ci <= eci;\n  }\n\n  each(cb, rowFilter = () => true) {\n    const {\n      sri, sci, eri, eci,\n    } = this;\n    for (let i = sri; i <= eri; i += 1) {\n      if (rowFilter(i)) {\n        for (let j = sci; j <= eci; j += 1) {\n          cb(i, j);\n        }\n      }\n    }\n  }\n\n  contains(other) {\n    return this.sri <= other.sri\n      && this.sci <= other.sci\n      && this.eri >= other.eri\n      && this.eci >= other.eci;\n  }\n\n  // within\n  within(other) {\n    return this.sri >= other.sri\n      && this.sci >= other.sci\n      && this.eri <= other.eri\n      && this.eci <= other.eci;\n  }\n\n  // disjoint\n  disjoint(other) {\n    return this.sri > other.eri\n      || this.sci > other.eci\n      || other.sri > this.eri\n      || other.sci > this.eci;\n  }\n\n  // intersects\n  intersects(other) {\n    return this.sri <= other.eri\n      && this.sci <= other.eci\n      && other.sri <= this.eri\n      && other.sci <= this.eci;\n  }\n\n  // union\n  union(other) {\n    const {\n      sri, sci, eri, eci,\n    } = this;\n    return new CellRange(\n      other.sri < sri ? other.sri : sri,\n      other.sci < sci ? other.sci : sci,\n      other.eri > eri ? other.eri : eri,\n      other.eci > eci ? other.eci : eci,\n    );\n  }\n\n  // intersection\n  // intersection(other) {}\n\n  // Returns Array<CellRange> that represents that part of this that does not intersect with other\n  // difference\n  difference(other) {\n    const ret = [];\n    const addRet = (sri, sci, eri, eci) => {\n      ret.push(new CellRange(sri, sci, eri, eci));\n    };\n    const {\n      sri, sci, eri, eci,\n    } = this;\n    const dsr = other.sri - sri;\n    const dsc = other.sci - sci;\n    const der = eri - other.eri;\n    const dec = eci - other.eci;\n    if (dsr > 0) {\n      addRet(sri, sci, other.sri - 1, eci);\n      if (der > 0) {\n        addRet(other.eri + 1, sci, eri, eci);\n        if (dsc > 0) {\n          addRet(other.sri, sci, other.eri, other.sci - 1);\n        }\n        if (dec > 0) {\n          addRet(other.sri, other.eci + 1, other.eri, eci);\n        }\n      } else {\n        if (dsc > 0) {\n          addRet(other.sri, sci, eri, other.sci - 1);\n        }\n        if (dec > 0) {\n          addRet(other.sri, other.eci + 1, eri, eci);\n        }\n      }\n    } else if (der > 0) {\n      addRet(other.eri + 1, sci, eri, eci);\n      if (dsc > 0) {\n        addRet(sri, sci, other.eri, other.sci - 1);\n      }\n      if (dec > 0) {\n        addRet(sri, other.eci + 1, other.eri, eci);\n      }\n    }\n    if (dsc > 0) {\n      addRet(sri, sci, eri, other.sci - 1);\n      if (dec > 0) {\n        addRet(sri, other.eri + 1, eri, eci);\n        if (dsr > 0) {\n          addRet(sri, other.sci, other.sri - 1, other.eci);\n        }\n        if (der > 0) {\n          addRet(other.sri + 1, other.sci, eri, other.eci);\n        }\n      } else {\n        if (dsr > 0) {\n          addRet(sri, other.sci, other.sri - 1, eci);\n        }\n        if (der > 0) {\n          addRet(other.sri + 1, other.sci, eri, eci);\n        }\n      }\n    } else if (dec > 0) {\n      addRet(eri, other.eci + 1, eri, eci);\n      if (dsr > 0) {\n        addRet(sri, sci, other.sri - 1, other.eci);\n      }\n      if (der > 0) {\n        addRet(other.eri + 1, sci, eri, other.eci);\n      }\n    }\n    return ret;\n  }\n\n  size() {\n    return [\n      this.eri - this.sri + 1,\n      this.eci - this.sci + 1,\n    ];\n  }\n\n  toString() {\n    const {\n      sri, sci, eri, eci,\n    } = this;\n    let ref = xy2expr(sci, sri);\n    if (this.multiple()) {\n      ref = `${ref}:${xy2expr(eci, eri)}`;\n    }\n    return ref;\n  }\n\n  clone() {\n    const {\n      sri, sci, eri, eci, w, h,\n    } = this;\n    return new CellRange(sri, sci, eri, eci, w, h);\n  }\n\n  /*\n  toJSON() {\n    return this.toString();\n  }\n  */\n\n  equals(other) {\n    return this.eri === other.eri\n      && this.eci === other.eci\n      && this.sri === other.sri\n      && this.sci === other.sci;\n  }\n\n  static valueOf(ref) {\n    // B1:B8, B1 => 1 x 1 cell range\n    const refs = ref.split(':');\n    const [sci, sri] = expr2xy(refs[0]);\n    let [eri, eci] = [sri, sci];\n    if (refs.length > 1) {\n      [eci, eri] = expr2xy(refs[1]);\n    }\n    return new CellRange(sri, sci, eri, eci);\n  }\n}\n\nexport default CellRange;\n\nexport {\n  CellRange,\n};\n","import { CellRange } from './cell_range';\n\nexport default class Selector {\n  constructor() {\n    this.range = new CellRange(0, 0, 0, 0);\n    this.ri = 0;\n    this.ci = 0;\n  }\n\n  multiple() {\n    return this.range.multiple();\n  }\n\n  setIndexes(ri, ci) {\n    this.ri = ri;\n    this.ci = ci;\n  }\n\n  size() {\n    return this.range.size();\n  }\n}\n","export default class Scroll {\n  constructor() {\n    this.x = 0; // left\n    this.y = 0; // top\n    this.ri = 0; // cell row-index\n    this.ci = 0; // cell col-index\n  }\n}\n","// import helper from '../helper';\n\nexport default class History {\n  constructor() {\n    this.undoItems = [];\n    this.redoItems = [];\n  }\n\n  add(data) {\n    this.undoItems.push(JSON.stringify(data));\n    this.redoItems = [];\n  }\n\n  canUndo() {\n    return this.undoItems.length > 0;\n  }\n\n  canRedo() {\n    return this.redoItems.length > 0;\n  }\n\n  undo(currentd, cb) {\n    const { undoItems, redoItems } = this;\n    if (this.canUndo()) {\n      redoItems.push(JSON.stringify(currentd));\n      cb(JSON.parse(undoItems.pop()));\n    }\n  }\n\n  redo(currentd, cb) {\n    const { undoItems, redoItems } = this;\n    if (this.canRedo()) {\n      undoItems.push(JSON.stringify(currentd));\n      cb(JSON.parse(redoItems.pop()));\n    }\n  }\n}\n","export default class Clipboard {\n  constructor() {\n    this.range = null; // CellRange\n    this.state = 'clear';\n  }\n\n  copy(cellRange) {\n    this.range = cellRange;\n    this.state = 'copy';\n    return this;\n  }\n\n  cut(cellRange) {\n    this.range = cellRange;\n    this.state = 'cut';\n    return this;\n  }\n\n  isCopy() {\n    return this.state === 'copy';\n  }\n\n  isCut() {\n    return this.state === 'cut';\n  }\n\n  isClear() {\n    return this.state === 'clear';\n  }\n\n  clear() {\n    this.range = null;\n    this.state = 'clear';\n  }\n}\n","import { CellRange } from './cell_range';\n// operator: all|eq|neq|gt|gte|lt|lte|in|be\n// value:\n//   in => []\n//   be => [min, max]\nclass Filter {\n  constructor(ci, operator, value) {\n    this.ci = ci;\n    this.operator = operator;\n    this.value = value;\n  }\n\n  set(operator, value) {\n    this.operator = operator;\n    this.value = value;\n  }\n\n  includes(v) {\n    const { operator, value } = this;\n    if (operator === 'all') {\n      return true;\n    }\n    if (operator === 'in') {\n      return value.includes(v);\n    }\n    return false;\n  }\n\n  vlength() {\n    const { operator, value } = this;\n    if (operator === 'in') {\n      return value.length;\n    }\n    return 0;\n  }\n\n  getData() {\n    const { ci, operator, value } = this;\n    return { ci, operator, value };\n  }\n}\n\nclass Sort {\n  constructor(ci, order) {\n    this.ci = ci;\n    this.order = order;\n  }\n\n  asc() {\n    return this.order === 'asc';\n  }\n\n  desc() {\n    return this.order === 'desc';\n  }\n}\n\nexport default class AutoFilter {\n  constructor() {\n    this.ref = null;\n    this.filters = [];\n    this.sort = null;\n  }\n\n  setData({ ref, filters, sort }) {\n    if (ref != null) {\n      this.ref = ref;\n      this.filters = filters.map(it => new Filter(it.ci, it.operator, it.value));\n      if (sort) {\n        this.sort = new Sort(sort.ci, sort.order);\n      }\n    }\n  }\n\n  getData() {\n    if (this.active()) {\n      const { ref, filters, sort } = this;\n      return { ref, filters: filters.map(it => it.getData()), sort };\n    }\n    return {};\n  }\n\n  addFilter(ci, operator, value) {\n    const filter = this.getFilter(ci);\n    if (filter == null) {\n      this.filters.push(new Filter(ci, operator, value));\n    } else {\n      filter.set(operator, value);\n    }\n  }\n\n  setSort(ci, order) {\n    this.sort = order ? new Sort(ci, order) : null;\n  }\n\n  includes(ri, ci) {\n    if (this.active()) {\n      return this.hrange().includes(ri, ci);\n    }\n    return false;\n  }\n\n  getSort(ci) {\n    const { sort } = this;\n    if (sort && sort.ci === ci) {\n      return sort;\n    }\n    return null;\n  }\n\n  getFilter(ci) {\n    const { filters } = this;\n    for (let i = 0; i < filters.length; i += 1) {\n      if (filters[i].ci === ci) {\n        return filters[i];\n      }\n    }\n    return null;\n  }\n\n  filteredRows(getCell) {\n    // const ary = [];\n    // let lastri = 0;\n    const rset = new Set();\n    const fset = new Set();\n    if (this.active()) {\n      const { sri, eri } = this.range();\n      const { filters } = this;\n      for (let ri = sri + 1; ri <= eri; ri += 1) {\n        for (let i = 0; i < filters.length; i += 1) {\n          const filter = filters[i];\n          const cell = getCell(ri, filter.ci);\n          const ctext = cell ? cell.text : '';\n          if (!filter.includes(ctext)) {\n            rset.add(ri);\n            break;\n          } else {\n            fset.add(ri);\n          }\n        }\n      }\n    }\n    return { rset, fset };\n  }\n\n  items(ci, getCell) {\n    const m = {};\n    if (this.active()) {\n      const { sri, eri } = this.range();\n      for (let ri = sri + 1; ri <= eri; ri += 1) {\n        const cell = getCell(ri, ci);\n        if (cell !== null && !/^\\s*$/.test(cell.text)) {\n          const key = cell.text;\n          const cnt = (m[key] || 0) + 1;\n          m[key] = cnt;\n        } else {\n          m[''] = (m[''] || 0) + 1;\n        }\n      }\n    }\n    return m;\n  }\n\n  range() {\n    return CellRange.valueOf(this.ref);\n  }\n\n  hrange() {\n    const r = this.range();\n    r.eri = r.sri;\n    return r;\n  }\n\n  clear() {\n    this.ref = null;\n    this.filters = [];\n    this.sort = null;\n  }\n\n  active() {\n    return this.ref !== null;\n  }\n}\n","import { CellRange } from './cell_range';\n\nclass Merges {\n  constructor(d = []) {\n    this._ = d;\n  }\n\n  forEach(cb) {\n    this._.forEach(cb);\n  }\n\n  deleteWithin(cr) {\n    this._ = this._.filter(it => !it.within(cr));\n  }\n\n  getFirstIncludes(ri, ci) {\n    for (let i = 0; i < this._.length; i += 1) {\n      const it = this._[i];\n      if (it.includes(ri, ci)) {\n        return it;\n      }\n    }\n    return null;\n  }\n\n  filterIntersects(cellRange) {\n    return new Merges(this._.filter(it => it.intersects(cellRange)));\n  }\n\n  intersects(cellRange) {\n    for (let i = 0; i < this._.length; i += 1) {\n      const it = this._[i];\n      if (it.intersects(cellRange)) {\n        // console.log('intersects');\n        return true;\n      }\n    }\n    return false;\n  }\n\n  union(cellRange) {\n    let cr = cellRange;\n    this._.forEach((it) => {\n      if (it.intersects(cr)) {\n        cr = it.union(cr);\n      }\n    });\n    return cr;\n  }\n\n  add(cr) {\n    this.deleteWithin(cr);\n    this._.push(cr);\n  }\n\n  // type: row | column\n  shift(type, index, n, cbWithin) {\n    this._.forEach((cellRange) => {\n      const {\n        sri, sci, eri, eci,\n      } = cellRange;\n      const range = cellRange;\n      if (type === 'row') {\n        if (sri >= index) {\n          range.sri += n;\n          range.eri += n;\n        } else if (sri < index && index <= eri) {\n          range.eri += n;\n          cbWithin(sri, sci, n, 0);\n        }\n      } else if (type === 'column') {\n        if (sci >= index) {\n          range.sci += n;\n          range.eci += n;\n        } else if (sci < index && index <= eci) {\n          range.eci += n;\n          cbWithin(sri, sci, 0, n);\n        }\n      }\n    });\n  }\n\n  move(cellRange, rn, cn) {\n    this._.forEach((it1) => {\n      const it = it1;\n      if (it.within(cellRange)) {\n        it.eri += rn;\n        it.sri += rn;\n        it.sci += cn;\n        it.eci += cn;\n      }\n    });\n  }\n\n  setData(merges) {\n    this._ = merges.map(merge => CellRange.valueOf(merge));\n    return this;\n  }\n\n  getData() {\n    return this._.map(merge => merge.toString());\n  }\n}\n\nexport default {};\nexport {\n  Merges,\n};\n","/* eslint-disable no-param-reassign */\nfunction cloneDeep(obj) {\n  return JSON.parse(JSON.stringify(obj));\n}\n\nconst mergeDeep = (object = {}, ...sources) => {\n  sources.forEach((source) => {\n    Object.keys(source).forEach((key) => {\n      const v = source[key];\n      // console.log('k:', key, ', v:', source[key], typeof v, v instanceof Object);\n      if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {\n        object[key] = v;\n      } else if (typeof v !== 'function' && !Array.isArray(v) && v instanceof Object) {\n        object[key] = object[key] || {};\n        mergeDeep(object[key], v);\n      } else {\n        object[key] = v;\n      }\n    });\n  });\n  // console.log('::', object);\n  return object;\n};\n\nfunction equals(obj1, obj2) {\n  const keys = Object.keys(obj1);\n  if (keys.length !== Object.keys(obj2).length) return false;\n  for (let i = 0; i < keys.length; i += 1) {\n    const k = keys[i];\n    const v1 = obj1[k];\n    const v2 = obj2[k];\n    if (v2 === undefined) return false;\n    if (typeof v1 === 'string' || typeof v1 === 'number' || typeof v1 === 'boolean') {\n      if (v1 !== v2) return false;\n    } else if (Array.isArray(v1)) {\n      if (v1.length !== v2.length) return false;\n      for (let ai = 0; ai < v1.length; ai += 1) {\n        if (!equals(v1[ai], v2[ai])) return false;\n      }\n    } else if (typeof v1 !== 'function' && !Array.isArray(v1) && v1 instanceof Object) {\n      if (!equals(v1, v2)) return false;\n    }\n  }\n  return true;\n}\n\n/*\n  objOrAry: obejct or Array\n  cb: (value, index | key) => { return value }\n*/\nconst sum = (objOrAry, cb = value => value) => {\n  let total = 0;\n  let size = 0;\n  Object.keys(objOrAry).forEach((key) => {\n    total += cb(objOrAry[key], key);\n    size += 1;\n  });\n  return [total, size];\n};\n\nfunction deleteProperty(obj, property) {\n  const oldv = obj[`${property}`];\n  delete obj[`${property}`];\n  return oldv;\n}\n\nfunction rangeReduceIf(min, max, inits, initv, ifv, getv) {\n  let s = inits;\n  let v = initv;\n  let i = min;\n  for (; i < max; i += 1) {\n    if (s > ifv) break;\n    v = getv(i);\n    s += v;\n  }\n  return [i, s - v, v];\n}\n\nfunction rangeSum(min, max, getv) {\n  let s = 0;\n  for (let i = min; i < max; i += 1) {\n    s += getv(i);\n  }\n  return s;\n}\n\nfunction rangeEach(min, max, cb) {\n  for (let i = min; i < max; i += 1) {\n    cb(i);\n  }\n}\n\nfunction arrayEquals(a1, a2) {\n  if (a1.length === a2.length) {\n    for (let i = 0; i < a1.length; i += 1) {\n      if (a1[i] !== a2[i]) return false;\n    }\n  } else return false;\n  return true;\n}\n\nfunction digits(a) {\n  const v = `${a}`;\n  let ret = 0;\n  let flag = false;\n  for (let i = 0; i < v.length; i += 1) {\n    if (flag === true) ret += 1;\n    if (v.charAt(i) === '.') flag = true;\n  }\n  return ret;\n}\n\nexport function numberCalc(type, a1, a2) {\n  if (Number.isNaN(a1) || Number.isNaN(a2)) {\n    return a1 + type + a2;\n  }\n  const al1 = digits(a1);\n  const al2 = digits(a2);\n  const num1 = Number(a1);\n  const num2 = Number(a2);\n  let ret = 0;\n  if (type === '-') {\n    ret = num1 - num2;\n  } else if (type === '+') {\n    ret = num1 + num2;\n  } else if (type === '*') {\n    ret = num1 * num2;\n  } else if (type === '/') {\n    ret = num1 / num2;\n    if (digits(ret) > 5) return ret.toFixed(2);\n    return ret;\n  }\n  return ret.toFixed(Math.max(al1, al2));\n}\n\nexport default {\n  cloneDeep,\n  merge: (...sources) => mergeDeep({}, ...sources),\n  equals,\n  arrayEquals,\n  sum,\n  rangeEach,\n  rangeSum,\n  rangeReduceIf,\n  deleteProperty,\n  numberCalc,\n};\n","import helper from './helper';\nimport { expr2expr } from './alphabet';\n\nclass Rows {\n  constructor({ len, height }) {\n    this._ = {};\n    this.len = len;\n    // default row height\n    this.height = height;\n  }\n\n  getHeight(ri) {\n    if (this.isHide(ri)) return 0;\n    const row = this.get(ri);\n    if (row && row.height) {\n      return row.height;\n    }\n    return this.height;\n  }\n\n  setHeight(ri, v) {\n    const row = this.getOrNew(ri);\n    row.height = v;\n  }\n\n  unhide(idx) {\n    let index = idx;\n    while (index > 0) {\n      index -= 1;\n      if (this.isHide(index)) {\n        this.setHide(index, false);\n      } else break;\n    }\n  }\n\n  isHide(ri) {\n    const row = this.get(ri);\n    return row && row.hide;\n  }\n\n  setHide(ri, v) {\n    const row = this.getOrNew(ri);\n    if (v === true) row.hide = true;\n    else delete row.hide;\n  }\n\n  setStyle(ri, style) {\n    const row = this.getOrNew(ri);\n    row.style = style;\n  }\n\n  sumHeight(min, max, exceptSet) {\n    return helper.rangeSum(min, max, (i) => {\n      if (exceptSet && exceptSet.has(i)) return 0;\n      return this.getHeight(i);\n    });\n  }\n\n  totalHeight() {\n    return this.sumHeight(0, this.len);\n  }\n\n  get(ri) {\n    return this._[ri];\n  }\n\n  getOrNew(ri) {\n    this._[ri] = this._[ri] || { cells: {} };\n    return this._[ri];\n  }\n\n  getCell(ri, ci) {\n    const row = this.get(ri);\n    if (row !== undefined && row.cells !== undefined && row.cells[ci] !== undefined) {\n      return row.cells[ci];\n    }\n    return null;\n  }\n\n  getCellMerge(ri, ci) {\n    const cell = this.getCell(ri, ci);\n    if (cell && cell.merge) return cell.merge;\n    return [0, 0];\n  }\n\n  getCellOrNew(ri, ci) {\n    const row = this.getOrNew(ri);\n    row.cells[ci] = row.cells[ci] || {};\n    return row.cells[ci];\n  }\n\n  // what: all | text | format\n  setCell(ri, ci, cell, what = 'all') {\n    const row = this.getOrNew(ri);\n    if (what === 'all') {\n      row.cells[ci] = cell;\n    } else if (what === 'text') {\n      row.cells[ci] = row.cells[ci] || {};\n      row.cells[ci].text = cell.text;\n    } else if (what === 'format') {\n      row.cells[ci] = row.cells[ci] || {};\n      row.cells[ci].style = cell.style;\n      if (cell.merge) row.cells[ci].merge = cell.merge;\n    }\n  }\n\n  setCellText(ri, ci, text) {\n    const cell = this.getCellOrNew(ri, ci);\n    if (cell.editable !== false) cell.text = text;\n  }\n\n  // what: all | format | text\n  copyPaste(srcCellRange, dstCellRange, what, autofill = false, cb = () => {}) {\n    const {\n      sri, sci, eri, eci,\n    } = srcCellRange;\n    const dsri = dstCellRange.sri;\n    const dsci = dstCellRange.sci;\n    const deri = dstCellRange.eri;\n    const deci = dstCellRange.eci;\n    const [rn, cn] = srcCellRange.size();\n    const [drn, dcn] = dstCellRange.size();\n    // console.log(srcIndexes, dstIndexes);\n    let isAdd = true;\n    let dn = 0;\n    if (deri < sri || deci < sci) {\n      isAdd = false;\n      if (deri < sri) dn = drn;\n      else dn = dcn;\n    }\n    for (let i = sri; i <= eri; i += 1) {\n      if (this._[i]) {\n        for (let j = sci; j <= eci; j += 1) {\n          if (this._[i].cells && this._[i].cells[j]) {\n            for (let ii = dsri; ii <= deri; ii += rn) {\n              for (let jj = dsci; jj <= deci; jj += cn) {\n                const nri = ii + (i - sri);\n                const nci = jj + (j - sci);\n                const ncell = helper.cloneDeep(this._[i].cells[j]);\n                // ncell.text\n                if (autofill && ncell && ncell.text && ncell.text.length > 0) {\n                  const { text } = ncell;\n                  let n = (jj - dsci) + (ii - dsri) + 2;\n                  if (!isAdd) {\n                    n -= dn + 1;\n                  }\n                  if (text[0] === '=') {\n                    ncell.text = text.replace(/[a-zA-Z]{1,3}\\d+/g, (word) => {\n                      let [xn, yn] = [0, 0];\n                      if (sri === dsri) {\n                        xn = n - 1;\n                        // if (isAdd) xn -= 1;\n                      } else {\n                        yn = n - 1;\n                      }\n                      if (/^\\d+$/.test(word)) return word;\n                      return expr2expr(word, xn, yn);\n                    });\n                  } else if ((rn <= 1 && cn > 1 && (dsri > eri || deri < sri))\n                    || (cn <= 1 && rn > 1 && (dsci > eci || deci < sci))\n                    || (rn <= 1 && cn <= 1)) {\n                    const result = /[\\\\.\\d]+$/.exec(text);\n                    // console.log('result:', result);\n                    if (result !== null) {\n                      const index = Number(result[0]) + n - 1;\n                      ncell.text = text.substring(0, result.index) + index;\n                    }\n                  }\n                }\n                this.setCell(nri, nci, ncell, what);\n                cb(nri, nci, ncell);\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n\n  cutPaste(srcCellRange, dstCellRange) {\n    const ncellmm = {};\n    this.each((ri) => {\n      this.eachCells(ri, (ci) => {\n        let nri = parseInt(ri, 10);\n        let nci = parseInt(ci, 10);\n        if (srcCellRange.includes(ri, ci)) {\n          nri = dstCellRange.sri + (nri - srcCellRange.sri);\n          nci = dstCellRange.sci + (nci - srcCellRange.sci);\n        }\n        ncellmm[nri] = ncellmm[nri] || { cells: {} };\n        ncellmm[nri].cells[nci] = this._[ri].cells[ci];\n      });\n    });\n    this._ = ncellmm;\n  }\n\n  // src: Array<Array<String>>\n  paste(src, dstCellRange) {\n    if (src.length <= 0) return;\n    const { sri, sci } = dstCellRange;\n    src.forEach((row, i) => {\n      const ri = sri + i;\n      row.forEach((cell, j) => {\n        const ci = sci + j;\n        this.setCellText(ri, ci, cell);\n      });\n    });\n  }\n\n  insert(sri, n = 1) {\n    const ndata = {};\n    this.each((ri, row) => {\n      let nri = parseInt(ri, 10);\n      if (nri >= sri) {\n        nri += n;\n        this.eachCells(ri, (ci, cell) => {\n          if (cell.text && cell.text[0] === '=') {\n            cell.text = cell.text.replace(/[a-zA-Z]{1,3}\\d+/g, word => expr2expr(word, 0, n, (x, y) => y >= sri));\n          }\n        });\n      }\n      ndata[nri] = row;\n    });\n    this._ = ndata;\n    this.len += n;\n  }\n\n  delete(sri, eri) {\n    const n = eri - sri + 1;\n    const ndata = {};\n    this.each((ri, row) => {\n      const nri = parseInt(ri, 10);\n      if (nri < sri) {\n        ndata[nri] = row;\n      } else if (ri > eri) {\n        ndata[nri - n] = row;\n        this.eachCells(ri, (ci, cell) => {\n          if (cell.text && cell.text[0] === '=') {\n            cell.text = cell.text.replace(/[a-zA-Z]{1,3}\\d+/g, word => expr2expr(word, 0, -n, (x, y) => y > eri));\n          }\n        });\n      }\n    });\n    this._ = ndata;\n    this.len -= n;\n  }\n\n  insertColumn(sci, n = 1) {\n    this.each((ri, row) => {\n      const rndata = {};\n      this.eachCells(ri, (ci, cell) => {\n        let nci = parseInt(ci, 10);\n        if (nci >= sci) {\n          nci += n;\n          if (cell.text && cell.text[0] === '=') {\n            cell.text = cell.text.replace(/[a-zA-Z]{1,3}\\d+/g, word => expr2expr(word, n, 0, x => x >= sci));\n          }\n        }\n        rndata[nci] = cell;\n      });\n      row.cells = rndata;\n    });\n  }\n\n  deleteColumn(sci, eci) {\n    const n = eci - sci + 1;\n    this.each((ri, row) => {\n      const rndata = {};\n      this.eachCells(ri, (ci, cell) => {\n        const nci = parseInt(ci, 10);\n        if (nci < sci) {\n          rndata[nci] = cell;\n        } else if (nci > eci) {\n          rndata[nci - n] = cell;\n          if (cell.text && cell.text[0] === '=') {\n            cell.text = cell.text.replace(/[a-zA-Z]{1,3}\\d+/g, word => expr2expr(word, -n, 0, x => x > eci));\n          }\n        }\n      });\n      row.cells = rndata;\n    });\n  }\n\n  // what: all | text | format | merge\n  deleteCells(cellRange, what = 'all') {\n    cellRange.each((i, j) => {\n      this.deleteCell(i, j, what);\n    });\n  }\n\n  // what: all | text | format | merge\n  deleteCell(ri, ci, what = 'all') {\n    const row = this.get(ri);\n    if (row !== null) {\n      const cell = this.getCell(ri, ci);\n      if (cell !== null && cell.editable !== false) {\n        if (what === 'all') {\n          delete row.cells[ci];\n        } else if (what === 'text') {\n          if (cell.text) delete cell.text;\n          if (cell.value) delete cell.value;\n        } else if (what === 'format') {\n          if (cell.style !== undefined) delete cell.style;\n          if (cell.merge) delete cell.merge;\n        } else if (what === 'merge') {\n          if (cell.merge) delete cell.merge;\n        }\n      }\n    }\n  }\n\n  maxCell() {\n    const keys = Object.keys(this._);\n    const ri = keys[keys.length - 1];\n    const col = this._[ri];\n    if (col) {\n      const { cells } = col;\n      const ks = Object.keys(cells);\n      const ci = ks[ks.length - 1];\n      return [parseInt(ri, 10), parseInt(ci, 10)];\n    }\n    return [0, 0];\n  }\n\n  each(cb) {\n    Object.entries(this._).forEach(([ri, row]) => {\n      cb(ri, row);\n    });\n  }\n\n  eachCells(ri, cb) {\n    if (this._[ri] && this._[ri].cells) {\n      Object.entries(this._[ri].cells).forEach(([ci, cell]) => {\n        cb(ci, cell);\n      });\n    }\n  }\n\n  setData(d) {\n    if (d.len) {\n      this.len = d.len;\n      delete d.len;\n    }\n    this._ = d;\n  }\n\n  getData() {\n    const { len } = this;\n    return Object.assign({ len }, this._);\n  }\n}\n\nexport default {};\nexport {\n  Rows,\n};\n","import helper from './helper';\n\nclass Cols {\n  constructor({\n    len, width, indexWidth, minWidth,\n  }) {\n    this._ = {};\n    this.len = len;\n    this.width = width;\n    this.indexWidth = indexWidth;\n    this.minWidth = minWidth;\n  }\n\n  setData(d) {\n    if (d.len) {\n      this.len = d.len;\n      delete d.len;\n    }\n    this._ = d;\n  }\n\n  getData() {\n    const { len } = this;\n    return Object.assign({ len }, this._);\n  }\n\n  getWidth(i) {\n    if (this.isHide(i)) return 0;\n    const col = this._[i];\n    if (col && col.width) {\n      return col.width;\n    }\n    return this.width;\n  }\n\n  getOrNew(ci) {\n    this._[ci] = this._[ci] || {};\n    return this._[ci];\n  }\n\n  setWidth(ci, width) {\n    const col = this.getOrNew(ci);\n    col.width = width;\n  }\n\n  unhide(idx) {\n    let index = idx;\n    while (index > 0) {\n      index -= 1;\n      if (this.isHide(index)) {\n        this.setHide(index, false);\n      } else break;\n    }\n  }\n\n  isHide(ci) {\n    const col = this._[ci];\n    return col && col.hide;\n  }\n\n  setHide(ci, v) {\n    const col = this.getOrNew(ci);\n    if (v === true) col.hide = true;\n    else delete col.hide;\n  }\n\n  setStyle(ci, style) {\n    const col = this.getOrNew(ci);\n    col.style = style;\n  }\n\n  sumWidth(min, max) {\n    return helper.rangeSum(min, max, i => this.getWidth(i));\n  }\n\n  totalWidth() {\n    return this.sumWidth(0, this.len);\n  }\n}\n\nexport default {};\nexport {\n  Cols,\n};\n","export default {\n  toolbar: {\n    undo: 'Undo',\n    redo: 'Redo',\n    print: 'Print',\n    paintformat: 'Paint format',\n    clearformat: 'Clear format',\n    format: 'Format',\n    fontName: 'Font',\n    fontSize: 'Font size',\n    fontBold: 'Font bold',\n    fontItalic: 'Font italic',\n    underline: 'Underline',\n    strike: 'Strike',\n    color: 'Text color',\n    bgcolor: 'Fill color',\n    border: 'Borders',\n    merge: 'Merge cells',\n    align: 'Horizontal align',\n    valign: 'Vertical align',\n    textwrap: 'Text wrapping',\n    freeze: 'Freeze cell',\n    autofilter: 'Filter',\n    formula: 'Functions',\n    more: 'More',\n  },\n  contextmenu: {\n    copy: 'Copy',\n    cut: 'Cut',\n    paste: 'Paste',\n    pasteValue: 'Paste values only',\n    pasteFormat: 'Paste format only',\n    hide: 'Hide',\n    insertRow: 'Insert row',\n    insertColumn: 'Insert column',\n    deleteSheet: 'Delete',\n    deleteRow: 'Delete row',\n    deleteColumn: 'Delete column',\n    deleteCell: 'Delete cell',\n    deleteCellText: 'Delete cell text',\n    validation: 'Data validations',\n    cellprintable: 'Enable export',\n    cellnonprintable: 'Disable export',\n    celleditable: 'Enable editing',\n    cellnoneditable: 'Disable editing',\n  },\n  print: {\n    size: 'Paper size',\n    orientation: 'Page orientation',\n    orientations: ['Landscape', 'Portrait'],\n  },\n  format: {\n    normal: 'Normal',\n    text: 'Plain Text',\n    number: 'Number',\n    percent: 'Percent',\n    rmb: 'RMB',\n    usd: 'USD',\n    eur: 'EUR',\n    date: 'Date',\n    time: 'Time',\n    datetime: 'Date time',\n    duration: 'Duration',\n  },\n  formula: {\n    sum: 'Sum',\n    average: 'Average',\n    max: 'Max',\n    min: 'Min',\n    _if: 'IF',\n    and: 'AND',\n    or: 'OR',\n    concat: 'Concat',\n  },\n  validation: {\n    required: 'it must be required',\n    notMatch: 'it not match its validation rule',\n    between: 'it is between {} and {}',\n    notBetween: 'it is not between {} and {}',\n    notIn: 'it is not in list',\n    equal: 'it equal to {}',\n    notEqual: 'it not equal to {}',\n    lessThan: 'it less than {}',\n    lessThanEqual: 'it less than or equal to {}',\n    greaterThan: 'it greater than {}',\n    greaterThanEqual: 'it greater than or equal to {}',\n  },\n  error: {\n    pasteForMergedCell: 'Unable to do this for merged cells',\n  },\n  calendar: {\n    weeks: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n    months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n  },\n  button: {\n    next: 'Next',\n    cancel: 'Cancel',\n    remove: 'Remove',\n    save: 'Save',\n    ok: 'OK',\n  },\n  sort: {\n    desc: 'Sort Z -> A',\n    asc: 'Sort A -> Z',\n  },\n  filter: {\n    empty: 'empty',\n  },\n  dataValidation: {\n    mode: 'Mode',\n    range: 'Cell Range',\n    criteria: 'Criteria',\n    modeType: {\n      cell: 'Cell',\n      column: 'Colun',\n      row: 'Row',\n    },\n    type: {\n      list: 'List',\n      number: 'Number',\n      date: 'Date',\n      phone: 'Phone',\n      email: 'Email',\n    },\n    operator: {\n      be: 'between',\n      nbe: 'not betwwen',\n      lt: 'less than',\n      lte: 'less than or equal to',\n      gt: 'greater than',\n      gte: 'greater than or equal to',\n      eq: 'equal to',\n      neq: 'not equal to',\n    },\n  },\n};\n","/* global window */\nimport en from './en';\n\n// Defines the fallback language as English\nlet $languages = ['en'];\nconst $messages = {\n  en,\n};\n\nfunction translate(key, messages) {\n  if (messages) {\n    // Return the translation from the first language in the languages array\n    // that has a value for the provided key.\n    for (const lang of $languages) {\n      if (!messages[lang]) break;\n\n      let message = messages[lang];\n\n      // Splits the key at '.' except where escaped as '\\.'\n      const keys = key.match(/(?:\\\\.|[^.])+/g);\n\n      for (let i = 0; i < keys.length; i += 1) {\n        const property = keys[i];\n        const value = message[property];\n\n        // If value doesn't exist, try next language\n        if (!value) break;\n\n        if (i === keys.length - 1) return value;\n\n        // Move down to the next level of the messages object\n        message = value;\n      }\n    }\n  }\n\n  return undefined;\n}\n\nfunction t(key) {\n  let v = translate(key, $messages);\n  if (!v && window && window.x_spreadsheet && window.x_spreadsheet.$messages) {\n    v = translate(key, window.x_spreadsheet.$messages);\n  }\n  return v || '';\n}\n\nfunction tf(key) {\n  return () => t(key);\n}\n\n// If clearLangList is set to false, lang will be added to the front of the\n// languages array. The languages in the language array are searched in order\n// to find a translation. This allows the use of other languages as a fallback\n// if lang is missing some keys. The language array is preloaded with English.\n// To set the languages array to only include lang, set clearLangList to true.\nfunction locale(lang, message, clearLangList = false) {\n  if (clearLangList) {\n    $languages = [lang];\n  } else {\n    // Append to front of array.\n    // Translation method will use the first language in the list that has a\n    // matching key.\n    $languages.unshift(lang);\n  }\n\n  if (message) {\n    $messages[lang] = message;\n  }\n}\n\nexport default {\n  t,\n};\n\nexport {\n  locale,\n  t,\n  tf,\n};\n","import { t } from '../locale/locale';\nimport helper from './helper';\n\nconst rules = {\n  phone: /^[1-9]\\d{10}$/,\n  email: /w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/,\n};\n\nfunction returnMessage(flag, key, ...arg) {\n  let message = '';\n  if (!flag) {\n    message = t(`validation.${key}`, ...arg);\n  }\n  return [flag, message];\n}\n\nexport default class Validator {\n  // operator: b|nb|eq|neq|lt|lte|gt|gte\n  // type: date|number|list|phone|email\n  constructor(type, required, value, operator) {\n    this.required = required;\n    this.value = value;\n    this.type = type;\n    this.operator = operator;\n    this.message = '';\n  }\n\n  parseValue(v) {\n    const { type } = this;\n    if (type === 'date') {\n      return new Date(v);\n    }\n    if (type === 'number') {\n      return Number(v);\n    }\n    return v;\n  }\n\n  equals(other) {\n    let flag = this.type === other.type\n      && this.required === other.required\n      && this.operator === other.operator;\n    if (flag) {\n      if (Array.isArray(this.value)) {\n        flag = helper.arrayEquals(this.value, other.value);\n      } else {\n        flag = this.value === other.value;\n      }\n    }\n    return flag;\n  }\n\n  values() {\n    return this.value.split(',');\n  }\n\n  validate(v) {\n    const {\n      required, operator, value, type,\n    } = this;\n    if (required && /^\\s*$/.test(v)) {\n      return returnMessage(false, 'required');\n    }\n    if (/^\\s*$/.test(v)) return [true];\n    if (rules[type] && !rules[type].test(v)) {\n      return returnMessage(false, 'notMatch');\n    }\n    if (type === 'list') {\n      return returnMessage(this.values().includes(v), 'notIn');\n    }\n    if (operator) {\n      const v1 = this.parseValue(v);\n      if (operator === 'be') {\n        const [min, max] = value;\n        return returnMessage(\n          v1 >= this.parseValue(min) && v1 <= this.parseValue(max),\n          'between',\n          min,\n          max,\n        );\n      }\n      if (operator === 'nbe') {\n        const [min, max] = value;\n        return returnMessage(\n          v1 < this.parseValue(min) || v1 > this.parseValue(max),\n          'notBetween',\n          min,\n          max,\n        );\n      }\n      if (operator === 'eq') {\n        return returnMessage(\n          v1 === this.parseValue(value),\n          'equal',\n          value,\n        );\n      }\n      if (operator === 'neq') {\n        return returnMessage(\n          v1 !== this.parseValue(value),\n          'notEqual',\n          value,\n        );\n      }\n      if (operator === 'lt') {\n        return returnMessage(\n          v1 < this.parseValue(value),\n          'lessThan',\n          value,\n        );\n      }\n      if (operator === 'lte') {\n        return returnMessage(\n          v1 <= this.parseValue(value),\n          'lessThanEqual',\n          value,\n        );\n      }\n      if (operator === 'gt') {\n        return returnMessage(\n          v1 > this.parseValue(value),\n          'greaterThan',\n          value,\n        );\n      }\n      if (operator === 'gte') {\n        return returnMessage(\n          v1 >= this.parseValue(value),\n          'greaterThanEqual',\n          value,\n        );\n      }\n    }\n    return [true];\n  }\n}\n","import Validator from './validator';\nimport { CellRange } from './cell_range';\n\nclass Validation {\n  constructor(mode, refs, validator) {\n    this.refs = refs;\n    this.mode = mode; // cell\n    this.validator = validator;\n  }\n\n  includes(ri, ci) {\n    const { refs } = this;\n    for (let i = 0; i < refs.length; i += 1) {\n      const cr = CellRange.valueOf(refs[i]);\n      if (cr.includes(ri, ci)) return true;\n    }\n    return false;\n  }\n\n  addRef(ref) {\n    this.remove(CellRange.valueOf(ref));\n    this.refs.push(ref);\n  }\n\n  remove(cellRange) {\n    const nrefs = [];\n    this.refs.forEach((it) => {\n      const cr = CellRange.valueOf(it);\n      if (cr.intersects(cellRange)) {\n        const crs = cr.difference(cellRange);\n        crs.forEach(it1 => nrefs.push(it1.toString()));\n      } else {\n        nrefs.push(it);\n      }\n    });\n    this.refs = nrefs;\n  }\n\n  getData() {\n    const { refs, mode, validator } = this;\n    const {\n      type, required, operator, value,\n    } = validator;\n    return {\n      refs, mode, type, required, operator, value,\n    };\n  }\n\n  static valueOf({\n    refs, mode, type, required, operator, value,\n  }) {\n    return new Validation(mode, refs, new Validator(type, required, value, operator));\n  }\n}\nclass Validations {\n  constructor() {\n    this._ = [];\n    // ri_ci: errMessage\n    this.errors = new Map();\n  }\n\n  getError(ri, ci) {\n    return this.errors.get(`${ri}_${ci}`);\n  }\n\n  validate(ri, ci, text) {\n    const v = this.get(ri, ci);\n    const key = `${ri}_${ci}`;\n    const { errors } = this;\n    if (v !== null) {\n      const [flag, message] = v.validator.validate(text);\n      if (!flag) {\n        errors.set(key, message);\n      } else {\n        errors.delete(key);\n      }\n    } else {\n      errors.delete(key);\n    }\n    return true;\n  }\n\n  // type: date|number|phone|email|list\n  // validator: { required, value, operator }\n  add(mode, ref, {\n    type, required, value, operator,\n  }) {\n    const validator = new Validator(\n      type, required, value, operator,\n    );\n    const v = this.getByValidator(validator);\n    if (v !== null) {\n      v.addRef(ref);\n    } else {\n      this._.push(new Validation(mode, [ref], validator));\n    }\n  }\n\n  getByValidator(validator) {\n    for (let i = 0; i < this._.length; i += 1) {\n      const v = this._[i];\n      if (v.validator.equals(validator)) {\n        return v;\n      }\n    }\n    return null;\n  }\n\n  get(ri, ci) {\n    for (let i = 0; i < this._.length; i += 1) {\n      const v = this._[i];\n      if (v.includes(ri, ci)) return v;\n    }\n    return null;\n  }\n\n  remove(cellRange) {\n    this.each((it) => {\n      it.remove(cellRange);\n    });\n  }\n\n  each(cb) {\n    this._.forEach(it => cb(it));\n  }\n\n  getData() {\n    return this._.filter(it => it.refs.length > 0).map(it => it.getData());\n  }\n\n  setData(d) {\n    this._ = d.map(it => Validation.valueOf(it));\n  }\n}\n\nexport default {};\nexport {\n  Validations,\n};\n","/* global document */\n\nimport Selector from './selector';\nimport Scroll from './scroll';\nimport History from './history';\nimport Clipboard from './clipboard';\nimport AutoFilter from './auto_filter';\nimport { Merges } from './merge';\nimport helper from './helper';\nimport { Rows } from './row';\nimport { Cols } from './col';\nimport { Validations } from './validation';\nimport { CellRange } from './cell_range';\nimport { expr2xy, xy2expr } from './alphabet';\nimport { t } from '../locale/locale';\n\n// private methods\n/*\n * {\n *  name: ''\n *  freeze: [0, 0],\n *  formats: [],\n *  styles: [\n *    {\n *      bgcolor: '',\n *      align: '',\n *      valign: '',\n *      textwrap: false,\n *      strike: false,\n *      underline: false,\n *      color: '',\n *      format: 1,\n *      border: {\n *        left: [style, color],\n *        right: [style, color],\n *        top: [style, color],\n *        bottom: [style, color],\n *      },\n *      font: {\n *        name: 'Helvetica',\n *        size: 10,\n *        bold: false,\n *        italic: false,\n *      }\n *    }\n *  ],\n *  merges: [\n *    'A1:F11',\n *    ...\n *  ],\n *  rows: {\n *    1: {\n *      height: 50,\n *      style: 1,\n *      cells: {\n *        1: {\n *          style: 2,\n *          type: 'string',\n *          text: '',\n *          value: '', // cal result\n *        }\n *      }\n *    },\n *    ...\n *  },\n *  cols: {\n *    2: { width: 100, style: 1 }\n *  }\n * }\n */\nconst defaultSettings = {\n  mode: 'edit', // edit | read\n  view: {\n    height: () => document.documentElement.clientHeight,\n    width: () => document.documentElement.clientWidth,\n  },\n  showGrid: true,\n  showToolbar: true,\n  showContextmenu: true,\n  showBottomBar: true,\n  row: {\n    len: 100,\n    height: 25,\n  },\n  col: {\n    len: 26,\n    width: 100,\n    indexWidth: 60,\n    minWidth: 60,\n  },\n  style: {\n    bgcolor: '#ffffff',\n    align: 'left',\n    valign: 'middle',\n    textwrap: false,\n    strike: false,\n    underline: false,\n    color: '#0a0a0a',\n    font: {\n      name: 'Arial',\n      size: 10,\n      bold: false,\n      italic: false,\n    },\n    format: 'normal',\n  },\n};\n\nconst toolbarHeight = 41;\nconst bottombarHeight = 41;\n\n\n// Utility functions\nconst hasOwnProperty = (obj, name) => Object.prototype.hasOwnProperty.call(obj, name);\n\n\n// src: cellRange\n// dst: cellRange\nfunction canPaste(src, dst, error = () => {}) {\n  const { merges } = this;\n  const cellRange = dst.clone();\n  const [srn, scn] = src.size();\n  const [drn, dcn] = dst.size();\n  if (srn > drn) {\n    cellRange.eri = dst.sri + srn - 1;\n  }\n  if (scn > dcn) {\n    cellRange.eci = dst.sci + scn - 1;\n  }\n  if (merges.intersects(cellRange)) {\n    error(t('error.pasteForMergedCell'));\n    return false;\n  }\n  return true;\n}\nfunction copyPaste(srcCellRange, dstCellRange, what, autofill = false) {\n  const { rows, merges } = this;\n  // delete dest merge\n  if (what === 'all' || what === 'format') {\n    rows.deleteCells(dstCellRange, what);\n    merges.deleteWithin(dstCellRange);\n  }\n  rows.copyPaste(srcCellRange, dstCellRange, what, autofill, (ri, ci, cell) => {\n    if (cell && cell.merge) {\n      // console.log('cell:', ri, ci, cell);\n      const [rn, cn] = cell.merge;\n      if (rn <= 0 && cn <= 0) return;\n      merges.add(new CellRange(ri, ci, ri + rn, ci + cn));\n    }\n  });\n}\n\nfunction cutPaste(srcCellRange, dstCellRange) {\n  const { clipboard, rows, merges } = this;\n  rows.cutPaste(srcCellRange, dstCellRange);\n  merges.move(srcCellRange,\n    dstCellRange.sri - srcCellRange.sri,\n    dstCellRange.sci - srcCellRange.sci);\n  clipboard.clear();\n}\n\n// bss: { top, bottom, left, right }\nfunction setStyleBorder(ri, ci, bss) {\n  const { styles, rows } = this;\n  const cell = rows.getCellOrNew(ri, ci);\n  let cstyle = {};\n  if (cell.style !== undefined) {\n    cstyle = helper.cloneDeep(styles[cell.style]);\n  }\n  cstyle = helper.merge(cstyle, { border: bss });\n  cell.style = this.addStyle(cstyle);\n}\n\nfunction setStyleBorders({ mode, style, color }) {\n  const { styles, selector, rows } = this;\n  const {\n    sri, sci, eri, eci,\n  } = selector.range;\n  const multiple = !this.isSignleSelected();\n  if (!multiple) {\n    if (mode === 'inside' || mode === 'horizontal' || mode === 'vertical') {\n      return;\n    }\n  }\n  if (mode === 'outside' && !multiple) {\n    setStyleBorder.call(this, sri, sci, {\n      top: [style, color], bottom: [style, color], left: [style, color], right: [style, color],\n    });\n  } else if (mode === 'none') {\n    selector.range.each((ri, ci) => {\n      const cell = rows.getCell(ri, ci);\n      if (cell && cell.style !== undefined) {\n        const ns = helper.cloneDeep(styles[cell.style]);\n        delete ns.border;\n        // ['bottom', 'top', 'left', 'right'].forEach((prop) => {\n        //   if (ns[prop]) delete ns[prop];\n        // });\n        cell.style = this.addStyle(ns);\n      }\n    });\n  } else if (mode === 'all' || mode === 'inside' || mode === 'outside'\n    || mode === 'horizontal' || mode === 'vertical') {\n    const merges = [];\n    for (let ri = sri; ri <= eri; ri += 1) {\n      for (let ci = sci; ci <= eci; ci += 1) {\n        // jump merges -- start\n        const mergeIndexes = [];\n        for (let ii = 0; ii < merges.length; ii += 1) {\n          const [mri, mci, rn, cn] = merges[ii];\n          if (ri === mri + rn + 1) mergeIndexes.push(ii);\n          if (mri <= ri && ri <= mri + rn) {\n            if (ci === mci) {\n              ci += cn + 1;\n              break;\n            }\n          }\n        }\n        mergeIndexes.forEach(it => merges.splice(it, 1));\n        if (ci > eci) break;\n        // jump merges -- end\n        const cell = rows.getCell(ri, ci);\n        let [rn, cn] = [0, 0];\n        if (cell && cell.merge) {\n          [rn, cn] = cell.merge;\n          merges.push([ri, ci, rn, cn]);\n        }\n        const mrl = rn > 0 && ri + rn === eri;\n        const mcl = cn > 0 && ci + cn === eci;\n        let bss = {};\n        if (mode === 'all') {\n          bss = {\n            bottom: [style, color],\n            top: [style, color],\n            left: [style, color],\n            right: [style, color],\n          };\n        } else if (mode === 'inside') {\n          if (!mcl && ci < eci) bss.right = [style, color];\n          if (!mrl && ri < eri) bss.bottom = [style, color];\n        } else if (mode === 'horizontal') {\n          if (!mrl && ri < eri) bss.bottom = [style, color];\n        } else if (mode === 'vertical') {\n          if (!mcl && ci < eci) bss.right = [style, color];\n        } else if (mode === 'outside' && multiple) {\n          if (sri === ri) bss.top = [style, color];\n          if (mrl || eri === ri) bss.bottom = [style, color];\n          if (sci === ci) bss.left = [style, color];\n          if (mcl || eci === ci) bss.right = [style, color];\n        }\n        if (Object.keys(bss).length > 0) {\n          setStyleBorder.call(this, ri, ci, bss);\n        }\n        ci += cn;\n      }\n    }\n  } else if (mode === 'top' || mode === 'bottom') {\n    for (let ci = sci; ci <= eci; ci += 1) {\n      if (mode === 'top') {\n        setStyleBorder.call(this, sri, ci, { top: [style, color] });\n        ci += rows.getCellMerge(sri, ci)[1];\n      }\n      if (mode === 'bottom') {\n        setStyleBorder.call(this, eri, ci, { bottom: [style, color] });\n        ci += rows.getCellMerge(eri, ci)[1];\n      }\n    }\n  } else if (mode === 'left' || mode === 'right') {\n    for (let ri = sri; ri <= eri; ri += 1) {\n      if (mode === 'left') {\n        setStyleBorder.call(this, ri, sci, { left: [style, color] });\n        ri += rows.getCellMerge(ri, sci)[0];\n      }\n      if (mode === 'right') {\n        setStyleBorder.call(this, ri, eci, { right: [style, color] });\n        ri += rows.getCellMerge(ri, eci)[0];\n      }\n    }\n  }\n}\n\nfunction getCellRowByY(y, scrollOffsety) {\n  const { rows } = this;\n  const fsh = this.freezeTotalHeight();\n  // console.log('y:', y, ', fsh:', fsh);\n  let inits = rows.height;\n  if (fsh + rows.height < y) inits -= scrollOffsety;\n\n  // handle ri in autofilter\n  const frset = this.exceptRowSet;\n\n  let ri = 0;\n  let top = inits;\n  let { height } = rows;\n  for (; ri < rows.len; ri += 1) {\n    if (top > y) break;\n    if (!frset.has(ri)) {\n      height = rows.getHeight(ri);\n      top += height;\n    }\n  }\n  top -= height;\n  // console.log('ri:', ri, ', top:', top, ', height:', height);\n\n  if (top <= 0) {\n    return { ri: -1, top: 0, height };\n  }\n\n  return { ri: ri - 1, top, height };\n}\n\nfunction getCellColByX(x, scrollOffsetx) {\n  const { cols } = this;\n  const fsw = this.freezeTotalWidth();\n  let inits = cols.indexWidth;\n  if (fsw + cols.indexWidth < x) inits -= scrollOffsetx;\n  const [ci, left, width] = helper.rangeReduceIf(\n    0,\n    cols.len,\n    inits,\n    cols.indexWidth,\n    x,\n    i => cols.getWidth(i),\n  );\n  if (left <= 0) {\n    return { ci: -1, left: 0, width: cols.indexWidth };\n  }\n  return { ci: ci - 1, left, width };\n}\n\nexport default class DataProxy {\n  constructor(name, settings) {\n    this.settings = helper.merge(defaultSettings, settings || {});\n    // save data begin\n    this.name = name || 'sheet';\n    this.freeze = [0, 0];\n    this.styles = []; // Array<Style>\n    this.merges = new Merges(); // [CellRange, ...]\n    this.rows = new Rows(this.settings.row);\n    this.cols = new Cols(this.settings.col);\n    this.validations = new Validations();\n    this.hyperlinks = {};\n    this.comments = {};\n    // save data end\n\n    // don't save object\n    this.selector = new Selector();\n    this.scroll = new Scroll();\n    this.history = new History();\n    this.clipboard = new Clipboard();\n    this.autoFilter = new AutoFilter();\n    this.change = () => {};\n    this.exceptRowSet = new Set();\n    this.sortedRowMap = new Map();\n    this.unsortedRowMap = new Map();\n  }\n\n  addValidation(mode, ref, validator) {\n    // console.log('mode:', mode, ', ref:', ref, ', validator:', validator);\n    this.changeData(() => {\n      this.validations.add(mode, ref, validator);\n    });\n  }\n\n  removeValidation() {\n    const { range } = this.selector;\n    this.changeData(() => {\n      this.validations.remove(range);\n    });\n  }\n\n  getSelectedValidator() {\n    const { ri, ci } = this.selector;\n    const v = this.validations.get(ri, ci);\n    return v ? v.validator : null;\n  }\n\n  getSelectedValidation() {\n    const { ri, ci, range } = this.selector;\n    const v = this.validations.get(ri, ci);\n    const ret = { ref: range.toString() };\n    if (v !== null) {\n      ret.mode = v.mode;\n      ret.validator = v.validator;\n    }\n    return ret;\n  }\n\n  canUndo() {\n    return this.history.canUndo();\n  }\n\n  canRedo() {\n    return this.history.canRedo();\n  }\n\n  undo() {\n    this.history.undo(this.getData(), (d) => {\n      this.setData(d);\n    });\n  }\n\n  redo() {\n    this.history.redo(this.getData(), (d) => {\n      this.setData(d);\n    });\n  }\n\n  copy() {\n    this.clipboard.copy(this.selector.range);\n  }\n\n  copyToSystemClipboard() {\n    /* global navigator */\n    if (navigator.clipboard === undefined) {\n      return;\n    }\n    let copyText = '';\n    const rowData = this.rows.getData();\n    for (let ri = this.selector.range.sri; ri <= this.selector.range.eri; ri += 1) {\n      if (hasOwnProperty(rowData, ri)) {\n        for (let ci = this.selector.range.sci; ci <= this.selector.range.eci; ci += 1) {\n          if (ci > this.selector.range.sci) {\n            copyText += '\\t';\n          }\n          if (hasOwnProperty(rowData[ri].cells, ci)) {\n            const cellText = String(rowData[ri].cells[ci].text);\n            if ((cellText.indexOf(`\\n`) === -1) && (cellText.indexOf(`\\t`) === -1) && (cellText.indexOf(`\"`) === -1)) {\n              copyText += cellText;\n            } else {\n              copyText += `\"${cellText}\"`;\n            }\n          }\n        }\n      } else {\n        for (let ci = this.selector.range.sci; ci <= this.selector.range.eci; ci += 1) {\n          copyText += '\\t';\n        }\n      }\n      copyText += '\\n';\n    }\n    navigator.clipboard.writeText(copyText).then(() => {}, (err) => {\n      console.log('text copy to the system clipboard error  ', copyText, err);\n    });\n  }\n\n  cut() {\n    this.clipboard.cut(this.selector.range);\n  }\n\n  // what: all | text | format\n  paste(what = 'all', error = () => {}) {\n    // console.log('sIndexes:', sIndexes);\n    const { clipboard, selector } = this;\n    if (clipboard.isClear()) return false;\n    if (!canPaste.call(this, clipboard.range, selector.range, error)) return false;\n\n    this.changeData(() => {\n      if (clipboard.isCopy()) {\n        copyPaste.call(this, clipboard.range, selector.range, what);\n      } else if (clipboard.isCut()) {\n        cutPaste.call(this, clipboard.range, selector.range);\n      }\n    });\n    return true;\n  }\n\n  pasteFromText(txt) {\n    const lines = txt.split('\\r\\n').map(it => it.replace(/\"/g, '').split('\\t'));\n    if (lines.length > 0) lines.length -= 1;\n    const { rows, selector } = this;\n    this.changeData(() => {\n      rows.paste(lines, selector.range);\n    });\n  }\n\n  autofill(cellRange, what, error = () => {}) {\n    const srcRange = this.selector.range;\n    if (!canPaste.call(this, srcRange, cellRange, error)) return false;\n    this.changeData(() => {\n      copyPaste.call(this, srcRange, cellRange, what, true);\n    });\n    return true;\n  }\n\n  clearClipboard() {\n    this.clipboard.clear();\n  }\n\n  calSelectedRangeByEnd(ri, ci) {\n    const {\n      selector, rows, cols, merges,\n    } = this;\n    let {\n      sri, sci, eri, eci,\n    } = selector.range;\n    const cri = selector.ri;\n    const cci = selector.ci;\n    let [nri, nci] = [ri, ci];\n    if (ri < 0) nri = rows.len - 1;\n    if (ci < 0) nci = cols.len - 1;\n    if (nri > cri) [sri, eri] = [cri, nri];\n    else [sri, eri] = [nri, cri];\n    if (nci > cci) [sci, eci] = [cci, nci];\n    else [sci, eci] = [nci, cci];\n    selector.range = merges.union(new CellRange(\n      sri, sci, eri, eci,\n    ));\n    selector.range = merges.union(selector.range);\n    // console.log('selector.range:', selector.range);\n    return selector.range;\n  }\n\n  calSelectedRangeByStart(ri, ci) {\n    const {\n      selector, rows, cols, merges,\n    } = this;\n    let cellRange = merges.getFirstIncludes(ri, ci);\n    // console.log('cellRange:', cellRange, ri, ci, merges);\n    if (cellRange === null) {\n      cellRange = new CellRange(ri, ci, ri, ci);\n      if (ri === -1) {\n        cellRange.sri = 0;\n        cellRange.eri = rows.len - 1;\n      }\n      if (ci === -1) {\n        cellRange.sci = 0;\n        cellRange.eci = cols.len - 1;\n      }\n    }\n    selector.range = cellRange;\n    return cellRange;\n  }\n\n  setSelectedCellAttr(property, value) {\n    this.changeData(() => {\n      const { selector, styles, rows } = this;\n      if (property === 'merge') {\n        if (value) this.merge();\n        else this.unmerge();\n      } else if (property === 'border') {\n        setStyleBorders.call(this, value);\n      } else if (property === 'formula') {\n        // console.log('>>>', selector.multiple());\n        const { ri, ci, range } = selector;\n        if (selector.multiple()) {\n          const [rn, cn] = selector.size();\n          const {\n            sri, sci, eri, eci,\n          } = range;\n          if (rn > 1) {\n            for (let i = sci; i <= eci; i += 1) {\n              const cell = rows.getCellOrNew(eri + 1, i);\n              cell.text = `=${value}(${xy2expr(i, sri)}:${xy2expr(i, eri)})`;\n            }\n          } else if (cn > 1) {\n            const cell = rows.getCellOrNew(ri, eci + 1);\n            cell.text = `=${value}(${xy2expr(sci, ri)}:${xy2expr(eci, ri)})`;\n          }\n        } else {\n          const cell = rows.getCellOrNew(ri, ci);\n          cell.text = `=${value}()`;\n        }\n      } else {\n        selector.range.each((ri, ci) => {\n          const cell = rows.getCellOrNew(ri, ci);\n          let cstyle = {};\n          if (cell.style !== undefined) {\n            cstyle = helper.cloneDeep(styles[cell.style]);\n          }\n          if (property === 'format') {\n            cstyle.format = value;\n            cell.style = this.addStyle(cstyle);\n          } else if (property === 'font-bold' || property === 'font-italic'\n            || property === 'font-name' || property === 'font-size') {\n            const nfont = {};\n            nfont[property.split('-')[1]] = value;\n            cstyle.font = Object.assign(cstyle.font || {}, nfont);\n            cell.style = this.addStyle(cstyle);\n          } else if (property === 'strike' || property === 'textwrap'\n            || property === 'underline'\n            || property === 'align' || property === 'valign'\n            || property === 'color' || property === 'bgcolor') {\n            cstyle[property] = value;\n            cell.style = this.addStyle(cstyle);\n          } else {\n            cell[property] = value;\n          }\n        });\n      }\n    });\n  }\n\n  // state: input | finished\n  setSelectedCellText(text, state = 'input') {\n    const { autoFilter, selector, rows } = this;\n    const { ri, ci } = selector;\n    let nri = ri;\n    if (this.unsortedRowMap.has(ri)) {\n      nri = this.unsortedRowMap.get(ri);\n    }\n    const oldCell = rows.getCell(nri, ci);\n    const oldText = oldCell ? oldCell.text : '';\n    this.setCellText(nri, ci, text, state);\n    // replace filter.value\n    if (autoFilter.active()) {\n      const filter = autoFilter.getFilter(ci);\n      if (filter) {\n        const vIndex = filter.value.findIndex(v => v === oldText);\n        if (vIndex >= 0) {\n          filter.value.splice(vIndex, 1, text);\n        }\n        // console.log('filter:', filter, oldCell);\n      }\n    }\n    // this.resetAutoFilter();\n  }\n\n  getSelectedCell() {\n    const { ri, ci } = this.selector;\n    let nri = ri;\n    if (this.unsortedRowMap.has(ri)) {\n      nri = this.unsortedRowMap.get(ri);\n    }\n    return this.rows.getCell(nri, ci);\n  }\n\n  xyInSelectedRect(x, y) {\n    const {\n      left, top, width, height,\n    } = this.getSelectedRect();\n    const x1 = x - this.cols.indexWidth;\n    const y1 = y - this.rows.height;\n    // console.log('x:', x, ',y:', y, 'left:', left, 'top:', top);\n    return x1 > left && x1 < (left + width)\n      && y1 > top && y1 < (top + height);\n  }\n\n  getSelectedRect() {\n    return this.getRect(this.selector.range);\n  }\n\n  getClipboardRect() {\n    const { clipboard } = this;\n    if (!clipboard.isClear()) {\n      return this.getRect(clipboard.range);\n    }\n    return { left: -100, top: -100 };\n  }\n\n  getRect(cellRange) {\n    const {\n      scroll, rows, cols, exceptRowSet,\n    } = this;\n    const {\n      sri, sci, eri, eci,\n    } = cellRange;\n    // console.log('sri:', sri, ',sci:', sci, ', eri:', eri, ', eci:', eci);\n    // no selector\n    if (sri < 0 && sci < 0) {\n      return {\n        left: 0, l: 0, top: 0, t: 0, scroll,\n      };\n    }\n    const left = cols.sumWidth(0, sci);\n    const top = rows.sumHeight(0, sri, exceptRowSet);\n    const height = rows.sumHeight(sri, eri + 1, exceptRowSet);\n    const width = cols.sumWidth(sci, eci + 1);\n    // console.log('sri:', sri, ', sci:', sci, ', eri:', eri, ', eci:', eci);\n    let left0 = left - scroll.x;\n    let top0 = top - scroll.y;\n    const fsh = this.freezeTotalHeight();\n    const fsw = this.freezeTotalWidth();\n    if (fsw > 0 && fsw > left) {\n      left0 = left;\n    }\n    if (fsh > 0 && fsh > top) {\n      top0 = top;\n    }\n    return {\n      l: left,\n      t: top,\n      left: left0,\n      top: top0,\n      height,\n      width,\n      scroll,\n    };\n  }\n\n  getCellRectByXY(x, y) {\n    const {\n      scroll, merges, rows, cols,\n    } = this;\n    let { ri, top, height } = getCellRowByY.call(this, y, scroll.y);\n    let { ci, left, width } = getCellColByX.call(this, x, scroll.x);\n    if (ci === -1) {\n      width = cols.totalWidth();\n    }\n    if (ri === -1) {\n      height = rows.totalHeight();\n    }\n    if (ri >= 0 || ci >= 0) {\n      const merge = merges.getFirstIncludes(ri, ci);\n      if (merge) {\n        ri = merge.sri;\n        ci = merge.sci;\n        ({\n          left, top, width, height,\n        } = this.cellRect(ri, ci));\n      }\n    }\n    return {\n      ri, ci, left, top, width, height,\n    };\n  }\n\n  isSignleSelected() {\n    const {\n      sri, sci, eri, eci,\n    } = this.selector.range;\n    const cell = this.getCell(sri, sci);\n    if (cell && cell.merge) {\n      const [rn, cn] = cell.merge;\n      if (sri + rn === eri && sci + cn === eci) return true;\n    }\n    return !this.selector.multiple();\n  }\n\n  canUnmerge() {\n    const {\n      sri, sci, eri, eci,\n    } = this.selector.range;\n    const cell = this.getCell(sri, sci);\n    if (cell && cell.merge) {\n      const [rn, cn] = cell.merge;\n      if (sri + rn === eri && sci + cn === eci) return true;\n    }\n    return false;\n  }\n\n  merge() {\n    const { selector, rows } = this;\n    if (this.isSignleSelected()) return;\n    const [rn, cn] = selector.size();\n    // console.log('merge:', rn, cn);\n    if (rn > 1 || cn > 1) {\n      const { sri, sci } = selector.range;\n      this.changeData(() => {\n        const cell = rows.getCellOrNew(sri, sci);\n        cell.merge = [rn - 1, cn - 1];\n        this.merges.add(selector.range);\n        // delete merge cells\n        this.rows.deleteCells(selector.range);\n        // console.log('cell:', cell, this.d);\n        this.rows.setCell(sri, sci, cell);\n      });\n    }\n  }\n\n  unmerge() {\n    const { selector } = this;\n    if (!this.isSignleSelected()) return;\n    const { sri, sci } = selector.range;\n    this.changeData(() => {\n      this.rows.deleteCell(sri, sci, 'merge');\n      this.merges.deleteWithin(selector.range);\n    });\n  }\n\n  canAutofilter() {\n    return !this.autoFilter.active();\n  }\n\n  autofilter() {\n    const { autoFilter, selector } = this;\n    this.changeData(() => {\n      if (autoFilter.active()) {\n        autoFilter.clear();\n        this.exceptRowSet = new Set();\n        this.sortedRowMap = new Map();\n        this.unsortedRowMap = new Map();\n      } else {\n        autoFilter.ref = selector.range.toString();\n      }\n    });\n  }\n\n  setAutoFilter(ci, order, operator, value) {\n    const { autoFilter } = this;\n    autoFilter.addFilter(ci, operator, value);\n    autoFilter.setSort(ci, order);\n    this.resetAutoFilter();\n  }\n\n  resetAutoFilter() {\n    const { autoFilter, rows } = this;\n    if (!autoFilter.active()) return;\n    const { sort } = autoFilter;\n    const { rset, fset } = autoFilter.filteredRows((r, c) => rows.getCell(r, c));\n    const fary = Array.from(fset);\n    const oldAry = Array.from(fset);\n    if (sort) {\n      fary.sort((a, b) => {\n        if (sort.order === 'asc') return a - b;\n        if (sort.order === 'desc') return b - a;\n        return 0;\n      });\n    }\n    this.exceptRowSet = rset;\n    this.sortedRowMap = new Map();\n    this.unsortedRowMap = new Map();\n    fary.forEach((it, index) => {\n      this.sortedRowMap.set(oldAry[index], it);\n      this.unsortedRowMap.set(it, oldAry[index]);\n    });\n  }\n\n  deleteCell(what = 'all') {\n    const { selector } = this;\n    this.changeData(() => {\n      this.rows.deleteCells(selector.range, what);\n      if (what === 'all' || what === 'format') {\n        this.merges.deleteWithin(selector.range);\n      }\n    });\n  }\n\n  // type: row | column\n  insert(type, n = 1) {\n    this.changeData(() => {\n      const { sri, sci } = this.selector.range;\n      const { rows, merges, cols } = this;\n      let si = sri;\n      if (type === 'row') {\n        rows.insert(sri, n);\n      } else if (type === 'column') {\n        rows.insertColumn(sci, n);\n        si = sci;\n        cols.len += 1;\n      }\n      merges.shift(type, si, n, (ri, ci, rn, cn) => {\n        const cell = rows.getCell(ri, ci);\n        cell.merge[0] += rn;\n        cell.merge[1] += cn;\n      });\n    });\n  }\n\n  // type: row | column\n  delete(type) {\n    this.changeData(() => {\n      const {\n        rows, merges, selector, cols,\n      } = this;\n      const { range } = selector;\n      const {\n        sri, sci, eri, eci,\n      } = selector.range;\n      const [rsize, csize] = selector.range.size();\n      let si = sri;\n      let size = rsize;\n      if (type === 'row') {\n        rows.delete(sri, eri);\n      } else if (type === 'column') {\n        rows.deleteColumn(sci, eci);\n        si = range.sci;\n        size = csize;\n        cols.len -= 1;\n      }\n      // console.log('type:', type, ', si:', si, ', size:', size);\n      merges.shift(type, si, -size, (ri, ci, rn, cn) => {\n        // console.log('ri:', ri, ', ci:', ci, ', rn:', rn, ', cn:', cn);\n        const cell = rows.getCell(ri, ci);\n        cell.merge[0] += rn;\n        cell.merge[1] += cn;\n        if (cell.merge[0] === 0 && cell.merge[1] === 0) {\n          delete cell.merge;\n        }\n      });\n    });\n  }\n\n  scrollx(x, cb) {\n    const { scroll, freeze, cols } = this;\n    const [, fci] = freeze;\n    const [\n      ci, left, width,\n    ] = helper.rangeReduceIf(fci, cols.len, 0, 0, x, i => cols.getWidth(i));\n    // console.log('fci:', fci, ', ci:', ci);\n    let x1 = left;\n    if (x > 0) x1 += width;\n    if (scroll.x !== x1) {\n      scroll.ci = x > 0 ? ci : 0;\n      scroll.x = x1;\n      cb();\n    }\n  }\n\n  scrolly(y, cb) {\n    const { scroll, freeze, rows } = this;\n    const [fri] = freeze;\n    const [\n      ri, top, height,\n    ] = helper.rangeReduceIf(fri, rows.len, 0, 0, y, i => rows.getHeight(i));\n    let y1 = top;\n    if (y > 0) y1 += height;\n    // console.log('ri:', ri, ' ,y:', y1);\n    if (scroll.y !== y1) {\n      scroll.ri = y > 0 ? ri : 0;\n      scroll.y = y1;\n      cb();\n    }\n  }\n\n  cellRect(ri, ci) {\n    const { rows, cols } = this;\n    const left = cols.sumWidth(0, ci);\n    const top = rows.sumHeight(0, ri);\n    const cell = rows.getCell(ri, ci);\n    let width = cols.getWidth(ci);\n    let height = rows.getHeight(ri);\n    if (cell !== null) {\n      if (cell.merge) {\n        const [rn, cn] = cell.merge;\n        // console.log('cell.merge:', cell.merge);\n        if (rn > 0) {\n          for (let i = 1; i <= rn; i += 1) {\n            height += rows.getHeight(ri + i);\n          }\n        }\n        if (cn > 0) {\n          for (let i = 1; i <= cn; i += 1) {\n            width += cols.getWidth(ci + i);\n          }\n        }\n      }\n    }\n    // console.log('data:', this.d);\n    return {\n      left, top, width, height, cell,\n    };\n  }\n\n  getCell(ri, ci) {\n    return this.rows.getCell(ri, ci);\n  }\n\n  getCellTextOrDefault(ri, ci) {\n    const cell = this.getCell(ri, ci);\n    return (cell && cell.text) ? cell.text : '';\n  }\n\n  getCellStyle(ri, ci) {\n    const cell = this.getCell(ri, ci);\n    if (cell && cell.style !== undefined) {\n      return this.styles[cell.style];\n    }\n    return null;\n  }\n\n  getCellStyleOrDefault(ri, ci) {\n    const { styles, rows } = this;\n    const cell = rows.getCell(ri, ci);\n    const cellStyle = (cell && cell.style !== undefined) ? styles[cell.style] : {};\n    return helper.merge(this.defaultStyle(), cellStyle);\n  }\n\n  getSelectedCellStyle() {\n    const { ri, ci } = this.selector;\n    return this.getCellStyleOrDefault(ri, ci);\n  }\n\n  // state: input | finished\n  setCellText(ri, ci, text, state) {\n    const { rows, history, validations } = this;\n    if (state === 'finished') {\n      rows.setCellText(ri, ci, '');\n      history.add(this.getData());\n      rows.setCellText(ri, ci, text);\n    } else {\n      rows.setCellText(ri, ci, text);\n      this.change(this.getData());\n    }\n    // validator\n    validations.validate(ri, ci, text);\n  }\n\n  freezeIsActive() {\n    const [ri, ci] = this.freeze;\n    return ri > 0 || ci > 0;\n  }\n\n  setFreeze(ri, ci) {\n    this.changeData(() => {\n      this.freeze = [ri, ci];\n    });\n  }\n\n  freezeTotalWidth() {\n    return this.cols.sumWidth(0, this.freeze[1]);\n  }\n\n  freezeTotalHeight() {\n    return this.rows.sumHeight(0, this.freeze[0]);\n  }\n\n  setRowHeight(ri, height) {\n    this.changeData(() => {\n      this.rows.setHeight(ri, height);\n    });\n  }\n\n  setColWidth(ci, width) {\n    this.changeData(() => {\n      this.cols.setWidth(ci, width);\n    });\n  }\n\n  viewHeight() {\n    const { view, showToolbar, showBottomBar } = this.settings;\n    let h = view.height();\n    if (showBottomBar) {\n      h -= bottombarHeight;\n    }\n    if (showToolbar) {\n      h -= toolbarHeight;\n    }\n    return h;\n  }\n\n  viewWidth() {\n    return this.settings.view.width();\n  }\n\n  freezeViewRange() {\n    const [ri, ci] = this.freeze;\n    return new CellRange(0, 0, ri - 1, ci - 1, this.freezeTotalWidth(), this.freezeTotalHeight());\n  }\n\n  contentRange() {\n    const { rows, cols } = this;\n    const [ri, ci] = rows.maxCell();\n    const h = rows.sumHeight(0, ri + 1);\n    const w = cols.sumWidth(0, ci + 1);\n    return new CellRange(0, 0, ri, ci, w, h);\n  }\n\n  exceptRowTotalHeight(sri, eri) {\n    const { exceptRowSet, rows } = this;\n    const exceptRows = Array.from(exceptRowSet);\n    let exceptRowTH = 0;\n    exceptRows.forEach((ri) => {\n      if (ri < sri || ri > eri) {\n        const height = rows.getHeight(ri);\n        exceptRowTH += height;\n      }\n    });\n    return exceptRowTH;\n  }\n\n  viewRange() {\n    const {\n      scroll, rows, cols, freeze, exceptRowSet,\n    } = this;\n    // console.log('scroll:', scroll, ', freeze:', freeze)\n    let { ri, ci } = scroll;\n    if (ri <= 0) [ri] = freeze;\n    if (ci <= 0) [, ci] = freeze;\n\n    let [x, y] = [0, 0];\n    let [eri, eci] = [rows.len, cols.len];\n    for (let i = ri; i < rows.len; i += 1) {\n      if (!exceptRowSet.has(i)) {\n        y += rows.getHeight(i);\n        eri = i;\n      }\n      if (y > this.viewHeight()) break;\n    }\n    for (let j = ci; j < cols.len; j += 1) {\n      x += cols.getWidth(j);\n      eci = j;\n      if (x > this.viewWidth()) break;\n    }\n    // console.log(ri, ci, eri, eci, x, y);\n    return new CellRange(ri, ci, eri, eci, x, y);\n  }\n\n  eachMergesInView(viewRange, cb) {\n    this.merges.filterIntersects(viewRange)\n      .forEach(it => cb(it));\n  }\n\n  hideRowsOrCols() {\n    const { rows, cols, selector } = this;\n    const [rlen, clen] = selector.size();\n    const {\n      sri, sci, eri, eci,\n    } = selector.range;\n    if (rlen === rows.len) {\n      for (let ci = sci; ci <= eci; ci += 1) {\n        cols.setHide(ci, true);\n      }\n    } else if (clen === cols.len) {\n      for (let ri = sri; ri <= eri; ri += 1) {\n        rows.setHide(ri, true);\n      }\n    }\n  }\n\n  // type: row | col\n  // index row-index | col-index\n  unhideRowsOrCols(type, index) {\n    this[`${type}s`].unhide(index);\n  }\n\n  rowEach(min, max, cb) {\n    let y = 0;\n    const { rows } = this;\n    const frset = this.exceptRowSet;\n    const frary = [...frset];\n    let offset = 0;\n    for (let i = 0; i < frary.length; i += 1) {\n      if (frary[i] < min) {\n        offset += 1;\n      }\n    }\n    // console.log('min:', min, ', max:', max, ', scroll:', scroll);\n    for (let i = min + offset; i <= max + offset; i += 1) {\n      if (frset.has(i)) {\n        offset += 1;\n      } else {\n        const rowHeight = rows.getHeight(i);\n        if (rowHeight > 0) {\n          cb(i, y, rowHeight);\n          y += rowHeight;\n          if (y > this.viewHeight()) break;\n        }\n      }\n    }\n  }\n\n  colEach(min, max, cb) {\n    let x = 0;\n    const { cols } = this;\n    for (let i = min; i <= max; i += 1) {\n      const colWidth = cols.getWidth(i);\n      if (colWidth > 0) {\n        cb(i, x, colWidth);\n        x += colWidth;\n        if (x > this.viewWidth()) break;\n      }\n    }\n  }\n\n  defaultStyle() {\n    return this.settings.style;\n  }\n\n  addStyle(nstyle) {\n    const { styles } = this;\n    // console.log('old.styles:', styles, nstyle);\n    for (let i = 0; i < styles.length; i += 1) {\n      const style = styles[i];\n      if (helper.equals(style, nstyle)) return i;\n    }\n    styles.push(nstyle);\n    return styles.length - 1;\n  }\n\n  changeData(cb) {\n    this.history.add(this.getData());\n    cb();\n    this.change(this.getData());\n  }\n\n  setData(d) {\n    Object.keys(d).forEach((property) => {\n      if (property === 'merges' || property === 'rows'\n        || property === 'cols' || property === 'validations') {\n        this[property].setData(d[property]);\n      } else if (property === 'freeze') {\n        const [x, y] = expr2xy(d[property]);\n        this.freeze = [y, x];\n      } else if (property === 'autofilter') {\n        this.autoFilter.setData(d[property]);\n      } else if (d[property] !== undefined) {\n        this[property] = d[property];\n      }\n    });\n    return this;\n  }\n\n  getData() {\n    const {\n      name, freeze, styles, merges, rows, cols, validations, autoFilter,\n    } = this;\n    return {\n      name,\n      freeze: xy2expr(freeze[1], freeze[0]),\n      styles,\n      merges: merges.getData(),\n      rows: rows.getData(),\n      cols: cols.getData(),\n      validations: validations.getData(),\n      autofilter: autoFilter.getData(),\n    };\n  }\n}\n","/* global window */\nexport function bind(target, name, fn) {\n  target.addEventListener(name, fn);\n}\nexport function unbind(target, name, fn) {\n  target.removeEventListener(name, fn);\n}\nexport function unbindClickoutside(el) {\n  if (el.xclickoutside) {\n    unbind(window.document.body, 'click', el.xclickoutside);\n    delete el.xclickoutside;\n  }\n}\n\n// the left mouse button: mousedown → mouseup → click\n// the right mouse button: mousedown → contenxtmenu → mouseup\n// the right mouse button in firefox(>65.0): mousedown → contenxtmenu → mouseup → click on window\nexport function bindClickoutside(el, cb) {\n  el.xclickoutside = (evt) => {\n    // ignore double click\n    // console.log('evt:', evt);\n    if (evt.detail === 2 || el.contains(evt.target)) return;\n    if (cb) cb(el);\n    else {\n      el.hide();\n      unbindClickoutside(el);\n    }\n  };\n  bind(window.document.body, 'click', el.xclickoutside);\n}\nexport function mouseMoveUp(target, movefunc, upfunc) {\n  bind(target, 'mousemove', movefunc);\n  const t = target;\n  t.xEvtUp = (evt) => {\n    // console.log('mouseup>>>');\n    unbind(target, 'mousemove', movefunc);\n    unbind(target, 'mouseup', target.xEvtUp);\n    upfunc(evt);\n  };\n  bind(target, 'mouseup', target.xEvtUp);\n}\n\nfunction calTouchDirection(spanx, spany, evt, cb) {\n  let direction = '';\n  // console.log('spanx:', spanx, ', spany:', spany);\n  if (Math.abs(spanx) > Math.abs(spany)) {\n    // horizontal\n    direction = spanx > 0 ? 'right' : 'left';\n    cb(direction, spanx, evt);\n  } else {\n    // vertical\n    direction = spany > 0 ? 'down' : 'up';\n    cb(direction, spany, evt);\n  }\n}\n// cb = (direction, distance) => {}\nexport function bindTouch(target, { move, end }) {\n  let startx = 0;\n  let starty = 0;\n  bind(target, 'touchstart', (evt) => {\n    const { pageX, pageY } = evt.touches[0];\n    startx = pageX;\n    starty = pageY;\n  });\n  bind(target, 'touchmove', (evt) => {\n    if (!move) return;\n    const { pageX, pageY } = evt.changedTouches[0];\n    const spanx = pageX - startx;\n    const spany = pageY - starty;\n    if (Math.abs(spanx) > 10 || Math.abs(spany) > 10) {\n      // console.log('spanx:', spanx, ', spany:', spany);\n      calTouchDirection(spanx, spany, evt, move);\n      startx = pageX;\n      starty = pageY;\n    }\n    evt.preventDefault();\n  });\n  bind(target, 'touchend', (evt) => {\n    if (!end) return;\n    const { pageX, pageY } = evt.changedTouches[0];\n    const spanx = pageX - startx;\n    const spany = pageY - starty;\n    calTouchDirection(spanx, spany, evt, end);\n  });\n}\n\n// eventemiter\nexport function createEventEmitter() {\n  const listeners = new Map();\n\n  function on(eventName, callback) {\n    const push = () => {\n      const currentListener = listeners.get(eventName);\n      return (Array.isArray(currentListener)\n          && currentListener.push(callback))\n          || false;\n    };\n\n    const create = () => listeners.set(eventName, [].concat(callback));\n\n    return (listeners.has(eventName)\n        && push())\n        || create();\n  }\n\n  function fire(eventName, args) {\n    const exec = () => {\n      const currentListener = listeners.get(eventName);\n      for (const callback of currentListener) callback.call(null, ...args);\n    };\n\n    return listeners.has(eventName)\n        && exec();\n  }\n\n  function removeListener(eventName, callback) {\n    const remove = () => {\n      const currentListener = listeners.get(eventName);\n      const idx = currentListener.indexOf(callback);\n      return (idx >= 0)\n          && currentListener.splice(idx, 1)\n          && listeners.get(eventName).length === 0\n          && listeners.delete(eventName);\n    };\n\n    return listeners.has(eventName)\n        && remove();\n  }\n\n  function once(eventName, callback) {\n    const execCalllback = (...args) => {\n      callback.call(null, ...args);\n      removeListener(eventName, execCalllback);\n    };\n\n    return on(eventName, execCalllback);\n  }\n\n  function removeAllListeners() {\n    listeners.clear();\n  }\n\n  return {\n    get current() {\n      return listeners;\n    },\n    on,\n    once,\n    fire,\n    removeListener,\n    removeAllListeners,\n  };\n}\n","/* global window */\nexport const cssPrefix = 'x-spreadsheet';\nexport const dpr = window.devicePixelRatio || 1;\nexport default {\n  cssPrefix,\n  dpr,\n};\n","/* global window */\nimport { h } from './element';\nimport { mouseMoveUp } from './event';\nimport { cssPrefix } from '../config';\n\nexport default class Resizer {\n  constructor(vertical = false, minDistance) {\n    this.moving = false;\n    this.vertical = vertical;\n    this.el = h('div', `${cssPrefix}-resizer ${vertical ? 'vertical' : 'horizontal'}`).children(\n      this.unhideHoverEl = h('div', `${cssPrefix}-resizer-hover`)\n        .on('dblclick.stop', evt => this.mousedblclickHandler(evt))\n        .css('position', 'absolute').hide(),\n      this.hoverEl = h('div', `${cssPrefix}-resizer-hover`)\n        .on('mousedown.stop', evt => this.mousedownHandler(evt)),\n      this.lineEl = h('div', `${cssPrefix}-resizer-line`).hide(),\n    ).hide();\n    // cell rect\n    this.cRect = null;\n    this.finishedFn = null;\n    this.minDistance = minDistance;\n    this.unhideFn = () => {};\n  }\n\n  showUnhide(index) {\n    this.unhideIndex = index;\n    this.unhideHoverEl.show();\n  }\n\n  hideUnhide() {\n    this.unhideHoverEl.hide();\n  }\n\n  // rect : {top, left, width, height}\n  // line : {width, height}\n  show(rect, line) {\n    const {\n      moving, vertical, hoverEl, lineEl, el,\n      unhideHoverEl,\n    } = this;\n    if (moving) return;\n    this.cRect = rect;\n    const {\n      left, top, width, height,\n    } = rect;\n    el.offset({\n      left: vertical ? left + width - 5 : left,\n      top: vertical ? top : top + height - 5,\n    }).show();\n    hoverEl.offset({\n      width: vertical ? 5 : width,\n      height: vertical ? height : 5,\n    });\n    lineEl.offset({\n      width: vertical ? 0 : line.width,\n      height: vertical ? line.height : 0,\n    });\n    unhideHoverEl.offset({\n      left: vertical ? 5 - width : left,\n      top: vertical ? top : 5 - height,\n      width: vertical ? 5 : width,\n      height: vertical ? height : 5,\n    });\n  }\n\n  hide() {\n    this.el.offset({\n      left: 0,\n      top: 0,\n    }).hide();\n    this.hideUnhide();\n  }\n\n  mousedblclickHandler() {\n    if (this.unhideIndex) this.unhideFn(this.unhideIndex);\n  }\n\n  mousedownHandler(evt) {\n    let startEvt = evt;\n    const {\n      el, lineEl, cRect, vertical, minDistance,\n    } = this;\n    let distance = vertical ? cRect.width : cRect.height;\n    // console.log('distance:', distance);\n    lineEl.show();\n    mouseMoveUp(window, (e) => {\n      this.moving = true;\n      if (startEvt !== null && e.buttons === 1) {\n        // console.log('top:', top, ', left:', top, ', cRect:', cRect);\n        if (vertical) {\n          distance += e.movementX;\n          if (distance > minDistance) {\n            el.css('left', `${cRect.left + distance}px`);\n          }\n        } else {\n          distance += e.movementY;\n          if (distance > minDistance) {\n            el.css('top', `${cRect.top + distance}px`);\n          }\n        }\n        startEvt = e;\n      }\n    }, () => {\n      startEvt = null;\n      lineEl.hide();\n      this.moving = false;\n      this.hide();\n      if (this.finishedFn) {\n        if (distance < minDistance) distance = minDistance;\n        this.finishedFn(cRect, distance);\n      }\n    });\n  }\n}\n","import { h } from './element';\nimport { cssPrefix } from '../config';\n\nexport default class Scrollbar {\n  constructor(vertical) {\n    this.vertical = vertical;\n    this.moveFn = null;\n    this.el = h('div', `${cssPrefix}-scrollbar ${vertical ? 'vertical' : 'horizontal'}`)\n      .child(this.contentEl = h('div', ''))\n      .on('mousemove.stop', () => {})\n      .on('scroll.stop', (evt) => {\n        const { scrollTop, scrollLeft } = evt.target;\n        // console.log('scrollTop:', scrollTop);\n        if (this.moveFn) {\n          this.moveFn(this.vertical ? scrollTop : scrollLeft, evt);\n        }\n        // console.log('evt:::', evt);\n      });\n  }\n\n  move(v) {\n    this.el.scroll(v);\n    return this;\n  }\n\n  scroll() {\n    return this.el.scroll();\n  }\n\n  set(distance, contentDistance) {\n    const d = distance - 1;\n    // console.log('distance:', distance, ', contentDistance:', contentDistance);\n    if (contentDistance > d) {\n      const cssKey = this.vertical ? 'height' : 'width';\n      // console.log('d:', d);\n      this.el.css(cssKey, `${d - 15}px`).show();\n      this.contentEl\n        .css(this.vertical ? 'width' : 'height', '1px')\n        .css(cssKey, `${contentDistance}px`);\n    } else {\n      this.el.hide();\n    }\n    return this;\n  }\n}\n","import { h } from './element';\nimport { cssPrefix } from '../config';\nimport { CellRange } from '../core/cell_range';\n\nconst selectorHeightBorderWidth = 2 * 2 - 1;\nlet startZIndex = 10;\n\nclass SelectorElement {\n  constructor(useHideInput = false) {\n    this.useHideInput = useHideInput;\n    this.inputChange = () => {};\n    this.cornerEl = h('div', `${cssPrefix}-selector-corner`);\n    this.areaEl = h('div', `${cssPrefix}-selector-area`)\n      .child(this.cornerEl).hide();\n    this.clipboardEl = h('div', `${cssPrefix}-selector-clipboard`).hide();\n    this.autofillEl = h('div', `${cssPrefix}-selector-autofill`).hide();\n    this.el = h('div', `${cssPrefix}-selector`)\n      .css('z-index', `${startZIndex}`)\n      .children(this.areaEl, this.clipboardEl, this.autofillEl)\n      .hide();\n    if (useHideInput) {\n      this.hideInput = h('input', '')\n        .on('compositionend', (evt) => {\n          this.inputChange(evt.target.value);\n        });\n      this.el.child(this.hideInputDiv = h('div', 'hide-input').child(this.hideInput));\n      this.el.child(this.hideInputDiv = h('div', 'hide-input').child(this.hideInput));\n    }\n    startZIndex += 1;\n  }\n\n  setOffset(v) {\n    this.el.offset(v).show();\n    return this;\n  }\n\n  hide() {\n    this.el.hide();\n    return this;\n  }\n\n  setAreaOffset(v) {\n    const {\n      left, top, width, height,\n    } = v;\n    const of = {\n      width: width - selectorHeightBorderWidth + 0.8,\n      height: height - selectorHeightBorderWidth + 0.8,\n      left: left - 0.8,\n      top: top - 0.8,\n    };\n    this.areaEl.offset(of).show();\n    if (this.useHideInput) {\n      this.hideInputDiv.offset(of);\n      this.hideInput.val('').focus();\n    }\n  }\n\n  setClipboardOffset(v) {\n    const {\n      left, top, width, height,\n    } = v;\n    this.clipboardEl.offset({\n      left,\n      top,\n      width: width - 5,\n      height: height - 5,\n    });\n  }\n\n  showAutofill(v) {\n    const {\n      left, top, width, height,\n    } = v;\n    this.autofillEl.offset({\n      width: width - selectorHeightBorderWidth,\n      height: height - selectorHeightBorderWidth,\n      left,\n      top,\n    }).show();\n  }\n\n  hideAutofill() {\n    this.autofillEl.hide();\n  }\n\n  showClipboard() {\n    this.clipboardEl.show();\n  }\n\n  hideClipboard() {\n    this.clipboardEl.hide();\n  }\n}\n\nfunction calBRAreaOffset(offset) {\n  const { data } = this;\n  const {\n    left, top, width, height, scroll, l, t,\n  } = offset;\n  const ftwidth = data.freezeTotalWidth();\n  const ftheight = data.freezeTotalHeight();\n  let left0 = left - ftwidth;\n  if (ftwidth > l) left0 -= scroll.x;\n  let top0 = top - ftheight;\n  if (ftheight > t) top0 -= scroll.y;\n  return {\n    left: left0,\n    top: top0,\n    width,\n    height,\n  };\n}\n\nfunction calTAreaOffset(offset) {\n  const { data } = this;\n  const {\n    left, width, height, l, t, scroll,\n  } = offset;\n  const ftwidth = data.freezeTotalWidth();\n  let left0 = left - ftwidth;\n  if (ftwidth > l) left0 -= scroll.x;\n  return {\n    left: left0, top: t, width, height,\n  };\n}\n\nfunction calLAreaOffset(offset) {\n  const { data } = this;\n  const {\n    top, width, height, l, t, scroll,\n  } = offset;\n  const ftheight = data.freezeTotalHeight();\n  let top0 = top - ftheight;\n  // console.log('ftheight:', ftheight, ', t:', t);\n  if (ftheight > t) top0 -= scroll.y;\n  return {\n    left: l, top: top0, width, height,\n  };\n}\n\nfunction setBRAreaOffset(offset) {\n  const { br } = this;\n  br.setAreaOffset(calBRAreaOffset.call(this, offset));\n}\n\nfunction setTLAreaOffset(offset) {\n  const { tl } = this;\n  tl.setAreaOffset(offset);\n}\n\nfunction setTAreaOffset(offset) {\n  const { t } = this;\n  t.setAreaOffset(calTAreaOffset.call(this, offset));\n}\n\nfunction setLAreaOffset(offset) {\n  const { l } = this;\n  l.setAreaOffset(calLAreaOffset.call(this, offset));\n}\n\nfunction setLClipboardOffset(offset) {\n  const { l } = this;\n  l.setClipboardOffset(calLAreaOffset.call(this, offset));\n}\n\nfunction setBRClipboardOffset(offset) {\n  const { br } = this;\n  br.setClipboardOffset(calBRAreaOffset.call(this, offset));\n}\n\nfunction setTLClipboardOffset(offset) {\n  const { tl } = this;\n  tl.setClipboardOffset(offset);\n}\n\nfunction setTClipboardOffset(offset) {\n  const { t } = this;\n  t.setClipboardOffset(calTAreaOffset.call(this, offset));\n}\n\nfunction setAllAreaOffset(offset) {\n  setBRAreaOffset.call(this, offset);\n  setTLAreaOffset.call(this, offset);\n  setTAreaOffset.call(this, offset);\n  setLAreaOffset.call(this, offset);\n}\n\nfunction setAllClipboardOffset(offset) {\n  setBRClipboardOffset.call(this, offset);\n  setTLClipboardOffset.call(this, offset);\n  setTClipboardOffset.call(this, offset);\n  setLClipboardOffset.call(this, offset);\n}\n\nexport default class Selector {\n  constructor(data) {\n    this.inputChange = () => {};\n    this.data = data;\n    this.br = new SelectorElement(true);\n    this.t = new SelectorElement();\n    this.l = new SelectorElement();\n    this.tl = new SelectorElement();\n    this.br.inputChange = (v) => {\n      this.inputChange(v);\n    };\n    this.br.el.show();\n    this.offset = null;\n    this.areaOffset = null;\n    this.indexes = null;\n    this.range = null;\n    this.arange = null;\n    this.el = h('div', `${cssPrefix}-selectors`)\n      .children(\n        this.tl.el,\n        this.t.el,\n        this.l.el,\n        this.br.el,\n      ).hide();\n\n    // for performance\n    this.lastri = -1;\n    this.lastci = -1;\n\n    startZIndex += 1;\n  }\n\n  resetData(data) {\n    this.data = data;\n    this.range = data.selector.range;\n    this.resetAreaOffset();\n  }\n\n  hide() {\n    this.el.hide();\n  }\n\n  resetOffset() {\n    const {\n      data, tl, t, l, br,\n    } = this;\n    const freezeHeight = data.freezeTotalHeight();\n    const freezeWidth = data.freezeTotalWidth();\n    if (freezeHeight > 0 || freezeWidth > 0) {\n      tl.setOffset({ width: freezeWidth, height: freezeHeight });\n      t.setOffset({ left: freezeWidth, height: freezeHeight });\n      l.setOffset({ top: freezeHeight, width: freezeWidth });\n      br.setOffset({ left: freezeWidth, top: freezeHeight });\n    } else {\n      tl.hide();\n      t.hide();\n      l.hide();\n      br.setOffset({ left: 0, top: 0 });\n    }\n  }\n\n  resetAreaOffset() {\n    // console.log('offset:', offset);\n    const offset = this.data.getSelectedRect();\n    const coffset = this.data.getClipboardRect();\n    setAllAreaOffset.call(this, offset);\n    setAllClipboardOffset.call(this, coffset);\n    this.resetOffset();\n  }\n\n  resetBRTAreaOffset() {\n    const offset = this.data.getSelectedRect();\n    const coffset = this.data.getClipboardRect();\n    setBRAreaOffset.call(this, offset);\n    setTAreaOffset.call(this, offset);\n    setBRClipboardOffset.call(this, coffset);\n    setTClipboardOffset.call(this, coffset);\n    this.resetOffset();\n  }\n\n  resetBRLAreaOffset() {\n    const offset = this.data.getSelectedRect();\n    const coffset = this.data.getClipboardRect();\n    setBRAreaOffset.call(this, offset);\n    setLAreaOffset.call(this, offset);\n    setBRClipboardOffset.call(this, coffset);\n    setLClipboardOffset.call(this, coffset);\n    this.resetOffset();\n  }\n\n  set(ri, ci, indexesUpdated = true) {\n    const { data } = this;\n    const cellRange = data.calSelectedRangeByStart(ri, ci);\n    const { sri, sci } = cellRange;\n    if (indexesUpdated) {\n      let [cri, cci] = [ri, ci];\n      if (ri < 0) cri = 0;\n      if (ci < 0) cci = 0;\n      data.selector.setIndexes(cri, cci);\n      this.indexes = [cri, cci];\n    }\n\n    this.moveIndexes = [sri, sci];\n    // this.sIndexes = sIndexes;\n    // this.eIndexes = eIndexes;\n    this.range = cellRange;\n    this.resetAreaOffset();\n    this.el.show();\n  }\n\n  setEnd(ri, ci, moving = true) {\n    const { data, lastri, lastci } = this;\n    if (moving) {\n      if (ri === lastri && ci === lastci) return;\n      this.lastri = ri;\n      this.lastci = ci;\n    }\n    this.range = data.calSelectedRangeByEnd(ri, ci);\n    setAllAreaOffset.call(this, this.data.getSelectedRect());\n  }\n\n  reset() {\n    // console.log('::::', this.data);\n    const { eri, eci } = this.data.selector.range;\n    this.setEnd(eri, eci);\n  }\n\n  showAutofill(ri, ci) {\n    if (ri === -1 && ci === -1) return;\n    // console.log('ri:', ri, ', ci:', ci);\n    // const [sri, sci] = this.sIndexes;\n    // const [eri, eci] = this.eIndexes;\n    const {\n      sri, sci, eri, eci,\n    } = this.range;\n    const [nri, nci] = [ri, ci];\n    // const rn = eri - sri;\n    // const cn = eci - sci;\n    const srn = sri - ri;\n    const scn = sci - ci;\n    const ern = eri - ri;\n    const ecn = eci - ci;\n    if (scn > 0) {\n      // left\n      // console.log('left');\n      this.arange = new CellRange(sri, nci, eri, sci - 1);\n      // this.saIndexes = [sri, nci];\n      // this.eaIndexes = [eri, sci - 1];\n      // data.calRangeIndexes2(\n    } else if (srn > 0) {\n      // top\n      // console.log('top');\n      // nri = sri;\n      this.arange = new CellRange(nri, sci, sri - 1, eci);\n      // this.saIndexes = [nri, sci];\n      // this.eaIndexes = [sri - 1, eci];\n    } else if (ecn < 0) {\n      // right\n      // console.log('right');\n      // nci = eci;\n      this.arange = new CellRange(sri, eci + 1, eri, nci);\n      // this.saIndexes = [sri, eci + 1];\n      // this.eaIndexes = [eri, nci];\n    } else if (ern < 0) {\n      // bottom\n      // console.log('bottom');\n      // nri = eri;\n      this.arange = new CellRange(eri + 1, sci, nri, eci);\n      // this.saIndexes = [eri + 1, sci];\n      // this.eaIndexes = [nri, eci];\n    } else {\n      // console.log('else:');\n      this.arange = null;\n      // this.saIndexes = null;\n      // this.eaIndexes = null;\n      return;\n    }\n    if (this.arange !== null) {\n      // console.log(this.saIndexes, ':', this.eaIndexes);\n      const offset = this.data.getRect(this.arange);\n      offset.width += 2;\n      offset.height += 2;\n      const {\n        br, l, t, tl,\n      } = this;\n      br.showAutofill(calBRAreaOffset.call(this, offset));\n      l.showAutofill(calLAreaOffset.call(this, offset));\n      t.showAutofill(calTAreaOffset.call(this, offset));\n      tl.showAutofill(offset);\n    }\n  }\n\n  hideAutofill() {\n    ['br', 'l', 't', 'tl'].forEach((property) => {\n      this[property].hideAutofill();\n    });\n  }\n\n  showClipboard() {\n    const coffset = this.data.getClipboardRect();\n    setAllClipboardOffset.call(this, coffset);\n    ['br', 'l', 't', 'tl'].forEach((property) => {\n      this[property].showClipboard();\n    });\n  }\n\n  hideClipboard() {\n    ['br', 'l', 't', 'tl'].forEach((property) => {\n      this[property].hideClipboard();\n    });\n  }\n}\n","import { h } from './element';\nimport { bindClickoutside, unbindClickoutside } from './event';\nimport { cssPrefix } from '../config';\n\nfunction inputMovePrev(evt) {\n  evt.preventDefault();\n  evt.stopPropagation();\n  const { filterItems } = this;\n  if (filterItems.length <= 0) return;\n  if (this.itemIndex >= 0) filterItems[this.itemIndex].toggle();\n  this.itemIndex -= 1;\n  if (this.itemIndex < 0) {\n    this.itemIndex = filterItems.length - 1;\n  }\n  filterItems[this.itemIndex].toggle();\n}\n\nfunction inputMoveNext(evt) {\n  evt.stopPropagation();\n  const { filterItems } = this;\n  if (filterItems.length <= 0) return;\n  if (this.itemIndex >= 0) filterItems[this.itemIndex].toggle();\n  this.itemIndex += 1;\n  if (this.itemIndex > filterItems.length - 1) {\n    this.itemIndex = 0;\n  }\n  filterItems[this.itemIndex].toggle();\n}\n\nfunction inputEnter(evt) {\n  evt.preventDefault();\n  const { filterItems } = this;\n  if (filterItems.length <= 0) return;\n  evt.stopPropagation();\n  if (this.itemIndex < 0) this.itemIndex = 0;\n  filterItems[this.itemIndex].el.click();\n  this.hide();\n}\n\nfunction inputKeydownHandler(evt) {\n  const { keyCode } = evt;\n  if (evt.ctrlKey) {\n    evt.stopPropagation();\n  }\n  switch (keyCode) {\n    case 37: // left\n      evt.stopPropagation();\n      break;\n    case 38: // up\n      inputMovePrev.call(this, evt);\n      break;\n    case 39: // right\n      evt.stopPropagation();\n      break;\n    case 40: // down\n      inputMoveNext.call(this, evt);\n      break;\n    case 13: // enter\n      inputEnter.call(this, evt);\n      break;\n    case 9:\n      inputEnter.call(this, evt);\n      break;\n    default:\n      evt.stopPropagation();\n      break;\n  }\n}\n\nexport default class Suggest {\n  constructor(items, itemClick, width = '200px') {\n    this.filterItems = [];\n    this.items = items;\n    this.el = h('div', `${cssPrefix}-suggest`).css('width', width).hide();\n    this.itemClick = itemClick;\n    this.itemIndex = -1;\n  }\n\n  setOffset(v) {\n    this.el.cssRemoveKeys('top', 'bottom')\n      .offset(v);\n  }\n\n  hide() {\n    const { el } = this;\n    this.filterItems = [];\n    this.itemIndex = -1;\n    el.hide();\n    unbindClickoutside(this.el.parent());\n  }\n\n  setItems(items) {\n    this.items = items;\n    // this.search('');\n  }\n\n  search(word) {\n    let { items } = this;\n    if (!/^\\s*$/.test(word)) {\n      items = items.filter(it => (it.key || it).startsWith(word.toUpperCase()));\n    }\n    items = items.map((it) => {\n      let { title } = it;\n      if (title) {\n        if (typeof title === 'function') {\n          title = title();\n        }\n      } else {\n        title = it;\n      }\n      const item = h('div', `${cssPrefix}-item`)\n        .child(title)\n        .on('click.stop', () => {\n          this.itemClick(it);\n          this.hide();\n        });\n      if (it.label) {\n        item.child(h('div', 'label').html(it.label));\n      }\n      return item;\n    });\n    this.filterItems = items;\n    if (items.length <= 0) {\n      return;\n    }\n    const { el } = this;\n    // items[0].toggle();\n    el.html('').children(...items).show();\n    bindClickoutside(el.parent(), () => { this.hide(); });\n  }\n\n  bindInputEvents(input) {\n    input.on('keydown', evt => inputKeydownHandler.call(this, evt));\n  }\n}\n","import { Element, h } from './element';\nimport { cssPrefix } from '../config';\n\nexport default class Icon extends Element {\n  constructor(name) {\n    super('div', `${cssPrefix}-icon`);\n    this.iconNameEl = h('div', `${cssPrefix}-icon-img ${name}`);\n    this.child(this.iconNameEl);\n  }\n\n  setName(name) {\n    this.iconNameEl.className(`${cssPrefix}-icon-img ${name}`);\n  }\n}\n","import { h } from './element';\nimport Icon from './icon';\nimport { t } from '../locale/locale';\n\nfunction addMonth(date, step) {\n  date.setMonth(date.getMonth() + step);\n}\n\nfunction weekday(date, index) {\n  const d = new Date(date);\n  d.setDate(index - date.getDay() + 1);\n  return d;\n}\n\nfunction monthDays(year, month, cdate) {\n  // the first day of month\n  const startDate = new Date(year, month, 1, 23, 59, 59);\n  const datess = [[], [], [], [], [], []];\n  for (let i = 0; i < 6; i += 1) {\n    for (let j = 0; j < 7; j += 1) {\n      const index = i * 7 + j;\n      const d = weekday(startDate, index);\n      const disabled = d.getMonth() !== month;\n      // console.log('d:', d, ', cdate:', cdate);\n      const active = d.getMonth() === cdate.getMonth() && d.getDate() === cdate.getDate();\n      datess[i][j] = { d, disabled, active };\n    }\n  }\n  return datess;\n}\n\nexport default class Calendar {\n  constructor(value) {\n    this.value = value;\n    this.cvalue = new Date(value);\n\n    this.headerLeftEl = h('div', 'calendar-header-left');\n    this.bodyEl = h('tbody', '');\n    this.buildAll();\n    this.el = h('div', 'x-spreadsheet-calendar')\n      .children(\n        h('div', 'calendar-header').children(\n          this.headerLeftEl,\n          h('div', 'calendar-header-right').children(\n            h('a', 'calendar-prev')\n              .on('click.stop', () => this.prev())\n              .child(new Icon('chevron-left')),\n            h('a', 'calendar-next')\n              .on('click.stop', () => this.next())\n              .child(new Icon('chevron-right')),\n          ),\n        ),\n        h('table', 'calendar-body').children(\n          h('thead', '').child(\n            h('tr', '').children(\n              ...t('calendar.weeks').map(week => h('th', 'cell').child(week)),\n            ),\n          ),\n          this.bodyEl,\n        ),\n      );\n    this.selectChange = () => {};\n  }\n\n  setValue(value) {\n    this.value = value;\n    this.cvalue = new Date(value);\n    this.buildAll();\n  }\n\n  prev() {\n    const { value } = this;\n    addMonth(value, -1);\n    this.buildAll();\n  }\n\n  next() {\n    const { value } = this;\n    addMonth(value, 1);\n    this.buildAll();\n  }\n\n  buildAll() {\n    this.buildHeaderLeft();\n    this.buildBody();\n  }\n\n  buildHeaderLeft() {\n    const { value } = this;\n    this.headerLeftEl.html(`${t('calendar.months')[value.getMonth()]} ${value.getFullYear()}`);\n  }\n\n  buildBody() {\n    const { value, cvalue, bodyEl } = this;\n    const mDays = monthDays(value.getFullYear(), value.getMonth(), cvalue);\n    const trs = mDays.map((it) => {\n      const tds = it.map((it1) => {\n        let cls = 'cell';\n        if (it1.disabled) cls += ' disabled';\n        if (it1.active) cls += ' active';\n        return h('td', '').child(\n          h('div', cls)\n            .on('click.stop', () => {\n              this.selectChange(it1.d);\n            })\n            .child(it1.d.getDate().toString()),\n        );\n      });\n      return h('tr', '').children(...tds);\n    });\n    bodyEl.html('').children(...trs);\n  }\n}\n","import Calendar from './calendar';\nimport { h } from './element';\nimport { cssPrefix } from '../config';\n\nexport default class Datepicker {\n  constructor() {\n    this.calendar = new Calendar(new Date());\n    this.el = h('div', `${cssPrefix}-datepicker`).child(\n      this.calendar.el,\n    ).hide();\n  }\n\n  setValue(date) {\n    // console.log(':::::::', date, typeof date, date instanceof string);\n    const { calendar } = this;\n    if (typeof date === 'string') {\n      // console.log(/^\\d{4}-\\d{1,2}-\\d{1,2}$/.test(date));\n      if (/^\\d{4}-\\d{1,2}-\\d{1,2}$/.test(date)) {\n        calendar.setValue(new Date(date.replace(new RegExp('-', 'g'), '/')));\n      }\n    } else if (date instanceof Date) {\n      calendar.setValue(date);\n    }\n    return this;\n  }\n\n  change(cb) {\n    this.calendar.selectChange = (d) => {\n      cb(d);\n      this.hide();\n    };\n  }\n\n  show() {\n    this.el.show();\n  }\n\n  hide() {\n    this.el.hide();\n  }\n}\n","//* global window */\nimport { h } from './element';\nimport Suggest from './suggest';\nimport Datepicker from './datepicker';\nimport { cssPrefix } from '../config';\n// import { mouseMoveUp } from '../event';\n\nfunction resetTextareaSize() {\n  const { inputText } = this;\n  if (!/^\\s*$/.test(inputText)) {\n    const {\n      textlineEl, textEl, areaOffset,\n    } = this;\n    const txts = inputText.split('\\n');\n    const maxTxtSize = Math.max(...txts.map(it => it.length));\n    const tlOffset = textlineEl.offset();\n    const fontWidth = tlOffset.width / inputText.length;\n    const tlineWidth = (maxTxtSize + 1) * fontWidth + 5;\n    const maxWidth = this.viewFn().width - areaOffset.left - fontWidth;\n    let h1 = txts.length;\n    if (tlineWidth > areaOffset.width) {\n      let twidth = tlineWidth;\n      if (tlineWidth > maxWidth) {\n        twidth = maxWidth;\n        h1 += parseInt(tlineWidth / maxWidth, 10);\n        h1 += (tlineWidth % maxWidth) > 0 ? 1 : 0;\n      }\n      textEl.css('width', `${twidth}px`);\n    }\n    h1 *= this.rowHeight;\n    if (h1 > areaOffset.height) {\n      textEl.css('height', `${h1}px`);\n    }\n  }\n}\n\nfunction insertText({ target }, itxt) {\n  const { value, selectionEnd } = target;\n  const ntxt = `${value.slice(0, selectionEnd)}${itxt}${value.slice(selectionEnd)}`;\n  target.value = ntxt;\n  target.setSelectionRange(selectionEnd + 1, selectionEnd + 1);\n\n  this.inputText = ntxt;\n  this.textlineEl.html(ntxt);\n  resetTextareaSize.call(this);\n}\n\nfunction keydownEventHandler(evt) {\n  const { keyCode, altKey } = evt;\n  if (keyCode !== 13 && keyCode !== 9) evt.stopPropagation();\n  if (keyCode === 13 && altKey) {\n    insertText.call(this, evt, '\\n');\n    evt.stopPropagation();\n  }\n  if (keyCode === 13 && !altKey) evt.preventDefault();\n}\n\nfunction inputEventHandler(evt) {\n  const v = evt.target.value;\n  // console.log(evt, 'v:', v);\n  const { suggest, textlineEl, validator } = this;\n  const { cell } = this;\n  if (cell !== null) {\n    if (('editable' in cell && cell.editable === true) || (cell.editable === undefined)) {\n      this.inputText = v;\n      if (validator) {\n        if (validator.type === 'list') {\n          suggest.search(v);\n        } else {\n          suggest.hide();\n        }\n      } else {\n        const start = v.lastIndexOf('=');\n        if (start !== -1) {\n          suggest.search(v.substring(start + 1));\n        } else {\n          suggest.hide();\n        }\n      }\n      textlineEl.html(v);\n      resetTextareaSize.call(this);\n      this.change('input', v);\n    } else {\n      evt.target.value = cell.text;\n    }\n  } else {\n    this.inputText = v;\n    if (validator) {\n      if (validator.type === 'list') {\n        suggest.search(v);\n      } else {\n        suggest.hide();\n      }\n    } else {\n      const start = v.lastIndexOf('=');\n      if (start !== -1) {\n        suggest.search(v.substring(start + 1));\n      } else {\n        suggest.hide();\n      }\n    }\n    textlineEl.html(v);\n    resetTextareaSize.call(this);\n    this.change('input', v);\n  }\n}\n\nfunction setTextareaRange(position) {\n  const { el } = this.textEl;\n  setTimeout(() => {\n    el.focus();\n    el.setSelectionRange(position, position);\n  }, 0);\n}\n\nfunction setText(text, position) {\n  const { textEl, textlineEl } = this;\n  // firefox bug\n  textEl.el.blur();\n\n  textEl.val(text);\n  textlineEl.html(text);\n  setTextareaRange.call(this, position);\n}\n\nfunction suggestItemClick(it) {\n  const { inputText, validator } = this;\n  let position = 0;\n  if (validator && validator.type === 'list') {\n    this.inputText = it;\n    position = this.inputText.length;\n  } else {\n    const start = inputText.lastIndexOf('=');\n    const sit = inputText.substring(0, start + 1);\n    let eit = inputText.substring(start + 1);\n    if (eit.indexOf(')') !== -1) {\n      eit = eit.substring(eit.indexOf(')'));\n    } else {\n      eit = '';\n    }\n    this.inputText = `${sit + it.key}(`;\n    // console.log('inputText:', this.inputText);\n    position = this.inputText.length;\n    this.inputText += `)${eit}`;\n  }\n  setText.call(this, this.inputText, position);\n}\n\nfunction resetSuggestItems() {\n  this.suggest.setItems(this.formulas);\n}\n\nfunction dateFormat(d) {\n  let month = d.getMonth() + 1;\n  let date = d.getDate();\n  if (month < 10) month = `0${month}`;\n  if (date < 10) date = `0${date}`;\n  return `${d.getFullYear()}-${month}-${date}`;\n}\n\nexport default class Editor {\n  constructor(formulas, viewFn, rowHeight) {\n    this.viewFn = viewFn;\n    this.rowHeight = rowHeight;\n    this.formulas = formulas;\n    this.suggest = new Suggest(formulas, (it) => {\n      suggestItemClick.call(this, it);\n    });\n    this.datepicker = new Datepicker();\n    this.datepicker.change((d) => {\n      // console.log('d:', d);\n      this.setText(dateFormat(d));\n      this.clear();\n    });\n    this.areaEl = h('div', `${cssPrefix}-editor-area`)\n      .children(\n        this.textEl = h('textarea', '')\n          .on('input', evt => inputEventHandler.call(this, evt))\n          .on('paste.stop', () => {})\n          .on('keydown', evt => keydownEventHandler.call(this, evt)),\n        this.textlineEl = h('div', 'textline'),\n        this.suggest.el,\n        this.datepicker.el,\n      )\n      .on('mousemove.stop', () => {})\n      .on('mousedown.stop', () => {});\n    this.el = h('div', `${cssPrefix}-editor`)\n      .child(this.areaEl).hide();\n    this.suggest.bindInputEvents(this.textEl);\n\n    this.areaOffset = null;\n    this.freeze = { w: 0, h: 0 };\n    this.cell = null;\n    this.inputText = '';\n    this.change = () => {};\n  }\n\n  setFreezeLengths(width, height) {\n    this.freeze.w = width;\n    this.freeze.h = height;\n  }\n\n  clear() {\n    // const { cell } = this;\n    // const cellText = (cell && cell.text) || '';\n    if (this.inputText !== '') {\n      this.change('finished', this.inputText);\n    }\n    this.cell = null;\n    this.areaOffset = null;\n    this.inputText = '';\n    this.el.hide();\n    this.textEl.val('');\n    this.textlineEl.html('');\n    resetSuggestItems.call(this);\n    this.datepicker.hide();\n  }\n\n  setOffset(offset, suggestPosition = 'top') {\n    const {\n      textEl, areaEl, suggest, freeze, el,\n    } = this;\n    if (offset) {\n      this.areaOffset = offset;\n      const {\n        left, top, width, height, l, t,\n      } = offset;\n      // console.log('left:', left, ',top:', top, ', freeze:', freeze);\n      const elOffset = { left: 0, top: 0 };\n      // top left\n      if (freeze.w > l && freeze.h > t) {\n        //\n      } else if (freeze.w < l && freeze.h < t) {\n        elOffset.left = freeze.w;\n        elOffset.top = freeze.h;\n      } else if (freeze.w > l) {\n        elOffset.top = freeze.h;\n      } else if (freeze.h > t) {\n        elOffset.left = freeze.w;\n      }\n      el.offset(elOffset);\n      areaEl.offset({ left: left - elOffset.left - 0.8, top: top - elOffset.top - 0.8 });\n      textEl.offset({ width: width - 9 + 0.8, height: height - 3 + 0.8 });\n      const sOffset = { left: 0 };\n      sOffset[suggestPosition] = height;\n      suggest.setOffset(sOffset);\n      suggest.hide();\n    }\n  }\n\n  setCell(cell, validator) {\n    // console.log('::', validator);\n    const { el, datepicker, suggest } = this;\n    el.show();\n    this.cell = cell;\n    const text = (cell && cell.text) || '';\n    this.setText(text);\n\n    this.validator = validator;\n    if (validator) {\n      const { type } = validator;\n      if (type === 'date') {\n        datepicker.show();\n        if (!/^\\s*$/.test(text)) {\n          datepicker.setValue(text);\n        }\n      }\n      if (type === 'list') {\n        suggest.setItems(validator.values());\n        suggest.search('');\n      }\n    }\n  }\n\n  setText(text) {\n    this.inputText = text;\n    // console.log('text>>:', text);\n    setText.call(this, text, text.length);\n    resetTextareaSize.call(this);\n  }\n}\n","import { Element } from './element';\nimport { cssPrefix } from '../config';\nimport { t } from '../locale/locale';\n\nexport default class Button extends Element {\n  // type: primary\n  constructor(title, type = '') {\n    super('div', `${cssPrefix}-button ${type}`);\n    this.child(t(`button.${title}`));\n  }\n}\n","/* global window */\nfunction dpr() {\n  return window.devicePixelRatio || 1;\n}\n\nfunction thinLineWidth() {\n  return dpr() - 0.5;\n}\n\nfunction npx(px) {\n  return parseInt(px * dpr(), 10);\n}\n\nfunction npxLine(px) {\n  const n = npx(px);\n  return n > 0 ? n - 0.5 : 0.5;\n}\n\nclass DrawBox {\n  constructor(x, y, w, h, padding = 0) {\n    this.x = x;\n    this.y = y;\n    this.width = w;\n    this.height = h;\n    this.padding = padding;\n    this.bgcolor = '#ffffff';\n    // border: [width, style, color]\n    this.borderTop = null;\n    this.borderRight = null;\n    this.borderBottom = null;\n    this.borderLeft = null;\n  }\n\n  setBorders({\n    top, bottom, left, right,\n  }) {\n    if (top) this.borderTop = top;\n    if (right) this.borderRight = right;\n    if (bottom) this.borderBottom = bottom;\n    if (left) this.borderLeft = left;\n  }\n\n  innerWidth() {\n    return this.width - (this.padding * 2) - 2;\n  }\n\n  innerHeight() {\n    return this.height - (this.padding * 2) - 2;\n  }\n\n  textx(align) {\n    const { width, padding } = this;\n    let { x } = this;\n    if (align === 'left') {\n      x += padding;\n    } else if (align === 'center') {\n      x += width / 2;\n    } else if (align === 'right') {\n      x += width - padding;\n    }\n    return x;\n  }\n\n  texty(align, h) {\n    const { height, padding } = this;\n    let { y } = this;\n    if (align === 'top') {\n      y += padding;\n    } else if (align === 'middle') {\n      y += height / 2 - h / 2;\n    } else if (align === 'bottom') {\n      y += height - padding - h;\n    }\n    return y;\n  }\n\n  topxys() {\n    const { x, y, width } = this;\n    return [[x, y], [x + width, y]];\n  }\n\n  rightxys() {\n    const {\n      x, y, width, height,\n    } = this;\n    return [[x + width, y], [x + width, y + height]];\n  }\n\n  bottomxys() {\n    const {\n      x, y, width, height,\n    } = this;\n    return [[x, y + height], [x + width, y + height]];\n  }\n\n  leftxys() {\n    const {\n      x, y, height,\n    } = this;\n    return [[x, y], [x, y + height]];\n  }\n}\n\nfunction drawFontLine(type, tx, ty, align, valign, blheight, blwidth) {\n  const floffset = { x: 0, y: 0 };\n  if (type === 'underline') {\n    if (valign === 'bottom') {\n      floffset.y = 0;\n    } else if (valign === 'top') {\n      floffset.y = -(blheight + 2);\n    } else {\n      floffset.y = -blheight / 2;\n    }\n  } else if (type === 'strike') {\n    if (valign === 'bottom') {\n      floffset.y = blheight / 2;\n    } else if (valign === 'top') {\n      floffset.y = -((blheight / 2) + 2);\n    }\n  }\n\n  if (align === 'center') {\n    floffset.x = blwidth / 2;\n  } else if (align === 'right') {\n    floffset.x = blwidth;\n  }\n  this.line(\n    [tx - floffset.x, ty - floffset.y],\n    [tx - floffset.x + blwidth, ty - floffset.y],\n  );\n}\n\nclass Draw {\n  constructor(el, width, height) {\n    this.el = el;\n    this.ctx = el.getContext('2d');\n    this.resize(width, height);\n    this.ctx.scale(dpr(), dpr());\n  }\n\n  resize(width, height) {\n    // console.log('dpr:', dpr);\n    this.el.style.width = `${width}px`;\n    this.el.style.height = `${height}px`;\n    this.el.width = npx(width);\n    this.el.height = npx(height);\n  }\n\n  clear() {\n    const { width, height } = this.el;\n    this.ctx.clearRect(0, 0, width, height);\n    return this;\n  }\n\n  attr(options) {\n    Object.assign(this.ctx, options);\n    return this;\n  }\n\n  save() {\n    this.ctx.save();\n    this.ctx.beginPath();\n    return this;\n  }\n\n  restore() {\n    this.ctx.restore();\n    return this;\n  }\n\n  beginPath() {\n    this.ctx.beginPath();\n    return this;\n  }\n\n  translate(x, y) {\n    this.ctx.translate(npx(x), npx(y));\n    return this;\n  }\n\n  scale(x, y) {\n    this.ctx.scale(x, y);\n    return this;\n  }\n\n  clearRect(x, y, w, h) {\n    this.ctx.clearRect(x, y, w, h);\n    return this;\n  }\n\n  fillRect(x, y, w, h) {\n    this.ctx.fillRect(npx(x) - 0.5, npx(y) - 0.5, npx(w), npx(h));\n    return this;\n  }\n\n  fillText(text, x, y) {\n    this.ctx.fillText(text, npx(x), npx(y));\n    return this;\n  }\n\n  /*\n    txt: render text\n    box: DrawBox\n    attr: {\n      align: left | center | right\n      valign: top | middle | bottom\n      color: '#333333',\n      strike: false,\n      font: {\n        name: 'Arial',\n        size: 14,\n        bold: false,\n        italic: false,\n      }\n    }\n    textWrap: text wrapping\n  */\n  text(mtxt, box, attr = {}, textWrap = true) {\n    const { ctx } = this;\n    const {\n      align, valign, font, color, strike, underline,\n    } = attr;\n    const tx = box.textx(align);\n    ctx.save();\n    ctx.beginPath();\n    this.attr({\n      textAlign: align,\n      textBaseline: valign,\n      font: `${font.italic ? 'italic' : ''} ${font.bold ? 'bold' : ''} ${npx(font.size)}px ${font.name}`,\n      fillStyle: color,\n      strokeStyle: color,\n    });\n    const txts = `${mtxt}`.split('\\n');\n    const biw = box.innerWidth();\n    const ntxts = [];\n    txts.forEach((it) => {\n      const txtWidth = ctx.measureText(it).width;\n      if (textWrap && txtWidth > npx(biw)) {\n        let textLine = { w: 0, len: 0, start: 0 };\n        for (let i = 0; i < it.length; i += 1) {\n          if (textLine.w >= npx(biw)) {\n            ntxts.push(it.substr(textLine.start, textLine.len));\n            textLine = { w: 0, len: 0, start: i };\n          }\n          textLine.len += 1;\n          textLine.w += ctx.measureText(it[i]).width + 1;\n        }\n        if (textLine.len > 0) {\n          ntxts.push(it.substr(textLine.start, textLine.len));\n        }\n      } else {\n        ntxts.push(it);\n      }\n    });\n    const txtHeight = (ntxts.length - 1) * (font.size + 2);\n    let ty = box.texty(valign, txtHeight);\n    ntxts.forEach((txt) => {\n      const txtWidth = ctx.measureText(txt).width;\n      this.fillText(txt, tx, ty);\n      if (strike) {\n        drawFontLine.call(this, 'strike', tx, ty, align, valign, font.size, txtWidth);\n      }\n      if (underline) {\n        drawFontLine.call(this, 'underline', tx, ty, align, valign, font.size, txtWidth);\n      }\n      ty += font.size + 2;\n    });\n    ctx.restore();\n    return this;\n  }\n\n  border(style, color) {\n    const { ctx } = this;\n    ctx.lineWidth = thinLineWidth;\n    ctx.strokeStyle = color;\n    // console.log('style:', style);\n    if (style === 'medium') {\n      ctx.lineWidth = npx(2) - 0.5;\n    } else if (style === 'thick') {\n      ctx.lineWidth = npx(3);\n    } else if (style === 'dashed') {\n      ctx.setLineDash([npx(3), npx(2)]);\n    } else if (style === 'dotted') {\n      ctx.setLineDash([npx(1), npx(1)]);\n    } else if (style === 'double') {\n      ctx.setLineDash([npx(2), 0]);\n    }\n    return this;\n  }\n\n  line(...xys) {\n    const { ctx } = this;\n    if (xys.length > 1) {\n      ctx.beginPath();\n      const [x, y] = xys[0];\n      ctx.moveTo(npxLine(x), npxLine(y));\n      for (let i = 1; i < xys.length; i += 1) {\n        const [x1, y1] = xys[i];\n        ctx.lineTo(npxLine(x1), npxLine(y1));\n      }\n      ctx.stroke();\n    }\n    return this;\n  }\n\n  strokeBorders(box) {\n    const { ctx } = this;\n    ctx.save();\n    // border\n    const {\n      borderTop, borderRight, borderBottom, borderLeft,\n    } = box;\n    if (borderTop) {\n      this.border(...borderTop);\n      // console.log('box.topxys:', box.topxys());\n      this.line(...box.topxys());\n    }\n    if (borderRight) {\n      this.border(...borderRight);\n      this.line(...box.rightxys());\n    }\n    if (borderBottom) {\n      this.border(...borderBottom);\n      this.line(...box.bottomxys());\n    }\n    if (borderLeft) {\n      this.border(...borderLeft);\n      this.line(...box.leftxys());\n    }\n    ctx.restore();\n  }\n\n  dropdown(box) {\n    const { ctx } = this;\n    const {\n      x, y, width, height,\n    } = box;\n    const sx = x + width - 15;\n    const sy = y + height - 15;\n    ctx.save();\n    ctx.beginPath();\n    ctx.moveTo(npx(sx), npx(sy));\n    ctx.lineTo(npx(sx + 8), npx(sy));\n    ctx.lineTo(npx(sx + 4), npx(sy + 6));\n    ctx.closePath();\n    ctx.fillStyle = 'rgba(0, 0, 0, .45)';\n    ctx.fill();\n    ctx.restore();\n  }\n\n  error(box) {\n    const { ctx } = this;\n    const { x, y, width } = box;\n    const sx = x + width - 1;\n    ctx.save();\n    ctx.beginPath();\n    ctx.moveTo(npx(sx - 8), npx(y - 1));\n    ctx.lineTo(npx(sx), npx(y - 1));\n    ctx.lineTo(npx(sx), npx(y + 8));\n    ctx.closePath();\n    ctx.fillStyle = 'rgba(255, 0, 0, .65)';\n    ctx.fill();\n    ctx.restore();\n  }\n\n  frozen(box) {\n    const { ctx } = this;\n    const { x, y, width } = box;\n    const sx = x + width - 1;\n    ctx.save();\n    ctx.beginPath();\n    ctx.moveTo(npx(sx - 8), npx(y - 1));\n    ctx.lineTo(npx(sx), npx(y - 1));\n    ctx.lineTo(npx(sx), npx(y + 8));\n    ctx.closePath();\n    ctx.fillStyle = 'rgba(0, 255, 0, .85)';\n    ctx.fill();\n    ctx.restore();\n  }\n\n  rect(box, dtextcb) {\n    const { ctx } = this;\n    const {\n      x, y, width, height, bgcolor,\n    } = box;\n    ctx.save();\n    ctx.beginPath();\n    ctx.fillStyle = bgcolor || '#fff';\n    ctx.rect(npxLine(x + 1), npxLine(y + 1), npx(width - 2), npx(height - 2));\n    ctx.clip();\n    ctx.fill();\n    dtextcb();\n    ctx.restore();\n  }\n}\n\nexport default {};\nexport {\n  Draw,\n  DrawBox,\n  thinLineWidth,\n  npx,\n};\n","// docs\nimport './_.prototypes';\n\n/** default font list\n * @type {BaseFont[]}\n */\nconst baseFonts = [\n  { key: 'Arial', title: 'Arial' },\n  { key: 'Helvetica', title: 'Helvetica' },\n  { key: 'Source Sans Pro', title: 'Source Sans Pro' },\n  { key: 'Comic Sans MS', title: 'Comic Sans MS' },\n  { key: 'Courier New', title: 'Courier New' },\n  { key: 'Verdana', title: 'Verdana' },\n  { key: 'Lato', title: 'Lato' },\n];\n\n/** default fontSize list\n * @type {FontSize[]}\n */\nconst fontSizes = [\n  { pt: 7.5, px: 10 },\n  { pt: 8, px: 11 },\n  { pt: 9, px: 12 },\n  { pt: 10, px: 13 },\n  { pt: 10.5, px: 14 },\n  { pt: 11, px: 15 },\n  { pt: 12, px: 16 },\n  { pt: 14, px: 18.7 },\n  { pt: 15, px: 20 },\n  { pt: 16, px: 21.3 },\n  { pt: 18, px: 24 },\n  { pt: 22, px: 29.3 },\n  { pt: 24, px: 32 },\n  { pt: 26, px: 34.7 },\n  { pt: 36, px: 48 },\n  { pt: 42, px: 56 },\n  // { pt: 54, px: 71.7 },\n  // { pt: 63, px: 83.7 },\n  // { pt: 72, px: 95.6 },\n];\n\n/** map pt to px\n * @date 2019-10-10\n * @param {fontsizePT} pt\n * @returns {fontsizePX}\n */\nfunction getFontSizePxByPt(pt) {\n  for (let i = 0; i < fontSizes.length; i += 1) {\n    const fontSize = fontSizes[i];\n    if (fontSize.pt === pt) {\n      return fontSize.px;\n    }\n  }\n  return pt;\n}\n\n/** transform baseFonts to map\n * @date 2019-10-10\n * @param {BaseFont[]} [ary=[]]\n * @returns {object}\n */\nfunction fonts(ary = []) {\n  const map = {};\n  baseFonts.concat(ary).forEach((f) => {\n    map[f.key] = f;\n  });\n  return map;\n}\n\nexport default {};\nexport {\n  fontSizes,\n  fonts,\n  baseFonts,\n  getFontSizePxByPt,\n};\n","import { expr2xy, xy2expr } from './alphabet';\nimport { numberCalc } from './helper';\n\n// Converting infix expression to a suffix expression\n// src: AVERAGE(SUM(A1,A2), B1) + 50 + B20\n// return: [A1, A2], SUM[, B1],AVERAGE,50,+,B20,+\nconst infixExprToSuffixExpr = (src) => {\n  const operatorStack = [];\n  const stack = [];\n  let subStrs = []; // SUM, A1, B2, 50 ...\n  let fnArgType = 0; // 1 => , 2 => :\n  let fnArgOperator = '';\n  let fnArgsLen = 1; // A1,A2,A3...\n  let oldc = '';\n  for (let i = 0; i < src.length; i += 1) {\n    const c = src.charAt(i);\n    if (c !== ' ') {\n      if (c >= 'a' && c <= 'z') {\n        subStrs.push(c.toUpperCase());\n      } else if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || c === '.') {\n        subStrs.push(c);\n      } else if (c === '\"') {\n        i += 1;\n        while (src.charAt(i) !== '\"') {\n          subStrs.push(src.charAt(i));\n          i += 1;\n        }\n        stack.push(`\"${subStrs.join('')}`);\n        subStrs = [];\n      } else if (c === '-' && /[+\\-*/,(]/.test(oldc)) {\n        subStrs.push(c);\n      } else {\n        // console.log('subStrs:', subStrs.join(''), stack);\n        if (c !== '(' && subStrs.length > 0) {\n          stack.push(subStrs.join(''));\n        }\n        if (c === ')') {\n          let c1 = operatorStack.pop();\n          if (fnArgType === 2) {\n            // fn argument range => A1:B5\n            try {\n              const [ex, ey] = expr2xy(stack.pop());\n              const [sx, sy] = expr2xy(stack.pop());\n              // console.log('::', sx, sy, ex, ey);\n              let rangelen = 0;\n              for (let x = sx; x <= ex; x += 1) {\n                for (let y = sy; y <= ey; y += 1) {\n                  stack.push(xy2expr(x, y));\n                  rangelen += 1;\n                }\n              }\n              stack.push([c1, rangelen]);\n            } catch (e) {\n              // console.log(e);\n            }\n          } else if (fnArgType === 1 || fnArgType === 3) {\n            if (fnArgType === 3) stack.push(fnArgOperator);\n            // fn argument => A1,A2,B5\n            stack.push([c1, fnArgsLen]);\n            fnArgsLen = 1;\n          } else {\n            // console.log('c1:', c1, fnArgType, stack, operatorStack);\n            while (c1 !== '(') {\n              stack.push(c1);\n              if (operatorStack.length <= 0) break;\n              c1 = operatorStack.pop();\n            }\n          }\n          fnArgType = 0;\n        } else if (c === '=' || c === '>' || c === '<') {\n          const nc = src.charAt(i + 1);\n          fnArgOperator = c;\n          if (nc === '=' || nc === '-') {\n            fnArgOperator += nc;\n            i += 1;\n          }\n          fnArgType = 3;\n        } else if (c === ':') {\n          fnArgType = 2;\n        } else if (c === ',') {\n          if (fnArgType === 3) {\n            stack.push(fnArgOperator);\n          }\n          fnArgType = 1;\n          fnArgsLen += 1;\n        } else if (c === '(' && subStrs.length > 0) {\n          // function\n          operatorStack.push(subStrs.join(''));\n        } else {\n          // priority: */ > +-\n          // console.log('xxxx:', operatorStack, c, stack);\n          if (operatorStack.length > 0 && (c === '+' || c === '-')) {\n            let top = operatorStack[operatorStack.length - 1];\n            if (top !== '(') stack.push(operatorStack.pop());\n            if (top === '*' || top === '/') {\n              while (operatorStack.length > 0) {\n                top = operatorStack[operatorStack.length - 1];\n                if (top !== '(') stack.push(operatorStack.pop());\n                else break;\n              }\n            }\n          } else if (operatorStack.length > 0) {\n            const top = operatorStack[operatorStack.length - 1];\n            if (top === '*' || top === '/') stack.push(operatorStack.pop());\n          }\n          operatorStack.push(c);\n        }\n        subStrs = [];\n      }\n      oldc = c;\n    }\n  }\n  if (subStrs.length > 0) {\n    stack.push(subStrs.join(''));\n  }\n  while (operatorStack.length > 0) {\n    stack.push(operatorStack.pop());\n  }\n  return stack;\n};\n\nconst evalSubExpr = (subExpr, cellRender) => {\n  const [fl] = subExpr;\n  let expr = subExpr;\n  if (fl === '\"') {\n    return subExpr.substring(1);\n  }\n  let ret = 1;\n  if (fl === '-') {\n    expr = subExpr.substring(1);\n    ret = -1;\n  }\n  if (expr[0] >= '0' && expr[0] <= '9') {\n    return ret * Number(expr);\n  }\n  const [x, y] = expr2xy(expr);\n  return ret * cellRender(x, y);\n};\n\n// evaluate the suffix expression\n// srcStack: <= infixExprToSufixExpr\n// formulaMap: {'SUM': {}, ...}\n// cellRender: (x, y) => {}\nconst evalSuffixExpr = (srcStack, formulaMap, cellRender, cellList) => {\n  const stack = [];\n  // console.log(':::::formulaMap:', formulaMap);\n  for (let i = 0; i < srcStack.length; i += 1) {\n    // console.log(':::>>>', srcStack[i]);\n    const expr = srcStack[i];\n    const fc = expr[0];\n    if (expr === '+') {\n      const top = stack.pop();\n      stack.push(numberCalc('+', stack.pop(), top));\n    } else if (expr === '-') {\n      if (stack.length === 1) {\n        const top = stack.pop();\n        stack.push(numberCalc('*', top, -1));\n      } else {\n        const top = stack.pop();\n        stack.push(numberCalc('-', stack.pop(), top));\n      }\n    } else if (expr === '*') {\n      stack.push(numberCalc('*', stack.pop(), stack.pop()));\n    } else if (expr === '/') {\n      const top = stack.pop();\n      stack.push(numberCalc('/', stack.pop(), top));\n    } else if (fc === '=' || fc === '>' || fc === '<') {\n      let top = stack.pop();\n      if (!Number.isNaN(top)) top = Number(top);\n      let left = stack.pop();\n      if (!Number.isNaN(left)) left = Number(left);\n      let ret = false;\n      if (fc === '=') {\n        ret = (left === top);\n      } else if (expr === '>') {\n        ret = (left > top);\n      } else if (expr === '>=') {\n        ret = (left >= top);\n      } else if (expr === '<') {\n        ret = (left < top);\n      } else if (expr === '<=') {\n        ret = (left <= top);\n      }\n      stack.push(ret);\n    } else if (Array.isArray(expr)) {\n      const [formula, len] = expr;\n      const params = [];\n      for (let j = 0; j < len; j += 1) {\n        params.push(stack.pop());\n      }\n      stack.push(formulaMap[formula].render(params.reverse()));\n    } else {\n      if (cellList.includes(expr)) {\n        return 0;\n      }\n      if ((fc >= 'a' && fc <= 'z') || (fc >= 'A' && fc <= 'Z')) {\n        cellList.push(expr);\n      }\n      stack.push(evalSubExpr(expr, cellRender));\n      cellList.pop();\n    }\n    // console.log('stack:', stack);\n  }\n  return stack[0];\n};\n\nconst cellRender = (src, formulaMap, getCellText, cellList = []) => {\n  if (src[0] === '=') {\n    const stack = infixExprToSuffixExpr(src.substring(1));\n    if (stack.length <= 0) return src;\n    return evalSuffixExpr(\n      stack,\n      formulaMap,\n      (x, y) => cellRender(getCellText(x, y), formulaMap, getCellText, cellList),\n      cellList,\n    );\n  }\n  return src;\n};\n\nexport default {\n  render: cellRender,\n};\nexport {\n  infixExprToSuffixExpr,\n};\n","/**\n  formula:\n    key\n    title\n    render\n*/\n/**\n * @typedef {object} Formula\n * @property {string} key\n * @property {function} title\n * @property {function} render\n */\nimport { tf } from '../locale/locale';\nimport { numberCalc } from './helper';\n\n/** @type {Formula[]} */\nconst baseFormulas = [\n  {\n    key: 'SUM',\n    title: tf('formula.sum'),\n    render: ary => ary.reduce((a, b) => numberCalc('+', a, b), 0),\n  },\n  {\n    key: 'AVERAGE',\n    title: tf('formula.average'),\n    render: ary => ary.reduce((a, b) => Number(a) + Number(b), 0) / ary.length,\n  },\n  {\n    key: 'MAX',\n    title: tf('formula.max'),\n    render: ary => Math.max(...ary.map(v => Number(v))),\n  },\n  {\n    key: 'MIN',\n    title: tf('formula.min'),\n    render: ary => Math.min(...ary.map(v => Number(v))),\n  },\n  {\n    key: 'IF',\n    title: tf('formula._if'),\n    render: ([b, t, f]) => (b ? t : f),\n  },\n  {\n    key: 'AND',\n    title: tf('formula.and'),\n    render: ary => ary.every(it => it),\n  },\n  {\n    key: 'OR',\n    title: tf('formula.or'),\n    render: ary => ary.some(it => it),\n  },\n  {\n    key: 'CONCAT',\n    title: tf('formula.concat'),\n    render: ary => ary.join(''),\n  },\n  /* support:  1 + A1 + B2 * 3\n  {\n    key: 'DIVIDE',\n    title: tf('formula.divide'),\n    render: ary => ary.reduce((a, b) => Number(a) / Number(b)),\n  },\n  {\n    key: 'PRODUCT',\n    title: tf('formula.product'),\n    render: ary => ary.reduce((a, b) => Number(a) * Number(b),1),\n  },\n  {\n    key: 'SUBTRACT',\n    title: tf('formula.subtract'),\n    render: ary => ary.reduce((a, b) => Number(a) - Number(b)),\n  },\n  */\n];\n\nconst formulas = baseFormulas;\n\n// const formulas = (formulaAry = []) => {\n//   const formulaMap = {};\n//   baseFormulas.concat(formulaAry).forEach((f) => {\n//     formulaMap[f.key] = f;\n//   });\n//   return formulaMap;\n// };\nconst formulam = {};\nbaseFormulas.forEach((f) => {\n  formulam[f.key] = f;\n});\n\nexport default {\n};\n\nexport {\n  formulam,\n  formulas,\n  baseFormulas,\n};\n","import { tf } from '../locale/locale';\n\nconst formatStringRender = v => v;\n\nconst formatNumberRender = (v) => {\n  // match \"-12.1\" or \"12\" or \"12.1\"\n  if (/^(-?\\d*.?\\d*)$/.test(v)) {\n    const v1 = Number(v).toFixed(2).toString();\n    const [first, ...parts] = v1.split('\\\\.');\n    return [first.replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,'), ...parts];\n  }\n  return v;\n};\n\nconst baseFormats = [\n  {\n    key: 'normal',\n    title: tf('format.normal'),\n    type: 'string',\n    render: formatStringRender,\n  },\n  {\n    key: 'text',\n    title: tf('format.text'),\n    type: 'string',\n    render: formatStringRender,\n  },\n  {\n    key: 'number',\n    title: tf('format.number'),\n    type: 'number',\n    label: '1,000.12',\n    render: formatNumberRender,\n  },\n  {\n    key: 'percent',\n    title: tf('format.percent'),\n    type: 'number',\n    label: '10.12%',\n    render: v => `${v}%`,\n  },\n  {\n    key: 'rmb',\n    title: tf('format.rmb'),\n    type: 'number',\n    label: '￥10.00',\n    render: v => `￥${formatNumberRender(v)}`,\n  },\n  {\n    key: 'usd',\n    title: tf('format.usd'),\n    type: 'number',\n    label: '$10.00',\n    render: v => `$${formatNumberRender(v)}`,\n  },\n  {\n    key: 'eur',\n    title: tf('format.eur'),\n    type: 'number',\n    label: '€10.00',\n    render: v => `€${formatNumberRender(v)}`,\n  },\n  {\n    key: 'date',\n    title: tf('format.date'),\n    type: 'date',\n    label: '26/09/2008',\n    render: formatStringRender,\n  },\n  {\n    key: 'time',\n    title: tf('format.time'),\n    type: 'date',\n    label: '15:59:00',\n    render: formatStringRender,\n  },\n  {\n    key: 'datetime',\n    title: tf('format.datetime'),\n    type: 'date',\n    label: '26/09/2008 15:59:00',\n    render: formatStringRender,\n  },\n  {\n    key: 'duration',\n    title: tf('format.duration'),\n    type: 'date',\n    label: '24:01:00',\n    render: formatStringRender,\n  },\n];\n\n// const formats = (ary = []) => {\n//   const map = {};\n//   baseFormats.concat(ary).forEach((f) => {\n//     map[f.key] = f;\n//   });\n//   return map;\n// };\nconst formatm = {};\nbaseFormats.forEach((f) => {\n  formatm[f.key] = f;\n});\n\nexport default {\n};\nexport {\n  formatm,\n  baseFormats,\n};\n","import { stringAt } from '../core/alphabet';\nimport { getFontSizePxByPt } from '../core/font';\nimport _cell from '../core/cell';\nimport { formulam } from '../core/formula';\nimport { formatm } from '../core/format';\n\nimport {\n  Draw, DrawBox, thinLineWidth, npx,\n} from '../canvas/draw';\n// gobal var\nconst cellPaddingWidth = 5;\nconst tableFixedHeaderCleanStyle = { fillStyle: '#f4f5f8' };\nconst tableGridStyle = {\n  fillStyle: '#fff',\n  lineWidth: thinLineWidth,\n  strokeStyle: '#e6e6e6',\n};\nfunction tableFixedHeaderStyle() {\n  return {\n    textAlign: 'center',\n    textBaseline: 'middle',\n    font: `500 ${npx(12)}px Source Sans Pro`,\n    fillStyle: '#585757',\n    lineWidth: thinLineWidth(),\n    strokeStyle: '#e6e6e6',\n  };\n}\n\nfunction getDrawBox(data, rindex, cindex, yoffset = 0) {\n  const {\n    left, top, width, height,\n  } = data.cellRect(rindex, cindex);\n  return new DrawBox(left, top + yoffset, width, height, cellPaddingWidth);\n}\n/*\nfunction renderCellBorders(bboxes, translateFunc) {\n  const { draw } = this;\n  if (bboxes) {\n    const rset = new Set();\n    // console.log('bboxes:', bboxes);\n    bboxes.forEach(({ ri, ci, box }) => {\n      if (!rset.has(ri)) {\n        rset.add(ri);\n        translateFunc(ri);\n      }\n      draw.strokeBorders(box);\n    });\n  }\n}\n*/\n\nexport function renderCell(draw, data, rindex, cindex, yoffset = 0) {\n  const { sortedRowMap, rows, cols } = data;\n  if (rows.isHide(rindex) || cols.isHide(cindex)) return;\n  let nrindex = rindex;\n  if (sortedRowMap.has(rindex)) {\n    nrindex = sortedRowMap.get(rindex);\n  }\n\n  const cell = data.getCell(nrindex, cindex);\n  if (cell === null) return;\n  let frozen = false;\n  if ('editable' in cell && cell.editable === false) {\n    frozen = true;\n  }\n\n  const style = data.getCellStyleOrDefault(nrindex, cindex);\n  const dbox = getDrawBox(data, rindex, cindex, yoffset);\n  dbox.bgcolor = style.bgcolor;\n  if (style.border !== undefined) {\n    dbox.setBorders(style.border);\n    // bboxes.push({ ri: rindex, ci: cindex, box: dbox });\n    draw.strokeBorders(dbox);\n  }\n  draw.rect(dbox, () => {\n    // render text\n    let cellText = '';\n    if (!data.settings.evalPaused) {\n      cellText = _cell.render(cell.text || '', formulam, (y, x) => (data.getCellTextOrDefault(x, y)));\n    } else {\n      cellText = cell.text || '';\n    }\n    if (style.format) {\n      // console.log(data.formatm, '>>', cell.format);\n      cellText = formatm[style.format].render(cellText);\n    }\n    const font = Object.assign({}, style.font);\n    font.size = getFontSizePxByPt(font.size);\n    // console.log('style:', style);\n    draw.text(cellText, dbox, {\n      align: style.align,\n      valign: style.valign,\n      font,\n      color: style.color,\n      strike: style.strike,\n      underline: style.underline,\n    }, style.textwrap);\n    // error\n    const error = data.validations.getError(rindex, cindex);\n    if (error) {\n      // console.log('error:', rindex, cindex, error);\n      draw.error(dbox);\n    }\n    if (frozen) {\n      draw.frozen(dbox);\n    }\n  });\n}\n\nfunction renderAutofilter(viewRange) {\n  const { data, draw } = this;\n  if (viewRange) {\n    const { autoFilter } = data;\n    if (!autoFilter.active()) return;\n    const afRange = autoFilter.hrange();\n    if (viewRange.intersects(afRange)) {\n      afRange.each((ri, ci) => {\n        const dbox = getDrawBox(data, ri, ci);\n        draw.dropdown(dbox);\n      });\n    }\n  }\n}\n\nfunction renderContent(viewRange, fw, fh, tx, ty) {\n  const { draw, data } = this;\n  draw.save();\n  draw.translate(fw, fh)\n    .translate(tx, ty);\n\n  const { exceptRowSet } = data;\n  // const exceptRows = Array.from(exceptRowSet);\n  const filteredTranslateFunc = (ri) => {\n    const ret = exceptRowSet.has(ri);\n    if (ret) {\n      const height = data.rows.getHeight(ri);\n      draw.translate(0, -height);\n    }\n    return !ret;\n  };\n\n  const exceptRowTotalHeight = data.exceptRowTotalHeight(viewRange.sri, viewRange.eri);\n  // 1 render cell\n  draw.save();\n  draw.translate(0, -exceptRowTotalHeight);\n  viewRange.each((ri, ci) => {\n    renderCell(draw, data, ri, ci);\n  }, ri => filteredTranslateFunc(ri));\n  draw.restore();\n\n\n  // 2 render mergeCell\n  const rset = new Set();\n  draw.save();\n  draw.translate(0, -exceptRowTotalHeight);\n  data.eachMergesInView(viewRange, ({ sri, sci, eri }) => {\n    if (!exceptRowSet.has(sri)) {\n      renderCell(draw, data, sri, sci);\n    } else if (!rset.has(sri)) {\n      rset.add(sri);\n      const height = data.rows.sumHeight(sri, eri + 1);\n      draw.translate(0, -height);\n    }\n  });\n  draw.restore();\n\n  // 3 render autofilter\n  renderAutofilter.call(this, viewRange);\n\n  draw.restore();\n}\n\nfunction renderSelectedHeaderCell(x, y, w, h) {\n  const { draw } = this;\n  draw.save();\n  draw.attr({ fillStyle: 'rgba(75, 137, 255, 0.08)' })\n    .fillRect(x, y, w, h);\n  draw.restore();\n}\n\n// viewRange\n// type: all | left | top\n// w: the fixed width of header\n// h: the fixed height of header\n// tx: moving distance on x-axis\n// ty: moving distance on y-axis\nfunction renderFixedHeaders(type, viewRange, w, h, tx, ty) {\n  const { draw, data } = this;\n  const sumHeight = viewRange.h; // rows.sumHeight(viewRange.sri, viewRange.eri + 1);\n  const sumWidth = viewRange.w; // cols.sumWidth(viewRange.sci, viewRange.eci + 1);\n  const nty = ty + h;\n  const ntx = tx + w;\n\n  draw.save();\n  // draw rect background\n  draw.attr(tableFixedHeaderCleanStyle);\n  if (type === 'all' || type === 'left') draw.fillRect(0, nty, w, sumHeight);\n  if (type === 'all' || type === 'top') draw.fillRect(ntx, 0, sumWidth, h);\n\n  const {\n    sri, sci, eri, eci,\n  } = data.selector.range;\n  // console.log(data.selectIndexes);\n  // draw text\n  // text font, align...\n  draw.attr(tableFixedHeaderStyle());\n  // y-header-text\n  if (type === 'all' || type === 'left') {\n    data.rowEach(viewRange.sri, viewRange.eri, (i, y1, rowHeight) => {\n      const y = nty + y1;\n      const ii = i;\n      draw.line([0, y], [w, y]);\n      if (sri <= ii && ii < eri + 1) {\n        renderSelectedHeaderCell.call(this, 0, y, w, rowHeight);\n      }\n      draw.fillText(ii + 1, w / 2, y + (rowHeight / 2));\n      if (i > 0 && data.rows.isHide(i - 1)) {\n        draw.save();\n        draw.attr({ strokeStyle: '#c6c6c6' });\n        draw.line([5, y + 5], [w - 5, y + 5]);\n        draw.restore();\n      }\n    });\n    draw.line([0, sumHeight + nty], [w, sumHeight + nty]);\n    draw.line([w, nty], [w, sumHeight + nty]);\n  }\n  // x-header-text\n  if (type === 'all' || type === 'top') {\n    data.colEach(viewRange.sci, viewRange.eci, (i, x1, colWidth) => {\n      const x = ntx + x1;\n      const ii = i;\n      draw.line([x, 0], [x, h]);\n      if (sci <= ii && ii < eci + 1) {\n        renderSelectedHeaderCell.call(this, x, 0, colWidth, h);\n      }\n      draw.fillText(stringAt(ii), x + (colWidth / 2), h / 2);\n      if (i > 0 && data.cols.isHide(i - 1)) {\n        draw.save();\n        draw.attr({ strokeStyle: '#c6c6c6' });\n        draw.line([x + 5, 5], [x + 5, h - 5]);\n        draw.restore();\n      }\n    });\n    draw.line([sumWidth + ntx, 0], [sumWidth + ntx, h]);\n    draw.line([0, h], [sumWidth + ntx, h]);\n  }\n  draw.restore();\n}\n\nfunction renderFixedLeftTopCell(fw, fh) {\n  const { draw } = this;\n  draw.save();\n  // left-top-cell\n  draw.attr({ fillStyle: '#f4f5f8' })\n    .fillRect(0, 0, fw, fh);\n  draw.restore();\n}\n\nfunction renderContentGrid({\n  sri, sci, eri, eci, w, h,\n}, fw, fh, tx, ty) {\n  const { draw, data } = this;\n  const { settings } = data;\n\n  draw.save();\n  draw.attr(tableGridStyle)\n    .translate(fw + tx, fh + ty);\n  // const sumWidth = cols.sumWidth(sci, eci + 1);\n  // const sumHeight = rows.sumHeight(sri, eri + 1);\n  // console.log('sumWidth:', sumWidth);\n  // draw.clearRect(0, 0, w, h);\n  if (!settings.showGrid) {\n    draw.restore();\n    return;\n  }\n  // console.log('rowStart:', rowStart, ', rowLen:', rowLen);\n  data.rowEach(sri, eri, (i, y, ch) => {\n    // console.log('y:', y);\n    if (i !== sri) draw.line([0, y], [w, y]);\n    if (i === eri) draw.line([0, y + ch], [w, y + ch]);\n  });\n  data.colEach(sci, eci, (i, x, cw) => {\n    if (i !== sci) draw.line([x, 0], [x, h]);\n    if (i === eci) draw.line([x + cw, 0], [x + cw, h]);\n  });\n  draw.restore();\n}\n\nfunction renderFreezeHighlightLine(fw, fh, ftw, fth) {\n  const { draw, data } = this;\n  const twidth = data.viewWidth() - fw;\n  const theight = data.viewHeight() - fh;\n  draw.save()\n    .translate(fw, fh)\n    .attr({ strokeStyle: 'rgba(75, 137, 255, .6)' });\n  draw.line([0, fth], [twidth, fth]);\n  draw.line([ftw, 0], [ftw, theight]);\n  draw.restore();\n}\n\n/** end */\nclass Table {\n  constructor(el, data) {\n    this.el = el;\n    this.draw = new Draw(el, data.viewWidth(), data.viewHeight());\n    this.data = data;\n  }\n\n  resetData(data) {\n    this.data = data;\n    this.render();\n  }\n\n  render() {\n    // resize canvas\n    const { data } = this;\n    const { rows, cols } = data;\n    // fixed width of header\n    const fw = cols.indexWidth;\n    // fixed height of header\n    const fh = rows.height;\n\n    this.draw.resize(data.viewWidth(), data.viewHeight());\n    this.clear();\n\n    const viewRange = data.viewRange();\n    // renderAll.call(this, viewRange, data.scroll);\n    const tx = data.freezeTotalWidth();\n    const ty = data.freezeTotalHeight();\n    const { x, y } = data.scroll;\n    // 1\n    renderContentGrid.call(this, viewRange, fw, fh, tx, ty);\n    renderContent.call(this, viewRange, fw, fh, -x, -y);\n    renderFixedHeaders.call(this, 'all', viewRange, fw, fh, tx, ty);\n    renderFixedLeftTopCell.call(this, fw, fh);\n    const [fri, fci] = data.freeze;\n    if (fri > 0 || fci > 0) {\n      // 2\n      if (fri > 0) {\n        const vr = viewRange.clone();\n        vr.sri = 0;\n        vr.eri = fri - 1;\n        vr.h = ty;\n        renderContentGrid.call(this, vr, fw, fh, tx, 0);\n        renderContent.call(this, vr, fw, fh, -x, 0);\n        renderFixedHeaders.call(this, 'top', vr, fw, fh, tx, 0);\n      }\n      // 3\n      if (fci > 0) {\n        const vr = viewRange.clone();\n        vr.sci = 0;\n        vr.eci = fci - 1;\n        vr.w = tx;\n        renderContentGrid.call(this, vr, fw, fh, 0, ty);\n        renderFixedHeaders.call(this, 'left', vr, fw, fh, 0, ty);\n        renderContent.call(this, vr, fw, fh, 0, -y);\n      }\n      // 4\n      const freezeViewRange = data.freezeViewRange();\n      renderContentGrid.call(this, freezeViewRange, fw, fh, 0, 0);\n      renderFixedHeaders.call(this, 'all', freezeViewRange, fw, fh, 0, 0);\n      renderContent.call(this, freezeViewRange, fw, fh, 0, 0);\n      // 5\n      renderFreezeHighlightLine.call(this, fw, fh, tx, ty);\n    }\n  }\n\n  clear() {\n    this.draw.clear();\n  }\n}\n\nexport default Table;\n","/* global window document */\nimport { h } from './element';\nimport { cssPrefix } from '../config';\nimport Button from './button';\nimport { Draw } from '../canvas/draw';\nimport { renderCell } from './table';\nimport { t } from '../locale/locale';\n\n// resolution: 72 => 595 x 842\n// 150 => 1240 x 1754\n// 200 => 1654 x 2339\n// 300 => 2479 x 3508\n// 96 * cm / 2.54 , 96 * cm / 2.54\n\nconst PAGER_SIZES = [\n  ['A3', 11.69, 16.54],\n  ['A4', 8.27, 11.69],\n  ['A5', 5.83, 8.27],\n  ['B4', 9.84, 13.90],\n  ['B5', 6.93, 9.84],\n];\n\nconst PAGER_ORIENTATIONS = ['landscape', 'portrait'];\n\nfunction inches2px(inc) {\n  return parseInt(96 * inc, 10);\n}\n\nfunction btnClick(type) {\n  if (type === 'cancel') {\n    this.el.hide();\n  } else {\n    this.toPrint();\n  }\n}\n\nfunction pagerSizeChange(evt) {\n  const { paper } = this;\n  const { value } = evt.target;\n  const ps = PAGER_SIZES[value];\n  paper.w = inches2px(ps[1]);\n  paper.h = inches2px(ps[2]);\n  // console.log('paper:', ps, paper);\n  this.preview();\n}\nfunction pagerOrientationChange(evt) {\n  const { paper } = this;\n  const { value } = evt.target;\n  const v = PAGER_ORIENTATIONS[value];\n  paper.orientation = v;\n  this.preview();\n}\n\nexport default class Print {\n  constructor(data) {\n    this.paper = {\n      w: inches2px(PAGER_SIZES[0][1]),\n      h: inches2px(PAGER_SIZES[0][2]),\n      padding: 50,\n      orientation: PAGER_ORIENTATIONS[0],\n      get width() {\n        return this.orientation === 'landscape' ? this.h : this.w;\n      },\n      get height() {\n        return this.orientation === 'landscape' ? this.w : this.h;\n      },\n    };\n    this.data = data;\n    this.el = h('div', `${cssPrefix}-print`)\n      .children(\n        h('div', `${cssPrefix}-print-bar`)\n          .children(\n            h('div', '-title').child('Print settings'),\n            h('div', '-right').children(\n              h('div', `${cssPrefix}-buttons`).children(\n                new Button('cancel').on('click', btnClick.bind(this, 'cancel')),\n                new Button('next', 'primary').on('click', btnClick.bind(this, 'next')),\n              ),\n            ),\n          ),\n        h('div', `${cssPrefix}-print-content`)\n          .children(\n            this.contentEl = h('div', '-content'),\n            h('div', '-sider').child(\n              h('form', '').children(\n                h('fieldset', '').children(\n                  h('label', '').child(`${t('print.size')}`),\n                  h('select', '').children(\n                    ...PAGER_SIZES.map((it, index) => h('option', '').attr('value', index).child(`${it[0]} ( ${it[1]}''x${it[2]}'' )`)),\n                  ).on('change', pagerSizeChange.bind(this)),\n                ),\n                h('fieldset', '').children(\n                  h('label', '').child(`${t('print.orientation')}`),\n                  h('select', '').children(\n                    ...PAGER_ORIENTATIONS.map((it, index) => h('option', '').attr('value', index).child(`${t('print.orientations')[index]}`)),\n                  ).on('change', pagerOrientationChange.bind(this)),\n                ),\n              ),\n            ),\n          ),\n      ).hide();\n  }\n\n  resetData(data) {\n    this.data = data;\n  }\n\n  preview() {\n    const { data, paper } = this;\n    const { width, height, padding } = paper;\n    const iwidth = width - padding * 2;\n    const iheight = height - padding * 2;\n    const cr = data.contentRange();\n    const pages = parseInt(cr.h / iheight, 10) + 1;\n    const scale = iwidth / cr.w;\n    let left = padding;\n    const top = padding;\n    if (scale > 1) {\n      left += (iwidth - cr.w) / 2;\n    }\n    let ri = 0;\n    let yoffset = 0;\n    this.contentEl.html('');\n    this.canvases = [];\n    const mViewRange = {\n      sri: 0,\n      sci: 0,\n      eri: 0,\n      eci: 0,\n    };\n    for (let i = 0; i < pages; i += 1) {\n      let th = 0;\n      let yo = 0;\n      const wrap = h('div', `${cssPrefix}-canvas-card`);\n      const canvas = h('canvas', `${cssPrefix}-canvas`);\n      this.canvases.push(canvas.el);\n      const draw = new Draw(canvas.el, width, height);\n      // cell-content\n      draw.save();\n      draw.translate(left, top);\n      if (scale < 1) draw.scale(scale, scale);\n      // console.log('ri:', ri, cr.eri, yoffset);\n      for (; ri <= cr.eri; ri += 1) {\n        const rh = data.rows.getHeight(ri);\n        th += rh;\n        if (th < iheight) {\n          for (let ci = 0; ci <= cr.eci; ci += 1) {\n            renderCell(draw, data, ri, ci, yoffset);\n            mViewRange.eci = ci;\n          }\n        } else {\n          yo = -(th - rh);\n          break;\n        }\n      }\n      mViewRange.eri = ri;\n      draw.restore();\n      // merge-cell\n      draw.save();\n      draw.translate(left, top);\n      if (scale < 1) draw.scale(scale, scale);\n      const yof = yoffset;\n      data.eachMergesInView(mViewRange, ({ sri, sci }) => {\n        renderCell(draw, data, sri, sci, yof);\n      });\n      draw.restore();\n\n      mViewRange.sri = mViewRange.eri;\n      mViewRange.sci = mViewRange.eci;\n      yoffset += yo;\n      this.contentEl.child(h('div', `${cssPrefix}-canvas-card-wraper`).child(wrap.child(canvas)));\n    }\n    this.el.show();\n  }\n\n  toPrint() {\n    this.el.hide();\n    const { paper } = this;\n    const iframe = h('iframe', '').hide();\n    const { el } = iframe;\n    window.document.body.appendChild(el);\n    const { contentWindow } = el;\n    const idoc = contentWindow.document;\n    const style = document.createElement('style');\n    style.innerHTML = `\n      @page { size: ${paper.width}px ${paper.height}px; };\n      canvas {\n        page-break-before: auto;        \n        page-break-after: always;\n        image-rendering: pixelated;\n      };\n    `;\n    idoc.head.appendChild(style);\n    this.canvases.forEach((it) => {\n      const cn = it.cloneNode(false);\n      const ctx = cn.getContext('2d');\n      // ctx.imageSmoothingEnabled = true;\n      ctx.drawImage(it, 0, 0);\n      idoc.body.appendChild(cn);\n    });\n    contentWindow.print();\n  }\n}\n","import { h } from './element';\nimport { bindClickoutside, unbindClickoutside } from './event';\nimport { cssPrefix } from '../config';\nimport { tf } from '../locale/locale';\n\nconst menuItems = [\n  { key: 'copy', title: tf('contextmenu.copy'), label: 'Ctrl+C' },\n  { key: 'cut', title: tf('contextmenu.cut'), label: 'Ctrl+X' },\n  { key: 'paste', title: tf('contextmenu.paste'), label: 'Ctrl+V' },\n  { key: 'paste-value', title: tf('contextmenu.pasteValue'), label: 'Ctrl+Shift+V' },\n  { key: 'paste-format', title: tf('contextmenu.pasteFormat'), label: 'Ctrl+Alt+V' },\n  { key: 'divider' },\n  { key: 'insert-row', title: tf('contextmenu.insertRow') },\n  { key: 'insert-column', title: tf('contextmenu.insertColumn') },\n  { key: 'divider' },\n  { key: 'delete-row', title: tf('contextmenu.deleteRow') },\n  { key: 'delete-column', title: tf('contextmenu.deleteColumn') },\n  { key: 'delete-cell-text', title: tf('contextmenu.deleteCellText') },\n  { key: 'hide', title: tf('contextmenu.hide') },\n  { key: 'divider' },\n  { key: 'validation', title: tf('contextmenu.validation') },\n  { key: 'divider' },\n  { key: 'cell-printable', title: tf('contextmenu.cellprintable') },\n  { key: 'cell-non-printable', title: tf('contextmenu.cellnonprintable') },\n  { key: 'divider' },\n  { key: 'cell-editable', title: tf('contextmenu.celleditable') },\n  { key: 'cell-non-editable', title: tf('contextmenu.cellnoneditable') },\n];\n\nfunction buildMenuItem(item) {\n  if (item.key === 'divider') {\n    return h('div', `${cssPrefix}-item divider`);\n  }\n  return h('div', `${cssPrefix}-item`)\n    .on('click', () => {\n      this.itemClick(item.key);\n      this.hide();\n    })\n    .children(\n      item.title(),\n      h('div', 'label').child(item.label || ''),\n    );\n}\n\nfunction buildMenu() {\n  return menuItems.map(it => buildMenuItem.call(this, it));\n}\n\nexport default class ContextMenu {\n  constructor(viewFn, isHide = false) {\n    this.menuItems = buildMenu.call(this);\n    this.el = h('div', `${cssPrefix}-contextmenu`)\n      .children(...this.menuItems)\n      .hide();\n    this.viewFn = viewFn;\n    this.itemClick = () => {};\n    this.isHide = isHide;\n    this.setMode('range');\n  }\n\n  // row-col: the whole rows or the whole cols\n  // range: select range\n  setMode(mode) {\n    const hideEl = this.menuItems[12];\n    if (mode === 'row-col') {\n      hideEl.show();\n    } else {\n      hideEl.hide();\n    }\n  }\n\n  hide() {\n    const { el } = this;\n    el.hide();\n    unbindClickoutside(el);\n  }\n\n  setPosition(x, y) {\n    if (this.isHide) return;\n    const { el } = this;\n    const { width } = el.show().offset();\n    const view = this.viewFn();\n    const vhf = view.height / 2;\n    let left = x;\n    if (view.width - x <= width) {\n      left -= width;\n    }\n    el.css('left', `${left}px`);\n    if (y > vhf) {\n      el.css('bottom', `${view.height - y}px`)\n        .css('max-height', `${y}px`)\n        .css('top', 'auto');\n    } else {\n      el.css('top', `${y}px`)\n        .css('max-height', `${view.height - y}px`)\n        .css('bottom', 'auto');\n    }\n    bindClickoutside(el);\n  }\n}\n","/* global document */\nimport { h } from './element';\nimport { bind } from './event';\nimport { cssPrefix } from '../config';\n\nexport default function tooltip(html, target) {\n  if (target.classList.contains('active')) {\n    return;\n  }\n  const {\n    left, top, width, height,\n  } = target.getBoundingClientRect();\n  const el = h('div', `${cssPrefix}-tooltip`).html(html).show();\n  document.body.appendChild(el.el);\n  const elBox = el.box();\n  // console.log('elBox:', elBox);\n  el.css('left', `${left + (width / 2) - (elBox.width / 2)}px`)\n    .css('top', `${top + height + 2}px`);\n\n  bind(target, 'mouseleave', () => {\n    if (document.body.contains(el.el)) {\n      document.body.removeChild(el.el);\n    }\n  });\n\n  bind(target, 'click', () => {\n    if (document.body.contains(el.el)) {\n      document.body.removeChild(el.el);\n    }\n  });\n}\n","import { cssPrefix } from '../../config';\nimport tooltip from '../tooltip';\nimport { h } from '../element';\nimport { t } from '../../locale/locale';\n\nexport default class Item {\n  // tooltip\n  // tag: the subclass type\n  // shortcut: shortcut key\n  constructor(tag, shortcut, value) {\n    this.tip = t(`toolbar.${tag.replace(/-[a-z]/g, c => c[1].toUpperCase())}`);\n    if (shortcut) this.tip += ` (${shortcut})`;\n    this.tag = tag;\n    this.shortcut = shortcut;\n    this.value = value;\n    this.el = this.element();\n    this.change = () => {};\n  }\n\n  element() {\n    const { tip } = this;\n    return h('div', `${cssPrefix}-toolbar-btn`)\n      .on('mouseenter', (evt) => {\n        tooltip(tip, evt.target);\n      })\n      .attr('data-tooltip', tip);\n  }\n\n  setState() {}\n}\n","import Item from './item';\n\nexport default class DropdownItem extends Item {\n  dropdown() {}\n\n  getValue(v) {\n    return v;\n  }\n\n  element() {\n    const { tag } = this;\n    this.dd = this.dropdown();\n    this.dd.change = it => this.change(tag, this.getValue(it));\n    return super.element().child(\n      this.dd,\n    );\n  }\n\n  setState(v) {\n    if (v) {\n      this.value = v;\n      this.dd.setTitle(v);\n    }\n  }\n}\n","import { Element, h } from './element';\nimport { bindClickoutside, unbindClickoutside } from './event';\nimport { cssPrefix } from '../config';\n\nexport default class Dropdown extends Element {\n  constructor(title, width, showArrow, placement, ...children) {\n    super('div', `${cssPrefix}-dropdown ${placement}`);\n    this.title = title;\n    this.change = () => {};\n    this.headerClick = () => {};\n    if (typeof title === 'string') {\n      this.title = h('div', `${cssPrefix}-dropdown-title`).child(title);\n    } else if (showArrow) {\n      this.title.addClass('arrow-left');\n    }\n    this.contentEl = h('div', `${cssPrefix}-dropdown-content`)\n      .css('width', width)\n      .hide();\n\n    this.setContentChildren(...children);\n\n    this.headerEl = h('div', `${cssPrefix}-dropdown-header`);\n    this.headerEl.on('click', () => {\n      if (this.contentEl.css('display') !== 'block') {\n        this.show();\n      } else {\n        this.hide();\n      }\n    }).children(\n      this.title,\n      showArrow ? h('div', `${cssPrefix}-icon arrow-right`).child(\n        h('div', `${cssPrefix}-icon-img arrow-down`),\n      ) : '',\n    );\n    this.children(this.headerEl, this.contentEl);\n  }\n\n  setContentChildren(...children) {\n    this.contentEl.html('');\n    if (children.length > 0) {\n      this.contentEl.children(...children);\n    }\n  }\n\n  setTitle(title) {\n    this.title.html(title);\n    this.hide();\n  }\n\n  show() {\n    const { contentEl } = this;\n    contentEl.show();\n    this.parent().active();\n    bindClickoutside(this.parent(), () => {\n      this.hide();\n    });\n  }\n\n  hide() {\n    this.parent().active(false);\n    this.contentEl.hide();\n    unbindClickoutside(this.parent());\n  }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport Icon from './icon';\nimport { cssPrefix } from '../config';\n\nfunction buildItemWithIcon(iconName) {\n  return h('div', `${cssPrefix}-item`).child(new Icon(iconName));\n}\n\nexport default class DropdownAlign extends Dropdown {\n  constructor(aligns, align) {\n    const icon = new Icon(`align-${align}`);\n    const naligns = aligns.map(it => buildItemWithIcon(`align-${it}`)\n      .on('click', () => {\n        this.setTitle(it);\n        this.change(it);\n      }));\n    super(icon, 'auto', true, 'bottom-left', ...naligns);\n  }\n\n  setTitle(align) {\n    this.title.setName(`align-${align}`);\n    this.hide();\n  }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownAlign from '../dropdown_align';\n\nexport default class Align extends DropdownItem {\n  constructor(value) {\n    super('align', '', value);\n  }\n\n  dropdown() {\n    const { value } = this;\n    return new DropdownAlign(['left', 'center', 'right'], value);\n  }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownAlign from '../dropdown_align';\n\nexport default class Valign extends DropdownItem {\n  constructor(value) {\n    super('valign', '', value);\n  }\n\n  dropdown() {\n    const { value } = this;\n    return new DropdownAlign(['top', 'middle', 'bottom'], value);\n  }\n}\n","import Item from './item';\nimport Icon from '../icon';\n\nexport default class ToggleItem extends Item {\n  element() {\n    const { tag } = this;\n    return super.element()\n      .child(new Icon(tag))\n      .on('click', () => this.click());\n  }\n\n  click() {\n    this.change(this.tag, this.toggle());\n  }\n\n  setState(active) {\n    this.el.active(active);\n  }\n\n  toggle() {\n    return this.el.toggle();\n  }\n\n  active() {\n    return this.el.hasClass('active');\n  }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Autofilter extends ToggleItem {\n  constructor() {\n    super('autofilter');\n  }\n\n  setState() {}\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Bold extends ToggleItem {\n  constructor() {\n    super('font-bold', 'Ctrl+B');\n  }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Italic extends ToggleItem {\n  constructor() {\n    super('font-italic', 'Ctrl+I');\n  }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Strike extends ToggleItem {\n  constructor() {\n    super('strike', 'Ctrl+U');\n  }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Underline extends ToggleItem {\n  constructor() {\n    super('underline', 'Ctrl+U');\n  }\n}\n","import { h } from './element';\nimport { cssPrefix } from '../config';\n\nconst themeColorPlaceHolders = ['#ffffff', '#000100', '#e7e5e6', '#445569', '#5b9cd6', '#ed7d31', '#a5a5a5', '#ffc001', '#4371c6', '#71ae47'];\n\nconst themeColors = [\n  ['#f2f2f2', '#7f7f7f', '#d0cecf', '#d5dce4', '#deeaf6', '#fce5d5', '#ededed', '#fff2cd', '#d9e2f3', '#e3efd9'],\n  ['#d8d8d8', '#595959', '#afabac', '#adb8ca', '#bdd7ee', '#f7ccac', '#dbdbdb', '#ffe59a', '#b3c6e7', '#c5e0b3'],\n  ['#bfbfbf', '#3f3f3f', '#756f6f', '#8596b0', '#9cc2e6', '#f4b184', '#c9c9c9', '#fed964', '#8eaada', '#a7d08c'],\n  ['#a5a5a5', '#262626', '#3a3839', '#333f4f', '#2e75b5', '#c45a10', '#7b7b7b', '#bf8e01', '#2f5596', '#538136'],\n  ['#7f7f7f', '#0c0c0c', '#171516', '#222a35', '#1f4e7a', '#843c0a', '#525252', '#7e6000', '#203864', '#365624'],\n];\n\nconst standardColors = ['#c00000', '#fe0000', '#fdc101', '#ffff01', '#93d051', '#00b04e', '#01b0f1', '#0170c1', '#012060', '#7030a0'];\n\nfunction buildTd(bgcolor) {\n  return h('td', '').child(\n    h('div', `${cssPrefix}-color-palette-cell`)\n      .on('click.stop', () => this.change(bgcolor))\n      .css('background-color', bgcolor),\n  );\n}\n\nexport default class ColorPalette {\n  constructor() {\n    this.el = h('div', `${cssPrefix}-color-palette`);\n    this.change = () => {};\n    const table = h('table', '').children(\n      h('tbody', '').children(\n        h('tr', `${cssPrefix}-theme-color-placeholders`).children(\n          ...themeColorPlaceHolders.map(color => buildTd.call(this, color)),\n        ),\n        ...themeColors.map(it => h('tr', `${cssPrefix}-theme-colors`).children(\n          ...it.map(color => buildTd.call(this, color)),\n        )),\n        h('tr', `${cssPrefix}-standard-colors`).children(\n          ...standardColors.map(color => buildTd.call(this, color)),\n        ),\n      ),\n    );\n    this.el.child(table);\n  }\n}\n","import Dropdown from './dropdown';\nimport Icon from './icon';\nimport ColorPalette from './color_palette';\n\nexport default class DropdownColor extends Dropdown {\n  constructor(iconName, color) {\n    const icon = new Icon(iconName)\n      .css('height', '16px')\n      .css('border-bottom', `3px solid ${color}`);\n    const colorPalette = new ColorPalette();\n    colorPalette.change = (v) => {\n      this.setTitle(v);\n      this.change(v);\n    };\n    super(icon, 'auto', false, 'bottom-left', colorPalette.el);\n  }\n\n  setTitle(color) {\n    this.title.css('border-color', color);\n    this.hide();\n  }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport Icon from './icon';\nimport { cssPrefix } from '../config';\n\nconst lineTypes = [\n  ['thin', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"1\" style=\"user-select: none;\"><line x1=\"0\" y1=\"0.5\" x2=\"50\" y2=\"0.5\" stroke-width=\"1\" stroke=\"black\" style=\"user-select: none;\"></line></svg>'],\n  ['medium', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"2\" style=\"user-select: none;\"><line x1=\"0\" y1=\"1.0\" x2=\"50\" y2=\"1.0\" stroke-width=\"2\" stroke=\"black\" style=\"user-select: none;\"></line></svg>'],\n  ['thick', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"3\" style=\"user-select: none;\"><line x1=\"0\" y1=\"1.5\" x2=\"50\" y2=\"1.5\" stroke-width=\"3\" stroke=\"black\" style=\"user-select: none;\"></line></svg>'],\n  ['dashed', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"1\" style=\"user-select: none;\"><line x1=\"0\" y1=\"0.5\" x2=\"50\" y2=\"0.5\" stroke-width=\"1\" stroke=\"black\" stroke-dasharray=\"2\" style=\"user-select: none;\"></line></svg>'],\n  ['dotted', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"1\" style=\"user-select: none;\"><line x1=\"0\" y1=\"0.5\" x2=\"50\" y2=\"0.5\" stroke-width=\"1\" stroke=\"black\" stroke-dasharray=\"1\" style=\"user-select: none;\"></line></svg>'],\n  // ['double', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"3\" style=\"user-select: none;\"><line x1=\"0\" y1=\"0.5\" x2=\"50\" y2=\"0.5\" stroke-width=\"1\" stroke=\"black\" style=\"user-select: none;\"></line><line x1=\"0\" y1=\"2.5\" x2=\"50\" y2=\"2.5\" stroke-width=\"1\" stroke=\"black\" style=\"user-select: none;\"></line></svg>'],\n];\n\nexport default class DropdownLineType extends Dropdown {\n  constructor(type) {\n    const icon = new Icon('line-type');\n    let beforei = 0;\n    const lineTypeEls = lineTypes.map((it, iti) => h('div', `${cssPrefix}-item state ${type === it[0] ? 'checked' : ''}`)\n      .on('click', () => {\n        lineTypeEls[beforei].toggle('checked');\n        lineTypeEls[iti].toggle('checked');\n        beforei = iti;\n        this.hide();\n        this.change(it);\n      })\n      .child(\n        h('div', `${cssPrefix}-line-type`).html(it[1]),\n      ));\n\n    super(icon, 'auto', false, 'bottom-left', ...lineTypeEls);\n  }\n}\n","import { h } from './element';\nimport Icon from './icon';\nimport DropdownColor from './dropdown_color';\nimport DropdownLineType from './dropdown_linetype';\nimport { cssPrefix } from '../config';\n\nfunction buildTable(...trs) {\n  return h('table', '').child(\n    h('tbody', '').children(...trs),\n  );\n}\n\nfunction buildTd(iconName) {\n  return h('td', '').child(\n    h('div', `${cssPrefix}-border-palette-cell`).child(\n      new Icon(`border-${iconName}`),\n    ).on('click', () => {\n      this.mode = iconName;\n      const { mode, style, color } = this;\n      this.change({ mode, style, color });\n    }),\n  );\n}\n\nexport default class BorderPalette {\n  constructor() {\n    this.color = '#000';\n    this.style = 'thin';\n    this.mode = 'all';\n    this.change = () => {};\n    this.ddColor = new DropdownColor('line-color', this.color);\n    this.ddColor.change = (color) => {\n      this.color = color;\n    };\n    this.ddType = new DropdownLineType(this.style);\n    this.ddType.change = ([s]) => {\n      this.style = s;\n    };\n    this.el = h('div', `${cssPrefix}-border-palette`);\n    const table = buildTable(\n      h('tr', '').children(\n        h('td', `${cssPrefix}-border-palette-left`).child(\n          buildTable(\n            h('tr', '').children(\n              ...['all', 'inside', 'horizontal', 'vertical', 'outside'].map(it => buildTd.call(this, it)),\n            ),\n            h('tr', '').children(\n              ...['left', 'top', 'right', 'bottom', 'none'].map(it => buildTd.call(this, it)),\n            ),\n          ),\n        ),\n        h('td', `${cssPrefix}-border-palette-right`).children(\n          h('div', `${cssPrefix}-toolbar-btn`).child(this.ddColor.el),\n          h('div', `${cssPrefix}-toolbar-btn`).child(this.ddType.el),\n        ),\n      ),\n    );\n    this.el.child(table);\n  }\n}\n","import Dropdown from './dropdown';\nimport Icon from './icon';\nimport BorderPalette from './border_palette';\n\nexport default class DropdownBorder extends Dropdown {\n  constructor() {\n    const icon = new Icon('border-all');\n    const borderPalette = new BorderPalette();\n    borderPalette.change = (v) => {\n      this.change(v);\n      this.hide();\n    };\n    super(icon, 'auto', false, 'bottom-left', borderPalette.el);\n  }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownBorder from '../dropdown_border';\n\nexport default class Border extends DropdownItem {\n  constructor() {\n    super('border');\n  }\n\n  dropdown() {\n    return new DropdownBorder();\n  }\n}\n","import Item from './item';\nimport Icon from '../icon';\n\nexport default class IconItem extends Item {\n  element() {\n    return super.element()\n      .child(new Icon(this.tag))\n      .on('click', () => this.change(this.tag));\n  }\n\n  setState(disabled) {\n    this.el.disabled(disabled);\n  }\n}\n","import IconItem from './icon_item';\n\nexport default class Clearformat extends IconItem {\n  constructor() {\n    super('clearformat');\n  }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Paintformat extends ToggleItem {\n  constructor() {\n    super('paintformat');\n  }\n\n  setState() {}\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownColor from '../dropdown_color';\n\nexport default class TextColor extends DropdownItem {\n  constructor(color) {\n    super('color', undefined, color);\n  }\n\n  dropdown() {\n    const { tag, value } = this;\n    return new DropdownColor(tag, value);\n  }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownColor from '../dropdown_color';\n\nexport default class FillColor extends DropdownItem {\n  constructor(color) {\n    super('bgcolor', undefined, color);\n  }\n\n  dropdown() {\n    const { tag, value } = this;\n    return new DropdownColor(tag, value);\n  }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport { fontSizes } from '../core/font';\nimport { cssPrefix } from '../config';\n\nexport default class DropdownFontSize extends Dropdown {\n  constructor() {\n    const nfontSizes = fontSizes.map(it => h('div', `${cssPrefix}-item`)\n      .on('click', () => {\n        this.setTitle(`${it.pt}`);\n        this.change(it);\n      })\n      .child(`${it.pt}`));\n    super('10', '60px', true, 'bottom-left', ...nfontSizes);\n  }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownFontsize from '../dropdown_fontsize';\n\nexport default class Format extends DropdownItem {\n  constructor() {\n    super('font-size');\n  }\n\n  getValue(it) {\n    return it.pt;\n  }\n\n  dropdown() {\n    return new DropdownFontsize();\n  }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport { baseFonts } from '../core/font';\nimport { cssPrefix } from '../config';\n\nexport default class DropdownFont extends Dropdown {\n  constructor() {\n    const nfonts = baseFonts.map(it => h('div', `${cssPrefix}-item`)\n      .on('click', () => {\n        this.setTitle(it.title);\n        this.change(it);\n      })\n      .child(it.title));\n    super(baseFonts[0].title, '160px', true, 'bottom-left', ...nfonts);\n  }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownFont from '../dropdown_font';\n\nexport default class Font extends DropdownItem {\n  constructor() {\n    super('font-name');\n  }\n\n  getValue(it) {\n    return it.key;\n  }\n\n  dropdown() {\n    return new DropdownFont();\n  }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport { baseFormats } from '../core/format';\nimport { cssPrefix } from '../config';\n\nexport default class DropdownFormat extends Dropdown {\n  constructor() {\n    let nformats = baseFormats.slice(0);\n    nformats.splice(2, 0, { key: 'divider' });\n    nformats.splice(8, 0, { key: 'divider' });\n    nformats = nformats.map((it) => {\n      const item = h('div', `${cssPrefix}-item`);\n      if (it.key === 'divider') {\n        item.addClass('divider');\n      } else {\n        item.child(it.title())\n          .on('click', () => {\n            this.setTitle(it.title());\n            this.change(it);\n          });\n        if (it.label) item.child(h('div', 'label').html(it.label));\n      }\n      return item;\n    });\n    super('Normal', '220px', true, 'bottom-left', ...nformats);\n  }\n\n  setTitle(key) {\n    for (let i = 0; i < baseFormats.length; i += 1) {\n      if (baseFormats[i].key === key) {\n        this.title.html(baseFormats[i].title());\n      }\n    }\n    this.hide();\n  }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownFormat from '../dropdown_format';\n\nexport default class Format extends DropdownItem {\n  constructor() {\n    super('format');\n  }\n\n  getValue(it) {\n    return it.key;\n  }\n\n  dropdown() {\n    return new DropdownFormat();\n  }\n}\n","import Dropdown from './dropdown';\nimport Icon from './icon';\nimport { h } from './element';\nimport { baseFormulas } from '../core/formula';\nimport { cssPrefix } from '../config';\n\nexport default class DropdownFormula extends Dropdown {\n  constructor() {\n    const nformulas = baseFormulas.map(it => h('div', `${cssPrefix}-item`)\n      .on('click', () => {\n        this.hide();\n        this.change(it);\n      })\n      .child(it.key));\n    super(new Icon('formula'), '180px', true, 'bottom-left', ...nformulas);\n  }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownFormula from '../dropdown_formula';\n\nexport default class Format extends DropdownItem {\n  constructor() {\n    super('formula');\n  }\n\n  getValue(it) {\n    return it.key;\n  }\n\n  dropdown() {\n    return new DropdownFormula();\n  }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Freeze extends ToggleItem {\n  constructor() {\n    super('freeze');\n  }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Merge extends ToggleItem {\n  constructor() {\n    super('merge');\n  }\n\n  setState(active, disabled) {\n    this.el.active(active).disabled(disabled);\n  }\n}\n","import IconItem from './icon_item';\n\nexport default class Redo extends IconItem {\n  constructor() {\n    super('redo', 'Ctrl+Y');\n  }\n}\n","import IconItem from './icon_item';\n\nexport default class Undo extends IconItem {\n  constructor() {\n    super('undo', 'Ctrl+Z');\n  }\n}\n","import IconItem from './icon_item';\n\nexport default class Print extends IconItem {\n  constructor() {\n    super('print', 'Ctrl+P');\n  }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Textwrap extends ToggleItem {\n  constructor() {\n    super('textwrap');\n  }\n}\n","import Dropdown from '../dropdown';\nimport DropdownItem from './dropdown_item';\n\nimport { cssPrefix } from '../../config';\nimport { h } from '../element';\nimport Icon from '../icon';\n\nclass DropdownMore extends Dropdown {\n  constructor() {\n    const icon = new Icon('ellipsis');\n    const moreBtns = h('div', `${cssPrefix}-toolbar-more`);\n    super(icon, 'auto', false, 'bottom-right', moreBtns);\n    this.moreBtns = moreBtns;\n    this.contentEl.css('max-width', '420px');\n  }\n}\n\nexport default class More extends DropdownItem {\n  constructor() {\n    super('more');\n    this.el.hide();\n  }\n\n  dropdown() {\n    return new DropdownMore();\n  }\n\n  show() {\n    this.el.show();\n  }\n\n  hide() {\n    this.el.hide();\n  }\n}\n","/* global window */\n\nimport Align from './align';\nimport Valign from './valign';\nimport Autofilter from './autofilter';\nimport Bold from './bold';\nimport Italic from './italic';\nimport Strike from './strike';\nimport Underline from './underline';\nimport Border from './border';\nimport Clearformat from './clearformat';\nimport Paintformat from './paintformat';\nimport TextColor from './text_color';\nimport FillColor from './fill_color';\nimport FontSize from './font_size';\nimport Font from './font';\nimport Format from './format';\nimport Formula from './formula';\nimport Freeze from './freeze';\nimport Merge from './merge';\nimport Redo from './redo';\nimport Undo from './undo';\nimport Print from './print';\nimport Textwrap from './textwrap';\nimport More from './more';\n\nimport { h } from '../element';\nimport { cssPrefix } from '../../config';\nimport { bind } from '../event';\n\nfunction buildDivider() {\n  return h('div', `${cssPrefix}-toolbar-divider`);\n}\n\nfunction initBtns2() {\n  this.btns2 = [];\n  this.items.forEach((it) => {\n    if (Array.isArray(it)) {\n      it.forEach(({ el }) => {\n        const rect = el.box();\n        const { marginLeft, marginRight } = el.computedStyle();\n        this.btns2.push([el, rect.width + parseInt(marginLeft, 10) + parseInt(marginRight, 10)]);\n      });\n    } else {\n      const rect = it.box();\n      const { marginLeft, marginRight } = it.computedStyle();\n      this.btns2.push([it, rect.width + parseInt(marginLeft, 10) + parseInt(marginRight, 10)]);\n    }\n  });\n}\n\nfunction moreResize() {\n  const {\n    el, btns, moreEl, btns2,\n  } = this;\n  const { moreBtns, contentEl } = moreEl.dd;\n  el.css('width', `${this.widthFn() - 60}px`);\n  const elBox = el.box();\n\n  let sumWidth = 160;\n  let sumWidth2 = 12;\n  const list1 = [];\n  const list2 = [];\n  btns2.forEach(([it, w], index) => {\n    sumWidth += w;\n    if (index === btns2.length - 1 || sumWidth < elBox.width) {\n      list1.push(it);\n    } else {\n      sumWidth2 += w;\n      list2.push(it);\n    }\n  });\n  btns.html('').children(...list1);\n  moreBtns.html('').children(...list2);\n  contentEl.css('width', `${sumWidth2}px`);\n  if (list2.length > 0) {\n    moreEl.show();\n  } else {\n    moreEl.hide();\n  }\n}\n\nexport default class Toolbar {\n  constructor(data, widthFn, isHide = false) {\n    this.data = data;\n    this.change = () => {};\n    this.widthFn = widthFn;\n    this.isHide = isHide;\n    const style = data.defaultStyle();\n    this.items = [\n      [\n        this.undoEl = new Undo(),\n        this.redoEl = new Redo(),\n        new Print(),\n        this.paintformatEl = new Paintformat(),\n        this.clearformatEl = new Clearformat(),\n      ],\n      buildDivider(),\n      [\n        this.formatEl = new Format(),\n      ],\n      buildDivider(),\n      [\n        this.fontEl = new Font(),\n        this.fontSizeEl = new FontSize(),\n      ],\n      buildDivider(),\n      [\n        this.boldEl = new Bold(),\n        this.italicEl = new Italic(),\n        this.underlineEl = new Underline(),\n        this.strikeEl = new Strike(),\n        this.textColorEl = new TextColor(style.color),\n      ],\n      buildDivider(),\n      [\n        this.fillColorEl = new FillColor(style.bgcolor),\n        this.borderEl = new Border(),\n        this.mergeEl = new Merge(),\n      ],\n      buildDivider(),\n      [\n        this.alignEl = new Align(style.align),\n        this.valignEl = new Valign(style.valign),\n        this.textwrapEl = new Textwrap(),\n      ],\n      buildDivider(),\n      [\n        this.freezeEl = new Freeze(),\n        this.autofilterEl = new Autofilter(),\n        this.formulaEl = new Formula(),\n        this.moreEl = new More(),\n      ],\n    ];\n\n    this.el = h('div', `${cssPrefix}-toolbar`);\n    this.btns = h('div', `${cssPrefix}-toolbar-btns`);\n\n    this.items.forEach((it) => {\n      if (Array.isArray(it)) {\n        it.forEach((i) => {\n          this.btns.child(i.el);\n          i.change = (...args) => {\n            this.change(...args);\n          };\n        });\n      } else {\n        this.btns.child(it.el);\n      }\n    });\n\n    this.el.child(this.btns);\n    if (isHide) {\n      this.el.hide();\n    } else {\n      this.reset();\n      setTimeout(() => {\n        initBtns2.call(this);\n        moreResize.call(this);\n      }, 0);\n      bind(window, 'resize', () => {\n        moreResize.call(this);\n      });\n    }\n  }\n\n  paintformatActive() {\n    return this.paintformatEl.active();\n  }\n\n  paintformatToggle() {\n    this.paintformatEl.toggle();\n  }\n\n  trigger(type) {\n    this[`${type}El`].click();\n  }\n\n  resetData(data) {\n    this.data = data;\n    this.reset();\n  }\n\n  reset() {\n    if (this.isHide) return;\n    const { data } = this;\n    const style = data.getSelectedCellStyle();\n    // console.log('canUndo:', data.canUndo());\n    this.undoEl.setState(!data.canUndo());\n    this.redoEl.setState(!data.canRedo());\n    this.mergeEl.setState(data.canUnmerge(), !data.selector.multiple());\n    this.autofilterEl.setState(!data.canAutofilter());\n    // this.mergeEl.disabled();\n    // console.log('selectedCell:', style, cell);\n    const { font, format } = style;\n    this.formatEl.setState(format);\n    this.fontEl.setState(font.name);\n    this.fontSizeEl.setState(font.size);\n    this.boldEl.setState(font.bold);\n    this.italicEl.setState(font.italic);\n    this.underlineEl.setState(style.underline);\n    this.strikeEl.setState(style.strike);\n    this.textColorEl.setState(style.color);\n    this.fillColorEl.setState(style.bgcolor);\n    this.alignEl.setState(style.align);\n    this.valignEl.setState(style.valign);\n    this.textwrapEl.setState(style.textwrap);\n    // console.log('freeze is Active:', data.freezeIsActive());\n    this.freezeEl.setState(data.freezeIsActive());\n  }\n}\n","/* global document */\n/* global window */\nimport { h } from './element';\nimport Icon from './icon';\nimport { cssPrefix } from '../config';\nimport { bind, unbind } from './event';\n\nexport default class Modal {\n  constructor(title, content, width = '600px') {\n    this.title = title;\n    this.el = h('div', `${cssPrefix}-modal`).css('width', width).children(\n      h('div', `${cssPrefix}-modal-header`).children(\n        new Icon('close').on('click.stop', () => this.hide()),\n        this.title,\n      ),\n      h('div', `${cssPrefix}-modal-content`).children(...content),\n    ).hide();\n  }\n\n  show() {\n    // dimmer\n    this.dimmer = h('div', `${cssPrefix}-dimmer active`);\n    document.body.appendChild(this.dimmer.el);\n    const { width, height } = this.el.show().box();\n    const { clientHeight, clientWidth } = document.documentElement;\n    this.el.offset({\n      left: (clientWidth - width) / 2,\n      top: (clientHeight - height) / 3,\n    });\n    window.xkeydownEsc = (evt) => {\n      if (evt.keyCode === 27) {\n        this.hide();\n      }\n    };\n    bind(window, 'keydown', window.xkeydownEsc);\n  }\n\n  hide() {\n    this.el.hide();\n    document.body.removeChild(this.dimmer.el);\n    unbind(window, 'keydown', window.xkeydownEsc);\n    delete window.xkeydownEsc;\n  }\n}\n","import { h } from './element';\nimport { cssPrefix } from '../config';\n\nexport default class FormInput {\n  constructor(width, hint) {\n    this.vchange = () => {};\n    this.el = h('div', `${cssPrefix}-form-input`);\n    this.input = h('input', '').css('width', width)\n      .on('input', evt => this.vchange(evt))\n      .attr('placeholder', hint);\n    this.el.child(this.input);\n  }\n\n  focus() {\n    setTimeout(() => {\n      this.input.el.focus();\n    }, 10);\n  }\n\n  hint(v) {\n    this.input.attr('placeholder', v);\n  }\n\n  val(v) {\n    return this.input.val(v);\n  }\n}\n","import { h } from './element';\nimport Suggest from './suggest';\nimport { cssPrefix } from '../config';\n\nexport default class FormSelect {\n  constructor(key, items, width, getTitle = it => it, change = () => {}) {\n    this.key = key;\n    this.getTitle = getTitle;\n    this.vchange = () => {};\n    this.el = h('div', `${cssPrefix}-form-select`);\n    this.suggest = new Suggest(items.map(it => ({ key: it, title: this.getTitle(it) })), (it) => {\n      this.itemClick(it.key);\n      change(it.key);\n      this.vchange(it.key);\n    }, width, this.el);\n    this.el.children(\n      this.itemEl = h('div', 'input-text').html(this.getTitle(key)),\n      this.suggest.el,\n    ).on('click', () => this.show());\n  }\n\n  show() {\n    this.suggest.search('');\n  }\n\n  itemClick(it) {\n    this.key = it;\n    this.itemEl.html(this.getTitle(it));\n  }\n\n  val(v) {\n    if (v !== undefined) {\n      this.key = v;\n      this.itemEl.html(this.getTitle(v));\n      return this;\n    }\n    return this.key;\n  }\n}\n","import { h } from './element';\nimport { cssPrefix } from '../config';\nimport { t } from '../locale/locale';\n\nconst patterns = {\n  number: /(^\\d+$)|(^\\d+(\\.\\d{0,4})?$)/,\n  date: /^\\d{4}-\\d{1,2}-\\d{1,2}$/,\n};\n\n// rule: { required: false, type, pattern: // }\nexport default class FormField {\n  constructor(input, rule, label, labelWidth) {\n    this.label = '';\n    this.rule = rule;\n    if (label) {\n      this.label = h('label', 'label').css('width', `${labelWidth}px`).html(label);\n    }\n    this.tip = h('div', 'tip').child('tip').hide();\n    this.input = input;\n    this.input.vchange = () => this.validate();\n    this.el = h('div', `${cssPrefix}-form-field`)\n      .children(this.label, input.el, this.tip);\n  }\n\n  isShow() {\n    return this.el.css('display') !== 'none';\n  }\n\n  show() {\n    this.el.show();\n  }\n\n  hide() {\n    this.el.hide();\n    return this;\n  }\n\n  val(v) {\n    return this.input.val(v);\n  }\n\n  hint(hint) {\n    this.input.hint(hint);\n  }\n\n  validate() {\n    const {\n      input, rule, tip, el,\n    } = this;\n    const v = input.val();\n    if (rule.required) {\n      if (/^\\s*$/.test(v)) {\n        tip.html(t('validation.required'));\n        el.addClass('error');\n        return false;\n      }\n    }\n    if (rule.type || rule.pattern) {\n      const pattern = rule.pattern || patterns[rule.type];\n      if (!pattern.test(v)) {\n        tip.html(t('validation.notMatch'));\n        el.addClass('error');\n        return false;\n      }\n    }\n    el.removeClass('error');\n    return true;\n  }\n}\n","import Modal from './modal';\nimport FormInput from './form_input';\nimport FormSelect from './form_select';\nimport FormField from './form_field';\nimport Button from './button';\nimport { t } from '../locale/locale';\nimport { h } from './element';\nimport { cssPrefix } from '../config';\n\nconst fieldLabelWidth = 100;\n\nexport default class ModalValidation extends Modal {\n  constructor() {\n    const mf = new FormField(\n      new FormSelect('cell',\n        ['cell'], // cell|row|column\n        '100%',\n        it => t(`dataValidation.modeType.${it}`)),\n      { required: true },\n      `${t('dataValidation.range')}:`,\n      fieldLabelWidth,\n    );\n    const rf = new FormField(\n      new FormInput('120px', 'E3 or E3:F12'),\n      { required: true, pattern: /^([A-Z]{1,2}[1-9]\\d*)(:[A-Z]{1,2}[1-9]\\d*)?$/ },\n    );\n    const cf = new FormField(\n      new FormSelect('list',\n        ['list', 'number', 'date', 'phone', 'email'],\n        '100%',\n        it => t(`dataValidation.type.${it}`),\n        it => this.criteriaSelected(it)),\n      { required: true },\n      `${t('dataValidation.criteria')}:`,\n      fieldLabelWidth,\n    );\n\n    // operator\n    const of = new FormField(\n      new FormSelect('be',\n        ['be', 'nbe', 'eq', 'neq', 'lt', 'lte', 'gt', 'gte'],\n        '160px',\n        it => t(`dataValidation.operator.${it}`),\n        it => this.criteriaOperatorSelected(it)),\n      { required: true },\n    ).hide();\n    // min, max\n    const minvf = new FormField(\n      new FormInput('70px', '10'),\n      { required: true },\n    ).hide();\n    const maxvf = new FormField(\n      new FormInput('70px', '100'),\n      { required: true, type: 'number' },\n    ).hide();\n    // value\n    const svf = new FormField(\n      new FormInput('120px', 'a,b,c'),\n      { required: true },\n    );\n    const vf = new FormField(\n      new FormInput('70px', '10'),\n      { required: true, type: 'number' },\n    ).hide();\n\n    super(t('contextmenu.validation'), [\n      h('div', `${cssPrefix}-form-fields`).children(\n        mf.el,\n        rf.el,\n      ),\n      h('div', `${cssPrefix}-form-fields`).children(\n        cf.el,\n        of.el,\n        minvf.el,\n        maxvf.el,\n        vf.el,\n        svf.el,\n      ),\n      h('div', `${cssPrefix}-buttons`).children(\n        new Button('cancel').on('click', () => this.btnClick('cancel')),\n        new Button('remove').on('click', () => this.btnClick('remove')),\n        new Button('save', 'primary').on('click', () => this.btnClick('save')),\n      ),\n    ]);\n    this.mf = mf;\n    this.rf = rf;\n    this.cf = cf;\n    this.of = of;\n    this.minvf = minvf;\n    this.maxvf = maxvf;\n    this.vf = vf;\n    this.svf = svf;\n    this.change = () => {};\n  }\n\n  showVf(it) {\n    const hint = it === 'date' ? '2018-11-12' : '10';\n    const { vf } = this;\n    vf.input.hint(hint);\n    vf.show();\n  }\n\n  criteriaSelected(it) {\n    const {\n      of, minvf, maxvf, vf, svf,\n    } = this;\n    if (it === 'date' || it === 'number') {\n      of.show();\n      minvf.rule.type = it;\n      maxvf.rule.type = it;\n      if (it === 'date') {\n        minvf.hint('2018-11-12');\n        maxvf.hint('2019-11-12');\n      } else {\n        minvf.hint('10');\n        maxvf.hint('100');\n      }\n      minvf.show();\n      maxvf.show();\n      vf.hide();\n      svf.hide();\n    } else {\n      if (it === 'list') {\n        svf.show();\n      } else {\n        svf.hide();\n      }\n      vf.hide();\n      of.hide();\n      minvf.hide();\n      maxvf.hide();\n    }\n  }\n\n  criteriaOperatorSelected(it) {\n    if (!it) return;\n    const {\n      minvf, maxvf, vf,\n    } = this;\n    if (it === 'be' || it === 'nbe') {\n      minvf.show();\n      maxvf.show();\n      vf.hide();\n    } else {\n      const type = this.cf.val();\n      vf.rule.type = type;\n      if (type === 'date') {\n        vf.hint('2018-11-12');\n      } else {\n        vf.hint('10');\n      }\n      vf.show();\n      minvf.hide();\n      maxvf.hide();\n    }\n  }\n\n  btnClick(action) {\n    if (action === 'cancel') {\n      this.hide();\n    } else if (action === 'remove') {\n      this.change('remove');\n      this.hide();\n    } else if (action === 'save') {\n      // validate\n      const attrs = ['mf', 'rf', 'cf', 'of', 'svf', 'vf', 'minvf', 'maxvf'];\n      for (let i = 0; i < attrs.length; i += 1) {\n        const field = this[attrs[i]];\n        // console.log('field:', field);\n        if (field.isShow()) {\n          // console.log('it:', it);\n          if (!field.validate()) return;\n        }\n      }\n\n      const mode = this.mf.val();\n      const ref = this.rf.val();\n      const type = this.cf.val();\n      const operator = this.of.val();\n      let value = this.svf.val();\n      if (type === 'number' || type === 'date') {\n        if (operator === 'be' || operator === 'nbe') {\n          value = [this.minvf.val(), this.maxvf.val()];\n        } else {\n          value = this.vf.val();\n        }\n      }\n      // console.log(mode, ref, type, operator, value);\n      this.change('save',\n        mode,\n        ref,\n        {\n          type, operator, required: false, value,\n        });\n      this.hide();\n    }\n  }\n\n  // validation: { mode, ref, validator }\n  setValue(v) {\n    if (v) {\n      const {\n        mf, rf, cf, of, svf, vf, minvf, maxvf,\n      } = this;\n      const {\n        mode, ref, validator,\n      } = v;\n      const {\n        type, operator, value,\n      } = validator || { type: 'list' };\n      mf.val(mode || 'cell');\n      rf.val(ref);\n      cf.val(type);\n      of.val(operator);\n      if (Array.isArray(value)) {\n        minvf.val(value[0]);\n        maxvf.val(value[1]);\n      } else {\n        svf.val(value || '');\n        vf.val(value || '');\n      }\n      this.criteriaSelected(type);\n      this.criteriaOperatorSelected(operator);\n    }\n    this.show();\n  }\n}\n","import { h } from './element';\nimport Button from './button';\nimport { bindClickoutside, unbindClickoutside } from './event';\nimport { cssPrefix } from '../config';\nimport { t } from '../locale/locale';\n\nfunction buildMenu(clsName) {\n  return h('div', `${cssPrefix}-item ${clsName}`);\n}\n\nfunction buildSortItem(it) {\n  return buildMenu('state').child(t(`sort.${it}`))\n    .on('click.stop', () => this.itemClick(it));\n}\n\nfunction buildFilterBody(items) {\n  const { filterbEl, filterValues } = this;\n  filterbEl.html('');\n  const itemKeys = Object.keys(items);\n  itemKeys.forEach((it, index) => {\n    const cnt = items[it];\n    const active = filterValues.includes(it) ? 'checked' : '';\n    filterbEl.child(h('div', `${cssPrefix}-item state ${active}`)\n      .on('click.stop', () => this.filterClick(index, it))\n      .children(it === '' ? t('filter.empty') : it, h('div', 'label').html(`(${cnt})`)));\n  });\n}\n\nfunction resetFilterHeader() {\n  const { filterhEl, filterValues, values } = this;\n  filterhEl.html(`${filterValues.length} / ${values.length}`);\n  filterhEl.checked(filterValues.length === values.length);\n}\n\nexport default class SortFilter {\n  constructor() {\n    this.filterbEl = h('div', `${cssPrefix}-body`);\n    this.filterhEl = h('div', `${cssPrefix}-header state`).on('click.stop', () => this.filterClick(0, 'all'));\n    this.el = h('div', `${cssPrefix}-sort-filter`).children(\n      this.sortAscEl = buildSortItem.call(this, 'asc'),\n      this.sortDescEl = buildSortItem.call(this, 'desc'),\n      buildMenu('divider'),\n      h('div', `${cssPrefix}-filter`).children(\n        this.filterhEl,\n        this.filterbEl,\n      ),\n      h('div', `${cssPrefix}-buttons`).children(\n        new Button('cancel').on('click', () => this.btnClick('cancel')),\n        new Button('ok', 'primary').on('click', () => this.btnClick('ok')),\n      ),\n    ).hide();\n    // this.setFilters(['test1', 'test2', 'text3']);\n    this.ci = null;\n    this.sortDesc = null;\n    this.values = null;\n    this.filterValues = [];\n  }\n\n  btnClick(it) {\n    if (it === 'ok') {\n      const { ci, sort, filterValues } = this;\n      if (this.ok) {\n        this.ok(ci, sort, 'in', filterValues);\n      }\n    }\n    this.hide();\n  }\n\n  itemClick(it) {\n    // console.log('it:', it);\n    this.sort = it;\n    const { sortAscEl, sortDescEl } = this;\n    sortAscEl.checked(it === 'asc');\n    sortDescEl.checked(it === 'desc');\n  }\n\n  filterClick(index, it) {\n    // console.log('index:', index, it);\n    const { filterbEl, filterValues, values } = this;\n    const children = filterbEl.children();\n    if (it === 'all') {\n      if (children.length === filterValues.length) {\n        this.filterValues = [];\n        children.forEach(i => h(i).checked(false));\n      } else {\n        this.filterValues = Array.from(values);\n        children.forEach(i => h(i).checked(true));\n      }\n    } else {\n      const checked = h(children[index]).toggle('checked');\n      if (checked) {\n        filterValues.push(it);\n      } else {\n        filterValues.splice(filterValues.findIndex(i => i === it), 1);\n      }\n    }\n    resetFilterHeader.call(this);\n  }\n\n  // v: autoFilter\n  // items: {value: cnt}\n  // sort { ci, order }\n  set(ci, items, filter, sort) {\n    this.ci = ci;\n    const { sortAscEl, sortDescEl } = this;\n    if (sort !== null) {\n      this.sort = sort.order;\n      sortAscEl.checked(sort.asc());\n      sortDescEl.checked(sort.desc());\n    } else {\n      this.sortDesc = null;\n      sortAscEl.checked(false);\n      sortDescEl.checked(false);\n    }\n    // this.setFilters(items, filter);\n    this.values = Object.keys(items);\n    this.filterValues = filter ? Array.from(filter.value) : Object.keys(items);\n    buildFilterBody.call(this, items, filter);\n    resetFilterHeader.call(this);\n  }\n\n  setOffset(v) {\n    this.el.offset(v).show();\n    let tindex = 1;\n    bindClickoutside(this.el, () => {\n      if (tindex <= 0) {\n        this.hide();\n      }\n      tindex -= 1;\n    });\n  }\n\n  show() {\n    this.el.show();\n  }\n\n  hide() {\n    this.el.hide();\n    unbindClickoutside(this.el);\n  }\n}\n","/* global document */\nimport { h } from './element';\nimport Icon from './icon';\nimport { cssPrefix } from '../config';\n\nexport function xtoast(title, content) {\n  const el = h('div', `${cssPrefix}-toast`);\n  const dimmer = h('div', `${cssPrefix}-dimmer active`);\n  const remove = () => {\n    document.body.removeChild(el.el);\n    document.body.removeChild(dimmer.el);\n  };\n\n  el.children(\n    h('div', `${cssPrefix}-toast-header`).children(\n      new Icon('close').on('click.stop', () => remove()),\n      title,\n    ),\n    h('div', `${cssPrefix}-toast-content`).html(content),\n  );\n  document.body.appendChild(el.el);\n  document.body.appendChild(dimmer.el);\n  // set offset\n  const { width, height } = el.box();\n  const { clientHeight, clientWidth } = document.documentElement;\n  el.offset({\n    left: (clientWidth - width) / 2,\n    top: (clientHeight - height) / 3,\n  });\n}\n\nexport default {};\n","/* global window */\nimport { h } from './element';\nimport {\n  bind,\n  mouseMoveUp,\n  bindTouch,\n  createEventEmitter,\n} from './event';\nimport Resizer from './resizer';\nimport Scrollbar from './scrollbar';\nimport Selector from './selector';\nimport Editor from './editor';\nimport Print from './print';\nimport ContextMenu from './contextmenu';\nimport Table from './table';\nimport Toolbar from './toolbar/index';\nimport ModalValidation from './modal_validation';\nimport SortFilter from './sort_filter';\nimport { xtoast } from './message';\nimport { cssPrefix } from '../config';\nimport { formulas } from '../core/formula';\n\n/**\n * @desc throttle fn\n * @param func function\n * @param wait Delay in milliseconds\n */\nfunction throttle(func, wait) {\n  let timeout;\n  return (...arg) => {\n    const that = this;\n    const args = arg;\n    if (!timeout) {\n      timeout = setTimeout(() => {\n        timeout = null;\n        func.apply(that, args);\n      }, wait);\n    }\n  };\n}\n\nfunction scrollbarMove() {\n  const {\n    data, verticalScrollbar, horizontalScrollbar,\n  } = this;\n  const {\n    l, t, left, top, width, height,\n  } = data.getSelectedRect();\n  const tableOffset = this.getTableOffset();\n  // console.log(',l:', l, ', left:', left, ', tOffset.left:', tableOffset.width);\n  if (Math.abs(left) + width > tableOffset.width) {\n    horizontalScrollbar.move({ left: l + width - tableOffset.width });\n  } else {\n    const fsw = data.freezeTotalWidth();\n    if (left < fsw) {\n      horizontalScrollbar.move({ left: l - 1 - fsw });\n    }\n  }\n  // console.log('top:', top, ', height:', height, ', tof.height:', tableOffset.height);\n  if (Math.abs(top) + height > tableOffset.height) {\n    verticalScrollbar.move({ top: t + height - tableOffset.height - 1 });\n  } else {\n    const fsh = data.freezeTotalHeight();\n    if (top < fsh) {\n      verticalScrollbar.move({ top: t - 1 - fsh });\n    }\n  }\n}\n\nfunction selectorSet(multiple, ri, ci, indexesUpdated = true, moving = false) {\n  if (ri === -1 && ci === -1) return;\n  const {\n    table, selector, toolbar, data,\n    contextMenu,\n  } = this;\n  contextMenu.setMode((ri === -1 || ci === -1) ? 'row-col' : 'range');\n  const cell = data.getCell(ri, ci);\n  if (multiple) {\n    selector.setEnd(ri, ci, moving);\n    this.trigger('cells-selected', cell, selector.range);\n  } else {\n    // trigger click event\n    selector.set(ri, ci, indexesUpdated);\n    this.trigger('cell-selected', cell, ri, ci);\n  }\n  toolbar.reset();\n  table.render();\n}\n\n// multiple: boolean\n// direction: left | right | up | down | row-first | row-last | col-first | col-last\nfunction selectorMove(multiple, direction) {\n  const {\n    selector, data,\n  } = this;\n  const { rows, cols } = data;\n  let [ri, ci] = selector.indexes;\n  const { eri, eci } = selector.range;\n  if (multiple) {\n    [ri, ci] = selector.moveIndexes;\n  }\n  // console.log('selector.move:', ri, ci);\n  if (direction === 'left') {\n    if (ci > 0) ci -= 1;\n  } else if (direction === 'right') {\n    if (eci !== ci) ci = eci;\n    if (ci < cols.len - 1) ci += 1;\n  } else if (direction === 'up') {\n    if (ri > 0) ri -= 1;\n  } else if (direction === 'down') {\n    if (eri !== ri) ri = eri;\n    if (ri < rows.len - 1) ri += 1;\n  } else if (direction === 'row-first') {\n    ci = 0;\n  } else if (direction === 'row-last') {\n    ci = cols.len - 1;\n  } else if (direction === 'col-first') {\n    ri = 0;\n  } else if (direction === 'col-last') {\n    ri = rows.len - 1;\n  }\n  if (multiple) {\n    selector.moveIndexes = [ri, ci];\n  }\n  selectorSet.call(this, multiple, ri, ci);\n  scrollbarMove.call(this);\n}\n\n// private methods\nfunction overlayerMousemove(evt) {\n  // console.log('x:', evt.offsetX, ', y:', evt.offsetY);\n  if (evt.buttons !== 0) return;\n  if (evt.target.className === `${cssPrefix}-resizer-hover`) return;\n  const { offsetX, offsetY } = evt;\n  const {\n    rowResizer, colResizer, tableEl, data,\n  } = this;\n  const { rows, cols } = data;\n  if (offsetX > cols.indexWidth && offsetY > rows.height) {\n    rowResizer.hide();\n    colResizer.hide();\n    return;\n  }\n  const tRect = tableEl.box();\n  const cRect = data.getCellRectByXY(evt.offsetX, evt.offsetY);\n  if (cRect.ri >= 0 && cRect.ci === -1) {\n    cRect.width = cols.indexWidth;\n    rowResizer.show(cRect, {\n      width: tRect.width,\n    });\n    if (rows.isHide(cRect.ri - 1)) {\n      rowResizer.showUnhide(cRect.ri);\n    } else {\n      rowResizer.hideUnhide();\n    }\n  } else {\n    rowResizer.hide();\n  }\n  if (cRect.ri === -1 && cRect.ci >= 0) {\n    cRect.height = rows.height;\n    colResizer.show(cRect, {\n      height: tRect.height,\n    });\n    if (cols.isHide(cRect.ci - 1)) {\n      colResizer.showUnhide(cRect.ci);\n    } else {\n      colResizer.hideUnhide();\n    }\n  } else {\n    colResizer.hide();\n  }\n}\n\n// let scrollThreshold = 15;\nfunction overlayerMousescroll(evt) {\n  // scrollThreshold -= 1;\n  // if (scrollThreshold > 0) return;\n  // scrollThreshold = 15;\n\n  const { verticalScrollbar, horizontalScrollbar, data } = this;\n  const { top } = verticalScrollbar.scroll();\n  const { left } = horizontalScrollbar.scroll();\n  // console.log('evt:::', evt.wheelDelta, evt.detail * 40);\n\n  const { rows, cols } = data;\n\n  // deltaY for vertical delta\n  const { deltaY, deltaX } = evt;\n  const loopValue = (ii, vFunc) => {\n    let i = ii;\n    let v = 0;\n    do {\n      v = vFunc(i);\n      i += 1;\n    } while (v <= 0);\n    return v;\n  };\n  // console.log('deltaX', deltaX, 'evt.detail', evt.detail);\n  // if (evt.detail) deltaY = evt.detail * 40;\n  const moveY = (vertical) => {\n    if (vertical > 0) {\n      // up\n      const ri = data.scroll.ri + 1;\n      if (ri < rows.len) {\n        const rh = loopValue(ri, i => rows.getHeight(i));\n        verticalScrollbar.move({ top: top + rh - 1 });\n      }\n    } else {\n      // down\n      const ri = data.scroll.ri - 1;\n      if (ri >= 0) {\n        const rh = loopValue(ri, i => rows.getHeight(i));\n        verticalScrollbar.move({ top: ri === 0 ? 0 : top - rh });\n      }\n    }\n  };\n\n  // deltaX for Mac horizontal scroll\n  const moveX = (horizontal) => {\n    if (horizontal > 0) {\n      // left\n      const ci = data.scroll.ci + 1;\n      if (ci < cols.len) {\n        const cw = loopValue(ci, i => cols.getWidth(i));\n        horizontalScrollbar.move({ left: left + cw - 1 });\n      }\n    } else {\n      // right\n      const ci = data.scroll.ci - 1;\n      if (ci >= 0) {\n        const cw = loopValue(ci, i => cols.getWidth(i));\n        horizontalScrollbar.move({ left: ci === 0 ? 0 : left - cw });\n      }\n    }\n  };\n  const tempY = Math.abs(deltaY);\n  const tempX = Math.abs(deltaX);\n  const temp = Math.max(tempY, tempX);\n  // console.log('event:', evt);\n  // detail for windows/mac firefox vertical scroll\n  if (/Firefox/i.test(window.navigator.userAgent)) throttle(moveY(evt.detail), 50);\n  if (temp === tempX) throttle(moveX(deltaX), 50);\n  if (temp === tempY) throttle(moveY(deltaY), 50);\n}\n\nfunction overlayerTouch(direction, distance) {\n  const { verticalScrollbar, horizontalScrollbar } = this;\n  const { top } = verticalScrollbar.scroll();\n  const { left } = horizontalScrollbar.scroll();\n\n  if (direction === 'left' || direction === 'right') {\n    horizontalScrollbar.move({ left: left - distance });\n  } else if (direction === 'up' || direction === 'down') {\n    verticalScrollbar.move({ top: top - distance });\n  }\n}\n\nfunction verticalScrollbarSet() {\n  const { data, verticalScrollbar } = this;\n  const { height } = this.getTableOffset();\n  const erth = data.exceptRowTotalHeight(0, -1);\n  // console.log('erth:', erth);\n  verticalScrollbar.set(height, data.rows.totalHeight() - erth);\n}\n\nfunction horizontalScrollbarSet() {\n  const { data, horizontalScrollbar } = this;\n  const { width } = this.getTableOffset();\n  if (data) {\n    horizontalScrollbar.set(width, data.cols.totalWidth());\n  }\n}\n\nfunction sheetFreeze() {\n  const {\n    selector, data, editor,\n  } = this;\n  const [ri, ci] = data.freeze;\n  if (ri > 0 || ci > 0) {\n    const fwidth = data.freezeTotalWidth();\n    const fheight = data.freezeTotalHeight();\n    editor.setFreezeLengths(fwidth, fheight);\n  }\n  selector.resetAreaOffset();\n}\n\nfunction sheetReset() {\n  const {\n    tableEl,\n    overlayerEl,\n    overlayerCEl,\n    table,\n    toolbar,\n    selector,\n    el,\n  } = this;\n  const tOffset = this.getTableOffset();\n  const vRect = this.getRect();\n  tableEl.attr(vRect);\n  overlayerEl.offset(vRect);\n  overlayerCEl.offset(tOffset);\n  el.css('width', `${vRect.width}px`);\n  verticalScrollbarSet.call(this);\n  horizontalScrollbarSet.call(this);\n  sheetFreeze.call(this);\n  table.render();\n  toolbar.reset();\n  selector.reset();\n}\n\nfunction clearClipboard() {\n  const { data, selector } = this;\n  data.clearClipboard();\n  selector.hideClipboard();\n}\n\nfunction copy() {\n  const { data, selector } = this;\n  data.copy();\n  data.copyToSystemClipboard();\n  selector.showClipboard();\n}\n\nfunction cut() {\n  const { data, selector } = this;\n  data.cut();\n  selector.showClipboard();\n}\n\nfunction paste(what, evt) {\n  const { data } = this;\n  if (data.settings.mode === 'read') return;\n  if (data.paste(what, msg => xtoast('Tip', msg))) {\n    sheetReset.call(this);\n  } else if (evt) {\n    const cdata = evt.clipboardData.getData('text/plain');\n    this.data.pasteFromText(cdata);\n    sheetReset.call(this);\n  }\n}\n\nfunction hideRowsOrCols() {\n  this.data.hideRowsOrCols();\n  sheetReset.call(this);\n}\n\nfunction unhideRowsOrCols(type, index) {\n  this.data.unhideRowsOrCols(type, index);\n  sheetReset.call(this);\n}\n\nfunction autofilter() {\n  const { data } = this;\n  data.autofilter();\n  sheetReset.call(this);\n}\n\nfunction toolbarChangePaintformatPaste() {\n  const { toolbar } = this;\n  if (toolbar.paintformatActive()) {\n    paste.call(this, 'format');\n    clearClipboard.call(this);\n    toolbar.paintformatToggle();\n  }\n}\n\nfunction overlayerMousedown(evt) {\n  // console.log(':::::overlayer.mousedown:', evt.detail, evt.button, evt.buttons, evt.shiftKey);\n  // console.log('evt.target.className:', evt.target.className);\n  const {\n    selector, data, table, sortFilter,\n  } = this;\n  const { offsetX, offsetY } = evt;\n  const isAutofillEl = evt.target.className === `${cssPrefix}-selector-corner`;\n  const cellRect = data.getCellRectByXY(offsetX, offsetY);\n  const {\n    left, top, width, height,\n  } = cellRect;\n  let { ri, ci } = cellRect;\n  // sort or filter\n  const { autoFilter } = data;\n  if (autoFilter.includes(ri, ci)) {\n    if (left + width - 20 < offsetX && top + height - 20 < offsetY) {\n      const items = autoFilter.items(ci, (r, c) => data.rows.getCell(r, c));\n      sortFilter.hide();\n      sortFilter.set(ci, items, autoFilter.getFilter(ci), autoFilter.getSort(ci));\n      sortFilter.setOffset({ left, top: top + height + 2 });\n      return;\n    }\n  }\n\n  // console.log('ri:', ri, ', ci:', ci);\n  if (!evt.shiftKey) {\n    // console.log('selectorSetStart:::');\n    if (isAutofillEl) {\n      selector.showAutofill(ri, ci);\n    } else {\n      selectorSet.call(this, false, ri, ci);\n    }\n\n    // mouse move up\n    mouseMoveUp(window, (e) => {\n      // console.log('mouseMoveUp::::');\n      ({ ri, ci } = data.getCellRectByXY(e.offsetX, e.offsetY));\n      if (isAutofillEl) {\n        selector.showAutofill(ri, ci);\n      } else if (e.buttons === 1 && !e.shiftKey) {\n        selectorSet.call(this, true, ri, ci, true, true);\n      }\n    }, () => {\n      if (isAutofillEl && selector.arange && data.settings.mode !== 'read') {\n        if (data.autofill(selector.arange, 'all', msg => xtoast('Tip', msg))) {\n          table.render();\n        }\n      }\n      selector.hideAutofill();\n      toolbarChangePaintformatPaste.call(this);\n    });\n  }\n\n  if (!isAutofillEl && evt.buttons === 1) {\n    if (evt.shiftKey) {\n      // console.log('shiftKey::::');\n      selectorSet.call(this, true, ri, ci);\n    }\n  }\n}\n\nfunction editorSetOffset() {\n  const { editor, data } = this;\n  const sOffset = data.getSelectedRect();\n  const tOffset = this.getTableOffset();\n  let sPosition = 'top';\n  // console.log('sOffset:', sOffset, ':', tOffset);\n  if (sOffset.top > tOffset.height / 2) {\n    sPosition = 'bottom';\n  }\n  editor.setOffset(sOffset, sPosition);\n}\n\nfunction editorSet() {\n  const { editor, data } = this;\n  if (data.settings.mode === 'read') return;\n  editorSetOffset.call(this);\n  editor.setCell(data.getSelectedCell(), data.getSelectedValidator());\n  clearClipboard.call(this);\n}\n\nfunction verticalScrollbarMove(distance) {\n  const { data, table, selector } = this;\n  data.scrolly(distance, () => {\n    selector.resetBRLAreaOffset();\n    editorSetOffset.call(this);\n    table.render();\n  });\n}\n\nfunction horizontalScrollbarMove(distance) {\n  const { data, table, selector } = this;\n  data.scrollx(distance, () => {\n    selector.resetBRTAreaOffset();\n    editorSetOffset.call(this);\n    table.render();\n  });\n}\n\nfunction rowResizerFinished(cRect, distance) {\n  const { ri } = cRect;\n  const { table, selector, data } = this;\n  data.rows.setHeight(ri, distance);\n  table.render();\n  selector.resetAreaOffset();\n  verticalScrollbarSet.call(this);\n  editorSetOffset.call(this);\n}\n\nfunction colResizerFinished(cRect, distance) {\n  const { ci } = cRect;\n  const { table, selector, data } = this;\n  data.cols.setWidth(ci, distance);\n  // console.log('data:', data);\n  table.render();\n  selector.resetAreaOffset();\n  horizontalScrollbarSet.call(this);\n  editorSetOffset.call(this);\n}\n\nfunction dataSetCellText(text, state = 'finished') {\n  const { data, table } = this;\n  // const [ri, ci] = selector.indexes;\n  if (data.settings.mode === 'read') return;\n  data.setSelectedCellText(text, state);\n  const { ri, ci } = data.selector;\n  if (state === 'finished') {\n    table.render();\n  } else {\n    this.trigger('cell-edited', text, ri, ci);\n  }\n}\n\nfunction insertDeleteRowColumn(type) {\n  const { data } = this;\n  if (data.settings.mode === 'read') return;\n  if (type === 'insert-row') {\n    data.insert('row');\n  } else if (type === 'delete-row') {\n    data.delete('row');\n  } else if (type === 'insert-column') {\n    data.insert('column');\n  } else if (type === 'delete-column') {\n    data.delete('column');\n  } else if (type === 'delete-cell') {\n    data.deleteCell();\n  } else if (type === 'delete-cell-format') {\n    data.deleteCell('format');\n  } else if (type === 'delete-cell-text') {\n    data.deleteCell('text');\n  } else if (type === 'cell-printable') {\n    data.setSelectedCellAttr('printable', true);\n  } else if (type === 'cell-non-printable') {\n    data.setSelectedCellAttr('printable', false);\n  } else if (type === 'cell-editable') {\n    data.setSelectedCellAttr('editable', true);\n  } else if (type === 'cell-non-editable') {\n    data.setSelectedCellAttr('editable', false);\n  }\n  clearClipboard.call(this);\n  sheetReset.call(this);\n}\n\nfunction toolbarChange(type, value) {\n  const { data } = this;\n  if (type === 'undo') {\n    this.undo();\n  } else if (type === 'redo') {\n    this.redo();\n  } else if (type === 'print') {\n    this.print.preview();\n  } else if (type === 'paintformat') {\n    if (value === true) copy.call(this);\n    else clearClipboard.call(this);\n  } else if (type === 'clearformat') {\n    insertDeleteRowColumn.call(this, 'delete-cell-format');\n  } else if (type === 'link') {\n    // link\n  } else if (type === 'chart') {\n    // chart\n  } else if (type === 'autofilter') {\n    // filter\n    autofilter.call(this);\n  } else if (type === 'freeze') {\n    if (value) {\n      const { ri, ci } = data.selector;\n      this.freeze(ri, ci);\n    } else {\n      this.freeze(0, 0);\n    }\n  } else {\n    data.setSelectedCellAttr(type, value);\n    if (type === 'formula' && !data.selector.multiple()) {\n      editorSet.call(this);\n    }\n    sheetReset.call(this);\n  }\n}\n\nfunction sortFilterChange(ci, order, operator, value) {\n  // console.log('sort:', sortDesc, operator, value);\n  this.data.setAutoFilter(ci, order, operator, value);\n  sheetReset.call(this);\n}\n\nfunction sheetInitEvents() {\n  const {\n    selector,\n    overlayerEl,\n    rowResizer,\n    colResizer,\n    verticalScrollbar,\n    horizontalScrollbar,\n    editor,\n    contextMenu,\n    toolbar,\n    modalValidation,\n    sortFilter,\n  } = this;\n  // overlayer\n  overlayerEl\n    .on('mousemove', (evt) => {\n      overlayerMousemove.call(this, evt);\n    })\n    .on('mousedown', (evt) => {\n      editor.clear();\n      contextMenu.hide();\n      // the left mouse button: mousedown → mouseup → click\n      // the right mouse button: mousedown → contenxtmenu → mouseup\n      if (evt.buttons === 2) {\n        if (this.data.xyInSelectedRect(evt.offsetX, evt.offsetY)) {\n          contextMenu.setPosition(evt.offsetX, evt.offsetY);\n        } else {\n          overlayerMousedown.call(this, evt);\n          contextMenu.setPosition(evt.offsetX, evt.offsetY);\n        }\n        evt.stopPropagation();\n      } else if (evt.detail === 2) {\n        editorSet.call(this);\n      } else {\n        overlayerMousedown.call(this, evt);\n      }\n    })\n    .on('mousewheel.stop', (evt) => {\n      overlayerMousescroll.call(this, evt);\n    })\n    .on('mouseout', (evt) => {\n      const { offsetX, offsetY } = evt;\n      if (offsetY <= 0) colResizer.hide();\n      if (offsetX <= 0) rowResizer.hide();\n    });\n\n  selector.inputChange = (v) => {\n    dataSetCellText.call(this, v, 'input');\n    editorSet.call(this);\n  };\n\n  // slide on mobile\n  bindTouch(overlayerEl.el, {\n    move: (direction, d) => {\n      overlayerTouch.call(this, direction, d);\n    },\n  });\n\n  // toolbar change\n  toolbar.change = (type, value) => toolbarChange.call(this, type, value);\n\n  // sort filter ok\n  sortFilter.ok = (ci, order, o, v) => sortFilterChange.call(this, ci, order, o, v);\n\n  // resizer finished callback\n  rowResizer.finishedFn = (cRect, distance) => {\n    rowResizerFinished.call(this, cRect, distance);\n  };\n  colResizer.finishedFn = (cRect, distance) => {\n    colResizerFinished.call(this, cRect, distance);\n  };\n  // resizer unhide callback\n  rowResizer.unhideFn = (index) => {\n    unhideRowsOrCols.call(this, 'row', index);\n  };\n  colResizer.unhideFn = (index) => {\n    unhideRowsOrCols.call(this, 'col', index);\n  };\n  // scrollbar move callback\n  verticalScrollbar.moveFn = (distance, evt) => {\n    verticalScrollbarMove.call(this, distance, evt);\n  };\n  horizontalScrollbar.moveFn = (distance, evt) => {\n    horizontalScrollbarMove.call(this, distance, evt);\n  };\n  // editor\n  editor.change = (state, itext) => {\n    dataSetCellText.call(this, itext, state);\n  };\n  // modal validation\n  modalValidation.change = (action, ...args) => {\n    if (action === 'save') {\n      this.data.addValidation(...args);\n    } else {\n      this.data.removeValidation();\n    }\n  };\n  // contextmenu\n  contextMenu.itemClick = (type) => {\n    // console.log('type:', type);\n    if (type === 'validation') {\n      modalValidation.setValue(this.data.getSelectedValidation());\n    } else if (type === 'copy') {\n      copy.call(this);\n    } else if (type === 'cut') {\n      cut.call(this);\n    } else if (type === 'paste') {\n      paste.call(this, 'all');\n    } else if (type === 'paste-value') {\n      paste.call(this, 'text');\n    } else if (type === 'paste-format') {\n      paste.call(this, 'format');\n    } else if (type === 'hide') {\n      hideRowsOrCols.call(this);\n    } else {\n      insertDeleteRowColumn.call(this, type);\n    }\n  };\n\n  bind(window, 'resize', () => {\n    this.reload();\n  });\n\n  bind(window, 'click', (evt) => {\n    this.focusing = overlayerEl.contains(evt.target);\n  });\n\n  bind(window, 'paste', (evt) => {\n    if (!this.focusing) return;\n    paste.call(this, 'all', evt);\n    evt.preventDefault();\n  });\n\n  // for selector\n  bind(window, 'keydown', (evt) => {\n    if (!this.focusing) return;\n    const keyCode = evt.keyCode || evt.which;\n    const {\n      key, ctrlKey, shiftKey, metaKey,\n    } = evt;\n    // console.log('keydown.evt: ', keyCode);\n    if (ctrlKey || metaKey) {\n      // const { sIndexes, eIndexes } = selector;\n      // let what = 'all';\n      // if (shiftKey) what = 'text';\n      // if (altKey) what = 'format';\n      switch (keyCode) {\n        case 90:\n          // undo: ctrl + z\n          this.undo();\n          evt.preventDefault();\n          break;\n        case 89:\n          // redo: ctrl + y\n          this.redo();\n          evt.preventDefault();\n          break;\n        case 67:\n          // ctrl + c\n          copy.call(this);\n          evt.preventDefault();\n          break;\n        case 88:\n          // ctrl + x\n          cut.call(this);\n          evt.preventDefault();\n          break;\n        case 85:\n          // ctrl + u\n          toolbar.trigger('underline');\n          evt.preventDefault();\n          break;\n        case 86:\n          // ctrl + v\n          // => paste\n          // evt.preventDefault();\n          break;\n        case 37:\n          // ctrl + left\n          selectorMove.call(this, shiftKey, 'row-first');\n          evt.preventDefault();\n          break;\n        case 38:\n          // ctrl + up\n          selectorMove.call(this, shiftKey, 'col-first');\n          evt.preventDefault();\n          break;\n        case 39:\n          // ctrl + right\n          selectorMove.call(this, shiftKey, 'row-last');\n          evt.preventDefault();\n          break;\n        case 40:\n          // ctrl + down\n          selectorMove.call(this, shiftKey, 'col-last');\n          evt.preventDefault();\n          break;\n        case 32:\n          // ctrl + space, all cells in col\n          selectorSet.call(this, false, -1, this.data.selector.ci, false);\n          evt.preventDefault();\n          break;\n        case 66:\n          // ctrl + B\n          toolbar.trigger('bold');\n          break;\n        case 73:\n          // ctrl + I\n          toolbar.trigger('italic');\n          break;\n        default:\n          break;\n      }\n    } else {\n      // console.log('evt.keyCode:', evt.keyCode);\n      switch (keyCode) {\n        case 32:\n          if (shiftKey) {\n            // shift + space, all cells in row\n            selectorSet.call(this, false, this.data.selector.ri, -1, false);\n          }\n          break;\n        case 27: // esc\n          contextMenu.hide();\n          clearClipboard.call(this);\n          break;\n        case 37: // left\n          selectorMove.call(this, shiftKey, 'left');\n          evt.preventDefault();\n          break;\n        case 38: // up\n          selectorMove.call(this, shiftKey, 'up');\n          evt.preventDefault();\n          break;\n        case 39: // right\n          selectorMove.call(this, shiftKey, 'right');\n          evt.preventDefault();\n          break;\n        case 40: // down\n          selectorMove.call(this, shiftKey, 'down');\n          evt.preventDefault();\n          break;\n        case 9: // tab\n          editor.clear();\n          // shift + tab => move left\n          // tab => move right\n          selectorMove.call(this, false, shiftKey ? 'left' : 'right');\n          evt.preventDefault();\n          break;\n        case 13: // enter\n          editor.clear();\n          // shift + enter => move up\n          // enter => move down\n          selectorMove.call(this, false, shiftKey ? 'up' : 'down');\n          evt.preventDefault();\n          break;\n        case 8: // backspace\n          insertDeleteRowColumn.call(this, 'delete-cell-text');\n          evt.preventDefault();\n          break;\n        default:\n          break;\n      }\n\n      if (key === 'Delete') {\n        insertDeleteRowColumn.call(this, 'delete-cell-text');\n        evt.preventDefault();\n      } else if ((keyCode >= 65 && keyCode <= 90)\n        || (keyCode >= 48 && keyCode <= 57)\n        || (keyCode >= 96 && keyCode <= 105)\n        || evt.key === '='\n      ) {\n        dataSetCellText.call(this, evt.key, 'input');\n        editorSet.call(this);\n      } else if (keyCode === 113) {\n        // F2\n        editorSet.call(this);\n      }\n    }\n  });\n}\n\nexport default class Sheet {\n  constructor(targetEl, data) {\n    this.eventMap = createEventEmitter();\n    const { view, showToolbar, showContextmenu } = data.settings;\n    this.el = h('div', `${cssPrefix}-sheet`);\n    this.toolbar = new Toolbar(data, view.width, !showToolbar);\n    this.print = new Print(data);\n    targetEl.children(this.toolbar.el, this.el, this.print.el);\n    this.data = data;\n    // table\n    this.tableEl = h('canvas', `${cssPrefix}-table`);\n    // resizer\n    this.rowResizer = new Resizer(false, data.rows.height);\n    this.colResizer = new Resizer(true, data.cols.minWidth);\n    // scrollbar\n    this.verticalScrollbar = new Scrollbar(true);\n    this.horizontalScrollbar = new Scrollbar(false);\n    // editor\n    this.editor = new Editor(\n      formulas,\n      () => this.getTableOffset(),\n      data.rows.height,\n    );\n    // data validation\n    this.modalValidation = new ModalValidation();\n    // contextMenu\n    this.contextMenu = new ContextMenu(() => this.getRect(), !showContextmenu);\n    // selector\n    this.selector = new Selector(data);\n    this.overlayerCEl = h('div', `${cssPrefix}-overlayer-content`)\n      .children(\n        this.editor.el,\n        this.selector.el,\n      );\n    this.overlayerEl = h('div', `${cssPrefix}-overlayer`)\n      .child(this.overlayerCEl);\n    // sortFilter\n    this.sortFilter = new SortFilter();\n    // root element\n    this.el.children(\n      this.tableEl,\n      this.overlayerEl.el,\n      this.rowResizer.el,\n      this.colResizer.el,\n      this.verticalScrollbar.el,\n      this.horizontalScrollbar.el,\n      this.contextMenu.el,\n      this.modalValidation.el,\n      this.sortFilter.el,\n    );\n    // table\n    this.table = new Table(this.tableEl.el, data);\n    sheetInitEvents.call(this);\n    sheetReset.call(this);\n    // init selector [0, 0]\n    selectorSet.call(this, false, 0, 0);\n  }\n\n  on(eventName, func) {\n    this.eventMap.on(eventName, func);\n    return this;\n  }\n\n  trigger(eventName, ...args) {\n    const { eventMap } = this;\n    eventMap.fire(eventName, args);\n  }\n\n  resetData(data) {\n    // before\n    this.editor.clear();\n    // after\n    this.data = data;\n    verticalScrollbarSet.call(this);\n    horizontalScrollbarSet.call(this);\n    this.toolbar.resetData(data);\n    this.print.resetData(data);\n    this.selector.resetData(data);\n    this.table.resetData(data);\n  }\n\n  loadData(data) {\n    this.data.setData(data);\n    sheetReset.call(this);\n    return this;\n  }\n\n  // freeze rows or cols\n  freeze(ri, ci) {\n    const { data } = this;\n    data.setFreeze(ri, ci);\n    sheetReset.call(this);\n    return this;\n  }\n\n  undo() {\n    this.data.undo();\n    sheetReset.call(this);\n  }\n\n  redo() {\n    this.data.redo();\n    sheetReset.call(this);\n  }\n\n  reload() {\n    sheetReset.call(this);\n    return this;\n  }\n\n  getRect() {\n    const { data } = this;\n    return { width: data.viewWidth(), height: data.viewHeight() };\n  }\n\n  getTableOffset() {\n    const { rows, cols } = this.data;\n    const { width, height } = this.getRect();\n    return {\n      width: width - cols.indexWidth,\n      height: height - rows.height,\n      left: cols.indexWidth,\n      top: rows.height,\n    };\n  }\n}\n","import { h } from './element';\nimport { bindClickoutside, unbindClickoutside } from './event';\nimport { cssPrefix } from '../config';\nimport Icon from './icon';\nimport FormInput from './form_input';\nimport Dropdown from './dropdown';\n// Record: temp not used\n// import { xtoast } from './message';\nimport { tf } from '../locale/locale';\n\nclass DropdownMore extends Dropdown {\n  constructor(click) {\n    const icon = new Icon('ellipsis');\n    super(icon, 'auto', false, 'top-left');\n    this.contentClick = click;\n  }\n\n  reset(items) {\n    const eles = items.map((it, i) => h('div', `${cssPrefix}-item`)\n      .css('width', '150px')\n      .css('font-weight', 'normal')\n      .on('click', () => {\n        this.contentClick(i);\n        this.hide();\n      })\n      .child(it));\n    this.setContentChildren(...eles);\n  }\n\n  setTitle() {}\n}\n\nconst menuItems = [\n  { key: 'delete', title: tf('contextmenu.deleteSheet') },\n];\n\nfunction buildMenuItem(item) {\n  return h('div', `${cssPrefix}-item`)\n    .child(item.title())\n    .on('click', () => {\n      this.itemClick(item.key);\n      this.hide();\n    });\n}\n\nfunction buildMenu() {\n  return menuItems.map(it => buildMenuItem.call(this, it));\n}\n\nclass ContextMenu {\n  constructor() {\n    this.el = h('div', `${cssPrefix}-contextmenu`)\n      .css('width', '160px')\n      .children(...buildMenu.call(this))\n      .hide();\n    this.itemClick = () => {};\n  }\n\n  hide() {\n    const { el } = this;\n    el.hide();\n    unbindClickoutside(el);\n  }\n\n  setOffset(offset) {\n    const { el } = this;\n    el.offset(offset);\n    el.show();\n    bindClickoutside(el);\n  }\n}\n\nexport default class Bottombar {\n  constructor(addFunc = () => {},\n    swapFunc = () => {},\n    deleteFunc = () => {},\n    updateFunc = () => {}) {\n    this.swapFunc = swapFunc;\n    this.updateFunc = updateFunc;\n    this.dataNames = [];\n    this.activeEl = null;\n    this.deleteEl = null;\n    this.items = [];\n    this.moreEl = new DropdownMore((i) => {\n      this.clickSwap2(this.items[i]);\n    });\n    this.contextMenu = new ContextMenu();\n    this.contextMenu.itemClick = deleteFunc;\n    this.el = h('div', `${cssPrefix}-bottombar`).children(\n      this.contextMenu.el,\n      this.menuEl = h('ul', `${cssPrefix}-menu`).child(\n        h('li', '').children(\n          new Icon('add').on('click', () => {\n            addFunc();\n          }),\n          h('span', '').child(this.moreEl),\n        ),\n      ),\n    );\n  }\n\n  addItem(name, active) {\n    this.dataNames.push(name);\n    const item = h('li', active ? 'active' : '').child(name);\n    item.on('click', () => {\n      this.clickSwap2(item);\n    }).on('contextmenu', (evt) => {\n      const { offsetLeft, offsetHeight } = evt.target;\n      this.contextMenu.setOffset({ left: offsetLeft, bottom: offsetHeight + 1 });\n      this.deleteEl = item;\n    }).on('dblclick', () => {\n      const v = item.html();\n      const input = new FormInput('auto', '');\n      input.val(v);\n      input.input.on('blur', ({ target }) => {\n        const { value } = target;\n        const nindex = this.dataNames.findIndex(it => it === v);\n        this.renameItem(nindex, value);\n        /*\n        this.dataNames.splice(nindex, 1, value);\n        this.moreEl.reset(this.dataNames);\n        item.html('').child(value);\n        this.updateFunc(nindex, value);\n        */\n      });\n      item.html('').child(input.el);\n      input.focus();\n    });\n    if (active) {\n      this.clickSwap(item);\n    }\n    this.items.push(item);\n    this.menuEl.child(item);\n    this.moreEl.reset(this.dataNames);\n  }\n\n  renameItem(index, value) {\n    this.dataNames.splice(index, 1, value);\n    this.moreEl.reset(this.dataNames);\n    this.items[index].html('').child(value);\n    this.updateFunc(index, value);\n  }\n\n  clear() {\n    this.items.forEach((it) => {\n      this.menuEl.removeChild(it.el);\n    });\n    this.items = [];\n    this.dataNames = [];\n    this.moreEl.reset(this.dataNames);\n  }\n\n  deleteItem() {\n    const { activeEl, deleteEl } = this;\n    if (this.items.length > 1) {\n      const index = this.items.findIndex(it => it === deleteEl);\n      this.items.splice(index, 1);\n      this.dataNames.splice(index, 1);\n      this.menuEl.removeChild(deleteEl.el);\n      this.moreEl.reset(this.dataNames);\n      if (activeEl === deleteEl) {\n        const [f] = this.items;\n        this.activeEl = f;\n        this.activeEl.toggle();\n        return [index, 0];\n      }\n      return [index, -1];\n    }\n    return [-1];\n  }\n\n  clickSwap2(item) {\n    const index = this.items.findIndex(it => it === item);\n    this.clickSwap(item);\n    this.activeEl.toggle();\n    this.swapFunc(index);\n  }\n\n  clickSwap(item) {\n    if (this.activeEl !== null) {\n      this.activeEl.toggle();\n    }\n    this.activeEl = item;\n  }\n}\n","/* global window, document */\nimport { h } from './component/element';\nimport DataProxy from './core/data_proxy';\nimport Sheet from './component/sheet';\nimport Bottombar from './component/bottombar';\nimport { cssPrefix } from './config';\nimport { locale } from './locale/locale';\nimport './index.less';\n\n\nclass Spreadsheet {\n  constructor(selectors, options = {}) {\n    let targetEl = selectors;\n    this.options = { showBottomBar: true, ...options };\n    this.sheetIndex = 1;\n    this.datas = [];\n    if (typeof selectors === 'string') {\n      targetEl = document.querySelector(selectors);\n    }\n    this.bottombar = this.options.showBottomBar ? new Bottombar(() => {\n      const d = this.addSheet();\n      this.sheet.resetData(d);\n    }, (index) => {\n      const d = this.datas[index];\n      this.sheet.resetData(d);\n    }, () => {\n      this.deleteSheet();\n    }, (index, value) => {\n      this.datas[index].name = value;\n    }) : null;\n    this.data = this.addSheet();\n    const rootEl = h('div', `${cssPrefix}`)\n      .on('contextmenu', evt => evt.preventDefault());\n    // create canvas element\n    targetEl.appendChild(rootEl.el);\n    this.sheet = new Sheet(rootEl, this.data);\n    if (this.bottombar !== null) {\n      rootEl.child(this.bottombar.el);\n    }\n  }\n\n  addSheet(name, active = true) {\n    const n = name || `sheet${this.sheetIndex}`;\n    const d = new DataProxy(n, this.options);\n    d.change = (...args) => {\n      this.sheet.trigger('change', ...args);\n    };\n    this.datas.push(d);\n    // console.log('d:', n, d, this.datas);\n    if (this.bottombar !== null) {\n      this.bottombar.addItem(n, active);\n    }\n    this.sheetIndex += 1;\n    return d;\n  }\n\n  deleteSheet() {\n    if (this.bottombar === null) return;\n\n    const [oldIndex, nindex] = this.bottombar.deleteItem();\n    if (oldIndex >= 0) {\n      this.datas.splice(oldIndex, 1);\n      if (nindex >= 0) this.sheet.resetData(this.datas[nindex]);\n    }\n  }\n\n  loadData(data) {\n    const ds = Array.isArray(data) ? data : [data];\n    if (this.bottombar !== null) {\n      this.bottombar.clear();\n    }\n    this.datas = [];\n    if (ds.length > 0) {\n      for (let i = 0; i < ds.length; i += 1) {\n        const it = ds[i];\n        const nd = this.addSheet(it.name, i === 0);\n        nd.setData(it);\n        if (i === 0) {\n          this.sheet.resetData(nd);\n        }\n      }\n    }\n    return this;\n  }\n\n  getData() {\n    return this.datas.map(it => it.getData());\n  }\n\n  cellText(ri, ci, text, sheetIndex = 0) {\n    this.datas[sheetIndex].setCellText(ri, ci, text, 'finished');\n    return this;\n  }\n\n  cell(ri, ci, sheetIndex = 0) {\n    return this.datas[sheetIndex].getCell(ri, ci);\n  }\n\n  cellStyle(ri, ci, sheetIndex = 0) {\n    return this.datas[sheetIndex].getCellStyle(ri, ci);\n  }\n\n  reRender() {\n    this.sheet.table.render();\n    return this;\n  }\n\n  on(eventName, func) {\n    this.sheet.on(eventName, func);\n    return this;\n  }\n\n  validate() {\n    const { validations } = this.data;\n    return validations.errors.size <= 0;\n  }\n\n  change(cb) {\n    this.sheet.on('change', cb);\n    return this;\n  }\n\n  static locale(lang, message) {\n    locale(lang, message);\n  }\n}\n\nconst spreadsheet = (el, options = {}) => new Spreadsheet(el, options);\n\nif (window) {\n  window.x_spreadsheet = spreadsheet;\n  window.x_spreadsheet.locale = (lang, message) => locale(lang, message);\n}\n\nexport default Spreadsheet;\nexport {\n  spreadsheet,\n};\n"],"names":["Element","tag","className","key","value","eventNames","handler","fen","oen","eventName","evt","i","k","offsetTop","offsetLeft","offsetHeight","offsetWidth","v","el","eles","ele","arg","name","cls","flag","content","keys","h","alphabets","stringAt","index","str","cindex","last","indexAt","ret","exponet","expr2xy","src","x","y","xy2expr","expr2expr","xn","yn","condition","CellRange","sri","sci","eri","eci","w","args","ri","ci","cb","rowFilter","j","other","addRet","dsr","dsc","der","dec","ref","refs","Selector$1","Scroll","History","data","currentd","undoItems","redoItems","Clipboard","cellRange","Filter","operator","Sort","order","AutoFilter","filters","sort","it","filter","getCell","rset","fset","cell","ctext","m","cnt","r","Merges","d","cr","type","n","cbWithin","range","rn","cn","it1","merges","merge","cloneDeep","obj","mergeDeep","object","sources","source","equals","obj1","obj2","v1","v2","ai","sum","objOrAry","total","size","deleteProperty","property","oldv","rangeReduceIf","min","max","inits","initv","ifv","getv","s","rangeSum","rangeEach","arrayEquals","a1","a2","digits","a","numberCalc","al1","al2","num1","num2","helper","Rows","len","height","row","idx","style","exceptSet","what","text","srcCellRange","dstCellRange","autofill","dsri","dsci","deri","deci","drn","dcn","isAdd","dn","ii","jj","nri","nci","ncell","word","result","ncellmm","ndata","rndata","col","cells","ks","Cols","width","indexWidth","minWidth","en","$languages","$messages","translate","messages","lang","message","t","tf","locale","clearLangList","rules","returnMessage","Validator","required","Validation","mode","validator","nrefs","Validations","errors","defaultSettings","toolbarHeight","bottombarHeight","hasOwnProperty","canPaste","dst","error","srn","scn","copyPaste","rows","cutPaste","clipboard","setStyleBorder","bss","styles","cstyle","setStyleBorders","color","selector","multiple","ns","mergeIndexes","mri","mci","mrl","mcl","getCellRowByY","scrollOffsety","fsh","frset","top","getCellColByX","scrollOffsetx","cols","fsw","left","DataProxy","settings","Selector","copyText","rowData","cellText","err","txt","lines","srcRange","cri","cci","nfont","state","autoFilter","oldCell","oldText","vIndex","x1","y1","scroll","exceptRowSet","left0","top0","c","fary","oldAry","b","si","rsize","csize","freeze","fci","fri","cellStyle","history","validations","view","showToolbar","showBottomBar","exceptRows","exceptRowTH","viewRange","rlen","clen","frary","offset","rowHeight","colWidth","nstyle","bind","target","fn","unbind","unbindClickoutside","bindClickoutside","mouseMoveUp","movefunc","upfunc","calTouchDirection","spanx","spany","direction","bindTouch","move","end","startx","starty","pageX","pageY","createEventEmitter","listeners","on","callback","push","currentListener","create","fire","exec","removeListener","remove","once","execCalllback","removeAllListeners","cssPrefix","Resizer","vertical","minDistance","rect","line","moving","hoverEl","lineEl","unhideHoverEl","startEvt","cRect","distance","e","Scrollbar","scrollTop","scrollLeft","contentDistance","cssKey","selectorHeightBorderWidth","startZIndex","SelectorElement","useHideInput","of","calBRAreaOffset","l","ftwidth","ftheight","calTAreaOffset","calLAreaOffset","setBRAreaOffset","br","setTLAreaOffset","tl","setTAreaOffset","setLAreaOffset","setLClipboardOffset","setBRClipboardOffset","setTLClipboardOffset","setTClipboardOffset","setAllAreaOffset","setAllClipboardOffset","freezeHeight","freezeWidth","coffset","indexesUpdated","lastri","lastci","ern","ecn","inputMovePrev","filterItems","inputMoveNext","inputEnter","inputKeydownHandler","keyCode","Suggest","items","itemClick","title","item","input","Icon","addMonth","date","step","weekday","monthDays","year","month","cdate","startDate","datess","disabled","active","Calendar","week","cvalue","bodyEl","trs","tds","Datepicker","calendar","resetTextareaSize","inputText","textlineEl","textEl","areaOffset","txts","maxTxtSize","fontWidth","tlineWidth","maxWidth","h1","twidth","insertText","itxt","selectionEnd","ntxt","keydownEventHandler","altKey","inputEventHandler","suggest","start","setTextareaRange","position","setText","suggestItemClick","sit","eit","resetSuggestItems","dateFormat","Editor","formulas","viewFn","suggestPosition","areaEl","elOffset","sOffset","datepicker","Button","dpr","thinLineWidth","npx","px","npxLine","DrawBox","padding","bottom","right","align","drawFontLine","tx","ty","valign","blheight","blwidth","floffset","Draw","options","mtxt","box","attr","textWrap","ctx","font","strike","underline","biw","ntxts","txtWidth","textLine","txtHeight","xys","borderTop","borderRight","borderBottom","borderLeft","sx","sy","dtextcb","bgcolor","baseFonts","fontSizes","getFontSizePxByPt","pt","fontSize","infixExprToSuffixExpr","operatorStack","stack","subStrs","fnArgType","fnArgOperator","fnArgsLen","oldc","c1","ex","ey","rangelen","nc","evalSubExpr","subExpr","cellRender","fl","expr","evalSuffixExpr","srcStack","formulaMap","cellList","fc","formula","params","getCellText","_cell","baseFormulas","ary","f","formulam","formatStringRender","formatNumberRender","first","parts","baseFormats","formatm","cellPaddingWidth","tableFixedHeaderCleanStyle","tableGridStyle","tableFixedHeaderStyle","getDrawBox","rindex","yoffset","renderCell","draw","sortedRowMap","nrindex","frozen","dbox","renderAutofilter","afRange","renderContent","fw","fh","filteredTranslateFunc","exceptRowTotalHeight","renderSelectedHeaderCell","renderFixedHeaders","sumHeight","sumWidth","nty","ntx","renderFixedLeftTopCell","renderContentGrid","ch","cw","renderFreezeHighlightLine","ftw","fth","theight","Table","vr","freezeViewRange","PAGER_SIZES","PAGER_ORIENTATIONS","inches2px","inc","btnClick","pagerSizeChange","paper","ps","pagerOrientationChange","Print$1","iwidth","iheight","pages","scale","mViewRange","th","yo","wrap","canvas","rh","yof","iframe","contentWindow","idoc","menuItems","buildMenuItem","buildMenu","ContextMenu$1","isHide","hideEl","vhf","tooltip","html","elBox","Item","shortcut","tip","DropdownItem","Dropdown","showArrow","placement","children","contentEl","buildItemWithIcon","iconName","DropdownAlign","aligns","icon","naligns","Align","Valign","ToggleItem","Autofilter","Bold","Italic","Strike","Underline","themeColorPlaceHolders","themeColors","standardColors","buildTd","ColorPalette","table","DropdownColor","colorPalette","lineTypes","DropdownLineType","beforei","lineTypeEls","iti","buildTable","BorderPalette","DropdownBorder","borderPalette","Border","IconItem","Clearformat","Paintformat","TextColor","FillColor","DropdownFontSize","nfontSizes","DropdownFontsize","DropdownFont","nfonts","Font","DropdownFormat","nformats","DropdownFormula","nformulas","Format","Freeze","Merge","Redo","Undo","Print","Textwrap","moreBtns","More","DropdownMore","buildDivider","initBtns2","marginLeft","marginRight","moreResize","btns","moreEl","btns2","sumWidth2","list1","list2","Toolbar","widthFn","FontSize","Formula","format","Modal","clientHeight","clientWidth","FormInput","hint","FormSelect","getTitle","change","patterns","FormField","rule","label","labelWidth","fieldLabelWidth","ModalValidation","mf","rf","cf","minvf","maxvf","svf","vf","action","attrs","field","clsName","buildSortItem","buildFilterBody","filterbEl","filterValues","resetFilterHeader","filterhEl","values","SortFilter","sortAscEl","sortDescEl","tindex","xtoast","dimmer","throttle","func","wait","timeout","that","scrollbarMove","verticalScrollbar","horizontalScrollbar","tableOffset","selectorSet","toolbar","contextMenu","selectorMove","overlayerMousemove","offsetX","offsetY","rowResizer","colResizer","tableEl","tRect","overlayerMousescroll","deltaY","deltaX","loopValue","vFunc","moveY","moveX","horizontal","tempY","tempX","temp","overlayerTouch","verticalScrollbarSet","erth","horizontalScrollbarSet","sheetFreeze","editor","fwidth","fheight","sheetReset","overlayerEl","overlayerCEl","tOffset","vRect","clearClipboard","copy","cut","paste","msg","cdata","hideRowsOrCols","unhideRowsOrCols","autofilter","toolbarChangePaintformatPaste","overlayerMousedown","sortFilter","isAutofillEl","cellRect","editorSetOffset","sPosition","editorSet","verticalScrollbarMove","horizontalScrollbarMove","rowResizerFinished","colResizerFinished","dataSetCellText","insertDeleteRowColumn","toolbarChange","sortFilterChange","sheetInitEvents","modalValidation","o","itext","ctrlKey","shiftKey","metaKey","Sheet","targetEl","showContextmenu","ContextMenu","eventMap","click","Bottombar","addFunc","swapFunc","deleteFunc","updateFunc","nindex","activeEl","deleteEl","Spreadsheet","selectors","rootEl","oldIndex","ds","nd","sheetIndex","spreadsheet"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85]}