-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
xspreadsheet.js.map
1 lines (1 loc) · 221 KB
/
xspreadsheet.js.map
1
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/helper.js","webpack:///./src/component/element.js","webpack:///./src/formula.js","webpack:///./src/format.js","webpack:///./src/font.js","webpack:///./src/alphabet.js","webpack:///./src/cell.js","webpack:///./src/data_proxy.js","webpack:///./src/event.js","webpack:///./src/config.js","webpack:///./src/component/resizer.js","webpack:///./src/component/scrollbar.js","webpack:///./src/component/selector.js","webpack:///./src/component/suggest.js","webpack:///./src/component/editor.js","webpack:///./src/component/contextmenu.js","webpack:///./src/canvas/draw.js","webpack:///./src/component/table.js","webpack:///./src/component/dropdown.js","webpack:///./src/component/dropdown_font.js","webpack:///./src/component/dropdown_fontsize.js","webpack:///./src/component/dropdown_format.js","webpack:///./src/component/icon.js","webpack:///./src/component/dropdown_formula.js","webpack:///./src/component/color_palette.js","webpack:///./src/component/dropdown_color.js","webpack:///./src/component/dropdown_align.js","webpack:///./src/component/dropdown_linetype.js","webpack:///./src/component/border_palette.js","webpack:///./src/component/dropdown_border.js","webpack:///./src/component/toolbar.js","webpack:///./src/component/tooltip.js","webpack:///./src/component/sheet.js","webpack:///./src/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","mergeDeep","sources","forEach","source","keys","v","Array","isArray","helper","cloneDeep","obj","JSON","parse","stringify","merge","equals","obj1","obj2","length","k","v1","v2","undefined","sum","objOrAry","cb","total","size","rangeSum","min","max","getv","rangeReduceIf","inits","initv","ifv","deleteProperty","oldv","Element","[object Object]","tag","className","this","el","document","createElement","data","eventNames","handler","fen","oen","split","eventName","test","window","navigator","userAgent","addEventListener","evt","button","stopPropagation","css","offsetTop","offsetLeft","offsetHeight","offsetWidth","top","left","height","width","scrollLeft","scrollTop","getBoundingClientRect","parentNode","eles","arguments","childNodes","ele","child","arg","createTextNode","appendChild","contains","classList","add","remove","cls","toggleClass","toggle","flag","addClass","removeClass","setAttribute","getAttribute","removeAttribute","content","innerHTML","style","removeProperty","getComputedStyle","h","baseFormulas","title","render","ary","reduce","a","b","Number","Math","map","join","formula_formulas","formulaAry","formulaMap","concat","f","formatStringRender","formatNumberRender","toFixed","toString","first","parts","replace","baseFormats","type","label","formats","baseFonts","fontSizes","pt","px","fonts","alphabets","alphabet","stringAt","index","str","cindex","parseInt","indexAt","ret","charCodeAt","exponet","expr2xy","src","x","y","charAt","expr2expr","xn","yn","evalSubExpr","subExpr","cellRender","substring","sri","sci","getCellText","stack","operatorStack","subStrs","fnArgType","fnArgsLen","push","toUpperCase","c1","pop","ex","ey","sx","sy","rangelen","last","infixExprToSuffixExpr","srcStack","bottom","formula","len","params","j","evalSuffixExpr","cellText","src_cell","defaultData","freeze","merges","rowm","colm","cellmm","styles","borders","data_proxy_History","undoItems","redoItems","currentd","canUndo","canRedo","Clipboard","sIndexes","eIndexes","state","set","data_proxy_Selector","indexes","eri","eci","Scroll","addHistory","history","deleteCells","what","cell","getCell","text","si","eachMerges","inMerges","ri","ci","deleteMerges","nmerges","msri","msci","meri","meci","addMerges","addMergesByCellIndexes","rn","cn","modifyMerges","idx","copyPaste","srcIndexes","dstIndexes","autofill","dsri","dsci","deri","deci","isAdd","dn","ii","jj","nri","nci","ncell","word","result","exec","setCell","cutPaste","clipboard","ncellmm","clear","data_proxy_DataProxy","options","formulam","formulas","formatm","fontm","scroll","selector","change","view","undo","redo","getRange","setRange","getSelectedRect","row","col","x1","indexWidth","y1","getCellStyle","getCellOrNew","setCellText","getRect","unmerge","each","cstyle","format","bi","addBorder","color","bbi","bti","bri","bli","isMultiple","addStyle","nfont","font","assign","isClear","cellPosition","rowSumHeight","colSumWidth","left0","top0","fsh","freezeTotalHeight","fsw","freezeTotalWidth","scrollOffsety","rowLen","getRowHeight","scrollOffsetx","colLen","getColWidth","colTotalWidth","rowTotalHeight","cellRect","cri","cci","setSelectedIndexes","mIndexes","copy","cut","isCopy","isCut","canUnmerge","ndata","rndata","fci","getFreeze","fri","rowHeight","colWidth","rowStart","colStart","jumpMerge","cmerges","cmergeIndexes","mi","mj","it","splice","nstyle","target","fn","unbind","removeEventListener","mouseMoveUp","movefunc","upfunc","xEvtUp","calTouchDirection","spanx","spany","direction","abs","cssPrefix","devicePixelRatio","resizer_Resizer","vertical","minDistance","moving","children","hoverEl","on","mousedownHandler","lineEl","hide","cRect","finishedFn","rect","line","offset","show","startEvt","distance","e","buttons","movementX","movementY","scrollbar_Scrollbar","moveFn","contentEl","contentDistance","cssKey","selectorHeightBorderWidth","startZIndex","selector_SelectorElement","cornerEl","areaEl","clipboardEl","autofillEl","calBRAreaOffset","ftwidth","ftheight","calTAreaOffset","calLAreaOffset","setBRAreaOffset","br","setAreaOffset","setTAreaOffset","setLAreaOffset","setLClipboardOffset","setClipboardOffset","setBRClipboardOffset","setTClipboardOffset","setAllAreaOffset","tl","setAllClipboardOffset","selector_Selector","areaOffset","saIndexes","eaIndexes","freezeHeight","freezeWidth","setOffset","coffset","getClipboardRect","resetOffset","indexesUpdated","calRangeIndexes","setSelectedCurrentIndexes","moveIndexes","resetAreaOffset","calRangeIndexes2","reset","srn","ern","ecn","showAutofill","hideAutofill","showClipboard","hideClipboard","inputEnter","preventDefault","filterItems","itemIndex","click","suggest_Suggest","items","itemClick","cssRemoveKeys","filter","startsWith","item","html","input","keyCode","ctrlKey","resetTextareaSize","inputText","textlineEl","textEl","tlineWidth","maxWidth","viewFn","twidth","h1","setText","position","blur","val","setTimeout","focus","setSelectionRange","editor_Editor","suggest","start","lastIndexOf","sit","eit","indexOf","search","bindInputEvents","w","suggestPosition","elOffset","sOffset","menuItems","buildMenu","contextmenu_ContextMenu","draw_dpr","thinLineWidth","npx","DrawBox","padding","bgcolor","borderTop","borderRight","borderBottom","borderLeft","bt","bb","bl","align","fontSize","hoffset","y2","drawFontLine","tx","ty","valign","blheight","blwidth","floffset","Draw","ctx","getContext","resize","scale","clearRect","save","beginPath","restore","translate","fillRect","fillText","txt","box","attr","textWrap","strikethrough","underline","textx","textAlign","textBaseline","italic","bold","fillStyle","strokeStyle","txtWidth","measureText","ceil","innerWidth","texty","textLine","lineWidth","setLineDash","xys","moveTo","lineTo","stroke","border","topxys","rightxys","bottomxys","leftxys","fill","strokeBorders","cellPaddingWidth","tableFixedHeaderCleanStyle","getDrawBox","rindex","renderCell","draw","dbox","getFontSizePxByPt","textwrap","renderContent","scrollOffset","eachCellsInView","getStyle","setBorders","getBorder","renderSelectedHeaderCell","renderFixedHeaders","sumHeight","sumWidth","rowEach","colEach","renderFreezeHighlightLine","p1","p2","renderAll","component_table","getView","sheight","theight","swidth","dropdown_Dropdown","showArrow","placement","super","headerEl","parent","active","dropdown_font_DropdownFont","nfonts","setTitle","dropdown_fontsize_DropdownFontSize","dropdown_format_DropdownFormat","nformats","slice","icon_Icon","iconNameEl","dropdown_formula_DropdownFormula","nformulas","themeColorPlaceHolders","themeColors","standardColors","buildTd","color_palette_ColorPalette","table","dropdown_color_DropdownColor","iconName","icon","colorPalette","dropdown_align_DropdownAlign","aligns","buildItemWithIcon","setName","lineTypes","dropdown_linetype_DropdownLineType","beforei","lineTypeEls","iti","buildTable","trs","border_palette_buildTd","border_palette_BorderPalette","ddColor","ddType","dropdown_border_DropdownBorder","borderPalette","buildButton","tooltipdata","body","elBox","removeChild","tooltip","buildDivider","buildButtonWithIcon","buildIcon","toggleChange","elName","types","hasClass","toolbar_DropdownMore","moreBtns","moreResize","btns","moreEl","ddMore","btnChildren","sumWidth2","list1","list2","marginLeft","marginRight","computedStyle","toolbar_Toolbar","ddFormat","ddFont","ddFormula","ddFontSize","ddTextColor","ddFillColor","ddAlign","ddVAlign","ddBorder","undoEl","redoEl","paintformatEl","clearformatEl","fontBoldEl","fontItalicEl","underlineEl","strikethroughEl","mergeEl","textwrapEl","freezeEl","getSelectedCellStyle","getSelectedCell","disabled","seqe","freezeIsActive","selectorSet","multiple","toolbar","setEnd","selectorMove","verticalScrollbar","horizontalScrollbar","tableOffset","getTableOffset","move","verticalScrollbarSet","horizontalScrollbarSet","sheetReset","tableEl","overlayerEl","overlayerCEl","tOffset","vRect","editor","fwidth","fheight","setFreezeLengths","clearClipboard","paste","overlayerMousedown","isAutofillEl","getCellRectByXY","offsetX","offsetY","shiftKey","paintformatActive","paintformatToggle","editorSetOffset","sPosition","editorSet","dataSetCellText","setSelectedCellText","insertDeleteRowColumn","insertRow","deleteRow","insertColumn","deleteColumn","deleteCell","sheetInitEvents","rowResizer","colResizer","contextMenu","getFixedHeaderWidth","getFixedHeaderHeight","tRect","xyInSelectedRect","setPosition","detail","delta","deltaY","end","startx","starty","pageX","pageY","touches","changedTouches","bindTouch","setSelectedCellAttr","setRowHeight","setColWidth","scrolly","resetBRLAreaOffset","scrollx","resetBRTAreaOffset","itext","reload","focusing","which","altKey","trigger","sheet_Sheet","targetEl","minWidth","values","load","setFreeze","__webpack_exports__","spreadsheet","defaultOptions","documentElement","clientHeight","clientWidth","textDecoration","src_Spreadsheet","selectors","querySelector","rootEl","sheet","loadData"],"mappings":"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","file":"xspreadsheet.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\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 (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\nexport default {\n cloneDeep,\n merge: (...sources) => mergeDeep({}, ...sources),\n equals,\n sum,\n rangeSum,\n rangeReduceIf,\n deleteProperty,\n};\n","/* 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 } if (k === 'right' && evt.button !== 2) {\n return;\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 /*\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) {\n if (flag) this.addClass('active');\n else this.removeClass('active');\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 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","/**\n formula:\n key\n title\n render\n*/\nconst baseFormulas = [\n {\n key: 'SUM',\n title: '求和',\n render: ary => ary.reduce((a, b) => Number(a) + Number(b), 0),\n },\n {\n key: 'AVERAGE',\n title: '求平均值',\n render: ary => ary.reduce((a, b) => Number(a) + Number(b), 0) / ary.length,\n },\n {\n key: 'MAX',\n title: '最大值',\n render: ary => Math.max(...ary.map(v => Number(v))),\n },\n {\n key: 'MIN',\n title: '最小值',\n render: ary => Math.min(...ary.map(v => Number(v))),\n },\n {\n key: 'CONCAT',\n title: '字符串拼接',\n render: ary => ary.join(''),\n },\n];\n\nconst formulas = (formulaAry = []) => {\n const formulaMap = {};\n baseFormulas.concat(formulaAry).forEach((f) => {\n formulaMap[f.key] = f;\n });\n return formulaMap;\n};\n\nexport default {\n};\n\nexport {\n formulas,\n baseFormulas,\n};\n","const formatStringRender = v => v;\n\nconst formatNumberRender = (v) => {\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: 'Normal',\n type: 'string',\n render: formatStringRender,\n },\n {\n key: 'text',\n title: 'Plain Text',\n type: 'string',\n render: formatStringRender,\n },\n {\n key: 'number',\n title: 'Number',\n type: 'number',\n label: '1,000.12',\n render: formatNumberRender,\n },\n {\n key: 'percent',\n title: 'Percent',\n type: 'number',\n label: '10.12%',\n render: v => `${v}%`,\n },\n {\n key: 'rmb',\n title: 'RMB',\n type: 'number',\n label: '¥10.00',\n render: v => `¥${formatNumberRender(v)}`,\n },\n {\n key: 'usd',\n title: 'USD',\n type: 'number',\n label: '$10.00',\n render: v => `$${formatNumberRender(v)}`,\n },\n {\n key: 'date',\n title: 'Date',\n type: 'date',\n label: '26/09/2008',\n render: formatStringRender,\n },\n {\n key: 'time',\n title: 'Time',\n type: 'date',\n label: '15:59:00',\n render: formatStringRender,\n },\n {\n key: 'datetime',\n title: 'Date time',\n type: 'date',\n label: '26/09/2008 15:59:00',\n render: formatStringRender,\n },\n {\n key: 'duration',\n title: 'Duration',\n type: 'date',\n label: '24:01:00',\n render: formatStringRender,\n },\n];\n\nconst formats = (ary = []) => {\n const map = {};\n baseFormats.concat(ary).forEach((f) => {\n map[f.key] = f;\n });\n return map;\n};\n\nexport default {\n};\nexport {\n formats,\n baseFormats,\n};\n","const baseFonts = [\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: 'Arial', title: 'Arial' },\n { key: 'Courier New', title: 'Courier New' },\n { key: 'Verdana', title: 'Verdana' },\n];\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\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\nconst 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","const 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\nexport default {\n 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 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","import alphabet from './alphabet';\n\n// B10 => x,y\nconst 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 [alphabet.indexAt(x), parseInt(y, 10)];\n};\n\nconst expr2expr = (src, xn, yn) => {\n const [x, y] = expr2xy(src);\n return alphabet.stringAt(x + xn) + (y + yn);\n};\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 fnArgsLen = 1; // A1,A2,A3...\n for (let i = 0; i < src.length; i += 1) {\n const c = src.charAt(i);\n // console.log('c:', c);\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 {\n if (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 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(alphabet.stringAt(x) + y);\n rangelen += 1;\n }\n }\n stack.push([c1, rangelen]);\n } else if (fnArgType === 1) {\n // fn argument => A1,A2,B5\n stack.push([c1, fnArgsLen]);\n fnArgsLen = 1;\n } else {\n // console.log('c1:', c1, fnArgType, operatorStack);\n while (c1 !== '(' && operatorStack.length > 0) {\n stack.push(c1);\n c1 = operatorStack.pop();\n }\n }\n fnArgType = 0;\n } else if (c === ':') {\n fnArgType = 2;\n } else if (c === ',') {\n fnArgType = 1;\n fnArgsLen += 1;\n } else if (c === '(' && subStrs.length > 0) {\n // function\n stack.pop();\n operatorStack.push(subStrs.join(''));\n } else {\n // priority: */ > +-\n if (operatorStack.length > 0 && (c === '+' || c === '-')) {\n const last = operatorStack[operatorStack.length - 1];\n if (last === '*' || last === '/') {\n while (operatorStack.length > 0) {\n stack.push(operatorStack.pop());\n }\n }\n }\n operatorStack.push(c);\n }\n subStrs = [];\n }\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 if (subExpr[0] >= '0' && subExpr[0] <= '9') {\n return Number(subExpr);\n }\n if (subExpr[0] === '\"') {\n return subExpr.substring(1);\n }\n const [x, y] = expr2xy(subExpr);\n return 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) => {\n const stack = [];\n // console.log(':::::formulaMap:', formulaMap);\n for (let i = 0; i < srcStack.length; i += 1) {\n // console.log(':::>>>', srcStack[i]);\n if (srcStack[i] === '+') {\n const top = stack.pop();\n const bottom = stack.pop();\n stack.push(Number(bottom) + Number(top));\n } else if (srcStack[i] === '-') {\n const top = stack.pop();\n stack.push(Number(stack.pop()) - Number(top));\n } else if (srcStack[i] === '*') {\n stack.push(Number(stack.pop()) * Number(stack.pop()));\n } else if (srcStack[i] === '/') {\n const top = stack.pop();\n stack.push(Number(stack.pop()) / Number(top));\n } else if (Array.isArray(srcStack[i])) {\n const [formula, len] = srcStack[i];\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));\n } else {\n stack.push(evalSubExpr(srcStack[i], cellRender));\n }\n // console.log('stack:', stack);\n }\n return stack[0];\n};\n\nconst cellRender = (sri, sci, src, formulaMap, getCellText) => {\n // const srcExpr = alphabet.stringAt(sci) + (sri + 1);\n // console.log(':::::::::::::src:', src, srcExpr);\n if (src[0] === '=') {\n const stack = infixExprToSuffixExpr(src.substring(1));\n // if (stack.includes(srcExpr)) return '';\n // console.log('suffixExpr:', stack);\n if (stack.length <= 0) return src;\n // const cb = (x, y) => cellRender(sri, sci, getCellText(x, y - 1), formulaMap, getCellText);\n return evalSuffixExpr(stack, formulaMap, (x, y) => {\n const cellText = (sri === y - 1 && sci === x) ? 0 : getCellText(x, y - 1);\n return cellRender(sri, sci, cellText, formulaMap, getCellText);\n });\n }\n return src;\n};\n\nexport default {\n render: cellRender,\n};\nexport {\n infixExprToSuffixExpr,\n expr2xy,\n expr2expr,\n};\n","/* eslint no-new-wrappers: \"error\" */\nimport helper from './helper';\nimport { formulas as _formulas } from './formula';\nimport { formats as _formats } from './format';\nimport { fonts as _fonts } from './font';\nimport { expr2expr } from './cell';\n\n/*\nCell: {\n text: string,\n merge: [rowLen, colLen],\n format: string,\n si: style-index\n}\n*/\nconst defaultData = {\n freeze: [0, 0],\n merges: [], // [[[sri, sci], [eri, eci]],...]\n rowm: {}, // Map<int, Row>, len\n colm: {}, // Map<int, Row>, len\n cellmm: {}, // Map<int, Map<int, Cell>>\n styles: [],\n borders: [],\n};\n\nclass History {\n constructor() {\n this.undoItems = [];\n this.redoItems = [];\n }\n\n add(data) {\n this.undoItems.push(helper.cloneDeep(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(helper.cloneDeep(currentd));\n cb(undoItems.pop());\n }\n }\n\n redo(currentd, cb) {\n const { undoItems, redoItems } = this;\n if (this.canRedo()) {\n undoItems.push(helper.cloneDeep(currentd));\n cb(redoItems.pop());\n }\n }\n}\n\nclass Clipboard {\n constructor() {\n this.sIndexes = null;\n this.eIndexes = null;\n this.state = 'clear';\n }\n\n copy(sIndexes, eIndexes) {\n this.set(sIndexes, eIndexes, 'copy');\n return this;\n }\n\n cut(sIndexes, eIndexes) {\n this.set(sIndexes, eIndexes, '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 set(sIndexes, eIndexes, state) {\n this.sIndexes = sIndexes;\n this.eIndexes = eIndexes;\n this.state = state;\n return this;\n }\n\n get() {\n return [this.sIndexes, this.eIndexes];\n }\n\n isClear() {\n return this.state === 'clear';\n }\n\n clear() {\n this.sIndexes = null;\n this.sIndexes = null;\n this.state = 'clear';\n }\n}\n\nclass Selector {\n constructor() {\n this.indexes = [0, 0];\n this.sIndexes = [-1, -1];\n this.eIndexes = [-1, -1];\n }\n\n getRange() {\n return [this.sIndexes, this.eIndexes];\n }\n\n setRange(sIndexes, eIndexes) {\n this.sIndexes = sIndexes;\n this.eIndexes = eIndexes;\n }\n\n seqe() {\n const [sri, sci] = this.sIndexes;\n const [eri, eci] = this.eIndexes;\n return sri === eri && sci === eci;\n }\n\n each(cb) {\n const [sri, sci] = this.sIndexes;\n const [eri, eci] = this.eIndexes;\n for (let i = sri; i <= eri; i += 1) {\n for (let j = sci; j <= eci; j += 1) {\n cb(i, j);\n }\n }\n }\n}\n\nclass Scroll {\n constructor() {\n this.x = 0;\n this.y = 0;\n this.indexes = [0, 0];\n }\n}\n\nfunction addHistory() {\n this.history.add(this.d);\n}\n\n// what: all | text | format\nfunction deleteCells([sri, sci], [eri, eci], what = 'all') {\n const { d } = this;\n const { cellmm } = d;\n // console.log('cellmm:', cellmm, ', sri:', sri, ', sci:', sci, ', eri:', eri, ', eci:', eci);\n for (let i = sri; i <= eri; i += 1) {\n for (let j = sci; j <= eci; j += 1) {\n const cell = this.getCell(i, j);\n if (cell) {\n if (what === 'all') {\n delete cellmm[i][`${j}`];\n } else if (what === 'text') {\n if (cell.text) delete cell.text;\n } else if (what === 'format') {\n if (cell.si !== undefined) delete cell.si;\n if (cell.merge) delete cell.merge;\n }\n }\n }\n }\n /*\n Object.keys(cellmm).forEach((ri) => {\n // console.log('ri:', ri, ', sri:', sri, ', eri:', eri);\n if (ri >= sri && ri <= eri) {\n Object.keys(cellmm[ri]).forEach((ci) => {\n const cell = cellmm[ri][ci];\n // console.log('cell:', ci, cell);\n if (ci >= sci && ci <= eci) {\n if (what === 'all') {\n // console.log(':row:', cellm[ri]);\n delete cellmm[ri][`${ci}`];\n // console.log(':after.row:', cellm[ri]);\n } else if (what === 'text') {\n if (cell.text) delete cell.text;\n } else if (what === 'format') {\n if (cell.si !== undefined) delete cell.si;\n if (cell.merge) delete cell.si;\n }\n }\n });\n }\n });\n */\n}\n\nfunction getCellRowByY(y, scrollOffsety) {\n const { options } = this;\n const { row } = options;\n const fsh = this.freezeTotalHeight();\n // console.log('y:', y, ', fsh:', fsh);\n let inits = row.height;\n if (fsh + row.height < y) inits -= scrollOffsety;\n const [ri, top, height] = helper.rangeReduceIf(\n 0,\n this.rowLen(),\n inits,\n row.height,\n y,\n i => this.getRowHeight(i),\n );\n if (top <= 0) {\n return { ri: -1, top: 0, height };\n }\n return { ri: ri - 1, top, height };\n // return { ri, top: top - row.height, height };\n}\n\nfunction getCellColByX(x, scrollOffsetx) {\n const { options } = this;\n const { col } = options;\n const fsw = this.freezeTotalWidth();\n let inits = col.indexWidth;\n if (fsw + col.indexWidth < x) inits -= scrollOffsetx;\n const [ci, left, width] = helper.rangeReduceIf(\n 0,\n this.colLen(),\n inits,\n col.indexWidth,\n x,\n i => this.getColWidth(i),\n );\n if (left <= 0) {\n return { ci: -1, left: 0, width: col.indexWidth };\n }\n return { ci: ci - 1, left, width };\n // return { ci, left: left - col.indexWidth, width };\n}\n\nfunction eachMerges(cb) {\n const { merges } = this.d;\n // console.log('merges:', merges);\n if (merges.length > 0) {\n for (let i = 0; i < merges.length; i += 1) {\n cb(merges[i]);\n }\n }\n}\n\nfunction inMerges(ri, ci, cb) {\n const { merges } = this.d;\n // console.log('merges:', merges);\n if (merges.length > 0) {\n for (let i = 0; i < merges.length; i += 1) {\n // console.log('merges:', merges);\n const [[sri, sci], [eri, eci]] = merges[i];\n if (ri >= sri && ri <= eri && ci >= sci && ci <= eci) {\n cb(merges[i]);\n break;\n }\n }\n }\n}\n\nfunction deleteMerges([sri, sci], [eri, eci]) {\n const nmerges = [];\n eachMerges.call(this, (merge) => {\n const [[msri, msci], [meri, meci]] = merge;\n if (msri > eri || sri > meri || msci > eci || sci > meci) {\n nmerges.push(merge);\n }\n });\n this.d.merges = nmerges;\n}\n\nfunction addMerges(sIndexes, eIndexes) {\n deleteMerges.call(this, sIndexes, eIndexes);\n this.d.merges.push([sIndexes, eIndexes]);\n}\n\nfunction addMergesByCellIndexes(ri, ci) {\n const cell = this.getCell(ri, ci);\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 addMerges.call(this, [ri, ci], [ri + rn, ci + cn]);\n }\n}\n\nfunction moveMerges([sri, sci], [eri, eci], rn, cn) {\n eachMerges.call(this, (merge) => {\n const [[msri, msci], [meri, meci]] = merge;\n if (msri > eri || sri > meri || msci > eci || sci > meci) {\n // no intersection\n } else {\n // console.log('::::::::', merge, rn, cn);\n for (let i = 0; i <= 1; i += 1) {\n const indexes = merge[i];\n indexes[0] += rn;\n indexes[1] += cn;\n }\n }\n });\n}\n\n// type: row | col\n// i: index\nfunction modifyMerges(type, i, n) {\n const idx = type === 'row' ? 0 : 1;\n eachMerges.call(this, (merge) => {\n const [sIndexes, eIndexes] = merge;\n if (sIndexes[idx] >= i) {\n sIndexes[idx] += n;\n eIndexes[idx] += n;\n } else if (sIndexes[idx] < i && i <= eIndexes[idx]) {\n eIndexes[idx] += n;\n const cell = this.getCell(...sIndexes);\n cell.merge[idx] += n;\n }\n });\n}\n\nfunction copyPaste(srcIndexes, dstIndexes, what, autofill = false) {\n const { cellmm } = this.d;\n const [[sri, sci], [eri, eci]] = srcIndexes;\n const [[dsri, dsci], [deri, deci]] = dstIndexes;\n const rn = eri - sri + 1;\n const cn = eci - sci + 1;\n const drn = deri - dsri + 1;\n const dcn = deci - dsci + 1;\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 // delete dest merge\n if (what === 'all' || what === 'format') {\n deleteCells.call(this, [dsri, dsci], [deri, deci], what);\n deleteMerges.call(this, [dsri, dsci], [deri, deci]);\n }\n // console.log('drn:', drn, ', dcn:', dcn);\n for (let i = sri; i <= eri; i += 1) {\n if (cellmm[i]) {\n for (let j = sci; j <= eci; j += 1) {\n if (cellmm[i][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(cellmm[i][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) + 1;\n // console.log('n:', n);\n if (!isAdd) {\n n -= dn + 1;\n }\n if (text[0] === '=') {\n ncell.text = text.replace(/\\w{1,3}\\d/g, (word) => {\n let [xn, yn] = [0, 0];\n if (sri === dsri) {\n xn = n;\n } else {\n yn = n;\n }\n // console.log('xn:', xn, ', yn:', yn, expr2expr(word, xn, yn));\n return expr2expr(word, xn, yn);\n });\n } else {\n const result = /[\\\\.\\d]+$/.exec(text);\n // console.log('result:', result);\n if (result !== null) {\n const index = Number(result[0]) + n;\n ncell.text = text.substring(0, result.index) + index;\n }\n }\n }\n // console.log('ncell:', nri, nci, ncell);\n this.setCell(nri, nci, ncell, what);\n addMergesByCellIndexes.call(this, nri, nci);\n }\n }\n }\n }\n }\n }\n}\n\nfunction cutPaste(srcIndexes, dstIndexes) {\n const { clipboard, d } = this;\n const { cellmm } = d;\n const [[sri, sci], [eri, eci]] = srcIndexes;\n const [[dsri, dsci]] = dstIndexes;\n const ncellmm = {};\n Object.keys(cellmm).forEach((ri) => {\n Object.keys(cellmm[ri]).forEach((ci) => {\n let nri = parseInt(ri, 10);\n let nci = parseInt(ci, 10);\n if (ri >= sri && ri <= eri && ci >= sci && ci <= eci) {\n nri = dsri + (nri - sri);\n nci = dsci + (nci - sci);\n }\n ncellmm[nri] = ncellmm[nri] || {};\n ncellmm[nri][nci] = cellmm[ri][ci];\n });\n });\n // console.log('rn:', nsri - sri, ', cn:', nsci - sci);\n moveMerges.call(this, [sri, sci], [eri, eci], dsri - sri, dsci - sci);\n d.cellmm = ncellmm;\n clipboard.clear();\n}\n\nfunction setStyleBorder(style, [ri, ci], mode, v) {\n const s = style;\n const [[sri, sci], [eri, eci]] = this.selector.getRange();\n // console.log('mode:', mode);\n if (mode === 'all') {\n s.bbi = v;\n s.bti = v;\n s.bri = v;\n s.bli = v;\n } else if (mode === 'inside') {\n if (this.isMultiple()) {\n if (eri !== ri) s.bbi = v;\n if (sri !== ri) s.bti = v;\n if (eci !== ci) s.bri = v;\n if (sci !== ci) s.bli = v;\n }\n } else if (mode === 'horizontal') {\n if (this.isMultiple()) {\n if (eri !== ri) s.bbi = v;\n if (sri !== ri) s.bti = v;\n }\n } else if (mode === 'vertical') {\n if (this.isMultiple()) {\n if (eci !== ci) s.bri = v;\n if (sci !== ci) s.bli = v;\n }\n } else if (mode === 'outside') {\n if (sri === ri) s.bti = v;\n if (eri === ri) s.bbi = v;\n if (sci === ci) s.bli = v;\n if (eci === ci) s.bri = v;\n } else if (mode === 'left') {\n if (sci === ci) s.bli = v;\n } else if (mode === 'top') {\n if (sri === ri) s.bti = v;\n } else if (mode === 'right') {\n if (eci === ci) s.bri = v;\n } else if (mode === 'bottom') {\n if (eri === ri) s.bbi = v;\n } else if (mode === 'none') {\n if (s.bli !== undefined) delete s.bli;\n if (s.bti !== undefined) delete s.bti;\n if (s.bri !== undefined) delete s.bri;\n if (s.bbi !== undefined) delete s.bbi;\n }\n}\n\nexport default class DataProxy {\n constructor(options) {\n this.options = options;\n this.formulam = _formulas(options.formulas);\n this.formatm = _formats(options.formats);\n this.fontm = _fonts(options.fonts);\n this.d = defaultData;\n this.clipboard = new Clipboard();\n this.history = new History();\n this.scroll = new Scroll();\n this.selector = new Selector();\n this.change = () => {};\n }\n\n getView() {\n return this.options.view;\n }\n\n load(data) {\n this.d = helper.merge(defaultData, data);\n }\n\n canUndo() {\n return this.history.canUndo();\n }\n\n canRedo() {\n return this.history.canRedo();\n }\n\n undo() {\n const { history } = this;\n history.undo(this.d, (d) => {\n this.d = d;\n });\n }\n\n redo() {\n const { history } = this;\n history.redo(this.d, (d) => {\n this.d = d;\n });\n }\n\n /* for select start */\n isMultiple() {\n const [[sri, sci], [eri, eci]] = this.selector.getRange();\n if (sri === eri && sci === eci) return false;\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 false;\n }\n return true;\n }\n\n setSelectedIndexes(sIndexes, eIndexes) {\n this.selector.setRange(sIndexes, eIndexes);\n }\n\n setSelectedCurrentIndexes(indexes) {\n this.selector.indexes = indexes;\n }\n\n xyInSelectedRect(x, y) {\n const {\n left, top, width, height,\n } = this.getSelectedRect();\n const { row, col } = this.options;\n const x1 = x - col.indexWidth;\n const y1 = y - row.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 getSelectedCellStyle() {\n return this.getCellStyle(...this.selector.indexes);\n }\n\n getSelectedCellOrNew() {\n return this.getCellOrNew(...this.selector.indexes);\n }\n\n getSelectedCell() {\n return this.getCell(...this.selector.indexes);\n }\n\n setSelectedCellText(text) {\n this.setCellText(...this.selector.indexes, text);\n }\n\n getSelectedRect() {\n return this.getRect(...this.selector.getRange());\n }\n\n setSelectedCellAttr(property, value) {\n addHistory.call(this);\n const { selector } = this;\n const { styles } = this.d;\n if (property === 'merge') {\n if (value) this.merge();\n else this.unmerge();\n } else if (property === 'formula') {\n const cell = this.getCellOrNew(...selector.indexes);\n cell.text = `=${value}()`;\n } else {\n selector.each((ri, ci) => {\n const cell = this.getCellOrNew(ri, ci);\n let cstyle = {};\n if (cell.si !== undefined) {\n cstyle = helper.cloneDeep(styles[cell.si]);\n }\n if (property === 'format') {\n cell.format = value;\n } else if (property === 'border') {\n // const { mode, style, color } = value;\n const bi = this.addBorder(value.style, value.color);\n setStyleBorder.call(this, cstyle, [ri, ci], value.mode, bi);\n // console.log('border.cstyle:', value.mode, cstyle);\n cell.si = 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.si = this.addStyle(cstyle);\n } else if (property === 'strikethrough' || property === 'textwrap'\n || property === 'underline'\n || property === 'align' || property === 'valign'\n || property === 'color' || property === 'bgcolor') {\n cstyle[property] = value;\n cell.si = this.addStyle(cstyle);\n }\n });\n }\n this.change(this.d);\n }\n\n getClipboardRect() {\n const { clipboard } = this;\n if (!clipboard.isClear()) {\n const [sIndexes, eIndexes] = clipboard.get();\n return this.getRect(sIndexes, eIndexes);\n }\n return { left: -100, top: -100 };\n }\n\n getRect([sri, sci], [eri, eci]) {\n const { scroll } = this;\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, top } = this.cellPosition(sri, sci);\n const height = this.rowSumHeight(sri, eri + 1);\n const width = this.colSumWidth(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 { scroll } = 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 = this.colTotalWidth();\n }\n if (ri === -1) {\n height = this.rowTotalHeight();\n }\n if (ri >= 0 || ci >= 0) {\n inMerges.call(this, ri, ci, ([[sri, sci]]) => {\n ri = sri;\n ci = sci;\n ({\n left, top, width, height,\n } = this.cellRect(sri, sci));\n });\n }\n return {\n ri, ci, left, top, width, height,\n };\n }\n /* for selector end */\n\n calRangeIndexes2(ri, ci) {\n const { indexes, sIndexes, eIndexes } = this.selector;\n let [cri, cci] = indexes;\n let [sri, sci] = sIndexes;\n let [eri, eci] = eIndexes;\n let [nri, nci] = [ri, ci];\n if (ri < 0) nri = this.rowLen() - 1;\n if (ci < 0) nci = this.colLen() - 1;\n // row index\n if (nri <= cri) [sri, eri] = [nri, cri];\n else eri = nri;\n // col index\n if (nci <= cci) [sci, eci] = [nci, cci];\n else eci = nci;\n eachMerges.call(this, ([[msri, msci], [meri, meci]]) => {\n // console.log(msri, eri, sri, meri, msci, eci, sci, meci);\n if (msri > eri || sri > meri || msci > eci || sci > meci) {\n // console.log('没有交集');\n } else {\n if (msri < sri) sri = msri;\n if (msci < sci) sci = msci;\n if (meri > eri) eri = meri;\n if (meci > eci) eci = meci;\n }\n });\n this.setSelectedIndexes([sri, sci], [eri, eci]);\n return this.selector.getRange();\n }\n\n calRangeIndexes(ri, ci) {\n const sIndexes = [ri, ci];\n const eIndexes = [ri, ci];\n if (ri === -1) {\n sIndexes[0] = 0;\n eIndexes[0] = this.rowLen() - 1;\n }\n if (ci === -1) {\n sIndexes[1] = 0;\n eIndexes[1] = this.colLen() - 1;\n }\n let mIndexes = [sIndexes, eIndexes];\n inMerges.call(this, ri, ci, (merge) => {\n // console.log('merge:', merge);\n mIndexes = merge;\n });\n this.setSelectedIndexes(...mIndexes);\n return mIndexes;\n }\n\n copy() {\n const { sIndexes, eIndexes } = this.selector;\n this.clipboard.copy(sIndexes, eIndexes);\n }\n\n cut() {\n const { sIndexes, eIndexes } = this.selector;\n this.clipboard.cut(sIndexes, eIndexes);\n }\n\n // what: all | text | format\n paste(what = 'all') {\n // console.log('sIndexes:', sIndexes);\n const { clipboard } = this;\n if (clipboard.isClear()) return;\n\n const { sIndexes, eIndexes } = this.selector;\n addHistory.call(this);\n if (clipboard.isCopy()) {\n copyPaste.call(this, clipboard.get(), [sIndexes, eIndexes], what);\n } else if (clipboard.isCut()) {\n cutPaste.call(this, clipboard.get(), [sIndexes, eIndexes]);\n }\n this.change(this.d);\n }\n\n autofill(sIndexes, eIndexes, what) {\n addHistory.call(this);\n copyPaste.call(this, this.selector.getRange(), [sIndexes, eIndexes], what, true);\n this.change(this.d);\n }\n\n clearClipboard() {\n this.clipboard.clear();\n }\n\n /* merge methods start */\n eachMerges(cb) {\n eachMerges.call(this, cb);\n }\n\n canUnmerge() {\n const [[sri, sci], [eri, eci]] = this.selector.getRange();\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 if (!this.isMultiple()) return;\n const { sIndexes, eIndexes } = this.selector;\n const [sri, sci] = sIndexes;\n const [eri, eci] = eIndexes;\n const rn = eri - sri;\n const cn = eci - sci;\n // console.log('merge:', rn, cn);\n if (rn > 0 || cn > 0) {\n addHistory.call(this);\n const cell = this.getCellOrNew(sri, sci);\n cell.merge = [rn, cn];\n addMerges.call(this, sIndexes, eIndexes);\n // delete merge cells\n deleteCells.call(this, sIndexes, eIndexes);\n // console.log('cell:', cell, this.d);\n this.setCell(sri, sci, cell, 'all');\n this.change(this.d);\n }\n }\n\n unmerge() {\n if (!this.canUnmerge()) return;\n addHistory.call(this);\n const { sIndexes, eIndexes } = this.selector;\n const cell = this.getCell(...sIndexes);\n delete cell.merge;\n deleteMerges.call(this, sIndexes, eIndexes);\n this.change(this.d);\n }\n /* merge methods end */\n\n deleteCell(what = 'all') {\n const { sIndexes, eIndexes } = this.selector;\n addHistory.call(this);\n deleteCells.call(this, sIndexes, eIndexes, what);\n if (what === 'all' || what === 'format') {\n deleteMerges.call(this, sIndexes, eIndexes);\n }\n this.change(this.d);\n }\n\n insertRow(n = 1) {\n addHistory.call(this);\n const { cellmm, rowm } = this.d;\n const [sri] = this.selector.sIndexes;\n const ndata = {};\n Object.keys(cellmm).forEach((ri) => {\n let nri = parseInt(ri, 10);\n if (nri >= sri) {\n nri += n;\n }\n ndata[nri] = cellmm[ri];\n });\n this.d.cellmm = ndata;\n rowm.len = this.rowLen() + n;\n modifyMerges.call(this, 'row', sri, n);\n this.change(this.d);\n }\n\n deleteRow() {\n addHistory.call(this);\n const { cellmm, rowm } = this.d;\n const [[sri], [eri]] = this.selector.getRange();\n // console.log('min:', min, ',max:', max);\n const n = eri - sri + 1;\n const ndata = {};\n Object.keys(cellmm).forEach((ri) => {\n const nri = parseInt(ri, 10);\n if (nri < sri) {\n ndata[nri] = cellmm[nri];\n } else if (ri > eri) {\n ndata[nri - n] = cellmm[nri];\n }\n });\n // console.log('cellmm:', cellmm, ', ndata:', ndata);\n this.d.cellmm = ndata;\n rowm.len = this.rowLen() - n;\n modifyMerges.call(this, 'row', sri, -n);\n this.change(this.d);\n }\n\n insertColumn(n = 1) {\n addHistory.call(this);\n const { cellmm, colm } = this.d;\n const [, sci] = this.selector.sIndexes;\n Object.keys(cellmm).forEach((ri) => {\n const rndata = {};\n Object.keys(cellmm[ri]).forEach((ci) => {\n let nci = parseInt(ci, 10);\n if (nci >= sci) {\n nci += n;\n }\n rndata[nci] = cellmm[ri][ci];\n });\n cellmm[ri] = rndata;\n });\n colm.len = this.colLen() + n;\n modifyMerges.call(this, 'col', sci, n);\n this.change(this.d);\n }\n\n deleteColumn() {\n addHistory.call(this);\n const { cellmm, colm } = this.d;\n const [[, sci], [, eci]] = this.selector.getRange();\n const n = eci - sci + 1;\n Object.keys(cellmm).forEach((ri) => {\n const rndata = {};\n Object.keys(cellmm[ri]).forEach((ci) => {\n const nci = parseInt(ci, 10);\n if (nci < sci) {\n rndata[nci] = cellmm[ri][ci];\n } else if (nci > eci) {\n rndata[nci - n] = cellmm[ri][ci];\n }\n });\n cellmm[ri] = rndata;\n });\n colm.len = this.colLen() - n;\n // console.log('n:', n);\n modifyMerges.call(this, 'col', sci, -n);\n this.change(this.d);\n }\n\n scrollx(x, cb) {\n const { scroll } = this;\n const [, fci] = this.getFreeze();\n const [\n ci, left, width,\n ] = helper.rangeReduceIf(fci, this.colLen(), 0, 0, x, i => this.getColWidth(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.indexes[1] = x > 0 ? ci - fci : 0;\n scroll.x = x1;\n cb();\n }\n }\n\n scrolly(y, cb) {\n const { scroll } = this;\n const [fri] = this.getFreeze();\n const [\n ri, top, height,\n ] = helper.rangeReduceIf(fri, this.rowLen(), 0, 0, y, i => this.getRowHeight(i));\n let y1 = top;\n if (y > 0) y1 += height;\n if (scroll.y !== y1) {\n scroll.indexes[0] = y > 0 ? ri - fri : 0;\n scroll.y = y1;\n cb();\n }\n }\n\n colTotalWidth() {\n return this.colSumWidth(0, this.colLen());\n }\n\n rowTotalHeight() {\n return this.rowSumHeight(0, this.rowLen());\n }\n\n cellRect(ri, ci) {\n const { left, top } = this.cellPosition(ri, ci);\n const cell = this.getCell(ri, ci);\n let width = this.getColWidth(ci);\n let height = this.getRowHeight(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 += this.getRowHeight(ri + i);\n }\n }\n if (cn > 0) {\n for (let i = 1; i <= cn; i += 1) {\n width += this.getColWidth(ci + i);\n }\n }\n }\n }\n // console.log('data:', this.d);\n return {\n left, top, width, height, cell,\n };\n }\n\n cellPosition(ri, ci) {\n const left = this.colSumWidth(0, ci);\n const top = this.rowSumHeight(0, ri);\n return {\n left, top,\n };\n }\n\n getCell(ri, ci) {\n const { cellmm } = this.d;\n if (cellmm[ri] !== undefined && cellmm[ri][ci] !== undefined) {\n return cellmm[ri][ci];\n }\n return null;\n }\n\n getCellStyle(ri, ci) {\n const cell = this.getCell(ri, ci);\n const { styles } = this.d;\n // console.log('options:', this.opitons.style);\n return helper.merge(this.options.style, (cell && cell.si !== undefined) ? styles[cell.si] : {});\n }\n\n setCellText(ri, ci, text) {\n addHistory.call(this);\n const cell = this.getCellOrNew(ri, ci);\n cell.text = text;\n this.change(this.d);\n }\n\n // what: all | text | format\n setCell(ri, ci, cell, what = 'all') {\n const { cellmm } = this.d;\n cellmm[ri] = cellmm[ri] || {};\n if (what === 'all') {\n cellmm[ri][ci] = cell;\n } else if (what === 'text') {\n cellmm[ri][ci] = cellmm[ri][ci] || {};\n cellmm[ri][ci].text = cell.text;\n } else if (what === 'format') {\n cellmm[ri][ci] = cellmm[ri][ci] || {};\n cellmm[ri][ci].si = cell.si;\n if (cell.merge) cellmm[ri][ci].merge = cell.merge;\n }\n }\n\n getCellOrNew(ri, ci) {\n const { cellmm } = this.d;\n cellmm[ri] = cellmm[ri] || {};\n cellmm[ri][ci] = cellmm[ri][ci] || {};\n // console.log('ri:', ri, ', ci:', ci, cellmm);\n return cellmm[ri][ci];\n }\n\n getFreeze() {\n return this.d.freeze;\n }\n\n freezeIsActive() {\n const [ri, ci] = this.d.freeze;\n return ri > 0 || ci > 0;\n }\n\n setFreeze(ri, ci) {\n addHistory.call(this);\n this.d.freeze[0] = ri;\n this.d.freeze[1] = ci;\n }\n\n freezeTotalWidth() {\n return this.colSumWidth(0, this.d.freeze[1]);\n }\n\n freezeTotalHeight() {\n return this.rowSumHeight(0, this.d.freeze[0]);\n }\n\n colSumWidth(min, max) {\n return helper.rangeSum(min, max, i => this.getColWidth(i));\n }\n\n rowSumHeight(min, max) {\n return helper.rangeSum(min, max, i => this.getRowHeight(i));\n }\n\n rowEach(min, max, cb) {\n let y = 0;\n const { view } = this.options;\n // console.log('min:', min, ', max:', max, ', scroll:', scroll);\n for (let i = min; i <= max; i += 1) {\n const rowHeight = this.getRowHeight(i);\n cb(i, y, rowHeight);\n y += rowHeight;\n if (y > view.height()) break;\n }\n }\n\n colEach(min, max, cb) {\n let x = 0;\n const { view } = this.options;\n for (let i = min; i <= max; i += 1) {\n const colWidth = this.getColWidth(i);\n cb(i, x, colWidth);\n x += colWidth;\n if (x > view.width()) break;\n }\n }\n\n rowLen() {\n return this.d.rowm.len || this.options.row.len;\n }\n\n colLen() {\n return this.d.colm.len || this.options.col.len;\n }\n\n getColWidth(index) {\n const { colm } = this.d;\n const { col } = this.options;\n return colm[`${index}`] ? colm[`${index}`].width : col.width;\n }\n\n setColWidth(index, v) {\n addHistory.call(this);\n const { colm } = this.d;\n colm[`${index}`] = colm[`${index}`] || {};\n colm[`${index}`].width = v;\n this.change(this.d);\n }\n\n getRowHeight(index) {\n const { rowm } = this.d;\n const { row } = this.options;\n // console.log('rowm.index:', rowm[index], rowm[`${index}`]);\n return rowm[`${index}`] ? rowm[`${index}`].height : row.height;\n }\n\n setRowHeight(index, v) {\n addHistory.call(this);\n const { rowm } = this.d;\n rowm[`${index}`] = rowm[`${index}`] || {};\n rowm[`${index}`].height = v;\n this.change(this.d);\n }\n\n getFixedHeaderWidth() {\n return this.options.col.indexWidth;\n }\n\n getFixedHeaderHeight() {\n return this.options.row.height;\n }\n\n eachCells(cb) {\n const { cellmm } = this.d;\n // console.log('celmm:', cellmm);\n Object.keys(cellmm).forEach((ri) => {\n Object.keys(cellmm[ri]).forEach((ci) => {\n cb(this.getCell(ri, ci), parseInt(ri, 10), parseInt(ci, 10));\n });\n });\n }\n\n eachCellsInView(rowStart, rowLen, colStart, colLen, jumpMerge = true, cb) {\n const cmerges = [];\n const { view } = this.options;\n let [x, y] = [0, 0];\n for (let i = rowStart; i < rowLen; i += 1) {\n y += this.getRowHeight(i);\n x = 0;\n for (let j = colStart; j < colLen; j += 1) {\n x += this.getColWidth(j);\n if (jumpMerge) {\n const cmergeIndexes = [];\n cmerges.forEach(([mi, mj, rn, cn], index) => {\n if (mi <= i && i <= mi + rn) {\n if (j === mj) {\n j += cn + 1;\n }\n }\n if (i === mi + rn + 1) {\n cmergeIndexes.push(index);\n }\n });\n cmergeIndexes.forEach((it) => {\n cmerges.splice(it, 1);\n });\n }\n const cell = this.getCell(i, j);\n cb(cell, i, j);\n // renderCell.call(this, i, j);\n // console.log('cmerges:', cmerges);\n if (jumpMerge && cell && cell.merge) {\n const [rn, cn] = cell.merge;\n // console.log('rn:', rn, ', cn:', cn);\n cmerges.push([i, j, rn, cn]);\n j += cn;\n }\n if (x > view.width()) break;\n }\n if (y > view.height()) break;\n }\n }\n\n addBorder(style, color) {\n const { borders } = this.d;\n for (let i = 0; i < borders.length; i += 1) {\n const [s, c] = borders[i];\n if (s === style && c === color) {\n return i;\n }\n }\n borders.push([style, color]);\n return borders.length - 1;\n }\n\n addStyle(nstyle) {\n const { styles } = this.d;\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 getStyle(index) {\n return this.d.styles[index];\n }\n\n getBorder(index) {\n return this.d.borders[index];\n }\n}\n","export 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 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 if (Math.abs(spanx) > Math.abs(spany)) {\n // horizontal\n direction = spanx > 0 ? 'right' : 'left';\n } else {\n // vertical\n direction = spany > 0 ? 'down' : 'up';\n }\n cb(direction, spany, evt);\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 // console.log('spanx:', spanx, ', spany:', spany);\n calTouchDirection(spanx, spany, evt, move);\n startx = pageX;\n starty = pageY;\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","/* 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.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 }\n\n // rect : {top, left, width, height}\n // line : {width, height}\n show(rect, line) {\n const {\n moving, vertical, hoverEl, lineEl, el,\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 }\n\n hide() {\n this.el.offset({\n left: 0,\n top: 0,\n }).hide();\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 this.el.css(cssKey, `${d}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';\n\nconst selectorHeightBorderWidth = 2 * 2 - 1;\nlet startZIndex = 10;\n\nclass SelectorElement {\n constructor() {\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 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 this.areaEl.offset({\n width: width - selectorHeightBorderWidth + 0.8,\n height: height - selectorHeightBorderWidth + 0.8,\n left: left - 0.8,\n top: top - 0.8,\n }).show();\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.data = data;\n this.br = new SelectorElement();\n this.t = new SelectorElement();\n this.l = new SelectorElement();\n this.tl = new SelectorElement();\n this.br.el.show();\n this.offset = null;\n this.areaOffset = null;\n this.indexes = null;\n this.sIndexes = null;\n this.eIndexes = null;\n this.saIndexes = null;\n this.eaIndexes = 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 startZIndex += 1;\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 [sIndexes, eIndexes] = data.calRangeIndexes(ri, ci);\n if (indexesUpdated) {\n let [cri, cci] = [ri, ci];\n if (ri < 0) cri = 0;\n if (ci < 0) cci = 0;\n data.setSelectedCurrentIndexes([cri, cci]);\n this.indexes = [cri, cci];\n }\n\n this.moveIndexes = sIndexes;\n this.sIndexes = sIndexes;\n this.eIndexes = eIndexes;\n this.resetAreaOffset();\n this.el.show();\n }\n\n setEnd(ri, ci) {\n const { data } = this;\n let [sIndexes, eIndexes] = data.calRangeIndexes2(ri, ci);\n this.sIndexes = sIndexes;\n this.eIndexes = eIndexes;\n this.reset();\n }\n\n reset() {\n setAllAreaOffset.call(this, this.data.getSelectedRect());\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 [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.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.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.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.saIndexes = [eri + 1, sci];\n this.eaIndexes = [nri, eci];\n } else {\n // console.log('else:');\n this.saIndexes = null;\n this.eaIndexes = null;\n return;\n }\n if (this.saIndexes !== null) {\n // console.log(this.saIndexes, ':', this.eaIndexes);\n const offset = this.data.getRect(this.saIndexes, this.eaIndexes);\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","/* global window */\nimport { h } from './element';\nimport { bind } 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 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 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 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) {\n this.filterItems = [];\n this.items = items;\n this.el = h('div', `${cssPrefix}-suggest`).hide();\n this.itemClick = itemClick;\n this.itemIndex = 0;\n }\n\n setOffset(v) {\n this.el.cssRemoveKeys('top', 'bottom')\n .offset(v);\n }\n\n hide() {\n this.filterItems = [];\n this.itemIndex = 0;\n this.el.hide();\n }\n\n search(word) {\n let { items } = this;\n if (!/^\\s*$/.test(word)) {\n items = items.filter(it => it.key.startsWith(word.toUpperCase()));\n }\n items = items.map((it) => {\n const item = h('div', `${cssPrefix}-item`)\n .child(it.key)\n .on('click.stop', () => {\n this.itemClick(it);\n this.hide();\n });\n item.child(h('div', 'label').html(it.title || it.label));\n return item;\n });\n this.filterItems = items;\n if (items.length <= 0) {\n return;\n }\n items[0].toggle();\n this.el.html('').children(...items).show();\n }\n\n bindInputEvents(input) {\n input.on('keydown', evt => inputKeydownHandler.call(this, evt));\n bind(window, 'click', (evt) => {\n if (this.el.contains(evt.target)) return;\n this.hide();\n });\n }\n}\n","//* global window */\nimport { h } from './element';\nimport Suggest from './suggest';\nimport { cssPrefix } from '../config';\n// import { mouseMoveUp } from '../event';\n\nfunction resetTextareaSize() {\n if (!/^\\s*$/.test(this.inputText)) {\n const {\n textlineEl, textEl, areaOffset,\n } = this;\n const tlineWidth = textlineEl.offset().width + 9;\n const maxWidth = this.viewFn().width - areaOffset.left - 9;\n // console.log('tlineWidth:', tlineWidth, ':', maxWidth);\n if (tlineWidth > areaOffset.width) {\n let twidth = tlineWidth;\n if (tlineWidth > maxWidth) {\n twidth = maxWidth;\n let h1 = parseInt(tlineWidth / maxWidth, 10);\n h1 += (tlineWidth % maxWidth) > 0 ? 1 : 0;\n h1 *= this.rowHeight;\n if (h1 > areaOffset.height) {\n textEl.css('height', `${h1}px`);\n }\n }\n textEl.css('width', `${twidth}px`);\n }\n }\n}\n\nfunction inputEventHandler(evt) {\n const v = evt.target.value;\n // console.log(evt, 'v:', v);\n this.inputText = v;\n const start = v.lastIndexOf('=');\n const { suggest, textlineEl } = this;\n if (start !== -1) {\n suggest.search(v.substring(start + 1));\n } else {\n suggest.hide();\n }\n textlineEl.html(v);\n resetTextareaSize.call(this);\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 } = this;\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 const position = this.inputText.length;\n this.inputText += `)${eit}`;\n setText.call(this, this.inputText, position);\n}\n\nexport default class Editor {\n constructor(formulas, viewFn, rowHeight) {\n this.viewFn = viewFn;\n this.rowHeight = rowHeight;\n this.suggest = new Suggest(formulas, (it) => {\n suggestItemClick.call(this, it);\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 this.textlineEl = h('div', 'textline'),\n this.suggest.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 (cellText !== this.inputText) {\n this.change(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 }\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 }\n }\n\n setCell(cell) {\n this.el.show();\n this.cell = cell;\n const text = (cell && cell.text) || '';\n this.inputText = text;\n // console.log('text>>:', text);\n setText.call(this, text, text.length);\n resetTextareaSize.call(this);\n }\n}\n","/* global window */\nimport { h } from './element';\nimport { bind } from '../event';\nimport { cssPrefix } from '../config';\n\nconst menuItems = [\n { key: 'copy', title: 'Copy', label: 'Ctrl+C' },\n { key: 'cut', title: 'Cut', label: 'Ctrl+X' },\n { key: 'paste', title: 'Paste', label: 'Ctrl+V' },\n { key: 'paste-value', title: 'Paste values only', label: 'Ctrl+Shift+V' },\n { key: 'paste-format', title: 'Paste format only', label: 'Ctrl+Alt+V' },\n { key: 'divider' },\n { key: 'insert-row', title: 'Insert row' },\n { key: 'insert-column', title: 'Insert column' },\n { key: 'divider' },\n { key: 'delete-row', title: 'Delete row' },\n { key: 'delete-column', title: 'Delete column' },\n { key: 'delete-cell-text', title: 'Delete cell' },\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) {\n this.el = h('div', `${cssPrefix}-contextmenu`)\n .children(...buildMenu.call(this))\n .hide();\n this.viewFn = viewFn;\n this.itemClick = () => {};\n bind(window, 'click', (evt) => {\n // console.log('outside:::', this.el.contains(evt.target));\n if (this.el.contains(evt.target)) return;\n this.hide();\n });\n }\n\n hide() {\n this.el.hide();\n }\n\n setPosition(x, y) {\n const { el } = this;\n const { height, width } = el.show().offset();\n const view = this.viewFn();\n let top = y;\n let left = x;\n if (view.height - y <= height) {\n // -1 : firefox bug, focus contextmenu\n top -= height - 1;\n }\n if (view.width - x <= width) {\n // -1 : firefox bug, focus contextmenu\n left -= width - 1;\n }\n el.offset({ left, top });\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\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(bt, br, bb, bl) {\n if (bt) this.borderTop = bt;\n if (br) this.borderRight = br;\n if (bb) this.borderBottom = bb;\n if (bl) this.borderLeft = bl;\n }\n\n innerWidth() {\n return this.width - (this.padding * 2);\n }\n\n innerHeight() {\n return this.height - (this.padding * 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, fontSize, hoffset) {\n const { height, padding } = this;\n let { y } = this;\n if (align === 'top') {\n y += padding;\n } else if (align === 'middle') {\n const y1 = y + height / 2 - hoffset;\n const y2 = y + padding + fontSize / 2 + 1;\n if (y1 < y2) y = y2;\n else y = y1;\n } else if (align === 'bottom') {\n y += height - hoffset * 2 - padding;\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 === 'strikethrough') {\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 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 textDecoration: 'normal',\n strikethrought: false,\n font: {\n name: 'Arial',\n size: 14,\n bold: false,\n italic: false,\n }\n }\n textWrap: text wrapping\n */\n text(txt, box, attr = {}, textWrap = true) {\n const { ctx } = this;\n const {\n align, valign, font, color, strikethrough, underline,\n } = attr;\n const tx = box.textx(align);\n ctx.save();\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 txtWidth = ctx.measureText(txt).width;\n let hoffset = 0;\n if (textWrap) {\n const n = Math.ceil(txtWidth / box.innerWidth());\n hoffset = ((n - 1) * font.size) / 2;\n }\n let ty = box.texty(valign, font.size, hoffset);\n // console.log('tx: ', tx, ', ty:', ty);\n if (textWrap && txtWidth > box.innerWidth()) {\n const textLine = { len: 0, start: 0 };\n for (let i = 0; i < txt.length; i += 1) {\n if (textLine.len >= box.innerWidth()) {\n this.fillText(txt.substring(textLine.start, i), tx, ty);\n if (strikethrough) {\n drawFontLine.call(this, 'strikethrough', tx, ty, align, valign, font.size, textLine.len);\n }\n if (underline) {\n drawFontLine.call(this, 'underline', tx, ty, align, valign, font.size, textLine.len);\n }\n ty += font.size + 2;\n textLine.len = 0;\n textLine.start = i;\n }\n textLine.len += ctx.measureText(txt[i]).width;\n }\n if (textWrap && textLine.len > 0) {\n this.fillText(txt.substring(textLine.start), tx, ty);\n if (strikethrough) {\n drawFontLine.call(this, 'strikethrough', tx, ty, align, valign, font.size, textLine.len);\n }\n if (underline) {\n drawFontLine.call(this, 'underline', tx, ty, align, valign, font.size, textLine.len);\n }\n }\n } else {\n this.fillText(txt, tx, ty);\n if (strikethrough) {\n drawFontLine.call(this, 'strikethrough', 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 }\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(1) + 0.5;\n } else if (style === 'thick') {\n ctx.lineWidth = npx(2);\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 const [x, y] = xys[0];\n ctx.moveTo(npx(x) - 0.5, npx(y) - 0.5);\n for (let i = 1; i < xys.length; i += 1) {\n const [x1, y1] = xys[i];\n ctx.lineTo(npx(x1) - 0.5, npx(y1) - 0.5);\n }\n ctx.stroke();\n }\n return this;\n }\n\n strokeBorders(box) {\n const { ctx } = this;\n ctx.save();\n ctx.beginPath();\n // border\n const {\n borderTop, borderRight, borderBottom, borderLeft,\n } = box;\n if (borderTop) {\n this.border(...borderTop);\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 rect(box) {\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.strokeStyle = '#e6e6e6';\n ctx.rect(npx(x) - 0.5, npx(y) - 0.5, npx(width), npx(height));\n ctx.fill();\n ctx.stroke();\n this.strokeBorders(box);\n ctx.restore();\n }\n}\n\nexport default {};\nexport {\n Draw,\n DrawBox,\n thinLineWidth,\n npx,\n};\n","import alphabet from '../alphabet';\nimport { getFontSizePxByPt } from '../font';\nimport _cell from '../cell';\nimport {\n Draw, DrawBox, thinLineWidth, npx,\n} from '../canvas/draw';\n// gobal var\nconst cellPaddingWidth = 5;\nconst tableFixedHeaderCleanStyle = { fillStyle: '#f4f5f8' };\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(rindex, cindex) {\n const { data } = this;\n const {\n left, top, width, height,\n } = data.cellRect(rindex, cindex);\n return new DrawBox(left, top, width, height, cellPaddingWidth);\n}\n\nfunction renderCell(rindex, cindex) {\n const { draw, data } = this;\n const { cellmm } = data.d;\n const cell = data.getCell(rindex, cindex);\n\n const style = data.getCellStyle(rindex, cindex);\n // console.log('style:', style);\n const dbox = getDrawBox.call(this, rindex, cindex);\n dbox.bgcolor = style.bgcolor;\n draw.rect(dbox);\n if (cell !== null) {\n // render text\n let cellText = _cell.render(rindex, cindex, cell.text || '', data.formulam, (y, x) => (cellmm[x] && cellmm[x][y] && cellmm[x][y].text) || '');\n if (cell.format) {\n // console.log(data.formatm, '>>', cell.format);\n cellText = data.formatm[cell.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 strikethrough: style.strikethrough,\n underline: style.underline,\n }, style.textwrap);\n }\n}\n\nfunction renderCellBorder(cell, ri, ci) {\n const { draw, data } = this;\n if (cell && cell.si !== undefined) {\n // console.log('cell:', cell, ri, ci);\n const style = data.getStyle(cell.si);\n if (style) {\n const {\n bti, bri, bbi, bli,\n } = style;\n // console.log('bti:', bti);\n if (bti !== undefined || bri !== undefined\n || bbi !== undefined || bli !== undefined) {\n // console.log('::::::::::', ri, ci);\n const dbox = getDrawBox.call(this, ri, ci);\n // console.log('ri:', ri, ',ci:', ci, 'style:', style, dbox);\n dbox.setBorders(\n data.getBorder(bti),\n data.getBorder(bri),\n data.getBorder(bbi),\n data.getBorder(bli),\n );\n draw.strokeBorders(dbox);\n }\n }\n }\n}\n\nfunction renderContent(rowStart, rowLen, colStart, colLen, scrollOffset) {\n const { draw, data } = this;\n const { col, row } = data.options;\n draw.save();\n draw.translate(col.indexWidth, row.height)\n .translate(-scrollOffset.x, -scrollOffset.y);\n\n data.eachCellsInView(\n rowStart,\n rowLen,\n colStart,\n colLen,\n true,\n (cell, ri, ci) => {\n renderCell.call(this, ri, ci);\n },\n );\n // border\n data.eachCellsInView(\n rowStart,\n rowLen,\n colStart,\n colLen,\n true,\n (cell, ri, ci) => {\n renderCellBorder.call(this, cell, ri, ci);\n },\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\nfunction renderFixedHeaders(rowStart, rowLen, colStart, colLen) {\n const { draw, data } = this;\n const { col, row } = data.options;\n draw.save();\n const sumHeight = data.rowSumHeight(0, rowLen) + row.height;\n const sumWidth = data.colSumWidth(0, colLen) + col.indexWidth;\n // draw rect background\n draw.attr(tableFixedHeaderCleanStyle)\n .fillRect(0, 0, col.indexWidth, sumHeight)\n .fillRect(0, 0, sumWidth, row.height);\n\n const [[sri, sci], [eri, eci]] = data.selector.getRange();\n // console.log(data.selectIndexes);\n // draw text\n // text font, align...\n draw.attr(tableFixedHeaderStyle());\n // y-header-text\n data.rowEach(rowStart, rowLen, (i, y1, rowHeight) => {\n const y = y1 + row.height;\n // console.log('y1:', y1, ', i:', i);\n draw.line([0, y], [col.indexWidth, y]);\n if (i !== rowLen) {\n if (sri <= i && i < eri + 1) {\n renderSelectedHeaderCell.call(this, 0, y, col.indexWidth, rowHeight);\n }\n draw.fillText(i + 1, col.indexWidth / 2, y + (rowHeight / 2));\n }\n });\n draw.line([col.indexWidth, 0], [col.indexWidth, sumHeight]);\n // x-header-text\n data.colEach(colStart, colLen, (i, x1, colWidth) => {\n const x = x1 + col.indexWidth;\n // console.log('x1:', x1, ', i:', i);\n draw.line([x, 0], [x, row.height]);\n if (i !== colLen) {\n if (sci <= i && i < eci + 1) {\n renderSelectedHeaderCell.call(this, x, 0, colWidth, row.height);\n }\n draw.fillText(alphabet.stringAt(i), x + (colWidth / 2), row.height / 2);\n }\n });\n draw.line([0, row.height], [sumWidth, row.height]);\n // left-top-cell\n draw.attr({ fillStyle: '#f4f5f8' })\n .fillRect(0, 0, col.indexWidth, row.height)\n .line([col.indexWidth, 0], [col.indexWidth, row.height])\n .line([0, row.height], [col.indexWidth, row.height]);\n // context.closePath();\n draw.restore();\n}\n\n/*\nfunction renderFreezeGridAndContent0(rowLen, colLen, width, height, scrollOffset) {\n const { draw, data } = this;\n const { col, row } = data.options;\n draw.save()\n .translate(col.indexWidth, row.height)\n .translate(-scrollOffset.x, -scrollOffset.y);\n\n // draw.fillRect(0, 0, width, height);\n // draw.line([0, 0], [width, 0]);\n // draw.line([0, 0], [0, height]);\n data.rowEach(rowLen - 1, (i, y1, rowHeight) => {\n // const y = y1 + rowHeight;\n // console.log('y:', y);\n // if (y >= 0) {\n // draw.line([0, y], [width, y]);\n data.colEach(colLen - 1, (j, x) => {\n // if (x >= 0) {\n // draw.line([x, y - rowHeight], [x, y]);\n renderCell.call(this, i, j);\n // }\n });\n });\n draw.restore();\n}\n*/\n\nfunction renderFreezeHighlightLine(p1, p2, scrollOffset) {\n const { draw, data } = this;\n const { row, col } = data.options;\n draw.save()\n .translate(col.indexWidth, row.height)\n .translate(-scrollOffset.x, -scrollOffset.y)\n .attr({ strokeStyle: 'rgba(75, 137, 255, .6)' });\n draw.line(p1, p2);\n draw.restore();\n}\n\nfunction renderFreezeGridAndContent() {\n const { data } = this;\n const [fri, fci] = data.getFreeze();\n const { scroll } = data;\n const sheight = data.rowSumHeight(0, fri);\n const twidth = data.colTotalWidth();\n if (fri > 0) {\n renderContent.call(\n this,\n 0,\n fri,\n 0,\n data.colLen(),\n { x: scroll.x, y: 0 },\n );\n }\n const theight = data.rowTotalHeight();\n const swidth = data.colSumWidth(0, fci);\n if (fci) {\n renderContent.call(\n this,\n 0,\n data.rowLen(),\n 0,\n fci,\n { x: 0, y: scroll.y },\n );\n }\n renderFreezeHighlightLine.call(\n this, [0, sheight], [twidth, sheight], { x: scroll.x, y: 0 },\n );\n renderFreezeHighlightLine.call(\n this, [swidth, 0], [swidth, theight], { x: 0, y: scroll.y },\n );\n}\n\nfunction renderAll(rowStart, rowLen, colStart, colLen, scrollOffset) {\n // const { row, col, scrollOffset } = this;\n // renderContentGrid.call(this, rowLen, colLen, scrollOffset);\n renderContent.call(this, rowStart, rowLen, colStart, colLen, scrollOffset);\n renderFixedHeaders.call(this, rowStart, rowLen, colStart, colLen);\n}\n\n/** end */\nclass Table {\n constructor(el, data) {\n this.el = el;\n const view = data.getView();\n this.draw = new Draw(el, view.width(), view.height());\n this.data = data;\n }\n\n render() {\n // resize canvas\n const view = this.data.getView();\n this.draw.resize(view.width(), view.height());\n //\n this.clear();\n const { data } = this;\n const { indexes } = data.scroll;\n renderAll.call(this, indexes[0], data.rowLen(), indexes[1], data.colLen(), data.scroll);\n const [fri, fci] = data.getFreeze();\n if (fri > 0 || fci > 0) {\n renderFreezeGridAndContent.call(this);\n renderAll.call(this, 0, fri, 0, fci, { x: 0, y: 0 });\n }\n }\n\n clear() {\n this.draw.clear();\n }\n}\n\nexport default Table;\n","/* global window */\nimport { Element, h } from './element';\nimport { bind } 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 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 .children(...children)\n .css('width', width)\n .hide();\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 bind(window, 'click', (evt) => {\n if (this.el.contains(evt.target)) return;\n this.hide();\n });\n }\n\n setTitle(title) {\n this.title.html(title);\n this.hide();\n }\n\n show() {\n this.contentEl.show();\n this.parent().active();\n }\n\n hide() {\n this.parent().active(false);\n this.contentEl.hide();\n }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport { baseFonts } from '../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 Dropdown from './dropdown';\nimport { h } from './element';\nimport { fontSizes } from '../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 Dropdown from './dropdown';\nimport { h } from './element';\nimport { baseFormats } from '../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(7, 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 }\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 Dropdown from './dropdown';\nimport Icon from './icon';\nimport { h } from './element';\nimport { baseFormulas } from '../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 { 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\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 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","/* global window */\nimport { h } from './element';\nimport { bind } from '../event';\nimport tooltip from './tooltip';\nimport DropdownFont from './dropdown_font';\nimport DropdownFontSize from './dropdown_fontsize';\nimport DropdownFormat from './dropdown_format';\nimport DropdownFormula from './dropdown_formula';\nimport DropdownColor from './dropdown_color';\nimport DropdownAlign from './dropdown_align';\nimport DropdownBorder from './dropdown_border';\nimport Dropdown from './dropdown';\nimport Icon from './icon';\nimport { cssPrefix } from '../config';\n\nfunction buildIcon(name) {\n return new Icon(name);\n}\n\nfunction buildButton(tooltipdata) {\n return h('div', `${cssPrefix}-toolbar-btn`)\n .on('mouseenter', (evt) => {\n tooltip(tooltipdata, evt.target);\n })\n .attr('data-tooltip', tooltipdata);\n}\n\nfunction buildDivider() {\n return h('div', `${cssPrefix}-toolbar-divider`);\n}\n\nfunction buildButtonWithIcon(tooltipdata, iconName, change = () => {}) {\n return buildButton(tooltipdata)\n .child(buildIcon(iconName))\n .on('click', () => change());\n}\n\nfunction bindDropdownChange() {\n this.ddFormat.change = it => this.change('format', it.key);\n this.ddFont.change = it => this.change('font-name', it.key);\n this.ddFormula.change = it => this.change('formula', it.key);\n this.ddFontSize.change = it => this.change('font-size', it.pt);\n this.ddTextColor.change = it => this.change('color', it);\n this.ddFillColor.change = it => this.change('bgcolor', it);\n this.ddAlign.change = it => this.change('align', it);\n this.ddVAlign.change = it => this.change('valign', it);\n this.ddBorder.change = it => this.change('border', it);\n}\n\n\nfunction toggleChange(type) {\n let elName = type;\n const types = type.split('-');\n if (types.length > 1) {\n types.forEach((t, i) => {\n if (i === 0) elName = t;\n else elName += t[0].toUpperCase() + t.substring(1);\n });\n }\n const el = this[`${elName}El`];\n el.toggle();\n this.change(type, el.hasClass('active'));\n}\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\nfunction moreResize() {\n const {\n el, btns, moreEl, ddMore, btnChildren,\n } = this;\n const { moreBtns, contentEl } = ddMore;\n const elBox = el.box();\n\n let sumWidth = 160;\n let sumWidth2 = 12;\n const list1 = [];\n const list2 = [];\n // console.log('elBox:', elBox);\n btnChildren.forEach((it) => {\n const rect = it.box();\n sumWidth += rect.width;\n // console.log('sumWidth:', sumWidth, elBox.width);\n if (it.attr('data-tooltip') === 'More' || sumWidth < elBox.width) {\n list1.push(it);\n } else {\n // console.log('margin:', it.computedStyle());\n const { marginLeft, marginRight } = it.computedStyle();\n sumWidth2 += rect.width + parseInt(marginLeft, 10) + parseInt(marginRight, 10);\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) {\n this.data = data;\n this.change = () => {};\n const { style } = data.options;\n // console.log('data:', data);\n this.ddFormat = new DropdownFormat();\n this.ddFont = new DropdownFont();\n this.ddFormula = new DropdownFormula();\n this.ddFontSize = new DropdownFontSize();\n this.ddTextColor = new DropdownColor('text-color', style.color);\n this.ddFillColor = new DropdownColor('fill-color', style.bgcolor);\n this.ddAlign = new DropdownAlign(['left', 'center', 'right'], style.align);\n this.ddVAlign = new DropdownAlign(['top', 'middle', 'bottom'], style.valign);\n this.ddBorder = new DropdownBorder();\n this.ddMore = new DropdownMore();\n this.btnChildren = [\n this.undoEl = buildButtonWithIcon('Undo (Ctrl+Z)', 'undo', () => this.change('undo')),\n this.redoEl = buildButtonWithIcon('Redo (Ctrl+Y)', 'redo', () => this.change('redo')),\n // this.printEl = buildButtonWithIcon('Print (Ctrl+P)', 'print', () => this.change('print')),\n this.paintformatEl = buildButtonWithIcon('Paint format', 'paintformat', () => toggleChange.call(this, 'paintformat')),\n this.clearformatEl = buildButtonWithIcon('Clear format', 'clearformat', () => this.change('clearformat')),\n buildDivider(),\n buildButton('Format').child(this.ddFormat.el),\n buildDivider(),\n buildButton('Font').child(this.ddFont.el),\n buildButton('Font size').child(this.ddFontSize.el),\n buildDivider(),\n this.fontBoldEl = buildButtonWithIcon('Bold (Ctrl+B)', 'bold', () => toggleChange.call(this, 'font-bold')),\n this.fontItalicEl = buildButtonWithIcon('Italic (Ctrl+I)', 'italic', () => toggleChange.call(this, 'font-italic')),\n this.underlineEl = buildButtonWithIcon('Underline (Ctrl+U)', 'underline', () => toggleChange.call(this, 'underline')),\n this.strikethroughEl = buildButtonWithIcon('Strikethrough', 'strikethrough', () => toggleChange.call(this, 'strikethrough')),\n buildButton('Text color').child(this.ddTextColor.el),\n buildDivider(),\n buildButton('Fill color').child(this.ddFillColor.el),\n buildButton('Borders').child(this.ddBorder.el),\n this.mergeEl = buildButtonWithIcon('Merge cells', 'merge', () => toggleChange.call(this, 'merge')),\n buildDivider(),\n buildButton('Horizontal align').child(this.ddAlign.el),\n buildButton('Vertical align').child(this.ddVAlign.el),\n this.textwrapEl = buildButtonWithIcon('Text wrapping', 'textwrap', () => toggleChange.call(this, 'textwrap')),\n buildDivider(),\n // this.linkEl = buildButtonWithIcon('Insert link', 'link'),\n // this.chartEl = buildButtonWithIcon('Insert chart', 'chart'),\n // this.autofilterEl = buildButtonWithIcon('Filter', 'autofilter'),\n this.freezeEl = buildButtonWithIcon('Freeze cell', 'freeze', () => toggleChange.call(this, 'freeze')),\n buildButton('Functions').child(this.ddFormula.el),\n // buildDivider(),\n this.moreEl = buildButton('More').child(this.ddMore.el).hide(),\n ];\n this.el = h('div', `${cssPrefix}-toolbar`);\n this.btns = h('div', `${cssPrefix}-toolbar-btns`).children(...this.btnChildren);\n this.el.child(this.btns);\n bindDropdownChange.call(this);\n this.reset();\n setTimeout(() => {\n moreResize.call(this);\n }, 0);\n bind(window, 'resize', () => {\n moreResize.call(this);\n });\n }\n\n paintformatActive() {\n return this.paintformatEl.hasClass('active');\n }\n\n paintformatToggle() {\n this.paintformatEl.toggle();\n }\n\n trigger(type) {\n toggleChange.call(this, type);\n }\n\n reset() {\n const { data } = this;\n const style = data.getSelectedCellStyle();\n const cell = data.getSelectedCell();\n // console.log('canUndo:', data.canUndo());\n this.undoEl.disabled(!data.canUndo());\n this.redoEl.disabled(!data.canRedo());\n this.mergeEl.active(data.canUnmerge())\n .disabled(data.selector.seqe());\n // this.mergeEl.disabled();\n // console.log('selectedCell:', style, cell);\n const { font } = style;\n this.ddFont.setTitle(font.name);\n this.ddFontSize.setTitle(font.size);\n this.fontBoldEl.active(font.bold);\n this.fontItalicEl.active(font.italic);\n this.underlineEl.active(style.underline);\n this.strikethroughEl.active(style.strikethrough);\n this.ddTextColor.setTitle(style.color);\n this.ddFillColor.setTitle(style.bgcolor);\n this.ddAlign.setTitle(style.align);\n this.ddVAlign.setTitle(style.valign);\n this.textwrapEl.active(style.textwrap);\n // console.log('freeze is Active:', data.freezeIsActive());\n this.freezeEl.active(data.freezeIsActive());\n if (cell) {\n if (cell.format) {\n this.ddFormat.setTitle(cell.format);\n }\n }\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","/* global window */\nimport { h } from './element';\nimport { bind, mouseMoveUp, bindTouch } from '../event';\nimport Resizer from './resizer';\nimport Scrollbar from './scrollbar';\nimport Selector from './selector';\nimport Editor from './editor';\nimport ContextMenu from './contextmenu';\nimport Table from './table';\nimport Toolbar from './toolbar';\nimport { cssPrefix } from '../config';\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) {\n if (ri === -1 && ci === -1) return;\n // console.log(multiple, ', ri:', ri, ', ci:', ci);\n const {\n table, selector, toolbar,\n } = this;\n if (multiple) {\n selector.setEnd(ri, ci);\n } else {\n selector.set(ri, ci, indexesUpdated);\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 let [ri, ci] = selector.indexes;\n const [eri, eci] = selector.eIndexes;\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 < data.colLen() - 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 < data.rowLen() - 1) ri += 1;\n } else if (direction === 'row-first') {\n ci = 0;\n } else if (direction === 'row-last') {\n ci = data.colLen() - 1;\n } else if (direction === 'col-first') {\n ri = 0;\n } else if (direction === 'col-last') {\n ri = data.rowLen() - 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 if (offsetX > data.getFixedHeaderWidth()\n && offsetY > data.getFixedHeaderHeight()) {\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 = data.getFixedHeaderWidth();\n rowResizer.show(cRect, {\n width: tRect.width,\n });\n } else {\n rowResizer.hide();\n }\n if (cRect.ri === -1 && cRect.ci >= 0) {\n cRect.height = data.getFixedHeaderHeight();\n colResizer.show(cRect, {\n height: tRect.height,\n });\n } else {\n colResizer.hide();\n }\n}\n\nfunction overlayerMousescroll(evt) {\n const { verticalScrollbar, data } = this;\n const { top } = verticalScrollbar.scroll();\n // console.log('evt:::', evt.wheelDelta, evt.detail * 40);\n let delta = evt.deltaY;\n if (evt.detail) delta = evt.detail * 40;\n if (delta > 0) {\n // up\n const ri = data.scroll.indexes[0] + 1;\n if (ri < data.rowLen()) {\n verticalScrollbar.move({ top: top + data.getRowHeight(ri) - 1 });\n }\n } else {\n // down\n const ri = data.scroll.indexes[0] - 1;\n if (ri >= 0) {\n verticalScrollbar.move({ top: ri === 0 ? 0 : top - data.getRowHeight(ri) });\n }\n }\n}\n\nfunction overlayerTouch(direction, distance) {\n const { verticalScrollbar, horizontalScrollbar } = this;\n const { top } = verticalScrollbar.scroll();\n const { left } = horizontalScrollbar.scroll();\n // console.log('direction:', direction, ', distance:', distance);\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 verticalScrollbar.set(height, data.rowTotalHeight());\n}\n\nfunction horizontalScrollbarSet() {\n const { data, horizontalScrollbar } = this;\n const { width } = this.getTableOffset();\n if (data) {\n horizontalScrollbar.set(width, data.colTotalWidth());\n }\n}\n\nfunction sheetFreeze() {\n const {\n selector, data, editor,\n } = this;\n const [ri, ci] = data.getFreeze();\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 } = this;\n const tOffset = this.getTableOffset();\n const vRect = this.getRect();\n tableEl.attr(vRect);\n overlayerEl.offset(vRect);\n overlayerCEl.offset(tOffset);\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 selector.showClipboard();\n}\n\nfunction cut() {\n const { data, selector } = this;\n data.cut();\n selector.showClipboard();\n}\n\nfunction paste(what) {\n this.data.paste(what);\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,\n } = this;\n const isAutofillEl = evt.target.className === `${cssPrefix}-selector-corner`;\n let { ri, ci } = data.getCellRectByXY(evt.offsetX, evt.offsetY);\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);\n }\n }, () => {\n if (isAutofillEl) {\n data.autofill(selector.saIndexes, selector.eaIndexes, 'all');\n table.render();\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 editorSetOffset.call(this);\n editor.setCell(data.getSelectedCell());\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.setRowHeight(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.setColWidth(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) {\n const { data, table } = this;\n // const [ri, ci] = selector.indexes;\n data.setSelectedCellText(text);\n table.render();\n}\n\nfunction insertDeleteRowColumn(type) {\n const { data } = this;\n if (type === 'insert-row') {\n data.insertRow();\n } else if (type === 'delete-row') {\n data.deleteRow();\n } else if (type === 'insert-column') {\n data.insertColumn();\n } else if (type === 'delete-column') {\n data.deleteColumn();\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 }\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 // print\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 === 'filter') {\n // filter\n } else if (type === 'freeze') {\n if (value) {\n this.freeze(...data.selector.indexes);\n } else {\n this.freeze(0, 0);\n }\n } else {\n data.setSelectedCellAttr(type, value);\n if (type === 'formula') {\n editorSet.call(this);\n }\n sheetReset.call(this);\n }\n}\n\nfunction sheetInitEvents() {\n const {\n overlayerEl,\n rowResizer,\n colResizer,\n verticalScrollbar,\n horizontalScrollbar,\n editor,\n contextMenu,\n data,\n toolbar,\n } = this;\n // overlayer\n overlayerEl\n .on('mousemove', (evt) => {\n overlayerMousemove.call(this, evt);\n }).on('mousedown', (evt) => {\n if (evt.buttons === 2) {\n if (data.xyInSelectedRect(evt.offsetX, evt.offsetY)) {\n contextMenu.setPosition(evt.offsetX, evt.offsetY);\n } else {\n contextMenu.hide();\n }\n } else if (evt.detail === 2) {\n editorSet.call(this);\n } else {\n editor.clear();\n overlayerMousedown.call(this, evt);\n }\n }).on('mousewheel.stop', (evt) => {\n overlayerMousescroll.call(this, evt);\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 // 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 // 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 = (itext) => {\n dataSetCellText.call(this, itext);\n toolbar.reset();\n };\n // contextmenu\n contextMenu.itemClick = (type) => {\n // console.log('type:', type);\n 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 {\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 // 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, altKey,\n } = evt;\n // console.log('keydown.evt: ', keyCode);\n if (ctrlKey) {\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.call(this, what);\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, data.selector.indexes[1], false);\n evt.preventDefault();\n break;\n case 66:\n // ctrl + B\n toolbar.trigger('font-bold');\n break;\n case 73:\n // ctrl + I\n toolbar.trigger('font-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, data.selector.indexes[0], -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);\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.el = h('div', `${cssPrefix}-sheet`);\n this.toolbar = new Toolbar(data);\n targetEl.children(this.toolbar.el, this.el);\n // console.log('elRect:', elRect);\n const {\n row, col, view,\n } = data.options;\n this.view = view;\n this.col = col;\n this.row = row;\n this.data = data;\n // table\n this.tableEl = h('canvas', `${cssPrefix}-table`);\n // resizer\n this.rowResizer = new Resizer(false, row.height);\n this.colResizer = new Resizer(true, col.minWidth);\n // scrollbar\n this.verticalScrollbar = new Scrollbar(true);\n this.horizontalScrollbar = new Scrollbar(false);\n // editor\n this.editor = new Editor(\n Object.values(data.formulam),\n () => this.getTableOffset(),\n row.height,\n );\n // contextMenu\n this.contextMenu = new ContextMenu(() => this.getTableOffset());\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 // 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 );\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 loadData(data) {\n this.data.load(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 height = this.view.height();\n const width = this.view.width();\n return { width, height };\n }\n\n getTableOffset() {\n const { row, col } = this;\n const { width, height } = this.getRect();\n return {\n width: width - col.indexWidth,\n height: height - row.height,\n left: col.indexWidth,\n top: row.height,\n };\n }\n}\n","/* global window, document */\nimport helper from './helper';\nimport { h } from './component/element';\nimport DataProxy from './data_proxy';\nimport Sheet from './component/sheet';\nimport { cssPrefix } from './config';\n// import Bottombar from './component/bottombar';\nimport './index.less';\n\nconst defaultOptions = {\n view: {\n height: () => document.documentElement.clientHeight - 41,\n width: () => document.documentElement.clientWidth,\n },\n formats: [],\n fonts: [],\n formula: [],\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 textDecoration: 'normal',\n strikethrough: false,\n underline: false,\n color: '#0a0a0a',\n font: {\n name: 'Helvetica',\n size: 10,\n bold: false,\n italic: false,\n },\n },\n};\n\n/*\nRow: {\n height: number\n}\nCol: {\n width: number\n}\nCell: {\n text: string\n merge: [rowLen, colLen]\n format: string,\n si: style-index\n}\n*/\n\n/*\n el: element in document\n options: like #defaultOptions\n data: {\n freeze: [0, 0],\n rowm: {}, // Map<int, Row>\n colm: {}, // Map<int, Col>\n cellmm: {}, // Map<int, Map<int, Cell>>\n }\n*/\n\nclass Spreadsheet {\n constructor(selectors, options = {}) {\n let targetEl = selectors;\n if (typeof selectors === 'string') {\n targetEl = document.querySelector(selectors);\n }\n this.options = helper.merge(defaultOptions, options);\n this.data = new DataProxy(this.options);\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 }\n\n loadData(data) {\n this.sheet.loadData(data);\n return this;\n }\n\n change(cb) {\n this.data.change = cb;\n return this;\n }\n}\n\nconst spreadsheet = (el, options = {}) => new Spreadsheet(el, options);\n\nif (window) {\n window.x = window.x || {};\n window.x.spreadsheet = spreadsheet;\n}\n\nexport default Spreadsheet;\nexport {\n spreadsheet,\n};\n"],"sourceRoot":""}