xspreadsheet.js.map
361.3 KB
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/component/element.js","webpack:///./src/core/alphabet.js","webpack:///./src/core/cell_range.js","webpack:///./src/core/selector.js","webpack:///./src/core/scroll.js","webpack:///./src/core/history.js","webpack:///./src/core/clipboard.js","webpack:///./src/core/auto_filter.js","webpack:///./src/core/merge.js","webpack:///./src/core/helper.js","webpack:///./src/core/row.js","webpack:///./src/core/col.js","webpack:///./src/locale/locale.js","webpack:///./src/locale/en.js","webpack:///./src/core/validator.js","webpack:///./src/core/validation.js","webpack:///./src/core/data_proxy.js","webpack:///./src/component/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/icon.js","webpack:///./src/component/calendar.js","webpack:///./src/component/datepicker.js","webpack:///./src/component/editor.js","webpack:///./src/component/contextmenu.js","webpack:///./src/core/font.js","webpack:///./src/core/cell.js","webpack:///./src/core/formula.js","webpack:///./src/core/format.js","webpack:///./src/canvas/draw.js","webpack:///./src/component/table.js","webpack:///./src/component/toolbar/item.js","webpack:///./src/component/tooltip.js","webpack:///./src/component/toolbar/dropdown_item.js","webpack:///./src/component/dropdown.js","webpack:///./src/component/dropdown_align.js","webpack:///./src/component/toolbar/align.js","webpack:///./src/component/toolbar/valign.js","webpack:///./src/component/toolbar/toggle_item.js","webpack:///./src/component/toolbar/autofilter.js","webpack:///./src/component/toolbar/bold.js","webpack:///./src/component/toolbar/italic.js","webpack:///./src/component/toolbar/strike.js","webpack:///./src/component/toolbar/underline.js","webpack:///./src/component/color_palette.js","webpack:///./src/component/dropdown_color.js","webpack:///./src/component/dropdown_linetype.js","webpack:///./src/component/border_palette.js","webpack:///./src/component/dropdown_border.js","webpack:///./src/component/toolbar/border.js","webpack:///./src/component/toolbar/icon_item.js","webpack:///./src/component/toolbar/clearformat.js","webpack:///./src/component/toolbar/paintformat.js","webpack:///./src/component/toolbar/text_color.js","webpack:///./src/component/toolbar/fill_color.js","webpack:///./src/component/dropdown_fontsize.js","webpack:///./src/component/toolbar/font_size.js","webpack:///./src/component/dropdown_font.js","webpack:///./src/component/toolbar/font.js","webpack:///./src/component/dropdown_format.js","webpack:///./src/component/toolbar/format.js","webpack:///./src/component/dropdown_formula.js","webpack:///./src/component/toolbar/formula.js","webpack:///./src/component/toolbar/freeze.js","webpack:///./src/component/toolbar/merge.js","webpack:///./src/component/toolbar/redo.js","webpack:///./src/component/toolbar/undo.js","webpack:///./src/component/toolbar/textwrap.js","webpack:///./src/component/toolbar/more.js","webpack:///./src/component/toolbar/index.js","webpack:///./src/component/modal.js","webpack:///./src/component/form_input.js","webpack:///./src/component/form_select.js","webpack:///./src/component/form_field.js","webpack:///./src/component/button.js","webpack:///./src/component/modal_validation.js","webpack:///./src/component/sort_filter.js","webpack:///./src/component/message.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","Element","tag","className","arguments","length","undefined","_classCallCheck","this","el","document","createElement","data","eventNames","handler","_eventNames$split2","_toArray","split","fen","oen","slice","eventName","test","window","navigator","userAgent","addEventListener","evt","k","button","stopPropagation","_this","keys","forEach","css","concat","_this$el","top","offsetTop","left","offsetLeft","height","offsetHeight","width","offsetWidth","v","scrollLeft","scrollTop","getBoundingClientRect","parentNode","_this2","_len","eles","Array","_key","childNodes","ele","child","arg","createTextNode","appendChild","contains","classList","add","remove","cls","toggleClass","toggle","flag","addClass","removeClass","active","_this3","setAttribute","getAttribute","removeAttribute","content","innerHTML","_this4","_len2","_key2","style","removeProperty","_this5","getComputedStyle","h","alphabets","stringAt","index","str","cindex","parseInt","last","indexAt","ret","charCodeAt","exponet","Math","pow","expr2xy","src","x","y","charAt","xy2expr","expr2expr","xn","yn","_expr2xy2","_slicedToArray","CellRange","sri","sci","eri","eci","w","cell_range_classCallCheck","ref","refs","_expr2xy4","cell_range_slicedToArray","_expr2xy6","ri","ci","args","_expr2xy","cb","rowFilter","j","other","addRet","push","dsr","dsc","der","dec","multiple","Selector","selector_classCallCheck","range","size","Scroll","scroll_classCallCheck","History","history_classCallCheck","undoItems","redoItems","JSON","stringify","currentd","canUndo","parse","pop","canRedo","Clipboard","clipboard_classCallCheck","state","cellRange","Filter","operator","auto_filter_classCallCheck","includes","Sort","order","AutoFilter","filters","sort","_ref","fitlers","map","it","getData","filter","getFilter","set","hrange","getCell","rset","Set","fset","_this$range","cell","ctext","text","_this$range2","cnt","valueOf","Merges","merge_classCallCheck","_","cr","within","intersects","union","deleteWithin","type","cbWithin","rn","cn","it1","merges","merge","toString","mergeDeep","sources","source","isArray","helper","cloneDeep","obj","apply","equals","obj1","obj2","v1","v2","ai","arrayEquals","a1","a2","sum","objOrAry","total","rangeEach","min","max","rangeSum","getv","rangeReduceIf","inits","initv","ifv","deleteProperty","oldv","Rows","len","row_classCallCheck","row","getOrNew","exceptSet","has","getHeight","sumHeight","cells","what","getCellOrNew","srcCellRange","dstCellRange","autofill","dsri","dsci","deri","deci","_srcCellRange$size","_srcCellRange$size2","row_slicedToArray","_dstCellRange$size","_dstCellRange$size2","drn","dcn","isAdd","dn","ii","jj","nri","nci","ncell","replace","word","result","exec","Number","substring","setCell","ncellmm","each","eachCells","ndata","rndata","deleteCell","entries","_ref2","_ref3","_ref4","_ref5","assign","Cols","indexWidth","minWidth","col_classCallCheck","col","getWidth","sumWidth","$lang","$messages","en","toolbar","undo","redo","paintformat","clearformat","format","fontName","fontSize","fontBold","fontItalic","underline","strike","color","bgcolor","border","align","valign","textwrap","freeze","autofilter","formula","more","contextmenu","copy","cut","paste","pasteValue","pasteFormat","insertRow","insertColumn","deleteRow","deleteColumn","deleteCellText","validation","normal","number","percent","rmb","usd","eur","date","time","datetime","duration","average","_if","and","or","required","notMatch","between","notBetween","notIn","equal","notEqual","lessThan","lessThanEqual","greaterThan","greaterThanEqual","error","pasteForMergedCell","calendar","weeks","months","cancel","save","ok","desc","asc","empty","dataValidation","criteria","modeType","column","list","phone","email","be","nbe","lt","lte","gt","gte","eq","neq","translate","messages","message","spreadsheet","tf","locale","lang","rules","returnMessage","Validator","validator_classCallCheck","Date","values","parseValue","_value","validator_slicedToArray","_value2","Validation","validator","validation_classCallCheck","nrefs","difference","Validations","errors","Map","_v$validator$validate2","validation_slicedToArray","validate","getByValidator","addRef","defaultSettings","view","documentElement","clientHeight","clientWidth","showGrid","showToolbar","showContextmenu","font","bold","italic","canPaste","dst","clone","_src$size2","data_proxy_slicedToArray","srn","scn","_dst$size2","copyPaste","rows","deleteCells","_cell$merge","cutPaste","clipboard","move","clear","setStyleBorder","bss","styles","cstyle","addStyle","DataProxy","settings","data_proxy_classCallCheck","cols","validations","hyperlinks","comments","selector","scroll","history","autoFilter","change","exceptRowSet","sortedRowMap","unsortedRowMap","changeData","_this$selector","_this$selector2","setData","_this6","isClear","isCopy","isCut","_this7","srcRange","_selector$range2","cri","cci","getFirstIncludes","_this8","unmerge","_selector$range","isSignleSelected","mergeIndexes","_merges$ii","mri","mci","splice","_cell$merge2","mrl","mcl","bottom","right","getCellMerge","_selector$size2","nfont","oldCell","oldText","setCellText","vIndex","findIndex","_this$selector3","_this$getSelectedRect","getSelectedRect","x1","y1","getRect","left0","top0","fsh","freezeTotalHeight","fsw","freezeTotalWidth","_getCellRowByY$call","scrollOffsety","frset","_getCellColByX$call","scrollOffsetx","_helper$rangeReduceIf2","totalWidth","totalHeight","_this$cellRect","cellRect","_this$selector$range","_cell$merge3","_this$selector$range2","_cell$merge4","_this9","_selector$size4","_selector$range3","_this10","_selector$range4","_this11","addFilter","setSort","resetAutoFilter","_this12","_autoFilter$filteredR","filteredRows","fary","from","oldAry","a","b","_this13","_this14","_this14$selector$rang","si","insert","shift","_this15","_selector$range5","_selector$range$size2","rsize","csize","fci","_helper$rangeReduceIf4","fri","_helper$rangeReduceIf6","_cell$merge5","cellStyle","defaultStyle","_this$selector4","getCellStyleOrDefault","_this$freeze","_this16","_this17","setHeight","_this18","setWidth","_this$settings","_this$freeze2","exceptRows","exceptRowTH","viewHeight","viewWidth","viewRange","filterIntersects","frary","_toConsumableArray","offset","rowHeight","colWidth","nstyle","_this19","target","fn","unbind","removeEventListener","unbindClickoutside","xclickoutside","body","bindClickoutside","detail","hide","mouseMoveUp","movefunc","upfunc","xEvtUp","calTouchDirection","spanx","spany","abs","cssPrefix","devicePixelRatio","Resizer","vertical","minDistance","resizer_classCallCheck","moving","children","hoverEl","on","mousedownHandler","lineEl","cRect","finishedFn","rect","line","show","startEvt","distance","e","buttons","movementX","movementY","Scrollbar","scrollbar_classCallCheck","moveFn","contentEl","_evt$target","contentDistance","cssKey","startZIndex","SelectorElement","component_selector_classCallCheck","cornerEl","areaEl","clipboardEl","autofillEl","calBRAreaOffset","ftwidth","ftheight","calTAreaOffset","calLAreaOffset","setBRAreaOffset","br","setAreaOffset","setTAreaOffset","setLAreaOffset","setLClipboardOffset","setClipboardOffset","setBRClipboardOffset","setTClipboardOffset","setAllAreaOffset","tl","setAllClipboardOffset","areaOffset","indexes","arange","lastri","lastci","freezeHeight","freezeWidth","setOffset","coffset","getClipboardRect","resetOffset","indexesUpdated","calSelectedRangeByStart","setIndexes","moveIndexes","resetAreaOffset","calSelectedRangeByEnd","_this$data$selector$r","setEnd","ern","ecn","showAutofill","hideAutofill","showClipboard","hideClipboard","inputEnter","preventDefault","filterItems","itemIndex","click","Suggest","items","itemClick","suggest_classCallCheck","cssRemoveKeys","parent","_el$html","startsWith","toUpperCase","title","item","label","html","suggest_toConsumableArray","input","keyCode","ctrlKey","Icon","icon_classCallCheck","_possibleConstructorReturn","_getPrototypeOf","iconNameEl","addMonth","step","setMonth","getMonth","weekday","setDate","getDay","Calendar","_h","calendar_classCallCheck","cvalue","headerLeftEl","bodyEl","buildAll","prev","next","calendar_toConsumableArray","week","selectChange","buildHeaderLeft","buildBody","getFullYear","_bodyEl$html","trs","year","month","cdate","startDate","datess","disabled","getDate","monthDays","_h2","tds","Datepicker","datepicker_classCallCheck","setValue","RegExp","resetTextareaSize","inputText","textlineEl","textEl","tlineWidth","maxWidth","viewFn","twidth","h1","setText","position","blur","val","setTimeout","focus","setSelectionRange","Editor","formulas","editor_classCallCheck","suggest","start","lastIndexOf","sit","eit","indexOf","datepicker","dateFormat","search","bindInputEvents","setItems","suggestPosition","elOffset","sOffset","menuItems","buildMenu","ContextMenu","isHide","contextmenu_classCallCheck","contextmenu_toConsumableArray","_el$show$offset","baseFonts","fontSizes","pt","px","infixExprToSuffixExpr","operatorStack","stack","subStrs","fnArgType","fnArgOperator","fnArgsLen","join","c1","cell_slicedToArray","ex","ey","sx","sy","rangelen","nc","evalSubExpr","subExpr","cellRender","evalSuffixExpr","srcStack","formulaMap","cellList","expr","fc","Fn","Function","_expr","params","render","reverse","core_cell","getCellText","baseFormulas","ary","reduce","formula_toConsumableArray","formula_slicedToArray","f","every","some","formulam","formatStringRender","formatNumberRender","_v1$split2","format_toArray","toFixed","first","parts","format_toConsumableArray","baseFormats","formatm","dpr","thinLineWidth","npx","npxLine","DrawBox","padding","draw_classCallCheck","borderTop","borderRight","borderBottom","borderLeft","hoffset","drawFontLine","tx","ty","blheight","blwidth","floffset","Draw","ctx","getContext","resize","scale","clearRect","options","beginPath","restore","fillRect","fillText","txt","box","attr","textWrap","textx","textAlign","textBaseline","fillStyle","strokeStyle","txtWidth","measureText","ceil","innerWidth","texty","textLine","lineWidth","setLineDash","draw_slicedToArray","moveTo","lineTo","stroke","draw_toConsumableArray","topxys","rightxys","bottomxys","leftxys","closePath","fill","dtextcb","clip","cellPaddingWidth","tableFixedHeaderCleanStyle","tableGridStyle","getDrawBox","rindex","_data$cellRect","renderCell","draw","nrindex","dbox","setBorders","strokeBorders","cellText","_cell","getCellTextOrDefault","getFontSizePxByPt","getError","renderContent","fw","fh","exceptRowTotalHeight","filteredTranslateFunc","eachMergesInView","afRange","dropdown","renderSelectedHeaderCell","renderFixedHeaders","nty","ntx","_data$selector$range","rowEach","colEach","renderContentGrid","ch","cw","Table","table_classCallCheck","_data$scroll","_data$freeze","table_slicedToArray","vr","freezeViewRange","ftw","fth","theight","Item","shortcut","item_classCallCheck","tip","element","_target$getBoundingCl","elBox","removeChild","tooltip","DropdownItem","dd","getValue","_get","dropdown_item_getPrototypeOf","setTitle","Dropdown","showArrow","placement","dropdown_classCallCheck","dropdown_possibleConstructorReturn","dropdown_getPrototypeOf","headerEl","DropdownAlign","aligns","_getPrototypeOf2","dropdown_align_classCallCheck","icon","naligns","iconName","dropdown_align_possibleConstructorReturn","dropdown_align_getPrototypeOf","dropdown_align_toConsumableArray","setName","Align","align_classCallCheck","align_possibleConstructorReturn","align_getPrototypeOf","Valign","valign_classCallCheck","valign_possibleConstructorReturn","valign_getPrototypeOf","ToggleItem","toggle_item_get","toggle_item_getPrototypeOf","hasClass","Autofilter","autofilter_classCallCheck","autofilter_possibleConstructorReturn","autofilter_getPrototypeOf","Bold","bold_classCallCheck","bold_possibleConstructorReturn","bold_getPrototypeOf","Italic","italic_classCallCheck","italic_possibleConstructorReturn","italic_getPrototypeOf","Strike","strike_classCallCheck","strike_possibleConstructorReturn","strike_getPrototypeOf","Underline","underline_classCallCheck","underline_possibleConstructorReturn","underline_getPrototypeOf","themeColorPlaceHolders","themeColors","standardColors","buildTd","ColorPalette","_h4","color_palette_classCallCheck","table","color_palette_toConsumableArray","_h3","DropdownColor","dropdown_color_classCallCheck","colorPalette","dropdown_color_possibleConstructorReturn","dropdown_color_getPrototypeOf","lineTypes","DropdownLineType","dropdown_linetype_classCallCheck","beforei","lineTypeEls","iti","dropdown_linetype_possibleConstructorReturn","dropdown_linetype_getPrototypeOf","dropdown_linetype_toConsumableArray","buildTable","BorderPalette","border_palette_classCallCheck","ddColor","ddType","border_palette_slicedToArray","border_palette_toConsumableArray","DropdownBorder","dropdown_border_classCallCheck","borderPalette","dropdown_border_possibleConstructorReturn","dropdown_border_getPrototypeOf","Border","border_classCallCheck","border_possibleConstructorReturn","border_getPrototypeOf","IconItem","icon_item_get","icon_item_getPrototypeOf","Clearformat","clearformat_classCallCheck","clearformat_possibleConstructorReturn","clearformat_getPrototypeOf","Paintformat","paintformat_classCallCheck","paintformat_possibleConstructorReturn","paintformat_getPrototypeOf","TextColor","text_color_classCallCheck","text_color_possibleConstructorReturn","text_color_getPrototypeOf","FillColor","fill_color_classCallCheck","fill_color_possibleConstructorReturn","fill_color_getPrototypeOf","DropdownFontSize","dropdown_fontsize_classCallCheck","nfontSizes","dropdown_fontsize_possibleConstructorReturn","dropdown_fontsize_getPrototypeOf","dropdown_fontsize_toConsumableArray","Format","font_size_classCallCheck","font_size_possibleConstructorReturn","font_size_getPrototypeOf","DropdownFontsize","DropdownFont","dropdown_font_classCallCheck","nfonts","dropdown_font_possibleConstructorReturn","dropdown_font_getPrototypeOf","dropdown_font_toConsumableArray","Font","font_classCallCheck","font_possibleConstructorReturn","font_getPrototypeOf","DropdownFormat","dropdown_format_classCallCheck","nformats","dropdown_format_possibleConstructorReturn","dropdown_format_getPrototypeOf","dropdown_format_toConsumableArray","format_classCallCheck","format_possibleConstructorReturn","format_getPrototypeOf","DropdownFormula","dropdown_formula_classCallCheck","nformulas","dropdown_formula_possibleConstructorReturn","dropdown_formula_getPrototypeOf","dropdown_formula_toConsumableArray","formula_classCallCheck","formula_possibleConstructorReturn","formula_getPrototypeOf","Freeze","freeze_classCallCheck","freeze_possibleConstructorReturn","freeze_getPrototypeOf","Merge","toolbar_merge_classCallCheck","merge_possibleConstructorReturn","merge_getPrototypeOf","Redo","redo_classCallCheck","redo_possibleConstructorReturn","redo_getPrototypeOf","Undo","undo_classCallCheck","undo_possibleConstructorReturn","undo_getPrototypeOf","Textwrap","textwrap_classCallCheck","textwrap_possibleConstructorReturn","textwrap_getPrototypeOf","DropdownMore","more_classCallCheck","moreBtns","more_possibleConstructorReturn","more_getPrototypeOf","More","buildDivider","moreResize","_btns$html","_moreBtns$html","btns","moreEl","btns2","_moreEl$dd","widthFn","sumWidth2","list1","list2","toolbar_slicedToArray","Toolbar","toolbar_classCallCheck","undoEl","redoEl","paintformatEl","clearformatEl","formatEl","fontEl","fontSizeEl","FontSize","boldEl","italicEl","underlineEl","strikeEl","textColorEl","fillColorEl","borderEl","mergeEl","alignEl","valignEl","textwrapEl","freezeEl","autofilterEl","formulaEl","Formula","reset","_el$computedStyle","computedStyle","marginLeft","marginRight","_it$computedStyle","getSelectedCellStyle","getSelectedCell","setState","canUnmerge","canAutofilter","freezeIsActive","Modal","modal_classCallCheck","modal_toConsumableArray","dimmer","_this$el$show$box","_document$documentEle","xkeydownEsc","FormInput","hint","form_input_classCallCheck","vchange","FormSelect","getTitle","form_select_classCallCheck","itemEl","patterns","FormField","rule","labelWidth","form_field_classCallCheck","pattern","Button","button_classCallCheck","button_possibleConstructorReturn","button_getPrototypeOf","fieldLabelWidth","ModalValidation","modal_validation_classCallCheck","mf","rf","cf","criteriaSelected","of","criteriaOperatorSelected","minvf","maxvf","svf","vf","modal_validation_possibleConstructorReturn","modal_validation_getPrototypeOf","btnClick","action","attrs","field","isShow","clsName","buildSortItem","resetFilterHeader","filterhEl","filterValues","checked","SortFilter","sort_filter_classCallCheck","filterbEl","filterClick","sortAscEl","sortDescEl","sortDesc","tindex","xtoast","_el$box","selectorSet","selectorMove","direction","_selector$indexes","sheet_slicedToArray","_selector$moveIndexes","verticalScrollbar","horizontalScrollbar","_data$getSelectedRect","tableOffset","getTableOffset","verticalScrollbarSet","erth","horizontalScrollbarSet","sheetReset","tableEl","overlayerEl","overlayerCEl","tOffset","vRect","editor","fwidth","fheight","setFreezeLengths","clearClipboard","msg","overlayerMousedown","sortFilter","offsetX","offsetY","isAutofillEl","getCellRectByXY","getSort","shiftKey","_data$getCellRectByXY","paintformatActive","paintformatToggle","editorSetOffset","sPosition","editorSet","getSelectedValidator","dataSetCellText","setSelectedCellText","insertDeleteRowColumn","toolbarChange","_data$selector","setSelectedCellAttr","sheetInitEvents","end","startx","starty","rowResizer","colResizer","contextMenu","modalValidation","tRect","xyInSelectedRect","setPosition","delta","deltaY","_evt$touches$","touches","pageX","pageY","_evt$changedTouches$","changedTouches","_evt$changedTouches$2","setAutoFilter","scrolly","resetBRLAreaOffset","scrollx","resetBRTAreaOffset","itext","addValidation","removeValidation","getSelectedValidation","reload","focusing","which","altKey","metaKey","trigger","Sheet","targetEl","sheet_classCallCheck","_data$settings","setFreeze","_this$data","_this$getRect","Spreadsheet","selectors","src_classCallCheck","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","/* global document */\n/* global window */\nclass Element {\n constructor(tag, className = '') {\n if (typeof tag === 'string') {\n this.el = document.createElement(tag);\n this.el.className = className;\n } else {\n this.el = tag;\n }\n this.data = {};\n }\n\n data(key, value) {\n if (value !== undefined) {\n this.data[key] = value;\n return this;\n }\n return this.data[key];\n }\n\n on(eventNames, handler) {\n const [fen, ...oen] = eventNames.split('.');\n let eventName = fen;\n if (eventName === 'mousewheel' && /Firefox/i.test(window.navigator.userAgent)) {\n eventName = 'DOMMouseScroll';\n }\n this.el.addEventListener(eventName, (evt) => {\n handler(evt);\n for (let i = 0; i < oen.length; i += 1) {\n const k = oen[i];\n if (k === 'left' && evt.button !== 0) {\n return;\n }\n if (k === 'right' && evt.button !== 2) {\n return;\n }\n if (k === 'stop') {\n evt.stopPropagation();\n }\n }\n });\n return this;\n }\n\n offset(value) {\n if (value !== undefined) {\n Object.keys(value).forEach((k) => {\n this.css(k, `${value[k]}px`);\n });\n return this;\n }\n const {\n offsetTop, offsetLeft, offsetHeight, offsetWidth,\n } = this.el;\n return {\n top: offsetTop,\n left: offsetLeft,\n height: offsetHeight,\n width: offsetWidth,\n };\n }\n\n scroll(v) {\n const { el } = this;\n if (v !== undefined) {\n if (v.left !== undefined) {\n el.scrollLeft = v.left;\n }\n if (v.top !== undefined) {\n el.scrollTop = v.top;\n }\n }\n return { left: el.scrollLeft, top: el.scrollTop };\n }\n\n box() {\n return this.el.getBoundingClientRect();\n }\n\n parent() {\n return new Element(this.el.parentNode);\n }\n\n children(...eles) {\n if (arguments.length === 0) {\n return this.el.childNodes;\n }\n eles.forEach(ele => this.child(ele));\n return this;\n }\n\n /*\n first() {\n return this.el.firstChild;\n }\n\n last() {\n return this.el.lastChild;\n }\n\n remove(ele) {\n return this.el.removeChild(ele);\n }\n\n prepend(ele) {\n const { el } = this;\n if (el.children.length > 0) {\n el.insertBefore(ele, el.firstChild);\n } else {\n el.appendChild(ele);\n }\n return this;\n }\n\n prev() {\n return this.el.previousSibling;\n }\n\n next() {\n return this.el.nextSibling;\n }\n */\n\n child(arg) {\n let ele = arg;\n if (typeof arg === 'string') {\n ele = document.createTextNode(arg);\n } else if (arg instanceof Element) {\n ele = arg.el;\n }\n this.el.appendChild(ele);\n return this;\n }\n\n contains(ele) {\n return this.el.contains(ele);\n }\n\n className(v) {\n if (v !== undefined) {\n this.el.className = v;\n return this;\n }\n return this.el.className;\n }\n\n addClass(name) {\n this.el.classList.add(name);\n return this;\n }\n\n hasClass(name) {\n return this.el.classList.contains(name);\n }\n\n removeClass(name) {\n this.el.classList.remove(name);\n return this;\n }\n\n toggle(cls = 'active') {\n return this.toggleClass(cls);\n }\n\n toggleClass(name) {\n return this.el.classList.toggle(name);\n }\n\n active(flag = true, cls = 'active') {\n if (flag) this.addClass(cls);\n else this.removeClass(cls);\n return this;\n }\n\n checked(flag = true) {\n this.active(flag, 'checked');\n return this;\n }\n\n disabled(flag = true) {\n if (flag) this.addClass('disabled');\n else this.removeClass('disabled');\n return this;\n }\n\n // key, value\n // key\n // {k, v}...\n attr(key, value) {\n if (value !== undefined) {\n this.el.setAttribute(key, value);\n } else {\n if (typeof key === 'string') {\n return this.el.getAttribute(key);\n }\n Object.keys(key).forEach((k) => {\n this.el.setAttribute(k, key[k]);\n });\n }\n return this;\n }\n\n removeAttr(key) {\n this.el.removeAttribute(key);\n return this;\n }\n\n html(content) {\n if (content !== undefined) {\n this.el.innerHTML = content;\n return this;\n }\n return this.el.innerHTML;\n }\n\n val(v) {\n if (v !== undefined) {\n this.el.value = v;\n return this;\n }\n return this.el.value;\n }\n\n 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","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 function stringAt(index) {\n let str = '';\n let cindex = index;\n while (cindex >= alphabets.length) {\n cindex /= alphabets.length;\n cindex -= 1;\n str += alphabets[parseInt(cindex, 10) % alphabets.length];\n }\n const last = index % alphabets.length;\n str += alphabets[last];\n return str;\n}\n\nexport function indexAt(str) {\n let ret = 0;\n for (let i = 0; i < str.length - 1; i += 1) {\n const cindex = str.charCodeAt(i) - 65;\n const exponet = str.length - 1 - i;\n ret += (alphabets.length ** exponet) + (alphabets.length * cindex);\n }\n ret += str.charCodeAt(str.length - 1) - 65;\n return ret;\n}\n\n// B10 => x,y\nexport function expr2xy(src) {\n let x = '';\n let y = '';\n for (let i = 0; i < src.length; i += 1) {\n if (src.charAt(i) >= '0' && src.charAt(i) <= '9') {\n y += src.charAt(i);\n } else {\n x += src.charAt(i);\n }\n }\n return [indexAt(x), parseInt(y, 10) - 1];\n}\n\n// x,y => B10\nexport function xy2expr(x, y) {\n return `${stringAt(x)}${y + 1}`;\n}\n\nexport function expr2expr(src, xn, yn) {\n const [x, y] = expr2xy(src);\n return xy2expr(x + xn, y + yn);\n}\n\nexport default {\n stringAt,\n indexAt,\n expr2xy,\n xy2expr,\n expr2expr,\n};\n","import { xy2expr, expr2xy } from './alphabet';\n\nclass CellRange {\n constructor(sri, sci, eri, eci, w = 0, h = 0) {\n this.sri = sri;\n this.sci = sci;\n this.eri = eri;\n this.eci = eci;\n this.w = w;\n this.h = h;\n }\n\n set(sri, sci, eri, eci) {\n this.sri = sri;\n this.sci = sci;\n this.eri = eri;\n this.eci = eci;\n }\n\n multiple() {\n return this.eri - this.sri > 0 || this.eci - this.sci > 0;\n }\n\n // cell-index: ri, ci\n // cell-ref: A10\n includes(...args) {\n let [ri, ci] = [0, 0];\n if (args.length === 1) {\n [ci, ri] = expr2xy(args[0]);\n } else if (args.length === 2) {\n [ri, ci] = args;\n }\n const {\n sri, sci, eri, eci,\n } = this;\n return sri <= ri && ri <= eri && sci <= ci && ci <= eci;\n }\n\n each(cb, rowFilter = () => true) {\n const {\n sri, sci, eri, eci,\n } = this;\n for (let i = sri; i <= eri; i += 1) {\n if (rowFilter(i)) {\n for (let j = sci; j <= eci; j += 1) {\n cb(i, j);\n }\n }\n }\n }\n\n contains(other) {\n return this.sri <= other.sri\n && this.sci <= other.sci\n && this.eri >= other.eri\n && this.eci >= other.eci;\n }\n\n // within\n within(other) {\n return this.sri >= other.sri\n && this.sci >= other.sci\n && this.eri <= other.eri\n && this.eci <= other.eci;\n }\n\n // disjoint\n disjoint(other) {\n return this.sri > other.eri\n || this.sci > other.eci\n || other.sri > this.eri\n || other.sci > this.eci;\n }\n\n // intersects\n intersects(other) {\n return this.sri <= other.eri\n && this.sci <= other.eci\n && other.sri <= this.eri\n && other.sci <= this.eci;\n }\n\n // union\n union(other) {\n const {\n sri, sci, eri, eci,\n } = this;\n return new CellRange(\n other.sri < sri ? other.sri : sri,\n other.sci < sci ? other.sci : sci,\n other.eri > eri ? other.eri : eri,\n other.eci > eci ? other.eci : eci,\n );\n }\n\n // intersection\n // intersection(other) {}\n\n // Returns Array<CellRange> that represents that part of this that does not intersect with other\n // difference\n difference(other) {\n const ret = [];\n const addRet = (sri, sci, eri, eci) => {\n ret.push(new CellRange(sri, sci, eri, eci));\n };\n const {\n sri, sci, eri, eci,\n } = this;\n const dsr = other.sri - sri;\n const dsc = other.sci - sci;\n const der = eri - other.eri;\n const dec = eci - other.eci;\n if (dsr > 0) {\n addRet(sri, sci, other.sri - 1, eci);\n if (der > 0) {\n addRet(other.eri + 1, sci, eri, eci);\n if (dsc > 0) {\n addRet(other.sri, sci, other.eri, other.sci - 1);\n }\n if (dec > 0) {\n addRet(other.sri, other.eci + 1, other.eri, eci);\n }\n } else {\n if (dsc > 0) {\n addRet(other.sri, sci, eri, other.sci - 1);\n }\n if (dec > 0) {\n addRet(other.sri, other.eci + 1, eri, eci);\n }\n }\n } else if (der > 0) {\n addRet(other.eri + 1, sci, eri, eci);\n if (dsc > 0) {\n addRet(sri, sci, other.eri, other.sci - 1);\n }\n if (dec > 0) {\n addRet(sri, other.eci + 1, other.eri, eci);\n }\n }\n if (dsc > 0) {\n addRet(sri, sci, eri, other.sci - 1);\n if (dec > 0) {\n addRet(sri, other.eri + 1, eri, eci);\n if (dsr > 0) {\n addRet(sri, other.sci, other.sri - 1, other.eci);\n }\n if (der > 0) {\n addRet(other.sri + 1, other.sci, eri, other.eci);\n }\n } else {\n if (dsr > 0) {\n addRet(sri, other.sci, other.sri - 1, eci);\n }\n if (der > 0) {\n addRet(other.sri + 1, other.sci, eri, eci);\n }\n }\n } else if (dec > 0) {\n addRet(eri, other.eci + 1, eri, eci);\n if (dsr > 0) {\n addRet(sri, sci, other.sri - 1, other.eci);\n }\n if (der > 0) {\n addRet(other.eri + 1, sci, eri, other.eci);\n }\n }\n return ret;\n }\n\n size() {\n return [\n this.eri - this.sri + 1,\n this.eci - this.sci + 1,\n ];\n }\n\n toString() {\n const {\n sri, sci, eri, eci,\n } = this;\n let ref = xy2expr(sci, sri);\n if (this.multiple()) {\n ref = `${ref}:${xy2expr(eci, eri)}`;\n }\n return ref;\n }\n\n clone() {\n const {\n sri, sci, eri, eci, w, h,\n } = this;\n return new CellRange(sri, sci, eri, eci, w, h);\n }\n\n /*\n toJSON() {\n return this.toString();\n }\n */\n\n equals(other) {\n return this.eri === other.eri\n && this.eci === other.eci\n && this.sri === other.sri\n && this.sci === other.sci;\n }\n\n static valueOf(ref) {\n // B1:B8, B1 => 1 x 1 cell range\n const refs = ref.split(':');\n const [sci, sri] = expr2xy(refs[0]);\n let [eri, eci] = [sri, sci];\n if (refs.length > 1) {\n [eci, eri] = expr2xy(refs[1]);\n }\n return new CellRange(sri, sci, eri, eci);\n }\n}\n\nexport default CellRange;\n\nexport {\n CellRange,\n};\n","import { CellRange } from './cell_range';\n\nexport default class Selector {\n constructor() {\n this.range = new CellRange(0, 0, 0, 0);\n this.ri = 0;\n this.ci = 0;\n }\n\n multiple() {\n return this.range.multiple();\n }\n\n setIndexes(ri, ci) {\n this.ri = ri;\n this.ci = ci;\n }\n\n size() {\n return this.range.size();\n }\n}\n","export default class Scroll {\n constructor() {\n this.x = 0; // left\n this.y = 0; // top\n this.ri = 0; // cell row-index\n this.ci = 0; // cell col-index\n }\n}\n","// import helper from '../helper';\n\nexport default class History {\n constructor() {\n this.undoItems = [];\n this.redoItems = [];\n }\n\n add(data) {\n this.undoItems.push(JSON.stringify(data));\n this.redoItems = [];\n }\n\n canUndo() {\n return this.undoItems.length > 0;\n }\n\n canRedo() {\n return this.redoItems.length > 0;\n }\n\n undo(currentd, cb) {\n const { undoItems, redoItems } = this;\n if (this.canUndo()) {\n redoItems.push(JSON.stringify(currentd));\n cb(JSON.parse(undoItems.pop()));\n }\n }\n\n redo(currentd, cb) {\n const { undoItems, redoItems } = this;\n if (this.canRedo()) {\n undoItems.push(JSON.stringify(currentd));\n cb(JSON.parse(redoItems.pop()));\n }\n }\n}\n","export default class Clipboard {\n constructor() {\n this.range = null; // CellRange\n this.state = 'clear';\n }\n\n copy(cellRange) {\n this.range = cellRange;\n this.state = 'copy';\n return this;\n }\n\n cut(cellRange) {\n this.range = cellRange;\n this.state = 'cut';\n return this;\n }\n\n isCopy() {\n return this.state === 'copy';\n }\n\n isCut() {\n return this.state === 'cut';\n }\n\n isClear() {\n return this.state === 'clear';\n }\n\n clear() {\n this.range = null;\n this.state = 'clear';\n }\n}\n","import { CellRange } from './cell_range';\n// operator: all|eq|neq|gt|gte|lt|lte|in|be\n// value:\n// in => []\n// be => [min, max]\nclass Filter {\n constructor(ci, operator, value) {\n this.ci = ci;\n this.operator = operator;\n this.value = value;\n }\n\n set(operator, value) {\n this.operator = operator;\n this.value = value;\n }\n\n includes(v) {\n const { operator, value } = this;\n if (operator === 'all') {\n return true;\n }\n if (operator === 'in') {\n return value.includes(v);\n }\n return false;\n }\n\n vlength() {\n const { operator, value } = this;\n if (operator === 'in') {\n return value.length;\n }\n return 0;\n }\n\n getData() {\n const { ci, operator, value } = this;\n return { ci, operator, value };\n }\n}\n\nclass Sort {\n constructor(ci, order) {\n this.ci = ci;\n this.order = order;\n }\n\n asc() {\n return this.order === 'asc';\n }\n\n desc() {\n return this.order === 'desc';\n }\n}\n\nexport default class AutoFilter {\n constructor() {\n this.ref = null;\n this.filters = [];\n this.sort = null;\n }\n\n setData({ ref, filters, sort }) {\n if (ref != null) {\n this.ref = ref;\n this.fitlers = filters.map(it => new Filter(it.ci, it.operator, it.value));\n if (sort) {\n this.sort = new Sort(sort.ci, sort.order);\n }\n }\n }\n\n getData() {\n if (this.active()) {\n const { ref, filters, sort } = this;\n return { ref, filters: filters.map(it => it.getData()), sort };\n }\n return {};\n }\n\n addFilter(ci, operator, value) {\n const filter = this.getFilter(ci);\n if (filter == null) {\n this.filters.push(new Filter(ci, operator, value));\n } else {\n filter.set(operator, value);\n }\n }\n\n setSort(ci, order) {\n this.sort = order ? new Sort(ci, order) : null;\n }\n\n includes(ri, ci) {\n if (this.active()) {\n return this.hrange().includes(ri, ci);\n }\n return false;\n }\n\n getSort(ci) {\n const { sort } = this;\n if (sort && sort.ci === ci) {\n return sort;\n }\n return null;\n }\n\n getFilter(ci) {\n const { filters } = this;\n for (let i = 0; i < filters.length; i += 1) {\n if (filters[i].ci === ci) {\n return filters[i];\n }\n }\n return null;\n }\n\n filteredRows(getCell) {\n // const ary = [];\n // let lastri = 0;\n const rset = new Set();\n const fset = new Set();\n if (this.active()) {\n const { sri, eri } = this.range();\n const { filters } = this;\n for (let ri = sri + 1; ri <= eri; ri += 1) {\n for (let i = 0; i < filters.length; i += 1) {\n const filter = filters[i];\n const cell = getCell(ri, filter.ci);\n const ctext = cell ? cell.text : '';\n if (!filter.includes(ctext)) {\n rset.add(ri);\n break;\n } else {\n fset.add(ri);\n }\n }\n }\n }\n return { rset, fset };\n }\n\n items(ci, getCell) {\n const m = {};\n if (this.active()) {\n const { sri, eri } = this.range();\n for (let ri = sri + 1; ri <= eri; ri += 1) {\n const cell = getCell(ri, ci);\n if (cell !== null && !/^\\s*$/.test(cell.text)) {\n const key = cell.text;\n const cnt = (m[key] || 0) + 1;\n m[key] = cnt;\n } else {\n m[''] = (m[''] || 0) + 1;\n }\n }\n }\n return m;\n }\n\n range() {\n return CellRange.valueOf(this.ref);\n }\n\n hrange() {\n const r = this.range();\n r.eri = r.sri;\n return r;\n }\n\n clear() {\n this.ref = null;\n this.filters = [];\n this.sort = null;\n }\n\n active() {\n return this.ref !== null;\n }\n}\n","import { CellRange } from './cell_range';\n\nclass Merges {\n constructor(d = []) {\n this._ = d;\n }\n\n forEach(cb) {\n this._.forEach(cb);\n }\n\n deleteWithin(cr) {\n this._ = this._.filter(it => !it.within(cr));\n }\n\n getFirstIncludes(ri, ci) {\n for (let i = 0; i < this._.length; i += 1) {\n const it = this._[i];\n if (it.includes(ri, ci)) {\n return it;\n }\n }\n return null;\n }\n\n filterIntersects(cellRange) {\n return new Merges(this._.filter(it => it.intersects(cellRange)));\n }\n\n intersects(cellRange) {\n for (let i = 0; i < this._.length; i += 1) {\n const it = this._[i];\n if (it.intersects(cellRange)) {\n // console.log('intersects');\n return true;\n }\n }\n return false;\n }\n\n union(cellRange) {\n let cr = cellRange;\n this._.forEach((it) => {\n if (it.intersects(cr)) {\n cr = it.union(cr);\n }\n });\n return cr;\n }\n\n add(cr) {\n this.deleteWithin(cr);\n this._.push(cr);\n }\n\n // type: row | column\n shift(type, index, n, cbWithin) {\n this._.forEach((cellRange) => {\n const {\n sri, sci, eri, eci,\n } = cellRange;\n const range = cellRange;\n if (type === 'row') {\n if (sri >= index) {\n range.sri += n;\n range.eri += n;\n } else if (sri < index && index <= eri) {\n range.eri += n;\n cbWithin(sri, sci, n, 0);\n }\n } else if (type === 'column') {\n if (sci >= index) {\n range.sci += n;\n range.eci += n;\n } else if (sci < index && index <= eci) {\n range.eci += n;\n cbWithin(sri, sci, 0, n);\n }\n }\n });\n }\n\n move(cellRange, rn, cn) {\n this._.forEach((it1) => {\n const it = it1;\n if (it.within(cellRange)) {\n it.eri += rn;\n it.sri += rn;\n it.sci += cn;\n it.eci += cn;\n }\n });\n }\n\n setData(merges) {\n this._ = merges.map(merge => CellRange.valueOf(merge));\n return this;\n }\n\n getData() {\n return this._.map(merge => merge.toString());\n }\n}\n\nexport default {};\nexport {\n Merges,\n};\n","/* eslint-disable no-param-reassign */\nfunction cloneDeep(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\n\nconst mergeDeep = (object = {}, ...sources) => {\n sources.forEach((source) => {\n Object.keys(source).forEach((key) => {\n const v = source[key];\n // console.log('k:', key, ', v:', source[key], typeof v, v instanceof Object);\n if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {\n object[key] = v;\n } else if (typeof v !== 'function' && !Array.isArray(v) && v instanceof Object) {\n object[key] = object[key] || {};\n mergeDeep(object[key], v);\n } else {\n object[key] = v;\n }\n });\n });\n // console.log('::', object);\n return object;\n};\n\nfunction equals(obj1, obj2) {\n const keys = Object.keys(obj1);\n if (keys.length !== Object.keys(obj2).length) return false;\n for (let i = 0; i < keys.length; i += 1) {\n const k = keys[i];\n const v1 = obj1[k];\n const v2 = obj2[k];\n if (v2 === undefined) return false;\n if (typeof v1 === 'string' || typeof v1 === 'number' || typeof v1 === 'boolean') {\n if (v1 !== v2) return false;\n } else if (Array.isArray(v1)) {\n if (v1.length !== v2.length) return false;\n for (let ai = 0; ai < v1.length; ai += 1) {\n if (!equals(v1[ai], v2[ai])) return false;\n }\n } else if (typeof v1 !== 'function' && !Array.isArray(v1) && v1 instanceof Object) {\n if (!equals(v1, v2)) return false;\n }\n }\n return true;\n}\n\n/*\n objOrAry: obejct or Array\n cb: (value, index | key) => { return value }\n*/\nconst sum = (objOrAry, cb = value => value) => {\n let total = 0;\n let size = 0;\n Object.keys(objOrAry).forEach((key) => {\n total += cb(objOrAry[key], key);\n size += 1;\n });\n return [total, size];\n};\n\nfunction deleteProperty(obj, property) {\n const oldv = obj[`${property}`];\n delete obj[`${property}`];\n return oldv;\n}\n\nfunction rangeReduceIf(min, max, inits, initv, ifv, getv) {\n let s = inits;\n let v = initv;\n let i = min;\n for (; i < max; i += 1) {\n if (s > ifv) break;\n v = getv(i);\n s += v;\n }\n return [i, s - v, v];\n}\n\nfunction rangeSum(min, max, getv) {\n let s = 0;\n for (let i = min; i < max; i += 1) {\n s += getv(i);\n }\n return s;\n}\n\nfunction rangeEach(min, max, cb) {\n for (let i = min; i < max; i += 1) {\n cb(i);\n }\n}\n\nfunction arrayEquals(a1, a2) {\n if (a1.length === a2.length) {\n for (let i = 0; i < a1.length; i += 1) {\n if (a1[i] !== a2[i]) return false;\n }\n } else return false;\n return true;\n}\n\nexport default {\n cloneDeep,\n merge: (...sources) => mergeDeep({}, ...sources),\n equals,\n arrayEquals,\n sum,\n rangeEach,\n rangeSum,\n rangeReduceIf,\n deleteProperty,\n};\n","import helper from './helper';\nimport { expr2expr } from './alphabet';\n\nclass Rows {\n constructor({ len, height }) {\n this._ = {};\n this.len = len;\n // default row height\n this.height = height;\n }\n\n getHeight(ri) {\n const row = this.get(ri);\n if (row && row.height) {\n return row.height;\n }\n return this.height;\n }\n\n setHeight(ri, v) {\n const row = this.getOrNew(ri);\n row.height = v;\n }\n\n setStyle(ri, style) {\n const row = this.getOrNew(ri);\n row.style = style;\n }\n\n sumHeight(min, max, exceptSet) {\n return helper.rangeSum(min, max, (i) => {\n if (exceptSet && exceptSet.has(i)) return 0;\n return this.getHeight(i);\n });\n }\n\n totalHeight() {\n return this.sumHeight(0, this.len);\n }\n\n get(ri) {\n return this._[ri];\n }\n\n getOrNew(ri) {\n this._[ri] = this._[ri] || { cells: {} };\n return this._[ri];\n }\n\n getCell(ri, ci) {\n const row = this.get(ri);\n if (row !== undefined && row.cells !== undefined && row.cells[ci] !== undefined) {\n return row.cells[ci];\n }\n return null;\n }\n\n getCellMerge(ri, ci) {\n const cell = this.getCell(ri, ci);\n if (cell && cell.merge) return cell.merge;\n return [0, 0];\n }\n\n getCellOrNew(ri, ci) {\n const row = this.getOrNew(ri);\n row.cells[ci] = row.cells[ci] || {};\n return row.cells[ci];\n }\n\n // what: all | text | format\n setCell(ri, ci, cell, what = 'all') {\n const row = this.getOrNew(ri);\n if (what === 'all') {\n row.cells[ci] = cell;\n } else if (what === 'text') {\n row.cells[ci] = row.cells[ci] || {};\n row.cells[ci].text = cell.text;\n } else if (what === 'format') {\n row.cells[ci] = row.cells[ci] || {};\n row.cells[ci].style = cell.style;\n if (cell.merge) row.cells[ci].merge = cell.merge;\n }\n }\n\n setCellText(ri, ci, text) {\n const cell = this.getCellOrNew(ri, ci);\n cell.text = text;\n }\n\n // what: all | format | text\n copyPaste(srcCellRange, dstCellRange, what, autofill = false, cb = () => {}) {\n const {\n sri, sci, eri, eci,\n } = srcCellRange;\n const dsri = dstCellRange.sri;\n const dsci = dstCellRange.sci;\n const deri = dstCellRange.eri;\n const deci = dstCellRange.eci;\n const [rn, cn] = srcCellRange.size();\n const [drn, dcn] = dstCellRange.size();\n // console.log(srcIndexes, dstIndexes);\n let isAdd = true;\n let dn = 0;\n if (deri < sri || deci < sci) {\n isAdd = false;\n if (deri < sri) dn = drn;\n else dn = dcn;\n }\n // console.log('drn:', drn, ', dcn:', dcn, dn, isAdd);\n for (let i = sri; i <= eri; i += 1) {\n if (this._[i]) {\n for (let j = sci; j <= eci; j += 1) {\n if (this._[i].cells && this._[i].cells[j]) {\n for (let ii = dsri; ii <= deri; ii += rn) {\n for (let jj = dsci; jj <= deci; jj += cn) {\n const nri = ii + (i - sri);\n const nci = jj + (j - sci);\n const ncell = helper.cloneDeep(this._[i].cells[j]);\n // ncell.text\n if (autofill && ncell && ncell.text && ncell.text.length > 0) {\n const { text } = ncell;\n let n = (jj - dsci) + (ii - dsri) + 2;\n if (!isAdd) {\n n -= dn + 1;\n }\n if (text[0] === '=') {\n ncell.text = text.replace(/\\w{1,3}\\d/g, (word) => {\n let [xn, yn] = [0, 0];\n if (sri === dsri) {\n xn = n - 1;\n // if (isAdd) xn -= 1;\n } else {\n yn = n - 1;\n }\n // console.log('xn:', xn, ', yn:', yn, word, 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 - 1;\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 cb(nri, nci, ncell);\n }\n }\n }\n }\n }\n }\n }\n\n cutPaste(srcCellRange, dstCellRange) {\n const ncellmm = {};\n this.each((ri) => {\n this.eachCells(ri, (ci) => {\n let nri = parseInt(ri, 10);\n let nci = parseInt(ci, 10);\n if (srcCellRange.includes(ri, ci)) {\n nri = dstCellRange.sri + (nri - srcCellRange.sri);\n nci = dstCellRange.sci + (nci - srcCellRange.sci);\n }\n ncellmm[nri] = ncellmm[nri] || { cells: {} };\n ncellmm[nri].cells[nci] = this._[ri].cells[ci];\n });\n });\n this._ = ncellmm;\n }\n\n insert(sri, n = 1) {\n const ndata = {};\n this.each((ri, row) => {\n let nri = parseInt(ri, 10);\n if (nri >= sri) {\n nri += n;\n }\n ndata[nri] = row;\n });\n this._ = ndata;\n this.len += n;\n }\n\n delete(sri, eri) {\n const n = eri - sri + 1;\n const ndata = {};\n this.each((ri, row) => {\n const nri = parseInt(ri, 10);\n if (nri < sri) {\n ndata[nri] = row;\n } else if (ri > eri) {\n ndata[nri - n] = row;\n }\n });\n this._ = ndata;\n this.len -= n;\n }\n\n insertColumn(sci, n = 1) {\n this.each((ri, row) => {\n const rndata = {};\n this.eachCells(ri, (ci, cell) => {\n let nci = parseInt(ci, 10);\n if (nci >= sci) {\n nci += n;\n }\n rndata[nci] = cell;\n });\n row.cells = rndata;\n });\n }\n\n deleteColumn(sci, eci) {\n const n = eci - sci + 1;\n this.each((ri, row) => {\n const rndata = {};\n this.eachCells(ri, (ci, cell) => {\n const nci = parseInt(ci, 10);\n if (nci < sci) {\n rndata[nci] = cell;\n } else if (nci > eci) {\n rndata[nci - n] = cell;\n }\n });\n row.cells = rndata;\n });\n }\n\n // what: all | text | format | merge\n deleteCells(cellRange, what = 'all') {\n cellRange.each((i, j) => {\n this.deleteCell(i, j, what);\n });\n }\n\n // what: all | text | format | merge\n deleteCell(ri, ci, what = 'all') {\n const row = this.get(ri);\n if (row !== null) {\n const cell = this.getCell(ri, ci);\n if (cell !== null) {\n if (what === 'all') {\n delete row.cells[ci];\n } else if (what === 'text') {\n if (cell.text) delete cell.text;\n if (cell.value) delete cell.value;\n } else if (what === 'format') {\n if (cell.style !== undefined) delete cell.style;\n if (cell.merge) delete cell.merge;\n } else if (what === 'merge') {\n if (cell.merge) delete cell.merge;\n }\n }\n }\n }\n\n each(cb) {\n Object.entries(this._).forEach(([ri, row]) => {\n cb(ri, row);\n });\n }\n\n eachCells(ri, cb) {\n if (this._[ri] && this._[ri].cells) {\n Object.entries(this._[ri].cells).forEach(([ci, cell]) => {\n cb(ci, cell);\n });\n }\n }\n\n setData(d) {\n if (d.len) {\n this.len = d.len;\n delete d.len;\n }\n this._ = d;\n }\n\n getData() {\n const { len } = this;\n return Object.assign({ len }, this._);\n }\n}\n\nexport default {};\nexport {\n Rows,\n};\n","import helper from './helper';\n\nclass Cols {\n constructor({\n len, width, indexWidth, minWidth,\n }) {\n this._ = {};\n this.len = len;\n this.width = width;\n this.indexWidth = indexWidth;\n this.minWidth = minWidth;\n }\n\n setData(d) {\n if (d.len) {\n this.len = d.len;\n delete d.len;\n }\n this._ = d;\n }\n\n getData() {\n const { len } = this;\n return Object.assign({ len }, this._);\n }\n\n getWidth(i) {\n const col = this._[i];\n if (col && col.width) {\n return col.width;\n }\n return this.width;\n }\n\n getOrNew(ci) {\n this._[ci] = this._[ci] || {};\n return this._[ci];\n }\n\n setWidth(ci, width) {\n const col = this.getOrNew(ci);\n col.width = width;\n }\n\n setStyle(ci, style) {\n const col = this.getOrNew(ci);\n col.style = style;\n }\n\n sumWidth(min, max) {\n return helper.rangeSum(min, max, i => this.getWidth(i));\n }\n\n totalWidth() {\n return this.sumWidth(0, this.len);\n }\n}\n\nexport default {};\nexport {\n Cols,\n};\n","/* global window */\nimport en from './en';\n\nlet $lang = 'en';\nconst $messages = {\n en,\n};\n\nfunction translate(key, messages) {\n if (messages && messages[$lang]) {\n let message = messages[$lang];\n const keys = key.split('.');\n for (let i = 0; i < keys.length; i += 1) {\n const property = keys[i];\n const value = message[property];\n if (i === keys.length - 1) return value;\n if (!value) return undefined;\n message = value;\n }\n }\n return undefined;\n}\n\nfunction t(key) {\n let v = translate(key, $messages);\n if (!v && window && window.x && window.x.spreadsheet && window.x.spreadsheet.$messages) {\n v = translate(key, window.x.spreadsheet.$messages);\n }\n return v || '';\n}\n\nfunction tf(key) {\n return () => t(key);\n}\n\nfunction locale(lang, message) {\n $lang = lang;\n if (message) {\n $messages[lang] = message;\n }\n}\n\nexport default {\n t,\n};\n\nexport {\n locale,\n t,\n tf,\n};\n","export default {\n toolbar: {\n undo: 'Undo',\n redo: 'Redo',\n paintformat: 'Paint format',\n clearformat: 'Clear format',\n format: 'Format',\n fontName: 'Font',\n fontSize: 'Font size',\n fontBold: 'Font bold',\n fontItalic: 'Font italic',\n underline: 'Underline',\n strike: 'Strike',\n color: 'Text color',\n bgcolor: 'Fill color',\n border: 'Borders',\n merge: 'Merge cells',\n align: 'Horizontal align',\n valign: 'Vertical align',\n textwrap: 'Text wrapping',\n freeze: 'Freeze cell',\n autofilter: 'Filter',\n formula: 'Functions',\n more: 'More',\n },\n contextmenu: {\n copy: 'Copy',\n cut: 'Cut',\n paste: 'Paste',\n pasteValue: 'Paste values only',\n pasteFormat: 'Paste format only',\n insertRow: 'Insert row',\n insertColumn: 'Insert column',\n deleteRow: 'Delete row',\n deleteColumn: 'Delete column',\n deleteCell: 'Delete cell',\n deleteCellText: 'Delete cell text',\n validation: 'Data validations',\n },\n format: {\n normal: 'Normal',\n text: 'Plain Text',\n number: 'Number',\n percent: 'Percent',\n rmb: 'RMB',\n usd: 'USD',\n eur: 'EUR',\n date: 'Date',\n time: 'Time',\n datetime: 'Date time',\n duration: 'Duration',\n },\n formula: {\n sum: 'Sum',\n average: 'Average',\n max: 'Max',\n min: 'Min',\n _if: 'IF',\n and: 'AND',\n or: 'OR',\n concat: 'Concat',\n },\n validation: {\n required: 'it must be required',\n notMatch: 'it not match its validation rule',\n between: 'it is between {} and {}',\n notBetween: 'it is not between {} and {}',\n notIn: 'it is not in list',\n equal: 'it equal to {}',\n notEqual: 'it not equal to {}',\n lessThan: 'it less than {}',\n lessThanEqual: 'it less than or equal to {}',\n greaterThan: 'it greater than {}',\n greaterThanEqual: 'it greater than or equal to {}',\n },\n error: {\n pasteForMergedCell: 'Unable to do this for merged cells',\n },\n calendar: {\n weeks: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n },\n button: {\n cancel: 'Cancel',\n remove: 'Remove',\n save: 'Save',\n ok: 'OK',\n },\n sort: {\n desc: 'Sort Z -> A',\n asc: 'Sort A -> Z',\n },\n filter: {\n empty: 'empty',\n },\n dataValidation: {\n mode: 'Mode',\n range: 'Cell Range',\n criteria: 'Criteria',\n modeType: {\n cell: 'Cell',\n column: 'Colun',\n row: 'Row',\n },\n type: {\n list: 'List',\n number: 'Number',\n date: 'Date',\n phone: 'Phone',\n email: 'Email',\n },\n operator: {\n be: 'between',\n nbe: 'not betwwen',\n lt: 'less than',\n lte: 'less than or equal to',\n gt: 'greater than',\n gte: 'greater than or equal to',\n eq: 'equal to',\n neq: 'not equal to',\n },\n },\n};\n","import { t } from '../locale/locale';\nimport helper from './helper';\n\nconst rules = {\n phone: /^[1-9]\\d{10}$/,\n email: /w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/,\n};\n\nfunction returnMessage(flag, key, ...arg) {\n let message = '';\n if (!flag) {\n message = t(`validation.${key}`, ...arg);\n }\n return [flag, message];\n}\n\nexport default class Validator {\n // operator: b|nb|eq|neq|lt|lte|gt|gte\n // type: date|number|list|phone|email\n constructor(type, required, value, operator) {\n this.required = required;\n this.value = value;\n this.type = type;\n this.operator = operator;\n this.message = '';\n }\n\n parseValue(v) {\n const { type } = this;\n if (type === 'date') {\n return new Date(v);\n }\n if (type === 'number') {\n return Number(v);\n }\n return v;\n }\n\n equals(other) {\n let flag = this.type === other.type\n && this.required === other.required\n && this.operator === other.operator;\n if (flag) {\n if (Array.isArray(this.value)) {\n flag = helper.arrayEquals(this.value, other.value);\n } else {\n flag = this.value === other.value;\n }\n }\n return flag;\n }\n\n values() {\n return this.value.split(',');\n }\n\n validate(v) {\n const {\n required, operator, value, type,\n } = this;\n if (required && /^\\s*$/.test(v)) {\n return returnMessage(false, 'required');\n }\n if (/^\\s*$/.test(v)) return [true];\n if (rules[type] && !rules[type].test(v)) {\n return returnMessage(false, 'notMatch');\n }\n if (type === 'list') {\n return returnMessage(this.values().includes(v), 'notIn');\n }\n if (operator) {\n const v1 = this.parseValue(v);\n if (operator === 'be') {\n const [min, max] = value;\n return returnMessage(\n v1 >= this.parseValue(min) && v1 <= this.parseValue(max),\n 'between',\n min,\n max,\n );\n }\n if (operator === 'nbe') {\n const [min, max] = value;\n return returnMessage(\n v1 < this.parseValue(min) || v1 > this.parseValue(max),\n 'notBetween',\n min,\n max,\n );\n }\n if (operator === 'eq') {\n return returnMessage(\n v1 === this.parseValue(value),\n 'equal',\n value,\n );\n }\n if (operator === 'neq') {\n return returnMessage(\n v1 !== this.parseValue(value),\n 'notEqual',\n value,\n );\n }\n if (operator === 'lt') {\n return returnMessage(\n v1 < this.parseValue(value),\n 'lessThan',\n value,\n );\n }\n if (operator === 'lte') {\n return returnMessage(\n v1 <= this.parseValue(value),\n 'lessThanEqual',\n value,\n );\n }\n if (operator === 'gt') {\n return returnMessage(\n v1 > this.parseValue(value),\n 'greaterThan',\n value,\n );\n }\n if (operator === 'gte') {\n return returnMessage(\n v1 >= this.parseValue(value),\n 'greaterThanEqual',\n value,\n );\n }\n }\n return [true];\n }\n}\n","import Validator from './validator';\nimport { CellRange } from './cell_range';\n\nclass Validation {\n constructor(mode, refs, validator) {\n this.refs = refs;\n this.mode = mode; // cell\n this.validator = validator;\n }\n\n includes(ri, ci) {\n const { refs } = this;\n for (let i = 0; i < refs.length; i += 1) {\n const cr = CellRange.valueOf(refs[i]);\n if (cr.includes(ri, ci)) return true;\n }\n return false;\n }\n\n addRef(ref) {\n this.remove(CellRange.valueOf(ref));\n this.refs.push(ref);\n }\n\n remove(cellRange) {\n const nrefs = [];\n this.refs.forEach((it) => {\n const cr = CellRange.valueOf(it);\n if (cr.intersects(cellRange)) {\n const crs = cr.difference(cellRange);\n crs.forEach(it1 => nrefs.push(it1.toString()));\n } else {\n nrefs.push(it);\n }\n });\n this.refs = nrefs;\n }\n\n getData() {\n const { refs, mode, validator } = this;\n const {\n type, required, operator, value,\n } = validator;\n return {\n refs, mode, type, required, operator, value,\n };\n }\n\n static valueOf({\n refs, mode, type, required, operator, value,\n }) {\n return new Validation(mode, refs, new Validator(type, required, value, operator));\n }\n}\nclass Validations {\n constructor() {\n this._ = [];\n // ri_ci: errMessage\n this.errors = new Map();\n }\n\n getError(ri, ci) {\n return this.errors.get(`${ri}_${ci}`);\n }\n\n validate(ri, ci, text) {\n const v = this.get(ri, ci);\n const key = `${ri}_${ci}`;\n const { errors } = this;\n if (v !== null) {\n const [flag, message] = v.validator.validate(text);\n if (!flag) {\n errors.set(key, message);\n } else {\n errors.delete(key);\n }\n } else {\n errors.delete(key);\n }\n return true;\n }\n\n // type: date|number|phone|email|list\n // validator: { required, value, operator }\n add(mode, ref, {\n type, required, value, operator,\n }) {\n const validator = new Validator(\n type, required, value, operator,\n );\n const v = this.getByValidator(validator);\n if (v !== null) {\n v.addRef(ref);\n } else {\n this._.push(new Validation(mode, [ref], validator));\n }\n }\n\n getByValidator(validator) {\n for (let i = 0; i < this._.length; i += 1) {\n const v = this._[i];\n if (v.validator.equals(validator)) {\n return v;\n }\n }\n return null;\n }\n\n get(ri, ci) {\n for (let i = 0; i < this._.length; i += 1) {\n const v = this._[i];\n if (v.includes(ri, ci)) return v;\n }\n return null;\n }\n\n remove(cellRange) {\n this.each((it) => {\n it.remove(cellRange);\n });\n }\n\n each(cb) {\n this._.forEach(it => cb(it));\n }\n\n getData() {\n return this._.filter(it => it.refs.length > 0).map(it => it.getData());\n }\n\n setData(d) {\n this._ = d.map(it => Validation.valueOf(it));\n }\n}\n\nexport default {};\nexport {\n Validations,\n};\n","/* global document */\n\nimport Selector from './selector';\nimport Scroll from './scroll';\nimport History from './history';\nimport Clipboard from './clipboard';\nimport AutoFilter from './auto_filter';\nimport { Merges } from './merge';\nimport helper from './helper';\nimport { Rows } from './row';\nimport { Cols } from './col';\nimport { Validations } from './validation';\nimport { CellRange } from './cell_range';\nimport { expr2xy, xy2expr } from './alphabet';\nimport { t } from '../locale/locale';\n\n// private methods\n/*\n * {\n * name: ''\n * freeze: [0, 0],\n * formats: [],\n * styles: [\n * {\n * bgcolor: '',\n * align: '',\n * valign: '',\n * textwrap: false,\n * strike: false,\n * underline: false,\n * color: '',\n * format: 1,\n * border: {\n * left: [style, color],\n * right: [style, color],\n * top: [style, color],\n * bottom: [style, color],\n * },\n * font: {\n * name: 'Helvetica',\n * size: 10,\n * bold: false,\n * italic: false,\n * }\n * }\n * ],\n * merges: [\n * 'A1:F11',\n * ...\n * ],\n * rows: {\n * 1: {\n * height: 50,\n * style: 1,\n * cells: {\n * 1: {\n * style: 2,\n * type: 'string',\n * text: '',\n * value: '', // cal result\n * }\n * }\n * },\n * ...\n * },\n * cols: {\n * 2: { width: 100, style: 1 }\n * }\n * }\n */\nconst defaultSettings = {\n view: {\n height: () => document.documentElement.clientHeight,\n width: () => document.documentElement.clientWidth,\n },\n showGrid: true,\n showToolbar: true,\n showContextmenu: true,\n row: {\n len: 100,\n height: 25,\n },\n col: {\n len: 26,\n width: 100,\n indexWidth: 60,\n minWidth: 60,\n },\n style: {\n bgcolor: '#ffffff',\n align: 'left',\n valign: 'middle',\n textwrap: false,\n strike: false,\n underline: false,\n color: '#0a0a0a',\n font: {\n name: 'Arial',\n size: 10,\n bold: false,\n italic: false,\n },\n },\n};\n\nconst toolbarHeight = 41;\n\n\n// src: cellRange\n// dst: cellRange\nfunction canPaste(src, dst, error = () => {}) {\n const { merges } = this;\n const cellRange = dst.clone();\n const [srn, scn] = src.size();\n const [drn, dcn] = dst.size();\n if (srn > drn) {\n cellRange.eri = dst.sri + srn - 1;\n }\n if (scn > dcn) {\n cellRange.eci = dst.sci + scn - 1;\n }\n if (merges.intersects(cellRange)) {\n error(t('error.pasteForMergedCell'));\n return false;\n }\n return true;\n}\nfunction copyPaste(srcCellRange, dstCellRange, what, autofill = false) {\n const { rows, merges } = this;\n // delete dest merge\n if (what === 'all' || what === 'format') {\n rows.deleteCells(dstCellRange, what);\n merges.deleteWithin(dstCellRange);\n }\n rows.copyPaste(srcCellRange, dstCellRange, what, autofill, (ri, ci, cell) => {\n if (cell && cell.merge) {\n // console.log('cell:', ri, ci, cell);\n const [rn, cn] = cell.merge;\n if (rn <= 0 && cn <= 0) return;\n merges.add(new CellRange(ri, ci, ri + rn, ci + cn));\n }\n });\n}\n\nfunction cutPaste(srcCellRange, dstCellRange) {\n const { clipboard, rows, merges } = this;\n rows.cutPaste(srcCellRange, dstCellRange);\n merges.move(srcCellRange,\n dstCellRange.sri - srcCellRange.sri,\n dstCellRange.sci - srcCellRange.sci);\n clipboard.clear();\n}\n\n// bss: { top, bottom, left, right }\nfunction setStyleBorder(ri, ci, bss) {\n const { styles, rows } = this;\n const cell = rows.getCellOrNew(ri, ci);\n let cstyle = {};\n if (cell.style !== undefined) {\n cstyle = helper.cloneDeep(styles[cell.style]);\n }\n Object.assign(cstyle, { border: bss });\n cell.style = this.addStyle(cstyle);\n}\n\nfunction setStyleBorders({ mode, style, color }) {\n const { styles, selector, rows } = this;\n const {\n sri, sci, eri, eci,\n } = selector.range;\n const multiple = !this.isSignleSelected();\n if (!multiple) {\n if (mode === 'inside' || mode === 'horizontal' || mode === 'vertical') {\n return;\n }\n }\n if (mode === 'outside' && !multiple) {\n setStyleBorder.call(this, sri, sci, {\n top: [style, color], bottom: [style, color], left: [style, color], right: [style, color],\n });\n } else if (mode === 'none') {\n selector.range.each((ri, ci) => {\n const cell = rows.getCell(ri, ci);\n if (cell && cell.style !== undefined) {\n const ns = helper.cloneDeep(styles[cell.style]);\n delete ns.border;\n // ['bottom', 'top', 'left', 'right'].forEach((prop) => {\n // if (ns[prop]) delete ns[prop];\n // });\n cell.style = this.addStyle(ns);\n }\n });\n } else if (mode === 'all' || mode === 'inside' || mode === 'outside'\n || mode === 'horizontal' || mode === 'vertical') {\n const merges = [];\n for (let ri = sri; ri <= eri; ri += 1) {\n for (let ci = sci; ci <= eci; ci += 1) {\n // jump merges -- start\n const mergeIndexes = [];\n for (let ii = 0; ii < merges.length; ii += 1) {\n const [mri, mci, rn, cn] = merges[ii];\n if (ri === mri + rn + 1) mergeIndexes.push(ii);\n if (mri <= ri && ri <= mri + rn) {\n if (ci === mci) {\n ci += cn + 1;\n break;\n }\n }\n }\n mergeIndexes.forEach(it => merges.splice(it, 1));\n if (ci > eci) break;\n // jump merges -- end\n const cell = rows.getCell(ri, ci);\n let [rn, cn] = [0, 0];\n if (cell && cell.merge) {\n [rn, cn] = cell.merge;\n merges.push([ri, ci, rn, cn]);\n }\n const mrl = rn > 0 && ri + rn === eri;\n const mcl = cn > 0 && ci + cn === eci;\n let bss = {};\n if (mode === 'all') {\n bss = {\n bottom: [style, color],\n top: [style, color],\n left: [style, color],\n right: [style, color],\n };\n } else if (mode === 'inside') {\n if (!mcl && ci < eci) bss.right = [style, color];\n if (!mrl && ri < eri) bss.bottom = [style, color];\n } else if (mode === 'horizontal') {\n if (!mrl && ri < eri) bss.bottom = [style, color];\n } else if (mode === 'vertical') {\n if (!mcl && ci < eci) bss.right = [style, color];\n } else if (mode === 'outside' && multiple) {\n if (sri === ri) bss.top = [style, color];\n if (mrl || eri === ri) bss.bottom = [style, color];\n if (sci === ci) bss.left = [style, color];\n if (mcl || eci === ci) bss.right = [style, color];\n }\n if (Object.keys(bss).length > 0) {\n setStyleBorder.call(this, ri, ci, bss);\n }\n ci += cn;\n }\n }\n } else if (mode === 'top' || mode === 'bottom') {\n for (let ci = sci; ci <= eci; ci += 1) {\n if (mode === 'top') {\n setStyleBorder.call(this, sri, ci, { top: [style, color] });\n ci += rows.getCellMerge(sri, ci)[1];\n }\n if (mode === 'bottom') {\n setStyleBorder.call(this, eri, ci, { bottom: [style, color] });\n ci += rows.getCellMerge(eri, ci)[1];\n }\n }\n } else if (mode === 'left' || mode === 'right') {\n for (let ri = sri; ri <= eri; ri += 1) {\n if (mode === 'left') {\n setStyleBorder.call(this, ri, sci, { left: [style, color] });\n ri += rows.getCellMerge(ri, sci)[0];\n }\n if (mode === 'right') {\n setStyleBorder.call(this, ri, eci, { right: [style, color] });\n ri += rows.getCellMerge(ri, eci)[0];\n }\n }\n }\n}\n\nfunction getCellRowByY(y, scrollOffsety) {\n const { rows } = this;\n const fsh = this.freezeTotalHeight();\n // console.log('y:', y, ', fsh:', fsh);\n let inits = rows.height;\n if (fsh + rows.height < y) inits -= scrollOffsety;\n\n // handle ri in autofilter\n const frset = this.exceptRowSet;\n\n let ri = 0;\n let top = inits;\n let { height } = rows;\n for (; ri < rows.len; ri += 1) {\n if (top > y) break;\n if (!frset.has(ri)) {\n height = rows.getHeight(ri);\n top += height;\n }\n }\n top -= height;\n // console.log('ri:', ri, ', top:', top, ', height:', height);\n\n if (top <= 0) {\n return { ri: -1, top: 0, height };\n }\n\n return { ri: ri - 1, top, height };\n}\n\nfunction getCellColByX(x, scrollOffsetx) {\n const { cols } = this;\n const fsw = this.freezeTotalWidth();\n let inits = cols.indexWidth;\n if (fsw + cols.indexWidth < x) inits -= scrollOffsetx;\n const [ci, left, width] = helper.rangeReduceIf(\n 0,\n cols.len,\n inits,\n cols.indexWidth,\n x,\n i => cols.getWidth(i),\n );\n if (left <= 0) {\n return { ci: -1, left: 0, width: cols.indexWidth };\n }\n return { ci: ci - 1, left, width };\n}\n\nexport default class DataProxy {\n constructor(name, settings) {\n this.settings = helper.merge(defaultSettings, settings || {});\n // save data begin\n this.name = name || 'sheet';\n this.freeze = [0, 0];\n this.styles = []; // Array<Style>\n this.merges = new Merges(); // [CellRange, ...]\n this.rows = new Rows(this.settings.row);\n this.cols = new Cols(this.settings.col);\n this.validations = new Validations();\n this.hyperlinks = {};\n this.comments = {};\n // save data end\n\n // don't save object\n this.selector = new Selector();\n this.scroll = new Scroll();\n this.history = new History();\n this.clipboard = new Clipboard();\n this.autoFilter = new AutoFilter();\n this.change = () => {};\n this.exceptRowSet = new Set();\n this.sortedRowMap = new Map();\n this.unsortedRowMap = new Map();\n }\n\n addValidation(mode, ref, validator) {\n // console.log('mode:', mode, ', ref:', ref, ', validator:', validator);\n this.changeData(() => {\n this.validations.add(mode, ref, validator);\n });\n }\n\n removeValidation() {\n const { range } = this.selector;\n this.changeData(() => {\n this.validations.remove(range);\n });\n }\n\n getSelectedValidator() {\n const { ri, ci } = this.selector;\n const v = this.validations.get(ri, ci);\n return v ? v.validator : null;\n }\n\n getSelectedValidation() {\n const { ri, ci, range } = this.selector;\n const v = this.validations.get(ri, ci);\n const ret = { ref: range.toString() };\n if (v !== null) {\n ret.mode = v.mode;\n ret.validator = v.validator;\n }\n return ret;\n }\n\n canUndo() {\n return this.history.canUndo();\n }\n\n canRedo() {\n return this.history.canRedo();\n }\n\n undo() {\n this.history.undo(this.getData(), (d) => {\n this.setData(d);\n });\n }\n\n redo() {\n this.history.redo(this.getData(), (d) => {\n this.setData(d);\n });\n }\n\n copy() {\n this.clipboard.copy(this.selector.range);\n }\n\n cut() {\n this.clipboard.cut(this.selector.range);\n }\n\n // what: all | text | format\n paste(what = 'all', error = () => {}) {\n // console.log('sIndexes:', sIndexes);\n const { clipboard, selector } = this;\n if (clipboard.isClear()) return false;\n if (!canPaste.call(this, clipboard.range, selector.range, error)) return false;\n\n this.changeData(() => {\n if (clipboard.isCopy()) {\n copyPaste.call(this, clipboard.range, selector.range, what);\n } else if (clipboard.isCut()) {\n cutPaste.call(this, clipboard.range, selector.range);\n }\n });\n return true;\n }\n\n autofill(cellRange, what, error = () => {}) {\n const srcRange = this.selector.range;\n if (!canPaste.call(this, srcRange, cellRange, error)) return false;\n this.changeData(() => {\n copyPaste.call(this, srcRange, cellRange, what, true);\n });\n return true;\n }\n\n clearClipboard() {\n this.clipboard.clear();\n }\n\n calSelectedRangeByEnd(ri, ci) {\n const {\n selector, rows, cols, merges,\n } = this;\n let {\n sri, sci, eri, eci,\n } = selector.range;\n const cri = selector.ri;\n const cci = selector.ci;\n let [nri, nci] = [ri, ci];\n if (ri < 0) nri = rows.len - 1;\n if (ci < 0) nci = cols.len - 1;\n if (nri > cri) [sri, eri] = [cri, nri];\n else [sri, eri] = [nri, cri];\n if (nci > cci) [sci, eci] = [cci, nci];\n else [sci, eci] = [nci, cci];\n selector.range = merges.union(new CellRange(\n sri, sci, eri, eci,\n ));\n selector.range = merges.union(selector.range);\n // console.log('selector.range:', selector.range);\n return selector.range;\n }\n\n calSelectedRangeByStart(ri, ci) {\n const {\n selector, rows, cols, merges,\n } = this;\n let cellRange = merges.getFirstIncludes(ri, ci);\n // console.log('cellRange:', cellRange, ri, ci, merges);\n if (cellRange === null) {\n cellRange = new CellRange(ri, ci, ri, ci);\n if (ri === -1) {\n cellRange.sri = 0;\n cellRange.eri = rows.len - 1;\n }\n if (ci === -1) {\n cellRange.sci = 0;\n cellRange.eci = cols.len - 1;\n }\n }\n selector.range = cellRange;\n return cellRange;\n }\n\n setSelectedCellAttr(property, value) {\n this.changeData(() => {\n const { selector, styles, rows } = this;\n if (property === 'merge') {\n if (value) this.merge();\n else this.unmerge();\n } else if (property === 'border') {\n setStyleBorders.call(this, value);\n } else if (property === 'formula') {\n // console.log('>>>', selector.multiple());\n const { ri, ci, range } = selector;\n if (selector.multiple()) {\n const [rn, cn] = selector.size();\n const {\n sri, sci, eri, eci,\n } = range;\n if (rn > 1) {\n for (let i = sci; i <= eci; i += 1) {\n const cell = rows.getCellOrNew(eri + 1, i);\n cell.text = `=${value}(${xy2expr(i, sri)}:${xy2expr(i, eri)})`;\n }\n } else if (cn > 1) {\n const cell = rows.getCellOrNew(ri, eci + 1);\n cell.text = `=${value}(${xy2expr(sci, ri)}:${xy2expr(eci, ri)})`;\n }\n } else {\n const cell = rows.getCellOrNew(ri, ci);\n cell.text = `=${value}()`;\n }\n } else {\n selector.range.each((ri, ci) => {\n const cell = rows.getCellOrNew(ri, ci);\n let cstyle = {};\n if (cell.style !== undefined) {\n cstyle = helper.cloneDeep(styles[cell.style]);\n }\n if (property === 'format') {\n cstyle.format = value;\n cell.style = this.addStyle(cstyle);\n } else if (property === 'font-bold' || property === 'font-italic'\n || property === 'font-name' || property === 'font-size') {\n const nfont = {};\n nfont[property.split('-')[1]] = value;\n cstyle.font = Object.assign(cstyle.font || {}, nfont);\n cell.style = this.addStyle(cstyle);\n } else if (property === 'strike' || property === 'textwrap'\n || property === 'underline'\n || property === 'align' || property === 'valign'\n || property === 'color' || property === 'bgcolor') {\n cstyle[property] = value;\n cell.style = this.addStyle(cstyle);\n }\n });\n }\n });\n }\n\n // state: input | finished\n setSelectedCellText(text, state = 'input') {\n const { autoFilter, selector, rows } = this;\n const { ri, ci } = selector;\n let nri = ri;\n if (this.unsortedRowMap.has(ri)) {\n nri = this.unsortedRowMap.get(ri);\n }\n const oldCell = rows.getCell(nri, ci);\n const oldText = oldCell ? oldCell.text : '';\n this.setCellText(nri, ci, text, state);\n // replace filter.value\n if (autoFilter.active()) {\n const filter = autoFilter.getFilter(ci);\n if (filter) {\n const vIndex = filter.value.findIndex(v => v === oldText);\n if (vIndex >= 0) {\n filter.value.splice(vIndex, 1, text);\n }\n // console.log('filter:', filter, oldCell);\n }\n }\n // this.resetAutoFilter();\n }\n\n getSelectedCell() {\n const { ri, ci } = this.selector;\n let nri = ri;\n if (this.unsortedRowMap.has(ri)) {\n nri = this.unsortedRowMap.get(ri);\n }\n return this.rows.getCell(nri, ci);\n }\n\n xyInSelectedRect(x, y) {\n const {\n left, top, width, height,\n } = this.getSelectedRect();\n const x1 = x - this.cols.indexWidth;\n const y1 = y - this.rows.height;\n // console.log('x:', x, ',y:', y, 'left:', left, 'top:', top);\n return x1 > left && x1 < (left + width)\n && y1 > top && y1 < (top + height);\n }\n\n getSelectedRect() {\n return this.getRect(this.selector.range);\n }\n\n getClipboardRect() {\n const { clipboard } = this;\n if (!clipboard.isClear()) {\n return this.getRect(clipboard.range);\n }\n return { left: -100, top: -100 };\n }\n\n getRect(cellRange) {\n const {\n scroll, rows, cols, exceptRowSet,\n } = this;\n const {\n sri, sci, eri, eci,\n } = cellRange;\n // console.log('sri:', sri, ',sci:', sci, ', eri:', eri, ', eci:', eci);\n // no selector\n if (sri < 0 && sci < 0) {\n return {\n left: 0, l: 0, top: 0, t: 0, scroll,\n };\n }\n const left = cols.sumWidth(0, sci);\n const top = rows.sumHeight(0, sri, exceptRowSet);\n const height = rows.sumHeight(sri, eri + 1, exceptRowSet);\n const width = cols.sumWidth(sci, eci + 1);\n // console.log('sri:', sri, ', sci:', sci, ', eri:', eri, ', eci:', eci);\n let left0 = left - scroll.x;\n let top0 = top - scroll.y;\n const fsh = this.freezeTotalHeight();\n const fsw = this.freezeTotalWidth();\n if (fsw > 0 && fsw > left) {\n left0 = left;\n }\n if (fsh > 0 && fsh > top) {\n top0 = top;\n }\n return {\n l: left,\n t: top,\n left: left0,\n top: top0,\n height,\n width,\n scroll,\n };\n }\n\n getCellRectByXY(x, y) {\n const {\n scroll, merges, rows, cols,\n } = this;\n let { ri, top, height } = getCellRowByY.call(this, y, scroll.y);\n let { ci, left, width } = getCellColByX.call(this, x, scroll.x);\n if (ci === -1) {\n width = cols.totalWidth();\n }\n if (ri === -1) {\n height = rows.totalHeight();\n }\n if (ri >= 0 || ci >= 0) {\n const merge = merges.getFirstIncludes(ri, ci);\n if (merge) {\n ri = merge.sri;\n ci = merge.sci;\n ({\n left, top, width, height,\n } = this.cellRect(ri, ci));\n }\n }\n return {\n ri, ci, left, top, width, height,\n };\n }\n\n isSignleSelected() {\n const {\n sri, sci, eri, eci,\n } = this.selector.range;\n const cell = this.getCell(sri, sci);\n if (cell && cell.merge) {\n const [rn, cn] = cell.merge;\n if (sri + rn === eri && sci + cn === eci) return true;\n }\n return !this.selector.multiple();\n }\n\n canUnmerge() {\n const {\n sri, sci, eri, eci,\n } = this.selector.range;\n const cell = this.getCell(sri, sci);\n if (cell && cell.merge) {\n const [rn, cn] = cell.merge;\n if (sri + rn === eri && sci + cn === eci) return true;\n }\n return false;\n }\n\n merge() {\n const { selector, rows } = this;\n if (this.isSignleSelected()) return;\n const [rn, cn] = selector.size();\n // console.log('merge:', rn, cn);\n if (rn > 1 || cn > 1) {\n const { sri, sci } = selector.range;\n this.changeData(() => {\n const cell = rows.getCellOrNew(sri, sci);\n cell.merge = [rn - 1, cn - 1];\n this.merges.add(selector.range);\n // delete merge cells\n this.rows.deleteCells(selector.range);\n // console.log('cell:', cell, this.d);\n this.rows.setCell(sri, sci, cell);\n });\n }\n }\n\n unmerge() {\n const { selector } = this;\n if (!this.isSignleSelected()) return;\n const { sri, sci } = selector.range;\n this.changeData(() => {\n this.rows.deleteCell(sri, sci, 'merge');\n this.merges.deleteWithin(selector.range);\n });\n }\n\n canAutofilter() {\n return !this.autoFilter.active();\n }\n\n autofilter() {\n const { autoFilter, selector } = this;\n this.changeData(() => {\n if (autoFilter.active()) {\n autoFilter.clear();\n this.exceptRowSet = new Set();\n this.sortedRowMap = new Map();\n this.unsortedRowMap = new Map();\n } else {\n autoFilter.ref = selector.range.toString();\n }\n });\n }\n\n setAutoFilter(ci, order, operator, value) {\n const { autoFilter } = this;\n autoFilter.addFilter(ci, operator, value);\n autoFilter.setSort(ci, order);\n this.resetAutoFilter();\n }\n\n resetAutoFilter() {\n const { autoFilter, rows } = this;\n if (!autoFilter.active()) return;\n const { sort } = autoFilter;\n const { rset, fset } = autoFilter.filteredRows((r, c) => rows.getCell(r, c));\n const fary = Array.from(fset);\n const oldAry = Array.from(fset);\n if (sort) {\n fary.sort((a, b) => {\n if (sort.order === 'asc') return a - b;\n if (sort.order === 'desc') return b - a;\n return 0;\n });\n }\n this.exceptRowSet = rset;\n this.sortedRowMap = new Map();\n this.unsortedRowMap = new Map();\n fary.forEach((it, index) => {\n this.sortedRowMap.set(oldAry[index], it);\n this.unsortedRowMap.set(it, oldAry[index]);\n });\n }\n\n deleteCell(what = 'all') {\n const { selector } = this;\n this.changeData(() => {\n this.rows.deleteCells(selector.range, what);\n if (what === 'all' || what === 'format') {\n this.merges.deleteWithin(selector.range);\n }\n });\n }\n\n // type: row | column\n insert(type, n = 1) {\n this.changeData(() => {\n const { sri, sci } = this.selector.range;\n const { rows, merges, cols } = this;\n let si = sri;\n if (type === 'row') {\n rows.insert(sri, n);\n } else if (type === 'column') {\n rows.insertColumn(sci, n);\n si = sci;\n cols.len += 1;\n }\n merges.shift(type, si, n, (ri, ci, rn, cn) => {\n const cell = rows.getCell(ri, ci);\n cell.merge[0] += rn;\n cell.merge[1] += cn;\n });\n });\n }\n\n // type: row | column\n delete(type) {\n this.changeData(() => {\n const {\n rows, merges, selector, cols,\n } = this;\n const { range } = selector;\n const {\n sri, sci, eri, eci,\n } = selector.range;\n const [rsize, csize] = selector.range.size();\n let si = sri;\n let size = rsize;\n if (type === 'row') {\n rows.delete(sri, eri);\n } else if (type === 'column') {\n rows.deleteColumn(sci, eci);\n si = range.sci;\n size = csize;\n cols.len -= 1;\n }\n // console.log('type:', type, ', si:', si, ', size:', size);\n merges.shift(type, si, -size, (ri, ci, rn, cn) => {\n // console.log('ri:', ri, ', ci:', ci, ', rn:', rn, ', cn:', cn);\n const cell = rows.getCell(ri, ci);\n cell.merge[0] += rn;\n cell.merge[1] += cn;\n if (cell.merge[0] === 0 && cell.merge[1] === 0) {\n delete cell.merge;\n }\n });\n });\n }\n\n scrollx(x, cb) {\n const { scroll, freeze, cols } = this;\n const [, fci] = freeze;\n const [\n ci, left, width,\n ] = helper.rangeReduceIf(fci, cols.len, 0, 0, x, i => cols.getWidth(i));\n // console.log('fci:', fci, ', ci:', ci);\n let x1 = left;\n if (x > 0) x1 += width;\n if (scroll.x !== x1) {\n scroll.ci = x > 0 ? ci : 0;\n scroll.x = x1;\n cb();\n }\n }\n\n scrolly(y, cb) {\n const { scroll, freeze, rows } = this;\n const [fri] = freeze;\n const [\n ri, top, height,\n ] = helper.rangeReduceIf(fri, rows.len, 0, 0, y, i => rows.getHeight(i));\n let y1 = top;\n if (y > 0) y1 += height;\n // console.log('ri:', ri, ' ,y:', y1);\n if (scroll.y !== y1) {\n scroll.ri = y > 0 ? ri : 0;\n scroll.y = y1;\n cb();\n }\n }\n\n cellRect(ri, ci) {\n const { rows, cols } = this;\n const left = cols.sumWidth(0, ci);\n const top = rows.sumHeight(0, ri);\n const cell = rows.getCell(ri, ci);\n let width = cols.getWidth(ci);\n let height = rows.getHeight(ri);\n if (cell !== null) {\n if (cell.merge) {\n const [rn, cn] = cell.merge;\n // console.log('cell.merge:', cell.merge);\n if (rn > 0) {\n for (let i = 1; i <= rn; i += 1) {\n height += rows.getHeight(ri + i);\n }\n }\n if (cn > 0) {\n for (let i = 1; i <= cn; i += 1) {\n width += cols.getWidth(ci + i);\n }\n }\n }\n }\n // console.log('data:', this.d);\n return {\n left, top, width, height, cell,\n };\n }\n\n getCell(ri, ci) {\n return this.rows.getCell(ri, ci);\n }\n\n getCellTextOrDefault(ri, ci) {\n const cell = this.getCell(ri, ci);\n return (cell && cell.text) ? cell.text : '';\n }\n\n getCellStyle(ri, ci) {\n const cell = this.getCell(ri, ci);\n if (cell && cell.style !== undefined) {\n return this.styles[cell.style];\n }\n return null;\n }\n\n getCellStyleOrDefault(ri, ci) {\n const { styles, rows } = this;\n const cell = rows.getCell(ri, ci);\n const cellStyle = (cell && cell.style !== undefined) ? styles[cell.style] : {};\n return helper.merge(this.defaultStyle(), cellStyle);\n }\n\n getSelectedCellStyle() {\n const { ri, ci } = this.selector;\n return this.getCellStyleOrDefault(ri, ci);\n }\n\n // state: input | finished\n setCellText(ri, ci, text, state) {\n const { rows, history, validations } = this;\n if (state === 'finished') {\n rows.setCellText(ri, ci, '');\n history.add(this.getData());\n rows.setCellText(ri, ci, text);\n } else {\n rows.setCellText(ri, ci, text);\n this.change(this.getData());\n }\n // validator\n validations.validate(ri, ci, text);\n }\n\n freezeIsActive() {\n const [ri, ci] = this.freeze;\n return ri > 0 || ci > 0;\n }\n\n setFreeze(ri, ci) {\n this.changeData(() => {\n this.freeze = [ri, ci];\n });\n }\n\n freezeTotalWidth() {\n return this.cols.sumWidth(0, this.freeze[1]);\n }\n\n freezeTotalHeight() {\n return this.rows.sumHeight(0, this.freeze[0]);\n }\n\n setRowHeight(ri, height) {\n this.changeData(() => {\n this.rows.setHeight(ri, height);\n });\n }\n\n setColWidth(ci, width) {\n this.changeData(() => {\n this.cols.setWidth(ci, width);\n });\n }\n\n viewHeight() {\n const { view, showToolbar } = this.settings;\n let h = view.height();\n if (showToolbar) {\n h -= toolbarHeight;\n }\n return h;\n }\n\n viewWidth() {\n return this.settings.view.width();\n }\n\n freezeViewRange() {\n const [ri, ci] = this.freeze;\n return new CellRange(0, 0, ri - 1, ci - 1, this.freezeTotalWidth(), this.freezeTotalHeight());\n }\n\n exceptRowTotalHeight(sri, eri) {\n const { exceptRowSet, rows } = this;\n const exceptRows = Array.from(exceptRowSet);\n let exceptRowTH = 0;\n exceptRows.forEach((ri) => {\n if (ri < sri || ri > eri) {\n const height = rows.getHeight(ri);\n exceptRowTH += height;\n }\n });\n return exceptRowTH;\n }\n\n viewRange() {\n const {\n scroll, rows, cols, freeze, exceptRowSet,\n } = this;\n let { ri, ci } = scroll;\n if (ri <= 0) [ri] = freeze;\n if (ci <= 0) [, ci] = freeze;\n\n let [x, y] = [0, 0];\n let [eri, eci] = [rows.len, cols.len];\n for (let i = ri; i < rows.len; i += 1) {\n if (!exceptRowSet.has(i)) {\n y += rows.getHeight(i);\n eri = i;\n }\n if (y > this.viewHeight()) break;\n }\n for (let j = ci; j < cols.len; j += 1) {\n x += cols.getWidth(j);\n eci = j;\n if (x > this.viewWidth()) break;\n }\n // console.log(ri, ci, eri, eci, x, y);\n return new CellRange(ri, ci, eri, eci, x, y);\n }\n\n eachMergesInView(viewRange, cb) {\n this.merges.filterIntersects(viewRange)\n .forEach(it => cb(it));\n }\n\n rowEach(min, max, cb) {\n let y = 0;\n const { rows } = this;\n const frset = this.exceptRowSet;\n const frary = [...frset];\n let offset = 0;\n for (let i = 0; i < frary.length; i += 1) {\n if (frary[i] < min) {\n offset += 1;\n }\n }\n // console.log('min:', min, ', max:', max, ', scroll:', scroll);\n for (let i = min + offset; i <= max + offset; i += 1) {\n if (frset.has(i)) {\n offset += 1;\n } else {\n const rowHeight = rows.getHeight(i);\n cb(i, y, rowHeight);\n y += rowHeight;\n if (y > this.viewHeight()) break;\n }\n }\n }\n\n colEach(min, max, cb) {\n let x = 0;\n const { cols } = this;\n for (let i = min; i <= max; i += 1) {\n const colWidth = cols.getWidth(i);\n cb(i, x, colWidth);\n x += colWidth;\n if (x > this.viewWidth()) break;\n }\n }\n\n defaultStyle() {\n return this.settings.style;\n }\n\n addStyle(nstyle) {\n const { styles } = this;\n // console.log('old.styles:', styles, nstyle);\n for (let i = 0; i < styles.length; i += 1) {\n const style = styles[i];\n if (helper.equals(style, nstyle)) return i;\n }\n styles.push(nstyle);\n return styles.length - 1;\n }\n\n changeData(cb) {\n this.history.add(this.getData());\n cb();\n this.change(this.getData());\n }\n\n setData(d) {\n Object.keys(d).forEach((property) => {\n if (property === 'merges' || property === 'rows'\n || property === 'cols' || property === 'validations') {\n this[property].setData(d[property]);\n } else if (property === 'freeze') {\n const [x, y] = expr2xy(d[property]);\n this.freeze = [y, x];\n } else if (d[property] !== undefined) {\n this[property] = d[property];\n }\n });\n return this;\n }\n\n getData() {\n const {\n name, freeze, styles, merges, rows, cols, validations, autoFilter,\n } = this;\n return {\n name,\n freeze: xy2expr(freeze[1], freeze[0]),\n styles,\n merges: merges.getData(),\n rows: rows.getData(),\n cols: cols.getData(),\n validations: validations.getData(),\n autofilter: autoFilter.getData(),\n };\n }\n}\n","/* global window */\nexport function bind(target, name, fn) {\n target.addEventListener(name, fn);\n}\nexport function unbind(target, name, fn) {\n target.removeEventListener(name, fn);\n}\nexport function unbindClickoutside(el) {\n if (el.xclickoutside) {\n unbind(window.document.body, 'click', el.xclickoutside);\n delete el.xclickoutside;\n }\n}\n\n// the left mouse button: mousedown → mouseup → click\n// the right mouse button: mousedown → contenxtmenu → mouseup\n// the right mouse button in firefox(>65.0): mousedown → contenxtmenu → mouseup → click on window\nexport function bindClickoutside(el, cb) {\n el.xclickoutside = (evt) => {\n // ignore double click\n // console.log('evt:', evt);\n if (evt.detail === 2 || el.contains(evt.target)) return;\n if (cb) cb(el);\n else {\n el.hide();\n unbindClickoutside(el);\n }\n };\n bind(window.document.body, 'click', el.xclickoutside);\n}\nexport function mouseMoveUp(target, movefunc, upfunc) {\n bind(target, 'mousemove', movefunc);\n const t = target;\n t.xEvtUp = (evt) => {\n // console.log('mouseup>>>');\n unbind(target, 'mousemove', movefunc);\n unbind(target, 'mouseup', target.xEvtUp);\n upfunc(evt);\n };\n bind(target, 'mouseup', target.xEvtUp);\n}\n\nfunction calTouchDirection(spanx, spany, evt, cb) {\n let direction = '';\n // console.log('spanx:', spanx, ', spany:', spany);\n if (Math.abs(spanx) > Math.abs(spany)) {\n // horizontal\n direction = spanx > 0 ? 'right' : 'left';\n cb(direction, spanx, evt);\n } else {\n // vertical\n direction = spany > 0 ? 'down' : 'up';\n cb(direction, spany, evt);\n }\n}\n// cb = (direction, distance) => {}\nexport function bindTouch(target, { move, end }) {\n let startx = 0;\n let starty = 0;\n bind(target, 'touchstart', (evt) => {\n const { pageX, pageY } = evt.touches[0];\n startx = pageX;\n starty = pageY;\n });\n bind(target, 'touchmove', (evt) => {\n if (!move) return;\n const { pageX, pageY } = evt.changedTouches[0];\n const spanx = pageX - startx;\n const spany = pageY - starty;\n if (Math.abs(spanx) > 10 || Math.abs(spany) > 10) {\n // console.log('spanx:', spanx, ', spany:', spany);\n calTouchDirection(spanx, spany, evt, move);\n startx = pageX;\n starty = pageY;\n }\n evt.preventDefault();\n });\n bind(target, 'touchend', (evt) => {\n if (!end) return;\n const { pageX, pageY } = evt.changedTouches[0];\n const spanx = pageX - startx;\n const spany = pageY - starty;\n calTouchDirection(spanx, spany, evt, end);\n });\n}\n","/* 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 // console.log('d:', d);\n this.el.css(cssKey, `${d - 15}px`).show();\n this.contentEl\n .css(this.vertical ? 'width' : 'height', '1px')\n .css(cssKey, `${contentDistance}px`);\n } else {\n this.el.hide();\n }\n return this;\n }\n}\n","import { h } from './element';\nimport { cssPrefix } from '../config';\nimport { CellRange } from '../core/cell_range';\n\nconst selectorHeightBorderWidth = 2 * 2 - 1;\nlet startZIndex = 10;\n\nclass SelectorElement {\n constructor() {\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.range = null;\n this.arange = null;\n this.el = h('div', `${cssPrefix}-selectors`)\n .children(\n this.tl.el,\n this.t.el,\n this.l.el,\n this.br.el,\n ).hide();\n\n // for performance\n this.lastri = -1;\n this.lastci = -1;\n\n startZIndex += 1;\n }\n\n hide() {\n this.el.hide();\n }\n\n resetOffset() {\n const {\n data, tl, t, l, br,\n } = this;\n const freezeHeight = data.freezeTotalHeight();\n const freezeWidth = data.freezeTotalWidth();\n if (freezeHeight > 0 || freezeWidth > 0) {\n tl.setOffset({ width: freezeWidth, height: freezeHeight });\n t.setOffset({ left: freezeWidth, height: freezeHeight });\n l.setOffset({ top: freezeHeight, width: freezeWidth });\n br.setOffset({ left: freezeWidth, top: freezeHeight });\n } else {\n tl.hide();\n t.hide();\n l.hide();\n br.setOffset({ left: 0, top: 0 });\n }\n }\n\n resetAreaOffset() {\n // console.log('offset:', offset);\n const offset = this.data.getSelectedRect();\n const coffset = this.data.getClipboardRect();\n setAllAreaOffset.call(this, offset);\n setAllClipboardOffset.call(this, coffset);\n this.resetOffset();\n }\n\n resetBRTAreaOffset() {\n const offset = this.data.getSelectedRect();\n const coffset = this.data.getClipboardRect();\n setBRAreaOffset.call(this, offset);\n setTAreaOffset.call(this, offset);\n setBRClipboardOffset.call(this, coffset);\n setTClipboardOffset.call(this, coffset);\n this.resetOffset();\n }\n\n resetBRLAreaOffset() {\n const offset = this.data.getSelectedRect();\n const coffset = this.data.getClipboardRect();\n setBRAreaOffset.call(this, offset);\n setLAreaOffset.call(this, offset);\n setBRClipboardOffset.call(this, coffset);\n setLClipboardOffset.call(this, coffset);\n this.resetOffset();\n }\n\n set(ri, ci, indexesUpdated = true) {\n const { data } = this;\n const cellRange = data.calSelectedRangeByStart(ri, ci);\n const { sri, sci } = cellRange;\n if (indexesUpdated) {\n let [cri, cci] = [ri, ci];\n if (ri < 0) cri = 0;\n if (ci < 0) cci = 0;\n data.selector.setIndexes(cri, cci);\n this.indexes = [cri, cci];\n }\n\n this.moveIndexes = [sri, sci];\n // this.sIndexes = sIndexes;\n // this.eIndexes = eIndexes;\n this.range = cellRange;\n this.resetAreaOffset();\n this.el.show();\n }\n\n setEnd(ri, ci, moving = true) {\n const { data, lastri, lastci } = this;\n if (moving) {\n if (ri === lastri && ci === lastci) return;\n this.lastri = ri;\n this.lastci = ci;\n }\n this.range = data.calSelectedRangeByEnd(ri, ci);\n setAllAreaOffset.call(this, this.data.getSelectedRect());\n }\n\n reset() {\n // console.log('::::', this.data);\n const { eri, eci } = this.data.selector.range;\n this.setEnd(eri, eci);\n }\n\n showAutofill(ri, ci) {\n if (ri === -1 && ci === -1) return;\n // console.log('ri:', ri, ', ci:', ci);\n // const [sri, sci] = this.sIndexes;\n // const [eri, eci] = this.eIndexes;\n const {\n sri, sci, eri, eci,\n } = this.range;\n const [nri, nci] = [ri, ci];\n // const rn = eri - sri;\n // const cn = eci - sci;\n const srn = sri - ri;\n const scn = sci - ci;\n const ern = eri - ri;\n const ecn = eci - ci;\n if (scn > 0) {\n // left\n // console.log('left');\n this.arange = new CellRange(sri, nci, eri, sci - 1);\n // this.saIndexes = [sri, nci];\n // this.eaIndexes = [eri, sci - 1];\n // data.calRangeIndexes2(\n } else if (srn > 0) {\n // top\n // console.log('top');\n // nri = sri;\n this.arange = new CellRange(nri, sci, sri - 1, eci);\n // this.saIndexes = [nri, sci];\n // this.eaIndexes = [sri - 1, eci];\n } else if (ecn < 0) {\n // right\n // console.log('right');\n // nci = eci;\n this.arange = new CellRange(sri, eci + 1, eri, nci);\n // this.saIndexes = [sri, eci + 1];\n // this.eaIndexes = [eri, nci];\n } else if (ern < 0) {\n // bottom\n // console.log('bottom');\n // nri = eri;\n this.arange = new CellRange(eri + 1, sci, nri, eci);\n // this.saIndexes = [eri + 1, sci];\n // this.eaIndexes = [nri, eci];\n } else {\n // console.log('else:');\n this.arange = null;\n // this.saIndexes = null;\n // this.eaIndexes = null;\n return;\n }\n if (this.arange !== null) {\n // console.log(this.saIndexes, ':', this.eaIndexes);\n const offset = this.data.getRect(this.arange);\n offset.width += 2;\n offset.height += 2;\n const {\n br, l, t, tl,\n } = this;\n br.showAutofill(calBRAreaOffset.call(this, offset));\n l.showAutofill(calLAreaOffset.call(this, offset));\n t.showAutofill(calTAreaOffset.call(this, offset));\n tl.showAutofill(offset);\n }\n }\n\n hideAutofill() {\n ['br', 'l', 't', 'tl'].forEach((property) => {\n this[property].hideAutofill();\n });\n }\n\n showClipboard() {\n const coffset = this.data.getClipboardRect();\n setAllClipboardOffset.call(this, coffset);\n ['br', 'l', 't', 'tl'].forEach((property) => {\n this[property].showClipboard();\n });\n }\n\n hideClipboard() {\n ['br', 'l', 't', 'tl'].forEach((property) => {\n this[property].hideClipboard();\n });\n }\n}\n","import { h } from './element';\nimport { bindClickoutside, unbindClickoutside } from './event';\nimport { cssPrefix } from '../config';\n\nfunction inputMovePrev(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n const { filterItems } = this;\n if (filterItems.length <= 0) return;\n if (this.itemIndex >= 0) filterItems[this.itemIndex].toggle();\n this.itemIndex -= 1;\n if (this.itemIndex < 0) {\n this.itemIndex = filterItems.length - 1;\n }\n filterItems[this.itemIndex].toggle();\n}\n\nfunction inputMoveNext(evt) {\n evt.stopPropagation();\n const { filterItems } = this;\n if (filterItems.length <= 0) return;\n if (this.itemIndex >= 0) filterItems[this.itemIndex].toggle();\n this.itemIndex += 1;\n if (this.itemIndex > filterItems.length - 1) {\n this.itemIndex = 0;\n }\n filterItems[this.itemIndex].toggle();\n}\n\nfunction inputEnter(evt) {\n evt.preventDefault();\n const { filterItems } = this;\n if (filterItems.length <= 0) return;\n evt.stopPropagation();\n if (this.itemIndex < 0) this.itemIndex = 0;\n filterItems[this.itemIndex].el.click();\n this.hide();\n}\n\nfunction inputKeydownHandler(evt) {\n const { keyCode } = evt;\n if (evt.ctrlKey) {\n evt.stopPropagation();\n }\n switch (keyCode) {\n case 37: // left\n evt.stopPropagation();\n break;\n case 38: // up\n inputMovePrev.call(this, evt);\n break;\n case 39: // right\n evt.stopPropagation();\n break;\n case 40: // down\n inputMoveNext.call(this, evt);\n break;\n case 13: // enter\n inputEnter.call(this, evt);\n break;\n case 9:\n inputEnter.call(this, evt);\n break;\n default:\n evt.stopPropagation();\n break;\n }\n}\n\nexport default class Suggest {\n constructor(items, itemClick, width = '200px') {\n this.filterItems = [];\n this.items = items;\n this.el = h('div', `${cssPrefix}-suggest`).css('width', width).hide();\n this.itemClick = itemClick;\n this.itemIndex = -1;\n }\n\n setOffset(v) {\n this.el.cssRemoveKeys('top', 'bottom')\n .offset(v);\n }\n\n hide() {\n const { el } = this;\n this.filterItems = [];\n this.itemIndex = -1;\n el.hide();\n unbindClickoutside(this.el.parent());\n }\n\n setItems(items) {\n this.items = items;\n // this.search('');\n }\n\n search(word) {\n let { items } = this;\n if (!/^\\s*$/.test(word)) {\n items = items.filter(it => (it.key || it).startsWith(word.toUpperCase()));\n }\n items = items.map((it) => {\n let { title } = it;\n if (title) {\n if (typeof title === 'function') {\n title = title();\n }\n } else {\n title = it;\n }\n const item = h('div', `${cssPrefix}-item`)\n .child(title)\n .on('click.stop', () => {\n this.itemClick(it);\n this.hide();\n });\n if (it.label) {\n item.child(h('div', 'label').html(it.label));\n }\n return item;\n });\n this.filterItems = items;\n if (items.length <= 0) {\n return;\n }\n const { el } = this;\n // items[0].toggle();\n el.html('').children(...items).show();\n bindClickoutside(el.parent(), () => { this.hide(); });\n }\n\n bindInputEvents(input) {\n input.on('keydown', evt => inputKeydownHandler.call(this, evt));\n }\n}\n","import { Element, h } from './element';\nimport { cssPrefix } from '../config';\n\nexport default class Icon extends Element {\n constructor(name) {\n super('div', `${cssPrefix}-icon`);\n this.iconNameEl = h('div', `${cssPrefix}-icon-img ${name}`);\n this.child(this.iconNameEl);\n }\n\n setName(name) {\n this.iconNameEl.className(`${cssPrefix}-icon-img ${name}`);\n }\n}\n","import { h } from './element';\nimport Icon from './icon';\nimport { t } from '../locale/locale';\n\nfunction addMonth(date, step) {\n date.setMonth(date.getMonth() + step);\n}\n\nfunction weekday(date, index) {\n const d = new Date(date);\n d.setDate(index - date.getDay() + 1);\n return d;\n}\n\nfunction monthDays(year, month, cdate) {\n // the first day of month\n const startDate = new Date(year, month, 1, 23, 59, 59);\n const datess = [[], [], [], [], [], []];\n for (let i = 0; i < 6; i += 1) {\n for (let j = 0; j < 7; j += 1) {\n const index = i * 7 + j;\n const d = weekday(startDate, index);\n const disabled = d.getMonth() !== month;\n // console.log('d:', d, ', cdate:', cdate);\n const active = d.getMonth() === cdate.getMonth() && d.getDate() === cdate.getDate();\n datess[i][j] = { d, disabled, active };\n }\n }\n return datess;\n}\n\nexport default class Calendar {\n constructor(value) {\n this.value = value;\n this.cvalue = new Date(value);\n\n this.headerLeftEl = h('div', 'calendar-header-left');\n this.bodyEl = h('tbody', '');\n this.buildAll();\n this.el = h('div', 'x-spreadsheet-calendar')\n .children(\n h('div', 'calendar-header').children(\n this.headerLeftEl,\n h('div', 'calendar-header-right').children(\n h('a', 'calendar-prev')\n .on('click.stop', () => this.prev())\n .child(new Icon('chevron-left')),\n h('a', 'calendar-next')\n .on('click.stop', () => this.next())\n .child(new Icon('chevron-right')),\n ),\n ),\n h('table', 'calendar-body').children(\n h('thead', '').child(\n h('tr', '').children(\n ...t('calendar.weeks').map(week => h('th', 'cell').child(week)),\n ),\n ),\n this.bodyEl,\n ),\n );\n this.selectChange = () => {};\n }\n\n setValue(value) {\n this.value = value;\n this.cvalue = new Date(value);\n this.buildAll();\n }\n\n prev() {\n const { value } = this;\n addMonth(value, -1);\n this.buildAll();\n }\n\n next() {\n const { value } = this;\n addMonth(value, 1);\n this.buildAll();\n }\n\n buildAll() {\n this.buildHeaderLeft();\n this.buildBody();\n }\n\n buildHeaderLeft() {\n const { value } = this;\n this.headerLeftEl.html(`${t('calendar.months')[value.getMonth()]} ${value.getFullYear()}`);\n }\n\n buildBody() {\n const { value, cvalue, bodyEl } = this;\n const mDays = monthDays(value.getFullYear(), value.getMonth(), cvalue);\n const trs = mDays.map((it) => {\n const tds = it.map((it1) => {\n let cls = 'cell';\n if (it1.disabled) cls += ' disabled';\n if (it1.active) cls += ' active';\n return h('td', '').child(\n h('div', cls)\n .on('click.stop', () => {\n this.selectChange(it1.d);\n })\n .child(it1.d.getDate().toString()),\n );\n });\n return h('tr', '').children(...tds);\n });\n bodyEl.html('').children(...trs);\n }\n}\n","import Calendar from './calendar';\nimport { h } from './element';\nimport { cssPrefix } from '../config';\n\nexport default class Datepicker {\n constructor() {\n this.calendar = new Calendar(new Date());\n this.el = h('div', `${cssPrefix}-datepicker`).child(\n this.calendar.el,\n ).hide();\n }\n\n setValue(date) {\n // console.log(':::::::', date, typeof date, date instanceof string);\n const { calendar } = this;\n if (typeof date === 'string') {\n // console.log(/^\\d{4}-\\d{1,2}-\\d{1,2}$/.test(date));\n if (/^\\d{4}-\\d{1,2}-\\d{1,2}$/.test(date)) {\n calendar.setValue(new Date(date.replace(new RegExp('-', 'g'), '/')));\n }\n } else if (date instanceof Date) {\n calendar.setValue(date);\n }\n return this;\n }\n\n change(cb) {\n this.calendar.selectChange = (d) => {\n cb(d);\n this.hide();\n };\n }\n\n show() {\n this.el.show();\n }\n\n hide() {\n this.el.hide();\n }\n}\n","//* global window */\nimport { h } from './element';\nimport Suggest from './suggest';\nimport Datepicker from './datepicker';\nimport { cssPrefix } from '../config';\n// import { mouseMoveUp } from '../event';\n\nfunction resetTextareaSize() {\n 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 const { suggest, textlineEl, validator } = this;\n this.inputText = v;\n if (validator) {\n if (validator.type === 'list') {\n suggest.search(v);\n } else {\n suggest.hide();\n }\n } else {\n const start = v.lastIndexOf('=');\n if (start !== -1) {\n suggest.search(v.substring(start + 1));\n } else {\n suggest.hide();\n }\n }\n textlineEl.html(v);\n resetTextareaSize.call(this);\n this.change('input', v);\n}\n\nfunction setTextareaRange(position) {\n const { el } = this.textEl;\n setTimeout(() => {\n el.focus();\n el.setSelectionRange(position, position);\n }, 0);\n}\n\nfunction setText(text, position) {\n const { textEl, textlineEl } = this;\n // firefox bug\n textEl.el.blur();\n\n textEl.val(text);\n textlineEl.html(text);\n setTextareaRange.call(this, position);\n}\n\nfunction suggestItemClick(it) {\n const { inputText, validator } = this;\n let position = 0;\n if (validator && validator.type === 'list') {\n this.inputText = it;\n position = this.inputText.length;\n } else {\n const start = inputText.lastIndexOf('=');\n const sit = inputText.substring(0, start + 1);\n let eit = inputText.substring(start + 1);\n if (eit.indexOf(')') !== -1) {\n eit = eit.substring(eit.indexOf(')'));\n } else {\n eit = '';\n }\n this.inputText = `${sit + it.key}(`;\n // console.log('inputText:', this.inputText);\n position = this.inputText.length;\n this.inputText += `)${eit}`;\n }\n setText.call(this, this.inputText, position);\n}\n\nfunction resetSuggestItems() {\n this.suggest.setItems(this.formulas);\n}\n\nfunction dateFormat(d) {\n let month = d.getMonth() + 1;\n let date = d.getDate();\n if (month < 10) month = `0${month}`;\n if (date < 10) date = `0${date}`;\n return `${d.getFullYear()}-${month}-${date}`;\n}\n\nexport default class Editor {\n constructor(formulas, viewFn, rowHeight) {\n this.viewFn = viewFn;\n this.rowHeight = rowHeight;\n this.formulas = formulas;\n this.suggest = new Suggest(formulas, (it) => {\n suggestItemClick.call(this, it);\n });\n this.datepicker = new Datepicker();\n this.datepicker.change((d) => {\n // console.log('d:', d);\n this.setText(dateFormat(d));\n this.clear();\n });\n this.areaEl = h('div', `${cssPrefix}-editor-area`)\n .children(\n this.textEl = h('textarea', '')\n .on('input', evt => inputEventHandler.call(this, evt)),\n this.textlineEl = h('div', 'textline'),\n this.suggest.el,\n this.datepicker.el,\n )\n .on('mousemove.stop', () => {})\n .on('mousedown.stop', () => {});\n this.el = h('div', `${cssPrefix}-editor`)\n .child(this.areaEl).hide();\n this.suggest.bindInputEvents(this.textEl);\n\n this.areaOffset = null;\n this.freeze = { w: 0, h: 0 };\n this.cell = null;\n this.inputText = '';\n this.change = () => {};\n }\n\n setFreezeLengths(width, height) {\n this.freeze.w = width;\n this.freeze.h = height;\n }\n\n clear() {\n // const { cell } = this;\n // const cellText = (cell && cell.text) || '';\n if (this.inputText !== '') {\n this.change('finished', this.inputText);\n }\n this.cell = null;\n this.areaOffset = null;\n this.inputText = '';\n this.el.hide();\n this.textEl.val('');\n this.textlineEl.html('');\n resetSuggestItems.call(this);\n this.datepicker.hide();\n }\n\n setOffset(offset, suggestPosition = 'top') {\n const {\n textEl, areaEl, suggest, freeze, el,\n } = this;\n if (offset) {\n this.areaOffset = offset;\n const {\n left, top, width, height, l, t,\n } = offset;\n // console.log('left:', left, ',top:', top, ', freeze:', freeze);\n const elOffset = { left: 0, top: 0 };\n // top left\n if (freeze.w > l && freeze.h > t) {\n //\n } else if (freeze.w < l && freeze.h < t) {\n elOffset.left = freeze.w;\n elOffset.top = freeze.h;\n } else if (freeze.w > l) {\n elOffset.top = freeze.h;\n } else if (freeze.h > t) {\n elOffset.left = freeze.w;\n }\n el.offset(elOffset);\n areaEl.offset({ left: left - elOffset.left - 0.8, top: top - elOffset.top - 0.8 });\n textEl.offset({ width: width - 9 + 0.8, height: height - 3 + 0.8 });\n const sOffset = { left: 0 };\n sOffset[suggestPosition] = height;\n suggest.setOffset(sOffset);\n suggest.hide();\n }\n }\n\n setCell(cell, validator) {\n // console.log('::', validator);\n const { el, datepicker, suggest } = this;\n el.show();\n this.cell = cell;\n const text = (cell && cell.text) || '';\n this.setText(text);\n\n this.validator = validator;\n if (validator) {\n const { type } = validator;\n if (type === 'date') {\n datepicker.show();\n if (!/^\\s*$/.test(text)) {\n datepicker.setValue(text);\n }\n }\n if (type === 'list') {\n suggest.setItems(validator.values());\n suggest.search('');\n }\n }\n }\n\n setText(text) {\n this.inputText = text;\n // console.log('text>>:', text);\n setText.call(this, text, text.length);\n resetTextareaSize.call(this);\n }\n}\n","import { h } from './element';\nimport { bindClickoutside, unbindClickoutside } from './event';\nimport { cssPrefix } from '../config';\nimport { tf } from '../locale/locale';\n\nconst menuItems = [\n { key: 'copy', title: tf('contextmenu.copy'), label: 'Ctrl+C' },\n { key: 'cut', title: tf('contextmenu.cut'), label: 'Ctrl+X' },\n { key: 'paste', title: tf('contextmenu.paste'), label: 'Ctrl+V' },\n { key: 'paste-value', title: tf('contextmenu.pasteValue'), label: 'Ctrl+Shift+V' },\n { key: 'paste-format', title: tf('contextmenu.pasteFormat'), label: 'Ctrl+Alt+V' },\n { key: 'divider' },\n { key: 'insert-row', title: tf('contextmenu.insertRow') },\n { key: 'insert-column', title: tf('contextmenu.insertColumn') },\n { key: 'divider' },\n { key: 'delete-row', title: tf('contextmenu.deleteRow') },\n { key: 'delete-column', title: tf('contextmenu.deleteColumn') },\n { key: 'delete-cell-text', title: tf('contextmenu.deleteCellText') },\n { key: 'divider' },\n { key: 'validation', title: tf('contextmenu.validation') },\n];\n\nfunction buildMenuItem(item) {\n if (item.key === 'divider') {\n return h('div', `${cssPrefix}-item divider`);\n }\n return h('div', `${cssPrefix}-item`)\n .on('click', () => {\n this.itemClick(item.key);\n this.hide();\n })\n .children(\n item.title(),\n h('div', 'label').child(item.label || ''),\n );\n}\n\nfunction buildMenu() {\n return menuItems.map(it => buildMenuItem.call(this, it));\n}\n\nexport default class ContextMenu {\n constructor(viewFn, isHide = false) {\n this.el = h('div', `${cssPrefix}-contextmenu`)\n .children(...buildMenu.call(this))\n .hide();\n this.viewFn = viewFn;\n this.itemClick = () => {};\n this.isHide = isHide;\n }\n\n hide() {\n const { el } = this;\n el.hide();\n unbindClickoutside(el);\n }\n\n setPosition(x, y) {\n if (this.isHide) return;\n const { el } = this;\n const { 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 top -= height;\n }\n if (view.width - x <= width) {\n left -= width;\n }\n el.offset({ left, top });\n bindClickoutside(el);\n }\n}\n","const baseFonts = [\n { key: 'Arial', title: 'Arial' },\n { key: 'Helvetica', title: 'Helvetica' },\n { key: 'Source Sans Pro', title: 'Source Sans Pro' },\n { key: 'Comic Sans MS', title: 'Comic Sans MS' },\n { key: 'Courier New', title: 'Courier New' },\n { key: 'Verdana', title: 'Verdana' },\n { key: 'Lato', title: 'Lato' },\n];\n\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","import { expr2xy, xy2expr } from './alphabet';\n\n// Converting infix expression to a suffix expression\n// src: AVERAGE(SUM(A1,A2), B1) + 50 + B20\n// return: [A1, A2], SUM[, B1],AVERAGE,50,+,B20,+\nconst infixExprToSuffixExpr = (src) => {\n const operatorStack = [];\n const stack = [];\n let subStrs = []; // SUM, A1, B2, 50 ...\n let fnArgType = 0; // 1 => , 2 => :\n let fnArgOperator = '';\n let fnArgsLen = 1; // A1,A2,A3...\n 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 // console.log('subStrs:', subStrs.join(''), stack);\n if (c !== '(' && subStrs.length > 0) {\n stack.push(subStrs.join(''));\n }\n if (c === ')') {\n let c1 = operatorStack.pop();\n if (fnArgType === 2) {\n // fn argument range => A1:B5\n try {\n const [ex, ey] = expr2xy(stack.pop());\n const [sx, sy] = expr2xy(stack.pop());\n // console.log('::', sx, sy, ex, ey);\n let rangelen = 0;\n for (let x = sx; x <= ex; x += 1) {\n for (let y = sy; y <= ey; y += 1) {\n stack.push(xy2expr(x, y));\n rangelen += 1;\n }\n }\n stack.push([c1, rangelen]);\n } catch (e) {\n // console.log(e);\n }\n } else if (fnArgType === 1 || fnArgType === 3) {\n if (fnArgType === 3) stack.push(fnArgOperator);\n // fn argument => A1,A2,B5\n stack.push([c1, fnArgsLen]);\n fnArgsLen = 1;\n } else {\n // console.log('c1:', c1, fnArgType, stack, operatorStack);\n while (c1 !== '(') {\n stack.push(c1);\n if (operatorStack.length <= 0) break;\n c1 = operatorStack.pop();\n }\n }\n fnArgType = 0;\n } else if (c === '=' || c === '>' || c === '<') {\n const nc = src.charAt(i + 1);\n fnArgOperator = c;\n if (nc === '=') {\n fnArgOperator += nc;\n i += 1;\n }\n fnArgType = 3;\n } else if (c === ':') {\n fnArgType = 2;\n } else if (c === ',') {\n if (fnArgType === 3) {\n stack.push(fnArgOperator);\n }\n fnArgType = 1;\n fnArgsLen += 1;\n } else if (c === '(' && subStrs.length > 0) {\n // function\n operatorStack.push(subStrs.join(''));\n } else {\n // priority: */ > +-\n // console.log(operatorStack, c, stack);\n if (operatorStack.length > 0 && (c === '+' || c === '-')) {\n let top = operatorStack[operatorStack.length - 1];\n if (top !== '(') stack.push(operatorStack.pop());\n if (top === '*' || top === '/') {\n while (operatorStack.length > 0) {\n top = operatorStack[operatorStack.length - 1];\n if (top !== '(') stack.push(operatorStack.pop());\n else break;\n }\n }\n }\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, cellList) => {\n const stack = [];\n // console.log(':::::formulaMap:', formulaMap);\n for (let i = 0; i < srcStack.length; i += 1) {\n // console.log(':::>>>', srcStack[i]);\n const expr = srcStack[i];\n const fc = expr[0];\n if (expr === '+') {\n const top = stack.pop();\n stack.push(Number(stack.pop()) + Number(top));\n } else if (expr === '-') {\n const top = stack.pop();\n stack.push(Number(stack.pop()) - Number(top));\n } else if (expr === '*') {\n stack.push(Number(stack.pop()) * Number(stack.pop()));\n } else if (expr === '/') {\n const top = stack.pop();\n stack.push(Number(stack.pop()) / Number(top));\n } else if (fc === '=' || fc === '>' || fc === '<') {\n const top = stack.pop();\n const Fn = Function;\n stack.push(new Fn(`return ${stack.pop()} ${expr === '=' ? '==' : expr} ${top}`)());\n } else if (Array.isArray(expr)) {\n const [formula, len] = expr;\n const params = [];\n for (let j = 0; j < len; j += 1) {\n params.push(stack.pop());\n }\n // console.log('::::params:', formulaMap, expr, formula, params);\n stack.push(formulaMap[formula].render(params.reverse()));\n } else {\n // console.log('cellList:', cellList, expr);\n if (cellList.includes(expr)) {\n return 0;\n }\n if ((fc >= 'a' && fc <= 'z') || (fc >= 'A' && fc <= 'Z')) {\n cellList.push(expr);\n }\n stack.push(evalSubExpr(expr, cellRender));\n }\n // console.log('stack:', stack);\n }\n return stack[0];\n};\n\nconst cellRender = (src, formulaMap, getCellText, cellList = []) => {\n if (src[0] === '=') {\n const stack = infixExprToSuffixExpr(src.substring(1));\n if (stack.length <= 0) return src;\n return evalSuffixExpr(\n stack,\n formulaMap,\n (x, y) => cellRender(getCellText(x, y), formulaMap, getCellText, cellList),\n cellList,\n );\n }\n return src;\n};\n\nexport default {\n render: cellRender,\n};\nexport {\n infixExprToSuffixExpr,\n};\n","/**\n formula:\n key\n title\n render\n*/\nimport { tf } from '../locale/locale';\n\nconst baseFormulas = [\n {\n key: 'SUM',\n title: tf('formula.sum'),\n render: ary => ary.reduce((a, b) => Number(a) + Number(b), 0),\n },\n {\n key: 'AVERAGE',\n title: tf('formula.average'),\n render: ary => ary.reduce((a, b) => Number(a) + Number(b), 0) / ary.length,\n },\n {\n key: 'MAX',\n title: tf('formula.max'),\n render: ary => Math.max(...ary.map(v => Number(v))),\n },\n {\n key: 'MIN',\n title: tf('formula.min'),\n render: ary => Math.min(...ary.map(v => Number(v))),\n },\n {\n key: 'IF',\n title: tf('formula._if'),\n render: ([b, t, f]) => (b ? t : f),\n },\n {\n key: 'AND',\n title: tf('formula.and'),\n render: ary => ary.every(it => it),\n },\n {\n key: 'OR',\n title: tf('formula.or'),\n render: ary => ary.some(it => it),\n },\n {\n key: 'CONCAT',\n title: tf('formula.concat'),\n render: ary => ary.join(''),\n },\n /* support: 1 + A1 + B2 * 3\n {\n key: 'DIVIDE',\n title: tf('formula.divide'),\n render: ary => ary.reduce((a, b) => Number(a) / Number(b)),\n },\n {\n key: 'PRODUCT',\n title: tf('formula.product'),\n render: ary => ary.reduce((a, b) => Number(a) * Number(b),1),\n },\n {\n key: 'SUBTRACT',\n title: tf('formula.subtract'),\n render: ary => ary.reduce((a, b) => Number(a) - Number(b)),\n },\n */\n];\n\nconst formulas = baseFormulas;\n\n// const formulas = (formulaAry = []) => {\n// const formulaMap = {};\n// baseFormulas.concat(formulaAry).forEach((f) => {\n// formulaMap[f.key] = f;\n// });\n// return formulaMap;\n// };\nconst formulam = {};\nbaseFormulas.forEach((f) => {\n formulam[f.key] = f;\n});\n\nexport default {\n};\n\nexport {\n formulam,\n formulas,\n baseFormulas,\n};\n","import { tf } from '../locale/locale';\n\nconst formatStringRender = v => v;\n\nconst formatNumberRender = (v) => {\n if (/^(-?\\d*.?\\d*)$/.test(v)) {\n const v1 = Number(v).toFixed(2).toString();\n const [first, ...parts] = v1.split('\\\\.');\n return [first.replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,'), ...parts];\n }\n return v;\n};\n\nconst baseFormats = [\n {\n key: 'normal',\n title: tf('format.normal'),\n type: 'string',\n render: formatStringRender,\n },\n {\n key: 'text',\n title: tf('format.text'),\n type: 'string',\n render: formatStringRender,\n },\n {\n key: 'number',\n title: tf('format.number'),\n type: 'number',\n label: '1,000.12',\n render: formatNumberRender,\n },\n {\n key: 'percent',\n title: tf('format.percent'),\n type: 'number',\n label: '10.12%',\n render: v => `${v}%`,\n },\n {\n key: 'rmb',\n title: tf('format.rmb'),\n type: 'number',\n label: '¥10.00',\n render: v => `¥${formatNumberRender(v)}`,\n },\n {\n key: 'usd',\n title: tf('format.usd'),\n type: 'number',\n label: '$10.00',\n render: v => `$${formatNumberRender(v)}`,\n },\n {\n key: 'eur',\n title: tf('format.eur'),\n type: 'number',\n label: '€10.00',\n render: v => `€${formatNumberRender(v)}`,\n },\n {\n key: 'date',\n title: tf('format.date'),\n type: 'date',\n label: '26/09/2008',\n render: formatStringRender,\n },\n {\n key: 'time',\n title: tf('format.time'),\n type: 'date',\n label: '15:59:00',\n render: formatStringRender,\n },\n {\n key: 'datetime',\n title: tf('format.datetime'),\n type: 'date',\n label: '26/09/2008 15:59:00',\n render: formatStringRender,\n },\n {\n key: 'duration',\n title: tf('format.duration'),\n type: 'date',\n label: '24:01:00',\n render: formatStringRender,\n },\n];\n\n// const formats = (ary = []) => {\n// const map = {};\n// baseFormats.concat(ary).forEach((f) => {\n// map[f.key] = f;\n// });\n// return map;\n// };\nconst formatm = {};\nbaseFormats.forEach((f) => {\n formatm[f.key] = f;\n});\n\nexport default {\n};\nexport {\n formatm,\n baseFormats,\n};\n","/* global window */\nfunction dpr() {\n return window.devicePixelRatio || 1;\n}\n\nfunction thinLineWidth() {\n return dpr() - 0.5;\n}\n\nfunction npx(px) {\n return parseInt(px * dpr(), 10);\n}\n\nfunction npxLine(px) {\n const n = npx(px);\n return n > 0 ? n - 0.5 : 0.5;\n}\n\nclass DrawBox {\n constructor(x, y, w, h, padding = 0) {\n this.x = x;\n this.y = y;\n this.width = w;\n this.height = h;\n this.padding = padding;\n this.bgcolor = '#ffffff';\n // border: [width, style, color]\n this.borderTop = null;\n this.borderRight = null;\n this.borderBottom = null;\n this.borderLeft = null;\n }\n\n setBorders({\n top, bottom, left, right,\n }) {\n if (top) this.borderTop = top;\n if (right) this.borderRight = right;\n if (bottom) this.borderBottom = bottom;\n if (left) this.borderLeft = left;\n }\n\n innerWidth() {\n return this.width - (this.padding * 2);\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 y = y + height / 2 - hoffset;\n // y = y1;\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 === 'strike') {\n if (valign === 'bottom') {\n floffset.y = blheight / 2;\n } else if (valign === 'top') {\n floffset.y = -((blheight / 2) + 2);\n }\n }\n\n if (align === 'center') {\n floffset.x = blwidth / 2;\n } else if (align === 'right') {\n floffset.x = blwidth;\n }\n this.line(\n [tx - floffset.x, ty - floffset.y],\n [tx - floffset.x + blwidth, ty - floffset.y],\n );\n}\n\nclass Draw {\n constructor(el, width, height) {\n this.el = el;\n this.ctx = el.getContext('2d');\n this.resize(width, height);\n this.ctx.scale(dpr(), dpr());\n }\n\n resize(width, height) {\n // console.log('dpr:', dpr);\n this.el.style.width = `${width}px`;\n this.el.style.height = `${height}px`;\n this.el.width = npx(width);\n this.el.height = npx(height);\n }\n\n clear() {\n const { width, height } = this.el;\n this.ctx.clearRect(0, 0, width, height);\n return this;\n }\n\n attr(options) {\n Object.assign(this.ctx, options);\n return this;\n }\n\n save() {\n this.ctx.save();\n this.ctx.beginPath();\n return this;\n }\n\n restore() {\n this.ctx.restore();\n return this;\n }\n\n beginPath() {\n this.ctx.beginPath();\n return this;\n }\n\n translate(x, y) {\n this.ctx.translate(npx(x), npx(y));\n return this;\n }\n\n clearRect(x, y, w, h) {\n this.ctx.clearRect(x, y, w, h);\n return this;\n }\n\n fillRect(x, y, w, h) {\n this.ctx.fillRect(npx(x) - 0.5, npx(y) - 0.5, npx(w), npx(h));\n return this;\n }\n\n fillText(text, x, y) {\n this.ctx.fillText(text, npx(x), npx(y));\n return this;\n }\n\n /*\n txt: render text\n box: DrawBox\n attr: {\n align: left | center | right\n valign: top | middle | bottom\n color: '#333333',\n strike: false,\n font: {\n name: 'Arial',\n size: 14,\n bold: false,\n italic: false,\n }\n }\n textWrap: text wrapping\n */\n text(txt, box, attr = {}, textWrap = true) {\n const { ctx } = this;\n const {\n align, valign, font, color, strike, underline,\n } = attr;\n const tx = box.textx(align);\n ctx.save();\n ctx.beginPath();\n this.attr({\n textAlign: align,\n textBaseline: valign,\n font: `${font.italic ? 'italic' : ''} ${font.bold ? 'bold' : ''} ${npx(font.size)}px ${font.name}`,\n fillStyle: color,\n strokeStyle: color,\n });\n const 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 (strike) {\n drawFontLine.call(this, 'strike', 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 (textLine.len > 0) {\n this.fillText(txt.substring(textLine.start), tx, ty);\n if (strike) {\n drawFontLine.call(this, 'strike', 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 (strike) {\n drawFontLine.call(this, 'strike', tx, ty, align, valign, font.size, txtWidth);\n }\n if (underline) {\n drawFontLine.call(this, 'underline', tx, ty, align, valign, font.size, txtWidth);\n }\n }\n ctx.restore();\n return this;\n }\n\n border(style, color) {\n const { ctx } = this;\n ctx.lineWidth = thinLineWidth;\n ctx.strokeStyle = color;\n // console.log('style:', style);\n if (style === 'medium') {\n ctx.lineWidth = npx(2) - 0.5;\n } else if (style === 'thick') {\n ctx.lineWidth = npx(3);\n } else if (style === 'dashed') {\n ctx.setLineDash([npx(3), npx(2)]);\n } else if (style === 'dotted') {\n ctx.setLineDash([npx(1), npx(1)]);\n } else if (style === 'double') {\n ctx.setLineDash([npx(2), 0]);\n }\n return this;\n }\n\n line(...xys) {\n const { ctx } = this;\n if (xys.length > 1) {\n const [x, y] = xys[0];\n ctx.moveTo(npxLine(x), npxLine(y));\n for (let i = 1; i < xys.length; i += 1) {\n const [x1, y1] = xys[i];\n ctx.lineTo(npxLine(x1), npxLine(y1));\n }\n ctx.stroke();\n }\n return this;\n }\n\n strokeBorders(box) {\n const { ctx } = this;\n ctx.save();\n ctx.beginPath();\n // border\n const {\n borderTop, borderRight, borderBottom, borderLeft,\n } = box;\n if (borderTop) {\n this.border(...borderTop);\n // console.log('box.topxys:', box.topxys());\n this.line(...box.topxys());\n }\n if (borderRight) {\n this.border(...borderRight);\n this.line(...box.rightxys());\n }\n if (borderBottom) {\n this.border(...borderBottom);\n this.line(...box.bottomxys());\n }\n if (borderLeft) {\n this.border(...borderLeft);\n this.line(...box.leftxys());\n }\n ctx.restore();\n }\n\n dropdown(box) {\n const { ctx } = this;\n const {\n x, y, width, height,\n } = box;\n const sx = x + width - 15;\n const sy = y + height - 15;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(npx(sx), npx(sy));\n ctx.lineTo(npx(sx + 8), npx(sy));\n ctx.lineTo(npx(sx + 4), npx(sy + 6));\n ctx.closePath();\n ctx.fillStyle = 'rgba(0, 0, 0, .45)';\n ctx.fill();\n ctx.restore();\n }\n\n error(box) {\n const { ctx } = this;\n const { x, y, width } = box;\n const sx = x + width - 1;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(npx(sx - 8), npx(y - 1));\n ctx.lineTo(npx(sx), npx(y - 1));\n ctx.lineTo(npx(sx), npx(y + 8));\n ctx.closePath();\n ctx.fillStyle = 'rgba(255, 0, 0, .65)';\n ctx.fill();\n ctx.restore();\n }\n\n rect(box, dtextcb) {\n const { ctx } = this;\n const {\n x, y, width, height, bgcolor,\n } = box;\n ctx.save();\n ctx.beginPath();\n ctx.fillStyle = bgcolor || '#fff';\n ctx.rect(npxLine(x + 1), npxLine(y + 1), npx(width - 2), npx(height - 2));\n ctx.clip();\n ctx.fill();\n dtextcb();\n ctx.restore();\n }\n}\n\nexport default {};\nexport {\n Draw,\n DrawBox,\n thinLineWidth,\n npx,\n};\n","import { stringAt } from '../core/alphabet';\nimport { getFontSizePxByPt } from '../core/font';\nimport _cell from '../core/cell';\nimport { formulam } from '../core/formula';\nimport { formatm } from '../core/format';\n\nimport {\n Draw, DrawBox, thinLineWidth, npx,\n} from '../canvas/draw';\n// gobal var\nconst cellPaddingWidth = 5;\nconst tableFixedHeaderCleanStyle = { fillStyle: '#f4f5f8' };\nconst tableGridStyle = {\n fillStyle: '#fff',\n lineWidth: thinLineWidth,\n strokeStyle: '#e6e6e6',\n};\nfunction tableFixedHeaderStyle() {\n return {\n textAlign: 'center',\n textBaseline: 'middle',\n font: `500 ${npx(12)}px Source Sans Pro`,\n fillStyle: '#585757',\n lineWidth: thinLineWidth(),\n strokeStyle: '#e6e6e6',\n };\n}\n\nfunction getDrawBox(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 renderCellBorders(bboxes, translateFunc) {\n const { draw } = this;\n if (bboxes) {\n const rset = new Set();\n // console.log('bboxes:', bboxes);\n bboxes.forEach(({ ri, ci, box }) => {\n if (!rset.has(ri)) {\n rset.add(ri);\n translateFunc(ri);\n }\n draw.strokeBorders(box);\n });\n }\n}\n*/\n\nfunction renderCell(rindex, cindex) {\n const { draw, data } = this;\n const { sortedRowMap } = data;\n let nrindex = rindex;\n if (sortedRowMap.has(rindex)) {\n nrindex = sortedRowMap.get(rindex);\n }\n\n const cell = data.getCell(nrindex, cindex);\n if (cell === null) return;\n\n const style = data.getCellStyleOrDefault(nrindex, cindex);\n // console.log('style:', style);\n const dbox = getDrawBox.call(this, rindex, cindex);\n dbox.bgcolor = style.bgcolor;\n if (style.border !== undefined) {\n dbox.setBorders(style.border);\n // bboxes.push({ ri: rindex, ci: cindex, box: dbox });\n draw.strokeBorders(dbox);\n }\n draw.rect(dbox, () => {\n // render text\n let cellText = _cell.render(cell.text || '', formulam, (y, x) => (data.getCellTextOrDefault(x, y)));\n if (style.format) {\n // console.log(data.formatm, '>>', cell.format);\n cellText = formatm[style.format].render(cellText);\n }\n const font = Object.assign({}, style.font);\n font.size = getFontSizePxByPt(font.size);\n // console.log('style:', style);\n draw.text(cellText, dbox, {\n align: style.align,\n valign: style.valign,\n font,\n color: style.color,\n strike: style.strike,\n underline: style.underline,\n }, style.textwrap);\n // error\n const error = data.validations.getError(rindex, cindex);\n if (error) {\n // console.log('error:', rindex, cindex, error);\n draw.error(dbox);\n }\n });\n}\n\nfunction renderAutofilter(viewRange) {\n const { data, draw } = this;\n if (viewRange) {\n const { autoFilter } = data;\n if (!autoFilter.active()) return;\n const afRange = autoFilter.hrange();\n if (viewRange.intersects(afRange)) {\n afRange.each((ri, ci) => {\n const dbox = getDrawBox.call(this, ri, ci);\n draw.dropdown(dbox);\n });\n }\n }\n}\n\nfunction renderContent(viewRange, fw, fh, tx, ty) {\n const { draw, data } = this;\n draw.save();\n draw.translate(fw, fh)\n .translate(tx, ty);\n\n const { exceptRowSet } = data;\n // const exceptRows = Array.from(exceptRowSet);\n const filteredTranslateFunc = (ri) => {\n const ret = exceptRowSet.has(ri);\n if (ret) {\n const height = data.rows.getHeight(ri);\n draw.translate(0, -height);\n }\n return !ret;\n };\n\n const exceptRowTotalHeight = data.exceptRowTotalHeight(viewRange.sri, viewRange.eri);\n // 1 render cell\n draw.save();\n draw.translate(0, -exceptRowTotalHeight);\n viewRange.each((ri, ci) => {\n renderCell.call(this, ri, ci);\n }, ri => filteredTranslateFunc(ri));\n draw.restore();\n\n\n // 2 render mergeCell\n const rset = new Set();\n draw.save();\n draw.translate(0, -exceptRowTotalHeight);\n data.eachMergesInView(viewRange, ({ sri, sci, eri }) => {\n if (!exceptRowSet.has(sri)) {\n renderCell.call(this, sri, sci);\n } else if (!rset.has(sri)) {\n rset.add(sri);\n const height = data.rows.sumHeight(sri, eri + 1);\n draw.translate(0, -height);\n }\n });\n draw.restore();\n\n // 3 render autofilter\n renderAutofilter.call(this, viewRange);\n\n draw.restore();\n}\n\nfunction renderSelectedHeaderCell(x, y, w, h) {\n const { draw } = this;\n draw.save();\n draw.attr({ fillStyle: 'rgba(75, 137, 255, 0.08)' })\n .fillRect(x, y, w, h);\n draw.restore();\n}\n\n// viewRange\n// type: all | left | top\n// w: the fixed width of header\n// h: the fixed height of header\n// tx: moving distance on x-axis\n// ty: moving distance on y-axis\nfunction renderFixedHeaders(type, viewRange, w, h, tx, ty) {\n const { draw, data } = this;\n const sumHeight = viewRange.h; // rows.sumHeight(viewRange.sri, viewRange.eri + 1);\n const sumWidth = viewRange.w; // cols.sumWidth(viewRange.sci, viewRange.eci + 1);\n const nty = ty + h;\n const ntx = tx + w;\n\n draw.save();\n // draw rect background\n draw.attr(tableFixedHeaderCleanStyle);\n if (type === 'all' || type === 'left') draw.fillRect(0, nty, w, sumHeight);\n if (type === 'all' || type === 'top') draw.fillRect(ntx, 0, sumWidth, h);\n\n const {\n sri, sci, eri, eci,\n } = data.selector.range;\n // console.log(data.selectIndexes);\n // draw text\n // text font, align...\n draw.attr(tableFixedHeaderStyle());\n // y-header-text\n if (type === 'all' || type === 'left') {\n data.rowEach(viewRange.sri, viewRange.eri, (i, y1, rowHeight) => {\n const y = nty + y1;\n const ii = i;\n draw.line([0, y], [w, y]);\n if (sri <= ii && ii < eri + 1) {\n renderSelectedHeaderCell.call(this, 0, y, w, rowHeight);\n }\n draw.fillText(ii + 1, w / 2, y + (rowHeight / 2));\n });\n draw.line([0, sumHeight + nty], [w, sumHeight + nty]);\n draw.line([w, nty], [w, sumHeight + nty]);\n }\n // x-header-text\n if (type === 'all' || type === 'top') {\n data.colEach(viewRange.sci, viewRange.eci, (i, x1, colWidth) => {\n const x = ntx + x1;\n const ii = i;\n draw.line([x, 0], [x, h]);\n if (sci <= ii && ii < eci + 1) {\n renderSelectedHeaderCell.call(this, x, 0, colWidth, h);\n }\n draw.fillText(stringAt(ii), x + (colWidth / 2), h / 2);\n });\n draw.line([sumWidth + ntx, 0], [sumWidth + ntx, h]);\n draw.line([0, h], [sumWidth + ntx, h]);\n }\n draw.restore();\n}\n\nfunction renderFixedLeftTopCell(fw, fh) {\n const { draw } = this;\n draw.save();\n // left-top-cell\n draw.attr({ fillStyle: '#f4f5f8' })\n .fillRect(0, 0, fw, fh);\n draw.restore();\n}\n\nfunction renderContentGrid({\n sri, sci, eri, eci, w, h,\n}, fw, fh, tx, ty) {\n const { draw, data } = this;\n const { settings } = data;\n\n draw.save();\n draw.attr(tableGridStyle)\n .translate(fw + tx, fh + ty);\n // const sumWidth = cols.sumWidth(sci, eci + 1);\n // const sumHeight = rows.sumHeight(sri, eri + 1);\n // console.log('sumWidth:', sumWidth);\n draw.clearRect(0, 0, w, h);\n if (!settings.showGrid) {\n draw.restore();\n return;\n }\n // console.log('rowStart:', rowStart, ', rowLen:', rowLen);\n data.rowEach(sri, eri, (i, y, ch) => {\n // console.log('y:', y);\n if (i !== sri) draw.line([0, y], [w, y]);\n if (i === eri) draw.line([0, y + ch], [w, y + ch]);\n });\n data.colEach(sci, eci, (i, x, cw) => {\n if (i !== sci) draw.line([x, 0], [x, h]);\n if (i === eci) draw.line([x + cw, 0], [x + cw, h]);\n });\n draw.restore();\n}\n\nfunction renderFreezeHighlightLine(fw, fh, ftw, fth) {\n const { draw, data } = this;\n const twidth = data.viewWidth() - fw;\n const theight = data.viewHeight() - fh;\n draw.save()\n .translate(fw, fh)\n .attr({ strokeStyle: 'rgba(75, 137, 255, .6)' });\n draw.line([0, fth], [twidth, fth]);\n draw.line([ftw, 0], [ftw, theight]);\n draw.restore();\n}\n\n/** end */\nclass Table {\n constructor(el, data) {\n this.el = el;\n this.draw = new Draw(el, data.viewWidth(), data.viewHeight());\n this.data = data;\n }\n\n render() {\n // resize canvas\n const { data } = this;\n const { rows, cols } = data;\n // fixed width of header\n const fw = cols.indexWidth;\n // fixed height of header\n const fh = rows.height;\n\n this.draw.resize(data.viewWidth(), data.viewHeight());\n this.clear();\n\n const viewRange = data.viewRange();\n // renderAll.call(this, viewRange, data.scroll);\n const tx = data.freezeTotalWidth();\n const ty = data.freezeTotalHeight();\n const { x, y } = data.scroll;\n // 1\n renderContentGrid.call(this, viewRange, fw, fh, tx, ty);\n renderContent.call(this, viewRange, fw, fh, -x, -y);\n renderFixedHeaders.call(this, 'all', viewRange, fw, fh, tx, ty);\n renderFixedLeftTopCell.call(this, fw, fh);\n const [fri, fci] = data.freeze;\n if (fri > 0 || fci > 0) {\n // 2\n if (fri > 0) {\n const vr = viewRange.clone();\n vr.sri = 0;\n vr.eri = fri - 1;\n vr.h = ty;\n renderContentGrid.call(this, vr, fw, fh, tx, 0);\n renderContent.call(this, vr, fw, fh, -x, 0);\n renderFixedHeaders.call(this, 'top', vr, fw, fh, tx, 0);\n }\n // 3\n if (fci > 0) {\n const vr = viewRange.clone();\n vr.sci = 0;\n vr.eci = fci - 1;\n vr.w = tx;\n renderContentGrid.call(this, vr, fw, fh, 0, ty);\n renderFixedHeaders.call(this, 'left', vr, fw, fh, 0, ty);\n renderContent.call(this, vr, fw, fh, 0, -y);\n }\n // 4\n const freezeViewRange = data.freezeViewRange();\n renderContentGrid.call(this, freezeViewRange, fw, fh, 0, 0);\n renderFixedHeaders.call(this, 'all', freezeViewRange, fw, fh, 0, 0);\n renderContent.call(this, freezeViewRange, fw, fh, 0, 0);\n // 5\n renderFreezeHighlightLine.call(this, fw, fh, tx, ty);\n }\n }\n\n clear() {\n this.draw.clear();\n }\n}\n\nexport default Table;\n","import { cssPrefix } from '../../config';\nimport tooltip from '../tooltip';\nimport { h } from '../element';\nimport { t } from '../../locale/locale';\n\nexport default class Item {\n // tooltip\n // tag: the subclass type\n // shortcut: shortcut key\n constructor(tag, shortcut, value) {\n this.tip = t(`toolbar.${tag.replace(/-[a-z]/g, c => c[1].toUpperCase())}`);\n this.tag = tag;\n this.shortcut = shortcut;\n this.value = value;\n this.el = this.element();\n this.change = () => {};\n }\n\n element() {\n const { tip } = this;\n return h('div', `${cssPrefix}-toolbar-btn`)\n .on('mouseenter', (evt) => {\n tooltip(tip, evt.target);\n })\n .attr('data-tooltip', tip);\n }\n\n setState() {}\n}\n","/* global document */\nimport { h } from './element';\nimport { bind } from './event';\nimport { cssPrefix } from '../config';\n\nexport default function tooltip(html, target) {\n if (target.classList.contains('active')) {\n return;\n }\n const {\n left, top, width, height,\n } = target.getBoundingClientRect();\n const el = h('div', `${cssPrefix}-tooltip`).html(html).show();\n document.body.appendChild(el.el);\n const elBox = el.box();\n // console.log('elBox:', elBox);\n el.css('left', `${left + (width / 2) - (elBox.width / 2)}px`)\n .css('top', `${top + height + 2}px`);\n\n bind(target, 'mouseleave', () => {\n if (document.body.contains(el.el)) {\n document.body.removeChild(el.el);\n }\n });\n\n bind(target, 'click', () => {\n if (document.body.contains(el.el)) {\n document.body.removeChild(el.el);\n }\n });\n}\n","import Item from './item';\n\nexport default class DropdownItem extends Item {\n dropdown() {}\n\n getValue(v) {\n return v;\n }\n\n element() {\n const { tag } = this;\n this.dd = this.dropdown();\n this.dd.change = it => this.change(tag, this.getValue(it));\n return super.element().child(\n this.dd,\n );\n }\n\n setState(v) {\n if (v) {\n this.value = v;\n this.dd.setTitle(v);\n }\n }\n}\n","import { Element, h } from './element';\nimport { bindClickoutside, unbindClickoutside } from './event';\nimport { cssPrefix } from '../config';\n\nexport default class Dropdown extends Element {\n constructor(title, width, showArrow, placement, ...children) {\n super('div', `${cssPrefix}-dropdown ${placement}`);\n this.title = title;\n this.change = () => {};\n 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 }\n\n setTitle(title) {\n this.title.html(title);\n this.hide();\n }\n\n show() {\n const { contentEl } = this;\n contentEl.show();\n this.parent().active();\n bindClickoutside(this.parent(), () => {\n this.hide();\n });\n }\n\n hide() {\n this.parent().active(false);\n this.contentEl.hide();\n unbindClickoutside(this.parent());\n }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport Icon from './icon';\nimport { cssPrefix } from '../config';\n\nfunction buildItemWithIcon(iconName) {\n return h('div', `${cssPrefix}-item`).child(new Icon(iconName));\n}\n\nexport default class DropdownAlign extends Dropdown {\n constructor(aligns, align) {\n const icon = new Icon(`align-${align}`);\n const naligns = aligns.map(it => buildItemWithIcon(`align-${it}`)\n .on('click', () => {\n this.setTitle(it);\n this.change(it);\n }));\n super(icon, 'auto', true, 'bottom-left', ...naligns);\n }\n\n setTitle(align) {\n this.title.setName(`align-${align}`);\n this.hide();\n }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownAlign from '../dropdown_align';\n\nexport default class Align extends DropdownItem {\n constructor(value) {\n super('align', '', value);\n }\n\n dropdown() {\n const { value } = this;\n return new DropdownAlign(['left', 'center', 'right'], value);\n }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownAlign from '../dropdown_align';\n\nexport default class Valign extends DropdownItem {\n constructor(value) {\n super('valign', '', value);\n }\n\n dropdown() {\n const { value } = this;\n return new DropdownAlign(['top', 'middle', 'bottom'], value);\n }\n}\n","import Item from './item';\nimport Icon from '../icon';\n\nexport default class ToggleItem extends Item {\n element() {\n const { tag } = this;\n return super.element()\n .child(new Icon(tag))\n .on('click', () => this.click());\n }\n\n click() {\n this.change(this.tag, this.toggle());\n }\n\n setState(active) {\n this.el.active(active);\n }\n\n toggle() {\n return this.el.toggle();\n }\n\n active() {\n return this.el.hasClass('active');\n }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Autofilter extends ToggleItem {\n constructor() {\n super('autofilter');\n }\n\n setState() {}\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Bold extends ToggleItem {\n constructor() {\n super('font-bold', 'Ctrl+B');\n }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Italic extends ToggleItem {\n constructor() {\n super('font-italic', 'Ctrl+I');\n }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Strike extends ToggleItem {\n constructor() {\n super('strike', 'Ctrl+U');\n }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Underline extends ToggleItem {\n constructor() {\n super('underline', 'Ctrl+U');\n }\n}\n","import { h } from './element';\nimport { cssPrefix } from '../config';\n\nconst themeColorPlaceHolders = ['#ffffff', '#000100', '#e7e5e6', '#445569', '#5b9cd6', '#ed7d31', '#a5a5a5', '#ffc001', '#4371c6', '#71ae47'];\n\nconst themeColors = [\n ['#f2f2f2', '#7f7f7f', '#d0cecf', '#d5dce4', '#deeaf6', '#fce5d5', '#ededed', '#fff2cd', '#d9e2f3', '#e3efd9'],\n ['#d8d8d8', '#595959', '#afabac', '#adb8ca', '#bdd7ee', '#f7ccac', '#dbdbdb', '#ffe59a', '#b3c6e7', '#c5e0b3'],\n ['#bfbfbf', '#3f3f3f', '#756f6f', '#8596b0', '#9cc2e6', '#f4b184', '#c9c9c9', '#fed964', '#8eaada', '#a7d08c'],\n ['#a5a5a5', '#262626', '#3a3839', '#333f4f', '#2e75b5', '#c45a10', '#7b7b7b', '#bf8e01', '#2f5596', '#538136'],\n ['#7f7f7f', '#0c0c0c', '#171516', '#222a35', '#1f4e7a', '#843c0a', '#525252', '#7e6000', '#203864', '#365624'],\n];\n\nconst standardColors = ['#c00000', '#fe0000', '#fdc101', '#ffff01', '#93d051', '#00b04e', '#01b0f1', '#0170c1', '#012060', '#7030a0'];\n\nfunction buildTd(bgcolor) {\n return h('td', '').child(\n h('div', `${cssPrefix}-color-palette-cell`)\n .on('click.stop', () => this.change(bgcolor))\n .css('background-color', bgcolor),\n );\n}\n\nexport default class ColorPalette {\n constructor() {\n this.el = h('div', `${cssPrefix}-color-palette`);\n this.change = () => {};\n const table = h('table', '').children(\n h('tbody', '').children(\n h('tr', `${cssPrefix}-theme-color-placeholders`).children(\n ...themeColorPlaceHolders.map(color => buildTd.call(this, color)),\n ),\n ...themeColors.map(it => h('tr', `${cssPrefix}-theme-colors`).children(\n ...it.map(color => buildTd.call(this, color)),\n )),\n h('tr', `${cssPrefix}-standard-colors`).children(\n ...standardColors.map(color => buildTd.call(this, color)),\n ),\n ),\n );\n this.el.child(table);\n }\n}\n","import Dropdown from './dropdown';\nimport Icon from './icon';\nimport ColorPalette from './color_palette';\n\nexport default class DropdownColor extends Dropdown {\n constructor(iconName, color) {\n const icon = new Icon(iconName)\n .css('height', '16px')\n .css('border-bottom', `3px solid ${color}`);\n const colorPalette = new ColorPalette();\n colorPalette.change = (v) => {\n this.setTitle(v);\n this.change(v);\n };\n super(icon, 'auto', false, 'bottom-left', colorPalette.el);\n }\n\n setTitle(color) {\n this.title.css('border-color', color);\n this.hide();\n }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport Icon from './icon';\nimport { cssPrefix } from '../config';\n\nconst lineTypes = [\n ['thin', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"1\" style=\"user-select: none;\"><line x1=\"0\" y1=\"0.5\" x2=\"50\" y2=\"0.5\" stroke-width=\"1\" stroke=\"black\" style=\"user-select: none;\"></line></svg>'],\n ['medium', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"2\" style=\"user-select: none;\"><line x1=\"0\" y1=\"1.0\" x2=\"50\" y2=\"1.0\" stroke-width=\"2\" stroke=\"black\" style=\"user-select: none;\"></line></svg>'],\n ['thick', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"3\" style=\"user-select: none;\"><line x1=\"0\" y1=\"1.5\" x2=\"50\" y2=\"1.5\" stroke-width=\"3\" stroke=\"black\" style=\"user-select: none;\"></line></svg>'],\n ['dashed', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"1\" style=\"user-select: none;\"><line x1=\"0\" y1=\"0.5\" x2=\"50\" y2=\"0.5\" stroke-width=\"1\" stroke=\"black\" stroke-dasharray=\"2\" style=\"user-select: none;\"></line></svg>'],\n ['dotted', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"1\" style=\"user-select: none;\"><line x1=\"0\" y1=\"0.5\" x2=\"50\" y2=\"0.5\" stroke-width=\"1\" stroke=\"black\" stroke-dasharray=\"1\" style=\"user-select: none;\"></line></svg>'],\n // ['double', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"3\" style=\"user-select: none;\"><line x1=\"0\" y1=\"0.5\" x2=\"50\" y2=\"0.5\" stroke-width=\"1\" stroke=\"black\" style=\"user-select: none;\"></line><line x1=\"0\" y1=\"2.5\" x2=\"50\" y2=\"2.5\" stroke-width=\"1\" stroke=\"black\" style=\"user-select: none;\"></line></svg>'],\n];\n\nexport default class DropdownLineType extends Dropdown {\n constructor(type) {\n const icon = new Icon('line-type');\n let beforei = 0;\n const lineTypeEls = lineTypes.map((it, iti) => h('div', `${cssPrefix}-item state ${type === it[0] ? 'checked' : ''}`)\n .on('click', () => {\n lineTypeEls[beforei].toggle('checked');\n lineTypeEls[iti].toggle('checked');\n beforei = iti;\n this.hide();\n this.change(it);\n })\n .child(\n h('div', `${cssPrefix}-line-type`).html(it[1]),\n ));\n\n super(icon, 'auto', false, 'bottom-left', ...lineTypeEls);\n }\n}\n","import { h } from './element';\nimport Icon from './icon';\nimport DropdownColor from './dropdown_color';\nimport DropdownLineType from './dropdown_linetype';\nimport { cssPrefix } from '../config';\n\nfunction buildTable(...trs) {\n return h('table', '').child(\n h('tbody', '').children(...trs),\n );\n}\n\nfunction buildTd(iconName) {\n return h('td', '').child(\n h('div', `${cssPrefix}-border-palette-cell`).child(\n new Icon(`border-${iconName}`),\n ).on('click', () => {\n this.mode = iconName;\n const { mode, style, color } = this;\n this.change({ mode, style, color });\n }),\n );\n}\n\nexport default class BorderPalette {\n constructor() {\n this.color = '#000';\n this.style = 'thin';\n this.mode = 'all';\n this.change = () => {};\n this.ddColor = new DropdownColor('line-color', this.color);\n this.ddColor.change = (color) => {\n this.color = color;\n };\n this.ddType = new DropdownLineType(this.style);\n this.ddType.change = ([s]) => {\n this.style = s;\n };\n this.el = h('div', `${cssPrefix}-border-palette`);\n const table = buildTable(\n h('tr', '').children(\n h('td', `${cssPrefix}-border-palette-left`).child(\n buildTable(\n h('tr', '').children(\n ...['all', 'inside', 'horizontal', 'vertical', 'outside'].map(it => buildTd.call(this, it)),\n ),\n h('tr', '').children(\n ...['left', 'top', 'right', 'bottom', 'none'].map(it => buildTd.call(this, it)),\n ),\n ),\n ),\n h('td', `${cssPrefix}-border-palette-right`).children(\n h('div', `${cssPrefix}-toolbar-btn`).child(this.ddColor.el),\n h('div', `${cssPrefix}-toolbar-btn`).child(this.ddType.el),\n ),\n ),\n );\n this.el.child(table);\n }\n}\n","import Dropdown from './dropdown';\nimport Icon from './icon';\nimport BorderPalette from './border_palette';\n\nexport default class DropdownBorder extends Dropdown {\n constructor() {\n const icon = new Icon('border-all');\n const borderPalette = new BorderPalette();\n borderPalette.change = (v) => {\n this.change(v);\n this.hide();\n };\n super(icon, 'auto', false, 'bottom-left', borderPalette.el);\n }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownBorder from '../dropdown_border';\n\nexport default class Border extends DropdownItem {\n constructor() {\n super('border');\n }\n\n dropdown() {\n return new DropdownBorder();\n }\n}\n","import Item from './item';\nimport Icon from '../icon';\n\nexport default class IconItem extends Item {\n element() {\n return super.element()\n .child(new Icon(this.tag))\n .on('click', () => this.change(this.tag));\n }\n\n setState(disabled) {\n this.el.disabled(disabled);\n }\n}\n","import IconItem from './icon_item';\n\nexport default class Clearformat extends IconItem {\n constructor() {\n super('clearformat');\n }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Paintformat extends ToggleItem {\n constructor() {\n super('paintformat');\n }\n\n setState() {}\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownColor from '../dropdown_color';\n\nexport default class TextColor extends DropdownItem {\n constructor(color) {\n super('color', undefined, color);\n }\n\n dropdown() {\n const { tag, value } = this;\n return new DropdownColor(tag, value);\n }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownColor from '../dropdown_color';\n\nexport default class FillColor extends DropdownItem {\n constructor(color) {\n super('bgcolor', undefined, color);\n }\n\n dropdown() {\n const { tag, value } = this;\n return new DropdownColor(tag, value);\n }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport { fontSizes } from '../core/font';\nimport { cssPrefix } from '../config';\n\nexport default class DropdownFontSize extends Dropdown {\n constructor() {\n const nfontSizes = fontSizes.map(it => h('div', `${cssPrefix}-item`)\n .on('click', () => {\n this.setTitle(`${it.pt}`);\n this.change(it);\n })\n .child(`${it.pt}`));\n super('10', '60px', true, 'bottom-left', ...nfontSizes);\n }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownFontsize from '../dropdown_fontsize';\n\nexport default class Format extends DropdownItem {\n constructor() {\n super('font-size');\n }\n\n getValue(it) {\n return it.pt;\n }\n\n dropdown() {\n return new DropdownFontsize();\n }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport { baseFonts } from '../core/font';\nimport { cssPrefix } from '../config';\n\nexport default class DropdownFont extends Dropdown {\n constructor() {\n const nfonts = baseFonts.map(it => h('div', `${cssPrefix}-item`)\n .on('click', () => {\n this.setTitle(it.title);\n this.change(it);\n })\n .child(it.title));\n super(baseFonts[0].title, '160px', true, 'bottom-left', ...nfonts);\n }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownFont from '../dropdown_font';\n\nexport default class Font extends DropdownItem {\n constructor() {\n super('font-name');\n }\n\n getValue(it) {\n return it.key;\n }\n\n dropdown() {\n return new DropdownFont();\n }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport { baseFormats } from '../core/format';\nimport { cssPrefix } from '../config';\n\nexport default class DropdownFormat extends Dropdown {\n constructor() {\n let nformats = baseFormats.slice(0);\n nformats.splice(2, 0, { key: 'divider' });\n nformats.splice(8, 0, { key: 'divider' });\n nformats = nformats.map((it) => {\n const item = h('div', `${cssPrefix}-item`);\n if (it.key === 'divider') {\n item.addClass('divider');\n } else {\n item.child(it.title())\n .on('click', () => {\n this.setTitle(it.title());\n this.change(it);\n });\n if (it.label) item.child(h('div', 'label').html(it.label));\n }\n return item;\n });\n super('Normal', '220px', true, 'bottom-left', ...nformats);\n }\n\n setTitle(key) {\n for (let i = 0; i < baseFormats.length; i += 1) {\n if (baseFormats[i].key === key) {\n this.title.html(baseFormats[i].title);\n }\n }\n this.hide();\n }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownFormat from '../dropdown_format';\n\nexport default class Format extends DropdownItem {\n constructor() {\n super('format');\n }\n\n getValue(it) {\n return it.key;\n }\n\n dropdown() {\n return new DropdownFormat();\n }\n}\n","import Dropdown from './dropdown';\nimport Icon from './icon';\nimport { h } from './element';\nimport { baseFormulas } from '../core/formula';\nimport { cssPrefix } from '../config';\n\nexport default class DropdownFormula extends Dropdown {\n constructor() {\n const nformulas = baseFormulas.map(it => h('div', `${cssPrefix}-item`)\n .on('click', () => {\n this.hide();\n this.change(it);\n })\n .child(it.key));\n super(new Icon('formula'), '180px', true, 'bottom-left', ...nformulas);\n }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownFormula from '../dropdown_formula';\n\nexport default class Format extends DropdownItem {\n constructor() {\n super('formula');\n }\n\n getValue(it) {\n return it.key;\n }\n\n dropdown() {\n return new DropdownFormula();\n }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Freeze extends ToggleItem {\n constructor() {\n super('freeze');\n }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Merge extends ToggleItem {\n constructor() {\n super('merge');\n }\n\n setState(active, disabled) {\n this.el.active(active).disabled(disabled);\n }\n}\n","import IconItem from './icon_item';\n\nexport default class Redo extends IconItem {\n constructor() {\n super('redo', 'Ctrl+Y');\n }\n}\n","import IconItem from './icon_item';\n\nexport default class Undo extends IconItem {\n constructor() {\n super('undo', 'Ctrl+Z');\n }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Textwrap extends ToggleItem {\n constructor() {\n super('textwrap');\n }\n}\n","import Dropdown from '../dropdown';\nimport DropdownItem from './dropdown_item';\n\nimport { cssPrefix } from '../../config';\nimport { h } from '../element';\nimport Icon from '../icon';\n\nclass DropdownMore extends Dropdown {\n constructor() {\n const icon = new Icon('ellipsis');\n const moreBtns = h('div', `${cssPrefix}-toolbar-more`);\n super(icon, 'auto', false, 'bottom-right', moreBtns);\n this.moreBtns = moreBtns;\n this.contentEl.css('max-width', '420px');\n }\n}\n\nexport default class More extends DropdownItem {\n constructor() {\n super('more');\n this.el.hide();\n }\n\n dropdown() {\n return new DropdownMore();\n }\n\n show() {\n this.el.show();\n }\n\n hide() {\n this.el.hide();\n }\n}\n","/* global window */\n\nimport Align from './align';\nimport Valign from './valign';\nimport Autofilter from './autofilter';\nimport Bold from './bold';\nimport Italic from './italic';\nimport Strike from './strike';\nimport Underline from './underline';\nimport Border from './border';\nimport Clearformat from './clearformat';\nimport Paintformat from './paintformat';\nimport TextColor from './text_color';\nimport FillColor from './fill_color';\nimport FontSize from './font_size';\nimport Font from './font';\nimport Format from './format';\nimport Formula from './formula';\nimport Freeze from './freeze';\nimport Merge from './merge';\nimport Redo from './redo';\nimport Undo from './undo';\nimport Textwrap from './textwrap';\nimport More from './more';\n\nimport { h } from '../element';\nimport { cssPrefix } from '../../config';\nimport { bind } from '../event';\n\nfunction buildDivider() {\n return h('div', `${cssPrefix}-toolbar-divider`);\n}\n\nfunction initBtns2() {\n this.btns2 = [];\n this.items.forEach((it) => {\n if (Array.isArray(it)) {\n it.forEach(({ el }) => {\n const rect = el.box();\n const { marginLeft, marginRight } = el.computedStyle();\n this.btns2.push([el, rect.width + parseInt(marginLeft, 10) + parseInt(marginRight, 10)]);\n });\n } else {\n const rect = it.box();\n const { marginLeft, marginRight } = it.computedStyle();\n this.btns2.push([it, rect.width + parseInt(marginLeft, 10) + parseInt(marginRight, 10)]);\n }\n });\n}\n\nfunction moreResize() {\n const {\n el, btns, moreEl, btns2,\n } = this;\n const { moreBtns, contentEl } = moreEl.dd;\n el.css('width', `${this.widthFn() - 60}px`);\n const elBox = el.box();\n\n let sumWidth = 160;\n let sumWidth2 = 12;\n const list1 = [];\n const list2 = [];\n btns2.forEach(([it, w], index) => {\n sumWidth += w;\n if (index === btns2.length - 1 || sumWidth < elBox.width) {\n list1.push(it);\n } else {\n sumWidth2 += w;\n list2.push(it);\n }\n });\n btns.html('').children(...list1);\n moreBtns.html('').children(...list2);\n contentEl.css('width', `${sumWidth2}px`);\n if (list2.length > 0) {\n moreEl.show();\n } else {\n moreEl.hide();\n }\n}\n\nexport default class Toolbar {\n constructor(data, widthFn, isHide = false) {\n this.data = data;\n this.change = () => {};\n this.widthFn = widthFn;\n this.isHide = isHide;\n const style = data.defaultStyle();\n this.items = [\n [\n this.undoEl = new Undo(),\n this.redoEl = new Redo(),\n this.paintformatEl = new Paintformat(),\n this.clearformatEl = new Clearformat(),\n ],\n buildDivider(),\n [\n this.formatEl = new Format(),\n ],\n buildDivider(),\n [\n this.fontEl = new Font(),\n this.fontSizeEl = new FontSize(),\n ],\n buildDivider(),\n [\n this.boldEl = new Bold(),\n this.italicEl = new Italic(),\n this.underlineEl = new Underline(),\n this.strikeEl = new Strike(),\n this.textColorEl = new TextColor(style.color),\n ],\n buildDivider(),\n [\n this.fillColorEl = new FillColor(style.bgcolor),\n this.borderEl = new Border(),\n this.mergeEl = new Merge(),\n ],\n buildDivider(),\n [\n this.alignEl = new Align(style.align),\n this.valignEl = new Valign(style.valign),\n this.textwrapEl = new Textwrap(),\n ],\n buildDivider(),\n [\n this.freezeEl = new Freeze(),\n this.autofilterEl = new Autofilter(),\n this.formulaEl = new Formula(),\n this.moreEl = new More(),\n ],\n ];\n\n this.el = h('div', `${cssPrefix}-toolbar`);\n this.btns = h('div', `${cssPrefix}-toolbar-btns`);\n\n this.items.forEach((it) => {\n if (Array.isArray(it)) {\n it.forEach((i) => {\n this.btns.child(i.el);\n i.change = (...args) => {\n this.change(...args);\n };\n });\n } else {\n this.btns.child(it.el);\n }\n });\n\n this.el.child(this.btns);\n if (isHide) {\n this.el.hide();\n } else {\n this.reset();\n setTimeout(() => {\n initBtns2.call(this);\n moreResize.call(this);\n }, 0);\n bind(window, 'resize', () => {\n moreResize.call(this);\n });\n }\n }\n\n paintformatActive() {\n return this.paintformatEl.active();\n }\n\n paintformatToggle() {\n this.paintformatEl.toggle();\n }\n\n trigger(type) {\n this[`${type}El`].click();\n }\n\n reset() {\n if (this.isHide) return;\n const { data } = this;\n const style = data.getSelectedCellStyle();\n const cell = data.getSelectedCell();\n // console.log('canUndo:', data.canUndo());\n this.undoEl.setState(!data.canUndo());\n this.redoEl.setState(!data.canRedo());\n this.mergeEl.setState(data.canUnmerge(), !data.selector.multiple());\n this.autofilterEl.setState(!data.canAutofilter());\n // this.mergeEl.disabled();\n // console.log('selectedCell:', style, cell);\n const { font } = style;\n this.fontEl.setState(font.name);\n this.fontSizeEl.setState(font.size);\n this.boldEl.setState(font.bold);\n this.italicEl.setState(font.italic);\n this.underlineEl.setState(style.underline);\n this.strikeEl.setState(style.strike);\n this.textColorEl.setState(style.color);\n this.fillColorEl.setState(style.bgcolor);\n this.alignEl.setState(style.align);\n this.valignEl.setState(style.valign);\n this.textwrapEl.setState(style.textwrap);\n // console.log('freeze is Active:', data.freezeIsActive());\n this.freezeEl.setState(data.freezeIsActive());\n if (cell) {\n if (cell.format) {\n this.formatEl.setState(cell.format);\n }\n }\n }\n}\n","/* global document */\n/* global window */\nimport { h } from './element';\nimport Icon from './icon';\nimport { cssPrefix } from '../config';\nimport { bind, unbind } from './event';\n\nexport default class Modal {\n constructor(title, content, width = '600px') {\n this.title = title;\n this.el = h('div', `${cssPrefix}-modal`).css('width', width).children(\n h('div', `${cssPrefix}-modal-header`).children(\n new Icon('close').on('click.stop', () => this.hide()),\n this.title,\n ),\n h('div', `${cssPrefix}-modal-content`).children(...content),\n ).hide();\n }\n\n show() {\n // dimmer\n this.dimmer = h('div', `${cssPrefix}-dimmer active`);\n document.body.appendChild(this.dimmer.el);\n const { width, height } = this.el.show().box();\n const { clientHeight, clientWidth } = document.documentElement;\n this.el.offset({\n left: (clientWidth - width) / 2,\n top: (clientHeight - height) / 3,\n });\n window.xkeydownEsc = (evt) => {\n if (evt.keyCode === 27) {\n this.hide();\n }\n };\n bind(window, 'keydown', window.xkeydownEsc);\n }\n\n hide() {\n this.el.hide();\n document.body.removeChild(this.dimmer.el);\n unbind(window, 'keydown', window.xkeydownEsc);\n delete window.xkeydownEsc;\n }\n}\n","import { h } from './element';\nimport { cssPrefix } from '../config';\n\nexport default class FormInput {\n constructor(width, hint) {\n this.vchange = () => {};\n this.el = h('div', `${cssPrefix}-form-input`);\n this.input = h('input', '').css('width', width)\n .on('input', evt => this.vchange(evt))\n .attr('placeholder', hint);\n this.el.child(this.input);\n }\n\n hint(v) {\n this.input.attr('placeholder', v);\n }\n\n val(v) {\n return this.input.val(v);\n }\n}\n","import { h } from './element';\nimport Suggest from './suggest';\nimport { cssPrefix } from '../config';\n\nexport default class FormSelect {\n constructor(key, items, width, getTitle = it => it, change = () => {}) {\n this.key = key;\n this.getTitle = getTitle;\n this.vchange = () => {};\n this.el = h('div', `${cssPrefix}-form-select`);\n this.suggest = new Suggest(items.map(it => ({ key: it, title: this.getTitle(it) })), (it) => {\n this.itemClick(it.key);\n change(it.key);\n this.vchange(it.key);\n }, width, this.el);\n this.el.children(\n this.itemEl = h('div', 'input-text').html(this.getTitle(key)),\n this.suggest.el,\n ).on('click', () => this.show());\n }\n\n show() {\n this.suggest.search('');\n }\n\n itemClick(it) {\n this.key = it;\n this.itemEl.html(this.getTitle(it));\n }\n\n val(v) {\n if (v !== undefined) {\n this.key = v;\n this.itemEl.html(this.getTitle(v));\n return this;\n }\n return this.key;\n }\n}\n","import { h } from './element';\nimport { cssPrefix } from '../config';\nimport { t } from '../locale/locale';\n\nconst patterns = {\n number: /(^\\d+$)|(^\\d+(\\.\\d{0,4})?$)/,\n date: /^\\d{4}-\\d{1,2}-\\d{1,2}$/,\n};\n\n// rule: { required: false, type, pattern: // }\nexport default class FormField {\n constructor(input, rule, label, labelWidth) {\n this.label = '';\n this.rule = rule;\n if (label) {\n this.label = h('label', 'label').css('width', `${labelWidth}px`).html(label);\n }\n this.tip = h('div', 'tip').child('tip').hide();\n this.input = input;\n this.input.vchange = () => this.validate();\n this.el = h('div', `${cssPrefix}-form-field`)\n .children(this.label, input.el, this.tip);\n }\n\n isShow() {\n return this.el.css('display') !== 'none';\n }\n\n show() {\n this.el.show();\n }\n\n hide() {\n this.el.hide();\n return this;\n }\n\n val(v) {\n return this.input.val(v);\n }\n\n hint(hint) {\n this.input.hint(hint);\n }\n\n validate() {\n const {\n input, rule, tip, el,\n } = this;\n const v = input.val();\n if (rule.required) {\n if (/^\\s*$/.test(v)) {\n tip.html(t('validation.required'));\n el.addClass('error');\n return false;\n }\n }\n if (rule.type || rule.pattern) {\n const pattern = rule.pattern || patterns[rule.type];\n if (!pattern.test(v)) {\n tip.html(t('validation.notMatch'));\n el.addClass('error');\n return false;\n }\n }\n el.removeClass('error');\n return true;\n }\n}\n","import { Element } from './element';\nimport { cssPrefix } from '../config';\nimport { t } from '../locale/locale';\n\nexport default class Button extends Element {\n // type: primary\n constructor(title, type = '') {\n super('div', `${cssPrefix}-button ${type}`);\n this.child(t(`button.${title}`));\n }\n}\n","import Modal from './modal';\nimport FormInput from './form_input';\nimport FormSelect from './form_select';\nimport FormField from './form_field';\nimport Button from './button';\nimport { t } from '../locale/locale';\nimport { h } from './element';\nimport { cssPrefix } from '../config';\n\nconst fieldLabelWidth = 100;\n\nexport default class ModalValidation extends Modal {\n constructor() {\n const mf = new FormField(\n new FormSelect('cell',\n ['cell'], // cell|row|column\n '100%',\n it => t(`dataValidation.modeType.${it}`)),\n { required: true },\n `${t('dataValidation.range')}:`,\n fieldLabelWidth,\n );\n const rf = new FormField(\n new FormInput('120px', 'E3 or E3:F12'),\n { required: true, pattern: /^([A-Z]{1,2}[1-9]\\d*)(:[A-Z]{1,2}[1-9]\\d*)?$/ },\n );\n const cf = new FormField(\n new FormSelect('list',\n ['list', 'number', 'date', 'phone', 'email'],\n '100%',\n it => t(`dataValidation.type.${it}`),\n it => this.criteriaSelected(it)),\n { required: true },\n `${t('dataValidation.criteria')}:`,\n fieldLabelWidth,\n );\n\n // operator\n const of = new FormField(\n new FormSelect('be',\n ['be', 'nbe', 'eq', 'neq', 'lt', 'lte', 'gt', 'gte'],\n '160px',\n it => t(`dataValidation.operator.${it}`),\n it => this.criteriaOperatorSelected(it)),\n { required: true },\n ).hide();\n // min, max\n const minvf = new FormField(\n new FormInput('70px', '10'),\n { required: true },\n ).hide();\n const maxvf = new FormField(\n new FormInput('70px', '100'),\n { required: true, type: 'number' },\n ).hide();\n // value\n const svf = new FormField(\n new FormInput('120px', 'a,b,c'),\n { required: true },\n );\n const vf = new FormField(\n new FormInput('70px', '10'),\n { required: true, type: 'number' },\n ).hide();\n\n super(t('contextmenu.validation'), [\n h('div', `${cssPrefix}-form-fields`).children(\n mf.el,\n rf.el,\n ),\n h('div', `${cssPrefix}-form-fields`).children(\n cf.el,\n of.el,\n minvf.el,\n maxvf.el,\n vf.el,\n svf.el,\n ),\n h('div', `${cssPrefix}-buttons`).children(\n new Button('cancel').on('click', () => this.btnClick('cancel')),\n new Button('remove').on('click', () => this.btnClick('remove')),\n new Button('save', 'primary').on('click', () => this.btnClick('save')),\n ),\n ]);\n this.mf = mf;\n this.rf = rf;\n this.cf = cf;\n this.of = of;\n this.minvf = minvf;\n this.maxvf = maxvf;\n this.vf = vf;\n this.svf = svf;\n this.change = () => {};\n }\n\n showVf(it) {\n const hint = it === 'date' ? '2018-11-12' : '10';\n const { vf } = this;\n vf.input.hint(hint);\n vf.show();\n }\n\n criteriaSelected(it) {\n const {\n of, minvf, maxvf, vf, svf,\n } = this;\n if (it === 'date' || it === 'number') {\n of.show();\n minvf.rule.type = it;\n maxvf.rule.type = it;\n if (it === 'date') {\n minvf.hint('2018-11-12');\n maxvf.hint('2019-11-12');\n } else {\n minvf.hint('10');\n maxvf.hint('100');\n }\n minvf.show();\n maxvf.show();\n vf.hide();\n svf.hide();\n } else {\n if (it === 'list') {\n svf.show();\n } else {\n svf.hide();\n }\n vf.hide();\n of.hide();\n minvf.hide();\n maxvf.hide();\n }\n }\n\n criteriaOperatorSelected(it) {\n if (!it) return;\n const {\n minvf, maxvf, vf,\n } = this;\n if (it === 'be' || it === 'nbe') {\n minvf.show();\n maxvf.show();\n vf.hide();\n } else {\n const type = this.cf.val();\n vf.rule.type = type;\n if (type === 'date') {\n vf.hint('2018-11-12');\n } else {\n vf.hint('10');\n }\n vf.show();\n minvf.hide();\n maxvf.hide();\n }\n }\n\n btnClick(action) {\n if (action === 'cancel') {\n this.hide();\n } else if (action === 'remove') {\n this.change('remove');\n this.hide();\n } else if (action === 'save') {\n // validate\n const attrs = ['mf', 'rf', 'cf', 'of', 'svf', 'vf', 'minvf', 'maxvf'];\n for (let i = 0; i < attrs.length; i += 1) {\n const field = this[attrs[i]];\n // console.log('field:', field);\n if (field.isShow()) {\n // console.log('it:', it);\n if (!field.validate()) return;\n }\n }\n\n const mode = this.mf.val();\n const ref = this.rf.val();\n const type = this.cf.val();\n const operator = this.of.val();\n let value = this.svf.val();\n if (type === 'number' || type === 'date') {\n if (operator === 'be' || operator === 'nbe') {\n value = [this.minvf.val(), this.maxvf.val()];\n } else {\n value = this.vf.val();\n }\n }\n // console.log(mode, ref, type, operator, value);\n this.change('save',\n mode,\n ref,\n {\n type, operator, required: false, value,\n });\n this.hide();\n }\n }\n\n // validation: { mode, ref, validator }\n setValue(v) {\n if (v) {\n const {\n mf, rf, cf, of, svf, vf, minvf, maxvf,\n } = this;\n const {\n mode, ref, validator,\n } = v;\n const {\n type, operator, value,\n } = validator || { type: 'list' };\n mf.val(mode || 'cell');\n rf.val(ref);\n cf.val(type);\n of.val(operator);\n if (Array.isArray(value)) {\n minvf.val(value[0]);\n maxvf.val(value[1]);\n } else {\n svf.val(value || '');\n vf.val(value || '');\n }\n this.criteriaSelected(type);\n this.criteriaOperatorSelected(operator);\n }\n this.show();\n }\n}\n","import { h } from './element';\nimport Button from './button';\nimport { bindClickoutside, unbindClickoutside } from './event';\nimport { cssPrefix } from '../config';\nimport { t } from '../locale/locale';\n\nfunction buildMenu(clsName) {\n return h('div', `${cssPrefix}-item ${clsName}`);\n}\n\nfunction buildSortItem(it) {\n return buildMenu('state').child(t(`sort.${it}`))\n .on('click.stop', () => this.itemClick(it));\n}\n\nfunction buildFilterBody(items) {\n const { filterbEl, filterValues } = this;\n filterbEl.html('');\n const itemKeys = Object.keys(items);\n itemKeys.forEach((it, index) => {\n const cnt = items[it];\n const active = filterValues.includes(it) ? 'checked' : '';\n filterbEl.child(h('div', `${cssPrefix}-item state ${active}`)\n .on('click.stop', () => this.filterClick(index, it))\n .children(it === '' ? t('filter.empty') : it, h('div', 'label').html(`(${cnt})`)));\n });\n}\n\nfunction resetFilterHeader() {\n const { filterhEl, filterValues, values } = this;\n filterhEl.html(`${filterValues.length} / ${values.length}`);\n filterhEl.checked(filterValues.length === values.length);\n}\n\nexport default class SortFilter {\n constructor() {\n this.filterbEl = h('div', `${cssPrefix}-body`);\n this.filterhEl = h('div', `${cssPrefix}-header state`).on('click.stop', () => this.filterClick(0, 'all'));\n this.el = h('div', `${cssPrefix}-sort-filter`).children(\n this.sortAscEl = buildSortItem.call(this, 'asc'),\n this.sortDescEl = buildSortItem.call(this, 'desc'),\n buildMenu('divider'),\n h('div', `${cssPrefix}-filter`).children(\n this.filterhEl,\n this.filterbEl,\n ),\n h('div', `${cssPrefix}-buttons`).children(\n new Button('cancel').on('click', () => this.btnClick('cancel')),\n new Button('ok', 'primary').on('click', () => this.btnClick('ok')),\n ),\n ).hide();\n // this.setFilters(['test1', 'test2', 'text3']);\n this.ci = null;\n this.sortDesc = null;\n this.values = null;\n this.filterValues = [];\n }\n\n btnClick(it) {\n if (it === 'ok') {\n const { ci, sort, filterValues } = this;\n if (this.ok) {\n this.ok(ci, sort, 'in', filterValues);\n }\n }\n this.hide();\n }\n\n itemClick(it) {\n // console.log('it:', it);\n this.sort = it;\n const { sortAscEl, sortDescEl } = this;\n sortAscEl.checked(it === 'asc');\n sortDescEl.checked(it === 'desc');\n }\n\n filterClick(index, it) {\n // console.log('index:', index, it);\n const { filterbEl, filterValues, values } = this;\n const children = filterbEl.children();\n if (it === 'all') {\n if (children.length === filterValues.length) {\n this.filterValues = [];\n children.forEach(i => h(i).checked(false));\n } else {\n this.filterValues = Array.from(values);\n children.forEach(i => h(i).checked(true));\n }\n } else {\n const checked = h(children[index]).toggle('checked');\n if (checked) {\n filterValues.push(it);\n } else {\n filterValues.splice(filterValues.findIndex(i => i === it), 1);\n }\n }\n resetFilterHeader.call(this);\n }\n\n // v: autoFilter\n // items: {value: cnt}\n // sort { ci, order }\n set(ci, items, filter, sort) {\n this.ci = ci;\n const { sortAscEl, sortDescEl } = this;\n if (sort !== null) {\n this.sort = sort.order;\n sortAscEl.checked(sort.asc());\n sortDescEl.checked(sort.desc());\n } else {\n this.sortDesc = null;\n sortAscEl.checked(false);\n sortDescEl.checked(false);\n }\n // this.setFilters(items, filter);\n this.values = Object.keys(items);\n this.filterValues = filter ? Array.from(filter.value) : Object.keys(items);\n buildFilterBody.call(this, items, filter);\n resetFilterHeader.call(this);\n }\n\n setOffset(v) {\n this.el.offset(v).show();\n let tindex = 1;\n bindClickoutside(this.el, () => {\n if (tindex <= 0) {\n this.hide();\n }\n tindex -= 1;\n });\n }\n\n show() {\n this.el.show();\n }\n\n hide() {\n this.el.hide();\n unbindClickoutside(this.el);\n }\n}\n","/* global document */\nimport { h } from './element';\nimport Icon from './icon';\nimport { cssPrefix } from '../config';\n\nexport function xtoast(title, content) {\n const el = h('div', `${cssPrefix}-toast`);\n const dimmer = h('div', `${cssPrefix}-dimmer active`);\n const remove = () => {\n document.body.removeChild(el.el);\n document.body.removeChild(dimmer.el);\n };\n\n el.children(\n h('div', `${cssPrefix}-toast-header`).children(\n new Icon('close').on('click.stop', () => remove()),\n title,\n ),\n h('div', `${cssPrefix}-toast-content`).html(content),\n );\n document.body.appendChild(el.el);\n document.body.appendChild(dimmer.el);\n // set offset\n const { width, height } = el.box();\n const { clientHeight, clientWidth } = document.documentElement;\n el.offset({\n left: (clientWidth - width) / 2,\n top: (clientHeight - height) / 3,\n });\n}\n\nexport default {};\n","/* global window */\nimport { h } from './element';\nimport { 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/index';\nimport ModalValidation from './modal_validation';\nimport SortFilter from './sort_filter';\nimport { xtoast } from './message';\nimport { cssPrefix } from '../config';\nimport { formulas } from '../core/formula';\n\nfunction scrollbarMove() {\n const {\n data, verticalScrollbar, horizontalScrollbar,\n } = this;\n const {\n l, t, left, top, width, height,\n } = data.getSelectedRect();\n const tableOffset = this.getTableOffset();\n // console.log(',l:', l, ', left:', left, ', tOffset.left:', tableOffset.width);\n if (Math.abs(left) + width > tableOffset.width) {\n horizontalScrollbar.move({ left: l + width - tableOffset.width });\n } else {\n const fsw = data.freezeTotalWidth();\n if (left < fsw) {\n horizontalScrollbar.move({ left: l - 1 - fsw });\n }\n }\n // console.log('top:', top, ', height:', height, ', tof.height:', tableOffset.height);\n if (Math.abs(top) + height > tableOffset.height) {\n verticalScrollbar.move({ top: t + height - tableOffset.height - 1 });\n } else {\n const fsh = data.freezeTotalHeight();\n if (top < fsh) {\n verticalScrollbar.move({ top: t - 1 - fsh });\n }\n }\n}\n\nfunction selectorSet(multiple, ri, ci, indexesUpdated = true, moving = false) {\n if (ri === -1 && ci === -1) return;\n // console.log(multiple, ', ri:', ri, ', ci:', ci);\n const {\n table, selector, toolbar,\n } = this;\n if (multiple) {\n selector.setEnd(ri, ci, moving);\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 const { rows, cols } = data;\n let [ri, ci] = selector.indexes;\n const { eri, eci } = selector.range;\n if (multiple) {\n [ri, ci] = selector.moveIndexes;\n }\n // console.log('selector.move:', ri, ci);\n if (direction === 'left') {\n if (ci > 0) ci -= 1;\n } else if (direction === 'right') {\n if (eci !== ci) ci = eci;\n if (ci < cols.len - 1) ci += 1;\n } else if (direction === 'up') {\n if (ri > 0) ri -= 1;\n } else if (direction === 'down') {\n if (eri !== ri) ri = eri;\n if (ri < rows.len - 1) ri += 1;\n } else if (direction === 'row-first') {\n ci = 0;\n } else if (direction === 'row-last') {\n ci = cols.len - 1;\n } else if (direction === 'col-first') {\n ri = 0;\n } else if (direction === 'col-last') {\n ri = rows.len - 1;\n }\n if (multiple) {\n selector.moveIndexes = [ri, ci];\n }\n selectorSet.call(this, multiple, ri, ci);\n scrollbarMove.call(this);\n}\n\n// private methods\nfunction overlayerMousemove(evt) {\n // console.log('x:', evt.offsetX, ', y:', evt.offsetY);\n if (evt.buttons !== 0) return;\n if (evt.target.className === `${cssPrefix}-resizer-hover`) return;\n const { offsetX, offsetY } = evt;\n const {\n rowResizer, colResizer, tableEl, data,\n } = this;\n const { rows, cols } = data;\n if (offsetX > cols.indexWidth && offsetY > rows.height) {\n rowResizer.hide();\n colResizer.hide();\n return;\n }\n const tRect = tableEl.box();\n const cRect = data.getCellRectByXY(evt.offsetX, evt.offsetY);\n if (cRect.ri >= 0 && cRect.ci === -1) {\n cRect.width = cols.indexWidth;\n rowResizer.show(cRect, {\n width: tRect.width,\n });\n } else {\n rowResizer.hide();\n }\n if (cRect.ri === -1 && cRect.ci >= 0) {\n cRect.height = rows.height;\n colResizer.show(cRect, {\n height: tRect.height,\n });\n } 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 const { rows } = data;\n if (evt.detail) delta = evt.detail * 40;\n if (delta > 0) {\n // up\n const ri = data.scroll.ri + 1;\n if (ri < rows.len) {\n verticalScrollbar.move({ top: top + rows.getHeight(ri) - 1 });\n }\n } else {\n // down\n const ri = data.scroll.ri - 1;\n if (ri >= 0) {\n verticalScrollbar.move({ top: ri === 0 ? 0 : top - rows.getHeight(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, left);\n if (direction === 'left' || direction === 'right') {\n horizontalScrollbar.move({ left: left - distance });\n } else if (direction === 'up' || direction === 'down') {\n verticalScrollbar.move({ top: top - distance });\n }\n}\n\nfunction verticalScrollbarSet() {\n const { data, verticalScrollbar } = this;\n const { height } = this.getTableOffset();\n const erth = data.exceptRowTotalHeight(0, -1);\n // console.log('erth:', erth);\n verticalScrollbar.set(height, data.rows.totalHeight() - erth);\n}\n\nfunction horizontalScrollbarSet() {\n const { data, horizontalScrollbar } = this;\n const { width } = this.getTableOffset();\n if (data) {\n horizontalScrollbar.set(width, data.cols.totalWidth());\n }\n}\n\nfunction sheetFreeze() {\n const {\n selector, data, editor,\n } = this;\n const [ri, ci] = data.freeze;\n if (ri > 0 || ci > 0) {\n const fwidth = data.freezeTotalWidth();\n const fheight = data.freezeTotalHeight();\n editor.setFreezeLengths(fwidth, fheight);\n }\n selector.resetAreaOffset();\n}\n\nfunction sheetReset() {\n const {\n tableEl,\n overlayerEl,\n overlayerCEl,\n table,\n toolbar,\n selector,\n el,\n } = this;\n const tOffset = this.getTableOffset();\n const vRect = this.getRect();\n tableEl.attr(vRect);\n overlayerEl.offset(vRect);\n overlayerCEl.offset(tOffset);\n el.css('width', `${vRect.width}px`);\n verticalScrollbarSet.call(this);\n horizontalScrollbarSet.call(this);\n sheetFreeze.call(this);\n table.render();\n toolbar.reset();\n selector.reset();\n}\n\nfunction clearClipboard() {\n const { data, selector } = this;\n data.clearClipboard();\n selector.hideClipboard();\n}\n\nfunction copy() {\n const { data, selector } = this;\n data.copy();\n selector.showClipboard();\n}\n\nfunction cut() {\n const { data, selector } = this;\n data.cut();\n selector.showClipboard();\n}\n\nfunction paste(what) {\n const { data } = this;\n if (data.paste(what, msg => xtoast('Tip', msg))) {\n sheetReset.call(this);\n }\n}\n\nfunction autofilter() {\n const { data } = this;\n data.autofilter();\n sheetReset.call(this);\n}\n\nfunction toolbarChangePaintformatPaste() {\n const { toolbar } = this;\n if (toolbar.paintformatActive()) {\n paste.call(this, 'format');\n clearClipboard.call(this);\n toolbar.paintformatToggle();\n }\n}\n\nfunction overlayerMousedown(evt) {\n // console.log(':::::overlayer.mousedown:', evt.detail, evt.button, evt.buttons, evt.shiftKey);\n // console.log('evt.target.className:', evt.target.className);\n const {\n selector, data, table, sortFilter,\n } = this;\n const { offsetX, offsetY } = evt;\n const isAutofillEl = evt.target.className === `${cssPrefix}-selector-corner`;\n const cellRect = data.getCellRectByXY(offsetX, offsetY);\n const {\n left, top, width, height,\n } = cellRect;\n let { ri, ci } = cellRect;\n // sort or filter\n const { autoFilter } = data;\n if (autoFilter.includes(ri, ci)) {\n if (left + width - 20 < offsetX && top + height - 20 < offsetY) {\n const items = autoFilter.items(ci, (r, c) => data.rows.getCell(r, c));\n sortFilter.set(ci, items, autoFilter.getFilter(ci), autoFilter.getSort(ci));\n sortFilter.setOffset({ left, top: top + height + 2 });\n return;\n }\n }\n\n // console.log('ri:', ri, ', ci:', ci);\n if (!evt.shiftKey) {\n // console.log('selectorSetStart:::');\n if (isAutofillEl) {\n selector.showAutofill(ri, ci);\n } else {\n selectorSet.call(this, false, ri, ci);\n }\n\n // mouse move up\n mouseMoveUp(window, (e) => {\n // console.log('mouseMoveUp::::');\n ({ ri, ci } = data.getCellRectByXY(e.offsetX, e.offsetY));\n if (isAutofillEl) {\n selector.showAutofill(ri, ci);\n } else if (e.buttons === 1 && !e.shiftKey) {\n selectorSet.call(this, true, ri, ci, true, true);\n }\n }, () => {\n if (isAutofillEl) {\n if (data.autofill(selector.arange, 'all', msg => xtoast('Tip', msg))) {\n table.render();\n }\n }\n selector.hideAutofill();\n toolbarChangePaintformatPaste.call(this);\n });\n }\n\n if (!isAutofillEl && evt.buttons === 1) {\n if (evt.shiftKey) {\n // console.log('shiftKey::::');\n selectorSet.call(this, true, ri, ci);\n }\n }\n}\n\nfunction editorSetOffset() {\n const { editor, data } = this;\n const sOffset = data.getSelectedRect();\n const tOffset = this.getTableOffset();\n let sPosition = 'top';\n // console.log('sOffset:', sOffset, ':', tOffset);\n if (sOffset.top > tOffset.height / 2) {\n sPosition = 'bottom';\n }\n editor.setOffset(sOffset, sPosition);\n}\n\nfunction editorSet() {\n const { editor, data } = this;\n editorSetOffset.call(this);\n editor.setCell(data.getSelectedCell(), data.getSelectedValidator());\n clearClipboard.call(this);\n}\n\nfunction verticalScrollbarMove(distance) {\n const { data, table, selector } = this;\n data.scrolly(distance, () => {\n selector.resetBRLAreaOffset();\n editorSetOffset.call(this);\n table.render();\n });\n}\n\nfunction horizontalScrollbarMove(distance) {\n const { data, table, selector } = this;\n data.scrollx(distance, () => {\n selector.resetBRTAreaOffset();\n editorSetOffset.call(this);\n table.render();\n });\n}\n\nfunction rowResizerFinished(cRect, distance) {\n const { ri } = cRect;\n const { table, selector, data } = this;\n data.rows.setHeight(ri, distance);\n table.render();\n selector.resetAreaOffset();\n verticalScrollbarSet.call(this);\n editorSetOffset.call(this);\n}\n\nfunction colResizerFinished(cRect, distance) {\n const { ci } = cRect;\n const { table, selector, data } = this;\n data.cols.setWidth(ci, distance);\n // console.log('data:', data);\n table.render();\n selector.resetAreaOffset();\n horizontalScrollbarSet.call(this);\n editorSetOffset.call(this);\n}\n\nfunction dataSetCellText(text, state = 'finished') {\n const { data, table } = this;\n // const [ri, ci] = selector.indexes;\n data.setSelectedCellText(text, state);\n if (state === 'finished') table.render();\n}\n\nfunction insertDeleteRowColumn(type) {\n const { data } = this;\n if (type === 'insert-row') {\n data.insert('row');\n } else if (type === 'delete-row') {\n data.delete('row');\n } else if (type === 'insert-column') {\n data.insert('column');\n } else if (type === 'delete-column') {\n data.delete('column');\n } else if (type === 'delete-cell') {\n data.deleteCell();\n } else if (type === 'delete-cell-format') {\n data.deleteCell('format');\n } else if (type === 'delete-cell-text') {\n data.deleteCell('text');\n }\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 === 'autofilter') {\n // filter\n autofilter.call(this);\n } else if (type === 'freeze') {\n if (value) {\n const { ri, ci } = data.selector;\n this.freeze(ri, ci);\n } else {\n this.freeze(0, 0);\n }\n } else {\n data.setSelectedCellAttr(type, value);\n if (type === 'formula' && !data.selector.multiple()) {\n editorSet.call(this);\n }\n sheetReset.call(this);\n }\n}\n\nfunction sortFilterChange(ci, order, operator, value) {\n // console.log('sort:', sortDesc, operator, value);\n this.data.setAutoFilter(ci, order, operator, value);\n sheetReset.call(this);\n}\n\nfunction sheetInitEvents() {\n const {\n overlayerEl,\n rowResizer,\n colResizer,\n verticalScrollbar,\n horizontalScrollbar,\n editor,\n contextMenu,\n data,\n toolbar,\n modalValidation,\n sortFilter,\n } = this;\n // overlayer\n overlayerEl\n .on('mousemove', (evt) => {\n overlayerMousemove.call(this, evt);\n })\n .on('mousedown', (evt) => {\n // the left mouse button: mousedown → mouseup → click\n // the right mouse button: mousedown → contenxtmenu → mouseup\n if (evt.buttons === 2) {\n if (data.xyInSelectedRect(evt.offsetX, evt.offsetY)) {\n contextMenu.setPosition(evt.offsetX, evt.offsetY);\n evt.stopPropagation();\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 // sort filter ok\n sortFilter.ok = (ci, order, o, v) => sortFilterChange.call(this, ci, order, o, v);\n\n // resizer finished callback\n rowResizer.finishedFn = (cRect, distance) => {\n rowResizerFinished.call(this, cRect, distance);\n };\n colResizer.finishedFn = (cRect, distance) => {\n colResizerFinished.call(this, cRect, distance);\n };\n // scrollbar move callback\n verticalScrollbar.moveFn = (distance, evt) => {\n verticalScrollbarMove.call(this, distance, evt);\n };\n horizontalScrollbar.moveFn = (distance, evt) => {\n horizontalScrollbarMove.call(this, distance, evt);\n };\n // editor\n editor.change = (state, itext) => {\n dataSetCellText.call(this, itext, state);\n };\n // modal validation\n modalValidation.change = (action, ...args) => {\n if (action === 'save') {\n data.addValidation(...args);\n } else {\n data.removeValidation();\n }\n };\n // contextmenu\n contextMenu.itemClick = (type) => {\n // console.log('type:', type);\n if (type === 'validation') {\n modalValidation.setValue(data.getSelectedValidation());\n } else if (type === 'copy') {\n copy.call(this);\n } else if (type === 'cut') {\n cut.call(this);\n } else if (type === 'paste') {\n paste.call(this, 'all');\n } else if (type === 'paste-value') {\n paste.call(this, 'text');\n } else if (type === 'paste-format') {\n paste.call(this, 'format');\n } else {\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, metaKey,\n } = evt;\n // console.log('keydown.evt: ', keyCode);\n if (ctrlKey || metaKey) {\n // const { sIndexes, eIndexes } = selector;\n let what = 'all';\n if (shiftKey) what = 'text';\n if (altKey) what = 'format';\n switch (keyCode) {\n case 90:\n // undo: ctrl + z\n this.undo();\n evt.preventDefault();\n break;\n case 89:\n // redo: ctrl + y\n this.redo();\n evt.preventDefault();\n break;\n case 67:\n // ctrl + c\n copy.call(this);\n evt.preventDefault();\n break;\n case 88:\n // ctrl + x\n cut.call(this);\n evt.preventDefault();\n break;\n case 85:\n // ctrl + u\n toolbar.trigger('underline');\n evt.preventDefault();\n break;\n case 86:\n // ctrl + v\n paste.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.ci, false);\n evt.preventDefault();\n break;\n case 66:\n // ctrl + B\n toolbar.trigger('bold');\n break;\n case 73:\n // ctrl + I\n toolbar.trigger('italic');\n break;\n default:\n break;\n }\n } else {\n // console.log('evt.keyCode:', evt.keyCode);\n switch (keyCode) {\n case 32:\n if (shiftKey) {\n // shift + space, all cells in row\n selectorSet.call(this, false, data.selector.ri, -1, false);\n }\n break;\n case 27: // esc\n contextMenu.hide();\n clearClipboard.call(this);\n break;\n case 37: // left\n selectorMove.call(this, shiftKey, 'left');\n evt.preventDefault();\n break;\n case 38: // up\n selectorMove.call(this, shiftKey, 'up');\n evt.preventDefault();\n break;\n case 39: // right\n selectorMove.call(this, shiftKey, 'right');\n evt.preventDefault();\n break;\n case 40: // down\n selectorMove.call(this, shiftKey, 'down');\n evt.preventDefault();\n break;\n case 9: // tab\n editor.clear();\n // shift + tab => move left\n // tab => move right\n selectorMove.call(this, false, shiftKey ? 'left' : 'right');\n evt.preventDefault();\n break;\n case 13: // enter\n editor.clear();\n // shift + enter => move up\n // enter => move down\n selectorMove.call(this, false, shiftKey ? 'up' : 'down');\n evt.preventDefault();\n break;\n case 8: // backspace\n insertDeleteRowColumn.call(this, 'delete-cell-text');\n evt.preventDefault();\n break;\n default:\n break;\n }\n\n if (key === 'Delete') {\n insertDeleteRowColumn.call(this, 'delete-cell-text');\n evt.preventDefault();\n } else if ((keyCode >= 65 && keyCode <= 90)\n || (keyCode >= 48 && keyCode <= 57)\n || (keyCode >= 96 && keyCode <= 105)\n || evt.key === '='\n ) {\n dataSetCellText.call(this, evt.key, 'input');\n editorSet.call(this);\n } else if (keyCode === 113) {\n // F2\n editorSet.call(this);\n }\n }\n });\n}\n\nexport default class Sheet {\n constructor(targetEl, data) {\n const { view, showToolbar, showContextmenu } = data.settings;\n this.el = h('div', `${cssPrefix}-sheet`);\n this.toolbar = new Toolbar(data, view.width, !showToolbar);\n targetEl.children(this.toolbar.el, this.el);\n this.data = data;\n // table\n this.tableEl = h('canvas', `${cssPrefix}-table`);\n // resizer\n this.rowResizer = new Resizer(false, data.rows.height);\n this.colResizer = new Resizer(true, data.cols.minWidth);\n // scrollbar\n this.verticalScrollbar = new Scrollbar(true);\n this.horizontalScrollbar = new Scrollbar(false);\n // editor\n this.editor = new Editor(\n formulas,\n () => this.getTableOffset(),\n data.rows.height,\n );\n // data validation\n this.modalValidation = new ModalValidation();\n // contextMenu\n this.contextMenu = new ContextMenu(() => this.getTableOffset(), !showContextmenu);\n // selector\n this.selector = new Selector(data);\n this.overlayerCEl = h('div', `${cssPrefix}-overlayer-content`)\n .children(\n this.editor.el,\n this.selector.el,\n );\n this.overlayerEl = h('div', `${cssPrefix}-overlayer`)\n .child(this.overlayerCEl);\n // sortFilter\n this.sortFilter = new SortFilter();\n // root element\n this.el.children(\n this.tableEl,\n this.overlayerEl.el,\n this.rowResizer.el,\n this.colResizer.el,\n this.verticalScrollbar.el,\n this.horizontalScrollbar.el,\n this.contextMenu.el,\n this.modalValidation.el,\n this.sortFilter.el,\n );\n // table\n this.table = new Table(this.tableEl.el, data);\n sheetInitEvents.call(this);\n sheetReset.call(this);\n // init selector [0, 0]\n selectorSet.call(this, false, 0, 0);\n }\n\n loadData(data) {\n this.data.setData(data);\n sheetReset.call(this);\n return this;\n }\n\n // freeze rows or cols\n freeze(ri, ci) {\n const { data } = this;\n data.setFreeze(ri, ci);\n sheetReset.call(this);\n return this;\n }\n\n undo() {\n this.data.undo();\n sheetReset.call(this);\n }\n\n redo() {\n this.data.redo();\n sheetReset.call(this);\n }\n\n reload() {\n sheetReset.call(this);\n return this;\n }\n\n getRect() {\n const { data } = this;\n return { width: data.viewWidth(), height: data.viewHeight() };\n }\n\n getTableOffset() {\n const { rows, cols } = this.data;\n const { width, height } = this.getRect();\n return {\n width: width - cols.indexWidth,\n height: height - rows.height,\n left: cols.indexWidth,\n top: rows.height,\n };\n }\n}\n","/* global window, document */\nimport { h } from './component/element';\nimport DataProxy from './core/data_proxy';\nimport Sheet from './component/sheet';\nimport { cssPrefix } from './config';\nimport { locale } from './locale/locale';\nimport './index.less';\n\n\nclass Spreadsheet {\n constructor(selectors, options = {}) {\n let targetEl = selectors;\n if (typeof selectors === 'string') {\n targetEl = document.querySelector(selectors);\n }\n this.data = new DataProxy('sheet1', 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 getData() {\n return this.data.getData();\n }\n\n validate() {\n const { validations } = this.data;\n return validations.errors.size <= 0;\n }\n\n change(cb) {\n this.data.change = cb;\n return this;\n }\n\n static locale(lang, message) {\n locale(lang, message);\n }\n}\n\nconst spreadsheet = (el, options = {}) => new Spreadsheet(el, options);\n\nif (window) {\n window.x = window.x || {};\n window.x.spreadsheet = spreadsheet;\n window.x.spreadsheet.locale = (lang, message) => locale(lang, message);\n}\n\nexport default Spreadsheet;\nexport {\n spreadsheet,\n};\n"],"sourceRoot":""}