@eternalheart/react-file-preview 1.3.7 → 1.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +1 -1
  2. package/lib/FilePreviewContent.d.ts +12 -1
  3. package/lib/FilePreviewContent.d.ts.map +1 -1
  4. package/lib/FilePreviewEmbed.d.ts +9 -1
  5. package/lib/FilePreviewEmbed.d.ts.map +1 -1
  6. package/lib/FilePreviewModal.d.ts +9 -1
  7. package/lib/FilePreviewModal.d.ts.map +1 -1
  8. package/lib/RequestContext.d.ts +24 -0
  9. package/lib/RequestContext.d.ts.map +1 -0
  10. package/lib/chunks/{index-BIg3vHQf.mjs → index-B-H9HQiI.mjs} +35 -35
  11. package/lib/chunks/index-B-H9HQiI.mjs.map +1 -0
  12. package/lib/chunks/{index-DOMMMe9f.mjs → index-BGeyzo6u.mjs} +2 -2
  13. package/lib/chunks/{index-DOMMMe9f.mjs.map → index-BGeyzo6u.mjs.map} +1 -1
  14. package/lib/chunks/{index-zDEwNk3h.mjs → index-BNUiNUWa.mjs} +35 -35
  15. package/lib/chunks/index-BNUiNUWa.mjs.map +1 -0
  16. package/lib/chunks/{index-DTH1IvOG.mjs → index-BSD3w5eG.mjs} +72 -72
  17. package/lib/chunks/index-BSD3w5eG.mjs.map +1 -0
  18. package/lib/chunks/{index-D_8IHm6o.mjs → index-BcBe6KW7.mjs} +11 -10
  19. package/lib/chunks/index-BcBe6KW7.mjs.map +1 -0
  20. package/lib/chunks/index-BdYkTSTt.mjs +51 -0
  21. package/lib/chunks/index-BdYkTSTt.mjs.map +1 -0
  22. package/lib/chunks/{index-BWbuffRN.mjs → index-BqEuP_8r.mjs} +8 -8
  23. package/lib/chunks/index-BqEuP_8r.mjs.map +1 -0
  24. package/lib/chunks/{index-LNXbKjrI.mjs → index-Bv93wiEK.mjs} +812 -681
  25. package/lib/chunks/index-Bv93wiEK.mjs.map +1 -0
  26. package/lib/chunks/{index-xTq9b3vw.mjs → index-CKirCT35.mjs} +13 -13
  27. package/lib/chunks/index-CKirCT35.mjs.map +1 -0
  28. package/lib/chunks/{index-BOEtlHD3.mjs → index-CgV8T0G5.mjs} +53 -53
  29. package/lib/chunks/index-CgV8T0G5.mjs.map +1 -0
  30. package/lib/chunks/{index-DinKO2op.mjs → index-D8GtNeDn.mjs} +2 -2
  31. package/lib/chunks/{index-DinKO2op.mjs.map → index-D8GtNeDn.mjs.map} +1 -1
  32. package/lib/chunks/{index-CQABwGVP.mjs → index-DGuiWJr7.mjs} +18 -18
  33. package/lib/chunks/index-DGuiWJr7.mjs.map +1 -0
  34. package/lib/chunks/{index-Yp36heK8.mjs → index-DV5Jd7Qe.mjs} +31 -31
  35. package/lib/chunks/index-DV5Jd7Qe.mjs.map +1 -0
  36. package/lib/chunks/{index-qxvk-6P6.mjs → index-DdOEWhrk.mjs} +33 -33
  37. package/lib/chunks/index-DdOEWhrk.mjs.map +1 -0
  38. package/lib/chunks/{index-w0tt7Myw.mjs → index-DmepcY31.mjs} +2 -2
  39. package/lib/chunks/{index-w0tt7Myw.mjs.map → index-DmepcY31.mjs.map} +1 -1
  40. package/lib/chunks/index-U3w45GW8.mjs +299 -0
  41. package/lib/chunks/index-U3w45GW8.mjs.map +1 -0
  42. package/lib/chunks/{index-BsSx9pGx.mjs → index-r3q2xCCI.mjs} +37 -36
  43. package/lib/chunks/index-r3q2xCCI.mjs.map +1 -0
  44. package/lib/chunks/{index-BEolw_uv.mjs → index-zEVVgWCH.mjs} +2 -2
  45. package/lib/chunks/{index-BEolw_uv.mjs.map → index-zEVVgWCH.mjs.map} +1 -1
  46. package/lib/chunks/{useShikiHighlight-DtWg9b8y.mjs → useShikiHighlight-DzEAK0S7.mjs} +7 -7
  47. package/lib/chunks/{useShikiHighlight-DtWg9b8y.mjs.map → useShikiHighlight-DzEAK0S7.mjs.map} +1 -1
  48. package/lib/index.cjs +20 -33
  49. package/lib/index.cjs.map +1 -1
  50. package/lib/index.css +1 -1
  51. package/lib/index.mjs +7 -7
  52. package/lib/renderers/Csv/index.d.ts.map +1 -1
  53. package/lib/renderers/Docx/index.d.ts.map +1 -1
  54. package/lib/renderers/Epub/index.d.ts.map +1 -1
  55. package/lib/renderers/Json/index.d.ts.map +1 -1
  56. package/lib/renderers/Markdown/index.d.ts.map +1 -1
  57. package/lib/renderers/Mobi/index.d.ts.map +1 -1
  58. package/lib/renderers/Msg/index.d.ts.map +1 -1
  59. package/lib/renderers/Pptx/index.d.ts.map +1 -1
  60. package/lib/renderers/Subtitle/index.d.ts.map +1 -1
  61. package/lib/renderers/Text/index.d.ts.map +1 -1
  62. package/lib/renderers/Xlsx/index.d.ts.map +1 -1
  63. package/lib/renderers/Xml/index.d.ts.map +1 -1
  64. package/lib/renderers/Zip/index.d.ts.map +1 -1
  65. package/lib/types.d.ts +1 -1
  66. package/lib/types.d.ts.map +1 -1
  67. package/package.json +4 -4
  68. package/lib/chunks/index--zZy1XpK.mjs +0 -299
  69. package/lib/chunks/index--zZy1XpK.mjs.map +0 -1
  70. package/lib/chunks/index-B5tBeF0g.mjs +0 -51
  71. package/lib/chunks/index-B5tBeF0g.mjs.map +0 -1
  72. package/lib/chunks/index-BIg3vHQf.mjs.map +0 -1
  73. package/lib/chunks/index-BOEtlHD3.mjs.map +0 -1
  74. package/lib/chunks/index-BWbuffRN.mjs.map +0 -1
  75. package/lib/chunks/index-BsSx9pGx.mjs.map +0 -1
  76. package/lib/chunks/index-CQABwGVP.mjs.map +0 -1
  77. package/lib/chunks/index-DTH1IvOG.mjs.map +0 -1
  78. package/lib/chunks/index-D_8IHm6o.mjs.map +0 -1
  79. package/lib/chunks/index-LNXbKjrI.mjs.map +0 -1
  80. package/lib/chunks/index-Yp36heK8.mjs.map +0 -1
  81. package/lib/chunks/index-qxvk-6P6.mjs.map +0 -1
  82. package/lib/chunks/index-xTq9b3vw.mjs.map +0 -1
  83. package/lib/chunks/index-zDEwNk3h.mjs.map +0 -1
  84. package/lib/chunks/xspreadsheet-CyBXARuf.mjs +0 -5215
  85. package/lib/chunks/xspreadsheet-CyBXARuf.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"xspreadsheet-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]}