quill-table-up 3.5.0 → 3.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -0
- package/dist/index.js +22 -22
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +23 -23
- package/dist/index.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/unit/table-clipboard.test.ts +446 -108
- package/src/__tests__/unit/table-hack.test.ts +402 -1
- package/src/modules/table-clipboard/table-clipboard.ts +128 -32
- package/src/modules/table-selection.ts +22 -2
- package/src/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
- package/src/table-up.ts +42 -10
package/dist/index.js
CHANGED
|
@@ -11,11 +11,11 @@ import e from"quill";const t={container:`table-up-container`,tableCaption:`table
|
|
|
11
11
|
/>
|
|
12
12
|
</svg>
|
|
13
13
|
`;const Ln=e.import(`parchment`),Rn=e.import(`blots/inline`),zn=e.import(`blots/text`);var Bn=class extends Dn{static blotName=t.tableCaption;static tagName=`caption`;static className=`ql-table-caption`;static allowedChildren=[Rn,zn];static create(e){let{tableId:t}=e,n=super.create();return n.dataset.tableId=t,e.side===`bottom`&&(n.style.captionSide=`bottom`),n}static formats(e){let{tableId:t}=e.dataset;return{tableId:t,side:e.style.captionSide===`bottom`?`bottom`:`top`}}constructor(e,t,n){super(e,t),t.setAttribute(`contenteditable`,String(e.isEnabled())),this.attachUI(this.createUI()),this.domNode.addEventListener(`mouseenter`,()=>{this.scroll.isEnabled()&&(this.uiNode.style.display=`flex`)}),this.domNode.addEventListener(`mouseleave`,()=>{this.scroll.isEnabled()&&(this.uiNode.style.display=`none`)}),this.uiNode.style.display=`none`}createUI(){let e=document.createElement(`i`);return e.classList.add(`ql-table-caption--switch`),e.innerHTML=In,e.addEventListener(`click`,()=>{this.scroll.isEnabled()&&(this.side=this.side===`top`?`bottom`:`top`)}),e}get tableId(){return this.domNode.dataset.tableId}set side(e){this.domNode.style.captionSide=e===`bottom`?`bottom`:`top`}get side(){return this.domNode.style.captionSide===`bottom`?`bottom`:`top`}format(e,t){(!this.scroll.query(e,Ln.Scope.BLOCK_BLOT)||e===this.statics.blotName)&&super.format(e,t)}checkMerge(){let e=this.next;return e!==null&&e.statics.blotName===this.statics.blotName&&e.tableId===this.tableId}optimize(e){let n=this.parent;if(n!==null&&n.statics.blotName!==t.tableMain){let{tableId:e}=this;this.wrap(t.tableMain,{tableId:e})}this.children.length===0?this.remove():(super.optimize(e),this.next!=null&&this.checkMerge()&&(this.next.moveChildren(this),this.next.remove()))}},U=class e extends z{static blotName=t.tableRow;static tagName=`tr`;static className=`ql-table-row`;static allowDataAttrs=new Set([`table-id`,`row-id`,`wrap-tag`]);static allowDataAttrsChangeHandler={"wrap-tag":`wrapParentTag`};static create(e){let{tableId:t,rowId:n,wrapTag:r=`tbody`}=e,i=super.create();return i.dataset.tableId=t,i.dataset.rowId=n,i.dataset.wrapTag=r,i}get rowId(){return this.domNode.dataset.rowId}get tableId(){return this.domNode.dataset.tableId}get wrapTag(){return this.domNode.dataset.wrapTag||`tbody`}setHeight(e){this.foreachCellInner(t=>{t.setFormatValue(`height`,e,!0)})}getCellByColId(e,n){let r=u(this,t.tableMain).getColIds(),i=r.indexOf(e),a=this.children.iterator(),o=null;for(;o=a();){if(o.colId===e)return o;let t=r.indexOf(o.colId);if(t<i&&t+o.colspan>i)return o}return this[n]?.statics.blotName===t.tableRow?this[n].getCellByColId(e,n):null}insertCell(e,n){let r=[],i=this.children.iterator(),a=0,o;for(;(o=i())&&(a+=o.colspan,!(a>e));)if(o.rowspan!==1)for(let e=0;e<o.rowspan-1;e++)r[e]=(r[e]||0)+o.colspan;if(o&&a-o.colspan<e){let e=o.getCellInner();e.colspan+=1,o.rowspan!==1&&(r.skipRowNum=o.rowspan-1)}else{let e=this.scroll.create(t.tableCell,n),r=this.scroll.create(t.tableCellInner,n),i=this.scroll.create(`block`);i.appendChild(this.scroll.create(`break`)),r.appendChild(i),e.appendChild(r),this.insertBefore(e,o)}return r}getCellByColumIndex(e){let t=[],n=null,r=0;if(e<0)return[n,r,t];let i=this.children.iterator();for(;n=i();){if(r+=n.colspan,n.rowspan!==1)for(let e=0;e<n.rowspan-1;e++)t[e]=(t[e]||0)+n.colspan;if(r>e)break}return[n,r,t]}removeCell(e){if(e<0)return[];let n=this.getCellByColumIndex(e),[r,i]=n,a=n[2];if(!r)return a;if(i-r.colspan<e||r.colspan>1){let[n]=r.descendants(H);if(r.colspan!==1&&e===i-r.colspan){let e=u(this,t.tableMain).getColIds();n.colId=e[e.indexOf(n.colId)+1]}r.rowspan!==1&&(a.skipRowNum=r.rowspan-1),--n.colspan}else r.remove();return a}foreachCellInner(e){let t=this.children.iterator(),n=0,r;for(;r=t();){let[t]=r.descendants(H);if(t&&e(t,n++))break}}checkMerge(){let e=this.next;return e!==null&&e.statics.blotName===this.statics.blotName&&e.rowId===this.rowId}wrapParentTag(){let e={thead:t.tableHead,tbody:t.tableBody,tfoot:t.tableFoot},n=this.parent;if(n!==null&&n.statics.blotName!==e[this.wrapTag])if(Object.values(e).includes(n.statics.blotName)){let t=this.offset(this.parent),n=this.parent.split(t);n&&n.length()<=0&&n.remove();let r=this.parent.splitAfter(this);r&&r.length()<=0&&r.remove(),this.parent.replaceWith(e[this.wrapTag],this.tableId)}else this.wrap(e[this.wrapTag],this.tableId)}optimize(e){this.wrapParentTag(),this.enforceAllowedChildren(),this.children.length>0&&this.next!=null&&this.checkMerge()&&(this.next.moveChildren(this),this.next.remove())}remove(){super.remove(),this.next&&this.next instanceof e&&this.next.length()<=0&&this.next.remove()}},W=class extends z{static blotName=t.tableCell;static tagName=`td`;static className=`ql-table-cell`;static allowAttrs=new Set([`rowspan`,`colspan`]);static allowDataAttrs=new Set([`table-id`,`row-id`,`col-id`,`empty-row`,`wrap-tag`]);static allowStyle=new Set([`background-color`,`border`,`height`]);static isAllowStyle(e){let t=un(e);for(let e of this.allowStyle)if(t.startsWith(un(e)))return!0;return!1}static create(e){let{tableId:t,rowId:n,colId:r,rowspan:i,colspan:a,style:o,emptyRow:s,tag:c=`td`,wrapTag:l=`tbody`}=e,u=document.createElement(c);u.classList.add(...se(this.className)),u.dataset.tableId=t,u.dataset.rowId=n,u.dataset.colId=r,u.dataset.wrapTag=l,u.setAttribute(`rowspan`,String(B(i))),u.setAttribute(`colspan`,String(B(a))),o&&(u.style.cssText=o);try{s&&(u.dataset.emptyRow=JSON.stringify(s))}catch{}return u}static formats(e){let{tableId:t,rowId:n,colId:r,emptyRow:i,wrapTag:a=`tbody`}=e.dataset,o=Number(e.getAttribute(`rowspan`)),s=Number(e.getAttribute(`colspan`)),c={tableId:t,rowId:n,colId:r,rowspan:B(o),colspan:B(s),tag:e.tagName.toLowerCase(),wrapTag:a},l=dn(e),u=Object.entries(l).filter(([,e])=>![`initial`,`inherit`].includes(e));u.length>0&&(c.style=u.map(([e,t])=>`${e}: ${t}`).join(`;`));try{i&&(c.emptyRow=JSON.parse(i))}catch{}return c}isChildHeadTableCellInner(){return this.children.head?.statics.blotName===t.tableCellInner}setFormatValue(e,n){if(this.statics.allowAttrs.has(e)||this.statics.allowDataAttrs.has(e)){let t=e;this.statics.allowDataAttrs.has(e)&&(t=`data-${e}`),n?this.domNode.setAttribute(t,n):this.domNode.removeAttribute(t)}else this.statics.isAllowStyle(e)&&(Object.assign(this.domNode.style,{[e]:n}),e.startsWith(`border`)&&this.setStyleBoder(e,n));let r=this.children.head;this.isChildHeadTableCellInner()&&this.domNode.style.cssText&&this.domNode.style.cssText!==r.domNode.dataset.style&&(r.domNode.dataset.style=this.domNode.style.cssText),this.parent?.statics.blotName===t.tableRow&&this.parent.setFormatValue(e,n)}setStyleBoder(e,t){let n=t||null;if(!(![`left`,`right`,`top`,`bottom`].some(t=>e.includes(t))&&e.startsWith(`border-`)))return;let r=this.getNearByCell(`left`).map(e=>e.descendant(H,0)[0]).filter(Boolean);for(let t of r)t.setFormatValue(e.replace(`border-`,`border-right-`),n,!0);let i=this.getNearByCell(`top`).map(e=>e.descendant(H,0)[0]).filter(Boolean);for(let t of i)t.setFormatValue(e.replace(`border-`,`border-bottom-`),n,!0)}getNearByCell(e){let n=[];try{let e=u(this,t.tableMain);n.push(...e.getColIds())}catch(e){console.error(`Cell is not in table! ${e}`)}if(n.length===0)return[];if(e===`left`){let e=new Set,t=this.parent;for(let r=0;r<this.rowspan&&t instanceof U;r++){let r=t.children.iterator(),i=null;for(;i=r();){let t=n.indexOf(i.colId)+i.colspan;this.colId===n[t]&&e.add(i)}t=t.next}return Array.from(e)}else if(e===`top`){if(!(this.parent instanceof U)||!this.parent.prev)return[];let e=new Set,t=this.getColumnIndex(),r=t+this.colspan,i=new Set(n.filter((e,n)=>n>=t&&n<r)),a=1,o=this.parent.prev;for(;o;){let t=!1,r=o.children.iterator(),s=null,c=0;for(;s=r();)i.has(s.colId)&&s.rowspan>=a&&(e.add(s),i.delete(s.colId)),c+=s.colspan,s.rowspan>=a&&(t=!0);if(!t&&c===n.length)break;o=o.prev,a+=1}return Array.from(e)}return[]}get tableId(){return this.domNode.dataset.tableId}get rowId(){return this.domNode.dataset.rowId}get colId(){return this.domNode.dataset.colId}get rowspan(){return Number(this.domNode.getAttribute(`rowspan`))}get colspan(){return Number(this.domNode.getAttribute(`colspan`))}get emptyRow(){try{return JSON.parse(this.domNode.dataset.emptyRow)}catch{return[]}}get wrapTag(){return this.domNode.dataset.wrapTag||`tbody`}getColumnIndex(){return u(this,t.tableMain).getColIds().indexOf(this.colId)}getCellInner(){return this.children.head}convertTableCell(){let e=this.statics.formats(this.domNode),n=e.tag===`td`?`th`:`td`,r=this.children.head;this.isChildHeadTableCellInner()&&r.domNode.dataset.tag!==n&&(r.domNode.dataset.tag=n),this.replaceWith(t.tableCell,{...e,tag:n})}checkMerge(){let{colId:e,rowId:t,colspan:n,rowspan:r}=this,i=this.next;return i!==null&&i.statics.blotName===this.statics.blotName&&i.rowId===t&&i.colId===e&&i.colspan===n&&i.rowspan===r}optimize(e){let{tableId:n,rowId:r,wrapTag:i}=this;if(this.parent!==null&&this.parent.statics.blotName!==t.tableRow&&this.wrap(t.tableRow,{tableId:n,rowId:r,wrapTag:i}),this.parent.statics.blotName===t.tableRow&&this.parent.wrapTag!==i&&this.parent.setFormatValue(`wrap-tag`,i),this.emptyRow.length>0){let e=this.parent.parent;if(e instanceof V){let r=this.parent.next;for(let a of this.emptyRow){let o=this.scroll.create(t.tableRow,{tableId:n,rowId:a,wrapTag:i});e.insertBefore(o,r),r=o.next}}}super.optimize(e)}};const Vn=e.import(`blots/block/embed`);var G=class extends Vn{static blotName=t.tableCol;static tagName=`col`;static validWidth(e,t){let r=Number.parseFloat(String(e));return Number.isNaN(r)&&(r=n[t?`colMinWidthPre`:`colMinWidthPx`]),t&&(r=Math.trunc(r*1e4)/1e4),`${r}${t?`%`:`px`}`}static create(e){let{width:t,tableId:n,colId:r,full:i,align:a}=e,o=super.create();return o.setAttribute(`width`,this.validWidth(t,!!i)),i&&(o.dataset.full=String(i)),a&&a!==`left`&&(o.dataset.align=a),o.dataset.tableId=n,o.dataset.colId=r,o}static value(e){let{tableId:t,colId:r}=e.dataset,i=e.getAttribute(`width`)||String(n.colDefaultWidth),a=e.dataset.align,o=Object.hasOwn(e.dataset,`full`),s={tableId:String(t),colId:String(r),full:o,width:Number.parseFloat(i)};return a&&(s.align=a),s}get width(){let e=this.domNode.getAttribute(`width`);if(!e){if(e=this.domNode.getBoundingClientRect().width,this.full){let t=this.domNode.closest(`table`);return t?e/100*t.getBoundingClientRect().width:n[this.full?`colMinWidthPre`:`colMinWidthPx`]}return e}return Number.parseFloat(String(e))}set width(e){let t=Number.parseFloat(String(e));Number.isNaN(t)&&(t=n[this.full?`colMinWidthPre`:`colMinWidthPx`]),this.domNode.setAttribute(`width`,this.statics.validWidth(t,!!this.full))}get tableId(){return this.domNode.dataset.tableId}get colId(){return this.domNode.dataset.colId}get full(){return Object.hasOwn(this.domNode.dataset,`full`)}set full(e){e?this.domNode.dataset.full=`true`:this.domNode.removeAttribute(`data-full`)}get align(){return this.domNode.dataset.align||``}set align(e){e===`right`||e===`center`?this.domNode.dataset.align=e:this.domNode.removeAttribute(`data-align`)}checkMerge(){let e=this.next,{tableId:t,colId:n}=this;return e!==null&&e.statics.blotName===this.statics.blotName&&e.tableId===t&&e.colId===n}optimize(e){let n=this.parent;if(n!=null&&n.statics.blotName!==t.tableColgroup){let e=this.statics.value(this.domNode);this.wrap(t.tableColgroup,e)}let r=u(this,t.tableColgroup);r.align=this.align,this.next!=null&&this.checkMerge()&&this.next.remove(),super.optimize(e);try{let e=u(this,t.tableColgroup),n=!0;e.children.forEach(e=>{n&&=e.full}),e.full=n}catch{}}insertAt(e,n,r){if(r!=null){if(n===this.statics.blotName&&r.tableId!==this.tableId)try{let e=u(this,t.tableWrapper),i=e.split(this.offset(e)),a=this.scroll.create(n,r);i.parent.insertBefore(a,i)}catch{console.warn(`TableCol not in TableColgroup`)}else super.insertAt(e,n,r);return}try{let e=u(this,t.tableWrapper),r=e.split(this.offset(e)),i=n.split(`
|
|
14
|
-
`),a=i.pop(),o=i.map(e=>{let t=this.scroll.create(`block`);return t.insertAt(0,e),t});for(let e of o)r.parent.insertBefore(e,r);a&&r.parent.insertBefore(this.scroll.create(`text`,a),r)}catch{console.warn(`TableCol not in TableColgroup`)}}},K=class extends z{static blotName=t.tableMain;static tagName=`table`;static className=`ql-table`;static create(e){let t=super.create(),{tableId:n,full:r,align:i}=e;return t.dataset.tableId=n,i===`right`||i===`center`?t.dataset.align=i:t.removeAttribute(`date-align`),r&&(t.dataset.full=String(r)),t.setAttribute(`cellpadding`,`0`),t.setAttribute(`cellspacing`,`0`),t}constructor(e,t,n){super(e,t),this.scroll=e,this.updateAlign()}colWidthFillTable(){if(this.full){Object.assign(this.domNode.style,{width:null});return}let e=this.getCols();if(!e)return;let t=e.reduce((e,t)=>t.width+e,0);if(!(t===0||Number.isNaN(t)))return this.domNode.style.width=`${t}px`,t}get tableId(){return this.domNode.dataset.tableId}get full(){return Object.hasOwn(this.domNode.dataset,`full`)}set full(e){e?this.domNode.dataset.full=`true`:this.domNode.removeAttribute(`data-full`),this.colWidthFillTable()}get align(){return this.domNode.dataset.align||``}set align(e){e===`right`||e===`center`?this.domNode.dataset.align=e:this.domNode.removeAttribute(`data-align`),this.updateAlign()}setFull(){if(this.full)return;let e=this.getCols();if(e.length===0)return;let t=Math.floor(this.domNode.getBoundingClientRect().width);for(let n of e){let e=n.width/t*100;n.full=!0,n.width=e}}cancelFull(){if(!this.full)return;let e=this.getCols();if(e.length===0)return;let t=Math.floor(this.domNode.getBoundingClientRect().width);for(let r of e)r.full=!1,r.width=Math.max(r.width/100*t,n.colMinWidthPx)}updateAlign(){let e=this.align,t={marginLeft:null,marginRight:null};switch(e){case`center`:t.marginLeft=`auto`,t.marginRight=`auto`;break;case``:case`left`:t.marginRight=`auto`;break;case`right`:t.marginLeft=`auto`;break;default:break}Object.assign(this.domNode.style,t)}getBodys(){return Array.from(this.domNode.querySelectorAll(`thead, tbody, tfoot`)).map(e=>this.scroll.find(e)).filter(Boolean)}getRows(){return Array.from(this.domNode.querySelectorAll(`tr`)).map(e=>this.scroll.find(e)).filter(Boolean)}getRowIds(){return this.getRows().map(e=>e.rowId)}getCols(){return this.descendants(G)}getColIds(){return this.getCols().map(e=>e.colId)}checkMerge(){let e=this.next;return e!==null&&e.statics.blotName===this.statics.blotName&&e.domNode.dataset.tableId===this.tableId}optimize(e){let n=this.parent;n!==null&&n.statics.blotName!==t.tableWrapper&&this.wrap(t.tableWrapper,this.tableId),super.optimize(e),this.mergeRow()}mergeRow(){if(!this.parent)return;let e=this.getRows(),t={};for(let n of e)t[n.rowId]||(t[n.rowId]=[]),t[n.rowId].push(n);for(let e of Object.values(t))for(let t=1;t<e.length;t++){let n=e[t];n.moveChildren(e[0]),n.remove()}}checkEmptyCol(e){if(e){let e=this.getRows().length,t=this.getCols(),n=this.descendants(H);for(let r of n)if(r.colspan>1&&r.rowspan>=e){let e=t.findIndex(e=>e.colId===r.colId),n=t[e];for(let i=e+1;i<e+r.colspan;i++)t[i].remove(),n.width+=t[i].width;r.colspan=1}}}checkEmptyRow(e){let n=this.getRows(),r=new Set(n.map(e=>e.rowId));for(let i=n.length-1;i>=0;i--){let a=n[i];if(e){if(a.children.length===0){for(let e=1,t=i-1;t>=0;t--,e++)n[t].foreachCellInner(t=>{if(t.rowspan>e){--t.rowspan;let e=new Set(t.emptyRow);e.delete(a.rowId),t.emptyRow=Array.from(e)}});a.remove()}}else{if(a.children.length===0&&a.prev){let e=a.prev;for(;e?.children.length===0;)e=e.prev;e.foreachCellInner(e=>{let t=new Set(e.emptyRow);t.has(a.rowId)||(e.emptyRow=[a.rowId,...t])})}a.foreachCellInner(e=>{for(let n of e.emptyRow)r.has(n)||a.parent.insertBefore(this.scroll.create(t.tableRow,{tableId:this.tableId,rowId:n}),a.next)})}}}sortMergeChildren(){let e={[t.tableCaption]:[],[t.tableColgroup]:[],[t.tableHead]:[],[t.tableBody]:[],[t.tableFoot]:[]};this.children.forEach(t=>{e[t.statics.blotName]&&e[t.statics.blotName].push(t)});for(let t of Object.values(e))for(let e=1;e<t.length;e++)t[e].moveChildren(t[0]);let n=e[t.tableCaption][0],r=e[t.tableColgroup][0],i=e[t.tableHead][0],a=e[t.tableBody][0],o=e[t.tableFoot][0],s=n&&this.children.head!==n,c=r&&n&&n.next!==r,l=r&&!n&&this.children.head!==r,u=i&&!a&&!o&&this.children.tail!==i,d=a&&i&&a.prev!==i,f=a&&!o&&this.children.tail!==a,p=a&&o&&a.next!==o,m=o&&this.children.tail!==o;if(s||c||l||u||d||f||p||m){let e=this.clone();n&&e.appendChild(n),r&&e.appendChild(r),i&&e.appendChild(i),a&&e.appendChild(a),o&&e.appendChild(o),this.children.forEach(e=>e.remove()),e.moveChildren(this)}}insertRow(e){let n=this.getColIds(),r=this.descendants(U),i=new Set(n),a=0;for(let t of r){if(a===e)break;t.foreachCellInner(t=>{if(a+t.rowspan>e&&(t.rowspan+=1,i.delete(t.colId),t.colspan!==1)){let e=n.indexOf(t.colId);for(let r=0;r<t.colspan-1;r++)i.delete(n[e+r+1])}}),a+=1}let o=this.tableId,s=R(),c=this.scroll.create(t.tableRow,{tableId:o,rowId:s});for(let e of i){let n=this.scroll.create(`break`).wrap(`block`).wrap(t.tableCellInner,{tableId:o,rowId:s,colId:e,rowspan:1,colspan:1}).wrap(t.tableCell,{tableId:o,rowId:s,colId:e,rowspan:1,colspan:1});c.appendChild(n)}let l=r[e]||null;l?l.parent.insertBefore(c,l):r[r.length-1].parent.appendChild(c)}},q=class extends z{static blotName=t.tableColgroup;static tagName=`colgroup`;static create(e){let t=super.create();return t.dataset.tableId=e.tableId,e.full&&(t.dataset.full=String(e.full)),e.align&&e.align!==`left`&&(t.dataset.align=e.align),t.setAttribute(`contenteditable`,`false`),t}get tableId(){return this.domNode.dataset.tableId}get full(){return Object.hasOwn(this.domNode.dataset,`full`)}set full(e){e?this.domNode.dataset.full=`true`:this.domNode.removeAttribute(`data-full`),this.parent&&this.parent instanceof K&&(this.parent.full=e)}get align(){return this.domNode.dataset.align||``}set align(e){e===`right`||e===`center`?this.domNode.dataset.align=e:this.domNode.removeAttribute(`data-align`)}findCol(e){let t=this.children.iterator(),n=0,r;for(;(r=t())&&n!==e;)n++;return r}insertColByIndex(e,r){let i=this.parent;if(!(i instanceof K))throw TypeError(`TableColgroupFormat should be child of TableFormat`);let a=this.findCol(e),o=this.scroll.create(t.tableCol,r);if(i.full){let e=this.children.iterator(),t;for(;t=e();)if(t.width-o.width>=n.colMinWidthPre){t.width-=o.width;break}}this.insertBefore(o,a)}removeColByIndex(e){let t=this.parent;if(!(t instanceof K))throw TypeError(`TableColgroupFormat should be child of TableMainFormat`);let n=this.findCol(e);n&&(t.full&&(n.next?n.next.width+=n.width:n.prev&&(n.prev.width+=n.width)),n.remove(),t.colWidthFillTable())}checkMerge(){let e=this.next,t=this.parent;return t instanceof K&&!t.full&&t.colWidthFillTable(),e!==null&&e.statics.blotName===this.statics.blotName&&e.tableId===this.tableId}optimize(e){let n=this.parent,{tableId:r,full:i,align:a}=this;n!=null&&n.statics.blotName!==t.tableMain&&this.wrap(t.tableMain,{tableId:r,full:i,align:a});let o=u(this,t.tableMain);o.align=a,super.optimize(e)}},Hn=class extends V{static blotName=t.tableFoot;static tagName=`tfoot`},Un=class extends V{static blotName=t.tableHead;static tagName=`thead`};const Wn=e.import(`parchment`);var J=class extends z{static blotName=t.tableWrapper;static tagName=`div`;static className=`ql-table-wrapper`;static create(e){let t=super.create();return t.dataset.tableId=e,t.addEventListener(`dragstart`,e=>{e.preventDefault(),e.stopPropagation()},!0),t.addEventListener(`drop`,e=>{e.preventDefault()}),t.addEventListener(`dragover`,e=>{e.preventDefault(),e.dataTransfer.dropEffect=`none`}),t.setAttribute(`contenteditable`,`false`),t}constructor(t,n,r){super(t,n),this.scroll=t,this.scroll.emitter.on(e.events.TEXT_CHANGE,this.insertLineAround)}get tableId(){return this.domNode.dataset.tableId}checkMerge(){let e=this.next;return e!==null&&e.statics.blotName===this.statics.blotName&&e.tableId===this.tableId}optimize(e){if(this.length()===0){this.remove();return}super.optimize(e)}deleteAt(e,t){super.deleteAt(e,t);let n=this.descendants(V),r=this.descendants(q);n.length===0&&r.length===0&&this.remove()}remove(){super.remove(),this.scroll.emitter.off(e.events.TEXT_CHANGE,this.insertLineAround)}isBlockLine(e){return e instanceof Wn.BlockBlot||new Set([`list-container`,`code-block-container`]).has(e.statics.blotName)}insertLineAround=()=>{(!this.prev||!this.isBlockLine(this.prev))&&this.parent.insertBefore(this.scroll.create(`block`),this),(!this.next||!this.isBlockLine(this.next))&&this.parent.insertBefore(this.scroll.create(`block`),this.next)}};function Y(e){let n=new Set([t.tableHead,t.tableBody,t.tableFoot]),r=e.children.iterator(),i=null,a={};for(;i=r();)n.has(i.statics.blotName)&&(a[i.statics.blotName]=i);if(Object.values(a).length<=0)return{rect:null,head:null,body:null,foot:null};let o=Object.values(a).reduce((e,t)=>{let n=t.domNode.getBoundingClientRect();return{...e,top:Math.min(e.top,n.top),bottom:Math.max(e.bottom,n.bottom),left:Math.min(e.left,n.left),right:Math.max(e.right,n.right)}},{top:1/0,bottom:0,left:1/0,right:0,width:0,height:0,x:1/0,y:1/0});return o.width=o.right-o.left,o.height=o.bottom-o.top,o.x=o.left,o.y=o.top,{rect:o,head:a[t.tableHead]||null,body:a[t.tableBody]||null,foot:a[t.tableFoot]||null}}var Gn=class{table;tableSelectMouseDownHandler;constructor(e,t){this.tableModule=e,this.quill=t,this.tableSelectMouseDownHandler=this.tableSelectHandler.bind(this),this.quill.root.addEventListener(`mousedown`,this.tableSelectMouseDownHandler)}tableSelectHandler(e){let t=e.composedPath();if(e.button!==0||!t||t.length<=0)return;let n=t.find(e=>e.tagName?.toUpperCase()===`TABLE`);this.setSelectionTable(n)}setSelectionTable(e){this.table!==e&&(this.hide(),this.table=e,this.table&&this.show(),this.update())}hide(){}show(){}update(){}destroy(){this.quill.root.removeEventListener(`mousedown`,this.tableSelectMouseDownHandler),this.hide(),this.table=void 0}},Kn=class extends Gn{static moduleName=`table-align`;tableBlot;tableWrapperBlot;alignBox;cleanup;bem=l(`align`);resizeObserver;constructor(t,n,r){super(t,n),this.tableModule=t,this.quill=n,this.alignBox=this.buildTools(),this.hide(),this.quill.on(e.events.EDITOR_CHANGE,this.updateWhenTextChange)}updateWhenTextChange=t=>{t===e.events.TEXT_CHANGE&&(this.table&&!this.quill.root.contains(this.table)?this.setSelectionTable(void 0):this.update())};buildTools(){let t=this.tableModule.addContainer(this.bem.b()),n=e.import(`ui/icons`),r={left:n.align[``],center:n.align.center,right:n.align.right};for(let[e,n]of Object.entries(r)){let r=document.createElement(`span`);r.dataset.align=e,r.classList.add(this.bem.be(`item`)),r.innerHTML=`<i class="icon">${n}</i>`,r.addEventListener(`click`,this.handleAlignItemClick.bind(this)),t.appendChild(r)}return t}handleAlignItemClick(e){let t=e.currentTarget;if(!t)return;let n=t.dataset.align;n&&this.tableBlot&&this.setTableAlign(this.tableBlot,n)}setTableAlign(e,t){let n=e.getCols();for(let e of n)e.align=t}show(){!this.table||!this.alignBox||(this.tableBlot=e.find(this.table),this.tableWrapperBlot=this.tableBlot.parent,this.alignBox.classList.remove(this.bem.is(`hidden`)),this.resizeObserver=rn(()=>this.update(),{ignoreFirstBind:!0}),this.resizeObserver.observe(this.table),this.cleanup&&this.cleanup(),this.cleanup=Gt(this.tableWrapperBlot.domNode,this.alignBox,()=>this.update()))}hide(){this.tableBlot=void 0,this.tableWrapperBlot=void 0,this.alignBox&&this.alignBox.classList.add(this.bem.is(`hidden`)),this.cleanup&&=(this.cleanup(),void 0)}update(){if(!(!this.alignBox||!this.tableBlot||!this.tableWrapperBlot)){if(!this.table||this.tableBlot.full||this.tableBlot.domNode.offsetWidth>=this.quill.root.offsetWidth){this.hide();return}Xt(this.tableWrapperBlot.domNode,this.alignBox,{placement:`top`,middleware:[Jt(),qt({limiter:Yt()}),Kt(16)]}).then(({x:e,y:t})=>{Object.assign(this.alignBox.style,{left:`${e}px`,top:`${t}px`})})}}destroy(){super.destroy(),this.hide(),this.resizeObserver&&=(this.resizeObserver.disconnect(),void 0),this.quill.off(e.events.TEXT_CHANGE,this.updateWhenTextChange),this.alignBox&&=(this.alignBox.remove(),null)}};const qn=e.import(`delta`);function Jn(e,t,n){let{rows:r,cols:i}=Yn(t),{rows:a,cols:o,cells:s}=Xn(n);r===a&&i===o?Qn(t,s,e):tr(e,t,s)}function Yn(e){return e.length===0?{rows:0,cols:0}:Zn($n(e))}function Xn(e){let n=new Map;for(let r of e){let e=r.attributes;if(!e)continue;let i=e[t.tableCellInner];if(!i)continue;let a=`${i.rowId}-${i.colId}`;if(!n.has(a)){let e={rowId:i.rowId,colId:i.colId,rowspan:i.rowspan||1,colspan:i.colspan||1,deltaOps:[]};i.emptyRow&&i.emptyRow.length>0&&(e.emptyRow=i.emptyRow),n.set(a,e)}let o=n.get(a),{[t.tableCellInner]:s,...c}=e;o.deltaOps.push({insert:r.insert,attributes:{...c}})}let r=Array.from(n.values());return{...Zn($n(r)),cells:r}}function Zn(e){let t=1/0,n=-1/0,r=1/0,i=-1/0;for(let a of e){let{cell:e,rowIndex:o,colIndex:s}=a,c=e.colspan||1,l=e.rowspan||1;t=Math.min(t,o),n=Math.max(n,o+l-1),r=Math.min(r,s),i=Math.max(i,s+c-1)}return{rows:Math.max(n-t+1,0),cols:Math.max(i-r+1,0)}}function Qn(e,t,n){let r=$n(e),i=$n(t),a=new Map;for(let e of i)a.set(`${e.rowIndex}-${e.colIndex}`,e.cell);let o=[],s=new Set;for(let e of r){let t=e.cell;if(!t.domNode.isConnected||s.has(t))continue;let r=a.get(`${e.rowIndex}-${e.colIndex}`);if(r){let e=nr(n,t,r.deltaOps,{rowspan:r.rowspan,colspan:r.colspan,emptyRow:r.emptyRow});o.push(e),s.add(t)}}rr(n,o)}function $n(e){let t=[],n=er(e),r=-1,i=new Map;for(let[e,a]of n.entries()){i.has(e)||(r+=1,i.set(e,r));let n=0;for(let o of a){t.push({cell:o,rowIndex:i.get(e),colIndex:n}),n+=o.colspan||1;let a=o.emptyRow||[];for(let e of a)i.has(e)||(r+=1,i.set(e,r))}}return t}function er(e){let t=new Map;for(let n of e)t.has(n.rowId)||t.set(n.rowId,[]),t.get(n.rowId).push(n);return t}function tr(e,t,n){let r=er(n),i=Array.from(r.values()),a=Yn(t).cols,o=[];for(let n=0;n<t.length;n++){let r=t[n],s=Math.floor(n/a),c=n%a,l=i[s%i.length],u=l[c%l.length],d=nr(e,r,u.deltaOps);o.push(d)}rr(e,o)}function nr(e,t,n,r){let{rowspan:i=1,colspan:a=1,emptyRow:o}=r||{};r&&(t.rowspan=i,t.colspan=a,o&&o.length>0&&(t.emptyRow=o));let s=t.formats(),c=new qn;for(let e of n)c.insert(e.insert,{...e.attributes,...s});return{offset:t.offset(e.quill.scroll),length:t.length(),insertDelta:c,cell:t,rowspan:i,colspan:a,emptyRow:o}}function rr(t,n){if(n.length===0)return;n.sort((e,t)=>e.offset-t.offset);let r=new qn;for(let e=0;e<n.length;e++){let t=n[e],i=t.offset;if(e!==0){let r=n[e-1];i=t.offset-r.offset-r.length}r=r.retain(i).concat(t.insertDelta).delete(t.length)}for(let e of n)ir(t,e);t.quill.updateContents(r,e.sources.USER)}function ir(e,n){let{cell:r,rowspan:i=1,colspan:a=1}=n;if(i===1&&a===1)return;let o=u(r,t.tableMain);if(!o)return;let s=r.getTableRow();if(!s)return;let c=o.descendants(H),l=o.getRows(),d=l.indexOf(s),f=r.getColumnIndex(),p=[];for(let e of c){if(e===r)continue;let t=e.getTableRow();if(!t)continue;let n=l.indexOf(t),o=e.getColumnIndex(),s=n>=d&&n<d+i,c=o>=f&&o<f+a;s&&c&&p.push(e)}let m=e.talbeModule.options.autoMergeCell;for(let e of p)if(e.domNode.isConnected){let t=e.getTableRow();e.remove(),!m&&t&&t.length()<=0&&t.remove()}}const ar=e.import(`delta`),or=e.import(`modules/clipboard`);function sr(e){let t=Number.parseFloat(e.getAttribute(`width`));if(Number.isNaN(t)){let n=e.style.width;t=n?Number.parseFloat(n):e.offsetWidth}return t||n.colDefaultWidth}function cr(e,t){let r=Array(t).fill(n.colDefaultWidth),i=Array.from(e.querySelectorAll(`tr`));for(let e of i){let n=Array.from(e.querySelectorAll(`td`)),i=0;for(let e of n){let n=e.colSpan||1;if(i<t){let t=sr(e);for(let e=0;e<n;e++)r[i+e]=t/n}else break;i+=n}}return r}var lr=class extends or{tableId=R();rowId=R();colIds=[];rowspanCount=[];cellCount=0;colCount=0;constructor(e,t){super(e,t),this.quill=e,this.addMatcher(`table`,this.matchTable.bind(this)),this.addMatcher(`thead`,this.matchThead.bind(this)),this.addMatcher(`tbody`,this.matchTbody.bind(this)),this.addMatcher(`tfoot`,this.matchTfoot.bind(this)),this.addMatcher(`colgroup`,this.matchColgroup.bind(this)),this.addMatcher(`col`,this.matchCol.bind(this)),this.addMatcher(`tr`,this.matchTr.bind(this)),this.addMatcher(`td`,this.matchTd.bind(this)),this.addMatcher(`th`,this.matchTd.bind(this)),this.addMatcher(`caption`,this.matchCaption.bind(this)),this.addMatcher(Node.ELEMENT_NODE,this.matchTdAttributor.bind(this))}normalizeHTML(e){super.normalizeHTML(e);let t=this.quill.getModule(i.moduleName)?.options??{};t.pasteStyleSheet!==!1&&gn(e,{includeDefaultTagStyle:t.pasteDefaultTagStyle})}getStyleBackgroundColor(e,n){let r=e.style.backgroundColor;if(r){for(let e of n.ops)if(e.attributes?.[t.tableCellInner]){let{style:n,...i}=e.attributes[t.tableCellInner],a=fn(n||``);a.backgroundColor||(a.backgroundColor=r,e.attributes[t.tableCellInner]={...i,style:pn(a)})}}}matchTable(e,n){if(n.ops.length===0)return n;let r=[],i=[],a=-1;for(let e=0;e<n.ops.length;e++){let{attributes:o,insert:s}=n.ops[e];if(!ie(s)&&(!o||!o[t.tableCellInner]&&!o[t.tableCaption])){n.ops.splice(e,1),--e;continue}let{table:c,[t.tableCell]:l,...u}=o||{},d=ie(s)&&s[t.tableCol];d?i.push({insert:s}):r.push({attributes:u,insert:s}),!u?.[t.tableCellInner]&&!u?.[t.tableCaption]&&!d&&C(s)&&s.trim().length>0&&(a=e)}let o=cr(e,this.colIds.length).reduce((e,n,r)=>(i[r]?e.push(i[r]):e.push({insert:{[t.tableCol]:{tableId:this.tableId,colId:this.colIds[r],width:n,full:!1}}}),e),[]);r.splice(a+1,0,...o);let s=new ar(r);return this.getStyleBackgroundColor(e,s),this.tableId=R(),this.colIds=[],this.rowspanCount=[],this.cellCount=0,this.colCount=0,s}matchTbody(e,n){this.getStyleBackgroundColor(e,n);let r=[];for(let e=n.ops.length-1;e>=0;e--){let i=n.ops[e];if(!i.attributes?.[t.tableCellInner]){r=[];let e=i.insert?C(i.insert)?i.insert.split(`
|
|
15
|
-
`).length-1:1:0;for(let t=0;t<e;t++)r.push(R())}else if(i.attributes){let e=i.attributes[t.tableCellInner];e.rowspan===1?r=[]:r.length>0&&(e.emptyRow||=[],r.length>e.emptyRow.length&&e.emptyRow.push(...r.slice(e.emptyRow.length-r.length)))}}return this.rowspanCount=[],n}matchThead(e,n){let r=this.matchTbody(e,n);for(let e of r.ops)if(e.attributes?.[t.tableCellInner]){let n=e.attributes[t.tableCellInner];n.wrapTag=`thead`}return r}matchTfoot(e,n){let r=this.matchTbody(e,n);for(let e of r.ops)if(e.attributes?.[t.tableCellInner]){let n=e.attributes[t.tableCellInner];n.wrapTag=`tfoot`}return r}matchColgroup(e,n){let r=[];for(let e of n.ops)e&&ie(e.insert)&&e.insert[t.tableCol]&&r.push(e);return new ar(r)}matchCol(e,n){let r=Number(e.getAttribute(`span`)||1);Number.isNaN(r)&&(r=1);let i=new ar;for(let n=0;n<r;n++)this.colIds[this.colCount]=R(),i.insert({[t.tableCol]:Object.assign(G.value(e),{tableId:this.tableId,colId:this.colIds[this.colCount]})}),this.colCount+=1;return i}matchTr(e,t){this.rowId=R(),this.cellCount=0;for(let[e,t]of this.rowspanCount.entries())t.rowspan>0&&--t.rowspan,t.rowspan<=0&&(this.rowspanCount[e]={rowspan:0,colspan:0});return this.getStyleBackgroundColor(e,t),t.ops.length===0?new ar([{insert:`
|
|
14
|
+
`),a=i.pop(),o=i.map(e=>{let t=this.scroll.create(`block`);return t.insertAt(0,e),t});for(let e of o)r.parent.insertBefore(e,r);a&&r.parent.insertBefore(this.scroll.create(`text`,a),r)}catch{console.warn(`TableCol not in TableColgroup`)}}},K=class extends z{static blotName=t.tableMain;static tagName=`table`;static className=`ql-table`;static create(e){let t=super.create(),{tableId:n,full:r,align:i}=e;return t.dataset.tableId=n,i===`right`||i===`center`?t.dataset.align=i:t.removeAttribute(`date-align`),r&&(t.dataset.full=String(r)),t.setAttribute(`cellpadding`,`0`),t.setAttribute(`cellspacing`,`0`),t}constructor(e,t,n){super(e,t),this.scroll=e,this.updateAlign()}colWidthFillTable(){if(this.full){Object.assign(this.domNode.style,{width:null});return}let e=this.getCols();if(!e)return;let t=e.reduce((e,t)=>t.width+e,0);if(!(t===0||Number.isNaN(t)))return this.domNode.style.width=`${t}px`,t}get tableId(){return this.domNode.dataset.tableId}get full(){return Object.hasOwn(this.domNode.dataset,`full`)}set full(e){e?this.domNode.dataset.full=`true`:this.domNode.removeAttribute(`data-full`),this.colWidthFillTable()}get align(){return this.domNode.dataset.align||``}set align(e){e===`right`||e===`center`?this.domNode.dataset.align=e:this.domNode.removeAttribute(`data-align`),this.updateAlign()}setFull(){if(this.full)return;let e=this.getCols();if(e.length===0)return;let t=Math.floor(this.domNode.getBoundingClientRect().width);for(let n of e){let e=n.width/t*100;n.full=!0,n.width=e}}cancelFull(){if(!this.full)return;let e=this.getCols();if(e.length===0)return;let t=Math.floor(this.domNode.getBoundingClientRect().width);for(let r of e)r.full=!1,r.width=Math.max(r.width/100*t,n.colMinWidthPx)}updateAlign(){let e=this.align,t={marginLeft:null,marginRight:null};switch(e){case`center`:t.marginLeft=`auto`,t.marginRight=`auto`;break;case``:case`left`:t.marginRight=`auto`;break;case`right`:t.marginLeft=`auto`;break;default:break}Object.assign(this.domNode.style,t)}getBodys(){return Array.from(this.domNode.querySelectorAll(`thead, tbody, tfoot`)).map(e=>this.scroll.find(e)).filter(Boolean)}getRows(){return Array.from(this.domNode.querySelectorAll(`tr`)).map(e=>this.scroll.find(e)).filter(Boolean)}getRowIds(){return this.getRows().map(e=>e.rowId)}getCols(){return this.descendants(G)}getColIds(){return this.getCols().map(e=>e.colId)}checkMerge(){let e=this.next;return e!==null&&e.statics.blotName===this.statics.blotName&&e.domNode.dataset.tableId===this.tableId}optimize(e){let n=this.parent;n!==null&&n.statics.blotName!==t.tableWrapper&&this.wrap(t.tableWrapper,this.tableId),super.optimize(e),this.mergeRow()}mergeRow(){if(!this.parent)return;let e=this.getRows(),t={};for(let n of e)t[n.rowId]||(t[n.rowId]=[]),t[n.rowId].push(n);for(let e of Object.values(t))for(let t=1;t<e.length;t++){let n=e[t];n.moveChildren(e[0]),n.remove()}}checkEmptyCol(e){if(e){let e=this.getRows().length,t=this.getCols(),n=this.descendants(H);for(let r of n)if(r.colspan>1&&r.rowspan>=e){let e=t.findIndex(e=>e.colId===r.colId),n=t[e];for(let i=e+1;i<e+r.colspan;i++)t[i].remove(),n.width+=t[i].width;r.colspan=1}}}checkEmptyRow(e){let n=this.getRows(),r=new Set(n.map(e=>e.rowId));for(let i=n.length-1;i>=0;i--){let a=n[i];if(e){if(a.children.length===0){for(let e=1,t=i-1;t>=0;t--,e++)n[t].foreachCellInner(t=>{if(t.rowspan>e){--t.rowspan;let e=new Set(t.emptyRow);e.delete(a.rowId),t.emptyRow=Array.from(e)}});a.remove()}}else{if(a.children.length===0&&a.prev){let e=a.prev;for(;e?.children.length===0;)e=e.prev;e.foreachCellInner(e=>{let t=new Set(e.emptyRow);t.has(a.rowId)||(e.emptyRow=[a.rowId,...t])})}a.foreachCellInner(e=>{for(let n of e.emptyRow)r.has(n)||a.parent.insertBefore(this.scroll.create(t.tableRow,{tableId:this.tableId,rowId:n}),a.next)})}}}sortMergeChildren(){let e={[t.tableCaption]:[],[t.tableColgroup]:[],[t.tableHead]:[],[t.tableBody]:[],[t.tableFoot]:[]};this.children.forEach(t=>{e[t.statics.blotName]&&e[t.statics.blotName].push(t)});for(let t of Object.values(e))for(let e=1;e<t.length;e++)t[e].moveChildren(t[0]);let n=e[t.tableCaption][0],r=e[t.tableColgroup][0],i=e[t.tableHead][0],a=e[t.tableBody][0],o=e[t.tableFoot][0],s=n&&this.children.head!==n,c=r&&n&&n.next!==r,l=r&&!n&&this.children.head!==r,u=i&&!a&&!o&&this.children.tail!==i,d=a&&i&&a.prev!==i,f=a&&!o&&this.children.tail!==a,p=a&&o&&a.next!==o,m=o&&this.children.tail!==o;if(s||c||l||u||d||f||p||m){let e=this.clone();n&&e.appendChild(n),r&&e.appendChild(r),i&&e.appendChild(i),a&&e.appendChild(a),o&&e.appendChild(o),this.children.forEach(e=>e.remove()),e.moveChildren(this)}}insertRow(e){let n=this.getColIds(),r=this.descendants(U),i=new Set(n),a=0;for(let t of r){if(a===e)break;t.foreachCellInner(t=>{if(a+t.rowspan>e&&(t.rowspan+=1,i.delete(t.colId),t.colspan!==1)){let e=n.indexOf(t.colId);for(let r=0;r<t.colspan-1;r++)i.delete(n[e+r+1])}}),a+=1}let o=this.tableId,s=R(),c=this.scroll.create(t.tableRow,{tableId:o,rowId:s});for(let e of i){let n=this.scroll.create(`break`).wrap(`block`).wrap(t.tableCellInner,{tableId:o,rowId:s,colId:e,rowspan:1,colspan:1}).wrap(t.tableCell,{tableId:o,rowId:s,colId:e,rowspan:1,colspan:1});c.appendChild(n)}let l=r[e]||null;l?l.parent.insertBefore(c,l):r[r.length-1].parent.appendChild(c)}},q=class extends z{static blotName=t.tableColgroup;static tagName=`colgroup`;static create(e){let t=super.create();return t.dataset.tableId=e.tableId,e.full&&(t.dataset.full=String(e.full)),e.align&&e.align!==`left`&&(t.dataset.align=e.align),t.setAttribute(`contenteditable`,`false`),t}get tableId(){return this.domNode.dataset.tableId}get full(){return Object.hasOwn(this.domNode.dataset,`full`)}set full(e){e?this.domNode.dataset.full=`true`:this.domNode.removeAttribute(`data-full`),this.parent&&this.parent instanceof K&&(this.parent.full=e)}get align(){return this.domNode.dataset.align||``}set align(e){e===`right`||e===`center`?this.domNode.dataset.align=e:this.domNode.removeAttribute(`data-align`)}findCol(e){let t=this.children.iterator(),n=0,r;for(;(r=t())&&n!==e;)n++;return r}insertColByIndex(e,r){let i=this.parent;if(!(i instanceof K))throw TypeError(`TableColgroupFormat should be child of TableFormat`);let a=this.findCol(e),o=this.scroll.create(t.tableCol,r);if(i.full){let e=this.children.iterator(),t;for(;t=e();)if(t.width-o.width>=n.colMinWidthPre){t.width-=o.width;break}}this.insertBefore(o,a)}removeColByIndex(e){let t=this.parent;if(!(t instanceof K))throw TypeError(`TableColgroupFormat should be child of TableMainFormat`);let n=this.findCol(e);n&&(t.full&&(n.next?n.next.width+=n.width:n.prev&&(n.prev.width+=n.width)),n.remove(),t.colWidthFillTable())}checkMerge(){let e=this.next,t=this.parent;return t instanceof K&&!t.full&&t.colWidthFillTable(),e!==null&&e.statics.blotName===this.statics.blotName&&e.tableId===this.tableId}optimize(e){let n=this.parent,{tableId:r,full:i,align:a}=this;n!=null&&n.statics.blotName!==t.tableMain&&this.wrap(t.tableMain,{tableId:r,full:i,align:a});let o=u(this,t.tableMain);o.align=a,super.optimize(e)}},Hn=class extends V{static blotName=t.tableFoot;static tagName=`tfoot`},Un=class extends V{static blotName=t.tableHead;static tagName=`thead`};const Wn=e.import(`parchment`);var J=class extends z{static blotName=t.tableWrapper;static tagName=`div`;static className=`ql-table-wrapper`;static create(e){let t=super.create();return t.dataset.tableId=e,t.addEventListener(`dragstart`,e=>{e.preventDefault(),e.stopPropagation()},!0),t.addEventListener(`drop`,e=>{e.preventDefault()}),t.addEventListener(`dragover`,e=>{e.preventDefault(),e.dataTransfer.dropEffect=`none`}),t.setAttribute(`contenteditable`,`false`),t}constructor(t,n,r){super(t,n),this.scroll=t,this.scroll.emitter.on(e.events.TEXT_CHANGE,this.insertLineAround)}get tableId(){return this.domNode.dataset.tableId}checkMerge(){let e=this.next;return e!==null&&e.statics.blotName===this.statics.blotName&&e.tableId===this.tableId}optimize(e){if(this.length()===0){this.remove();return}super.optimize(e)}deleteAt(e,t){super.deleteAt(e,t);let n=this.descendants(V),r=this.descendants(q);n.length===0&&r.length===0&&this.remove()}remove(){super.remove(),this.scroll.emitter.off(e.events.TEXT_CHANGE,this.insertLineAround)}isBlockLine(e){return e instanceof Wn.BlockBlot||new Set([`list-container`,`code-block-container`]).has(e.statics.blotName)}insertLineAround=()=>{(!this.prev||!this.isBlockLine(this.prev))&&this.parent.insertBefore(this.scroll.create(`block`),this),(!this.next||!this.isBlockLine(this.next))&&this.parent.insertBefore(this.scroll.create(`block`),this.next)}};function Y(e){let n=new Set([t.tableHead,t.tableBody,t.tableFoot]),r=e.children.iterator(),i=null,a={};for(;i=r();)n.has(i.statics.blotName)&&(a[i.statics.blotName]=i);if(Object.values(a).length<=0)return{rect:null,head:null,body:null,foot:null};let o=Object.values(a).reduce((e,t)=>{let n=t.domNode.getBoundingClientRect();return{...e,top:Math.min(e.top,n.top),bottom:Math.max(e.bottom,n.bottom),left:Math.min(e.left,n.left),right:Math.max(e.right,n.right)}},{top:1/0,bottom:0,left:1/0,right:0,width:0,height:0,x:1/0,y:1/0});return o.width=o.right-o.left,o.height=o.bottom-o.top,o.x=o.left,o.y=o.top,{rect:o,head:a[t.tableHead]||null,body:a[t.tableBody]||null,foot:a[t.tableFoot]||null}}var Gn=class{table;tableSelectMouseDownHandler;constructor(e,t){this.tableModule=e,this.quill=t,this.tableSelectMouseDownHandler=this.tableSelectHandler.bind(this),this.quill.root.addEventListener(`mousedown`,this.tableSelectMouseDownHandler)}tableSelectHandler(e){let t=e.composedPath();if(e.button!==0||!t||t.length<=0)return;let n=t.find(e=>e.tagName?.toUpperCase()===`TABLE`);this.setSelectionTable(n)}setSelectionTable(e){this.table!==e&&(this.hide(),this.table=e,this.table&&this.show(),this.update())}hide(){}show(){}update(){}destroy(){this.quill.root.removeEventListener(`mousedown`,this.tableSelectMouseDownHandler),this.hide(),this.table=void 0}},Kn=class extends Gn{static moduleName=`table-align`;tableBlot;tableWrapperBlot;alignBox;cleanup;bem=l(`align`);resizeObserver;constructor(t,n,r){super(t,n),this.tableModule=t,this.quill=n,this.alignBox=this.buildTools(),this.hide(),this.quill.on(e.events.EDITOR_CHANGE,this.updateWhenTextChange)}updateWhenTextChange=t=>{t===e.events.TEXT_CHANGE&&(this.table&&!this.quill.root.contains(this.table)?this.setSelectionTable(void 0):this.update())};buildTools(){let t=this.tableModule.addContainer(this.bem.b()),n=e.import(`ui/icons`),r={left:n.align[``],center:n.align.center,right:n.align.right};for(let[e,n]of Object.entries(r)){let r=document.createElement(`span`);r.dataset.align=e,r.classList.add(this.bem.be(`item`)),r.innerHTML=`<i class="icon">${n}</i>`,r.addEventListener(`click`,this.handleAlignItemClick.bind(this)),t.appendChild(r)}return t}handleAlignItemClick(e){let t=e.currentTarget;if(!t)return;let n=t.dataset.align;n&&this.tableBlot&&this.setTableAlign(this.tableBlot,n)}setTableAlign(e,t){let n=e.getCols();for(let e of n)e.align=t}show(){!this.table||!this.alignBox||(this.tableBlot=e.find(this.table),this.tableWrapperBlot=this.tableBlot.parent,this.alignBox.classList.remove(this.bem.is(`hidden`)),this.resizeObserver=rn(()=>this.update(),{ignoreFirstBind:!0}),this.resizeObserver.observe(this.table),this.cleanup&&this.cleanup(),this.cleanup=Gt(this.tableWrapperBlot.domNode,this.alignBox,()=>this.update()))}hide(){this.tableBlot=void 0,this.tableWrapperBlot=void 0,this.alignBox&&this.alignBox.classList.add(this.bem.is(`hidden`)),this.cleanup&&=(this.cleanup(),void 0)}update(){if(!(!this.alignBox||!this.tableBlot||!this.tableWrapperBlot)){if(!this.table||this.tableBlot.full||this.tableBlot.domNode.offsetWidth>=this.quill.root.offsetWidth){this.hide();return}Xt(this.tableWrapperBlot.domNode,this.alignBox,{placement:`top`,middleware:[Jt(),qt({limiter:Yt()}),Kt(16)]}).then(({x:e,y:t})=>{Object.assign(this.alignBox.style,{left:`${e}px`,top:`${t}px`})})}}destroy(){super.destroy(),this.hide(),this.resizeObserver&&=(this.resizeObserver.disconnect(),void 0),this.quill.off(e.events.TEXT_CHANGE,this.updateWhenTextChange),this.alignBox&&=(this.alignBox.remove(),null)}};const qn=e.import(`delta`);function Jn(e,t,n){let{rows:r,cols:i}=Yn(t),{rows:a,cols:o,cells:s}=Xn(n);r===a&&i===o?Qn(t,s,e):tr(e,t,s)}function Yn(e){return e.length===0?{rows:0,cols:0}:Zn($n(e))}function Xn(e){let n=new Map;for(let r of e){let e=r.attributes;if(!e)continue;let i=e[t.tableCellInner];if(!i)continue;let a=`${i.rowId}-${i.colId}`;if(!n.has(a)){let e={rowId:i.rowId,colId:i.colId,rowspan:i.rowspan||1,colspan:i.colspan||1,deltaOps:[]};i.emptyRow&&i.emptyRow.length>0&&(e.emptyRow=i.emptyRow),n.set(a,e)}let o=n.get(a),{[t.tableCellInner]:s,...c}=e;o.deltaOps.push({insert:r.insert,attributes:{...c}})}let r=Array.from(n.values());return{...Zn($n(r)),cells:r}}function Zn(e){let t=1/0,n=-1/0,r=1/0,i=-1/0;for(let a of e){let{cell:e,rowIndex:o,colIndex:s}=a,c=e.colspan||1,l=e.rowspan||1;t=Math.min(t,o),n=Math.max(n,o+l-1),r=Math.min(r,s),i=Math.max(i,s+c-1)}return{rows:Math.max(n-t+1,0),cols:Math.max(i-r+1,0)}}function Qn(e,t,n){let r=$n(e),i=$n(t),a=new Map;for(let e of i)a.set(`${e.rowIndex}-${e.colIndex}`,e.cell);let o=[],s=new Set;for(let e of r){let t=e.cell;if(!t.domNode.isConnected||s.has(t))continue;let r=a.get(`${e.rowIndex}-${e.colIndex}`);if(r){let e=nr(n,t,r.deltaOps,{rowspan:r.rowspan,colspan:r.colspan,emptyRow:r.emptyRow});o.push(e),s.add(t)}}rr(n,o)}function $n(e){let t=[],n=er(e),r=-1,i=new Map;for(let[e,a]of n.entries()){i.has(e)||(r+=1,i.set(e,r));let n=0;for(let o of a){t.push({cell:o,rowIndex:i.get(e),colIndex:n}),n+=o.colspan||1;let a=o.emptyRow||[];for(let e of a)i.has(e)||(r+=1,i.set(e,r))}}return t}function er(e){let t=new Map;for(let n of e)t.has(n.rowId)||t.set(n.rowId,[]),t.get(n.rowId).push(n);return t}function tr(e,t,n){let r=er(n),i=Array.from(r.values()),a=Yn(t).cols,o=[];for(let n=0;n<t.length;n++){let r=t[n],s=Math.floor(n/a),c=n%a,l=i[s%i.length],u=l[c%l.length],d=nr(e,r,u.deltaOps);o.push(d)}rr(e,o)}function nr(e,t,n,r){let{rowspan:i=1,colspan:a=1,emptyRow:o}=r||{};r&&(t.rowspan=i,t.colspan=a,o&&o.length>0&&(t.emptyRow=o));let s=t.formats(),c=new qn;for(let e of n)c.insert(e.insert,{...e.attributes,...s});return{offset:t.offset(e.quill.scroll),length:t.length(),insertDelta:c,cell:t,rowspan:i,colspan:a,emptyRow:o}}function rr(t,n){if(n.length===0)return;n.sort((e,t)=>e.offset-t.offset);let r=new qn;for(let e=0;e<n.length;e++){let t=n[e],i=t.offset;if(e!==0){let r=n[e-1];i=t.offset-r.offset-r.length}r=r.retain(i).concat(t.insertDelta).delete(t.length)}for(let e of n)ir(t,e);t.quill.updateContents(r,e.sources.USER)}function ir(e,n){let{cell:r,rowspan:i=1,colspan:a=1}=n;if(i===1&&a===1)return;let o=u(r,t.tableMain);if(!o)return;let s=r.getTableRow();if(!s)return;let c=o.descendants(H),l=o.getRows(),d=l.indexOf(s),f=r.getColumnIndex(),p=[];for(let e of c){if(e===r)continue;let t=e.getTableRow();if(!t)continue;let n=l.indexOf(t),o=e.getColumnIndex(),s=n>=d&&n<d+i,c=o>=f&&o<f+a;s&&c&&p.push(e)}let m=e.talbeModule.options.autoMergeCell;for(let e of p)if(e.domNode.isConnected){let t=e.getTableRow();e.remove(),!m&&t&&t.length()<=0&&t.remove()}}const ar=e.import(`delta`),or=e.import(`modules/clipboard`);function sr(e){let t=e.trim().toLowerCase();return t?t.endsWith(`%`)?`percent`:Number.isNaN(Number.parseFloat(t))?`unknown`:`pixel`:`unknown`}function cr(e){return e.getAttribute(`width`)||e.style.width||``}function lr(e,t){return t?100/e:n.colDefaultWidth}function ur(e){let t=[];for(let n of Array.from(e.querySelectorAll(`col`))){let e=Number.parseInt(n.getAttribute(`span`)||`1`,10);(Number.isNaN(e)||e<=0)&&(e=1);let r=cr(n),i=Number.parseFloat(r),a={unit:sr(r),width:Number.isNaN(i)?null:i};for(let n=0;n<e;n++)t.push(a)}return t}function dr(e){let t=0,n=0;for(let r of e)r.unit===`percent`&&r.width!=null?t+=r.width:r.unit===`pixel`&&r.width!=null&&(n+=r.width);return n<=0||t>=100?null:n/(1-t/100)}function fr(e,t){if(!e)return dr(t);let n=cr(e),r=Number.parseFloat(n);return n&&sr(n)===`pixel`&&!Number.isNaN(r)?r:e.offsetWidth>0?e.offsetWidth:dr(t)}function pr(e,t,n,r,i){let a=lr(i,n);return e==null||t===`unknown`?a:n?t===`percent`?e:r==null?a:e/r*100:t===`pixel`?e:r==null?a:e/100*r}var mr=class extends or{tableId=R();rowId=R();colIds=[];rowspanCount=[];cellCount=0;colCount=0;constructor(e,t){super(e,t),this.quill=e,this.addMatcher(`table`,this.matchTable.bind(this)),this.addMatcher(`thead`,this.matchThead.bind(this)),this.addMatcher(`tbody`,this.matchTbody.bind(this)),this.addMatcher(`tfoot`,this.matchTfoot.bind(this)),this.addMatcher(`colgroup`,this.matchColgroup.bind(this)),this.addMatcher(`col`,this.matchCol.bind(this)),this.addMatcher(`tr`,this.matchTr.bind(this)),this.addMatcher(`td`,this.matchTd.bind(this)),this.addMatcher(`th`,this.matchTd.bind(this)),this.addMatcher(`caption`,this.matchCaption.bind(this)),this.addMatcher(Node.ELEMENT_NODE,this.matchTdAttributor.bind(this))}normalizeHTML(e){super.normalizeHTML(e);let t=this.quill.getModule(i.moduleName)?.options??{};t.pasteStyleSheet!==!1&&gn(e,{includeDefaultTagStyle:t.pasteDefaultTagStyle})}getStyleBackgroundColor(e,n){let r=e.style.backgroundColor;if(r){for(let e of n.ops)if(e.attributes?.[t.tableCellInner]){let{style:n,...i}=e.attributes[t.tableCellInner],a=fn(n||``);a.backgroundColor||(a.backgroundColor=r,e.attributes[t.tableCellInner]={...i,style:pn(a)})}}}getTargetFull(){return!!this.quill.getModule(i.moduleName)?.options.full}matchTable(e,n){if(n.ops.length===0)return n;let r=[],i=[],a=-1;for(let e=0;e<n.ops.length;e++){let{attributes:o,insert:s}=n.ops[e];if(!ie(s)&&(!o||!o[t.tableCellInner]&&!o[t.tableCaption])){n.ops.splice(e,1),--e;continue}let{table:c,[t.tableCell]:l,...u}=o||{},d=ie(s)&&s[t.tableCol];d?i.push({insert:s}):r.push({attributes:u,insert:s}),!u?.[t.tableCellInner]&&!u?.[t.tableCaption]&&!d&&C(s)&&s.trim().length>0&&(a=e)}let o=i.find(e=>e?.insert?.[t.tableCol]),s=o?o.insert[t.tableCol].full:this.getTargetFull(),c=lr(this.colIds.length,s),l=Array(this.colIds.length).fill(null).reduce((e,n,r)=>(i[r]?e.push(i[r]):e.push({insert:{[t.tableCol]:{tableId:this.tableId,colId:this.colIds[r],width:c,full:s}}}),e),[]);r.splice(a+1,0,...l);let u=new ar(r);return this.getStyleBackgroundColor(e,u),this.tableId=R(),this.colIds=[],this.rowspanCount=[],this.cellCount=0,this.colCount=0,u}matchTbody(e,n){this.getStyleBackgroundColor(e,n);let r=[];for(let e=n.ops.length-1;e>=0;e--){let i=n.ops[e];if(!i.attributes?.[t.tableCellInner]){r=[];let e=i.insert?C(i.insert)?i.insert.split(`
|
|
15
|
+
`).length-1:1:0;for(let t=0;t<e;t++)r.push(R())}else if(i.attributes){let e=i.attributes[t.tableCellInner];e.rowspan===1?r=[]:r.length>0&&(e.emptyRow||=[],r.length>e.emptyRow.length&&e.emptyRow.push(...r.slice(e.emptyRow.length-r.length)))}}return this.rowspanCount=[],n}matchThead(e,n){let r=this.matchTbody(e,n);for(let e of r.ops)if(e.attributes?.[t.tableCellInner]){let n=e.attributes[t.tableCellInner];n.wrapTag=`thead`}return r}matchTfoot(e,n){let r=this.matchTbody(e,n);for(let e of r.ops)if(e.attributes?.[t.tableCellInner]){let n=e.attributes[t.tableCellInner];n.wrapTag=`tfoot`}return r}matchColgroup(e,n){let r=[];for(let e of n.ops)e&&ie(e.insert)&&e.insert[t.tableCol]&&r.push(e);if(r.length>0){let n=e,i=ur(n),a=i.some(e=>e.unit===`percent`),o=i.some(e=>e.unit===`pixel`),s=a&&o?this.getTargetFull():a?!0:o?!1:this.getTargetFull(),c=fr(n.closest(`table`),i);for(let[e,n]of r.entries()){let a=i[e];n.insert[t.tableCol].full=s,n.insert[t.tableCol].width=pr(a?.width??null,a?.unit??`unknown`,s,c,r.length)}}return new ar(r)}matchCol(e,n){let r=Number(e.getAttribute(`span`)||1);Number.isNaN(r)&&(r=1);let i=new ar;for(let n=0;n<r;n++)this.colIds[this.colCount]=R(),i.insert({[t.tableCol]:Object.assign(G.value(e),{tableId:this.tableId,colId:this.colIds[this.colCount]})}),this.colCount+=1;return i}matchTr(e,t){this.rowId=R(),this.cellCount=0;for(let[e,t]of this.rowspanCount.entries())t.rowspan>0&&--t.rowspan,t.rowspan<=0&&(this.rowspanCount[e]={rowspan:0,colspan:0});return this.getStyleBackgroundColor(e,t),t.ops.length===0?new ar([{insert:`
|
|
16
16
|
`}]):t}matchTd(e,n){let r=e,i=W.formats(r);if(!this.colIds[this.cellCount]||!this.rowspanCount[this.cellCount])for(let e=this.cellCount;e>=0;e--)this.colIds[e]||(this.colIds[e]=R()),this.rowspanCount[e]||(this.rowspanCount[e]={rowspan:0,colspan:0});for(let e=this.cellCount;e<this.rowspanCount.length;e++){let{rowspan:t,colspan:n}=this.rowspanCount[e];if(t===0)break;this.cellCount+=n}i.rowspan>1&&(this.rowspanCount[this.cellCount]={rowspan:i.rowspan,colspan:i.colspan});let a=this.colIds[this.cellCount];this.cellCount+=i.colspan;let o=Object.assign(i,{tableId:this.tableId,rowId:this.rowId,colId:a});r.style.border===`none`&&(o.style=o.style.replaceAll(/border-(top|right|bottom|left)-style:none;?/g,``));let s=[];for(let e of n.ops){let{attributes:n={},...r}=e,{[t.tableCell]:i,...a}=n;s.push({...r,attributes:{...a,[t.tableCellInner]:o}})}return(s.length<=0||!C(s[s.length-1].insert)||!s[s.length-1].insert.endsWith(`
|
|
17
17
|
`))&&s.push({insert:`
|
|
18
|
-
`,attributes:{[t.tableCellInner]:o}}),new ar(s)}matchTdAttributor(e,n){if(e.tagName.toLocaleLowerCase()===`td`){let e=[];for(let r of n.ops){let{attributes:n,...i}=r,a=n?.[t.tableCellInner];if(n&&a?.style){let{background:t,...r}=n,o=document.createElement(`div`);o.style.background=t;let s=document.createElement(`div`);if(s.style.cssText=a.style,o.style.background===s.style.backgroundColor){e.push({...i,attributes:{...r}});continue}}e.push(r)}return new ar(e)}return n}convert({html:e,text:n},r={}){let i=super.convert({html:e,text:n},r);if(r[t.tableCellInner])for(let e of i.ops){if(ie(e.insert)&&e.insert[t.tableCol]){e.insert=``;continue}e.attributes||={},e.attributes[t.tableCellInner]=r[t.tableCellInner]}return i}matchCaption(e,n){for(let e of n.ops){let{attributes:n}=e;n?.[t.tableCaption]&&(n[t.tableCaption].tableId=this.tableId,e.attributes=n)}return n}},
|
|
18
|
+
`,attributes:{[t.tableCellInner]:o}}),new ar(s)}matchTdAttributor(e,n){if(e.tagName.toLocaleLowerCase()===`td`){let e=[];for(let r of n.ops){let{attributes:n,...i}=r,a=n?.[t.tableCellInner];if(n&&a?.style){let{background:t,...r}=n,o=document.createElement(`div`);o.style.background=t;let s=document.createElement(`div`);if(s.style.cssText=a.style,o.style.background===s.style.backgroundColor){e.push({...i,attributes:{...r}});continue}}e.push(r)}return new ar(e)}return n}convert({html:e,text:n},r={}){let i=super.convert({html:e,text:n},r);if(r[t.tableCellInner])for(let e of i.ops){if(ie(e.insert)&&e.insert[t.tableCol]){e.insert=``;continue}e.attributes||={},e.attributes[t.tableCellInner]=r[t.tableCellInner]}return i}matchCaption(e,n){for(let e of n.ops){let{attributes:n}=e;n?.[t.tableCaption]&&(n[t.tableCaption].tableId=this.tableId,e.attributes=n)}return n}},hr=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
19
19
|
<!-- Icon from Tabler Icons by Paweł Kuna - https://github.com/tabler/tabler-icons/blob/master/LICENSE -->
|
|
20
20
|
<path
|
|
21
21
|
fill="none"
|
|
@@ -26,7 +26,7 @@ import e from"quill";const t={container:`table-up-container`,tableCaption:`table
|
|
|
26
26
|
d="M4 12V6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v6m-10 6H3m18 0h-7m-8-3l-3 3l3 3m12-6l3 3l-3 3"
|
|
27
27
|
/>
|
|
28
28
|
</svg>
|
|
29
|
-
`,
|
|
29
|
+
`,gr=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
30
30
|
<path
|
|
31
31
|
fill="none"
|
|
32
32
|
stroke="currentColor"
|
|
@@ -36,7 +36,7 @@ import e from"quill";const t={container:`table-up-container`,tableCaption:`table
|
|
|
36
36
|
d="m4 8l4-4m6 0L4 14m0 6L20 4m0 6L10 20m10-4l-4 4"
|
|
37
37
|
/>
|
|
38
38
|
</svg>
|
|
39
|
-
`,
|
|
39
|
+
`,_r=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
40
40
|
<path
|
|
41
41
|
fill="none"
|
|
42
42
|
stroke="currentColor"
|
|
@@ -46,14 +46,14 @@ import e from"quill";const t={container:`table-up-container`,tableCaption:`table
|
|
|
46
46
|
d="m12.01 16l-.01.011M12.01 12l-.01.011M12.01 8l-.01.011M8.01 12l-.01.011M16.01 12l-.01.011M21 3.6v16.8a.6.6 0 0 1-.6.6H3.6a.6.6 0 0 1-.6-.6V3.6a.6.6 0 0 1 .6-.6h16.8a.6.6 0 0 1 .6.6"
|
|
47
47
|
/>
|
|
48
48
|
</svg>
|
|
49
|
-
`,
|
|
49
|
+
`,vr=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
50
50
|
<!-- Icon from Material Symbols by Google - https://github.com/google/material-design-icons/blob/master/LICENSE -->
|
|
51
51
|
<path
|
|
52
52
|
fill="currentColor"
|
|
53
53
|
d="M11 21V9H3V5q0-.825.588-1.412T5 3h14q.825 0 1.413.588T21 5v14q0 .825-.587 1.413T19 21zm2-2h6v-4h-6zm0-6h6V9h-6zM5 7h14V5H5zM3 22v-2h2.55q-1.2-.575-1.937-1.7t-.738-2.55q0-1.975 1.388-3.363T7.625 11v2q-1.125 0-1.937.8t-.813 1.95q0 .975.6 1.725t1.525.95V16h2v6z"
|
|
54
54
|
/>
|
|
55
55
|
</svg>
|
|
56
|
-
`,
|
|
56
|
+
`,yr=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 256">
|
|
57
57
|
<g fill="currentColor">
|
|
58
58
|
<path d="M216 40v128h-48V88H88V40Z" opacity=".2" />
|
|
59
59
|
<path
|
|
@@ -61,77 +61,77 @@ import e from"quill";const t={container:`table-up-container`,tableCaption:`table
|
|
|
61
61
|
/>
|
|
62
62
|
</g>
|
|
63
63
|
</svg>
|
|
64
|
-
`,
|
|
64
|
+
`,br=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 32 32">
|
|
65
65
|
<path
|
|
66
66
|
fill="currentColor"
|
|
67
67
|
d="m19.05 13.733l-1-1.733l-10.122 5.846l-.997-.576a3 3 0 0 0 .667-.769A3 3 0 1 0 3.5 17.599L5.928 19L3.5 20.402a3.034 3.034 0 1 0 3.44.323l.988-.57L14.59 24l1-1.73L9.928 19zM4.034 15.26a1 1 0 1 1 .466.607a1 1 0 0 1-.466-.607M5 22a1 1 0 1 1-.865 1.5A1 1 0 0 1 5 22m12 4h4v2h-4zm-7 0h4v2h-4z"
|
|
68
68
|
/>
|
|
69
69
|
<path fill="currentColor" d="M28 28h-4v-2h4V4H7v4H5V4a2 2 0 0 1 2-2h21a2 2 0 0 1 2 2v22a2 2 0 0 1-2 2" />
|
|
70
70
|
</svg>
|
|
71
|
-
`,
|
|
71
|
+
`,xr=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
72
72
|
<path
|
|
73
73
|
fill="currentColor"
|
|
74
74
|
d="M4 3h14a2 2 0 0 1 2 2v7.08a6 6 0 0 0-4.32.92H12v4h1.08c-.11.68-.11 1.35 0 2H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2m0 4v4h6V7zm8 0v4h6V7zm-8 6v4h6v-4zm11.94 5.5h2v-4h2v4h2l-3 3z"
|
|
75
75
|
/>
|
|
76
76
|
</svg>
|
|
77
|
-
`,
|
|
77
|
+
`,Sr=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
78
78
|
<path
|
|
79
79
|
fill="currentColor"
|
|
80
80
|
d="M4 3h14a2 2 0 0 1 2 2v7.08a6 6 0 0 0-4.32.92H12v4h1.08c-.11.68-.11 1.35 0 2H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2m0 4v4h6V7zm8 0v4h6V7zm-8 6v4h6v-4zm14.44 2v2h4v2h-4v2l-3-3z"
|
|
81
81
|
/>
|
|
82
82
|
</svg>
|
|
83
|
-
`,
|
|
83
|
+
`,Cr=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
84
84
|
<path
|
|
85
85
|
fill="currentColor"
|
|
86
86
|
d="M4 3h14a2 2 0 0 1 2 2v7.08a6 6 0 0 0-4.32.92H12v4h1.08c-.11.68-.11 1.35 0 2H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2m0 4v4h6V7zm8 0v4h6V7zm-8 6v4h6v-4zm15.44 8v-2h-4v-2h4v-2l3 3z"
|
|
87
87
|
/>
|
|
88
88
|
</svg>
|
|
89
|
-
`,
|
|
89
|
+
`,wr=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
90
90
|
<path
|
|
91
91
|
fill="currentColor"
|
|
92
92
|
d="M4 3h14a2 2 0 0 1 2 2v7.08a6 6 0 0 0-4.32.92H12v4h1.08c-.11.68-.11 1.35 0 2H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2m0 4v4h6V7zm8 0v4h6V7zm-8 6v4h6v-4zm17.94 4.5h-2v4h-2v-4h-2l3-3z"
|
|
93
93
|
/>
|
|
94
94
|
</svg>
|
|
95
|
-
`,
|
|
95
|
+
`,Tr=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
96
96
|
<path
|
|
97
97
|
fill="currentColor"
|
|
98
98
|
d="M5 10H3V4h8v2H5zm14 8h-6v2h8v-6h-2zM5 18v-4H3v6h8v-2zM21 4h-8v2h6v4h2zM8 13v2l3-3l-3-3v2H3v2zm8-2V9l-3 3l3 3v-2h5v-2z"
|
|
99
99
|
/>
|
|
100
100
|
</svg>
|
|
101
|
-
`,
|
|
101
|
+
`,Er=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
102
102
|
<path
|
|
103
103
|
fill="currentColor"
|
|
104
104
|
d="M4 2h7a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2m0 8v4h7v-4zm0 6v4h7v-4zM4 4v4h7V4zm13.59 8L15 9.41L16.41 8L19 10.59L21.59 8L23 9.41L20.41 12L23 14.59L21.59 16L19 13.41L16.41 16L15 14.59z"
|
|
105
105
|
/>
|
|
106
106
|
</svg>
|
|
107
|
-
`,
|
|
107
|
+
`,Dr=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
108
108
|
<path
|
|
109
109
|
fill="currentColor"
|
|
110
110
|
d="M9.41 13L12 15.59L14.59 13L16 14.41L13.41 17L16 19.59L14.59 21L12 18.41L9.41 21L8 19.59L10.59 17L8 14.41zM22 9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2zM4 9h4V6H4zm6 0h4V6h-4zm6 0h4V6h-4z"
|
|
111
111
|
/>
|
|
112
112
|
</svg>
|
|
113
|
-
`,
|
|
113
|
+
`,Or=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
114
114
|
<path
|
|
115
115
|
fill="currentColor"
|
|
116
116
|
d="m15.46 15.88l1.42-1.42L19 16.59l2.12-2.13l1.42 1.42L20.41 18l2.13 2.12l-1.42 1.42L19 19.41l-2.12 2.13l-1.42-1.42L17.59 18zM4 3h14a2 2 0 0 1 2 2v7.08a6 6 0 0 0-4.32.92H12v4h1.08c-.11.68-.11 1.35 0 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2m0 4v4h6V7zm8 0v4h6V7zm-8 6v4h6v-4z"
|
|
117
117
|
/>
|
|
118
118
|
</svg>
|
|
119
|
-
`,
|
|
119
|
+
`,kr=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
120
120
|
<path
|
|
121
121
|
fill="currentColor"
|
|
122
122
|
d="M19 14h2v6H3v-6h2v4h14zM3 4v6h2V6h14v4h2V4zm8 7v2H8v2l-3-3l3-3v2zm5 0V9l3 3l-3 3v-2h-3v-2z"
|
|
123
123
|
/>
|
|
124
124
|
</svg>
|
|
125
|
-
`,
|
|
125
|
+
`,Ar=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
126
126
|
<!-- Icon from TDesign Icons by TDesign - https://github.com/Tencent/tdesign-icons/blob/main/LICENSE -->
|
|
127
127
|
<path fill="currentColor" d="M21 10v12h-2V12H5v10H3V10zm0-8v6H3V2zm-2 2H5v2h14z" />
|
|
128
128
|
</svg>
|
|
129
|
-
`;const Er=`color-selector`;async function Dr(e,t,n=!1){let r=e.getTextByCell(t),i=e.getHTMLByCell(t,n),a=new ClipboardItem({"text/plain":new Blob([r],{type:`text/plain`}),"text/html":new Blob([i],{type:`text/html`})});await navigator.clipboard.write([a])}const X={Break:{name:`break`},CopyCell:{name:`CopyCell`,tip:`Copy cell`,icon:mr,handle(e,t){Dr.call(this,e,t,!1)}},CutCell:{name:`CutCell`,tip:`Cut cell`,icon:hr,handle(e,t){Dr.call(this,e,t,!0)}},InsertTop:{name:`InsertTop`,icon:yr,tip:`Insert row above`,handle(e,t){e.appendRow(t,!1)}},InsertRight:{name:`InsertRight`,icon:vr,tip:`Insert column right`,handle(e,t){e.appendCol(t,!0)}},InsertBottom:{name:`InsertBottom`,icon:gr,tip:`Insert row below`,handle(e,t){e.appendRow(t,!0)}},InsertLeft:{name:`InsertLeft`,icon:_r,tip:`Insert column Left`,handle(e,t){e.appendCol(t,!1)}},MergeCell:{name:`MergeCell`,icon:br,tip:`Merge Cell`,handle(e,t){e.mergeCells(t)}},SplitCell:{name:`SplitCell`,icon:wr,tip:`Split Cell`,handle(e,t){e.splitCell(t)}},DeleteRow:{name:`DeleteRow`,icon:Sr,tip:`Delete Row`,handle(e,t){e.removeRow(t)}},DeleteColumn:{name:`DeleteColumn`,icon:xr,tip:`Delete Column`,handle(e,t){e.removeCol(t)}},DeleteTable:{name:`DeleteTable`,icon:Cr,tip:`Delete table`,handle(e,t){e.deleteTable(t)}},BackgroundColor:{name:`BackgroundColor`,icon:dr,isColorChoose:!0,tip:`Set background color`,key:`background-color`,handle(e,t,n){e.setCellAttrs(t,`background-color`,n,!0)}},BorderColor:{name:`BorderColor`,icon:fr,isColorChoose:!0,tip:`Set border color`,key:`border-color`,handle(e,t,n){e.setCellAttrs(t,`border-color`,n,!0)}},SwitchWidth:{name:`SwitchWidth`,icon:ur,tip:`Switch table width`,handle(){if(!this.table)return;let t=e.find(this.table);t&&(t.full?t.cancelFull():t.setFull())}},InsertCaption:{name:`InsertCaption`,icon:Tr,tip:`Insert table caption`,handle(){if(!this.table)return;let n=e.find(this.table);if(!n)return;let r=this.quill.scroll.create(`text`,`Table Caption`).wrap(t.tableCaption,{tableId:n.tableId});n.insertBefore(r,n.children.head)}},ToggleTdBetweenTh:{name:`ToggleTdBetweenTh`,icon:pr,tip:`Toggle td between th`,handle(e,t){for(let e of t)e.convertTableCell()}},ConvertTothead:{name:`ConvertTothead`,icon:pr,tip:`Convert to thead`,handle(t,n){if(!this.table)return;let r=e.find(this.table);r&&t.convertTableBodyByCells(r,n,`thead`)}},ConvertTotfoot:{name:`ConvertTotfoot`,icon:pr,tip:`Convert to tfoot`,handle(t,n){if(!this.table)return;let r=e.find(this.table);r&&t.convertTableBodyByCells(r,n,`tfoot`)}}},Or=l(`color-map`),Z={selectWrapper:Or.b(),used:Or.bm(`used`),item:Or.be(`item`),btn:Or.be(`btn`),map:Or.be(`content`),mapRow:Or.be(`content-row`)};var kr=class extends Gn{static moduleName=`table-menu`;usedColors=new Set;options;menu=null;isMenuDisplay=!1;isColorPicking=!1;tooltipItem=[];activeTooltip=null;bem=l(`menu`);colorItemClass=`color-${R()}`;colorChooseTooltipOption={direction:`top`};constructor(t,n,i){super(t,n),this.tableModule=t,this.quill=n,this.options=this.resolveOptions(i);try{let e=localStorage.getItem(this.options.localstorageKey)||`[]`,t=JSON.parse(e);S(t)||(t=[]),t.slice(-10).map(e=>this.usedColors.add(e))}catch{}this.quill.on(e.events.EDITOR_CHANGE,this.updateWhenTextChange),this.quill.on(r.TABLE_SELECTION_DRAG_START,this.hideWhenSelectionDragStart)}updateUsedColor=_n(e=>{if(!e)return;if(this.usedColors.add(e),this.usedColors.size>10){let e=Array.from(this.usedColors).slice(-10);this.usedColors.clear(),e.map(e=>this.usedColors.add(e))}localStorage.setItem(this.options.localstorageKey,JSON.stringify(Array.from(this.usedColors)));let t=Array.from(document.querySelectorAll(`.${this.colorItemClass}.${Z.used}`));for(let n of t){let t=document.createElement(`div`);t.classList.add(Z.item),t.style.backgroundColor=String(e),Array.from(n.querySelectorAll(`.${Z.item}[style*="background-color: ${t.style.backgroundColor}"]`)).length<=0&&n.appendChild(t);let r=Array.from(n.querySelectorAll(`.${Z.item}`)).slice(0,-10);for(let e of r)e.remove()}},1e3);hideWhenSelectionDragStart=()=>{this.hide()};updateWhenTextChange=t=>{t===e.events.TEXT_CHANGE&&this.isMenuDisplay&&this.update()};resolveOptions(e){return Object.assign({tipText:!0,tools:[X.InsertTop,X.InsertRight,X.InsertBottom,X.InsertLeft,X.Break,X.MergeCell,X.SplitCell,X.Break,X.DeleteRow,X.DeleteColumn,X.DeleteTable,X.Break,X.BackgroundColor,X.BorderColor],localstorageKey:`__table-bg-used-color`,defaultColorMap:a},e)}buildTools(){let e=document.createElement(`div`);e.classList.add(this.bem.b()),Object.assign(e.style,{display:`flex`});for(let t of this.options.tools){let{name:n,icon:r,handle:i,isColorChoose:a,key:o,tip:s=``}=t,c=document.createElement(`span`);if(c.classList.add(this.bem.be(`item`)),n===`break`)c.classList.add(this.bem.is(`break`));else{let e=document.createElement(`i`);if(e.classList.add(`icon`),x(r)?e.appendChild(r(this.tableModule)):e.innerHTML=r,c.appendChild(e),a&&o){let e=this.createColorChoose(c,{name:n,icon:r,handle:i,isColorChoose:a,key:o,tip:s});this.tooltipItem.push(e),c.classList.add(Er)}else x(i)&&c.addEventListener(`click`,e=>{this.quill.focus(),i.call(this,this.tableModule,this.getSelectedTds(),e)},!1);let t=this.tableModule.options.texts[n]||s;this.options.tipText&&t&&s&&this.createTipText(c,t)}e.appendChild(c)}return e}createColorChoose(e,{handle:t,key:n}){let r=document.createElement(`div`);if(r.classList.add(Z.selectWrapper),this.options.defaultColorMap.length>0){let e=document.createElement(`div`);e.classList.add(Z.map);for(let t of this.options.defaultColorMap){let n=document.createElement(`div`);n.classList.add(Z.mapRow);for(let e of t){let t=document.createElement(`div`);t.classList.add(Z.item),t.style.backgroundColor=e,n.appendChild(t)}e.appendChild(n)}r.appendChild(e)}let a=document.createElement(`div`);a.classList.add(Z.mapRow),Object.assign(a.style,{marginTop:`4px`});let o=document.createElement(`div`);o.classList.add(Z.btn,`transparent`),o.textContent=this.tableModule.options.texts.transparent,o.addEventListener(`click`,()=>{t.call(this,this.tableModule,this.getSelectedTds(),`transparent`)});let s=document.createElement(`div`);s.classList.add(Z.btn,`clear`),s.textContent=this.tableModule.options.texts.clear,s.addEventListener(`click`,()=>{t.call(this,this.tableModule,this.getSelectedTds(),null)});let c=document.createElement(`div`);c.classList.add(Z.btn,`custom`),c.textContent=this.tableModule.options.texts.custom;let l=le({onChange:e=>{t.call(this,this.tableModule,this.getSelectedTds(),e),this.updateUsedColor(e)}}),{hide:u,destroy:d}=Qt(c,{direction:`right`,type:`click`,content:l,container:c});a.appendChild(o),a.appendChild(s),a.appendChild(c),r.appendChild(a);let f=document.createElement(`div`);f.classList.add(Z.used,this.colorItemClass);for(let e of this.usedColors){let t=document.createElement(`div`);t.classList.add(Z.item),t.style.backgroundColor=e,f.appendChild(t)}r.appendChild(f),r.addEventListener(`click`,e=>{e.stopPropagation(),u();let t=e.target,r=t.style.backgroundColor,i=this.getSelectedTds();if(t&&r&&i.length>0){if(this.tableModule.setCellAttrs(i,n,r,!0),!t.closest(`.${Z.item}`))return;this.updateUsedColor(r)}});let p=Qt(e,{...this.colorChooseTooltipOption,type:`click`,content:r,container:this.quill.container,onOpen:()=>{let e=this.tableModule.getModule(i.tableSelectionName);return this.isMenuDisplay&&e&&e.hideDisplay(),this.setActiveTooltip(p),!1},onClose:()=>{let e=this.tableModule.getModule(i.tableSelectionName);return this.isMenuDisplay&&e&&(e.updateWithSelectedTds(),e.showDisplay()),r.contains(l)&&u(),this.activeTooltip===p&&(this.activeTooltip=null),!1},onDestroy:()=>{d(),this.activeTooltip===p&&(this.activeTooltip=null)}});return p.isColorPick=!0,p}setActiveTooltip(e){this.activeTooltip&&this.activeTooltip!==e&&this.activeTooltip.hide(!0),this.activeTooltip=e}getSelectedTds(){return this.tableModule.getModule(i.tableSelectionName)?.selectedTds||[]}createTipText(e,t){let n=Qt(e,{msg:t,container:this.quill.container});n&&this.tooltipItem.push(n)}show(){this.table&&(this.menu&&this.hide(),this.menu=this.buildTools())}update(){this.table&&!this.quill.root.contains(this.table)&&this.setSelectionTable(void 0)}hide(){this.menu&&=(this.menu.remove(),null);for(let e of this.tooltipItem)e.hide(!0);this.isMenuDisplay=!1}destroy(){super.destroy(),this.quill.off(e.events.TEXT_CHANGE,this.updateWhenTextChange),this.quill.off(r.TABLE_SELECTION_DRAG_START,this.hideWhenSelectionDragStart),this.activeTooltip=null;for(let e of this.tooltipItem)e.destroy();this.tooltipItem=[],this.hide()}},Ar=class extends kr{static moduleName=`table-menu-contextmenu`;scrollHandler=[];constructor(e,t,n){super(e,t,n),this.tableModule=e,this.quill=t,this.quill.root.addEventListener(`contextmenu`,this.listenContextmenu),this.quill.on(r.TABLE_SELECTION_CHANGE,this.tableSelectioChange),this.quill.on(r.TABLE_SELECTION_DISPLAY_CHANGE,this.tableSelectioChange)}tableSelectioChange=e=>{e.selectedTds.length<=0&&this.hide()};listenContextmenu=e=>{let t=e.composedPath();if(!t||t.length<=0)return;let n=t.find(e=>e.tagName?.toUpperCase()===`TABLE`&&e.classList.contains(`ql-table`)),r=this.tableModule.getModule(i.tableSelectionName);if(n&&r?.selectedTds?.length){e.preventDefault(),this.menu||=this.buildTools(),this.isMenuDisplay=!0,this.update({x:e.clientX,y:e.clientY});let t=()=>{this.hide(),L.call(this)};I.call(this,this.quill.root,t),document.addEventListener(`click`,t,{once:!0})}else this.hide()};buildTools(){let e=super.buildTools();e.classList.add(this.bem.is(`contextmenu`));let t=e.getElementsByClassName(Er);for(let e of Array.from(t))e.addEventListener(`click`,e=>e.stopPropagation());return this.quill.container.appendChild(e),e}createTipText(e,t){let n=document.createElement(`span`);n.textContent=t,e.appendChild(n)}show(){}update(e){super.update();let t=this.tableModule.getModule(i.tableSelectionName);if(!this.table||!this.isMenuDisplay||!this.menu){this.hide();return}if(!e||!t?.isDisplaySelection)return;let n=this.quill.container.getBoundingClientRect();Object.assign(this.menu.style,{left:`${e.x-n.x}px`,top:`${e.y-n.y}px`});let r=this.menu.getBoundingClientRect(),{left:a,top:o}=nn(r),s=r.left-a,c=r.top-o;Object.assign(this.menu.style,{left:`${e.x-n.x-s}px`,top:`${e.y-n.y-c}px`})}destroy(){this.quill.root.removeEventListener(`contextmenu`,this.listenContextmenu),super.destroy(),this.quill.off(r.TABLE_SELECTION_CHANGE,this.tableSelectioChange),this.quill.off(r.TABLE_SELECTION_DISPLAY_CHANGE,this.tableSelectioChange)}},jr=class extends kr{static moduleName=`table-menu-select`;constructor(e,t,n){super(e,t,n),this.tableModule=e,this.quill=t,this.quill.on(r.TABLE_SELECTION_DRAG_START,this.tableSelectionDragStart),this.quill.on(r.TABLE_SELECTION_DRAG_END,this.tableSelectionDragEnd),this.quill.on(r.TABLE_SELECTION_CHANGE,this.tableSelectioChange),this.quill.on(r.TABLE_SELECTION_DISPLAY_CHANGE,this.tableSelectionDisplayChange)}tableSelectionDragStart=()=>{this.hide()};tableSelectionDragEnd=e=>{e.selectedTds.length>0&&this.show()};tableSelectioChange=(e,t)=>{t.length<=0&&this.hide()};tableSelectionDisplayChange=e=>{e.dragging||this.update()};buildTools(){let e=super.buildTools();return this.quill.container.appendChild(e),e}show(){super.show(),this.update()}update(){if(super.update(),!this.menu&&this.table){this.show();return}let e=this.getSelectedTds();if(!this.menu||!this.table||e.length===0){(this.menu||!this.table)&&(this.isMenuDisplay=!1,this.menu?.classList.add(this.bem.is(`hidden`)),this.hide());return}this.isMenuDisplay=!0,this.menu.classList.remove(this.bem.is(`hidden`));let t=this.tableModule.getModule(i.tableSelectionName);t?.isDisplaySelection&&Xt(t.cellSelect,this.menu,{placement:`bottom`,middleware:[Jt(),qt({limiter:Yt()}),Kt(20)]}).then(({x:e,y:t})=>{this.menu&&Object.assign(this.menu.style,{left:`${e}px`,top:`${t}px`})})}destroy(){super.destroy(),this.quill.off(r.TABLE_SELECTION_DRAG_START,this.tableSelectionDragStart),this.quill.off(r.TABLE_SELECTION_DRAG_END,this.tableSelectionDragEnd),this.quill.off(r.TABLE_SELECTION_CHANGE,this.tableSelectioChange),this.quill.off(r.TABLE_SELECTION_DISPLAY_CHANGE,this.tableSelectionDisplayChange)}};const Mr=e=>!e.full&&e.align===`right`;function Nr(e,t){if(t<0||t>=e.length)return null;let n=e[0].domNode.getBoundingClientRect().left;for(let r=0;r<t;r++){let t=e[r].domNode.getBoundingClientRect();n+=t.width}let r=e[t].domNode.getBoundingClientRect().width;return{left:n,right:n+r,width:r}}function Pr(e,t,n){if(e){let e=t.getCols().map(e=>e.colId),r=new Set,i=new Map(e.map(e=>[e,0])),a=new Set;for(let t of n){r.add(t.colId);let n=e.indexOf(t.colId);if(n!==-1){for(let r=n;r<n+t.colspan&&r<e.length;r++){a.add(r);let n=e[r];i.set(n,(i.get(n)||0)+t.rowspan)}a.add(Math.min(n+t.colspan,e.length))}}let o=t.getRows()?.length||0;for(let[e,t]of i.entries())t>=o&&r.delete(e);return{cellIndex:a,isSpan:r.size<=0}}else{let e=t.getRows().map(e=>e.rowId),r=new Set,i=new Map(e.map(e=>[e,0])),a=new Set;for(let t of n){r.add(t.rowId);let n=e.indexOf(t.rowId);if(n!==-1){for(let r=n;r<n+t.rowspan&&r<e.length;r++){a.add(r);let n=e[r];i.set(n,(i.get(n)||0)+t.colspan)}a.add(Math.min(n+t.rowspan,e.length))}}let o=t.getCols()?.length||0;for(let[e,t]of i.entries())t>=o&&r.delete(e);return{cellIndex:a,isSpan:r.size<=0}}}var Fr=class{maxRange=1/0;minRange=-1/0;startValue=0;dragBreak=null;tableModule;isX=!1;constructor(e,t){this.tableModule=e,this.isX=t}createBreak(){this.dragBreak&&this.dragBreak.remove();let e=l(`drag`);this.dragBreak=this.tableModule.addContainer(e.be(`line`)),this.dragBreak.classList.add(e.is(this.isX?`col`:`row`))}getOffsetFromStart(e){let t=0;if(!e)return t;let{rect:n}=Y(e);return n&&(t=n[this.isX?`x`:`y`]-this.startValue),t}limitRange(e,t,n=!0){let r=0;return n&&(r=this.getOffsetFromStart(e)),Math.min(this.maxRange+r,Math.max(t,this.minRange+r))}},Ir=class extends Gn{tableBlot;dragging=!1;colIndex=-1;rowIndex=-1;dragXCommon;dragYCommon;constructor(e,t){super(e,t),this.tableModule=e,this.quill=t,this.dragXCommon=new Fr(e,!0),this.dragYCommon=new Fr(e,!1)}findDragColIndex(e){return-1}calculateColDragRangeByFull(){if(!this.tableBlot)return;let{rect:e}=Y(this.tableBlot);if(!e)return;let t=this.tableBlot.getCols();if(this.colIndex=this.findDragColIndex(t),this.colIndex===-1)return;let r=Nr(t,this.colIndex),i=n.colMinWidthPre/100*e.width,a=e.right;t[this.colIndex+1]&&(a=Math.max(Nr(t,this.colIndex+1).right-i,r.left+i));let o=r.left+i;this.dragXCommon.minRange=o,this.dragXCommon.maxRange=a}calculateColDragRangeByFixed(){if(!this.tableBlot)return;let e=this.tableBlot.getCols();if(this.colIndex=this.findDragColIndex(e),this.colIndex===-1)return;let t=Nr(e,this.colIndex);this.dragXCommon.minRange=Mr(this.tableBlot)?t.right-n.colMinWidthPx:t.left+n.colMinWidthPx,this.dragXCommon.maxRange=1/0}calculateColDragRange(){this.tableBlot&&(this.tableBlot.full?this.calculateColDragRangeByFull():this.calculateColDragRangeByFixed())}async updateTableCol(e){if(!this.tableBlot||this.colIndex===-1)return;let t=this.dragXCommon.limitRange(this.tableBlot,e,!0),i=this.tableBlot.getCols(),a=Nr(i,this.colIndex),o=t-a.left;Mr(this.tableBlot)&&(o=a.right-t);let s=this.tableBlot.full,c=!1,l=[];if(s){let{rect:e}=Y(this.tableBlot),t=e.width,r=o/t*100,a=i[this.colIndex].width;if(r<a){if(r=Math.max(n.colMinWidthPre,r),i[this.colIndex+1]||i[this.colIndex-1]){let e=i[this.colIndex+1]?this.colIndex+1:this.colIndex-1;l.push({index:e,width:i[e].width+a-r})}else r=100;c=!0,l.push({index:this.colIndex,width:r})}else if(i[this.colIndex+1]){let e=a+i[this.colIndex+1].width;r=Math.min(e-n.colMinWidthPre,r),c=!0,l.push({index:this.colIndex,width:r},{index:this.colIndex+1,width:e-r})}}else this.tableBlot.domNode.style.width=`${Number.parseFloat(this.tableBlot.domNode.style.width)-i[this.colIndex].domNode.getBoundingClientRect().width+o}px`,c=!0,l.push({index:this.colIndex,width:o});if(c){let e=this.tableBlot.domNode.getBoundingClientRect().width;if(s){let t=0,n=new Set(l.map(({index:e,width:n})=>(t+=n,e)));for(let[e,r]of i.entries())n.has(e)||(t+=r.width);if(t>100){if(!await de({message:this.tableModule.options.texts.perWidthInsufficient,confirm:this.tableModule.options.texts.confirmText,cancel:this.tableModule.options.texts.cancelText}))return;this.tableBlot.cancelFull(),s=!1;for(let[t,n]of l.entries()){let{width:r,index:i}=n;l[t]={index:i,width:r/100*e}}}}for(let{index:e,width:t}of l){let n=Number.parseFloat(t.toFixed(3));i[e].width=`${n}${s?`%`:`px`}`}this.quill.emitter.emit(r.AFTER_TABLE_RESIZE)}}findDragRowIndex(e){return-1}calculateRowDragRange(){if(!this.tableBlot)return;let e=this.tableBlot.getRows();if(this.rowIndex=this.findDragRowIndex(e),this.rowIndex===-1)return;let t=e[this.rowIndex].domNode.getBoundingClientRect();this.dragYCommon.minRange=t.y+n.rowMinHeightPx,this.dragYCommon.maxRange=1/0}updateTableRow(e){if(!this.tableBlot||this.rowIndex===-1)return;let t=this.dragYCommon.limitRange(this.tableBlot,e,!0),n=this.tableBlot.getRows(),i=t-n[this.rowIndex].domNode.getBoundingClientRect().top;n[this.rowIndex].setHeight(`${i}px`),this.quill.emitter.emit(r.AFTER_TABLE_RESIZE)}removeBreak(){this.dragXCommon.dragBreak&&(this.dragXCommon.dragBreak.remove(),this.dragXCommon.dragBreak=null),this.dragYCommon.dragBreak&&(this.dragYCommon.dragBreak.remove(),this.dragYCommon.dragBreak=null)}};const Q=e.import(`delta`);var Lr=class extends cn{minusY=0;minusX=0;checkMinY(e){return this.mouseY+this.minusY<e.top+this.scrollThresholdY}checkMinX(e){return this.mouseX+this.minusX<e.left+this.scrollThresholdX}},Rr=class{startPosition=[];selectedIndex=new Set;moveToIndex=-1;tableModule;tableBlot;dragCommon;options;get isDragX(){return this.options.isDragX}constructor(e,t,n,r){this.tableModule=e,this.tableBlot=t,this.dragCommon=n,this.options=r}onStart(e,t,n){let r=this.tableModule.getModule(i.tableSelectionName);if(!r?.boundary||!this.tableBlot)return!1;let{isSpan:a,cellIndex:o}=Pr(this.isDragX,this.tableBlot,r.selectedTds);if(!a)return!1;let{rect:s}=Y(this.tableBlot);if(!s)return!1;t.preventDefault(),this.dragCommon.startValue=this.isDragX?s.x:s.y,this.selectedIndex=o,n?.(this),this.recalculateStartPosition()}onMove(e,t,n){this.moveToIndex=this.findTheMovedToIndex(t),n?.(this)}onEnd(e,t,n){n?.(this),this.moveToIndex=-1,this.selectedIndex=new Set}recalculateStartPosition(){if(this.isDragX){if(this.startPosition=[],!this.tableBlot)return;let e=this.tableBlot.getCols(),t=e[0].domNode.getBoundingClientRect().left;for(let n=0;n<e.length;n++){let r=e[n].domNode.getBoundingClientRect();this.startPosition.push({size:r.width,position:t,index:n}),t+=r.width}}else{if(this.startPosition=[],!this.tableBlot)return;this.startPosition=this.tableBlot.getRows().map((e,t)=>{let n=e.domNode.getBoundingClientRect();return{size:n.height,position:n.top,index:t}})}}findTheMovedToIndex(e){let t=this.dragCommon.getOffsetFromStart(this.tableBlot),n=this.startPosition.find(({position:n,size:r})=>(this.isDragX?e.clientX:e.clientY)<n+r/2+t)?.index;return(ae(n)||n<0)&&(n=this.startPosition.length),n=Math.max(0,Math.min(n,this.startPosition.length)),this.selectedIndex.has(n)||this.options.allowMoveToIndex&&!this.options.allowMoveToIndex(n)?-1:n}updateTableStructure(e,t){let n=new Q;if(!this.tableBlot||this.moveToIndex<0)return n;let r=this.tableModule.getModule(i.tableSelectionName);if(!r)return n;if(this.isDragX){let i=this.tableBlot.getCols(),a=i.length-1,o=this.moveToIndex>a,s=new Set(r.selectedTds.map(e=>e.colId)),c=i.filter(e=>s.has(e.colId)).map(t=>{let n=t.length(),r=t.offset(t.scroll);return{offset:r,delta:e.slice(r,r+n),length:n}}),l=i[Math.min(a,this.moveToIndex)],u=l.offset(l.scroll)+(o?l.length():0),d=c.reduce((e,t)=>(e=e.concat(t.delta),e),new Q().retain(u)),f=c.reduce((e,t,n)=>{let r=c[n-1],i=r?r.offset+r.length:0;return e=e.retain(t.offset-i).delete(t.length),e},new Q),p=t?f.compose(d):d.compose(f),m=r.selectedTds.map(t=>{let n=t.length(),r=t.offset(t.scroll);return{offset:r,delta:e.slice(r,r+n),length:n,rowId:t.rowId}}),{delta:h,insertDeltaInfo:g}=m.reduce(({delta:e,insertDeltaInfo:n},r,i)=>{let a=m[i-1],o=a?a.offset+a.length:0,s=0;return i!==0&&!t&&(s=a.rowId===r.rowId?0:n[a.rowId]?.length()),e=e.retain(r.offset-o+s).delete(r.length),n[r.rowId]||(n[r.rowId]=new Q),n[r.rowId]=n[r.rowId].concat(r.delta),{delta:e,insertDeltaInfo:n}},{delta:new Q,insertDeltaInfo:{}}),_=this.tableBlot.getRows(),{delta:v}=_.reduce(({delta:e,offset:n},r,i)=>{let s=r.getCellByColumIndex(Math.min(a,this.moveToIndex))[0];if(!s)return{delta:e,offset:n};let c=s.offset(s.scroll)+(o?s.length():0),l=c-n;if(i!==0&&t){let e=g[_[i-1].rowId];e&&(l-=e.length())}return e.retain(l),g[s.rowId]&&(e=e.concat(g[s.rowId])),{delta:e,offset:c}},{delta:new Q,offset:0}),y=t?h.compose(v):v.compose(h);n=p.compose(y)}else{let i=this.tableBlot.getRows(),a=i.length-1,o=this.moveToIndex>a,s=i[Math.min(a,this.moveToIndex)],c=Array.from(r.selectedTds.reduce((e,t)=>e.add(t.getTableRow()),new Set)).filter(Boolean),l=0,{delta:u,start:d,end:f}=c.reduce(({delta:e,start:t,end:n},r)=>{let i=r.offset(r.scroll),a=r.length();return e.retain(i-l).delete(a),l=i+a,{delta:e,start:Math.min(t,i),end:Math.max(n,i+a)}},{delta:new Q,start:1/0,end:0}),p=s.offset(s.scroll)+(o?s.length():0),m=new Q().retain(p).concat(e.slice(d,f));n=t?u.compose(m):m.compose(u)}return n}},zr=class extends Ir{static moduleName=`table-resize-box`;options;root;tableWrapperBlot;resizeObserver;rowHeadWrapper=null;colHeadWrapper=null;corner=null;scrollHandler=[];lastHeaderSelect=null;bem=l(`resize-box`);draggingColIndex=-1;draggingRowIndex=-1;stopColDrag=[];stopRowDrag=[];dragWrapper=null;dragPlaceholder=null;markIndicator=null;dragTip=null;stopColMoveDrag=[];stopRowMoveDrag=[];autoScroller=null;updateContentDraggingPosition;cellSpanIndex=new Set;dragPlaceholderStartPosition={x:0,y:0};constructor(t,n,i){super(t,n),this.tableModule=t,this.quill=n,this.options=this.resolveOptions(i),this.updateContentDraggingPosition=()=>this.updateContentDraggerPosition(null),this.root=this.tableModule.addContainer(this.bem.b()),this.quill.on(e.events.EDITOR_CHANGE,this.updateWhenTextChange),this.quill.on(r.TABLE_SELECTION_CHANGE,this.updateWrapperHead)}resolveOptions(e){return Object.assign({size:16,draggable:!0},e)}updateWrapperHead=()=>{if(!this.options.draggable)return;let e=this.tableModule.getModule(i.tableSelectionName);if(!e||!this.tableBlot)return;let{isSpan:t,cellIndex:n}=Pr(!0,this.tableBlot,e.selectedTds),{isSpan:r,cellIndex:a}=Pr(!1,this.tableBlot,e.selectedTds);if(t){let e=Array.from(this.root.getElementsByClassName(this.bem.be(`col-header`)));for(let t of e)t.classList.remove(this.bem.is(`selected`));if(!r)for(let t of Array.from(n).slice(0,-1))e[t].classList.add(this.bem.is(`selected`))}if(r){let e=Array.from(this.root.getElementsByClassName(this.bem.be(`row-header`))),n=[];for(let t of e)t.classList.remove(this.bem.is(`selected`)),n[Number(t.dataset.index)]=t;if(!t)for(let e of Array.from(a).slice(0,-1))n[e]&&n[e].classList.add(this.bem.is(`selected`))}};updateWhenTextChange=t=>{t===e.events.TEXT_CHANGE&&(this.table&&!this.quill.root.contains(this.table)?this.setSelectionTable(void 0):this.update())};setSelectionTable(t){if(this.table!==t){if(this.hide(),this.table=t,this.table){let t=e.find(this.table);t&&(this.tableBlot=t,this.tableWrapperBlot=this.tableBlot.parent),this.show()}this.update()}}handleResizerHeaderClick(e,t,n){if(!this.table)return;let{clientX:r,clientY:a}=n,o=this.table.getBoundingClientRect();n.shiftKey||(this.lastHeaderSelect=null);let s=[{x:e?o.left:r,y:e?a:o.top},{x:e?o.right:r,y:e?a:o.bottom}];if(this.lastHeaderSelect){let t,n;if(this.lastHeaderSelect.isX){let e=Array.from(this.root.getElementsByClassName(this.bem.be(`row-header`)))[this.lastHeaderSelect.index].getBoundingClientRect();t=Math.min(e.left,o.left),n=e.top+e.height/2}else{let e=Array.from(this.root.getElementsByClassName(this.bem.be(`col-header`)))[this.lastHeaderSelect.index].getBoundingClientRect();t=e.left+e.width/2,n=Math.min(e.top,o.top)}this.lastHeaderSelect.isX===e?e?(s[0].y=Math.min(s[0].y,n),s[1].y=Math.max(s[1].y,n)):(s[0].x=Math.min(s[0].x,t),s[1].x=Math.max(s[1].x,t)):(s[1]={x:Math.max(s[0].x,t),y:Math.max(s[0].y,n)},s[0]={x:Math.min(s[0].x,t),y:Math.min(s[0].y,n)})}else this.lastHeaderSelect={isX:e,index:t};let c=this.tableModule.getModule(i.tableSelectionName);c&&(c.table=this.table,c.setSelectedTds(c.computeSelectedTds(...s)),c.show())}findDragColIndex(){return this.draggingColIndex}findDragRowIndex(){return this.draggingRowIndex}updateContentDraggerPosition(e){if(!e||!this.dragWrapper||!this.markIndicator||!this.tableBlot||!this.tableWrapperBlot)return;let{rect:t}=Y(this.tableBlot);if(!t||e.moveToIndex<0)return;let n=this.tableWrapperBlot.domNode.getBoundingClientRect(),r=this.quill.root.getBoundingClientRect();Object.assign(this.dragWrapper.style,{top:`${Math.max(t.y,n.y)-r.y}px`,left:`${Math.max(t.x,n.x)-r.x}px`});let{position:i}=e.startPosition[e.moveToIndex]||{},a=this.dragXCommon.getOffsetFromStart(this.tableBlot),o=this.dragYCommon.getOffsetFromStart(this.tableBlot),s=e.isDragX?{top:`${Math.max(t.y,n.y)-r.y}px`,left:`${i-r.left+a}px`}:{top:`${i-r.top+o}px`,left:`${Math.max(t.x,n.x)-r.x}px`};Object.assign(this.markIndicator.style,s)}createContentDragger(e,t,n){if(!this.tableBlot)return;let r=this.tableModule.getModule(i.tableSelectionName);if(!r||!this.tableWrapperBlot)return;r.updateWithSelectedTds();let a=r.boundary.width,o=r.boundary.height,s=this.quill.root.getBoundingClientRect(),c=this.tableWrapperBlot.domNode.getBoundingClientRect(),u=l(`drag`);this.dragWrapper=this.tableModule.addContainer(u.b());let d=c.x-s.x,f=c.y-s.y;Object.assign(this.dragWrapper.style,{left:`${d}px`,top:`${f}px`,width:`${c.width}px`,height:`${c.height}px`}),this.dragPlaceholder=document.createElement(`div`),this.dragPlaceholder.classList.add(u.be(`placeholder`),u.is(`hidden`)),this.dragWrapper.appendChild(this.dragPlaceholder),this.dragPlaceholderStartPosition={x:t?r.boundary.x-d:0,y:t?0:r.boundary.y-f},Object.assign(this.dragPlaceholder.style,{left:`${this.dragPlaceholderStartPosition.x}px`,top:`${this.dragPlaceholderStartPosition.y}px`,width:`${a}px`,height:`${o}px`}),this.markIndicator=this.tableModule.addContainer(u.be(`indicator`));let p=t?{top:`${f}px`,height:`${Math.min(r.boundary.height,c.height)}px`}:{left:`${d}px`,width:`${Math.min(r.boundary.width,c.width)}px`};Object.assign(this.markIndicator.style,p),this.updateContentDraggingPosition=()=>this.updateContentDraggerPosition(n),I.call(this,this.quill.root,this.updateContentDraggingPosition),I.call(this,this.tableWrapperBlot.domNode,this.updateContentDraggingPosition),this.dragTip=this.tableModule.addContainer(u.be(`tip`));let m=document.createElement(`div`);m.classList.add(u.be(`tip-content`)),this.dragTip.appendChild(m),t?(this.dragXCommon.minRange=0,this.dragXCommon.maxRange=c.width-a):(this.dragYCommon.minRange=0,this.dragYCommon.maxRange=c.height-o)}bindColEvents(){if(!this.tableWrapperBlot)return;let e=Array.from(this.root.getElementsByClassName(this.bem.be(`col-header`))),t=Array.from(this.root.getElementsByClassName(this.bem.be(`col-separator`)));if(I.call(this,this.tableWrapperBlot.domNode,()=>{this.colHeadWrapper.scrollLeft=this.tableWrapperBlot.domNode.scrollLeft}),this.stopColMoveDrag.length>0){for(let e of this.stopColMoveDrag)e();this.stopColMoveDrag=[]}let n=new Rr(this.tableModule,this.tableBlot,this.dragXCommon,{isDragX:!0,allowMoveToIndex:e=>this.allowMoveToIndex(e)});for(let[t,r]of e.entries())if(r.addEventListener(`click`,this.handleResizerHeaderClick.bind(this,!1,t)),this.options.draggable){let{stop:e}=$t(r,this.dragHeadOptions(!0,{index:t,dragHelper:n}));this.stopColMoveDrag.push(e)}if(this.stopColDrag.length>0){for(let e of this.stopColDrag)e();this.stopColDrag=[]}for(let[e,n]of t.entries()){let{stop:t}=$t(n,{axis:`x`,onStart:(t,n)=>{if(this.dragging=!0,this.draggingColIndex=e,this.calculateColDragRange(),this.dragXCommon.createBreak(),!this.tableBlot)return;let r=this.tableBlot.domNode.parentElement.getBoundingClientRect(),{rect:i}=Y(this.tableBlot);if(!i)return;this.dragXCommon.startValue=i.x;let a=this.quill.root.getBoundingClientRect();Object.assign(this.dragXCommon.dragBreak.style,{top:`${Math.max(r.y,i.y)-a.y}px`,left:`${n.clientX-a.x}px`,height:`${Math.min(r.height,i.height)}px`})},onMove:({position:e})=>{if(!this.dragXCommon.dragBreak)return;let t=this.dragXCommon.limitRange(this.tableBlot,e.x,!0),n=this.quill.root.getBoundingClientRect();this.dragXCommon.dragBreak.style.left=`${t-n.x}px`},onEnd:({position:e})=>{this.dragging=!1,this.updateTableCol(e.x),this.removeBreak()}});this.stopColDrag.push(t),n.addEventListener(`dragstart`,e=>e.preventDefault())}}bindRowEvents(){let e=Array.from(this.root.getElementsByClassName(this.bem.be(`row-header`))),t=Array.from(this.root.getElementsByClassName(this.bem.be(`row-separator`)));if(I.call(this,this.tableWrapperBlot.domNode,()=>{this.rowHeadWrapper.scrollTop=this.tableWrapperBlot.domNode.scrollTop}),this.stopRowMoveDrag.length>0){for(let e of this.stopRowMoveDrag)e();this.stopRowMoveDrag=[]}let n=new Rr(this.tableModule,this.tableBlot,this.dragYCommon,{isDragX:!1,allowMoveToIndex:e=>this.allowMoveToIndex(e)});for(let[t,r]of e.entries()){let e=Number(r.dataset.index||t);if(r.addEventListener(`click`,this.handleResizerHeaderClick.bind(this,!0,t)),this.options.draggable){let{stop:t}=$t(r,this.dragHeadOptions(!1,{index:e,dragHelper:n}));this.stopRowMoveDrag.push(t)}}if(this.stopRowDrag.length>0){for(let e of this.stopRowDrag)e();this.stopRowDrag=[]}for(let[e,n]of t.entries()){let{stop:t}=$t(n,{axis:`y`,onStart:(t,n)=>{if(this.dragging=!0,this.draggingRowIndex=e,this.calculateRowDragRange(),this.dragYCommon.createBreak(),!this.tableBlot)return;let r=this.tableBlot.domNode.parentElement.getBoundingClientRect(),{rect:i}=Y(this.tableBlot);if(!i)return;this.dragYCommon.startValue=i.y;let a=this.quill.root.getBoundingClientRect();Object.assign(this.dragYCommon.dragBreak.style,{top:`${n.clientY-a.y}px`,left:`${Math.max(r.x,i.x)-a.x}px`,width:`${Math.min(r.width,i.width)}px`})},onMove:({position:e})=>{if(!this.dragYCommon.dragBreak||!this.table)return;let t=this.dragYCommon.limitRange(this.tableBlot,e.y,!0),n=this.quill.root.getBoundingClientRect();this.dragYCommon.dragBreak.style.top=`${t-n.y}px`},onEnd:({position:e})=>{this.dragging=!1,this.updateTableRow(e.y),this.removeBreak()}});this.stopRowDrag.push(t),n.addEventListener(`dragstart`,e=>e.preventDefault())}}allowMoveToIndex(e){return!this.cellSpanIndex.has(e)}recordCellSpan(e){let t=new Set;if(!this.tableBlot)return t;let n=this.tableBlot.descendants(H),r=e?this.tableBlot.getColIds():this.tableBlot.getRowIds(),i=e?`colspan`:`rowspan`;for(let a of n){if(a[i]<=1)continue;let n=r.indexOf(e?a.colId:a.rowId);if(n!==-1)for(let e=n+1;e<n+a[i]&&e<r.length;e++)t.add(e)}return t}dragHeadOptions(e,t){let{dragHelper:n,index:r}=t;return{axis:e?`x`:`y`,onStart:(t,i)=>{let a=!1;return n.onStart(t,i,()=>{if(!this.tableBlot)return;let t=(e?this.tableBlot.getCols():this.tableBlot.getRows()).length;if(n.selectedIndex.size>t){a=!1;return}let o=new Set(Array.from(n.selectedIndex).slice(0,-1));if(a=o.has(r),!o.has(r)){a=!1;return}this.dragging=!0,e?this.draggingColIndex=r:this.draggingRowIndex=r,this.createContentDragger(i,e,n),this.cellSpanIndex=this.recordCellSpan(e),this.tableWrapperBlot&&(this.autoScroller=new Lr(50,40),this.autoScroller.minusY=this.options.size,this.autoScroller.minusX=this.options.size,this.autoScroller.updateMousePosition(i.clientX,i.clientY),this.autoScroller.start(this.tableWrapperBlot.domNode))}),a},onMove:(t,r)=>{n.onMove(t,r,n=>{let{movePosition:i}=t;if(this.autoScroller?.updateMousePosition(r.clientX,r.clientY),!this.dragPlaceholder||!this.markIndicator||!this.dragTip||!this.tableWrapperBlot)return;this.dragPlaceholder.classList.remove(this.bem.is(`hidden`));let a=n.dragCommon.limitRange(this.tableBlot,this.dragPlaceholderStartPosition[e?`x`:`y`]+i[e?`x`:`y`],!1);if(this.dragPlaceholder.style[e?`left`:`top`]=`${a}px`,Object.assign(this.dragTip.style,{left:`${r.clientX-10}px`,top:`${r.clientY-10}px`}),n.moveToIndex<0){Object.assign(this.markIndicator.style,{opacity:`0`});return}let o=this.quill.root.getBoundingClientRect(),s=n.moveToIndex>=n.startPosition.length,c=n.startPosition[s?n.moveToIndex-1:n.moveToIndex],l=c.position+(s?c.size:0),u=n.dragCommon.getOffsetFromStart(this.tableBlot);Object.assign(this.markIndicator.style,{opacity:`1`,[e?`left`:`top`]:`${l-(e?o.left:o.top)+u}px`})})},onEnd:(t,r)=>{n.onEnd(t,r,t=>{let n=t.updateTableStructure(this.quill.getContents(),(e?this.draggingColIndex:this.draggingRowIndex)>t.moveToIndex);this.quill.updateContents(n),this.dragging=!1,this.cellSpanIndex=new Set,this.autoScroller?.stop(),an.call(this,this.quill.root,this.updateContentDraggingPosition),an.call(this,this.tableWrapperBlot.domNode,this.updateContentDraggingPosition),this.dragWrapper&&=(this.dragWrapper.remove(),null),this.markIndicator&&=(this.markIndicator.remove(),null),this.dragTip&&=(this.dragTip.remove(),null)})}}}update(){if(!this.tableBlot||!this.tableWrapperBlot)return;let{rect:e}=Y(this.tableBlot);if(!e)return;this.root.innerHTML=``;let t=this.tableBlot.getCols(),n=this.tableBlot.getRows(),r=this.tableWrapperBlot.domNode.getBoundingClientRect(),a=this.quill.root.getBoundingClientRect();if(Object.assign(this.root.style,{top:`${Math.max(e.y,r.y)-a.y}px`,left:`${Math.max(e.x,r.x)-a.x}px`}),t.length>0&&n.length>0&&(this.corner=document.createElement(`div`),this.corner.classList.add(this.bem.be(`corner`)),Object.assign(this.corner.style,{width:`${this.options.size}px`,height:`${this.options.size}px`}),this.corner.addEventListener(`click`,()=>{let e=this.tableModule.getModule(i.tableSelectionName);e&&this.tableBlot&&(e.setSelectedTds(this.tableBlot.descendants(H)),e.show(),e.updateWithSelectedTds())}),this.root.appendChild(this.corner)),t.length>0){let n=``;for(let r of t){let t=r.domNode.getBoundingClientRect().width;t===0&&(t=Number.parseInt(r.domNode.getAttribute(`width`),10)),n+=`<div class="${this.bem.be(`col-header`)}" style="width: ${t}px">
|
|
129
|
+
`;const jr=`color-selector`;async function Mr(e,t,n=!1){let r=e.getTextByCell(t),i=e.getHTMLByCell(t,n),a=new ClipboardItem({"text/plain":new Blob([r],{type:`text/plain`}),"text/html":new Blob([i],{type:`text/html`})});await navigator.clipboard.write([a])}const X={Break:{name:`break`},CopyCell:{name:`CopyCell`,tip:`Copy cell`,icon:yr,handle(e,t){Mr.call(this,e,t,!1)}},CutCell:{name:`CutCell`,tip:`Cut cell`,icon:br,handle(e,t){Mr.call(this,e,t,!0)}},InsertTop:{name:`InsertTop`,icon:wr,tip:`Insert row above`,handle(e,t){e.appendRow(t,!1)}},InsertRight:{name:`InsertRight`,icon:Cr,tip:`Insert column right`,handle(e,t){e.appendCol(t,!0)}},InsertBottom:{name:`InsertBottom`,icon:xr,tip:`Insert row below`,handle(e,t){e.appendRow(t,!0)}},InsertLeft:{name:`InsertLeft`,icon:Sr,tip:`Insert column Left`,handle(e,t){e.appendCol(t,!1)}},MergeCell:{name:`MergeCell`,icon:Tr,tip:`Merge Cell`,handle(e,t){e.mergeCells(t)}},SplitCell:{name:`SplitCell`,icon:kr,tip:`Split Cell`,handle(e,t){e.splitCell(t)}},DeleteRow:{name:`DeleteRow`,icon:Dr,tip:`Delete Row`,handle(e,t){e.removeRow(t)}},DeleteColumn:{name:`DeleteColumn`,icon:Er,tip:`Delete Column`,handle(e,t){e.removeCol(t)}},DeleteTable:{name:`DeleteTable`,icon:Or,tip:`Delete table`,handle(e,t){e.deleteTable(t)}},BackgroundColor:{name:`BackgroundColor`,icon:gr,isColorChoose:!0,tip:`Set background color`,key:`background-color`,handle(e,t,n){e.setCellAttrs(t,`background-color`,n,!0)}},BorderColor:{name:`BorderColor`,icon:_r,isColorChoose:!0,tip:`Set border color`,key:`border-color`,handle(e,t,n){e.setCellAttrs(t,`border-color`,n,!0)}},SwitchWidth:{name:`SwitchWidth`,icon:hr,tip:`Switch table width`,handle(){if(!this.table)return;let t=e.find(this.table);t&&(t.full?t.cancelFull():t.setFull())}},InsertCaption:{name:`InsertCaption`,icon:Ar,tip:`Insert table caption`,handle(){if(!this.table)return;let n=e.find(this.table);if(!n)return;let r=this.quill.scroll.create(`text`,`Table Caption`).wrap(t.tableCaption,{tableId:n.tableId});n.insertBefore(r,n.children.head)}},ToggleTdBetweenTh:{name:`ToggleTdBetweenTh`,icon:vr,tip:`Toggle td between th`,handle(e,t){for(let e of t)e.convertTableCell()}},ConvertTothead:{name:`ConvertTothead`,icon:vr,tip:`Convert to thead`,handle(t,n){if(!this.table)return;let r=e.find(this.table);r&&t.convertTableBodyByCells(r,n,`thead`)}},ConvertTotfoot:{name:`ConvertTotfoot`,icon:vr,tip:`Convert to tfoot`,handle(t,n){if(!this.table)return;let r=e.find(this.table);r&&t.convertTableBodyByCells(r,n,`tfoot`)}}},Nr=l(`color-map`),Z={selectWrapper:Nr.b(),used:Nr.bm(`used`),item:Nr.be(`item`),btn:Nr.be(`btn`),map:Nr.be(`content`),mapRow:Nr.be(`content-row`)};var Pr=class extends Gn{static moduleName=`table-menu`;usedColors=new Set;options;menu=null;isMenuDisplay=!1;isColorPicking=!1;tooltipItem=[];activeTooltip=null;bem=l(`menu`);colorItemClass=`color-${R()}`;colorChooseTooltipOption={direction:`top`};constructor(t,n,i){super(t,n),this.tableModule=t,this.quill=n,this.options=this.resolveOptions(i);try{let e=localStorage.getItem(this.options.localstorageKey)||`[]`,t=JSON.parse(e);S(t)||(t=[]),t.slice(-10).map(e=>this.usedColors.add(e))}catch{}this.quill.on(e.events.EDITOR_CHANGE,this.updateWhenTextChange),this.quill.on(r.TABLE_SELECTION_DRAG_START,this.hideWhenSelectionDragStart)}updateUsedColor=_n(e=>{if(!e)return;if(this.usedColors.add(e),this.usedColors.size>10){let e=Array.from(this.usedColors).slice(-10);this.usedColors.clear(),e.map(e=>this.usedColors.add(e))}localStorage.setItem(this.options.localstorageKey,JSON.stringify(Array.from(this.usedColors)));let t=Array.from(document.querySelectorAll(`.${this.colorItemClass}.${Z.used}`));for(let n of t){let t=document.createElement(`div`);t.classList.add(Z.item),t.style.backgroundColor=String(e),Array.from(n.querySelectorAll(`.${Z.item}[style*="background-color: ${t.style.backgroundColor}"]`)).length<=0&&n.appendChild(t);let r=Array.from(n.querySelectorAll(`.${Z.item}`)).slice(0,-10);for(let e of r)e.remove()}},1e3);hideWhenSelectionDragStart=()=>{this.hide()};updateWhenTextChange=t=>{t===e.events.TEXT_CHANGE&&this.isMenuDisplay&&this.update()};resolveOptions(e){return Object.assign({tipText:!0,tools:[X.InsertTop,X.InsertRight,X.InsertBottom,X.InsertLeft,X.Break,X.MergeCell,X.SplitCell,X.Break,X.DeleteRow,X.DeleteColumn,X.DeleteTable,X.Break,X.BackgroundColor,X.BorderColor],localstorageKey:`__table-bg-used-color`,defaultColorMap:a},e)}buildTools(){let e=document.createElement(`div`);e.classList.add(this.bem.b()),Object.assign(e.style,{display:`flex`});for(let t of this.options.tools){let{name:n,icon:r,handle:i,isColorChoose:a,key:o,tip:s=``}=t,c=document.createElement(`span`);if(c.classList.add(this.bem.be(`item`)),n===`break`)c.classList.add(this.bem.is(`break`));else{let e=document.createElement(`i`);if(e.classList.add(`icon`),x(r)?e.appendChild(r(this.tableModule)):e.innerHTML=r,c.appendChild(e),a&&o){let e=this.createColorChoose(c,{name:n,icon:r,handle:i,isColorChoose:a,key:o,tip:s});this.tooltipItem.push(e),c.classList.add(jr)}else x(i)&&c.addEventListener(`click`,e=>{this.quill.focus(),i.call(this,this.tableModule,this.getSelectedTds(),e)},!1);let t=this.tableModule.options.texts[n]||s;this.options.tipText&&t&&s&&this.createTipText(c,t)}e.appendChild(c)}return e}createColorChoose(e,{handle:t,key:n}){let r=document.createElement(`div`);if(r.classList.add(Z.selectWrapper),this.options.defaultColorMap.length>0){let e=document.createElement(`div`);e.classList.add(Z.map);for(let t of this.options.defaultColorMap){let n=document.createElement(`div`);n.classList.add(Z.mapRow);for(let e of t){let t=document.createElement(`div`);t.classList.add(Z.item),t.style.backgroundColor=e,n.appendChild(t)}e.appendChild(n)}r.appendChild(e)}let a=document.createElement(`div`);a.classList.add(Z.mapRow),Object.assign(a.style,{marginTop:`4px`});let o=document.createElement(`div`);o.classList.add(Z.btn,`transparent`),o.textContent=this.tableModule.options.texts.transparent,o.addEventListener(`click`,()=>{t.call(this,this.tableModule,this.getSelectedTds(),`transparent`)});let s=document.createElement(`div`);s.classList.add(Z.btn,`clear`),s.textContent=this.tableModule.options.texts.clear,s.addEventListener(`click`,()=>{t.call(this,this.tableModule,this.getSelectedTds(),null)});let c=document.createElement(`div`);c.classList.add(Z.btn,`custom`),c.textContent=this.tableModule.options.texts.custom;let l=le({onChange:e=>{t.call(this,this.tableModule,this.getSelectedTds(),e),this.updateUsedColor(e)}}),{hide:u,destroy:d}=Qt(c,{direction:`right`,type:`click`,content:l,container:c});a.appendChild(o),a.appendChild(s),a.appendChild(c),r.appendChild(a);let f=document.createElement(`div`);f.classList.add(Z.used,this.colorItemClass);for(let e of this.usedColors){let t=document.createElement(`div`);t.classList.add(Z.item),t.style.backgroundColor=e,f.appendChild(t)}r.appendChild(f),r.addEventListener(`click`,e=>{e.stopPropagation(),u();let t=e.target,r=t.style.backgroundColor,i=this.getSelectedTds();if(t&&r&&i.length>0){if(this.tableModule.setCellAttrs(i,n,r,!0),!t.closest(`.${Z.item}`))return;this.updateUsedColor(r)}});let p=Qt(e,{...this.colorChooseTooltipOption,type:`click`,content:r,container:this.quill.container,onOpen:()=>{let e=this.tableModule.getModule(i.tableSelectionName);return this.isMenuDisplay&&e&&e.hideDisplay(),this.setActiveTooltip(p),!1},onClose:()=>{let e=this.tableModule.getModule(i.tableSelectionName);return this.isMenuDisplay&&e&&(e.updateWithSelectedTds(),e.showDisplay()),r.contains(l)&&u(),this.activeTooltip===p&&(this.activeTooltip=null),!1},onDestroy:()=>{d(),this.activeTooltip===p&&(this.activeTooltip=null)}});return p.isColorPick=!0,p}setActiveTooltip(e){this.activeTooltip&&this.activeTooltip!==e&&this.activeTooltip.hide(!0),this.activeTooltip=e}getSelectedTds(){return this.tableModule.getModule(i.tableSelectionName)?.selectedTds||[]}createTipText(e,t){let n=Qt(e,{msg:t,container:this.quill.container});n&&this.tooltipItem.push(n)}show(){this.table&&(this.menu&&this.hide(),this.menu=this.buildTools())}update(){this.table&&!this.quill.root.contains(this.table)&&this.setSelectionTable(void 0)}hide(){this.menu&&=(this.menu.remove(),null);for(let e of this.tooltipItem)e.hide(!0);this.isMenuDisplay=!1}destroy(){super.destroy(),this.quill.off(e.events.TEXT_CHANGE,this.updateWhenTextChange),this.quill.off(r.TABLE_SELECTION_DRAG_START,this.hideWhenSelectionDragStart),this.activeTooltip=null;for(let e of this.tooltipItem)e.destroy();this.tooltipItem=[],this.hide()}},Fr=class extends Pr{static moduleName=`table-menu-contextmenu`;scrollHandler=[];constructor(e,t,n){super(e,t,n),this.tableModule=e,this.quill=t,this.quill.root.addEventListener(`contextmenu`,this.listenContextmenu),this.quill.on(r.TABLE_SELECTION_CHANGE,this.tableSelectioChange),this.quill.on(r.TABLE_SELECTION_DISPLAY_CHANGE,this.tableSelectioChange)}tableSelectioChange=e=>{e.selectedTds.length<=0&&this.hide()};listenContextmenu=e=>{let t=e.composedPath();if(!t||t.length<=0)return;let n=t.find(e=>e.tagName?.toUpperCase()===`TABLE`&&e.classList.contains(`ql-table`)),r=this.tableModule.getModule(i.tableSelectionName);if(n&&r?.selectedTds?.length){e.preventDefault(),this.menu||=this.buildTools(),this.isMenuDisplay=!0,this.update({x:e.clientX,y:e.clientY});let t=()=>{this.hide(),L.call(this)};I.call(this,this.quill.root,t),document.addEventListener(`click`,t,{once:!0})}else this.hide()};buildTools(){let e=super.buildTools();e.classList.add(this.bem.is(`contextmenu`));let t=e.getElementsByClassName(jr);for(let e of Array.from(t))e.addEventListener(`click`,e=>e.stopPropagation());return this.quill.container.appendChild(e),e}createTipText(e,t){let n=document.createElement(`span`);n.textContent=t,e.appendChild(n)}show(){}update(e){super.update();let t=this.tableModule.getModule(i.tableSelectionName);if(!this.table||!this.isMenuDisplay||!this.menu){this.hide();return}if(!e||!t?.isDisplaySelection)return;let n=this.quill.container.getBoundingClientRect();Object.assign(this.menu.style,{left:`${e.x-n.x}px`,top:`${e.y-n.y}px`});let r=this.menu.getBoundingClientRect(),{left:a,top:o}=nn(r),s=r.left-a,c=r.top-o;Object.assign(this.menu.style,{left:`${e.x-n.x-s}px`,top:`${e.y-n.y-c}px`})}destroy(){this.quill.root.removeEventListener(`contextmenu`,this.listenContextmenu),super.destroy(),this.quill.off(r.TABLE_SELECTION_CHANGE,this.tableSelectioChange),this.quill.off(r.TABLE_SELECTION_DISPLAY_CHANGE,this.tableSelectioChange)}},Ir=class extends Pr{static moduleName=`table-menu-select`;constructor(e,t,n){super(e,t,n),this.tableModule=e,this.quill=t,this.quill.on(r.TABLE_SELECTION_DRAG_START,this.tableSelectionDragStart),this.quill.on(r.TABLE_SELECTION_DRAG_END,this.tableSelectionDragEnd),this.quill.on(r.TABLE_SELECTION_CHANGE,this.tableSelectioChange),this.quill.on(r.TABLE_SELECTION_DISPLAY_CHANGE,this.tableSelectionDisplayChange)}tableSelectionDragStart=()=>{this.hide()};tableSelectionDragEnd=e=>{e.selectedTds.length>0&&this.show()};tableSelectioChange=(e,t)=>{t.length<=0&&this.hide()};tableSelectionDisplayChange=e=>{e.dragging||this.update()};buildTools(){let e=super.buildTools();return this.quill.container.appendChild(e),e}show(){super.show(),this.update()}update(){if(super.update(),!this.menu&&this.table){this.show();return}let e=this.getSelectedTds();if(!this.menu||!this.table||e.length===0){(this.menu||!this.table)&&(this.isMenuDisplay=!1,this.menu?.classList.add(this.bem.is(`hidden`)),this.hide());return}this.isMenuDisplay=!0,this.menu.classList.remove(this.bem.is(`hidden`));let t=this.tableModule.getModule(i.tableSelectionName);t?.isDisplaySelection&&Xt(t.cellSelect,this.menu,{placement:`bottom`,middleware:[Jt(),qt({limiter:Yt()}),Kt(20)]}).then(({x:e,y:t})=>{this.menu&&Object.assign(this.menu.style,{left:`${e}px`,top:`${t}px`})})}destroy(){super.destroy(),this.quill.off(r.TABLE_SELECTION_DRAG_START,this.tableSelectionDragStart),this.quill.off(r.TABLE_SELECTION_DRAG_END,this.tableSelectionDragEnd),this.quill.off(r.TABLE_SELECTION_CHANGE,this.tableSelectioChange),this.quill.off(r.TABLE_SELECTION_DISPLAY_CHANGE,this.tableSelectionDisplayChange)}};const Lr=e=>!e.full&&e.align===`right`;function Rr(e,t){if(t<0||t>=e.length)return null;let n=e[0].domNode.getBoundingClientRect().left;for(let r=0;r<t;r++){let t=e[r].domNode.getBoundingClientRect();n+=t.width}let r=e[t].domNode.getBoundingClientRect().width;return{left:n,right:n+r,width:r}}function zr(e,t,n){if(e){let e=t.getCols().map(e=>e.colId),r=new Set,i=new Map(e.map(e=>[e,0])),a=new Set;for(let t of n){r.add(t.colId);let n=e.indexOf(t.colId);if(n!==-1){for(let r=n;r<n+t.colspan&&r<e.length;r++){a.add(r);let n=e[r];i.set(n,(i.get(n)||0)+t.rowspan)}a.add(Math.min(n+t.colspan,e.length))}}let o=t.getRows()?.length||0;for(let[e,t]of i.entries())t>=o&&r.delete(e);return{cellIndex:a,isSpan:r.size<=0}}else{let e=t.getRows().map(e=>e.rowId),r=new Set,i=new Map(e.map(e=>[e,0])),a=new Set;for(let t of n){r.add(t.rowId);let n=e.indexOf(t.rowId);if(n!==-1){for(let r=n;r<n+t.rowspan&&r<e.length;r++){a.add(r);let n=e[r];i.set(n,(i.get(n)||0)+t.colspan)}a.add(Math.min(n+t.rowspan,e.length))}}let o=t.getCols()?.length||0;for(let[e,t]of i.entries())t>=o&&r.delete(e);return{cellIndex:a,isSpan:r.size<=0}}}var Br=class{maxRange=1/0;minRange=-1/0;startValue=0;dragBreak=null;tableModule;isX=!1;constructor(e,t){this.tableModule=e,this.isX=t}createBreak(){this.dragBreak&&this.dragBreak.remove();let e=l(`drag`);this.dragBreak=this.tableModule.addContainer(e.be(`line`)),this.dragBreak.classList.add(e.is(this.isX?`col`:`row`))}getOffsetFromStart(e){let t=0;if(!e)return t;let{rect:n}=Y(e);return n&&(t=n[this.isX?`x`:`y`]-this.startValue),t}limitRange(e,t,n=!0){let r=0;return n&&(r=this.getOffsetFromStart(e)),Math.min(this.maxRange+r,Math.max(t,this.minRange+r))}},Vr=class extends Gn{tableBlot;dragging=!1;colIndex=-1;rowIndex=-1;dragXCommon;dragYCommon;constructor(e,t){super(e,t),this.tableModule=e,this.quill=t,this.dragXCommon=new Br(e,!0),this.dragYCommon=new Br(e,!1)}findDragColIndex(e){return-1}calculateColDragRangeByFull(){if(!this.tableBlot)return;let{rect:e}=Y(this.tableBlot);if(!e)return;let t=this.tableBlot.getCols();if(this.colIndex=this.findDragColIndex(t),this.colIndex===-1)return;let r=Rr(t,this.colIndex),i=n.colMinWidthPre/100*e.width,a=e.right;t[this.colIndex+1]&&(a=Math.max(Rr(t,this.colIndex+1).right-i,r.left+i));let o=r.left+i;this.dragXCommon.minRange=o,this.dragXCommon.maxRange=a}calculateColDragRangeByFixed(){if(!this.tableBlot)return;let e=this.tableBlot.getCols();if(this.colIndex=this.findDragColIndex(e),this.colIndex===-1)return;let t=Rr(e,this.colIndex);this.dragXCommon.minRange=Lr(this.tableBlot)?t.right-n.colMinWidthPx:t.left+n.colMinWidthPx,this.dragXCommon.maxRange=1/0}calculateColDragRange(){this.tableBlot&&(this.tableBlot.full?this.calculateColDragRangeByFull():this.calculateColDragRangeByFixed())}async updateTableCol(e){if(!this.tableBlot||this.colIndex===-1)return;let t=this.dragXCommon.limitRange(this.tableBlot,e,!0),i=this.tableBlot.getCols(),a=Rr(i,this.colIndex),o=t-a.left;Lr(this.tableBlot)&&(o=a.right-t);let s=this.tableBlot.full,c=!1,l=[];if(s){let{rect:e}=Y(this.tableBlot),t=e.width,r=o/t*100,a=i[this.colIndex].width;if(r<a){if(r=Math.max(n.colMinWidthPre,r),i[this.colIndex+1]||i[this.colIndex-1]){let e=i[this.colIndex+1]?this.colIndex+1:this.colIndex-1;l.push({index:e,width:i[e].width+a-r})}else r=100;c=!0,l.push({index:this.colIndex,width:r})}else if(i[this.colIndex+1]){let e=a+i[this.colIndex+1].width;r=Math.min(e-n.colMinWidthPre,r),c=!0,l.push({index:this.colIndex,width:r},{index:this.colIndex+1,width:e-r})}}else this.tableBlot.domNode.style.width=`${Number.parseFloat(this.tableBlot.domNode.style.width)-i[this.colIndex].domNode.getBoundingClientRect().width+o}px`,c=!0,l.push({index:this.colIndex,width:o});if(c){let e=this.tableBlot.domNode.getBoundingClientRect().width;if(s){let t=0,n=new Set(l.map(({index:e,width:n})=>(t+=n,e)));for(let[e,r]of i.entries())n.has(e)||(t+=r.width);if(t>100){if(!await de({message:this.tableModule.options.texts.perWidthInsufficient,confirm:this.tableModule.options.texts.confirmText,cancel:this.tableModule.options.texts.cancelText}))return;this.tableBlot.cancelFull(),s=!1;for(let[t,n]of l.entries()){let{width:r,index:i}=n;l[t]={index:i,width:r/100*e}}}}for(let{index:e,width:t}of l){let n=Number.parseFloat(t.toFixed(3));i[e].width=`${n}${s?`%`:`px`}`}this.quill.emitter.emit(r.AFTER_TABLE_RESIZE)}}findDragRowIndex(e){return-1}calculateRowDragRange(){if(!this.tableBlot)return;let e=this.tableBlot.getRows();if(this.rowIndex=this.findDragRowIndex(e),this.rowIndex===-1)return;let t=e[this.rowIndex].domNode.getBoundingClientRect();this.dragYCommon.minRange=t.y+n.rowMinHeightPx,this.dragYCommon.maxRange=1/0}updateTableRow(e){if(!this.tableBlot||this.rowIndex===-1)return;let t=this.dragYCommon.limitRange(this.tableBlot,e,!0),n=this.tableBlot.getRows(),i=t-n[this.rowIndex].domNode.getBoundingClientRect().top;n[this.rowIndex].setHeight(`${i}px`),this.quill.emitter.emit(r.AFTER_TABLE_RESIZE)}removeBreak(){this.dragXCommon.dragBreak&&(this.dragXCommon.dragBreak.remove(),this.dragXCommon.dragBreak=null),this.dragYCommon.dragBreak&&(this.dragYCommon.dragBreak.remove(),this.dragYCommon.dragBreak=null)}};const Q=e.import(`delta`);var Hr=class extends cn{minusY=0;minusX=0;checkMinY(e){return this.mouseY+this.minusY<e.top+this.scrollThresholdY}checkMinX(e){return this.mouseX+this.minusX<e.left+this.scrollThresholdX}},Ur=class{startPosition=[];selectedIndex=new Set;moveToIndex=-1;tableModule;tableBlot;dragCommon;options;get isDragX(){return this.options.isDragX}constructor(e,t,n,r){this.tableModule=e,this.tableBlot=t,this.dragCommon=n,this.options=r}onStart(e,t,n){let r=this.tableModule.getModule(i.tableSelectionName);if(!r?.boundary||!this.tableBlot)return!1;let{isSpan:a,cellIndex:o}=zr(this.isDragX,this.tableBlot,r.selectedTds);if(!a)return!1;let{rect:s}=Y(this.tableBlot);if(!s)return!1;t.preventDefault(),this.dragCommon.startValue=this.isDragX?s.x:s.y,this.selectedIndex=o,n?.(this),this.recalculateStartPosition()}onMove(e,t,n){this.moveToIndex=this.findTheMovedToIndex(t),n?.(this)}onEnd(e,t,n){n?.(this),this.moveToIndex=-1,this.selectedIndex=new Set}recalculateStartPosition(){if(this.isDragX){if(this.startPosition=[],!this.tableBlot)return;let e=this.tableBlot.getCols(),t=e[0].domNode.getBoundingClientRect().left;for(let n=0;n<e.length;n++){let r=e[n].domNode.getBoundingClientRect();this.startPosition.push({size:r.width,position:t,index:n}),t+=r.width}}else{if(this.startPosition=[],!this.tableBlot)return;this.startPosition=this.tableBlot.getRows().map((e,t)=>{let n=e.domNode.getBoundingClientRect();return{size:n.height,position:n.top,index:t}})}}findTheMovedToIndex(e){let t=this.dragCommon.getOffsetFromStart(this.tableBlot),n=this.startPosition.find(({position:n,size:r})=>(this.isDragX?e.clientX:e.clientY)<n+r/2+t)?.index;return(ae(n)||n<0)&&(n=this.startPosition.length),n=Math.max(0,Math.min(n,this.startPosition.length)),this.selectedIndex.has(n)||this.options.allowMoveToIndex&&!this.options.allowMoveToIndex(n)?-1:n}updateTableStructure(e,t){let n=new Q;if(!this.tableBlot||this.moveToIndex<0)return n;let r=this.tableModule.getModule(i.tableSelectionName);if(!r)return n;if(this.isDragX){let i=this.tableBlot.getCols(),a=i.length-1,o=this.moveToIndex>a,s=new Set(r.selectedTds.map(e=>e.colId)),c=i.filter(e=>s.has(e.colId)).map(t=>{let n=t.length(),r=t.offset(t.scroll);return{offset:r,delta:e.slice(r,r+n),length:n}}),l=i[Math.min(a,this.moveToIndex)],u=l.offset(l.scroll)+(o?l.length():0),d=c.reduce((e,t)=>(e=e.concat(t.delta),e),new Q().retain(u)),f=c.reduce((e,t,n)=>{let r=c[n-1],i=r?r.offset+r.length:0;return e=e.retain(t.offset-i).delete(t.length),e},new Q),p=t?f.compose(d):d.compose(f),m=r.selectedTds.map(t=>{let n=t.length(),r=t.offset(t.scroll);return{offset:r,delta:e.slice(r,r+n),length:n,rowId:t.rowId}}),{delta:h,insertDeltaInfo:g}=m.reduce(({delta:e,insertDeltaInfo:n},r,i)=>{let a=m[i-1],o=a?a.offset+a.length:0,s=0;return i!==0&&!t&&(s=a.rowId===r.rowId?0:n[a.rowId]?.length()),e=e.retain(r.offset-o+s).delete(r.length),n[r.rowId]||(n[r.rowId]=new Q),n[r.rowId]=n[r.rowId].concat(r.delta),{delta:e,insertDeltaInfo:n}},{delta:new Q,insertDeltaInfo:{}}),_=this.tableBlot.getRows(),{delta:v}=_.reduce(({delta:e,offset:n},r,i)=>{let s=r.getCellByColumIndex(Math.min(a,this.moveToIndex))[0];if(!s)return{delta:e,offset:n};let c=s.offset(s.scroll)+(o?s.length():0),l=c-n;if(i!==0&&t){let e=g[_[i-1].rowId];e&&(l-=e.length())}return e.retain(l),g[s.rowId]&&(e=e.concat(g[s.rowId])),{delta:e,offset:c}},{delta:new Q,offset:0}),y=t?h.compose(v):v.compose(h);n=p.compose(y)}else{let i=this.tableBlot.getRows(),a=i.length-1,o=this.moveToIndex>a,s=i[Math.min(a,this.moveToIndex)],c=Array.from(r.selectedTds.reduce((e,t)=>e.add(t.getTableRow()),new Set)).filter(Boolean),l=0,{delta:u,start:d,end:f}=c.reduce(({delta:e,start:t,end:n},r)=>{let i=r.offset(r.scroll),a=r.length();return e.retain(i-l).delete(a),l=i+a,{delta:e,start:Math.min(t,i),end:Math.max(n,i+a)}},{delta:new Q,start:1/0,end:0}),p=s.offset(s.scroll)+(o?s.length():0),m=new Q().retain(p).concat(e.slice(d,f));n=t?u.compose(m):m.compose(u)}return n}},Wr=class extends Vr{static moduleName=`table-resize-box`;options;root;tableWrapperBlot;resizeObserver;rowHeadWrapper=null;colHeadWrapper=null;corner=null;scrollHandler=[];lastHeaderSelect=null;bem=l(`resize-box`);draggingColIndex=-1;draggingRowIndex=-1;stopColDrag=[];stopRowDrag=[];dragWrapper=null;dragPlaceholder=null;markIndicator=null;dragTip=null;stopColMoveDrag=[];stopRowMoveDrag=[];autoScroller=null;updateContentDraggingPosition;cellSpanIndex=new Set;dragPlaceholderStartPosition={x:0,y:0};constructor(t,n,i){super(t,n),this.tableModule=t,this.quill=n,this.options=this.resolveOptions(i),this.updateContentDraggingPosition=()=>this.updateContentDraggerPosition(null),this.root=this.tableModule.addContainer(this.bem.b()),this.quill.on(e.events.EDITOR_CHANGE,this.updateWhenTextChange),this.quill.on(r.TABLE_SELECTION_CHANGE,this.updateWrapperHead)}resolveOptions(e){return Object.assign({size:16,draggable:!0},e)}updateWrapperHead=()=>{if(!this.options.draggable)return;let e=this.tableModule.getModule(i.tableSelectionName);if(!e||!this.tableBlot)return;let{isSpan:t,cellIndex:n}=zr(!0,this.tableBlot,e.selectedTds),{isSpan:r,cellIndex:a}=zr(!1,this.tableBlot,e.selectedTds);if(t){let e=Array.from(this.root.getElementsByClassName(this.bem.be(`col-header`)));for(let t of e)t.classList.remove(this.bem.is(`selected`));if(!r)for(let t of Array.from(n).slice(0,-1))e[t].classList.add(this.bem.is(`selected`))}if(r){let e=Array.from(this.root.getElementsByClassName(this.bem.be(`row-header`))),n=[];for(let t of e)t.classList.remove(this.bem.is(`selected`)),n[Number(t.dataset.index)]=t;if(!t)for(let e of Array.from(a).slice(0,-1))n[e]&&n[e].classList.add(this.bem.is(`selected`))}};updateWhenTextChange=t=>{t===e.events.TEXT_CHANGE&&(this.table&&!this.quill.root.contains(this.table)?this.setSelectionTable(void 0):this.update())};setSelectionTable(t){if(this.table!==t){if(this.hide(),this.table=t,this.table){let t=e.find(this.table);t&&(this.tableBlot=t,this.tableWrapperBlot=this.tableBlot.parent),this.show()}this.update()}}handleResizerHeaderClick(e,t,n){if(!this.table)return;let{clientX:r,clientY:a}=n,o=this.table.getBoundingClientRect();n.shiftKey||(this.lastHeaderSelect=null);let s=[{x:e?o.left:r,y:e?a:o.top},{x:e?o.right:r,y:e?a:o.bottom}];if(this.lastHeaderSelect){let t,n;if(this.lastHeaderSelect.isX){let e=Array.from(this.root.getElementsByClassName(this.bem.be(`row-header`)))[this.lastHeaderSelect.index].getBoundingClientRect();t=Math.min(e.left,o.left),n=e.top+e.height/2}else{let e=Array.from(this.root.getElementsByClassName(this.bem.be(`col-header`)))[this.lastHeaderSelect.index].getBoundingClientRect();t=e.left+e.width/2,n=Math.min(e.top,o.top)}this.lastHeaderSelect.isX===e?e?(s[0].y=Math.min(s[0].y,n),s[1].y=Math.max(s[1].y,n)):(s[0].x=Math.min(s[0].x,t),s[1].x=Math.max(s[1].x,t)):(s[1]={x:Math.max(s[0].x,t),y:Math.max(s[0].y,n)},s[0]={x:Math.min(s[0].x,t),y:Math.min(s[0].y,n)})}else this.lastHeaderSelect={isX:e,index:t};let c=this.tableModule.getModule(i.tableSelectionName);c&&(c.table=this.table,c.setSelectedTds(c.computeSelectedTds(...s)),c.show())}findDragColIndex(){return this.draggingColIndex}findDragRowIndex(){return this.draggingRowIndex}updateContentDraggerPosition(e){if(!e||!this.dragWrapper||!this.markIndicator||!this.tableBlot||!this.tableWrapperBlot)return;let{rect:t}=Y(this.tableBlot);if(!t||e.moveToIndex<0)return;let n=this.tableWrapperBlot.domNode.getBoundingClientRect(),r=this.quill.root.getBoundingClientRect();Object.assign(this.dragWrapper.style,{top:`${Math.max(t.y,n.y)-r.y}px`,left:`${Math.max(t.x,n.x)-r.x}px`});let{position:i}=e.startPosition[e.moveToIndex]||{},a=this.dragXCommon.getOffsetFromStart(this.tableBlot),o=this.dragYCommon.getOffsetFromStart(this.tableBlot),s=e.isDragX?{top:`${Math.max(t.y,n.y)-r.y}px`,left:`${i-r.left+a}px`}:{top:`${i-r.top+o}px`,left:`${Math.max(t.x,n.x)-r.x}px`};Object.assign(this.markIndicator.style,s)}createContentDragger(e,t,n){if(!this.tableBlot)return;let r=this.tableModule.getModule(i.tableSelectionName);if(!r||!this.tableWrapperBlot)return;r.updateWithSelectedTds();let a=r.boundary.width,o=r.boundary.height,s=this.quill.root.getBoundingClientRect(),c=this.tableWrapperBlot.domNode.getBoundingClientRect(),u=l(`drag`);this.dragWrapper=this.tableModule.addContainer(u.b());let d=c.x-s.x,f=c.y-s.y;Object.assign(this.dragWrapper.style,{left:`${d}px`,top:`${f}px`,width:`${c.width}px`,height:`${c.height}px`}),this.dragPlaceholder=document.createElement(`div`),this.dragPlaceholder.classList.add(u.be(`placeholder`),u.is(`hidden`)),this.dragWrapper.appendChild(this.dragPlaceholder),this.dragPlaceholderStartPosition={x:t?r.boundary.x-d:0,y:t?0:r.boundary.y-f},Object.assign(this.dragPlaceholder.style,{left:`${this.dragPlaceholderStartPosition.x}px`,top:`${this.dragPlaceholderStartPosition.y}px`,width:`${a}px`,height:`${o}px`}),this.markIndicator=this.tableModule.addContainer(u.be(`indicator`));let p=t?{top:`${f}px`,height:`${Math.min(r.boundary.height,c.height)}px`}:{left:`${d}px`,width:`${Math.min(r.boundary.width,c.width)}px`};Object.assign(this.markIndicator.style,p),this.updateContentDraggingPosition=()=>this.updateContentDraggerPosition(n),I.call(this,this.quill.root,this.updateContentDraggingPosition),I.call(this,this.tableWrapperBlot.domNode,this.updateContentDraggingPosition),this.dragTip=this.tableModule.addContainer(u.be(`tip`));let m=document.createElement(`div`);m.classList.add(u.be(`tip-content`)),this.dragTip.appendChild(m),t?(this.dragXCommon.minRange=0,this.dragXCommon.maxRange=c.width-a):(this.dragYCommon.minRange=0,this.dragYCommon.maxRange=c.height-o)}bindColEvents(){if(!this.tableWrapperBlot)return;let e=Array.from(this.root.getElementsByClassName(this.bem.be(`col-header`))),t=Array.from(this.root.getElementsByClassName(this.bem.be(`col-separator`)));if(I.call(this,this.tableWrapperBlot.domNode,()=>{this.colHeadWrapper.scrollLeft=this.tableWrapperBlot.domNode.scrollLeft}),this.stopColMoveDrag.length>0){for(let e of this.stopColMoveDrag)e();this.stopColMoveDrag=[]}let n=new Ur(this.tableModule,this.tableBlot,this.dragXCommon,{isDragX:!0,allowMoveToIndex:e=>this.allowMoveToIndex(e)});for(let[t,r]of e.entries())if(r.addEventListener(`click`,this.handleResizerHeaderClick.bind(this,!1,t)),this.options.draggable){let{stop:e}=$t(r,this.dragHeadOptions(!0,{index:t,dragHelper:n}));this.stopColMoveDrag.push(e)}if(this.stopColDrag.length>0){for(let e of this.stopColDrag)e();this.stopColDrag=[]}for(let[e,n]of t.entries()){let{stop:t}=$t(n,{axis:`x`,onStart:(t,n)=>{if(this.dragging=!0,this.draggingColIndex=e,this.calculateColDragRange(),this.dragXCommon.createBreak(),!this.tableBlot)return;let r=this.tableBlot.domNode.parentElement.getBoundingClientRect(),{rect:i}=Y(this.tableBlot);if(!i)return;this.dragXCommon.startValue=i.x;let a=this.quill.root.getBoundingClientRect();Object.assign(this.dragXCommon.dragBreak.style,{top:`${Math.max(r.y,i.y)-a.y}px`,left:`${n.clientX-a.x}px`,height:`${Math.min(r.height,i.height)}px`})},onMove:({position:e})=>{if(!this.dragXCommon.dragBreak)return;let t=this.dragXCommon.limitRange(this.tableBlot,e.x,!0),n=this.quill.root.getBoundingClientRect();this.dragXCommon.dragBreak.style.left=`${t-n.x}px`},onEnd:({position:e})=>{this.dragging=!1,this.updateTableCol(e.x),this.removeBreak()}});this.stopColDrag.push(t),n.addEventListener(`dragstart`,e=>e.preventDefault())}}bindRowEvents(){let e=Array.from(this.root.getElementsByClassName(this.bem.be(`row-header`))),t=Array.from(this.root.getElementsByClassName(this.bem.be(`row-separator`)));if(I.call(this,this.tableWrapperBlot.domNode,()=>{this.rowHeadWrapper.scrollTop=this.tableWrapperBlot.domNode.scrollTop}),this.stopRowMoveDrag.length>0){for(let e of this.stopRowMoveDrag)e();this.stopRowMoveDrag=[]}let n=new Ur(this.tableModule,this.tableBlot,this.dragYCommon,{isDragX:!1,allowMoveToIndex:e=>this.allowMoveToIndex(e)});for(let[t,r]of e.entries()){let e=Number(r.dataset.index||t);if(r.addEventListener(`click`,this.handleResizerHeaderClick.bind(this,!0,t)),this.options.draggable){let{stop:t}=$t(r,this.dragHeadOptions(!1,{index:e,dragHelper:n}));this.stopRowMoveDrag.push(t)}}if(this.stopRowDrag.length>0){for(let e of this.stopRowDrag)e();this.stopRowDrag=[]}for(let[e,n]of t.entries()){let{stop:t}=$t(n,{axis:`y`,onStart:(t,n)=>{if(this.dragging=!0,this.draggingRowIndex=e,this.calculateRowDragRange(),this.dragYCommon.createBreak(),!this.tableBlot)return;let r=this.tableBlot.domNode.parentElement.getBoundingClientRect(),{rect:i}=Y(this.tableBlot);if(!i)return;this.dragYCommon.startValue=i.y;let a=this.quill.root.getBoundingClientRect();Object.assign(this.dragYCommon.dragBreak.style,{top:`${n.clientY-a.y}px`,left:`${Math.max(r.x,i.x)-a.x}px`,width:`${Math.min(r.width,i.width)}px`})},onMove:({position:e})=>{if(!this.dragYCommon.dragBreak||!this.table)return;let t=this.dragYCommon.limitRange(this.tableBlot,e.y,!0),n=this.quill.root.getBoundingClientRect();this.dragYCommon.dragBreak.style.top=`${t-n.y}px`},onEnd:({position:e})=>{this.dragging=!1,this.updateTableRow(e.y),this.removeBreak()}});this.stopRowDrag.push(t),n.addEventListener(`dragstart`,e=>e.preventDefault())}}allowMoveToIndex(e){return!this.cellSpanIndex.has(e)}recordCellSpan(e){let t=new Set;if(!this.tableBlot)return t;let n=this.tableBlot.descendants(H),r=e?this.tableBlot.getColIds():this.tableBlot.getRowIds(),i=e?`colspan`:`rowspan`;for(let a of n){if(a[i]<=1)continue;let n=r.indexOf(e?a.colId:a.rowId);if(n!==-1)for(let e=n+1;e<n+a[i]&&e<r.length;e++)t.add(e)}return t}dragHeadOptions(e,t){let{dragHelper:n,index:r}=t;return{axis:e?`x`:`y`,onStart:(t,i)=>{let a=!1;return n.onStart(t,i,()=>{if(!this.tableBlot)return;let t=(e?this.tableBlot.getCols():this.tableBlot.getRows()).length;if(n.selectedIndex.size>t){a=!1;return}let o=new Set(Array.from(n.selectedIndex).slice(0,-1));if(a=o.has(r),!o.has(r)){a=!1;return}this.dragging=!0,e?this.draggingColIndex=r:this.draggingRowIndex=r,this.createContentDragger(i,e,n),this.cellSpanIndex=this.recordCellSpan(e),this.tableWrapperBlot&&(this.autoScroller=new Hr(50,40),this.autoScroller.minusY=this.options.size,this.autoScroller.minusX=this.options.size,this.autoScroller.updateMousePosition(i.clientX,i.clientY),this.autoScroller.start(this.tableWrapperBlot.domNode))}),a},onMove:(t,r)=>{n.onMove(t,r,n=>{let{movePosition:i}=t;if(this.autoScroller?.updateMousePosition(r.clientX,r.clientY),!this.dragPlaceholder||!this.markIndicator||!this.dragTip||!this.tableWrapperBlot)return;this.dragPlaceholder.classList.remove(this.bem.is(`hidden`));let a=n.dragCommon.limitRange(this.tableBlot,this.dragPlaceholderStartPosition[e?`x`:`y`]+i[e?`x`:`y`],!1);if(this.dragPlaceholder.style[e?`left`:`top`]=`${a}px`,Object.assign(this.dragTip.style,{left:`${r.clientX-10}px`,top:`${r.clientY-10}px`}),n.moveToIndex<0){Object.assign(this.markIndicator.style,{opacity:`0`});return}let o=this.quill.root.getBoundingClientRect(),s=n.moveToIndex>=n.startPosition.length,c=n.startPosition[s?n.moveToIndex-1:n.moveToIndex],l=c.position+(s?c.size:0),u=n.dragCommon.getOffsetFromStart(this.tableBlot);Object.assign(this.markIndicator.style,{opacity:`1`,[e?`left`:`top`]:`${l-(e?o.left:o.top)+u}px`})})},onEnd:(t,r)=>{n.onEnd(t,r,t=>{let n=t.updateTableStructure(this.quill.getContents(),(e?this.draggingColIndex:this.draggingRowIndex)>t.moveToIndex);this.quill.updateContents(n),this.dragging=!1,this.cellSpanIndex=new Set,this.autoScroller?.stop(),an.call(this,this.quill.root,this.updateContentDraggingPosition),an.call(this,this.tableWrapperBlot.domNode,this.updateContentDraggingPosition),this.dragWrapper&&=(this.dragWrapper.remove(),null),this.markIndicator&&=(this.markIndicator.remove(),null),this.dragTip&&=(this.dragTip.remove(),null)})}}}update(){if(!this.tableBlot||!this.tableWrapperBlot)return;let{rect:e}=Y(this.tableBlot);if(!e)return;this.root.innerHTML=``;let t=this.tableBlot.getCols(),n=this.tableBlot.getRows(),r=this.tableWrapperBlot.domNode.getBoundingClientRect(),a=this.quill.root.getBoundingClientRect();if(Object.assign(this.root.style,{top:`${Math.max(e.y,r.y)-a.y}px`,left:`${Math.max(e.x,r.x)-a.x}px`}),t.length>0&&n.length>0&&(this.corner=document.createElement(`div`),this.corner.classList.add(this.bem.be(`corner`)),Object.assign(this.corner.style,{width:`${this.options.size}px`,height:`${this.options.size}px`}),this.corner.addEventListener(`click`,()=>{let e=this.tableModule.getModule(i.tableSelectionName);e&&this.tableBlot&&(e.setSelectedTds(this.tableBlot.descendants(H)),e.show(),e.updateWithSelectedTds())}),this.root.appendChild(this.corner)),t.length>0){let n=``;for(let r of t){let t=r.domNode.getBoundingClientRect().width;t===0&&(t=Number.parseInt(r.domNode.getAttribute(`width`),10)),n+=`<div class="${this.bem.be(`col-header`)}" style="width: ${t}px">
|
|
130
130
|
<div class="${this.bem.be(`col-separator`)}" style="height: ${e.height+this.options.size-3}px"></div>
|
|
131
131
|
</div>`}let i=document.createElement(`div`);i.classList.add(this.bem.be(`col`));let a=document.createElement(`div`);a.classList.add(this.bem.be(`col-wrapper`)),Object.assign(i.style,{transform:`translateY(-${this.options.size}px)`,maxWidth:`${r.width}px`,height:`${this.options.size}px`}),Object.assign(a.style,{width:`${e.width}px`}),a.innerHTML=n,i.appendChild(a),this.root.appendChild(i),i.scrollLeft=this.tableWrapperBlot.domNode.scrollLeft,this.colHeadWrapper=i,this.bindColEvents()}if(n.length>0){let t=``;for(let r=0;r<n.length;r++){let i=r,a=n[r],o=a.domNode.getBoundingClientRect().height;if(a.children.length===1&&(a.children.head?.emptyRow.length||0)>0){let e=a.children.head.emptyRow.length;for(let t=r+1;t<n.length&&t<=r+e;t++){let e=n[t];o+=e.domNode.getBoundingClientRect().height}r+=e}t+=`<div class="${this.bem.be(`row-header`)}" data-index="${i}" style="height: ${o}px">
|
|
132
132
|
<div class="${this.bem.be(`row-separator`)}" style="width: ${e.width+this.options.size-3}px"></div>
|
|
133
|
-
</div>`}let i=document.createElement(`div`);i.classList.add(this.bem.be(`row`));let a=document.createElement(`div`);a.classList.add(this.bem.be(`row-wrapper`)),Object.assign(i.style,{transform:`translateX(-${this.options.size}px)`,width:`${this.options.size}px`,maxHeight:`${r.height}px`}),Object.assign(a.style,{height:`${e.height}px`}),a.innerHTML=t,i.appendChild(a),this.root.appendChild(i),i.scrollTop=this.tableWrapperBlot.domNode.scrollTop,this.rowHeadWrapper=i,this.bindRowEvents()}let[o]=p(this.tableBlot,Bn),s=!o||o?.side!==`top`;s?this.root.classList.remove(this.bem.is(`caption-bottom`)):this.root.classList.add(this.bem.is(`caption-bottom`));let c=-1*this.options.size,l=-1*this.options.size;Mr(this.tableBlot)?(this.root.classList.add(this.bem.is(`align-right`)),c=Math.min(r.width,e.width),l=Math.min(r.width,e.width)):this.root.classList.remove(this.bem.is(`align-right`)),this.corner&&Object.assign(this.corner.style,{transform:`translateY(${-1*this.options.size}px) translateX(${c}px)`,top:`${s?0:e.height+this.options.size}px`}),this.rowHeadWrapper&&Object.assign(this.rowHeadWrapper.style,{transform:`translateX(${l}px)`,maxHeight:`${r.height}px`}),this.colHeadWrapper&&Object.assign(this.colHeadWrapper.style,{top:`${s?0:e.height+this.options.size}px`,maxWidth:`${r.width}px`})}show(){!this.table||!this.tableBlot||(this.root.classList.remove(this.bem.is(`hidden`)),this.resizeObserver=rn(()=>this.update(),{ignoreFirstBind:!0}),this.resizeObserver.observe(this.table),this.update(),I.call(this,this.quill.root,()=>{this.update()}))}hide(){this.root.classList.add(this.bem.is(`hidden`)),this.resizeObserver&&=(this.resizeObserver.disconnect(),void 0)}destroy(){super.destroy(),this.hide(),L.call(this),this.quill.off(e.events.EDITOR_CHANGE,this.updateWhenTextChange);for(let[e,t]of this.scrollHandler)e.removeEventListener(`scroll`,t);this.root.remove()}},Br=class extends Ir{static moduleName=`table-resize-line`;colResizer;rowResizer;currentTableCell;tableCellBlot;bem=l(`resize-line`);stopColDrag;stopRowDrag;scrollHandler=[];constructor(t,n){super(t,n),this.tableModule=t,this.quill=n,this.colResizer=this.tableModule.addContainer(this.bem.be(`col`)),this.rowResizer=this.tableModule.addContainer(this.bem.be(`row`)),this.quill.on(e.events.EDITOR_CHANGE,this.updateWhenTextChange)}setSelectionTable(e){this.table!==e&&(this.hide(),this.table=e,this.table&&this.show())}updateWhenTextChange=t=>{t===e.events.TEXT_CHANGE&&(this.table&&!this.quill.root.contains(this.table)?this.setSelectionTable(void 0):this.update())};findTableCell(e){for(let t of e.composedPath()){if(t instanceof HTMLElement&&[`TD`,`TH`].includes(t.tagName))return t;if(t===document.body)return null}return null}pointermoveHandler=n=>{if(this.dragging||this.tableModule.getModule(i.tableSelectionName)?.dragging)return;let r=this.findTableCell(n);if(!r)return this.hide();let a=e.find(r);a&&this.currentTableCell!==r&&(this.show(),this.currentTableCell=r,this.tableCellBlot=a,this.tableBlot=u(a,t.tableMain),this.tableBlot.getCols().length>0&&this.updateColResizer(),this.updateRowResizer(),I.call(this,this.quill.root,()=>{this.dragging||this.hideResizer()}))};findDragColIndex(e){return this.tableCellBlot?e.findIndex(e=>e.colId===this.tableCellBlot.colId):-1}updateColResizer(){if(!this.tableBlot||!this.tableCellBlot||!this.colResizer)return;this.colResizer.remove();let{rect:e}=Y(this.tableBlot);if(!e)return;this.colResizer=this.tableModule.addContainer(this.bem.be(`col`));let t=this.tableCellBlot.domNode.getBoundingClientRect(),n=this.quill.root.getBoundingClientRect(),r=t.right-n.x;Mr(this.tableBlot)&&(r=t.left-n.x),Object.assign(this.colResizer.style,{top:`${e.y-n.y}px`,left:`${r}px`,height:`${e.height}px`});let{stop:i}=$t(this.colResizer,{axis:`x`,onStart:(e,t)=>{if(this.dragging=!0,this.calculateColDragRange(),this.dragXCommon.createBreak(),!this.tableBlot)return;let n=this.tableBlot.domNode.parentElement.getBoundingClientRect(),{rect:r}=Y(this.tableBlot);if(!r)return;this.dragXCommon.startValue=r.x;let i=this.quill.root.getBoundingClientRect();Object.assign(this.dragXCommon.dragBreak.style,{top:`${Math.max(n.y,r.y)-i.y}px`,left:`${t.clientX-i.x}px`,height:`${Math.min(n.height,r.height)}px`})},onMove:({position:e})=>{if(!this.dragXCommon.dragBreak)return;let t=this.dragXCommon.limitRange(this.tableBlot,e.x,!0),n=this.quill.root.getBoundingClientRect();this.dragXCommon.dragBreak.style.left=`${t-n.x}px`},onEnd:({position:e})=>{if(this.dragging=!1,this.colResizer){let t=this.dragXCommon.limitRange(this.tableBlot,e.x,!0),n=this.quill.root.getBoundingClientRect();this.colResizer.style.left=`${t-n.x}px`}this.updateTableCol(e.x),this.removeBreak()}});this.stopColDrag&&this.stopColDrag(),this.stopColDrag=i,this.colResizer.addEventListener(`dragstart`,e=>e.preventDefault())}findDragRowIndex(e){if(!this.tableCellBlot)return-1;let t=this.tableCellBlot.parent;return t instanceof U?e.indexOf(t):-1}updateRowResizer(){if(!this.tableBlot||!this.tableCellBlot||!this.rowResizer)return;let e=this.tableCellBlot;this.rowResizer.remove();let{rect:t}=Y(this.tableBlot);if(!t)return;this.rowResizer=this.tableModule.addContainer(this.bem.be(`row`));let n=e.domNode.getBoundingClientRect(),r=this.quill.root.getBoundingClientRect();Object.assign(this.rowResizer.style,{top:`${n.bottom-r.y}px`,left:`${t.x-r.x}px`,width:`${t.width}px`});let{stop:i}=$t(this.rowResizer,{axis:`y`,onStart:(e,t)=>{if(this.dragging=!0,this.calculateRowDragRange(),this.dragYCommon.createBreak(),!this.tableBlot)return;let n=this.tableBlot.domNode.parentElement.getBoundingClientRect(),{rect:r}=Y(this.tableBlot);if(!r)return;this.dragYCommon.startValue=r.y;let i=this.quill.root.getBoundingClientRect();Object.assign(this.dragYCommon.dragBreak.style,{top:`${t.clientY-i.y}px`,left:`${Math.max(n.x,r.x)-i.x}px`,width:`${Math.min(n.width,r.width)}px`})},onMove:({position:e})=>{if(!this.dragYCommon.dragBreak||!this.table)return;let t=this.dragYCommon.limitRange(this.tableBlot,e.y,!0),n=this.quill.root.getBoundingClientRect();this.dragYCommon.dragBreak.style.top=`${t-n.y}px`},onEnd:({position:e})=>{if(this.dragging=!1,this.rowResizer){let t=this.dragYCommon.limitRange(this.tableBlot,e.y,!0),n=this.quill.root.getBoundingClientRect();this.rowResizer.style.left=`${t-n.y}px`}this.updateTableRow(e.y),this.removeBreak()}});this.stopRowDrag&&this.stopRowDrag(),this.stopRowDrag=i,this.rowResizer.addEventListener(`dragstart`,e=>e.preventDefault())}show(){!this.table||!this.rowResizer||!this.colResizer||(this.rowResizer.classList.remove(this.bem.is(`hidden`)),this.colResizer.classList.remove(this.bem.is(`hidden`)),this.table.addEventListener(`pointermove`,this.pointermoveHandler))}hideResizer(){!this.rowResizer||!this.colResizer||(this.rowResizer.classList.add(this.bem.is(`hidden`)),this.colResizer.classList.add(this.bem.is(`hidden`)))}hide(){this.currentTableCell=void 0,L.call(this),this.hideResizer(),this.table&&this.table.removeEventListener(`pointermove`,this.pointermoveHandler)}destroy(){super.destroy(),this.colResizer&&=(this.colResizer.remove(),void 0),this.rowResizer&&=(this.rowResizer.remove(),void 0),this.quill.off(e.events.EDITOR_CHANGE,this.updateWhenTextChange)}},Vr=class extends Gn{static moduleName=`table-resize-scale`;scrollHandler=[];tableMainBlot;tableWrapperBlot;bem=l(`scale`);options;root;block;resizeobserver=new ResizeObserver(()=>this.update());constructor(t,n,r){super(t,n),this.tableModule=t,this.quill=n,this.options=this.resolveOptions(r),this.quill.on(e.events.EDITOR_CHANGE,this.updateWhenTextChange)}updateWhenTextChange=t=>{t===e.events.TEXT_CHANGE&&(this.table&&!this.quill.root.contains(this.table)?this.setSelectionTable(void 0):this.update())};resolveOptions(e){return Object.assign({blockSize:12,offset:6},e)}buildResizer(){if(!this.tableMainBlot||!this.tableWrapperBlot)return;this.root=this.tableModule.addContainer(this.bem.b()),this.block=document.createElement(`div`),this.block.classList.add(this.bem.be(`block`)),Object.assign(this.block.style,{width:`${this.options.blockSize}px`,height:`${this.options.blockSize}px`}),this.root.appendChild(this.block);let e=[],t=[];$t(this.block,{onStart:()=>{this.tableMainBlot&&(e=this.tableMainBlot.getCols().map(e=>({blot:e,width:Math.floor(e.width)})),t=this.tableMainBlot.getRows().map(e=>({blot:e,height:Math.floor(e.domNode.getBoundingClientRect().height)})))},onMove:({movePosition:r})=>{if(!this.tableMainBlot)return;let i=Mr(this.tableMainBlot)?-1:1,a=r.x*i,o=r.y,s=Math.floor(a/e.length),c=Math.floor(o/t.length);for(let{blot:t,width:r}of e)t.width=Math.max(r+s,n.colMinWidthPx);for(let{blot:e,height:r}of t)e.setHeight(`${Math.max(r+c,n.rowMinHeightPx)}px`)},onEnd:()=>{e=[],t=[]}}),this.block.addEventListener(`dragstart`,e=>e.preventDefault())}update(){if(!this.block||!this.root||!this.tableMainBlot||!this.tableWrapperBlot)return;if(this.tableMainBlot.full){this.hide();return}let{rect:e}=Y(this.tableMainBlot);if(!e)return;let t=this.tableWrapperBlot.domNode.getBoundingClientRect(),n=this.quill.root.getBoundingClientRect(),{scrollTop:r,scrollLeft:i}=this.tableWrapperBlot.domNode,a=this.options.blockSize*2+this.options.offset,o=Math.min(e.width,t.width)+a,s=Math.min(e.height,t.height)+a;Object.assign(this.root.style,{width:`${o}px`,height:`${s}px`,left:`${Math.max(e.x,t.x)-n.x-this.options.blockSize}px`,top:`${Math.max(e.y,t.y)-n.y-this.options.blockSize}px`});let c={left:`${e.width+a-i}px`,top:`${s-r}px`};Mr(this.tableMainBlot)?(this.root.classList.add(this.bem.is(`align-right`)),c.left=`${this.options.blockSize+-1*i}px`):this.root.classList.remove(this.bem.is(`align-right`)),Object.assign(this.block.style,c)}show(){this.table&&(this.tableMainBlot=e.find(this.table),this.tableMainBlot&&!this.tableMainBlot.full&&(this.tableWrapperBlot=this.tableMainBlot.parent,this.resizeobserver.observe(this.tableMainBlot.domNode),I.call(this,this.quill.root,()=>this.update()),I.call(this,this.tableWrapperBlot.domNode,()=>this.update())),this.buildResizer())}hide(){this.tableMainBlot=void 0,this.tableWrapperBlot=void 0,this.root&&(this.root.remove(),this.root=void 0,this.block=void 0),L.call(this)}destroy(){super.destroy(),this.hide(),this.quill.off(e.events.EDITOR_CHANGE,this.updateWhenTextChange),this.resizeobserver.disconnect()}};const Hr={size:`height`,offset:`offsetHeight`,scrollDirection:`scrollTop`,scrollSize:`scrollHeight`,axis:`y`,direction:`top`,client:`clientY`},Ur={size:`width`,offset:`offsetWidth`,scrollDirection:`scrollLeft`,scrollSize:`scrollWidth`,axis:`x`,direction:`left`,client:`clientX`};var Wr=class{minSize=20;gap=4;move=0;cursorDown=!1;cursorLeave=!1;ratioY=1;ratioX=1;sizeWidth=``;sizeHeight=``;size=``;bem=l(`scrollbar`);tableMainBlot;ob;container;scrollbar;thumb=document.createElement(`div`);scrollHandler=[];propertyMap;thumbState={x:0,y:0};get isVertical(){return this.options.isVertical}constructor(t,n,r){this.quill=t,this.table=n,this.options=r,this.tableMainBlot=e.find(this.table),this.container=n.parentElement,this.propertyMap=this.isVertical?Hr:Ur,this.calculateSize(),this.ob=new ResizeObserver(()=>this.update()),this.ob.observe(n),this.scrollbar=this.createScrollbar(),this.setScrollbarPosition(),I.call(this,this.quill.root,()=>this.setScrollbarPosition()),this.showScrollbar()}update(){this.calculateSize(),this.setScrollbarPosition()}setScrollbarPosition(){let{rect:e,head:t,body:n,foot:r}=Y(this.tableMainBlot),i=t||n||r;if(!i||!e)return;let{scrollLeft:a,scrollTop:o,offsetLeft:s,offsetTop:c}=this.quill.root,{offsetLeft:l,offsetTop:u}=this.container,{offsetLeft:d,offsetTop:f}=i.domNode,{width:p,height:m}=this.container.getBoundingClientRect(),h=l+d-s,g=u+f-c;this.isVertical?h+=Math.min(p,e.width):g+=Math.min(m,e.height),this.tableMainBlot&&this.tableMainBlot.align!==`left`&&(h+=this.table.offsetLeft-l),Object.assign(this.scrollbar.style,{[this.propertyMap.size]:`${this.isVertical?Math.min(m,e.height):p}px`,transform:`translate(${h-a}px, ${g-o}px)`}),this.containerScrollHandler(this.container)}calculateSize(){let e=this.container.offsetHeight-this.gap,t=this.container.offsetWidth-this.gap,n=e**2/this.container.scrollHeight,r=t**2/this.container.scrollWidth,i=Math.max(n,this.minSize),a=Math.max(r,this.minSize);this.ratioY=n/(e-n)/(i/(e-i)),this.ratioX=r/(t-r)/(a/(t-a)),this.sizeWidth=a+this.gap<t?`${a}px`:``,this.sizeHeight=i+this.gap<e?`${i}px`:``,this.size=this.isVertical?this.sizeHeight:this.sizeWidth}createScrollbar(){let e=document.createElement(`div`);e.classList.add(this.bem.b(),this.isVertical?this.bem.is(`vertical`):this.bem.is(`horizontal`),this.bem.is(`transparent`)),Object.assign(e.style,{display:`none`}),this.thumb.classList.add(this.bem.be(`thumb`));let t=null,n=e=>{if(this.cursorDown===!1)return;let t=this.thumbState[this.propertyMap.axis];if(!t)return;let n=this.scrollbar[this.propertyMap.offset]**2/this.container[this.propertyMap.scrollSize]/(this.isVertical?this.ratioY:this.ratioX)/this.thumb[this.propertyMap.offset],r=((this.scrollbar.getBoundingClientRect()[this.propertyMap.direction]-e[this.propertyMap.client])*-1-(this.thumb[this.propertyMap.offset]-t))*100*n/this.scrollbar[this.propertyMap.offset];this.container[this.propertyMap.scrollDirection]=r*this.container[this.propertyMap.scrollSize]/100},r=()=>{this.thumbState[this.propertyMap.axis]=0,this.cursorDown=!1,document.removeEventListener(`mousemove`,n),document.removeEventListener(`mouseup`,r),this.cursorLeave&&this.hideScrollbar(),document.onselectstart=t},i=e=>{e.stopImmediatePropagation(),this.cursorDown=!0,document.addEventListener(`mousemove`,n),document.addEventListener(`mouseup`,r),t=document.onselectstart,document.onselectstart=()=>!1};this.thumb.addEventListener(`mousedown`,e=>{if(e.stopPropagation(),e.ctrlKey||[1,2].includes(e.button))return;window.getSelection()?.removeAllRanges(),i(e);let t=e.currentTarget;t&&(this.thumbState[this.propertyMap.axis]=t[this.propertyMap.offset]-(e[this.propertyMap.client]-t.getBoundingClientRect()[this.propertyMap.direction]))});let a=[this.table,e];for(let e of a)e.addEventListener(`mouseenter`,this.showScrollbar),e.addEventListener(`mouseleave`,this.hideScrollbar);return I.call(this,this.container,()=>{this.containerScrollHandler(this.container)}),e.appendChild(this.thumb),e}containerScrollHandler(e){let t=e[this.propertyMap.offset]-this.gap;this.move=e[this.propertyMap.scrollDirection]*100/t*(this.isVertical?this.ratioY:this.ratioX),Object.assign(this.thumb.style,{[this.propertyMap.size]:this.size,transform:`translate${this.propertyMap.axis.toUpperCase()}(${this.move}%)`})}showScrollbar=_n(()=>{this.cursorLeave=!1,this.scrollbar.removeEventListener(`transitionend`,this.hideScrollbarTransitionend),this.scrollbar.style.display=this.size?`block`:`none`,requestAnimationFrame(()=>{this.scrollbar.classList.remove(this.bem.is(`transparent`))})},200);hideScrollbar=_n(()=>{this.cursorLeave=!0,!this.cursorDown&&(this.scrollbar.removeEventListener(`transitionend`,this.hideScrollbarTransitionend),this.scrollbar.addEventListener(`transitionend`,this.hideScrollbarTransitionend,{once:!0}),this.scrollbar.classList.add(this.bem.is(`transparent`)))},200);hideScrollbarTransitionend=()=>{this.scrollbar.style.display=this.cursorDown&&this.size?`block`:`none`};destroy(){this.ob.disconnect(),L.call(this),this.table.removeEventListener(`mouseenter`,this.showScrollbar),this.table.removeEventListener(`mouseleave`,this.hideScrollbar)}},Gr=class extends Gn{static moduleName=`table-scrollbar`;scrollbarContainer;scrollbar=[];bem=l(`scrollbar`);constructor(t,n,r){super(t,n),this.tableModule=t,this.quill=n;let i=l(`scrollbar`);this.quill.container.classList.add(i.bm(`virtual`)),this.scrollbarContainer=this.tableModule.addContainer(this.bem.be(`container`)),this.quill.on(e.events.EDITOR_CHANGE,this.updateWhenTextChange)}updateWhenTextChange=t=>{t===e.events.TEXT_CHANGE&&(this.table&&!this.quill.root.contains(this.table)?this.setSelectionTable(void 0):this.update())};hide(){for(let e of this.scrollbar)e.destroy();this.scrollbar=[],this.scrollbarContainer.innerHTML=``}show(){if(this.table){this.scrollbar=[new Wr(this.quill,this.table,{isVertical:!0}),new Wr(this.quill,this.table,{isVertical:!1})];for(let e of this.scrollbar)this.scrollbarContainer.appendChild(e.scrollbar),e.showScrollbar()}}update(){if(this.table){this.scrollbar.length<=0&&this.show();for(let e of this.scrollbar)e.calculateSize(),e.setScrollbarPosition()}else this.scrollbar.length>0&&this.hide()}destroy(){super.destroy(),this.hide(),this.scrollbarContainer.remove(),this.quill.off(e.events.TEXT_CHANGE,this.updateWhenTextChange)}},Kr=class extends Gn{static moduleName=i.tableSelectionName;options;boundary=null;scrollRecordEls=[];startScrollRecordPosition=[];selectedTableScrollX=0;selectedTableScrollY=0;selectedEditorScrollX=0;selectedEditorScrollY=0;selectedTds=[];cellSelectWrap;cellSelect;scrollHandler=[];resizeObserver;isDisplaySelection=!1;bem=l(`selection`);autoScroller;lastSelection={anchorNode:null,anchorOffset:0,focusNode:null,focusOffset:0};_dragging=!1;set dragging(e){this._dragging!==e&&(this._dragging=e,this.quill.emitter.emit(e?r.TABLE_SELECTION_DRAG_START:r.TABLE_SELECTION_DRAG_END,this))}get dragging(){return this._dragging}constructor(t,n,i={}){super(t,n),this.tableModule=t,this.quill=n,this.options=this.resolveOptions(i),this.scrollRecordEls=[this.quill.root,document.documentElement],this.cellSelectWrap=t.addContainer(this.bem.b()),this.cellSelect=this.helpLinesInitial(),this.resizeObserver=rn(this.updateAfterEvent,{ignoreFirstBind:!0}),this.resizeObserver.observe(this.quill.root),document.addEventListener(`paste`,this.handlePaste),document.addEventListener(`selectionchange`,this.selectionChangeHandler),this.quill.on(r.AFTER_TABLE_RESIZE,this.updateAfterEvent),this.quill.on(e.events.SELECTION_CHANGE,this.quillSelectionChangeHandler),this.quill.on(e.events.EDITOR_CHANGE,this.updateWhenTextChange),this.autoScroller=new cn(50,40),this.hide()}handlePaste=e=>{if(!(document.activeElement&&this.quill.root.contains(document.activeElement))||this.quill.getSelection())return;let n=e.clipboardData;if(!n)return;e.preventDefault();let r=this.selectedTds;if(r.length<=0)return;let i=n.getData(`text/html`),a=this.quill.clipboard.convert({html:i}).ops.filter(e=>e.attributes?.[t.tableCellInner]);a.length!==0&&Jn({quill:this.quill,talbeModule:this.tableModule},r,a)};keyboardHandler=async e=>{if(e.ctrlKey)switch(e.key){case`c`:case`x`:await Dr(this.tableModule,this.selectedTds,e.key===`x`);break}else (e.key===`Backspace`||e.key===`Delete`)&&this.removeCellBySelectedTds()};updateWhenTextChange=t=>{t===e.events.TEXT_CHANGE&&(this.table&&!this.quill.root.contains(this.table)?this.setSelectionTable(void 0):this.updateAfterEvent())};updateAfterEvent=()=>{for(let e of this.selectedTds)if(!e.domNode.isConnected){this.selectedTds=[];break}this.updateWithSelectedTds()};removeCellBySelectedTds(){let t=this.quill.getSelection(),n=document.activeElement;if(!(t||!this.quill.root.contains(n))){if(this.table){let t=e.find(this.table),n=t.descendants(H);if(this.selectedTds.length===n.length){t.remove();return}}for(let e of this.selectedTds){let t=e.clone();t.appendChild(e.scroll.create(`block`)),e.parent.insertBefore(t,e),e.remove()}}}setSelectedTds(e){let t=new Set(this.selectedTds),n=this.selectedTds.length===e.length&&e.every(e=>t.has(e));this.selectedTds=e,n||this.quill.emitter.emit(r.TABLE_SELECTION_CHANGE,this,this.selectedTds)}quillSelectionChangeHandler=(n,r,i)=>{if(i!==e.sources.API&&n&&!this.quill.composition.isComposing&&this.selectedTds.length>0){let e=this.quill.getFormat(n),[r]=this.quill.getLine(n.index),i=!!e[t.tableCellInner]&&!!r,a=r&&this.selectedTds.some(e=>e.domNode.contains(r.domNode));if(i&&!a)try{let e=u(r,t.tableCellInner);this.setSelectedTds([e]),this.updateWithSelectedTds()}catch{}else i&&a||this.hide()}};setSelectionData(e,t){let{anchorNode:n,anchorOffset:r,focusNode:i,focusOffset:a}=t;if(!n||!i)return;let o=document.createRange(),s=this.selectionDirectionUp(t);s?(o.setStart(n,r),o.setEnd(n,r)):(o.setStart(n,r),o.setEnd(i,a)),e.removeAllRanges(),e.addRange(o),s&&e.extend(i,a)}selectionDirectionUp(e){let{anchorNode:t,anchorOffset:n,focusNode:r,focusOffset:i}=e;if(!t||!r)return!1;if(t===r)return n>i;let a=t.compareDocumentPosition(r);return a&Node.DOCUMENT_POSITION_CONTAINS||a&Node.DOCUMENT_POSITION_CONTAINED_BY?(a&Node.DOCUMENT_POSITION_FOLLOWING)!==0:(a&Node.DOCUMENT_POSITION_PRECEDING)!==0}resolveOptions(e){return Object.assign({selectColor:`#0589f340`},e)}selectionChangeHandler=()=>{let n=window.getSelection();if(!n)return;let{anchorNode:r,focusNode:i,anchorOffset:a,focusOffset:o}=n;if(!r||!i)return;let s=e.find(r),c=e.find(i);if(!s||!c||s.scroll!==this.quill.scroll||c.scroll!==this.quill.scroll)return;let l=f(s),u=f(c),d=l.has(t.tableColgroup),p=u.has(t.tableColgroup);if(d||p){let e=r,s=a,c=i,f=o;if(d){let n=l.get(t.tableWrapper).descendants(H);n.length>0&&(e=n[0].domNode,s=0)}if(p){let e=u.get(t.tableWrapper).descendants(H);e.length>0&&(c=e[0].domNode,f=0)}this.setSelectionData(n,{anchorNode:e,anchorOffset:s,focusNode:c,focusOffset:f});return}let m=l.has(t.tableCellInner),h=u.has(t.tableCellInner),g=m&&h;if(g){let e=l.get(t.tableCellInner),n=u.get(t.tableCellInner);g&&=e!==n}if(m&&h&&g||!m&&h||!h&&m){this.setSelectionData(n,this.lastSelection),this.selectedTds.length>0&&this.hide();return}this.lastSelection={anchorNode:r,anchorOffset:a,focusNode:i,focusOffset:o}};helpLinesInitial(){this.cellSelectWrap.style.setProperty(`--select-color`,this.options.selectColor);let e=document.createElement(`div`);return e.classList.add(this.bem.be(`line`)),this.cellSelectWrap.appendChild(e),e}computeSelectedTds(t,n){if(!this.table)return[];let r=e.find(this.table);if(!r)return[];let i=new Set(r.descendants(W).map((e,t)=>(e.index=t,e))),a=this.getScrollPositionDiff(),{rect:o}=Y(r);if(!o)return[];let s=t.x+a.x,c=t.y+a.y,l={x:Math.max(o.left,Math.min(n.x,s)),y:Math.max(o.top,Math.min(n.y,c)),x1:Math.min(o.right,Math.max(n.x,s)),y1:Math.min(o.bottom,Math.max(n.y,c))},u=new Set,d=!0;for(;d;){d=!1;for(let e of i){e.__rect||=e.domNode.getBoundingClientRect();let{x:t,y:n,right:r,bottom:a}=e.__rect;if(en({x:Math.floor(l.x),y:Math.floor(l.y),x1:Math.floor(l.x1),y1:Math.floor(l.y1)},{x:Math.floor(t),y:Math.floor(n),x1:Math.floor(r),y1:Math.floor(a)},0,u.size===0)){u.add(e),i.delete(e),l={x:Math.min(l.x,t),y:Math.min(l.y,n),x1:Math.max(l.x1,r),y1:Math.max(l.y1,a)},d=!0;break}}}for(let e of[...u,...i])delete e.__rect;return this.boundary=tn({...l,width:l.x1-l.x,height:l.y1-l.y},this.quill.root),Array.from(u).toSorted((e,t)=>e.index-t.index).map(e=>(delete e.index,e.getCellInner()))}getScrollPositionDiff(){let{x:e,y:t}=this.getTableViewScroll(),{x:n,y:r}=on(this.quill.root);return this.selectedTableScrollX=e,this.selectedTableScrollY=t,this.selectedEditorScrollX=n,this.selectedEditorScrollY=r,this.startScrollRecordPosition.reduce((e,{x:t,y:n},r)=>{let{x:i,y:a}=on(this.scrollRecordEls[r]);return e.x+=t-i,e.y+=n-a,e},{x:0,y:0})}recordScrollPosition(){this.clearRecordScrollPosition();for(let e of this.scrollRecordEls)this.startScrollRecordPosition.push(on(e))}clearRecordScrollPosition(){this.startScrollRecordPosition=[]}tableSelectHandler(t){let{button:n,target:r,clientX:i,clientY:a}=t,o=r.closest(`table`),s=r.closest(`caption`);if(n!==0||!o||s)return;this.setSelectionTable(o);let c=o.dataset.tableId,l={x:i,y:a};this.recordScrollPosition(),this.setSelectedTds(this.computeSelectedTds(l,l)),this.show();let u=e=>{this.dragging=!0;let{button:t,target:n,clientX:r,clientY:i}=e,a=n.closest(`.ql-table`),o=n.closest(`caption`);if(t!==0||o||!a||a.dataset.tableId!==c)return;let s={x:r,y:i};this.setSelectedTds(this.computeSelectedTds(l,s)),this.selectedTds.length>1&&this.quill.blur(),this.update(),this.autoScroller.updateMousePosition(r,i)},d=()=>{document.body.removeEventListener(`mousemove`,u,!1),document.body.removeEventListener(`mouseup`,d,!1),this.autoScroller.stop(),this.dragging=!1,this.clearRecordScrollPosition()};document.body.addEventListener(`mousemove`,u,!1),document.body.addEventListener(`mouseup`,d,!1);let f=e.find(o);if(!f)return;let p=f.parent.domNode;this.autoScroller.updateMousePosition(i,a),this.autoScroller.start(p)}updateWithSelectedTds(){if(this.selectedTds.length<=0){this.hide();return}let e={x:1/0,y:1/0},t={x:-1/0,y:-1/0};for(let n of this.selectedTds){let r=n.domNode.getBoundingClientRect();e.x=Math.min(e.x,r.left),e.y=Math.min(e.y,r.top),t.x=Math.max(t.x,r.right),t.y=Math.max(t.y,r.bottom)}this.setSelectedTds(this.computeSelectedTds(e,t)),this.selectedTds.length>0?this.update():this.hide()}update(){if(!this.table){this.hide();return}if(this.selectedTds.length===0||!this.boundary)return;let{x:e,y:t}=on(this.quill.root),{x:n,y:i}=this.getTableViewScroll(),a=this.table.parentElement.getBoundingClientRect(),o=this.quill.root.getBoundingClientRect(),s=a.x-o.x,c=a.y-o.y;Object.assign(this.cellSelect.style,{left:`${this.selectedEditorScrollX*2-e+this.boundary.x+this.selectedTableScrollX-n-s}px`,top:`${this.selectedEditorScrollY*2-t+this.boundary.y+this.selectedTableScrollY-i-c}px`,width:`${this.boundary.width}px`,height:`${this.boundary.height}px`}),Object.assign(this.cellSelectWrap.style,{left:`${s}px`,top:`${c}px`,width:`${a.width}px`,height:`${a.height}px`}),this.quill.emitter.emit(r.TABLE_SELECTION_DISPLAY_CHANGE,this)}getTableViewScroll(){return this.table?on(this.table.parentElement):{x:0,y:0}}setSelectionTable(e){this.table!==e&&(this.table=e,this.table?this.scrollRecordEls.push(this.table.parentElement):this.scrollRecordEls.pop())}showDisplay(){Object.assign(this.cellSelectWrap.style,{display:`block`}),this.isDisplaySelection=!0,this.table&&this.resizeObserver.observe(this.table)}show(){this.table&&(L.call(this),this.showDisplay(),this.update(),this.quill.root.addEventListener(`keydown`,this.keyboardHandler),I.call(this,this.quill.root,()=>{this.update()}),I.call(this,this.table.parentElement,()=>{this.update()}))}hideDisplay(){Object.assign(this.cellSelectWrap.style,{display:`none`}),this.isDisplaySelection=!1,this.table&&this.resizeObserver.unobserve(this.table)}hide(){L.call(this),this.quill.root.removeEventListener(`keydown`,this.keyboardHandler),this.hideDisplay(),this.boundary=null,this.setSelectedTds([]),this.setSelectionTable(void 0)}destroy(){super.destroy(),this.resizeObserver.disconnect(),this.hide(),this.cellSelectWrap.remove(),L.call(this),document.removeEventListener(`paste`,this.handlePaste),document.removeEventListener(`selectionchange`,this.selectionChangeHandler),this.quill.off(r.AFTER_TABLE_RESIZE,this.updateAfterEvent),this.quill.off(e.events.EDITOR_CHANGE,this.updateWhenTextChange),this.quill.off(e.events.SELECTION_CHANGE,this.quillSelectionChangeHandler)}};const qr=e.import(`parchment`),$=e.import(`delta`),Jr=e.import(`ui/icons`),Yr=e.import(`blots/break`),Xr=e.import(`blots/block`),Zr=e.import(`blots/block/embed`);function Qr(e,{tableId:n,rowId:r,colId:i}){let a={tableId:n,rowId:r,colId:i,colspan:1,rowspan:1},o=e.create(t.tableCell,a),s=e.create(t.tableCellInner,a),c=e.create(`block`);return c.appendChild(e.create(`break`)),s.appendChild(c),o.appendChild(s),o}function $r(e){o.delete(t.tableCellInner),Object.assign(t,e.blotName||{}),Object.assign(n,e.tableUpSize||{}),Object.assign(r,e.tableUpEvent||{}),Object.assign(i,e.tableUpInternal||{}),ni.moduleName=i.moduleName,ni.toolName=t.tableWrapper,z.blotName=t.container,Bn.blotName=t.tableCaption,J.blotName=t.tableWrapper,K.blotName=t.tableMain,q.blotName=t.tableColgroup,G.blotName=t.tableCol,Un.blotName=t.tableHead,V.blotName=t.tableBody,Hn.blotName=t.tableFoot,U.blotName=t.tableRow,W.blotName=t.tableCell,H.blotName=t.tableCellInner,o.add(t.tableCellInner)}function ei(t,n){return T({onSelect:(r,i)=>{t.insertTable(r,i,e.sources.USER),n&&n.close()},customBtn:t.options.customBtn,texts:t.options.texts})}function ti(n){return{bindInHead:!1,key:n?`ArrowUp`:`ArrowDown`,collapsed:!0,format:[t.tableCellInner],handler(r,i){let a=n?`prev`:`next`,o=n?`tail`:`head`;if(i.line[a])return!0;let s=this.quill.selection.getBounds(r.index),c=i.line.domNode.getBoundingClientRect();if(!s||!c)return!0;if(n){if(s.top-c.top>3)return!0}else if(c.bottom-s.bottom>3)return!0;let l,u,f,p;try{[l,u,f,p]=d(i.line,[t.tableWrapper,t.tableMain,t.tableRow,t.tableCell])}catch{return!0}let m=u.getColIds(),h=l.descendants(Bn,0)[0],g;if(h){let e=window.getComputedStyle(h.domNode);g=a===`next`&&e.captionSide===`bottom`?h:a===`next`?l.next:h}else g=l[a];if(i.line[a]||!g)return!0;let _=f[a];if(_){let t=m.indexOf(p.colId),n=_.getCellByColId(m[t],a);if(!n)return!0;let r=n.children[o];r.children&&(r=r.children[o]);let s=r.offset(this.quill.scroll)+Math.min(i.offset,r.length()-1);this.quill.setSelection(s,0,e.sources.USER)}else{let t=g.offset(this.quill.scroll)+(n?g.length()-1:0);this.quill.setSelection(t,0,e.sources.USER)}return!1}}}var ni=class r{static moduleName=i.moduleName;static toolName=t.tableWrapper;static keyboradHandler={"forbid remove table by backspace":{bindInHead:!0,key:`Backspace`,collapsed:!0,offset:0,handler(e,n){let r=this.quill.getLine(e.index)[0];return r.prev instanceof J?(r.prev.remove(),!1):!(n.format[t.tableCellInner]&&r.offset(u(r,t.tableCellInner))===0)}},"forbid remove table by delete":{bindInHead:!0,key:`Delete`,collapsed:!0,handler(e,n){let r=this.quill.getLine(e.index),i=r[0],a=r[1];return!((i.next instanceof J||i.next instanceof G)&&a===i.length()-1||n.format[t.tableCellInner]&&i===u(i,t.tableCellInner).children.tail&&a===i.length()-1)}},"table up":ti(!0),"table down":ti(!1),"table caption break":{bindInHead:!0,key:`Enter`,shiftKey:null,format:[t.tableCaption],handler(e,t){return!1}}};static register(){J.allowedChildren=[K],K.allowedChildren=[q,Bn,Un,V,Hn],K.requiredContainer=J,Bn.requiredContainer=K,q.allowedChildren=[G],q.requiredContainer=K,Un.allowedChildren=[U],Un.requiredContainer=K,V.allowedChildren=[U],V.requiredContainer=K,Hn.allowedChildren=[U],Hn.requiredContainer=K,U.allowedChildren=[W],W.allowedChildren=[H,Yr],W.requiredContainer=U,H.requiredContainer=W;let n=new Set([`table`]),r=Object.entries(e.imports).filter(([e,t])=>{let r=e.split(`formats/`)[1];return e.startsWith(`formats/`)&&!n.has(r)&&(g(t,Xr)||g(t,Zr))}).reduce((e,[t,n])=>{let r=g(n,Zr)?kn:Dn;return e[t]=class extends h(n,[r]){static register(){}},e},{});e.register({"blots/scroll":Fn,"blots/block":Dn,"blots/block/embed":kn,...r,[`blots/${t.container}`]:z,[`formats/${t.tableCell}`]:W,[`formats/${t.tableCellInner}`]:H,[`formats/${t.tableRow}`]:U,[`formats/${t.tableHead}`]:Un,[`formats/${t.tableBody}`]:V,[`formats/${t.tableFoot}`]:Hn,[`formats/${t.tableCol}`]:G,[`formats/${t.tableColgroup}`]:q,[`formats/${t.tableCaption}`]:Bn,[`formats/${t.tableMain}`]:K,[`formats/${t.tableWrapper}`]:J,"modules/clipboard":lr},!0)}quill;options;textOptionsInput;toolBox;fixTableByLisenter=_n(this.balanceTables,100);selector;resizeOb;editableObserver;modules={};get statics(){return this.constructor}constructor(e,t){this.quill=e,this.textOptionsInput=t?.texts,this.options=this.resolveOptions(t||{}),this.toolBox=this.initialContainer();let n=this.getToolbarPicker();n&&(n.label.innerHTML=this.options.icon,this.buildCustomSelect(this.options.customSelect,n),n.label.addEventListener(`mousedown`,()=>{if(!this.selector)return;let{leftLimited:e}=nn(this.selector.getBoundingClientRect());if(e){let e=n.label.getBoundingClientRect();Object.assign(n.options.style,{transform:`translateX(calc(-100% + ${e.width}px))`})}else Object.assign(n.options.style,{transform:void 0})}));let i=this.quill.getModule(`keyboard`);for(let e of Object.values(r.keyboradHandler))e.bindInHead?i.bindings[e.key].unshift(e):i.addBinding(e.key,e);this.initModules(),this.listenEditableChange(),this.quillHack(),this.listenBalanceCells()}initialContainer(){let e=l(`toolbox`),t=this.quill.addContainer(e.b());return this.resizeOb=new ResizeObserver(()=>{let e=this.quill.root.getBoundingClientRect(),{offsetLeft:n,offsetTop:r}=this.quill.root;Object.assign(t.style,{top:`${r}px`,left:`${n}px`,width:`${e.width}px`,height:`${e.height}px`})}),this.resizeOb.observe(this.quill.root),t}addContainer(e){if(C(e)){let t=document.createElement(`div`);for(let n of e.split(` `))t.classList.add(n);return this.toolBox.appendChild(t),t}else return this.toolBox.appendChild(e),e}getToolbarPicker(){let e=this.quill.getModule(`toolbar`);if(!e||!this.quill.theme.pickers)return;let[,t]=(e.controls||[]).find(([e])=>e===this.statics.toolName)||[];if(t?.tagName.toLocaleLowerCase()===`select`)return this.quill.theme.pickers.find(e=>e.select===t)}resolveOptions(e){let{texts:t,...n}=e;return Object.assign({customBtn:!1,texts:this.resolveTexts(t),full:!1,fullSwitch:!0,icon:Jr.table,autoMergeCell:!0,pasteStyleSheet:!1,pasteDefaultTagStyle:!1,modules:[]},n)}resolveTexts(e){let t={fullCheckboxText:`Insert full width table`,customBtnText:`Custom`,confirmText:`Confirm`,cancelText:`Cancel`,rowText:`Row`,colText:`Column`,notPositiveNumberError:`Please enter a positive integer`,custom:`Custom`,clear:`Clear`,transparent:`Transparent`,perWidthInsufficient:`The percentage width is insufficient. To complete the operation, the table needs to be converted to a fixed width. Do you want to continue?`,CopyCell:`Copy cell`,CutCell:`Cut cell`,InsertTop:`Insert row above`,InsertRight:`Insert column right`,InsertBottom:`Insert row below`,InsertLeft:`Insert column Left`,MergeCell:`Merge Cell`,SplitCell:`Split Cell`,DeleteRow:`Delete Row`,DeleteColumn:`Delete Column`,DeleteTable:`Delete table`,BackgroundColor:`Set background color`,BorderColor:`Set border color`};if(x(e)){let n=e,r=this;return new Proxy(t,{get(e,t){if(typeof t!=`string`)return Reflect.get(e,t);let i=n.call(r,t);return C(i)?i:e[t]}})}return Object.assign(t,e)}async refreshUI(){this.options.texts=this.resolveTexts(this.textOptionsInput);let e=this.getToolbarPicker();e&&(e.label.innerHTML=this.options.icon,await this.buildCustomSelect(this.options.customSelect,e));for(let e of Object.values(this.modules))e&&typeof e.hide==`function`&&e.hide()}initModules(){if(this.quill.isEnabled())for(let e of this.options.modules)this.modules[e.module.moduleName]=new e.module(this,this.quill,e.options)}listenEditableChange(){this.editableObserver=new MutationObserver(e=>{for(let t of e)if(t.type===`attributes`&&t.attributeName===`contenteditable`){this.quill.root.getAttribute(`contenteditable`)===`false`?this.destroyModules():this.initModules();break}}),this.editableObserver.observe(this.quill.root,{attributes:!0,attributeFilter:[`contenteditable`]})}destroyModules(){for(let[e,t]of Object.entries(this.modules))if(t&&typeof t.destroy==`function`)try{t.destroy()}catch(t){console.warn(`Failed to destroy module ${e}:`,t)}this.modules={}}getModule(e){return this.modules[e]}quillHack(){let n=this.quill.getSemanticHTML;this.quill.getSemanticHTML=((r=0,i)=>{let a=n.call(this.quill,r,i),o=e.import(`formats/${t.tableWrapper}`),s=new DOMParser().parseFromString(a,`text/html`);for(let e of Array.from(s.querySelectorAll(`.${o.className} caption[contenteditable], .${o.className} .${W.className} > [contenteditable]`)))e.removeAttribute(`contenteditable`);return s.body.innerHTML});let r=this.quill.format;this.quill.format=function(n,a,o=e.sources.API){if(!(this.scroll.query(n).prototype instanceof qr.EmbedBlot)){let e=this.getModule(i.moduleName),s=this.getSelection(!0),c=this.getFormat(s),l=e.getModule(i.tableSelectionName);if(!c[t.tableCellInner]||s.length>0||e&&l&&l.selectedTds.length<=1)return r.call(this,n,a,o);if(e&&l&&l.selectedTds.length>0){let e=l.selectedTds,t=!1,r=[];for(let i of e){let e=i.offset(this.scroll),o=i.length();r.push({index:e,length:o}),this.getFormat(e,o)[n]!==a&&(t=!0)}let i=t?a:!1,s=new $;for(let[e,{index:t,length:a}]of r.entries()){let o=e===0?0:r[e-1].index+r[e-1].length;s.retain(t-o).retain(a,{[n]:i})}let c=this.updateContents(s,o);return this.blur(),c}}return r.call(this,n,a,o)};let a=this.quill.theme.modules.toolbar;if(a){let n=a.handlers?.clean;if(n){let r=(e,n,r=()=>``)=>{let i=this.quill.getText(e,n),[a,o]=this.quill.getLine(e+n),s=0,c=new $;a!=null&&(s=a.length()-o,c=a.delta().slice(o,o+s-1).insert(`
|
|
134
|
-
`));let l=this.quill.getContents(e,n+s),u=l.diff(new $().insert(i).concat(c)),d=0;return new $(u.ops.map(e=>{let{attributes:n,...i}=e;if(e.insert?d-=C(e.insert)?e.insert.length:1:e.retain?d+=re(e.retain)?e.retain:1:e.delete&&(d+=e.delete),n){let{[t.tableCellInner]:e,...a}=n;if(r){let e=l.slice(d-1,d).ops[0];if(e?.attributes?.[t.tableCellInner]){let{style:n,...o}=e.attributes[t.tableCellInner],s=r(n);return s?{...i,attributes:{...a,[t.tableCellInner]:{style:s,...o}}}:{...i,attributes:{...a,[t.tableCellInner]:o}}}}return{...i,attributes:{...a}}}return e}))};a.handlers.clean=function(a){let o=this.quill.getModule(i.moduleName),s=this.quill.getSelection();if(s&&s.length>0&&this.quill.getFormat(s)[t.tableCellInner]){let t=
|
|
133
|
+
</div>`}let i=document.createElement(`div`);i.classList.add(this.bem.be(`row`));let a=document.createElement(`div`);a.classList.add(this.bem.be(`row-wrapper`)),Object.assign(i.style,{transform:`translateX(-${this.options.size}px)`,width:`${this.options.size}px`,maxHeight:`${r.height}px`}),Object.assign(a.style,{height:`${e.height}px`}),a.innerHTML=t,i.appendChild(a),this.root.appendChild(i),i.scrollTop=this.tableWrapperBlot.domNode.scrollTop,this.rowHeadWrapper=i,this.bindRowEvents()}let[o]=p(this.tableBlot,Bn),s=!o||o?.side!==`top`;s?this.root.classList.remove(this.bem.is(`caption-bottom`)):this.root.classList.add(this.bem.is(`caption-bottom`));let c=-1*this.options.size,l=-1*this.options.size;Lr(this.tableBlot)?(this.root.classList.add(this.bem.is(`align-right`)),c=Math.min(r.width,e.width),l=Math.min(r.width,e.width)):this.root.classList.remove(this.bem.is(`align-right`)),this.corner&&Object.assign(this.corner.style,{transform:`translateY(${-1*this.options.size}px) translateX(${c}px)`,top:`${s?0:e.height+this.options.size}px`}),this.rowHeadWrapper&&Object.assign(this.rowHeadWrapper.style,{transform:`translateX(${l}px)`,maxHeight:`${r.height}px`}),this.colHeadWrapper&&Object.assign(this.colHeadWrapper.style,{top:`${s?0:e.height+this.options.size}px`,maxWidth:`${r.width}px`})}show(){!this.table||!this.tableBlot||(this.root.classList.remove(this.bem.is(`hidden`)),this.resizeObserver=rn(()=>this.update(),{ignoreFirstBind:!0}),this.resizeObserver.observe(this.table),this.update(),I.call(this,this.quill.root,()=>{this.update()}))}hide(){this.root.classList.add(this.bem.is(`hidden`)),this.resizeObserver&&=(this.resizeObserver.disconnect(),void 0)}destroy(){super.destroy(),this.hide(),L.call(this),this.quill.off(e.events.EDITOR_CHANGE,this.updateWhenTextChange);for(let[e,t]of this.scrollHandler)e.removeEventListener(`scroll`,t);this.root.remove()}},Gr=class extends Vr{static moduleName=`table-resize-line`;colResizer;rowResizer;currentTableCell;tableCellBlot;bem=l(`resize-line`);stopColDrag;stopRowDrag;scrollHandler=[];constructor(t,n){super(t,n),this.tableModule=t,this.quill=n,this.colResizer=this.tableModule.addContainer(this.bem.be(`col`)),this.rowResizer=this.tableModule.addContainer(this.bem.be(`row`)),this.quill.on(e.events.EDITOR_CHANGE,this.updateWhenTextChange)}setSelectionTable(e){this.table!==e&&(this.hide(),this.table=e,this.table&&this.show())}updateWhenTextChange=t=>{t===e.events.TEXT_CHANGE&&(this.table&&!this.quill.root.contains(this.table)?this.setSelectionTable(void 0):this.update())};findTableCell(e){for(let t of e.composedPath()){if(t instanceof HTMLElement&&[`TD`,`TH`].includes(t.tagName))return t;if(t===document.body)return null}return null}pointermoveHandler=n=>{if(this.dragging||this.tableModule.getModule(i.tableSelectionName)?.dragging)return;let r=this.findTableCell(n);if(!r)return this.hide();let a=e.find(r);a&&this.currentTableCell!==r&&(this.show(),this.currentTableCell=r,this.tableCellBlot=a,this.tableBlot=u(a,t.tableMain),this.tableBlot.getCols().length>0&&this.updateColResizer(),this.updateRowResizer(),I.call(this,this.quill.root,()=>{this.dragging||this.hideResizer()}))};findDragColIndex(e){return this.tableCellBlot?e.findIndex(e=>e.colId===this.tableCellBlot.colId):-1}updateColResizer(){if(!this.tableBlot||!this.tableCellBlot||!this.colResizer)return;this.colResizer.remove();let{rect:e}=Y(this.tableBlot);if(!e)return;this.colResizer=this.tableModule.addContainer(this.bem.be(`col`));let t=this.tableCellBlot.domNode.getBoundingClientRect(),n=this.quill.root.getBoundingClientRect(),r=t.right-n.x;Lr(this.tableBlot)&&(r=t.left-n.x),Object.assign(this.colResizer.style,{top:`${e.y-n.y}px`,left:`${r}px`,height:`${e.height}px`});let{stop:i}=$t(this.colResizer,{axis:`x`,onStart:(e,t)=>{if(this.dragging=!0,this.calculateColDragRange(),this.dragXCommon.createBreak(),!this.tableBlot)return;let n=this.tableBlot.domNode.parentElement.getBoundingClientRect(),{rect:r}=Y(this.tableBlot);if(!r)return;this.dragXCommon.startValue=r.x;let i=this.quill.root.getBoundingClientRect();Object.assign(this.dragXCommon.dragBreak.style,{top:`${Math.max(n.y,r.y)-i.y}px`,left:`${t.clientX-i.x}px`,height:`${Math.min(n.height,r.height)}px`})},onMove:({position:e})=>{if(!this.dragXCommon.dragBreak)return;let t=this.dragXCommon.limitRange(this.tableBlot,e.x,!0),n=this.quill.root.getBoundingClientRect();this.dragXCommon.dragBreak.style.left=`${t-n.x}px`},onEnd:({position:e})=>{if(this.dragging=!1,this.colResizer){let t=this.dragXCommon.limitRange(this.tableBlot,e.x,!0),n=this.quill.root.getBoundingClientRect();this.colResizer.style.left=`${t-n.x}px`}this.updateTableCol(e.x),this.removeBreak()}});this.stopColDrag&&this.stopColDrag(),this.stopColDrag=i,this.colResizer.addEventListener(`dragstart`,e=>e.preventDefault())}findDragRowIndex(e){if(!this.tableCellBlot)return-1;let t=this.tableCellBlot.parent;return t instanceof U?e.indexOf(t):-1}updateRowResizer(){if(!this.tableBlot||!this.tableCellBlot||!this.rowResizer)return;let e=this.tableCellBlot;this.rowResizer.remove();let{rect:t}=Y(this.tableBlot);if(!t)return;this.rowResizer=this.tableModule.addContainer(this.bem.be(`row`));let n=e.domNode.getBoundingClientRect(),r=this.quill.root.getBoundingClientRect();Object.assign(this.rowResizer.style,{top:`${n.bottom-r.y}px`,left:`${t.x-r.x}px`,width:`${t.width}px`});let{stop:i}=$t(this.rowResizer,{axis:`y`,onStart:(e,t)=>{if(this.dragging=!0,this.calculateRowDragRange(),this.dragYCommon.createBreak(),!this.tableBlot)return;let n=this.tableBlot.domNode.parentElement.getBoundingClientRect(),{rect:r}=Y(this.tableBlot);if(!r)return;this.dragYCommon.startValue=r.y;let i=this.quill.root.getBoundingClientRect();Object.assign(this.dragYCommon.dragBreak.style,{top:`${t.clientY-i.y}px`,left:`${Math.max(n.x,r.x)-i.x}px`,width:`${Math.min(n.width,r.width)}px`})},onMove:({position:e})=>{if(!this.dragYCommon.dragBreak||!this.table)return;let t=this.dragYCommon.limitRange(this.tableBlot,e.y,!0),n=this.quill.root.getBoundingClientRect();this.dragYCommon.dragBreak.style.top=`${t-n.y}px`},onEnd:({position:e})=>{if(this.dragging=!1,this.rowResizer){let t=this.dragYCommon.limitRange(this.tableBlot,e.y,!0),n=this.quill.root.getBoundingClientRect();this.rowResizer.style.left=`${t-n.y}px`}this.updateTableRow(e.y),this.removeBreak()}});this.stopRowDrag&&this.stopRowDrag(),this.stopRowDrag=i,this.rowResizer.addEventListener(`dragstart`,e=>e.preventDefault())}show(){!this.table||!this.rowResizer||!this.colResizer||(this.rowResizer.classList.remove(this.bem.is(`hidden`)),this.colResizer.classList.remove(this.bem.is(`hidden`)),this.table.addEventListener(`pointermove`,this.pointermoveHandler))}hideResizer(){!this.rowResizer||!this.colResizer||(this.rowResizer.classList.add(this.bem.is(`hidden`)),this.colResizer.classList.add(this.bem.is(`hidden`)))}hide(){this.currentTableCell=void 0,L.call(this),this.hideResizer(),this.table&&this.table.removeEventListener(`pointermove`,this.pointermoveHandler)}destroy(){super.destroy(),this.colResizer&&=(this.colResizer.remove(),void 0),this.rowResizer&&=(this.rowResizer.remove(),void 0),this.quill.off(e.events.EDITOR_CHANGE,this.updateWhenTextChange)}},Kr=class extends Gn{static moduleName=`table-resize-scale`;scrollHandler=[];tableMainBlot;tableWrapperBlot;bem=l(`scale`);options;root;block;resizeobserver=new ResizeObserver(()=>this.update());constructor(t,n,r){super(t,n),this.tableModule=t,this.quill=n,this.options=this.resolveOptions(r),this.quill.on(e.events.EDITOR_CHANGE,this.updateWhenTextChange)}updateWhenTextChange=t=>{t===e.events.TEXT_CHANGE&&(this.table&&!this.quill.root.contains(this.table)?this.setSelectionTable(void 0):this.update())};resolveOptions(e){return Object.assign({blockSize:12,offset:6},e)}buildResizer(){if(!this.tableMainBlot||!this.tableWrapperBlot)return;this.root=this.tableModule.addContainer(this.bem.b()),this.block=document.createElement(`div`),this.block.classList.add(this.bem.be(`block`)),Object.assign(this.block.style,{width:`${this.options.blockSize}px`,height:`${this.options.blockSize}px`}),this.root.appendChild(this.block);let e=[],t=[];$t(this.block,{onStart:()=>{this.tableMainBlot&&(e=this.tableMainBlot.getCols().map(e=>({blot:e,width:Math.floor(e.width)})),t=this.tableMainBlot.getRows().map(e=>({blot:e,height:Math.floor(e.domNode.getBoundingClientRect().height)})))},onMove:({movePosition:r})=>{if(!this.tableMainBlot)return;let i=Lr(this.tableMainBlot)?-1:1,a=r.x*i,o=r.y,s=Math.floor(a/e.length),c=Math.floor(o/t.length);for(let{blot:t,width:r}of e)t.width=Math.max(r+s,n.colMinWidthPx);for(let{blot:e,height:r}of t)e.setHeight(`${Math.max(r+c,n.rowMinHeightPx)}px`)},onEnd:()=>{e=[],t=[]}}),this.block.addEventListener(`dragstart`,e=>e.preventDefault())}update(){if(!this.block||!this.root||!this.tableMainBlot||!this.tableWrapperBlot)return;if(this.tableMainBlot.full){this.hide();return}let{rect:e}=Y(this.tableMainBlot);if(!e)return;let t=this.tableWrapperBlot.domNode.getBoundingClientRect(),n=this.quill.root.getBoundingClientRect(),{scrollTop:r,scrollLeft:i}=this.tableWrapperBlot.domNode,a=this.options.blockSize*2+this.options.offset,o=Math.min(e.width,t.width)+a,s=Math.min(e.height,t.height)+a;Object.assign(this.root.style,{width:`${o}px`,height:`${s}px`,left:`${Math.max(e.x,t.x)-n.x-this.options.blockSize}px`,top:`${Math.max(e.y,t.y)-n.y-this.options.blockSize}px`});let c={left:`${e.width+a-i}px`,top:`${s-r}px`};Lr(this.tableMainBlot)?(this.root.classList.add(this.bem.is(`align-right`)),c.left=`${this.options.blockSize+-1*i}px`):this.root.classList.remove(this.bem.is(`align-right`)),Object.assign(this.block.style,c)}show(){this.table&&(this.tableMainBlot=e.find(this.table),this.tableMainBlot&&!this.tableMainBlot.full&&(this.tableWrapperBlot=this.tableMainBlot.parent,this.resizeobserver.observe(this.tableMainBlot.domNode),I.call(this,this.quill.root,()=>this.update()),I.call(this,this.tableWrapperBlot.domNode,()=>this.update())),this.buildResizer())}hide(){this.tableMainBlot=void 0,this.tableWrapperBlot=void 0,this.root&&(this.root.remove(),this.root=void 0,this.block=void 0),L.call(this)}destroy(){super.destroy(),this.hide(),this.quill.off(e.events.EDITOR_CHANGE,this.updateWhenTextChange),this.resizeobserver.disconnect()}};const qr={size:`height`,offset:`offsetHeight`,scrollDirection:`scrollTop`,scrollSize:`scrollHeight`,axis:`y`,direction:`top`,client:`clientY`},Jr={size:`width`,offset:`offsetWidth`,scrollDirection:`scrollLeft`,scrollSize:`scrollWidth`,axis:`x`,direction:`left`,client:`clientX`};var Yr=class{minSize=20;gap=4;move=0;cursorDown=!1;cursorLeave=!1;ratioY=1;ratioX=1;sizeWidth=``;sizeHeight=``;size=``;bem=l(`scrollbar`);tableMainBlot;ob;container;scrollbar;thumb=document.createElement(`div`);scrollHandler=[];propertyMap;thumbState={x:0,y:0};get isVertical(){return this.options.isVertical}constructor(t,n,r){this.quill=t,this.table=n,this.options=r,this.tableMainBlot=e.find(this.table),this.container=n.parentElement,this.propertyMap=this.isVertical?qr:Jr,this.calculateSize(),this.ob=new ResizeObserver(()=>this.update()),this.ob.observe(n),this.scrollbar=this.createScrollbar(),this.setScrollbarPosition(),I.call(this,this.quill.root,()=>this.setScrollbarPosition()),this.showScrollbar()}update(){this.calculateSize(),this.setScrollbarPosition()}setScrollbarPosition(){let{rect:e,head:t,body:n,foot:r}=Y(this.tableMainBlot),i=t||n||r;if(!i||!e)return;let{scrollLeft:a,scrollTop:o,offsetLeft:s,offsetTop:c}=this.quill.root,{offsetLeft:l,offsetTop:u}=this.container,{offsetLeft:d,offsetTop:f}=i.domNode,{width:p,height:m}=this.container.getBoundingClientRect(),h=l+d-s,g=u+f-c;this.isVertical?h+=Math.min(p,e.width):g+=Math.min(m,e.height),this.tableMainBlot&&this.tableMainBlot.align!==`left`&&(h+=this.table.offsetLeft-l),Object.assign(this.scrollbar.style,{[this.propertyMap.size]:`${this.isVertical?Math.min(m,e.height):p}px`,transform:`translate(${h-a}px, ${g-o}px)`}),this.containerScrollHandler(this.container)}calculateSize(){let e=this.container.offsetHeight-this.gap,t=this.container.offsetWidth-this.gap,n=e**2/this.container.scrollHeight,r=t**2/this.container.scrollWidth,i=Math.max(n,this.minSize),a=Math.max(r,this.minSize);this.ratioY=n/(e-n)/(i/(e-i)),this.ratioX=r/(t-r)/(a/(t-a)),this.sizeWidth=a+this.gap<t?`${a}px`:``,this.sizeHeight=i+this.gap<e?`${i}px`:``,this.size=this.isVertical?this.sizeHeight:this.sizeWidth}createScrollbar(){let e=document.createElement(`div`);e.classList.add(this.bem.b(),this.isVertical?this.bem.is(`vertical`):this.bem.is(`horizontal`),this.bem.is(`transparent`)),Object.assign(e.style,{display:`none`}),this.thumb.classList.add(this.bem.be(`thumb`));let t=null,n=e=>{if(this.cursorDown===!1)return;let t=this.thumbState[this.propertyMap.axis];if(!t)return;let n=this.scrollbar[this.propertyMap.offset]**2/this.container[this.propertyMap.scrollSize]/(this.isVertical?this.ratioY:this.ratioX)/this.thumb[this.propertyMap.offset],r=((this.scrollbar.getBoundingClientRect()[this.propertyMap.direction]-e[this.propertyMap.client])*-1-(this.thumb[this.propertyMap.offset]-t))*100*n/this.scrollbar[this.propertyMap.offset];this.container[this.propertyMap.scrollDirection]=r*this.container[this.propertyMap.scrollSize]/100},r=()=>{this.thumbState[this.propertyMap.axis]=0,this.cursorDown=!1,document.removeEventListener(`mousemove`,n),document.removeEventListener(`mouseup`,r),this.cursorLeave&&this.hideScrollbar(),document.onselectstart=t},i=e=>{e.stopImmediatePropagation(),this.cursorDown=!0,document.addEventListener(`mousemove`,n),document.addEventListener(`mouseup`,r),t=document.onselectstart,document.onselectstart=()=>!1};this.thumb.addEventListener(`mousedown`,e=>{if(e.stopPropagation(),e.ctrlKey||[1,2].includes(e.button))return;window.getSelection()?.removeAllRanges(),i(e);let t=e.currentTarget;t&&(this.thumbState[this.propertyMap.axis]=t[this.propertyMap.offset]-(e[this.propertyMap.client]-t.getBoundingClientRect()[this.propertyMap.direction]))});let a=[this.table,e];for(let e of a)e.addEventListener(`mouseenter`,this.showScrollbar),e.addEventListener(`mouseleave`,this.hideScrollbar);return I.call(this,this.container,()=>{this.containerScrollHandler(this.container)}),e.appendChild(this.thumb),e}containerScrollHandler(e){let t=e[this.propertyMap.offset]-this.gap;this.move=e[this.propertyMap.scrollDirection]*100/t*(this.isVertical?this.ratioY:this.ratioX),Object.assign(this.thumb.style,{[this.propertyMap.size]:this.size,transform:`translate${this.propertyMap.axis.toUpperCase()}(${this.move}%)`})}showScrollbar=_n(()=>{this.cursorLeave=!1,this.scrollbar.removeEventListener(`transitionend`,this.hideScrollbarTransitionend),this.scrollbar.style.display=this.size?`block`:`none`,requestAnimationFrame(()=>{this.scrollbar.classList.remove(this.bem.is(`transparent`))})},200);hideScrollbar=_n(()=>{this.cursorLeave=!0,!this.cursorDown&&(this.scrollbar.removeEventListener(`transitionend`,this.hideScrollbarTransitionend),this.scrollbar.addEventListener(`transitionend`,this.hideScrollbarTransitionend,{once:!0}),this.scrollbar.classList.add(this.bem.is(`transparent`)))},200);hideScrollbarTransitionend=()=>{this.scrollbar.style.display=this.cursorDown&&this.size?`block`:`none`};destroy(){this.ob.disconnect(),L.call(this),this.table.removeEventListener(`mouseenter`,this.showScrollbar),this.table.removeEventListener(`mouseleave`,this.hideScrollbar)}},Xr=class extends Gn{static moduleName=`table-scrollbar`;scrollbarContainer;scrollbar=[];bem=l(`scrollbar`);constructor(t,n,r){super(t,n),this.tableModule=t,this.quill=n;let i=l(`scrollbar`);this.quill.container.classList.add(i.bm(`virtual`)),this.scrollbarContainer=this.tableModule.addContainer(this.bem.be(`container`)),this.quill.on(e.events.EDITOR_CHANGE,this.updateWhenTextChange)}updateWhenTextChange=t=>{t===e.events.TEXT_CHANGE&&(this.table&&!this.quill.root.contains(this.table)?this.setSelectionTable(void 0):this.update())};hide(){for(let e of this.scrollbar)e.destroy();this.scrollbar=[],this.scrollbarContainer.innerHTML=``}show(){if(this.table){this.scrollbar=[new Yr(this.quill,this.table,{isVertical:!0}),new Yr(this.quill,this.table,{isVertical:!1})];for(let e of this.scrollbar)this.scrollbarContainer.appendChild(e.scrollbar),e.showScrollbar()}}update(){if(this.table){this.scrollbar.length<=0&&this.show();for(let e of this.scrollbar)e.calculateSize(),e.setScrollbarPosition()}else this.scrollbar.length>0&&this.hide()}destroy(){super.destroy(),this.hide(),this.scrollbarContainer.remove(),this.quill.off(e.events.TEXT_CHANGE,this.updateWhenTextChange)}},Zr=class extends Gn{static moduleName=i.tableSelectionName;options;boundary=null;scrollRecordEls=[];startScrollRecordPosition=[];selectedTableScrollX=0;selectedTableScrollY=0;selectedEditorScrollX=0;selectedEditorScrollY=0;selectedTds=[];cellSelectWrap;cellSelect;scrollHandler=[];resizeObserver;isDisplaySelection=!1;bem=l(`selection`);autoScroller;lastSelection={anchorNode:null,anchorOffset:0,focusNode:null,focusOffset:0};_dragging=!1;set dragging(e){this._dragging!==e&&(this._dragging=e,this.quill.emitter.emit(e?r.TABLE_SELECTION_DRAG_START:r.TABLE_SELECTION_DRAG_END,this))}get dragging(){return this._dragging}constructor(t,n,i={}){super(t,n),this.tableModule=t,this.quill=n,this.options=this.resolveOptions(i),this.scrollRecordEls=[this.quill.root,document.documentElement],this.cellSelectWrap=t.addContainer(this.bem.b()),this.cellSelect=this.helpLinesInitial(),this.resizeObserver=rn(this.updateAfterEvent,{ignoreFirstBind:!0}),this.resizeObserver.observe(this.quill.root),document.addEventListener(`paste`,this.handlePaste),document.addEventListener(`selectionchange`,this.selectionChangeHandler),this.quill.on(r.AFTER_TABLE_RESIZE,this.updateAfterEvent),this.quill.on(e.events.SELECTION_CHANGE,this.quillSelectionChangeHandler),this.quill.on(e.events.EDITOR_CHANGE,this.updateWhenTextChange),this.autoScroller=new cn(50,40),this.hide()}handlePaste=e=>{if(!(document.activeElement&&this.quill.root.contains(document.activeElement))||this.quill.getSelection())return;let n=e.clipboardData;if(!n)return;e.preventDefault();let r=this.selectedTds;if(r.length<=0)return;let i=n.getData(`text/html`),a=this.quill.clipboard.convert({html:i}).ops.filter(e=>e.attributes?.[t.tableCellInner]);a.length!==0&&Jn({quill:this.quill,talbeModule:this.tableModule},r,a)};keyboardHandler=async e=>{if(e.ctrlKey)switch(e.key){case`c`:case`x`:await Mr(this.tableModule,this.selectedTds,e.key===`x`);break}else (e.key===`Backspace`||e.key===`Delete`)&&this.removeCellBySelectedTds()};updateWhenTextChange=t=>{t===e.events.TEXT_CHANGE&&(this.table&&!this.quill.root.contains(this.table)?this.setSelectionTable(void 0):this.updateAfterEvent())};updateAfterEvent=()=>{for(let e of this.selectedTds)if(!e.domNode.isConnected){this.selectedTds=[];break}this.updateWithSelectedTds()};removeCellBySelectedTds(){let t=this.quill.getSelection(),n=document.activeElement;if(!(t||!this.quill.root.contains(n))){if(this.table){let t=e.find(this.table),n=t.descendants(H);if(this.selectedTds.length===n.length){t.remove();return}}for(let e of this.selectedTds){let t=e.clone();t.appendChild(e.scroll.create(`block`)),e.parent.insertBefore(t,e),e.remove()}}}setSelectedTds(e){let t=new Set(this.selectedTds),n=this.selectedTds.length===e.length&&e.every(e=>t.has(e));this.selectedTds=e,n||this.quill.emitter.emit(r.TABLE_SELECTION_CHANGE,this,this.selectedTds)}quillSelectionChangeHandler=(n,r,i)=>{if(i!==e.sources.API&&n&&!this.quill.composition.isComposing&&this.selectedTds.length>0){let e=this.quill.getFormat(n),[r]=this.quill.getLine(n.index),i=!!e[t.tableCellInner]&&!!r,a=r&&this.selectedTds.some(e=>e.domNode.contains(r.domNode));if(i&&!a)try{let e=u(r,t.tableCellInner);this.setSelectedTds([e]),this.updateWithSelectedTds()}catch{}else i&&a||this.hide()}};setSelectionData(e,t){let{anchorNode:n,anchorOffset:r,focusNode:i,focusOffset:a}=t;if(!n||!i)return;let o=document.createRange(),s=this.selectionDirectionUp(t);s?(o.setStart(n,r),o.setEnd(n,r)):(o.setStart(n,r),o.setEnd(i,a)),e.removeAllRanges(),e.addRange(o),s&&e.extend(i,a)}selectionDirectionUp(e){let{anchorNode:t,anchorOffset:n,focusNode:r,focusOffset:i}=e;if(!t||!r)return!1;if(t===r)return n>i;let a=t.compareDocumentPosition(r);return a&Node.DOCUMENT_POSITION_CONTAINS||a&Node.DOCUMENT_POSITION_CONTAINED_BY?(a&Node.DOCUMENT_POSITION_FOLLOWING)!==0:(a&Node.DOCUMENT_POSITION_PRECEDING)!==0}resolveOptions(e){return Object.assign({selectColor:`#0589f340`},e)}getSelectedTdsFormat(){if(this.selectedTds.length<=0)return{};let e=[];for(let t of this.selectedTds){let n=t.offset(this.quill.scroll),r=t.length();e.push(this.quill.getFormat(n,r))}let t={},n=e[0];for(let[r,i]of Object.entries(n))e.every(e=>e[r]===i)&&(t[r]=i);return t}selectionChangeHandler=()=>{let n=window.getSelection();if(!n)return;let{anchorNode:r,focusNode:i,anchorOffset:a,focusOffset:o}=n;if(!r||!i)return;let s=e.find(r),c=e.find(i);if(!s||!c||s.scroll!==this.quill.scroll||c.scroll!==this.quill.scroll)return;let l=f(s),u=f(c),d=l.has(t.tableColgroup),p=u.has(t.tableColgroup);if(d||p){let e=r,s=a,c=i,f=o;if(d){let n=l.get(t.tableWrapper).descendants(H);n.length>0&&(e=n[0].domNode,s=0)}if(p){let e=u.get(t.tableWrapper).descendants(H);e.length>0&&(c=e[0].domNode,f=0)}this.setSelectionData(n,{anchorNode:e,anchorOffset:s,focusNode:c,focusOffset:f});return}let m=l.has(t.tableCellInner),h=u.has(t.tableCellInner),g=m&&h;if(g){let e=l.get(t.tableCellInner),n=u.get(t.tableCellInner);g&&=e!==n}if(m&&h&&g||!m&&h||!h&&m){this.setSelectionData(n,this.lastSelection),this.selectedTds.length>0&&this.hide();return}this.lastSelection={anchorNode:r,anchorOffset:a,focusNode:i,focusOffset:o}};helpLinesInitial(){this.cellSelectWrap.style.setProperty(`--select-color`,this.options.selectColor);let e=document.createElement(`div`);return e.classList.add(this.bem.be(`line`)),this.cellSelectWrap.appendChild(e),e}computeSelectedTds(t,n){if(!this.table)return[];let r=e.find(this.table);if(!r)return[];let i=new Set(r.descendants(W).map((e,t)=>(e.index=t,e))),a=this.getScrollPositionDiff(),{rect:o}=Y(r);if(!o)return[];let s=t.x+a.x,c=t.y+a.y,l={x:Math.max(o.left,Math.min(n.x,s)),y:Math.max(o.top,Math.min(n.y,c)),x1:Math.min(o.right,Math.max(n.x,s)),y1:Math.min(o.bottom,Math.max(n.y,c))},u=new Set,d=!0;for(;d;){d=!1;for(let e of i){e.__rect||=e.domNode.getBoundingClientRect();let{x:t,y:n,right:r,bottom:a}=e.__rect;if(en({x:Math.floor(l.x),y:Math.floor(l.y),x1:Math.floor(l.x1),y1:Math.floor(l.y1)},{x:Math.floor(t),y:Math.floor(n),x1:Math.floor(r),y1:Math.floor(a)},0,!1)){u.add(e),i.delete(e),l={x:Math.min(l.x,t),y:Math.min(l.y,n),x1:Math.max(l.x1,r),y1:Math.max(l.y1,a)},d=!0;break}}}for(let e of[...u,...i])delete e.__rect;return this.boundary=tn({...l,width:l.x1-l.x,height:l.y1-l.y},this.quill.root),Array.from(u).toSorted((e,t)=>e.index-t.index).map(e=>(delete e.index,e.getCellInner()))}getScrollPositionDiff(){let{x:e,y:t}=this.getTableViewScroll(),{x:n,y:r}=on(this.quill.root);return this.selectedTableScrollX=e,this.selectedTableScrollY=t,this.selectedEditorScrollX=n,this.selectedEditorScrollY=r,this.startScrollRecordPosition.reduce((e,{x:t,y:n},r)=>{let{x:i,y:a}=on(this.scrollRecordEls[r]);return e.x+=t-i,e.y+=n-a,e},{x:0,y:0})}recordScrollPosition(){this.clearRecordScrollPosition();for(let e of this.scrollRecordEls)this.startScrollRecordPosition.push(on(e))}clearRecordScrollPosition(){this.startScrollRecordPosition=[]}tableSelectHandler(t){let{button:n,target:r,clientX:i,clientY:a}=t,o=r.closest(`table`),s=r.closest(`caption`);if(n!==0||!o||s)return;this.setSelectionTable(o);let c=o.dataset.tableId,l={x:i,y:a};this.recordScrollPosition(),this.setSelectedTds(this.computeSelectedTds(l,l)),this.show();let u=e=>{this.dragging=!0;let{button:t,target:n,clientX:r,clientY:i}=e,a=n.closest(`.ql-table`),o=n.closest(`caption`);if(t!==0||o||!a||a.dataset.tableId!==c)return;let s={x:r,y:i};this.setSelectedTds(this.computeSelectedTds(l,s)),this.selectedTds.length>1&&this.quill.blur(),this.update(),this.autoScroller.updateMousePosition(r,i)},d=()=>{document.body.removeEventListener(`mousemove`,u,!1),document.body.removeEventListener(`mouseup`,d,!1),this.autoScroller.stop(),this.dragging=!1,this.clearRecordScrollPosition()};document.body.addEventListener(`mousemove`,u,!1),document.body.addEventListener(`mouseup`,d,!1);let f=e.find(o);if(!f)return;let p=f.parent.domNode;this.autoScroller.updateMousePosition(i,a),this.autoScroller.start(p)}updateWithSelectedTds(){if(this.selectedTds.length<=0){this.hide();return}let e={x:1/0,y:1/0},t={x:-1/0,y:-1/0};for(let n of this.selectedTds){let r=n.parent.domNode.getBoundingClientRect();e.x=Math.min(e.x,r.left),e.y=Math.min(e.y,r.top),t.x=Math.max(t.x,r.right),t.y=Math.max(t.y,r.bottom)}this.setSelectedTds(this.computeSelectedTds(e,t)),this.selectedTds.length>0?this.update():this.hide()}update(){if(!this.table){this.hide();return}if(this.selectedTds.length===0||!this.boundary)return;let{x:e,y:t}=on(this.quill.root),{x:n,y:i}=this.getTableViewScroll(),a=this.table.parentElement.getBoundingClientRect(),o=this.quill.root.getBoundingClientRect(),s=a.x-o.x,c=a.y-o.y;Object.assign(this.cellSelect.style,{left:`${this.selectedEditorScrollX*2-e+this.boundary.x+this.selectedTableScrollX-n-s}px`,top:`${this.selectedEditorScrollY*2-t+this.boundary.y+this.selectedTableScrollY-i-c}px`,width:`${this.boundary.width}px`,height:`${this.boundary.height}px`}),Object.assign(this.cellSelectWrap.style,{left:`${s}px`,top:`${c}px`,width:`${a.width}px`,height:`${a.height}px`}),this.quill.emitter.emit(r.TABLE_SELECTION_DISPLAY_CHANGE,this)}getTableViewScroll(){return this.table?on(this.table.parentElement):{x:0,y:0}}setSelectionTable(e){this.table!==e&&(this.table=e,this.table?this.scrollRecordEls.push(this.table.parentElement):this.scrollRecordEls.pop())}showDisplay(){Object.assign(this.cellSelectWrap.style,{display:`block`}),this.isDisplaySelection=!0,this.table&&this.resizeObserver.observe(this.table)}show(){this.table&&(L.call(this),this.showDisplay(),this.update(),this.quill.root.addEventListener(`keydown`,this.keyboardHandler),I.call(this,this.quill.root,()=>{this.update()}),I.call(this,this.table.parentElement,()=>{this.update()}))}hideDisplay(){Object.assign(this.cellSelectWrap.style,{display:`none`}),this.isDisplaySelection=!1,this.table&&this.resizeObserver.unobserve(this.table)}hide(){L.call(this),this.quill.root.removeEventListener(`keydown`,this.keyboardHandler),this.hideDisplay(),this.boundary=null,this.setSelectedTds([]),this.setSelectionTable(void 0)}destroy(){super.destroy(),this.resizeObserver.disconnect(),this.hide(),this.cellSelectWrap.remove(),L.call(this),document.removeEventListener(`paste`,this.handlePaste),document.removeEventListener(`selectionchange`,this.selectionChangeHandler),this.quill.off(r.AFTER_TABLE_RESIZE,this.updateAfterEvent),this.quill.off(e.events.EDITOR_CHANGE,this.updateWhenTextChange),this.quill.off(e.events.SELECTION_CHANGE,this.quillSelectionChangeHandler)}};const Qr=e.import(`parchment`),$=e.import(`delta`),$r=e.import(`ui/icons`),ei=e.import(`blots/break`),ti=e.import(`blots/block`),ni=e.import(`blots/block/embed`);function ri(e,{tableId:n,rowId:r,colId:i}){let a={tableId:n,rowId:r,colId:i,colspan:1,rowspan:1},o=e.create(t.tableCell,a),s=e.create(t.tableCellInner,a),c=e.create(`block`);return c.appendChild(e.create(`break`)),s.appendChild(c),o.appendChild(s),o}function ii(e){o.delete(t.tableCellInner),Object.assign(t,e.blotName||{}),Object.assign(n,e.tableUpSize||{}),Object.assign(r,e.tableUpEvent||{}),Object.assign(i,e.tableUpInternal||{}),si.moduleName=i.moduleName,si.toolName=t.tableWrapper,z.blotName=t.container,Bn.blotName=t.tableCaption,J.blotName=t.tableWrapper,K.blotName=t.tableMain,q.blotName=t.tableColgroup,G.blotName=t.tableCol,Un.blotName=t.tableHead,V.blotName=t.tableBody,Hn.blotName=t.tableFoot,U.blotName=t.tableRow,W.blotName=t.tableCell,H.blotName=t.tableCellInner,o.add(t.tableCellInner)}function ai(t,n){return T({onSelect:(r,i)=>{t.insertTable(r,i,e.sources.USER),n&&n.close()},customBtn:t.options.customBtn,texts:t.options.texts})}function oi(n){return{bindInHead:!1,key:n?`ArrowUp`:`ArrowDown`,collapsed:!0,format:[t.tableCellInner],handler(r,i){let a=n?`prev`:`next`,o=n?`tail`:`head`;if(i.line[a])return!0;let s=this.quill.selection.getBounds(r.index),c=i.line.domNode.getBoundingClientRect();if(!s||!c)return!0;if(n){if(s.top-c.top>3)return!0}else if(c.bottom-s.bottom>3)return!0;let l,u,f,p;try{[l,u,f,p]=d(i.line,[t.tableWrapper,t.tableMain,t.tableRow,t.tableCell])}catch{return!0}let m=u.getColIds(),h=l.descendants(Bn,0)[0],g;if(h){let e=window.getComputedStyle(h.domNode);g=a===`next`&&e.captionSide===`bottom`?h:a===`next`?l.next:h}else g=l[a];if(i.line[a]||!g)return!0;let _=f[a];if(_){let t=m.indexOf(p.colId),n=_.getCellByColId(m[t],a);if(!n)return!0;let r=n.children[o];r.children&&(r=r.children[o]);let s=r.offset(this.quill.scroll)+Math.min(i.offset,r.length()-1);this.quill.setSelection(s,0,e.sources.USER)}else{let t=g.offset(this.quill.scroll)+(n?g.length()-1:0);this.quill.setSelection(t,0,e.sources.USER)}return!1}}}var si=class r{static moduleName=i.moduleName;static toolName=t.tableWrapper;static keyboradHandler={"forbid remove table by backspace":{bindInHead:!0,key:`Backspace`,collapsed:!0,offset:0,handler(e,n){let r=this.quill.getLine(e.index)[0];return r.prev instanceof J?(r.prev.remove(),!1):!(n.format[t.tableCellInner]&&r.offset(u(r,t.tableCellInner))===0)}},"forbid remove table by delete":{bindInHead:!0,key:`Delete`,collapsed:!0,handler(e,n){let r=this.quill.getLine(e.index),i=r[0],a=r[1];return!((i.next instanceof J||i.next instanceof G)&&a===i.length()-1||n.format[t.tableCellInner]&&i===u(i,t.tableCellInner).children.tail&&a===i.length()-1)}},"table up":oi(!0),"table down":oi(!1),"table caption break":{bindInHead:!0,key:`Enter`,shiftKey:null,format:[t.tableCaption],handler(e,t){return!1}}};static register(){J.allowedChildren=[K],K.allowedChildren=[q,Bn,Un,V,Hn],K.requiredContainer=J,Bn.requiredContainer=K,q.allowedChildren=[G],q.requiredContainer=K,Un.allowedChildren=[U],Un.requiredContainer=K,V.allowedChildren=[U],V.requiredContainer=K,Hn.allowedChildren=[U],Hn.requiredContainer=K,U.allowedChildren=[W],W.allowedChildren=[H,ei],W.requiredContainer=U,H.requiredContainer=W;let n=new Set([`table`]),r=Object.entries(e.imports).filter(([e,t])=>{let r=e.split(`formats/`)[1];return e.startsWith(`formats/`)&&!n.has(r)&&(g(t,ti)||g(t,ni))}).reduce((e,[t,n])=>{let r=g(n,ni)?kn:Dn;return e[t]=class extends h(n,[r]){static register(){}},e},{});e.register({"blots/scroll":Fn,"blots/block":Dn,"blots/block/embed":kn,...r,[`blots/${t.container}`]:z,[`formats/${t.tableCell}`]:W,[`formats/${t.tableCellInner}`]:H,[`formats/${t.tableRow}`]:U,[`formats/${t.tableHead}`]:Un,[`formats/${t.tableBody}`]:V,[`formats/${t.tableFoot}`]:Hn,[`formats/${t.tableCol}`]:G,[`formats/${t.tableColgroup}`]:q,[`formats/${t.tableCaption}`]:Bn,[`formats/${t.tableMain}`]:K,[`formats/${t.tableWrapper}`]:J,"modules/clipboard":mr},!0)}quill;options;textOptionsInput;toolBox;fixTableByLisenter=_n(this.balanceTables,100);selector;resizeOb;editableObserver;modules={};get statics(){return this.constructor}constructor(e,t){this.quill=e,this.textOptionsInput=t?.texts,this.options=this.resolveOptions(t||{}),this.toolBox=this.initialContainer();let n=this.getToolbarPicker();n&&(n.label.innerHTML=this.options.icon,this.buildCustomSelect(this.options.customSelect,n),n.label.addEventListener(`mousedown`,()=>{if(!this.selector)return;let{leftLimited:e}=nn(this.selector.getBoundingClientRect());if(e){let e=n.label.getBoundingClientRect();Object.assign(n.options.style,{transform:`translateX(calc(-100% + ${e.width}px))`})}else Object.assign(n.options.style,{transform:void 0})}));let i=this.quill.getModule(`keyboard`);for(let e of Object.values(r.keyboradHandler))e.bindInHead?i.bindings[e.key].unshift(e):i.addBinding(e.key,e);this.initModules(),this.listenEditableChange(),this.quillHack(),this.listenBalanceCells()}initialContainer(){let e=l(`toolbox`),t=this.quill.addContainer(e.b());return this.resizeOb=new ResizeObserver(()=>{let e=this.quill.root.getBoundingClientRect(),{offsetLeft:n,offsetTop:r}=this.quill.root;Object.assign(t.style,{top:`${r}px`,left:`${n}px`,width:`${e.width}px`,height:`${e.height}px`})}),this.resizeOb.observe(this.quill.root),t}addContainer(e){if(C(e)){let t=document.createElement(`div`);for(let n of e.split(` `))t.classList.add(n);return this.toolBox.appendChild(t),t}else return this.toolBox.appendChild(e),e}getToolbarPicker(){let e=this.quill.getModule(`toolbar`);if(!e||!this.quill.theme.pickers)return;let[,t]=(e.controls||[]).find(([e])=>e===this.statics.toolName)||[];if(t?.tagName.toLocaleLowerCase()===`select`)return this.quill.theme.pickers.find(e=>e.select===t)}resolveOptions(e){let{texts:t,...n}=e;return Object.assign({customBtn:!1,texts:this.resolveTexts(t),full:!1,fullSwitch:!0,icon:$r.table,autoMergeCell:!0,pasteStyleSheet:!1,pasteDefaultTagStyle:!1,modules:[]},n)}resolveTexts(e){let t={fullCheckboxText:`Insert full width table`,customBtnText:`Custom`,confirmText:`Confirm`,cancelText:`Cancel`,rowText:`Row`,colText:`Column`,notPositiveNumberError:`Please enter a positive integer`,custom:`Custom`,clear:`Clear`,transparent:`Transparent`,perWidthInsufficient:`The percentage width is insufficient. To complete the operation, the table needs to be converted to a fixed width. Do you want to continue?`,CopyCell:`Copy cell`,CutCell:`Cut cell`,InsertTop:`Insert row above`,InsertRight:`Insert column right`,InsertBottom:`Insert row below`,InsertLeft:`Insert column Left`,MergeCell:`Merge Cell`,SplitCell:`Split Cell`,DeleteRow:`Delete Row`,DeleteColumn:`Delete Column`,DeleteTable:`Delete table`,BackgroundColor:`Set background color`,BorderColor:`Set border color`};if(x(e)){let n=e,r=this;return new Proxy(t,{get(e,t){if(typeof t!=`string`)return Reflect.get(e,t);let i=n.call(r,t);return C(i)?i:e[t]}})}return Object.assign(t,e)}async refreshUI(){this.options.texts=this.resolveTexts(this.textOptionsInput);let e=this.getToolbarPicker();e&&(e.label.innerHTML=this.options.icon,await this.buildCustomSelect(this.options.customSelect,e));for(let e of Object.values(this.modules))e&&typeof e.hide==`function`&&e.hide()}initModules(){if(this.quill.isEnabled())for(let e of this.options.modules)this.modules[e.module.moduleName]=new e.module(this,this.quill,e.options)}listenEditableChange(){this.editableObserver=new MutationObserver(e=>{for(let t of e)if(t.type===`attributes`&&t.attributeName===`contenteditable`){this.quill.root.getAttribute(`contenteditable`)===`false`?this.destroyModules():this.initModules();break}}),this.editableObserver.observe(this.quill.root,{attributes:!0,attributeFilter:[`contenteditable`]})}destroyModules(){for(let[e,t]of Object.entries(this.modules))if(t&&typeof t.destroy==`function`)try{t.destroy()}catch(t){console.warn(`Failed to destroy module ${e}:`,t)}this.modules={}}getModule(e){return this.modules[e]}quillHack(){let n=this.quill.getSemanticHTML;this.quill.originGetSemanticHTML=n,this.quill.getSemanticHTML=((r=0,i)=>{let a=n.call(this.quill,r,i),o=e.import(`formats/${t.tableWrapper}`),s=new DOMParser().parseFromString(a,`text/html`);for(let e of Array.from(s.querySelectorAll(`.${o.className} caption[contenteditable], .${o.className} .${W.className} > [contenteditable]`)))e.removeAttribute(`contenteditable`);return s.body.innerHTML});let r=this.quill.format;this.quill.originFormat=r,this.quill.format=function(n,a,o=e.sources.API){if(!(this.scroll.query(n).prototype instanceof Qr.EmbedBlot)){let s=this.getModule(i.moduleName),c=this.getSelection(!0),l=this.getFormat(c),u=s.getModule(i.tableSelectionName);if(!l[t.tableCellInner]&&u&&u.selectedTds.length>1){let t=u.selectedTds[u.selectedTds.length-1],n=t.offset(this.scroll);this.setSelection(n+t.length()-1,0,e.sources.SILENT),c=this.getSelection(!0),l=this.getFormat(c)}if(!l[t.tableCellInner]||c.length>0||s&&u&&u.selectedTds.length<=1)return r.call(this,n,a,o);if(s&&u&&u.selectedTds.length>0){let e=u.selectedTds,t=u.getSelectedTdsFormat()[n]===a?!1:a,r=new $,i=[];for(let t of e){let e=t.offset(this.scroll),n=t.length();i.push({index:e,length:n})}for(let[e,{index:a,length:o}]of i.entries()){let s=e===0?0:i[e-1].index+i[e-1].length;r.retain(a-s).retain(o,{[n]:t})}let s=this.updateContents(r,o);return this.blur(),s}}return r.call(this,n,a,o)};let a=this.quill.theme.modules.toolbar;if(a){let n=a.handlers?.indent;a.handlers.indent=function(t){let r=this.quill.getModule(i.moduleName).getModule(i.tableSelectionName);if(r&&r.selectedTds.length>1){let n=r.getSelectedTdsFormat(),i=Number.parseInt(n.indent||0,10),a=n.direction;if(t===`+1`||t===`-1`){let n=t===`+1`?1:-1;a===`rtl`&&(n*=-1),this.quill.format(`indent`,i+n,e.sources.USER)}return}if(n)return n.call(this,t)};let r=a.handlers?.clean;if(r){let n=(e,n,r=()=>``)=>{let i=this.quill.getText(e,n),[a,o]=this.quill.getLine(e+n),s=0,c=new $;a!=null&&(s=a.length()-o,c=a.delta().slice(o,o+s-1).insert(`
|
|
134
|
+
`));let l=this.quill.getContents(e,n+s),u=l.diff(new $().insert(i).concat(c)),d=0;return new $(u.ops.map(e=>{let{attributes:n,...i}=e;if(e.insert?d-=C(e.insert)?e.insert.length:1:e.retain?d+=re(e.retain)?e.retain:1:e.delete&&(d+=e.delete),n){let{[t.tableCellInner]:e,...a}=n;if(r){let e=l.slice(d-1,d).ops[0];if(e?.attributes?.[t.tableCellInner]){let{style:n,...o}=e.attributes[t.tableCellInner],s=r(n);return s?{...i,attributes:{...a,[t.tableCellInner]:{style:s,...o}}}:{...i,attributes:{...a,[t.tableCellInner]:o}}}}return{...i,attributes:{...a}}}return e}))};a.handlers.clean=function(a){let o=this.quill.getModule(i.moduleName),s=this.quill.getSelection();if(s&&s.length>0&&this.quill.getFormat(s)[t.tableCellInner]){let t=n(s.index,s.length,!1),r=new $().retain(s.index).concat(t);this.quill.updateContents(r,e.sources.USER);return}let c=o.getModule(i.tableSelectionName);if(o&&c&&c.selectedTds.length>0&&c.table){let t=e.find(c.table);if(!t){console.warn(`TableMainFormat not found`);return}let r=c.selectedTds,i=new Set,a=[];for(let e of r)if(e.parent instanceof W){for(let t of e.parent.getNearByCell(`top`))i.has(t)||(i.add(t),a.push({td:t,cleanBorder:`bottom`}));for(let t of e.parent.getNearByCell(`left`))i.has(t)||(i.add(t),a.push({td:t,cleanBorder:`right`}));i.add(e.parent),a.push({td:e.parent,cleanBorder:!0})}let o=t.descendants(W),s=new Map(o.map((e,t)=>[e,t]));a.sort((e,t)=>s.get(e.td)-s.get(t.td));let l=new $,u=0;for(let{td:e,cleanBorder:t}of a){let r=e.getCellInner().offset(this.quill.scroll),i=e.getCellInner().length(),a=n(r,i-1,e=>{if(!e||t===!0)return``;let n=fn(e);return pn(Object.keys(n).filter(e=>!e.startsWith(un(`border-${t}`))).reduce((e,t)=>(e[t]=n[t],e),{}))}),o=new $().retain(r-u).concat(a);l=l.concat(o),u=r+i}this.quill.updateContents(l,e.sources.USER),r.length>1&&this.quill.blur();return}return r.call(this,a)}}}}async buildCustomSelect(e,t){if(!e||!x(e))return;let n=document.createElement(`span`);if(n.classList.add(`ql-custom-select`),this.selector=await e(this,t),n.appendChild(this.selector),this.options.fullSwitch){let e=l(`creator`),t=document.createElement(`label`);t.classList.add(e.be(`checkbox`));let r=document.createElement(`input`);r.type=`checkbox`,r.checked=this.options.full,r.addEventListener(`change`,()=>{this.options.full=r.checked});let i=document.createElement(`span`);i.textContent=this.options.texts.fullCheckboxText,t.appendChild(r),t.appendChild(i),n.appendChild(t)}t.options.innerHTML=``,t.options.appendChild(n)}setCellAttrs(e,t,n,r=!1){if(e.length!==0)for(let i of e)i.setFormatValue(t,n,r)}getTextByCell(e){let t=``;for(let n of e){let e=n.offset(this.quill.scroll),r=n.length();for(let n of this.quill.getContents(e,r).ops)C(n.insert)&&(t+=n.insert)}return t}getHTMLByCell(e,n=!1){if(e.length===0)return``;let r=null;try{for(let n of e){let e=u(n,t.tableMain);if(r||=e,e!==r)return console.error(`tableMain is not same`),``}}catch{return console.error(`tds must be in same tableMain`),``}if(!r)return``;let i=this.quill.getIndex(r),a=r.length(),o=this.quill.getSemanticHTML(i,a),s=new DOMParser().parseFromString(o,`text/html`),c=Array.from(s.querySelectorAll(`col`)),l=c.map(e=>e.dataset.colId),d=[],f=new Set,p=new Set;for(let t of e){f.add(t.colId);let e=t.colId,n=l.indexOf(e);for(let e=0;e<t.colspan;e++)f.add(l[n+e]);p.add(`${t.rowId}-${t.colId}`)}for(let e=0;e<c.length;e++){let t=c[e];f.has(t.dataset.colId)?d.push(t.getAttribute(`width`)):(t.remove(),c.splice(e--,1))}let m=0,h=null;for(let e of Array.from(s.querySelectorAll(`td, th`)))if(p.has(`${e.dataset.rowId}-${e.dataset.colId}`))h!==e.dataset.rowId&&(m+=1,h=e.dataset.rowId);else{let t=e.parentElement;e.remove(),t&&t.children.length<=0&&t.remove()}let g=c.map(e=>G.value(e));if(r.full){let e=g.reduce((e,t)=>t.width+e,0);for(let[t,n]of g.entries())n.width=Math.round(n.width/e*100),c[t].setAttribute(`width`,`${n.width}%`)}else{let e=0;for(let t of g)e+=t.width;let t=s.querySelector(`table`);t.style.width=`${e}px`}if(n){let t=r.getRows();if(m===t.length)this.removeCol(e);else for(let t of e)t.domNode.innerHTML=`<p><br></p>`}return s.body.innerHTML}insertTable(r,i,a=e.sources.API){if(r>=30||i>=30)throw Error(`Both rows and columns must be less than 30.`);this.quill.focus();let o=this.quill.getSelection();if(o==null)return;let[s]=this.quill.getLeaf(o.index);if(!s)return;if(c(s))throw Error(`Not supported ${s.statics.blotName} insert into table.`);let l=R(),u=Array(i).fill(0).map(()=>R()),d=this.calculateTableCellBorderWidth(),f=getComputedStyle(this.quill.root),p=Number.parseInt(f.paddingLeft),m=Number.parseInt(f.paddingRight),h=this.quill.root.scrollHeight>this.quill.root.clientHeight?sn({target:this.quill.root}):0,g=Number.parseInt(f.width)-p-m-d-h,_=this.options.full?`${Math.max(1/i*100,n.colMinWidthPre)}%`:`${Math.max(Math.floor(g/i),n.colMinWidthPx)}px`,v=[{retain:o.index}],y=this.quill.getContents(o.index,1),[,b]=this.quill.getLine(o.index);y.ops[0].insert!==`
|
|
135
135
|
`&&b!==0&&v.push({insert:`
|
|
136
136
|
`});for(let e=0;e<i;e++)v.push({insert:{[t.tableCol]:{width:_,tableId:l,colId:u[e],full:this.options.full}}});for(let e=0;e<r;e++){let e=R();for(let n=0;n<i;n++)v.push({insert:`
|
|
137
137
|
`,attributes:{[t.tableCellInner]:{tableId:l,rowId:e,colId:u[n],rowspan:1,colspan:1}}})}this.quill.updateContents(new $(v),a),this.quill.setSelection(o.index+i,e.sources.SILENT),this.quill.focus()}calculateTableCellBorderWidth(){let e=`
|
|
@@ -142,5 +142,5 @@ import e from"quill";const t={container:`table-up-container`,tableCaption:`table
|
|
|
142
142
|
</tr>
|
|
143
143
|
</tbody>
|
|
144
144
|
</table>
|
|
145
|
-
`,t=document.createElement(`div`);t.className=J.className,t.innerHTML=e,t.style.position=`absolute`,t.style.left=`-9999px`,t.style.top=`-9999px`,t.style.visibility=`hidden`,this.quill.root.appendChild(t);let n=window.getComputedStyle(t.querySelector(`td`)),r=Number.parseFloat(n.borderWidth)||0;return this.quill.root.removeChild(t),r}fixUnusuaDeletelTable(e){let t=e.getColIds();if(t.length===0){e.remove();return}let n=e.getBodys(),r=e.tableId;for(let e of n){let n=e.getRows();if(n.length===0){e.remove();continue}let i=Array(n.length).fill(0).map(()=>Array(t.length).fill(!1));for(let[e,a]of n.entries()){let o=0,s=0,c=i[e],l=a.descendants(W);for(;s<t.length;){if(c[s]){s+=1;continue}let u=l[o];if(u?.colId!==t[s])a.insertBefore(
|
|
145
|
+
`,t=document.createElement(`div`);t.className=J.className,t.innerHTML=e,t.style.position=`absolute`,t.style.left=`-9999px`,t.style.top=`-9999px`,t.style.visibility=`hidden`,this.quill.root.appendChild(t);let n=window.getComputedStyle(t.querySelector(`td`)),r=Number.parseFloat(n.borderWidth)||0;return this.quill.root.removeChild(t),r}fixUnusuaDeletelTable(e){let t=e.getColIds();if(t.length===0){e.remove();return}let n=e.getBodys(),r=e.tableId;for(let e of n){let n=e.getRows();if(n.length===0){e.remove();continue}let i=Array(n.length).fill(0).map(()=>Array(t.length).fill(!1));for(let[e,a]of n.entries()){let o=0,s=0,c=i[e],l=a.descendants(W);for(;s<t.length;){if(c[s]){s+=1;continue}let u=l[o];if(u?.colId!==t[s])a.insertBefore(ri(this.quill.scroll,{tableId:r,colId:t[s],rowId:a.rowId}),u);else{e+u.rowspan-1>=n.length&&(u.getCellInner().rowspan=n.length-e);let{colspan:t,rowspan:r}=u;if(t>1)for(let e=1;e<t;e++)c[s+e]=!0;if(r>1)for(let n=e+1;n<e+r;n++)for(let e=0;e<t;e++)i[n][s+e]=!0;o+=1}s+=1}if(o<l.length)for(let e=o;e<l.length;e++)l[e].remove()}}}balanceTables(){for(let e of this.quill.scroll.descendants(K))e.checkEmptyCol(this.options.autoMergeCell),e.checkEmptyRow(this.options.autoMergeCell),this.fixUnusuaDeletelTable(e)}listenBalanceCells(){this.quill.on(e.events.SCROLL_OPTIMIZE,t=>{t.some(e=>[`TD`,`TR`,`TBODY`,`TABLE`].includes(e.target.tagName)?(this.fixTableByLisenter(),!0):!1);for(let n of t){let t=n.target;if(t.tagName===`TABLE`){let n=e.find(t);if(n){n.sortMergeChildren();break}}}})}deleteTable(e){e.length!==0&&u(e[0],t.tableMain)?.remove()}appendRow(e,n){if(e.length<=0)return;let r=e[n?e.length-1:0],[i,a]=d(r,[t.tableMain,t.tableRow]),o=i.getRows().indexOf(a)+(n?r.rowspan:0);i.insertRow(o)}appendCol(e,n){if(e.length<=0)return;let[r]=e.reduce((e,t)=>{let r=t.getColumnIndex();return(!n&&r<=e[1]||n&&r>=e[1])&&(e=[t,r]),e},[e[0],e[0].getColumnIndex()]),i=r.getColumnIndex()+(n?r.colspan:0),a=u(r,t.tableMain),o=a.tableId,s=R(),[c]=a.descendants(q);c&&c.insertColByIndex(i,{tableId:o,colId:s,width:a.full?6:160,full:a.full});let l=a.getRows(),d=[],f=0;for(let e of Object.values(l)){let t=d.shift()||0;if(f>0){--f;continue}let n=e.insertCell(i-t,{tableId:o,rowId:e.rowId,colId:s,rowspan:1,colspan:1});n.skipRowNum&&(f+=n.skipRowNum);for(let[e,t]of n.entries())d[e]=(d[e]||0)+t}}fixTableByRemove(e){if(!this.options.autoMergeCell)return;let t=e.getRows(),n=e.getCols(),r=n.reduce((e,t)=>(e[t.colId]=0,e),{}),i=t.toReversed(),a=[];for(let[e,n]of i.entries()){let i=t.length-e-1;n.children.length<=0?a.push(i):n.foreachCellInner(e=>{let t=a.reduce((t,n)=>e.rowspan+i>n?t+1:t,0);e.rowspan-=t,r[e.colId]+=1})}let o=0;for(let e of Object.values(r))if(e===0){let e=[],n=0;for(let r of Object.values(t)){let t=e.shift()||0,i=[];n>0?(i=r.getCellByColumIndex(o-t)[2],--n):(i=r.removeCell(o-t),i.skipRowNum&&(n+=i.skipRowNum));for(let[t,n]of i.entries())e[t]=(e[t]||0)+n}}else o+=1;for(let e of n)r[e.colId]===0&&(e.prev?e.prev.width+=e.width:e.next&&(e.next.width+=e.width),e.remove())}removeRow(e){if(e.length<=0)return;let n=e[0],r=u(n,t.tableMain),i=r.getRows(),a=i.length,o=-1;for(let n of e){let e=u(n,t.tableRow),r=i.indexOf(e);r<a&&(a=r),r+n.rowspan>o&&(o=r+n.rowspan)}let s={};for(let e=a;e<Math.min(i.length,o);e++){let t=i[e];t.foreachCellInner(t=>{t.rowspan+e>o&&(s[t.colId]={rowspan:t.rowspan+e-o,colspan:t.colspan,colIndex:t.getColumnIndex()}),t.parent.remove()}),t.length()===0&&t.remove()}if(i[o]){let e=i[o],t=r.tableId;for(let[n,{colIndex:r,colspan:i,rowspan:a}]of Object.entries(s))e.insertCell(r,{tableId:t,rowId:e.rowId,colId:n,colspan:i,rowspan:a})}this.fixTableByRemove(r)}removeCol(e){if(e.length<=0)return;let n=e[0],r=u(n,t.tableMain),i={};for(let t of e)i[t.rowId]||(i[t.rowId]=0),i[t.rowId]+=t.colspan;let a=Math.max(...Object.values(i)),o=n.getColumnIndex(),s=r.descendants(U);for(let e=0;e<a;e++){let e=[],t=0;for(let n of Object.values(s)){let r=e.shift()||0;if(t>0){--t;continue}let i=n.removeCell(o-r);i.skipRowNum&&(t+=i.skipRowNum);for(let[t,n]of i.entries())e[t]=(e[t]||0)+n}}let[c]=r.descendants(q);if(c)for(let e=0;e<a;e++)c.removeColByIndex(o);this.fixTableByRemove(r)}mergeCells(n){if(n.length<=1)return;let r=n[0],i=r.getTableBody(),a=r.getTableRow();if(!i||!a)return;for(let e=1;e<n.length;e++){let t=n[e],r=t.getTableBody();if(r&&r!==i){let e=t.getTableRow();e&&(a.parent.insertBefore(e,a.next),a=e)}}i.convertBody(r.wrapTag);let o=n.reduce((e,t,n)=>{let r=t.colId;e[0][r]||(e[0][r]=0),e[0][r]+=t.rowspan;let i=t.rowId;return e[1][i]||(e[1][i]=0),e[1][i]+=t.colspan,n!==0&&(t.length()>1&&t.moveChildren(e[2]),t.parent.remove()),e},[{},{},r]),s=Math.max(...Object.values(o[0])),c=Math.max(...Object.values(o[1])),l=o[2];l.colspan=c,l.rowspan=s;let d=this.quill.getIndex(l);this.quill.setSelection({index:d,length:0},e.sources.SILENT);let f=u(l,t.tableMain);this.fixTableByRemove(f)}splitCell(e){if(e.length!==1)return;let n=e[0];if(n.colspan===1&&n.rowspan===1)return;let[r,i]=d(n,[t.tableMain,t.tableRow]),a=r.getRows(),o=r.tableId,s=n.getColumnIndex(),c=r.getColIds().slice(s,s+n.colspan).toReversed(),{emptyRow:l,...u}=n.formats()[t.tableCellInner],f=a.indexOf(i);if(f===-1)return;let p=a[f],m=n.rowspan;for(n.colspan=1,n.rowspan=1;p&&m>0;){for(let e of c)p===i&&e===n.colId||p.insertCell(s+(p===i?1:0),{...u,tableId:o,rowId:p.rowId,colId:e,rowspan:1,colspan:1});--m,f+=1,p=a[f]}}convertTableBodyByCells(e,t,n){let r,i,a=e.getRows();for(let e of t){let t=e.getTableRow();if(!t)continue;let n=a.indexOf(t);ae(r)&&(r=n),ae(i)&&(i=n),n<r?(i=r,r=n):n>i&&(i=n)}if(ae(r)||ae(i)){console.warn(`TableRow not found`);return}let o=a[r],s=a[i];e.split(s.offset(e)+s.length());let c=e.split(o.offset(e)),l=c.getRows(),[u]=c.getBodys(),d=u.clone();c.appendChild(d);for(let e of l)e.length()>0&&d.appendChild(e);d.convertBody(n),u.remove()}},ci=si;export{kn as BlockEmbedOverride,Dn as BlockOverride,z as ContainerFormat,Fn as ScrollOverride,Yr as Scrollbar,Kn as TableAlign,V as TableBodyFormat,Bn as TableCaptionFormat,W as TableCellFormat,H as TableCellInnerFormat,mr as TableClipboard,G as TableColFormat,q as TableColgroupFormat,Gn as TableDomSelector,Hn as TableFootFormat,Un as TableHeadFormat,K as TableMainFormat,Pr as TableMenuCommon,Fr as TableMenuContextmenu,Ir as TableMenuSelect,Wr as TableResizeBox,Vr as TableResizeCommon,Br as TableResizeCommonHelper,Gr as TableResizeLine,Kr as TableResizeScale,U as TableRowFormat,Zr as TableSelection,si as TableUp,Xr as TableVirtualScrollbar,J as TableWrapperFormat,rr as applyCellUpdates,t as blotName,le as createColorPicker,T as createSelectBox,Qt as createTooltip,ci as default,ai as defaultCustomSelect,u as findParentBlot,d as findParentBlots,$n as getCellPositions,Rr as getColRect,Zn as getCountByPosition,Yn as getTableCellStructure,Y as getTableMainRect,er as groupCellByRow,zr as isCellsSpan,Lr as isTableAlignRight,Xn as parsePasteDelta,Jn as pasteCells,tr as pasteWithLoop,Qn as pasteWithStructure,nr as prepareCellUpdate,R as randomId,ir as removeOverlappingCells,X as tableMenuTools,r as tableUpEvent,i as tableUpInternal,n as tableUpSize,ii as updateTableConstants};
|
|
146
146
|
//# sourceMappingURL=index.js.map
|