UNPKG

@js-preview/excel

Version:

支持多种文件(**docx、excel、pdf、pptx**)预览的vue组件库,支持vue2/3。也支持非Vue框架的预览。

1 lines 1.59 MB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).jsPreviewExcel=t()}(this,(function(){"use strict";class e{constructor(e,t=""){"string"==typeof e?(this.el=document.createElement(e),this.el.className=t):this.el=e,this.data={}}data(e,t){return void 0!==t?(this.data[e]=t,this):this.data[e]}on(e,t){const[r,...n]=e.split(".");let i=r;return"mousewheel"===i&&/Firefox/i.test(window.navigator.userAgent)&&(i="DOMMouseScroll"),this.el.addEventListener(i,(e=>{t(e);for(let t=0;t<n.length;t+=1){const r=n[t];if("left"===r&&0!==e.button)return;if("right"===r&&2!==e.button)return;"stop"===r&&e.stopPropagation()}})),this}offset(e){if(void 0!==e)return Object.keys(e).forEach((t=>{this.css(t,`${e[t]}px`)})),this;const{offsetTop:t,offsetLeft:r,offsetHeight:n,offsetWidth:i}=this.el;return{top:t,left:r,height:n,width:i}}scroll(e){const{el:t}=this;return void 0!==e&&(void 0!==e.left&&(t.scrollLeft=e.left),void 0!==e.top&&(t.scrollTop=e.top)),{left:t.scrollLeft,top:t.scrollTop}}box(){return this.el.getBoundingClientRect()}parent(){return new e(this.el.parentNode)}children(...e){return 0===arguments.length?this.el.childNodes:(e.forEach((e=>this.child(e))),this)}removeChild(e){this.el.removeChild(e)}child(t){let r=t;return"string"==typeof t?r=document.createTextNode(t):t instanceof e&&(r=t.el),this.el.appendChild(r),this}contains(e){return this.el.contains(e)}className(e){return void 0!==e?(this.el.className=e,this):this.el.className}addClass(e){return this.el.classList.add(e),this}hasClass(e){return this.el.classList.contains(e)}removeClass(e){return this.el.classList.remove(e),this}toggle(e="active"){return this.toggleClass(e)}toggleClass(e){return this.el.classList.toggle(e)}active(e=!0,t="active"){return e?this.addClass(t):this.removeClass(t),this}checked(e=!0){return this.active(e,"checked"),this}disabled(e=!0){return e?this.addClass("disabled"):this.removeClass("disabled"),this}attr(e,t){if(void 0!==t)this.el.setAttribute(e,t);else{if("string"==typeof e)return this.el.getAttribute(e);Object.keys(e).forEach((t=>{this.el.setAttribute(t,e[t])}))}return this}removeAttr(e){return this.el.removeAttribute(e),this}html(e){return void 0!==e?(this.el.innerHTML=e,this):this.el.innerHTML}val(e){return void 0!==e?(this.el.value=e,this):this.el.value}focus(){this.el.focus()}cssRemoveKeys(...e){return e.forEach((e=>this.el.style.removeProperty(e))),this}css(e,t){return void 0===t&&"string"!=typeof e?(Object.keys(e).forEach((t=>{this.el.style[t]=e[t]})),this):void 0!==t?(this.el.style[e]=t,this):this.el.style[e]}computedStyle(){return window.getComputedStyle(this.el,null)}show(){return this.css("display","block"),this}hide(){return this.css("display","none"),this}}const t=(t,r="")=>new e(t,r),r=["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"];function n(e){let t="",n=e;for(;n>=r.length;)n/=r.length,n-=1,t+=r[parseInt(n,10)%r.length];return t+=r[e%r.length],t}function i(e){let t=0;for(let r=0;r!==e.length;++r)t=26*t+e.charCodeAt(r)-64;return t-1}function s(e){let t="",r="";for(let n=0;n<e.length;n+=1)e.charAt(n)>="0"&&e.charAt(n)<="9"?r+=e.charAt(n):t+=e.charAt(n);return[i(t),parseInt(r,10)-1]}function a(e,t){return`${n(e)}${t+1}`}function o(e,t,r,n=()=>!0){if(0===t&&0===r)return e;const[i,o]=s(e);return n(i,o)?a(i+t,o+r):e}class l{constructor(e,t,r,n,i=0,s=0){this.sri=e,this.sci=t,this.eri=r,this.eci=n,this.w=i,this.h=s}set(e,t,r,n){this.sri=e,this.sci=t,this.eri=r,this.eci=n}multiple(){return this.eri-this.sri>0||this.eci-this.sci>0}includes(...e){let[t,r]=[0,0];1===e.length?[r,t]=s(e[0]):2===e.length&&([t,r]=e);const{sri:n,sci:i,eri:a,eci:o}=this;return n<=t&&t<=a&&i<=r&&r<=o}each(e,t=()=>!0){const{sri:r,sci:n,eri:i,eci:s}=this;for(let a=r;a<=i;a+=1)if(t(a))for(let t=n;t<=s;t+=1)e(a,t)}contains(e){return this.sri<=e.sri&&this.sci<=e.sci&&this.eri>=e.eri&&this.eci>=e.eci}within(e){return this.sri>=e.sri&&this.sci>=e.sci&&this.eri<=e.eri&&this.eci<=e.eci}disjoint(e){return this.sri>e.eri||this.sci>e.eci||e.sri>this.eri||e.sci>this.eci}intersects(e){return this.sri<=e.eri&&this.sci<=e.eci&&e.sri<=this.eri&&e.sci<=this.eci}union(e){const{sri:t,sci:r,eri:n,eci:i}=this;return new l(e.sri<t?e.sri:t,e.sci<r?e.sci:r,e.eri>n?e.eri:n,e.eci>i?e.eci:i)}difference(e){const t=[],r=(e,r,n,i)=>{t.push(new l(e,r,n,i))},{sri:n,sci:i,eri:s,eci:a}=this,o=e.sri-n,c=e.sci-i,h=s-e.eri,f=a-e.eci;return o>0?(r(n,i,e.sri-1,a),h>0?(r(e.eri+1,i,s,a),c>0&&r(e.sri,i,e.eri,e.sci-1),f>0&&r(e.sri,e.eci+1,e.eri,a)):(c>0&&r(e.sri,i,s,e.sci-1),f>0&&r(e.sri,e.eci+1,s,a))):h>0&&(r(e.eri+1,i,s,a),c>0&&r(n,i,e.eri,e.sci-1),f>0&&r(n,e.eci+1,e.eri,a)),c>0?(r(n,i,s,e.sci-1),f>0?(r(n,e.eri+1,s,a),o>0&&r(n,e.sci,e.sri-1,e.eci),h>0&&r(e.sri+1,e.sci,s,e.eci)):(o>0&&r(n,e.sci,e.sri-1,a),h>0&&r(e.sri+1,e.sci,s,a))):f>0&&(r(s,e.eci+1,s,a),o>0&&r(n,i,e.sri-1,e.eci),h>0&&r(e.eri+1,i,s,e.eci)),t}size(){return[this.eri-this.sri+1,this.eci-this.sci+1]}toString(){const{sri:e,sci:t,eri:r,eci:n}=this;let i=a(t,e);return this.multiple()&&(i=`${i}:${a(n,r)}`),i}clone(){const{sri:e,sci:t,eri:r,eci:n,w:i,h:s}=this;return new l(e,t,r,n,i,s)}equals(e){return this.eri===e.eri&&this.eci===e.eci&&this.sri===e.sri&&this.sci===e.sci}static valueOf(e){const t=e.split(":"),[r,n]=s(t[0]);let[i,a]=[n,r];return t.length>1&&([a,i]=s(t[1])),new l(n,r,i,a)}}let c=class{constructor(){this.range=new l(0,0,0,0),this.ri=0,this.ci=0}multiple(){return this.range.multiple()}setIndexes(e,t){this.ri=e,this.ci=t}size(){return this.range.size()}};class h{constructor(){this.x=0,this.y=0,this.ri=0,this.ci=0}}class f{constructor(){this.undoItems=[],this.redoItems=[]}add(e){this.undoItems.push(JSON.stringify(e)),this.redoItems=[]}canUndo(){return this.undoItems.length>0}canRedo(){return this.redoItems.length>0}undo(e,t){const{undoItems:r,redoItems:n}=this;this.canUndo()&&(n.push(JSON.stringify(e)),t(JSON.parse(r.pop())))}redo(e,t){const{undoItems:r,redoItems:n}=this;this.canRedo()&&(r.push(JSON.stringify(e)),t(JSON.parse(n.pop())))}}class u{constructor(){this.range=null,this.state="clear"}copy(e){return this.range=e,this.state="copy",this}cut(e){return this.range=e,this.state="cut",this}isCopy(){return"copy"===this.state}isCut(){return"cut"===this.state}isClear(){return"clear"===this.state}clear(){this.range=null,this.state="clear"}}class d{constructor(e,t,r){this.ci=e,this.operator=t,this.value=r}set(e,t){this.operator=e,this.value=t}includes(e){const{operator:t,value:r}=this;return"all"===t||"in"===t&&r.includes(e)}vlength(){const{operator:e,value:t}=this;return"in"===e?t.length:0}getData(){const{ci:e,operator:t,value:r}=this;return{ci:e,operator:t,value:r}}}class p{constructor(e,t){this.ci=e,this.order=t}asc(){return"asc"===this.order}desc(){return"desc"===this.order}}class m{constructor(){this.ref=null,this.filters=[],this.sort=null}setData({ref:e,filters:t,sort:r}){null!=e&&(this.ref=e,this.filters=t.map((e=>new d(e.ci,e.operator,e.value))),r&&(this.sort=new p(r.ci,r.order)))}getData(){if(this.active()){const{ref:e,filters:t,sort:r}=this;return{ref:e,filters:t.map((e=>e.getData())),sort:r}}return{}}addFilter(e,t,r){const n=this.getFilter(e);null==n?this.filters.push(new d(e,t,r)):n.set(t,r)}setSort(e,t){this.sort=t?new p(e,t):null}includes(e,t){return!!this.active()&&this.hrange().includes(e,t)}getSort(e){const{sort:t}=this;return t&&t.ci===e?t:null}getFilter(e){const{filters:t}=this;for(let r=0;r<t.length;r+=1)if(t[r].ci===e)return t[r];return null}filteredRows(e){const t=new Set,r=new Set;if(this.active()){const{sri:n,eri:i}=this.range(),{filters:s}=this;for(let a=n+1;a<=i;a+=1)for(let n=0;n<s.length;n+=1){const i=s[n],o=e(a,i.ci),l=o?o.text:"";if(!i.includes(l)){t.add(a);break}r.add(a)}}return{rset:t,fset:r}}items(e,t){const r={};if(this.active()){const{sri:n,eri:i}=this.range();for(let s=n+1;s<=i;s+=1){const n=t(s,e);if(null===n||/^\s*$/.test(n.text))r[""]=(r[""]||0)+1;else{const e=n.text,t=(r[e]||0)+1;r[e]=t}}}return r}range(){return l.valueOf(this.ref)}hrange(){const e=this.range();return e.eri=e.sri,e}clear(){this.ref=null,this.filters=[],this.sort=null}active(){return null!==this.ref}}class g{constructor(e=[]){this._=e}forEach(e){this._.forEach(e)}deleteWithin(e){this._=this._.filter((t=>!t.within(e)))}getFirstIncludes(e,t){for(let r=0;r<this._.length;r+=1){const n=this._[r];if(n.includes(e,t))return n}return null}filterIntersects(e){return new g(this._.filter((t=>t.intersects(e))))}intersects(e){for(let t=0;t<this._.length;t+=1){if(this._[t].intersects(e))return!0}return!1}union(e){let t=e;return this._.forEach((e=>{e.intersects(t)&&(t=e.union(t))})),t}add(e){this.deleteWithin(e),this._.push(e)}shift(e,t,r,n){this._.forEach((i=>{const{sri:s,sci:a,eri:o,eci:l}=i,c=i;"row"===e?s>=t?(c.sri+=r,c.eri+=r):s<t&&t<=o&&(c.eri+=r,n(s,a,r,0)):"column"===e&&(a>=t?(c.sci+=r,c.eci+=r):a<t&&t<=l&&(c.eci+=r,n(s,a,0,r)))}))}move(e,t,r){this._.forEach((n=>{const i=n;i.within(e)&&(i.eri+=t,i.sri+=t,i.sci+=r,i.eci+=r)}))}setData(e){return this._=e.map((e=>l.valueOf(e))),this}getData(){return this._.map((e=>e.toString()))}}const b=(e={},...t)=>(t.forEach((t=>{Object.keys(t).forEach((r=>{const n=t[r];"string"==typeof n||"number"==typeof n||"boolean"==typeof n?e[r]=n:"function"!=typeof n&&!Array.isArray(n)&&n instanceof Object?(e[r]=e[r]||{},b(e[r],n)):e[r]=n}))})),e);function v(e){const t=`${e}`;let r=0,n=!1;for(let e=0;e<t.length;e+=1)!0===n&&(r+=1),"."===t.charAt(e)&&(n=!0);return r}function y(e,t,r){if(Number.isNaN(t)||Number.isNaN(r))return t+e+r;const n=v(t),i=v(r),s=Number(t),a=Number(r);let o=0;if("-"===e)o=s-a;else if("+"===e)o=s+a;else if("*"===e)o=s*a;else if("/"===e)return o=s/a,v(o)>5?o.toFixed(2):o;return o.toFixed(Math.max(n,i))}var w={cloneDeep:function(e){return JSON.parse(JSON.stringify(e))},merge:(...e)=>b({},...e),equals:function e(t,r){const n=Object.keys(t);if(n.length!==Object.keys(r).length)return!1;for(let i=0;i<n.length;i+=1){const s=n[i],a=t[s],o=r[s];if(void 0===o)return!1;if("string"==typeof a||"number"==typeof a||"boolean"==typeof a){if(a!==o)return!1}else if(Array.isArray(a)){if(a.length!==o.length)return!1;for(let t=0;t<a.length;t+=1)if(!e(a[t],o[t]))return!1}else if("function"!=typeof a&&!Array.isArray(a)&&a instanceof Object&&!e(a,o))return!1}return!0},arrayEquals:function(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r+=1)if(e[r]!==t[r])return!1;return!0},sum:(e,t=e=>e)=>{let r=0,n=0;return Object.keys(e).forEach((i=>{r+=t(e[i],i),n+=1})),[r,n]},rangeEach:function(e,t,r){for(let n=e;n<t;n+=1)r(n)},rangeSum:function(e,t,r){let n=0;for(let i=e;i<t;i+=1)n+=r(i);return n},rangeReduceIf:function(e,t,r,n,i,s){let a=r,o=n,l=e;for(;l<t&&!(a>i);l+=1)o=s(l),a+=o;return[l,a-o,o]},deleteProperty:function(e,t){const r=e[`${t}`];return delete e[`${t}`],r},numberCalc:y};class x{constructor({len:e,height:t}){this._={},this.len=e,this.height=t}getHeight(e){if(this.isHide(e))return 0;const t=this.get(e);return t&&t.height?t.height:this.height}setHeight(e,t){this.getOrNew(e).height=t}unhide(e){let t=e;for(;t>0&&(t-=1,this.isHide(t));)this.setHide(t,!1)}isHide(e){const t=this.get(e);return t&&t.hide}setHide(e,t){const r=this.getOrNew(e);!0===t?r.hide=!0:delete r.hide}setStyle(e,t){this.getOrNew(e).style=t}sumHeight(e,t,r){return w.rangeSum(e,t,(e=>r&&r.has(e)?0:this.getHeight(e)))}totalHeight(){return this.sumHeight(0,this.len)}get(e){return this._[e]}getOrNew(e){return this._[e]=this._[e]||{cells:{}},this._[e]}getCell(e,t){const r=this.get(e);return void 0!==r&&void 0!==r.cells&&void 0!==r.cells[t]?r.cells[t]:null}getCellMerge(e,t){const r=this.getCell(e,t);return r&&r.merge?r.merge:[0,0]}getCellOrNew(e,t){const r=this.getOrNew(e);return r.cells[t]=r.cells[t]||{},r.cells[t]}setCell(e,t,r,n="all"){const i=this.getOrNew(e);"all"===n?i.cells[t]=r:"text"===n?(i.cells[t]=i.cells[t]||{},i.cells[t].text=r.text):"format"===n&&(i.cells[t]=i.cells[t]||{},i.cells[t].style=r.style,r.merge&&(i.cells[t].merge=r.merge))}setCellText(e,t,r){const n=this.getCellOrNew(e,t);!1!==n.editable&&(n.text=r)}copyPaste(e,t,r,n=!1,i=()=>{}){const{sri:s,sci:a,eri:l,eci:c}=e,h=t.sri,f=t.sci,u=t.eri,d=t.eci,[p,m]=e.size(),[g,b]=t.size();let v=!0,y=0;(u<s||d<a)&&(v=!1,y=u<s?g:b);for(let e=s;e<=l;e+=1)if(this._[e])for(let t=a;t<=c;t+=1)if(this._[e].cells&&this._[e].cells[t])for(let g=h;g<=u;g+=p)for(let b=f;b<=d;b+=m){const x=g+(e-s),_=b+(t-a),k=w.cloneDeep(this._[e].cells[t]);if(n&&k&&k.text&&k.text.length>0){const{text:e}=k;let t=b-f+(g-h)+2;if(v||(t-=y+1),"="===e[0])k.text=e.replace(/[a-zA-Z]{1,3}\d+/g,(e=>{let[r,n]=[0,0];return s===h?r=t-1:n=t-1,/^\d+$/.test(e)?e:o(e,r,n)}));else if(p<=1&&m>1&&(h>l||u<s)||m<=1&&p>1&&(f>c||d<a)||p<=1&&m<=1){const r=/[\\.\d]+$/.exec(e);if(null!==r){const n=Number(r[0])+t-1;k.text=e.substring(0,r.index)+n}}}this.setCell(x,_,k,r),i(x,_,k)}}cutPaste(e,t){const r={};this.each((n=>{this.eachCells(n,(i=>{let s=parseInt(n,10),a=parseInt(i,10);e.includes(n,i)&&(s=t.sri+(s-e.sri),a=t.sci+(a-e.sci)),r[s]=r[s]||{cells:{}},r[s].cells[a]=this._[n].cells[i]}))})),this._=r}paste(e,t){if(e.length<=0)return;const{sri:r,sci:n}=t;e.forEach(((e,t)=>{const i=r+t;e.forEach(((e,t)=>{const r=n+t;this.setCellText(i,r,e)}))}))}insert(e,t=1){const r={};this.each(((n,i)=>{let s=parseInt(n,10);s>=e&&(s+=t,this.eachCells(n,((r,n)=>{n.text&&"="===n.text[0]&&(n.text=n.text.replace(/[a-zA-Z]{1,3}\d+/g,(r=>o(r,0,t,((t,r)=>r>=e)))))}))),r[s]=i})),this._=r,this.len+=t}delete(e,t){const r=t-e+1,n={};this.each(((i,s)=>{const a=parseInt(i,10);a<e?n[a]=s:i>t&&(n[a-r]=s,this.eachCells(i,((e,n)=>{n.text&&"="===n.text[0]&&(n.text=n.text.replace(/[a-zA-Z]{1,3}\d+/g,(e=>o(e,0,-r,((e,r)=>r>t)))))})))})),this._=n,this.len-=r}insertColumn(e,t=1){this.each(((r,n)=>{const i={};this.eachCells(r,((r,n)=>{let s=parseInt(r,10);s>=e&&(s+=t,n.text&&"="===n.text[0]&&(n.text=n.text.replace(/[a-zA-Z]{1,3}\d+/g,(r=>o(r,t,0,(t=>t>=e)))))),i[s]=n})),n.cells=i}))}deleteColumn(e,t){const r=t-e+1;this.each(((n,i)=>{const s={};this.eachCells(n,((n,i)=>{const a=parseInt(n,10);a<e?s[a]=i:a>t&&(s[a-r]=i,i.text&&"="===i.text[0]&&(i.text=i.text.replace(/[a-zA-Z]{1,3}\d+/g,(e=>o(e,-r,0,(e=>e>t))))))})),i.cells=s}))}deleteCells(e,t="all"){e.each(((e,r)=>{this.deleteCell(e,r,t)}))}deleteCell(e,t,r="all"){const n=this.get(e);if(null!==n){const i=this.getCell(e,t);null!==i&&!1!==i.editable&&("all"===r?delete n.cells[t]:"text"===r?(i.text&&delete i.text,i.value&&delete i.value):"format"===r?(void 0!==i.style&&delete i.style,i.merge&&delete i.merge):"merge"===r&&i.merge&&delete i.merge)}}maxCell(){const e=Object.keys(this._),t=e[e.length-1],r=this._[t];if(r){const{cells:e}=r,n=Object.keys(e),i=n[n.length-1];return[parseInt(t,10),parseInt(i,10)]}return[0,0]}each(e){Object.entries(this._).forEach((([t,r])=>{e(t,r)}))}eachCells(e,t){this._[e]&&this._[e].cells&&Object.entries(this._[e].cells).forEach((([e,r])=>{t(e,r)}))}setData(e){e.len&&(this.len=e.len,delete e.len),this._=e}getData(){const{len:e}=this;return Object.assign({len:e},this._)}}class _{constructor({len:e,width:t,indexWidth:r,minWidth:n}){this._={},this.len=e,this.width=t,this.indexWidth=r,this.minWidth=n}setData(e){e.len&&(this.len=e.len,delete e.len),this._=e}getData(){const{len:e}=this;return Object.assign({len:e},this._)}getWidth(e){if(this.isHide(e))return 0;const t=this._[e];return t&&t.width?t.width:this.width}getOrNew(e){return this._[e]=this._[e]||{},this._[e]}setWidth(e,t){this.getOrNew(e).width=t}unhide(e){let t=e;for(;t>0&&(t-=1,this.isHide(t));)this.setHide(t,!1)}isHide(e){const t=this._[e];return t&&t.hide}setHide(e,t){const r=this.getOrNew(e);!0===t?r.hide=!0:delete r.hide}setStyle(e,t){this.getOrNew(e).style=t}sumWidth(e,t){return w.rangeSum(e,t,(e=>this.getWidth(e)))}totalWidth(){return this.sumWidth(0,this.len)}}let k=["en"];const S={en:{toolbar:{undo:"Undo",redo:"Redo",print:"Print",paintformat:"Paint format",clearformat:"Clear format",format:"Format",fontName:"Font",fontSize:"Font size",fontBold:"Font bold",fontItalic:"Font italic",underline:"Underline",strike:"Strike",color:"Text color",bgcolor:"Fill color",border:"Borders",merge:"Merge cells",align:"Horizontal align",valign:"Vertical align",textwrap:"Text wrapping",freeze:"Freeze cell",autofilter:"Filter",formula:"Functions",more:"More"},contextmenu:{copy:"Copy",cut:"Cut",paste:"Paste",pasteValue:"Paste values only",pasteFormat:"Paste format only",hide:"Hide",insertRow:"Insert row",insertColumn:"Insert column",deleteSheet:"Delete",deleteRow:"Delete row",deleteColumn:"Delete column",deleteCell:"Delete cell",deleteCellText:"Delete cell text",validation:"Data validations",cellprintable:"Enable export",cellnonprintable:"Disable export",celleditable:"Enable editing",cellnoneditable:"Disable editing"},print:{size:"Paper size",orientation:"Page orientation",orientations:["Landscape","Portrait"]},format:{normal:"Normal",text:"Plain Text",number:"Number",percent:"Percent",rmb:"RMB",usd:"USD",eur:"EUR",date:"Date",time:"Time",datetime:"Date time",duration:"Duration"},formula:{sum:"Sum",average:"Average",max:"Max",min:"Min",_if:"IF",and:"AND",or:"OR",concat:"Concat"},validation:{required:"it must be required",notMatch:"it not match its validation rule",between:"it is between {} and {}",notBetween:"it is not between {} and {}",notIn:"it is not in list",equal:"it equal to {}",notEqual:"it not equal to {}",lessThan:"it less than {}",lessThanEqual:"it less than or equal to {}",greaterThan:"it greater than {}",greaterThanEqual:"it greater than or equal to {}"},error:{pasteForMergedCell:"Unable to do this for merged cells"},calendar:{weeks:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"]},button:{next:"Next",cancel:"Cancel",remove:"Remove",save:"Save",ok:"OK"},sort:{desc:"Sort Z -> A",asc:"Sort A -> Z"},filter:{empty:"empty"},dataValidation:{mode:"Mode",range:"Cell Range",criteria:"Criteria",modeType:{cell:"Cell",column:"Colun",row:"Row"},type:{list:"List",number:"Number",date:"Date",phone:"Phone",email:"Email"},operator:{be:"between",nbe:"not betwwen",lt:"less than",lte:"less than or equal to",gt:"greater than",gte:"greater than or equal to",eq:"equal to",neq:"not equal to"}}}};function T(e,t){if(t)for(const r of k){if(!t[r])break;let n=t[r];const i=e.match(/(?:\\.|[^.])+/g);for(let e=0;e<i.length;e+=1){const t=n[i[e]];if(!t)break;if(e===i.length-1)return t;n=t}}}function E(e){let t=T(e,S);return!t&&window&&window.x_spreadsheet&&window.x_spreadsheet.$messages&&(t=T(e,window.x_spreadsheet.$messages)),t||""}function C(e){return()=>E(e)}function A(e,t,r=!1){r?k=[e]:k.unshift(e),t&&(S[e]=t)}const M={phone:/^[1-9]\d{10}$/,email:/w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/};function R(e,t,...r){let n="";return e||(n=E(`validation.${t}`,...r)),[e,n]}class O{constructor(e,t,r,n){this.required=t,this.value=r,this.type=e,this.operator=n,this.message=""}parseValue(e){const{type:t}=this;return"date"===t?new Date(e):"number"===t?Number(e):e}equals(e){let t=this.type===e.type&&this.required===e.required&&this.operator===e.operator;return t&&(t=Array.isArray(this.value)?w.arrayEquals(this.value,e.value):this.value===e.value),t}values(){return this.value.split(",")}validate(e){const{required:t,operator:r,value:n,type:i}=this;if(t&&/^\s*$/.test(e))return R(!1,"required");if(/^\s*$/.test(e))return[!0];if(M[i]&&!M[i].test(e))return R(!1,"notMatch");if("list"===i)return R(this.values().includes(e),"notIn");if(r){const t=this.parseValue(e);if("be"===r){const[e,r]=n;return R(t>=this.parseValue(e)&&t<=this.parseValue(r),"between",e,r)}if("nbe"===r){const[e,r]=n;return R(t<this.parseValue(e)||t>this.parseValue(r),"notBetween",e,r)}if("eq"===r)return R(t===this.parseValue(n),"equal",n);if("neq"===r)return R(t!==this.parseValue(n),"notEqual",n);if("lt"===r)return R(t<this.parseValue(n),"lessThan",n);if("lte"===r)return R(t<=this.parseValue(n),"lessThanEqual",n);if("gt"===r)return R(t>this.parseValue(n),"greaterThan",n);if("gte"===r)return R(t>=this.parseValue(n),"greaterThanEqual",n)}return[!0]}}class I{constructor(e,t,r){this.refs=t,this.mode=e,this.validator=r}includes(e,t){const{refs:r}=this;for(let n=0;n<r.length;n+=1){if(l.valueOf(r[n]).includes(e,t))return!0}return!1}addRef(e){this.remove(l.valueOf(e)),this.refs.push(e)}remove(e){const t=[];this.refs.forEach((r=>{const n=l.valueOf(r);if(n.intersects(e)){n.difference(e).forEach((e=>t.push(e.toString())))}else t.push(r)})),this.refs=t}getData(){const{refs:e,mode:t,validator:r}=this,{type:n,required:i,operator:s,value:a}=r;return{refs:e,mode:t,type:n,required:i,operator:s,value:a}}static valueOf({refs:e,mode:t,type:r,required:n,operator:i,value:s}){return new I(t,e,new O(r,n,s,i))}}class N{constructor(){this._=[],this.errors=new Map}getError(e,t){return this.errors.get(`${e}_${t}`)}validate(e,t,r){const n=this.get(e,t),i=`${e}_${t}`,{errors:s}=this;if(null!==n){const[e,t]=n.validator.validate(r);e?s.delete(i):s.set(i,t)}else s.delete(i);return!0}add(e,t,{type:r,required:n,value:i,operator:s}){const a=new O(r,n,i,s),o=this.getByValidator(a);null!==o?o.addRef(t):this._.push(new I(e,[t],a))}getByValidator(e){for(let t=0;t<this._.length;t+=1){const r=this._[t];if(r.validator.equals(e))return r}return null}get(e,t){for(let r=0;r<this._.length;r+=1){const n=this._[r];if(n.includes(e,t))return n}return null}remove(e){this.each((t=>{t.remove(e)}))}each(e){this._.forEach((t=>e(t)))}getData(){return this._.filter((e=>e.refs.length>0)).map((e=>e.getData()))}setData(e){this._=e.map((e=>I.valueOf(e)))}}const D={mode:"edit",view:{height:()=>document.documentElement.clientHeight,width:()=>document.documentElement.clientWidth},showGrid:!0,showToolbar:!0,showContextmenu:!0,showBottomBar:!0,row:{len:100,height:25},col:{len:26,width:100,indexWidth:60,minWidth:60},style:{bgcolor:"#ffffff",align:"left",valign:"middle",textwrap:!1,strike:!1,underline:!1,color:"#0a0a0a",font:{name:"Arial",size:10,bold:!1,italic:!1},format:"normal"}};function P(e,t,r=()=>{}){const{merges:n}=this,i=t.clone(),[s,a]=e.size(),[o,l]=t.size();return s>o&&(i.eri=t.sri+s-1),a>l&&(i.eci=t.sci+a-1),!n.intersects(i)||(r(E("error.pasteForMergedCell")),!1)}function F(e,t,r,n=!1){const{rows:i,merges:s}=this;"all"!==r&&"format"!==r||(i.deleteCells(t,r),s.deleteWithin(t)),i.copyPaste(e,t,r,n,((e,t,r)=>{if(r&&r.merge){const[n,i]=r.merge;if(n<=0&&i<=0)return;s.add(new l(e,t,e+n,t+i))}}))}function j(e,t){const{clipboard:r,rows:n,merges:i}=this;n.cutPaste(e,t),i.move(e,t.sri-e.sri,t.sci-e.sci),r.clear()}function L(e,t,r){const{styles:n,rows:i}=this,s=i.getCellOrNew(e,t);let a={};void 0!==s.style&&(a=w.cloneDeep(n[s.style])),a=w.merge(a,{border:r}),s.style=this.addStyle(a)}function B({mode:e,style:t,color:r}){const{styles:n,selector:i,rows:s}=this,{sri:a,sci:o,eri:l,eci:c}=i.range,h=!this.isSingleSelected();if(h||"inside"!==e&&"horizontal"!==e&&"vertical"!==e)if("outside"!==e||h){if("none"===e)i.range.each(((e,t)=>{const r=s.getCell(e,t);if(r&&void 0!==r.style){const e=w.cloneDeep(n[r.style]);delete e.border,r.style=this.addStyle(e)}}));else if("all"===e||"inside"===e||"outside"===e||"horizontal"===e||"vertical"===e){const n=[];for(let i=a;i<=l;i+=1)for(let f=o;f<=c;f+=1){const u=[];for(let e=0;e<n.length;e+=1){const[t,r,s,a]=n[e];if(i===t+s+1&&u.push(e),t<=i&&i<=t+s&&f===r){f+=a+1;break}}if(u.forEach((e=>n.splice(e,1))),f>c)break;const d=s.getCell(i,f);let[p,m]=[0,0];d&&d.merge&&([p,m]=d.merge,n.push([i,f,p,m]));const g=p>0&&i+p===l,b=m>0&&f+m===c;let v={};"all"===e?v={bottom:[t,r],top:[t,r],left:[t,r],right:[t,r]}:"inside"===e?(!b&&f<c&&(v.right=[t,r]),!g&&i<l&&(v.bottom=[t,r])):"horizontal"===e?!g&&i<l&&(v.bottom=[t,r]):"vertical"===e?!b&&f<c&&(v.right=[t,r]):"outside"===e&&h&&(a===i&&(v.top=[t,r]),(g||l===i)&&(v.bottom=[t,r]),o===f&&(v.left=[t,r]),(b||c===f)&&(v.right=[t,r])),Object.keys(v).length>0&&L.call(this,i,f,v),f+=m}}else if("top"===e||"bottom"===e)for(let n=o;n<=c;n+=1)"top"===e&&(L.call(this,a,n,{top:[t,r]}),n+=s.getCellMerge(a,n)[1]),"bottom"===e&&(L.call(this,l,n,{bottom:[t,r]}),n+=s.getCellMerge(l,n)[1]);else if("left"===e||"right"===e)for(let n=a;n<=l;n+=1)"left"===e&&(L.call(this,n,o,{left:[t,r]}),n+=s.getCellMerge(n,o)[0]),"right"===e&&(L.call(this,n,c,{right:[t,r]}),n+=s.getCellMerge(n,c)[0])}else L.call(this,a,o,{top:[t,r],bottom:[t,r],left:[t,r],right:[t,r]})}function z(e,t){const{rows:r}=this,n=this.freezeTotalHeight();let i=r.height;n+r.height<e&&(i-=t);const s=this.exceptRowSet;let a=0,o=i,{height:l}=r;for(;a<r.len&&!(o>e);a+=1)s.has(a)||(l=r.getHeight(a),o+=l);return o-=l,o<=0?{ri:-1,top:0,height:l}:{ri:a-1,top:o,height:l}}function U(e,t){const{cols:r}=this,n=this.freezeTotalWidth();let i=r.indexWidth;n+r.indexWidth<e&&(i-=t);const[s,a,o]=w.rangeReduceIf(0,r.len,i,r.indexWidth,e,(e=>r.getWidth(e)));return a<=0?{ci:-1,left:0,width:r.indexWidth}:{ci:s-1,left:a,width:o}}class H{constructor(e,t){this.settings=w.merge(D,t||{}),this.name=e||"sheet",this.freeze=[0,0],this.styles=[],this.merges=new g,this.rows=new x(this.settings.row),this.cols=new _(this.settings.col),this.validations=new N,this.hyperlinks={},this.comments={},this.selector=new c,this.scroll=new h,this.history=new f,this.clipboard=new u,this.autoFilter=new m,this.change=()=>{},this.exceptRowSet=new Set,this.sortedRowMap=new Map,this.unsortedRowMap=new Map}addValidation(e,t,r){this.changeData((()=>{this.validations.add(e,t,r)}))}removeValidation(){const{range:e}=this.selector;this.changeData((()=>{this.validations.remove(e)}))}getSelectedValidator(){const{ri:e,ci:t}=this.selector,r=this.validations.get(e,t);return r?r.validator:null}getSelectedValidation(){const{ri:e,ci:t,range:r}=this.selector,n=this.validations.get(e,t),i={ref:r.toString()};return null!==n&&(i.mode=n.mode,i.validator=n.validator),i}canUndo(){return this.history.canUndo()}canRedo(){return this.history.canRedo()}undo(){this.history.undo(this.getData(),(e=>{this.setData(e)}))}redo(){this.history.redo(this.getData(),(e=>{this.setData(e)}))}copy(){this.clipboard.copy(this.selector.range)}copyToSystemClipboard(e){let t=[];const{sri:r,eri:n,sci:i,eci:s}=this.selector.range;for(let e=r;e<=n;e+=1){const r=[];for(let t=i;t<=s;t+=1){const n=this.getCell(e,t);r.push(n&&n.text||"")}t.push(r)}t=t.map((e=>e.join("\t"))).join("\n"),e&&(e.clipboardData.clearData(),e.clipboardData.setData("text/plain",t),e.preventDefault()),navigator.clipboard&&navigator.clipboard.writeText(t).then((()=>{}),(e=>{console.log("text copy to the system clipboard error ",t,e)}))}cut(){this.clipboard.cut(this.selector.range)}paste(e="all",t=()=>{}){const{clipboard:r,selector:n}=this;return!r.isClear()&&(!!P.call(this,r.range,n.range,t)&&(this.changeData((()=>{r.isCopy()?F.call(this,r.range,n.range,e):r.isCut()&&j.call(this,r.range,n.range)})),!0))}pasteFromSystemClipboard(e,t){const{selector:r}=this;navigator.clipboard.readText().then((n=>{const i=this.parseClipboardContent(n);let s=r.ri;i.forEach((e=>{let t=r.ci;e.forEach((e=>{this.setCellText(s,t,e,"input"),t+=1})),s+=1})),e(),t(this.rows.getData())}))}parseClipboardContent(e){const t=[],r=e.split("\n");let n=0;return r.forEach((e=>{t[n]=e.split("\t"),n+=1})),t}pasteFromText(e){let t=[];if(t=/\r\n/.test(e)?e.split("\r\n").map((e=>e.replace(/"/g,"").split("\t"))):e.split("\n").map((e=>e.replace(/"/g,"").split("\t"))),t.length){const{rows:e,selector:r}=this;this.changeData((()=>{e.paste(t,r.range)}))}}autofill(e,t,r=()=>{}){const n=this.selector.range;return!!P.call(this,n,e,r)&&(this.changeData((()=>{F.call(this,n,e,t,!0)})),!0)}clearClipboard(){this.clipboard.clear()}calSelectedRangeByEnd(e,t){const{selector:r,rows:n,cols:i,merges:s}=this;let{sri:a,sci:o,eri:c,eci:h}=r.range;const f=r.ri,u=r.ci;let[d,p]=[e,t];return e<0&&(d=n.len-1),t<0&&(p=i.len-1),[a,c]=d>f?[f,d]:[d,f],[o,h]=p>u?[u,p]:[p,u],r.range=s.union(new l(a,o,c,h)),r.range=s.union(r.range),r.range}calSelectedRangeByStart(e,t){const{selector:r,rows:n,cols:i,merges:s}=this;let a=s.getFirstIncludes(e,t);return null===a&&(a=new l(e,t,e,t),-1===e&&(a.sri=0,a.eri=n.len-1),-1===t&&(a.sci=0,a.eci=i.len-1)),r.range=a,a}setSelectedCellAttr(e,t){this.changeData((()=>{const{selector:r,styles:n,rows:i}=this;if("merge"===e)t?this.merge():this.unmerge();else if("border"===e)B.call(this,t);else if("formula"===e){const{ri:e,ci:n,range:s}=r;if(r.multiple()){const[n,o]=r.size(),{sri:l,sci:c,eri:h,eci:f}=s;if(n>1)for(let e=c;e<=f;e+=1){i.getCellOrNew(h+1,e).text=`=${t}(${a(e,l)}:${a(e,h)})`}else if(o>1){i.getCellOrNew(e,f+1).text=`=${t}(${a(c,e)}:${a(f,e)})`}}else{i.getCellOrNew(e,n).text=`=${t}()`}}else r.range.each(((r,s)=>{const a=i.getCellOrNew(r,s);let o={};if(void 0!==a.style&&(o=w.cloneDeep(n[a.style])),"format"===e)o.format=t,a.style=this.addStyle(o);else if("font-bold"===e||"font-italic"===e||"font-name"===e||"font-size"===e){const r={};r[e.split("-")[1]]=t,o.font=Object.assign(o.font||{},r),a.style=this.addStyle(o)}else"strike"===e||"textwrap"===e||"underline"===e||"align"===e||"valign"===e||"color"===e||"bgcolor"===e?(o[e]=t,a.style=this.addStyle(o)):a[e]=t}))}))}setSelectedCellText(e,t="input"){const{autoFilter:r,selector:n,rows:i}=this,{ri:s,ci:a}=n;let o=s;this.unsortedRowMap.has(s)&&(o=this.unsortedRowMap.get(s));const l=i.getCell(o,a),c=l?l.text:"";if(this.setCellText(o,a,e,t),r.active()){const t=r.getFilter(a);if(t){const r=t.value.findIndex((e=>e===c));r>=0&&t.value.splice(r,1,e)}}}getSelectedCell(){const{ri:e,ci:t}=this.selector;let r=e;return this.unsortedRowMap.has(e)&&(r=this.unsortedRowMap.get(e)),this.rows.getCell(r,t)}xyInSelectedRect(e,t){const{left:r,top:n,width:i,height:s}=this.getSelectedRect(),a=e-this.cols.indexWidth,o=t-this.rows.height;return a>r&&a<r+i&&o>n&&o<n+s}getSelectedRect(){return this.getRect(this.selector.range)}getClipboardRect(){const{clipboard:e}=this;return e.isClear()?{left:-100,top:-100}:this.getRect(e.range)}getRect(e){const{scroll:t,rows:r,cols:n,exceptRowSet:i}=this,{sri:s,sci:a,eri:o,eci:l}=e;if(s<0&&a<0)return{left:0,l:0,top:0,t:0,scroll:t};const c=n.sumWidth(0,a),h=r.sumHeight(0,s,i),f=r.sumHeight(s,o+1,i),u=n.sumWidth(a,l+1);let d=c-t.x,p=h-t.y;const m=this.freezeTotalHeight(),g=this.freezeTotalWidth();return g>0&&g>c&&(d=c),m>0&&m>h&&(p=h),{l:c,t:h,left:d,top:p,height:f,width:u,scroll:t}}getCellRectByXY(e,t){const{scroll:r,merges:n,rows:i,cols:s}=this;let{ri:a,top:o,height:l}=z.call(this,t,r.y),{ci:c,left:h,width:f}=U.call(this,e,r.x);if(-1===c&&(f=s.totalWidth()),-1===a&&(l=i.totalHeight()),a>=0||c>=0){const e=n.getFirstIncludes(a,c);e&&(a=e.sri,c=e.sci,({left:h,top:o,width:f,height:l}=this.cellRect(a,c)))}return{ri:a,ci:c,left:h,top:o,width:f,height:l}}isSingleSelected(){const{sri:e,sci:t,eri:r,eci:n}=this.selector.range,i=this.getCell(e,t);if(i&&i.merge){const[s,a]=i.merge;if(e+s===r&&t+a===n)return!0}return!this.selector.multiple()}canUnmerge(){const{sri:e,sci:t,eri:r,eci:n}=this.selector.range,i=this.getCell(e,t);if(i&&i.merge){const[s,a]=i.merge;if(e+s===r&&t+a===n)return!0}return!1}merge(){const{selector:e,rows:t}=this;if(this.isSingleSelected())return;const[r,n]=e.size();if(r>1||n>1){const{sri:i,sci:s}=e.range;this.changeData((()=>{const a=t.getCellOrNew(i,s);a.merge=[r-1,n-1],this.merges.add(e.range),this.rows.deleteCells(e.range),this.rows.setCell(i,s,a)}))}}unmerge(){const{selector:e}=this;if(!this.isSingleSelected())return;const{sri:t,sci:r}=e.range;this.changeData((()=>{this.rows.deleteCell(t,r,"merge"),this.merges.deleteWithin(e.range)}))}canAutofilter(){return!this.autoFilter.active()}autofilter(){const{autoFilter:e,selector:t}=this;this.changeData((()=>{e.active()?(e.clear(),this.exceptRowSet=new Set,this.sortedRowMap=new Map,this.unsortedRowMap=new Map):e.ref=t.range.toString()}))}setAutoFilter(e,t,r,n){const{autoFilter:i}=this;i.addFilter(e,r,n),i.setSort(e,t),this.resetAutoFilter()}resetAutoFilter(){const{autoFilter:e,rows:t}=this;if(!e.active())return;const{sort:r}=e,{rset:n,fset:i}=e.filteredRows(((e,r)=>t.getCell(e,r))),s=Array.from(i),a=Array.from(i);r&&s.sort(((e,t)=>"asc"===r.order?e-t:"desc"===r.order?t-e:0)),this.exceptRowSet=n,this.sortedRowMap=new Map,this.unsortedRowMap=new Map,s.forEach(((e,t)=>{this.sortedRowMap.set(a[t],e),this.unsortedRowMap.set(e,a[t])}))}deleteCell(e="all"){const{selector:t}=this;this.changeData((()=>{this.rows.deleteCells(t.range,e),"all"!==e&&"format"!==e||this.merges.deleteWithin(t.range)}))}insert(e,t=1){this.changeData((()=>{const{sri:r,sci:n}=this.selector.range,{rows:i,merges:s,cols:a}=this;let o=r;"row"===e?i.insert(r,t):"column"===e&&(i.insertColumn(n,t),o=n,a.len+=t,Object.keys(a._).reverse().forEach((e=>{const r=parseInt(e,10);r>=n&&(a._[r+t]=a._[r],delete a._[r])}))),s.shift(e,o,t,((e,t,r,n)=>{const s=i.getCell(e,t);s.merge[0]+=r,s.merge[1]+=n}))}))}delete(e){this.changeData((()=>{const{rows:t,merges:r,selector:n,cols:i}=this,{range:s}=n,{sri:a,sci:o,eri:l,eci:c}=n.range,[h,f]=n.range.size();let u=a,d=h;"row"===e?t.delete(a,l):"column"===e&&(t.deleteColumn(o,c),u=s.sci,d=f,i.len-=c-o+1,Object.keys(i._).forEach((e=>{const t=parseInt(e,10);t>=o&&(t>c&&(i._[t-(c-o+1)]=i._[t]),delete i._[t])}))),r.shift(e,u,-d,((e,r,n,i)=>{const s=t.getCell(e,r);s.merge[0]+=n,s.merge[1]+=i,0===s.merge[0]&&0===s.merge[1]&&delete s.merge}))}))}scrollx(e,t){const{scroll:r,freeze:n,cols:i}=this,[,s]=n,[a,o,l]=w.rangeReduceIf(s,i.len,0,0,e,(e=>i.getWidth(e)));let c=o;e>0&&(c+=l),r.x!==c&&(r.ci=e>0?a:0,r.x=c,t())}scrolly(e,t){const{scroll:r,freeze:n,rows:i}=this,[s]=n,[a,o,l]=w.rangeReduceIf(s,i.len,0,0,e,(e=>i.getHeight(e)));let c=o;e>0&&(c+=l),r.y!==c&&(r.ri=e>0?a:0,r.y=c,t())}cellRect(e,t){const{rows:r,cols:n}=this,i=n.sumWidth(0,t),s=r.sumHeight(0,e),a=r.getCell(e,t);let o=n.getWidth(t),l=r.getHeight(e);if(null!==a&&a.merge){const[i,s]=a.merge;if(i>0)for(let t=1;t<=i;t+=1)l+=r.getHeight(e+t);if(s>0)for(let e=1;e<=s;e+=1)o+=n.getWidth(t+e)}return{left:i,top:s,width:o,height:l,cell:a}}getCell(e,t){return this.rows.getCell(e,t)}getCellTextOrDefault(e,t){const r=this.getCell(e,t);return r&&r.text?r.text:""}getCellStyle(e,t){const r=this.getCell(e,t);return r&&void 0!==r.style?this.styles[r.style]:null}getCellStyleOrDefault(e,t){const{styles:r,rows:n}=this,i=n.getCell(e,t),s=i&&void 0!==i.style?r[i.style]:{};return w.merge(this.defaultStyle(),s)}getSelectedCellStyle(){const{ri:e,ci:t}=this.selector;return this.getCellStyleOrDefault(e,t)}setCellText(e,t,r,n){const{rows:i,history:s,validations:a}=this;"finished"===n?(i.setCellText(e,t,""),s.add(this.getData()),i.setCellText(e,t,r)):(i.setCellText(e,t,r),this.change(this.getData())),a.validate(e,t,r)}freezeIsActive(){const[e,t]=this.freeze;return e>0||t>0}setFreeze(e,t){this.changeData((()=>{this.freeze=[e,t]}))}freezeTotalWidth(){return this.cols.sumWidth(0,this.freeze[1])}freezeTotalHeight(){return this.rows.sumHeight(0,this.freeze[0])}setRowHeight(e,t){this.changeData((()=>{this.rows.setHeight(e,t)}))}setColWidth(e,t){this.changeData((()=>{this.cols.setWidth(e,t)}))}viewHeight(){const{view:e,showToolbar:t,showBottomBar:r}=this.settings;let n=e.height();return r&&(n-=41),t&&(n-=41),n}viewWidth(){return this.settings.view.width()}freezeViewRange(){const[e,t]=this.freeze;return new l(0,0,e-1,t-1,this.freezeTotalWidth(),this.freezeTotalHeight())}contentRange(){const{rows:e,cols:t}=this,[r,n]=e.maxCell(),i=e.sumHeight(0,r+1),s=t.sumWidth(0,n+1);return new l(0,0,r,n,s,i)}exceptRowTotalHeight(e,t){const{exceptRowSet:r,rows:n}=this,i=Array.from(r);let s=0;return i.forEach((r=>{if(r<e||r>t){const e=n.getHeight(r);s+=e}})),s}viewRange(){const{scroll:e,rows:t,cols:r,freeze:n,exceptRowSet:i}=this;let{ri:s,ci:a}=e;s<=0&&([s]=n),a<=0&&([,a]=n);let[o,c]=[0,0],[h,f]=[t.len,r.len];for(let e=s;e<t.len&&(i.has(e)||(c+=t.getHeight(e),h=e),!(c>this.viewHeight()));e+=1);for(let e=a;e<r.len&&(o+=r.getWidth(e),f=e,!(o>this.viewWidth()));e+=1);return new l(s,a,h,f,o,c)}eachMergesInView(e,t){this.merges.filterIntersects(e).forEach((e=>t(e)))}hideRowsOrCols(){const{rows:e,cols:t,selector:r}=this,[n,i]=r.size(),{sri:s,sci:a,eri:o,eci:l}=r.range;if(n===e.len)for(let e=a;e<=l;e+=1)t.setHide(e,!0);else if(i===t.len)for(let t=s;t<=o;t+=1)e.setHide(t,!0)}unhideRowsOrCols(e,t){this[`${e}s`].unhide(t)}rowEach(e,t,r){let n=0;const{rows:i}=this,s=this.exceptRowSet,a=[...s];let o=0;for(let t=0;t<a.length;t+=1)a[t]<e&&(o+=1);for(let a=e+o;a<=t+o;a+=1)if(s.has(a))o+=1;else{const e=i.getHeight(a);if(e>0&&(r(a,n,e),n+=e,n>this.viewHeight()))break}}colEach(e,t,r){let n=0;const{cols:i}=this;for(let s=e;s<=t;s+=1){const e=i.getWidth(s);if(e>0&&(r(s,n,e),n+=e,n>this.viewWidth()))break}}defaultStyle(){return this.settings.style}addStyle(e){const{styles:t}=this;for(let r=0;r<t.length;r+=1){const n=t[r];if(w.equals(n,e))return r}return t.push(e),t.length-1}changeData(e){this.history.add(this.getData()),e(),this.change(this.getData())}setData(e){return Object.keys(e).forEach((t=>{if("merges"===t||"rows"===t||"cols"===t||"validations"===t)this[t].setData(e[t]);else if("freeze"===t){const[r,n]=s(e[t]);this.freeze=[n,r]}else"autofilter"===t?this.autoFilter.setData(e[t]):void 0!==e[t]&&(this[t]=e[t])})),this}getData(){const{name:e,freeze:t,styles:r,merges:n,rows:i,cols:s,validations:o,autoFilter:l}=this;return{name:e,freeze:a(t[1],t[0]),styles:r,merges:n.getData(),rows:i.getData(),cols:s.getData(),validations:o.getData(),autofilter:l.getData()}}}function W(e,t,r){e.addEventListener(t,r)}function V(e,t,r){e.removeEventListener(t,r)}function q(e){e.xclickoutside&&(V(window.document.body,"click",e.xclickoutside),delete e.xclickoutside)}function X(e,t){e.xclickoutside=r=>{2===r.detail||e.contains(r.target)||(t?t(e):(e.hide(),q(e)))},W(window.document.body,"click",e.xclickoutside)}function G(e,t,r){W(e,"mousemove",t);e.xEvtUp=n=>{V(e,"mousemove",t),V(e,"mouseup",e.xEvtUp),r(n)},W(e,"mouseup",e.xEvtUp)}function Y(e,t,r,n){let i="";Math.abs(e)>Math.abs(t)?(i=e>0?"right":"left",n(i,e,r)):(i=t>0?"down":"up",n(i,t,r))}const K="x-spreadsheet";class Z{constructor(e=!1,r){this.moving=!1,this.vertical=e,this.el=t("div",`${K}-resizer ${e?"vertical":"horizontal"}`).children(this.unhideHoverEl=t("div",`${K}-resizer-hover`).on("dblclick.stop",(e=>this.mousedblclickHandler(e))).css("position","absolute").hide(),this.hoverEl=t("div",`${K}-resizer-hover`).on("mousedown.stop",(e=>this.mousedownHandler(e))),this.lineEl=t("div",`${K}-resizer-line`).hide()).hide(),this.cRect=null,this.finishedFn=null,this.minDistance=r,this.unhideFn=()=>{}}showUnhide(e){this.unhideIndex=e,this.unhideHoverEl.show()}hideUnhide(){this.unhideHoverEl.hide()}show(e,t){const{moving:r,vertical:n,hoverEl:i,lineEl:s,el:a,unhideHoverEl:o}=this;if(r)return;this.cRect=e;const{left:l,top:c,width:h,height:f}=e;a.offset({left:n?l+h-5:l,top:n?c:c+f-5}).show(),i.offset({width:n?5:h,height:n?f:5}),s.offset({width:n?0:t.width,height:n?t.height:0}),o.offset({left:n?5-h:l,top:n?c:5-f,width:n?5:h,height:n?f:5})}hide(){this.el.offset({left:0,top:0}).hide(),this.hideUnhide()}mousedblclickHandler(){this.unhideIndex&&this.unhideFn(this.unhideIndex)}mousedownHandler(e){let t=e;const{el:r,lineEl:n,cRect:i,vertical:s,minDistance:a}=this;let o=s?i.width:i.height;n.show(),G(window,(e=>{this.moving=!0,null!==t&&1===e.buttons&&(s?(o+=e.movementX,o>a&&r.css("left",`${i.left+o}px`)):(o+=e.movementY,o>a&&r.css("top",`${i.top+o}px`)),t=e)}),(()=>{t=null,n.hide(),this.moving=!1,this.hide(),this.finishedFn&&(o<a&&(o=a),this.finishedFn(i,o))}))}}class J{constructor(e){this.vertical=e,this.moveFn=null,this.el=t("div",`${K}-scrollbar ${e?"vertical":"horizontal"}`).child(this.contentEl=t("div","")).on("mousemove.stop",(()=>{})).on("scroll.stop",(e=>{const{scrollTop:t,scrollLeft:r}=e.target;this.moveFn&&this.moveFn(this.vertical?t:r,e)}))}move(e){return this.el.scroll(e),this}scroll(){return this.el.scroll()}set(e,t){const r=e-1;if(t>r){const e=this.vertical?"height":"width";this.el.css(e,r-15+"px").show(),this.contentEl.css(this.vertical?"width":"height","1px").css(e,`${t}px`)}else this.el.hide();return this}}let Q=10;class ee{constructor(e=!1,r=!0){this.useHideInput=e,this.autoFocus=r,this.inputChange=()=>{},this.cornerEl=t("div",`${K}-selector-corner`),this.areaEl=t("div",`${K}-selector-area`).child(this.cornerEl).hide(),this.clipboardEl=t("div",`${K}-selector-clipboard`).hide(),this.autofillEl=t("div",`${K}-selector-autofill`).hide(),this.el=t("div",`${K}-selector`).css("z-index",`${Q}`).children(this.areaEl,this.clipboardEl,this.autofillEl).hide(),e&&(this.hideInput=t("input","").on("compositionend",(e=>{this.inputChange(e.target.value)})),this.el.child(this.hideInputDiv=t("div","hide-input").child(this.hideInput)),this.el.child(this.hideInputDiv=t("div","hide-input").child(this.hideInput))),Q+=1}setOffset(e){return this.el.offset(e).show(),this}hide(){return this.el.hide(),this}setAreaOffset(e){const{left:t,top:r,width:n,height:i}=e,s={width:n-3+.8,height:i-3+.8,left:t-.8,top:r-.8};this.areaEl.offset(s).show(),this.useHideInput&&(this.hideInputDiv.offset(s),this.autoFocus?this.hideInput.val("").focus():this.hideInput.val(""))}setClipboardOffset(e){const{left:t,top:r,width:n,height:i}=e;this.clipboardEl.offset({left:t,top:r,width:n-5,height:i-5})}showAutofill(e){const{left:t,top:r,width:n,height:i}=e;this.autofillEl.offset({width:n-3,height:i-3,left:t,top:r}).show()}hideAutofill(){this.autofillEl.hide()}showClipboard(){this.clipboardEl.show()}hideClipboard(){this.clipboardEl.hide()}}function te(e){const{data:t}=this,{left:r,top:n,width:i,height:s,scroll:a,l:o,t:l}=e,c=t.freezeTotalWidth(),h=t.freezeTotalHeight();let f=r-c;c>o&&(f-=a.x);let u=n-h;return h>l&&(u-=a.y),{left:f,top:u,width:i,height:s}}function re(e){const{data:t}=this,{left:r,width:n,height:i,l:s,t:a,scroll:o}=e,l=t.freezeTotalWidth();let c=r-l;return l>s&&(c-=o.x),{left:c,top:a,width:n,height:i}}function ne(e){const{data:t}=this,{top:r,width:n,height:i,l:s,t:a,scroll:o}=e,l=t.freezeTotalHeight();let c=r-l;return l>a&&(c-=o.y),{left:s,top:c,width:n,height:i}}function ie(e){const{br:t}=this;t.setAreaOffset(te.call(this,e))}function se(e){const{tl:t}=this;t.setAreaOffset(e)}function ae(e){const{t:t}=this;t.setAreaOffset(re.call(this,e))}function oe(e){const{l:t}=this;t.setAreaOffset(ne.call(this,e))}function le(e){const{l:t}=this;t.setClipboardOffset(ne.call(this,e))}function ce(e){const{br:t}=this;t.setClipboardOffset(te.call(this,e))}function he(e){const{tl:t}=this;t.setClipboardOffset(e)}function fe(e){const{t:t}=this;t.setClipboardOffset(re.call(this,e))}function ue(e){ie.call(this,e),se.call(this,e),ae.call(this,e),oe.call(this,e)}function de(e){ce.call(this,e),he.call(this,e),fe.call(this,e),le.call(this,e)}class pe{constructor(e){const{autoFocus:r}=e.settings;this.inputChange=()=>{},this.data=e,this.br=new ee(!0,r),this.t=new ee,this.l=new ee,this.tl=new ee,this.br.inputChange=e=>{this.inputChange(e)},this.br.el.show(),this.offset=null,this.areaOffset=null,this.indexes=null,this.range=null,this.arange=null,this.el=t("div",`${K}-selectors`).children(this.tl.el,this.t.el,this.l.el,this.br.el).hide(),this.lastri=-1,this.lastci=-1,Q+=1}resetData(e){this.data=e,this.range=e.selector.range,this.resetAreaOffset()}hide(){this.el.hide()}resetOffset(){const{data:e,tl:t,t:r,l:n,br:i}=this,s=e.freezeTotalHeight(),a=e.freezeTotalWidth();s>0||a>0?(t.setOffset({width:a,height:s}),r.setOffset({left:a,height:s}),n.setOffset({top:s,width:a}),i.setOffset({left:a,top:s})):(t.hide(),r.hide(),n.hide(),i.setOffset({left:0,top:0}))}resetAreaOffset(){const e=this.data.getSelectedRect(),t=this.data.getClipboardRect();ue.call(this,e),de.call(this,t),this.resetOffset()}resetBRTAreaOffset(){const e=this.data.getSelectedRect(),t=this.data.getClipboardRect();ie.call(this,e),ae.call(this,e),ce.call(this,t),fe.call(this,t),this.resetOffset()}resetBRLAreaOffset(){const e=this.data.getSelectedRect(),t=this.data.getClipboardRect();ie.call(this,e),oe.call(this,e),ce.call(this,t),le.call(this,t),this.resetOffset()}set(e,t,r=!0){const{data:n}=this,i=n.calSelectedRangeByStart(e,t),{sri:s,sci:a}=i;if(r){let[r,i]=[e,t];e<0&&(r=0),t<0&&(i=0),n.selector.setIndexes(r,i),this.indexes=[r,i]}this.moveIndexes=[s,a],this.range=i,this.resetAreaOffset(),this.el.show()}setEnd(e,t,r=!0){const{data:n,lastri:i,lastci:s}=this;if(r){if(e===i&&t===s)return;this.lastri=e,this.lastci=t}this.range=n.calSelectedRangeByEnd(e,t),ue.call(this,this.data.getSelectedRect())}reset(){const{eri:e,eci:t}=this.data.selector.range;this.setEnd(e,t)}showAutofill(e,t){if(-1===e&&-1===t)return;const{sri:r,sci:n,eri:i,eci:s}=this.range,[a,o]=[e,t],c=r-e,h=i-e,f=s-t;if(n-t>0)this.arange=new l(r,o,i,n-1);else if(c>0)this.arange=new l(a,n,r-1,s);else if(f<0)this.arange=new l(r,s+1,i,o);else{if(!(h<0))return void(this.arange=null);this.arange=new l(i+1,n,a,s)}if(null!==this.arange){const e=this.data.getRect(this.arange);e.width+=2,e.height+=2;const{br:t,l:r,t:n,tl:i}=this;t.showAutofill(te.call(this,e)),r.showAutofill(ne.call(this,e)),n.showAutofill(re.call(this,e)),i.showAutofill(e)}}hideAutofill(){["br","l","t","tl"].forEach((e=>{this[e].hideAutofill()}))}showClipboard(){const e=this.data.getClipboardRect();de.call(this,e),["br","l","t","tl"].forEach((e=>{this[e].showClipboard()}))}hideClipboard(){["br","l","t","tl"].forEach((e=>{this[e].hideClipboard()}))}}function me(e){e.preventDefault(),e.stopPropagation();const{filterItems:t}=this;t.length<=0||(this.itemIndex>=0&&t[this.itemIndex].toggle(),this.itemIndex-=1,this.itemIndex<0&&(this.itemIndex=t.length-1),t[this.itemIndex].toggle())}function ge(e){e.stopPropagation();const{filterItems:t}=this;t.length<=0||(this.itemIndex>=0&&t[this.itemIndex].toggle(),this.itemIndex+=1,this.itemIndex>t.length-1&&(this.itemIndex=0),t[this.itemIndex].toggle())}function be(e){e.preventDefault();const{filterItems:t}=this;t.length<=0||(e.stopPropagation(),this.itemIndex<0&&(this.itemIndex=0),t[this.itemIndex].el.click(),this.hide())}function ve(e){const{keyCode:t}=e;switch(e.ctrlKey&&e.stopPropagation(),t){case 37:case 39:default:e.stopPropagation();break;case 38:me.call(this,e);break;case 40:ge.call(this,e);break;case 13:case 9:be.call(this,e)}}class ye{constructor(e,r,n="200px"){this.filterItems=[],this.items=e,this.el=t("div",`${K}-suggest`).css("width",n).hide(),this.itemClick=r,this.itemIndex=-1}setOffset(e){this.el.cssRemoveKeys("top","bottom").offset(e)}hide(){const{el:e}=this;this.filterItems=[],this.itemIndex=-1,e.hide(),q(this.el.parent())}setItems(e){this.items=e}search(e){let{items:r}=this;if(/^\s*$/.test(e)||(r=r.filter((t=>(t.key||t).startsWith(e.toUpperCase())))),r=r.map((e=>{let{title:r}=e;r?"function"==typeof r&&(r=r()):r=e;const n=t("div",`${K}-item`).child(r).on("click.stop",(()=>{this.itemClick(e),this.hide()}));return e.label&&n.child(t("div","label").html(e.label)),n})),this.filterItems=r,r.length<=0)return;const{el:n}=this;n.html("").children(...r).show(),X(n.parent(),(()=>{this.hide()}))}bindInputEvents(e){e.on("keydown",(e=>ve.call(this,e)))}}class we extends e{constructor(e){super("div",`${K}-icon`),this.iconNameEl=t("div",`${K}-icon-img ${e}`),this.child(this.iconNameEl)}setName(e){this.iconNameEl.className(`${K}-icon-img ${e}`)}}function xe(e,t){e.setMonth(e.getMonth()+t)}function _e(e,t){const r=new Date(e);return r.setDate(t-e.getDay()+1),r}class ke{constructor(e){this.value=e,this.cvalue=new Date(e),this.headerLeftEl=t("div","calendar-header-left"),this.bodyEl=t("tbody",""),this.buildAll(),this.el=t("div","x-spreadsheet-calendar").children(t("div","calendar-header").children(this.headerLeftEl,t("div","calendar-header-right").children(t("a","calendar-prev").on("click.stop",(()=>this.prev())).child(new we("chevron-left")),t("a","calendar-next").on("click.stop",(()=>this.next())).child(new we("chevron-right")))),t("table","calendar-body").children(t("thead","").child(t("tr","").children(...E("calendar.weeks").map((e=>t("th","cell").child(e))))),this.bodyEl)),this.selectChange=()=>{}}setValue(e){this.value=e,this.cvalue=new Date(e),this.buildAll()}prev(){const{value:e}=this;xe(e,-1),this.buildAll()}next(){const{value:e}=this;xe(e,1),this.buildAll()}buildAll(){this.buildHeaderLeft(),this.buildBody()}buildHeaderLeft(){const{value:e}=this;this.headerLeftEl.html(`${E("calendar.months")[e.getMonth()]} ${e.getFullYear()}`)}buildBody(){const{value:e,cvalue:r,bodyEl:n}=this,i=function(e,t,r){const n=new Date(e,t,1,23,59,59),i=[[],[],[],[],[],[]];for(let e=0;e<6;e+=1)for(let s=0;s<7;s+=1){const a=_e(n,7*e+s),o=a.getMonth()!==t,l=a.getMonth()===r.getMonth()&&a.getDate()===r.getDate();i[e][s]={d:a,disabled:o,active:l}}return i}(e.getFullYear(),e.getMonth(),r).map((e=>{const r=e.map((e=>{let r="cell";return e.disabled&&(r+=" disabled"),e.active&&(r+=" active"),t("td","").child(t("div",r).on("click.stop",(()=>{this.selectChange(e.d)})).child(e.d.getDate().toString()))}));return t("tr","").children(...r)}));n.html("").children(...i)}}class Se{constructor(){this.calendar=new ke(new Date),this.el=t("div",`${K}-datepicker`).child(this.calendar.el).hide()}setValue(e){const{calendar:t}=this;return"string"==typeof e?/^\d{4}-\d{1,2}-\d{1,2}$/.test(e)&&t.setValue(new Date(e.replace(new RegExp("-","g"),"/"))):e instanceof Date&&t.setValue(e),this}change(e){this.calendar.selectChange=t=>{e(t),this.hide()}}show(){this.el.show()}hide(){this.el.hide()}}function Te(){const{inputText:e}=this;if(!/^\s*$/.test(e)){const{textlineEl:t,textEl:r,areaOffset:n}=this,i=e.split("\n"),s=Math.max(...i.map((e=>e.length))),a=t.offset().width/e.length,o=(s+1)*a+5,l=this.viewFn().width-n.left-a;let c=i.length;if(o>n.width){let e=o;o>l&&(e=l,c+=parseInt(o/l,10),c+=o%l>0?1:0),r.css("width",`${e}px`)}c*=this.rowHeight,c>n.height&&r.css("height",`${c}px`)}}function Ee({target:e},t){const{value:r,selectionEnd:n}=e,i=`${r.slice(0,n)}${t}${r.slice(n)}`;e.value=i,e.setSelectionRange(n+1,n+1),this.inputText=i,this.textlineEl.html(i),Te.call(this)}function Ce(e){const{keyCode:t,altKey:r}=e;13!==t&&9!==t&&e.stopPropagation(),13===t&&r&&(Ee.call(this,e,"\n"),e.stopPropagation()),13!==t||r||e.preventDefault()}function Ae(e){const t=e.target.value,{suggest:r,textlineEl:n,validator:i}=this,{cell:s}=this;if(null!==s)if("edi