quill-table-up 2.3.0 → 2.4.0
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/README.md +1 -0
- package/dist/index.css +1 -1
- package/dist/index.d.ts +1001 -937
- package/dist/index.js +137 -2
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +140 -2
- package/dist/index.umd.js.map +1 -1
- package/package.json +22 -23
- package/src/__tests__/e2e/table-keyboard-handler.test.ts +218 -0
- package/src/__tests__/e2e/table-menu.test.ts +9 -8
- package/src/__tests__/e2e/table-selection.test.ts +137 -131
- package/src/__tests__/unit/table-blots.test.ts +102 -1
- package/src/__tests__/unit/table-cell-merge.test.ts +336 -1
- package/src/__tests__/unit/table-clipboard.test.ts +62 -44
- package/src/__tests__/unit/table-insert.test.ts +39 -2
- package/src/__tests__/unit/table-redo-undo.test.ts +69 -0
- package/src/__tests__/unit/table-remove.test.ts +4 -2
- package/src/__tests__/unit/utils.ts +22 -4
- package/src/__tests__/unit/vitest.d.ts +4 -1
- package/src/formats/index.ts +6 -0
- package/src/formats/overrides/block-embed.ts +54 -0
- package/src/formats/overrides/block.ts +10 -4
- package/src/formats/overrides/index.ts +1 -0
- package/src/formats/table-cell-format.ts +39 -6
- package/src/formats/table-cell-inner-format.ts +70 -21
- package/src/formats/table-main-format.ts +92 -1
- package/src/formats/table-row-format.ts +13 -2
- package/src/formats/table-wrapper-format.ts +7 -2
- package/src/modules/table-clipboard.ts +30 -35
- package/src/modules/table-resize/table-resize-box.ts +2 -2
- package/src/modules/table-resize/table-resize-common.ts +1 -1
- package/src/modules/table-resize/table-resize-line.ts +1 -1
- package/src/modules/table-resize/table-resize-scale.ts +1 -1
- package/src/modules/table-scrollbar.ts +5 -5
- package/src/modules/table-selection.ts +52 -31
- package/src/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/src/style/index.less +1 -0
- package/src/style/table-selection.less +1 -0
- package/src/table-up.ts +69 -30
- package/src/utils/blot-helper.ts +7 -4
- package/src/utils/index.ts +1 -1
- package/src/utils/{scroll-event-handle.ts → scroll-event-helper.ts} +7 -0
- package/src/utils/types.ts +2 -0
package/dist/index.js
CHANGED
|
@@ -1,2 +1,137 @@
|
|
|
1
|
-
import t from"quill";const e={container:"table-up-container",tableCaption:"table-up-caption",tableWrapper:"table-up",tableMain:"table-up-main",tableColgroup:"table-up-colgroup",tableCol:"table-up-col",tableBody:"table-up-body",tableRow:"table-up-row",tableCell:"table-up-cell",tableCellInner:"table-up-cell-inner"},s={colMinWidthPre:5,colMinWidthPx:40,colDefaultWidth:100,rowMinHeightPx:36},o={AFTER_TABLE_RESIZE:"after-table-resize"},i={moduleName:"table-up"},n=[["rgb(255, 255, 255)","rgb(0, 0, 0)","rgb(72, 83, 104)","rgb(41, 114, 244)","rgb(0, 163, 245)","rgb(49, 155, 98)","rgb(222, 60, 54)","rgb(248, 136, 37)","rgb(245, 196, 0)","rgb(153, 56, 215)"],["rgb(242, 242, 242)","rgb(127, 127, 127)","rgb(243, 245, 247)","rgb(229, 239, 255)","rgb(229, 246, 255)","rgb(234, 250, 241)","rgb(254, 233, 232)","rgb(254, 243, 235)","rgb(254, 249, 227)","rgb(253, 235, 255)"],["rgb(216, 216, 216)","rgb(89, 89, 89)","rgb(197, 202, 211)","rgb(199, 220, 255)","rgb(199, 236, 255)","rgb(195, 234, 213)","rgb(255, 201, 199)","rgb(255, 220, 196)","rgb(255, 238, 173)","rgb(242, 199, 255)"],["rgb(191, 191, 191)","rgb(63, 63, 63)","rgb(128, 139, 158)","rgb(153, 190, 255)","rgb(153, 221, 255)","rgb(152, 215, 182)","rgb(255, 156, 153)","rgb(255, 186, 132)","rgb(255, 226, 112)","rgb(213, 142, 255)"],["rgb(165, 165, 165)","rgb(38, 38, 38)","rgb(53, 59, 69)","rgb(20, 80, 184)","rgb(18, 116, 165)","rgb(39, 124, 79)","rgb(158, 30, 26)","rgb(184, 96, 20)","rgb(163, 130, 0)","rgb(94, 34, 129)"],["rgb(147, 147, 147)","rgb(13, 13, 13)","rgb(36, 39, 46)","rgb(12, 48, 110)","rgb(10, 65, 92)","rgb(24, 78, 50)","rgb(88, 17, 14)","rgb(92, 48, 10)","rgb(102, 82, 0)","rgb(59, 21, 81)"]],l="table-up",r=new Set([e.tableCellInner]);function a(t){return!(!t||!t.parent)&&(e=t.parent,!!r.has(e.statics.blotName)||a(t.parent));var e}function c(t,e=l){const s=e?`${e}-`:"";return{b:()=>`${s}${t}`,be:e=>e?`${s}${t}__${e}`:"",bm:e=>e?`${s}${t}--${e}`:"",bem:(e,o)=>e&&o?`${s}${t}__${e}--${o}`:"",ns:t=>t?`${s}${t}`:"",bs:e=>e?`${s}${t}-${e}`:"",cv:t=>t?`--${s}${t}`:"",is:t=>`is-${t}`}}function d(t,e){let s=t.parent;for(;s&&s.statics.blotName!==e&&s!==t.scroll;)s=s.parent;if(s===t.scroll)throw new Error(`${t.statics.blotName} must be a child of ${e}`);return s}function h(t,e){const s=new Array(e.length),o=new Map(e.map(((t,e)=>[t,e])));let i=t.parent;for(;i&&i!==t.scroll&&0!==o.size;){if(o.has(i.statics.blotName)){s[o.get(i.statics.blotName)]=i,o.delete(i.statics.blotName)}i=i.parent}if(o.size>0)throw new Error(`${t.statics.blotName} must be a child of ${Array.from(o.keys()).join(", ")}`);return s}function u(t){const e=new Map;let s=t;for(;s&&"scroll"!==s.statics.blotName;)e.set(s.statics.blotName,s),s=s.parent;return e}function p(t,e){const s=[],o=t.children.iterator();let i=null;for(;i=o();)i instanceof e&&s.push(i);return s}function b(t,e){for(const s of Object.getOwnPropertyNames(e))/^constructor$/.test(s)||Object.defineProperty(t,s,Object.getOwnPropertyDescriptor(e,s));return t}function m(t,e){return t=Math.min(e,Math.max(0,Number.parseFloat(`${t}`))),Math.abs(t-e)<1e-6?1:t%e/Number.parseFloat(e)}function f(t){return{h:Math.min(360,Math.max(0,t.h)),s:Math.min(100,Math.max(0,t.s)),b:Math.min(100,Math.max(0,t.b)),a:Math.min(1,Math.max(0,t.a))}}function g(t){let{r:e,g:s,b:o,a:i}=t;e=m(e,255),s=m(s,255),o=m(o,255);const n=Math.max(e,s,o),l=Math.min(e,s,o);let r;const a=n,c=n-l,d=0===n?0:c/n;if(n===l)r=0;else{switch(n){case e:r=(s-o)/c+(s<o?6:0);break;case s:r=(o-e)/c+2;break;case o:r=(e-s)/c+4}r/=6}return{h:360*r,s:100*d,b:100*a,a:i}}function w(t){let{h:e,s:s,b:o,a:i}=t;e=6*m(e,360),s=m(s,100),o=m(o,100);const n=Math.floor(e),l=e-n,r=o*(1-s),a=o*(1-l*s),c=o*(1-(1-l)*s),d=n%6,h=[o,a,r,r,c,o][d],u=[c,o,o,a,r,r][d],p=[r,r,c,o,o,a][d];return{r:Math.round(255*h),g:Math.round(255*u),b:Math.round(255*p),a:i}}function v(t){const e=[t.r.toString(16),t.g.toString(16),t.b.toString(16),Math.round(255*t.a).toString(16)];for(const t in e)1===e[t].length&&(e[t]=`0${e[t]}`);return e.join("")}const C=t=>v(w(t)),x=t=>"function"==typeof t,y=Array.isArray,M=t=>"string"==typeof t,I=t=>null!==t&&"object"==typeof t;function N(t){const{type:e="default",content:s}=t||{},o=c("button"),i=document.createElement("button");return i.classList.add(o.b(),e),s&&(M(s)?i.textContent=s:i.appendChild(s)),i}function T(t={}){const e=230,s=150,o=10;let i=g((n=(n=t.color||"#ff0000").startsWith("#")?n.slice(1):n,{r:Number.parseInt(n.slice(0,2),16),g:Number.parseInt(n.slice(2,4),16),b:Number.parseInt(n.slice(4,6),16),a:Number((Number.parseInt(n.slice(6,8)||"ff",16)/255).toFixed(2))}));var n;const l=c("color-picker"),r=document.createElement("div");r.classList.add(l.b());const a=document.createElement("div");a.classList.add(l.be("content"));const d=document.createElement("div");d.classList.add(l.be("selector"));const h=document.createElement("div");h.classList.add(l.be("background")),d.appendChild(h);const u=document.createElement("div");u.classList.add(l.be("background-handle")),h.appendChild(u);const p=document.createElement("div");p.classList.add(l.be("alpha"));const b=document.createElement("div");b.classList.add(l.be("alpha-bg"));const m=document.createElement("div");m.classList.add(l.be("alpha-handle")),p.appendChild(b),p.appendChild(m);const x=document.createElement("div");x.classList.add(l.be("hue"));const y=document.createElement("div");y.classList.add(l.be("hue-handle")),x.appendChild(y);const M=document.createElement("div");M.classList.add(l.be("action"));const[I,N,T,L]=["r","g","b","a"].map((t=>{const e=document.createElement("div");e.classList.add(l.be("action-item"),t);const s=document.createElement("label");s.textContent=t.toUpperCase();const o=document.createElement("input");return o.classList.add(l.be("input")),o.addEventListener("input",(()=>{o.value=o.value.replaceAll(/[^0-9]/g,"")})),o.addEventListener("change",(()=>{let e=Math.round(Number(o.value));"a"===t&&(e/=100);A(f(g(Object.assign({},w(i),{[t]:e})))),k()})),e.appendChild(s),e.appendChild(o),M.appendChild(e),o}));a.appendChild(x),a.appendChild(d),a.appendChild(p),r.appendChild(a),r.appendChild(M);let E=!1,S=!1,B=!1;function R(){const t=C(i);for(const[e,s]of[I,N,T].entries())s.value=String(Number.parseInt(t[2*e]+t[2*e+1],16));L.value=String((100*i.a).toFixed(0))}function k(){Object.assign(u.style,{left:`${Math.floor(e*i.s/100)}px`,top:`${Math.floor(s*(100-i.b)/100)}px`}),d.style.backgroundColor=`#${v(w({h:i.h,s:100,b:100,a:1}))}`,y.style.top=`${Math.floor(s-s*i.h/360)}px`,m.style.left=100*i.a+"%",function(){const{r:t,g:e,b:s}=w(i);b.style.background=`linear-gradient(to right, rgba(${t}, ${e}, ${s}, 0) 0%, rgba(${t}, ${e}, ${s}, 1) 100%)`}(),R()}function A(e){i=f(Object.assign({},i,e)),R(),t.onChange&&t.onChange(`#${C(i)}`)}function O(t){const o=d.getBoundingClientRect(),i=o.top+(window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0),n=o.left+document.body.scrollLeft;A({s:Math.floor(100*Math.max(0,Math.min(e,t.pageX-n))/e),b:Math.floor(100*(s-Math.max(0,Math.min(s,t.pageY-i)))/s)}),k()}function z(t){const e=x.getBoundingClientRect().top+(window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0);A({h:Math.floor(360*(s-Math.max(0,Math.min(s,t.pageY-e)))/s)}),k()}function q(t){const{pageX:e}=t,s=p.getBoundingClientRect();let i=e-s.left;i=Math.max(o/2,i),i=Math.min(i,s.width-o/2),A({a:Math.round((i-5)/(s.width-10)*100)/100}),k()}function $(t){E&&(t.preventDefault(),O(t)),S&&(t.preventDefault(),z(t)),B&&(t.preventDefault(),q(t))}function H(){document.removeEventListener("mousemove",$),document.removeEventListener("mouseup",H),E=!1}function W(){document.removeEventListener("mousemove",$),document.removeEventListener("mouseup",W),S=!1}function D(){document.removeEventListener("mousemove",$),document.removeEventListener("mouseup",D),B=!1}return d.addEventListener("mousedown",(function(t){document.addEventListener("mousemove",$),document.addEventListener("mouseup",H),E=!0,O(t)})),x.addEventListener("mousedown",(function(t){document.addEventListener("mousemove",$),document.addEventListener("mouseup",W),S=!0,z(t)})),p.addEventListener("mousedown",(function(t){document.addEventListener("mousemove",$),document.addEventListener("mouseup",D),B=!0,q(t)})),k(),r}let L=8e3;function E({child:t,target:e=document.body,beforeClose:s=()=>{}}={}){const o=c("dialog"),i=e,n=document.createElement("div");n.classList.add(o.b()),n.style.zIndex=String(L);const l=document.createElement("div");if(l.classList.add(o.be("overlay")),n.appendChild(l),t){const e=document.createElement("div");e.classList.add(o.be("content")),e.appendChild(t),l.appendChild(e),e.addEventListener("click",(t=>{t.stopPropagation()}))}const r=getComputedStyle(i).overflow;i.style.overflow="hidden",i.appendChild(n);const a=()=>{s(),n.remove(),i.style.overflow=r};return n.addEventListener("click",a),L+=1,{dialog:n,close:a}}function S(t,e){const s=c("input");e.type||(e.type="text"),e.value||(e.value="");const o=document.createElement("div");if(o.classList.add(s.be("item")),t){const e=document.createElement("span");e.classList.add(s.be("label")),e.textContent=t,o.appendChild(e)}const i=document.createElement("div");i.classList.add(s.be("input"));const n=document.createElement("input");for(const t in e)n.setAttribute(t,e[t]);(e.max||e.min)&&n.addEventListener("blur",(()=>{e.max&&e.max<=Number(n.value)&&(n.value=String(e.max)),e.min&&e.min>=Number(n.value)&&(n.value=String(e.min))})),i.appendChild(n),o.appendChild(i),n.addEventListener("focus",(()=>{i.classList.add("focus")})),n.addEventListener("blur",(()=>{i.classList.remove("focus")}));return{item:o,input:n,errorTip:t=>{let e;i.classList.contains("error")?e=i.querySelector(`.${s.be("error-tip")}`):(e=document.createElement("span"),e.classList.add(s.be("error-tip")),i.appendChild(e)),e.textContent=t,i.classList.add("error");return{removeError:()=>{i.classList.remove("error"),e.remove()}}}}}function B(t={}){const e=c("select-box"),s=document.createElement("div");s.classList.add(e.b());const o=document.createElement("div");o.classList.add(e.be("block"));for(let s=0;s<(t.row||8);s++)for(let i=0;i<(t.col||8);i++){const t=document.createElement("div");t.classList.add(e.be("item")),t.dataset.row=String(s+1),t.dataset.col=String(i+1),o.appendChild(t)}const i=()=>{const{row:t,col:e}=s.dataset;for(const t of Array.from(o.querySelectorAll(".active")))t.classList.remove("active");if(!t||!e)return;const i=Array.from(o.children);for(let s=0;s<i.length;s++){const{row:o,col:n}=i[s].dataset;if(o>t&&n>e)return;o<=t&&n<=e?i[s].classList.add("active"):i[s].classList.remove("active")}};if(o.addEventListener("mousemove",(t=>{if(!t.target)return;const{row:e,col:o}=t.target.dataset;e&&o&&(s.dataset.row=e,s.dataset.col=o,i())})),o.addEventListener("mouseleave",(()=>{s.removeAttribute("data-row"),s.removeAttribute("data-col"),i()})),o.addEventListener("click",(()=>{const{row:e,col:o}=s.dataset;e&&o&&t.onSelect&&t.onSelect(Number(e),Number(o))})),s.appendChild(o),t.customBtn){const o=t.texts||{},i=document.createElement("div");i.classList.add(e.be("custom")),i.textContent=o.customBtnText||"Custom",i.addEventListener("click",(async()=>{const e=await async function(t={}){const e=c("creator"),s=document.createElement("div");s.classList.add(e.b());const o=document.createElement("div");o.classList.add(e.be("input"));const{item:i,input:n,errorTip:l}=S(t.rowText||"Row",{type:"number",value:String(t.row||""),max:99}),{item:r,input:a,errorTip:d}=S(t.colText||"Column",{type:"number",value:String(t.col||""),max:99});o.appendChild(i),o.appendChild(r),s.appendChild(o);const h=document.createElement("div");h.classList.add(e.be("control"));const u=N({type:"confirm",content:t.confirmText||"Confirm"}),p=N({type:"default",content:t.cancelText||"Cancel"});h.appendChild(u),h.appendChild(p),s.appendChild(h);const b=(e=Number(n.value),s=Number(a.value))=>{if(Number.isNaN(e)||e<=0)l(t.notPositiveNumberError||"Please enter a positive integer");else{if(!(Number.isNaN(s)||s<=0))return{row:e,col:s};d(t.notPositiveNumberError||"Please enter a positive integer")}},m=t=>{"Escape"===t.key&&(close(),document.removeEventListener("keydown",m))};return new Promise(((t,e)=>{const{close:o}=E({child:s,beforeClose:e});n.focus();for(const e of[n,a])e.addEventListener("keydown",(e=>{if("Enter"===e.key){const e=b();e&&(t(e),o())}}));u.addEventListener("click",(async()=>{const e=b();e&&(t(e),o())})),document.addEventListener("keydown",m),p.addEventListener("click",o)}))}(o);e&&t.onSelect&&t.onSelect(e.row,e.col)})),s.appendChild(i)}return s}const R=Math.min,k=Math.max,A=Math.round,O=Math.floor,z=t=>({x:t,y:t}),q={left:"right",right:"left",bottom:"top",top:"bottom"},$={start:"end",end:"start"};function H(t,e,s){return k(t,R(e,s))}function W(t,e){return"function"==typeof t?t(e):t}function D(t){return t.split("-")[0]}function F(t){return t.split("-")[1]}function j(t){return"x"===t?"y":"x"}function P(t){return"y"===t?"height":"width"}function V(t){return["top","bottom"].includes(D(t))?"y":"x"}function _(t){return j(V(t))}function X(t){return t.replace(/start|end/g,(t=>$[t]))}function U(t){return t.replace(/left|right|bottom|top/g,(t=>q[t]))}function Y(t){const{x:e,y:s,width:o,height:i}=t;return{width:o,height:i,top:s,left:e,right:e+o,bottom:s+i,x:e,y:s}}function G(t,e,s){let{reference:o,floating:i}=t;const n=V(e),l=_(e),r=P(l),a=D(e),c="y"===n,d=o.x+o.width/2-i.width/2,h=o.y+o.height/2-i.height/2,u=o[r]/2-i[r]/2;let p;switch(a){case"top":p={x:d,y:o.y-i.height};break;case"bottom":p={x:d,y:o.y+o.height};break;case"right":p={x:o.x+o.width,y:h};break;case"left":p={x:o.x-i.width,y:h};break;default:p={x:o.x,y:o.y}}switch(F(e)){case"start":p[l]-=u*(s&&c?-1:1);break;case"end":p[l]+=u*(s&&c?-1:1)}return p}async function K(t,e){var s;void 0===e&&(e={});const{x:o,y:i,platform:n,rects:l,elements:r,strategy:a}=t,{boundary:c="clippingAncestors",rootBoundary:d="viewport",elementContext:h="floating",altBoundary:u=!1,padding:p=0}=W(e,t),b=function(t){return"number"!=typeof t?function(t){return{top:0,right:0,bottom:0,left:0,...t}}(t):{top:t,right:t,bottom:t,left:t}}(p),m=r[u?"floating"===h?"reference":"floating":h],f=Y(await n.getClippingRect({element:null==(s=await(null==n.isElement?void 0:n.isElement(m)))||s?m:m.contextElement||await(null==n.getDocumentElement?void 0:n.getDocumentElement(r.floating)),boundary:c,rootBoundary:d,strategy:a})),g="floating"===h?{x:o,y:i,width:l.floating.width,height:l.floating.height}:l.reference,w=await(null==n.getOffsetParent?void 0:n.getOffsetParent(r.floating)),v=await(null==n.isElement?void 0:n.isElement(w))&&await(null==n.getScale?void 0:n.getScale(w))||{x:1,y:1},C=Y(n.convertOffsetParentRelativeRectToViewportRelativeRect?await n.convertOffsetParentRelativeRectToViewportRelativeRect({elements:r,rect:g,offsetParent:w,strategy:a}):g);return{top:(f.top-C.top+b.top)/v.y,bottom:(C.bottom-f.bottom+b.bottom)/v.y,left:(f.left-C.left+b.left)/v.x,right:(C.right-f.right+b.right)/v.x}}function Z(){return"undefined"!=typeof window}function Q(t){return et(t)?(t.nodeName||"").toLowerCase():"#document"}function J(t){var e;return(null==t||null==(e=t.ownerDocument)?void 0:e.defaultView)||window}function tt(t){var e;return null==(e=(et(t)?t.ownerDocument:t.document)||window.document)?void 0:e.documentElement}function et(t){return!!Z()&&(t instanceof Node||t instanceof J(t).Node)}function st(t){return!!Z()&&(t instanceof Element||t instanceof J(t).Element)}function ot(t){return!!Z()&&(t instanceof HTMLElement||t instanceof J(t).HTMLElement)}function it(t){return!(!Z()||"undefined"==typeof ShadowRoot)&&(t instanceof ShadowRoot||t instanceof J(t).ShadowRoot)}function nt(t){const{overflow:e,overflowX:s,overflowY:o,display:i}=ht(t);return/auto|scroll|overlay|hidden|clip/.test(e+o+s)&&!["inline","contents"].includes(i)}function lt(t){return["table","td","th"].includes(Q(t))}function rt(t){return[":popover-open",":modal"].some((e=>{try{return t.matches(e)}catch(t){return!1}}))}function at(t){const e=ct(),s=st(t)?ht(t):t;return["transform","translate","scale","rotate","perspective"].some((t=>!!s[t]&&"none"!==s[t]))||!!s.containerType&&"normal"!==s.containerType||!e&&!!s.backdropFilter&&"none"!==s.backdropFilter||!e&&!!s.filter&&"none"!==s.filter||["transform","translate","scale","rotate","perspective","filter"].some((t=>(s.willChange||"").includes(t)))||["paint","layout","strict","content"].some((t=>(s.contain||"").includes(t)))}function ct(){return!("undefined"==typeof CSS||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}function dt(t){return["html","body","#document"].includes(Q(t))}function ht(t){return J(t).getComputedStyle(t)}function ut(t){return st(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function pt(t){if("html"===Q(t))return t;const e=t.assignedSlot||t.parentNode||it(t)&&t.host||tt(t);return it(e)?e.host:e}function bt(t){const e=pt(t);return dt(e)?t.ownerDocument?t.ownerDocument.body:t.body:ot(e)&&nt(e)?e:bt(e)}function mt(t,e,s){var o;void 0===e&&(e=[]),void 0===s&&(s=!0);const i=bt(t),n=i===(null==(o=t.ownerDocument)?void 0:o.body),l=J(i);if(n){const t=ft(l);return e.concat(l,l.visualViewport||[],nt(i)?i:[],t&&s?mt(t):[])}return e.concat(i,mt(i,[],s))}function ft(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function gt(t){const e=ht(t);let s=parseFloat(e.width)||0,o=parseFloat(e.height)||0;const i=ot(t),n=i?t.offsetWidth:s,l=i?t.offsetHeight:o,r=A(s)!==n||A(o)!==l;return r&&(s=n,o=l),{width:s,height:o,$:r}}function wt(t){return st(t)?t:t.contextElement}function vt(t){const e=wt(t);if(!ot(e))return z(1);const s=e.getBoundingClientRect(),{width:o,height:i,$:n}=gt(e);let l=(n?A(s.width):s.width)/o,r=(n?A(s.height):s.height)/i;return l&&Number.isFinite(l)||(l=1),r&&Number.isFinite(r)||(r=1),{x:l,y:r}}const Ct=z(0);function xt(t){const e=J(t);return ct()&&e.visualViewport?{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}:Ct}function yt(t,e,s,o){void 0===e&&(e=!1),void 0===s&&(s=!1);const i=t.getBoundingClientRect(),n=wt(t);let l=z(1);e&&(o?st(o)&&(l=vt(o)):l=vt(t));const r=function(t,e,s){return void 0===e&&(e=!1),!(!s||e&&s!==J(t))&&e}(n,s,o)?xt(n):z(0);let a=(i.left+r.x)/l.x,c=(i.top+r.y)/l.y,d=i.width/l.x,h=i.height/l.y;if(n){const t=J(n),e=o&&st(o)?J(o):o;let s=t,i=ft(s);for(;i&&o&&e!==s;){const t=vt(i),e=i.getBoundingClientRect(),o=ht(i),n=e.left+(i.clientLeft+parseFloat(o.paddingLeft))*t.x,l=e.top+(i.clientTop+parseFloat(o.paddingTop))*t.y;a*=t.x,c*=t.y,d*=t.x,h*=t.y,a+=n,c+=l,s=J(i),i=ft(s)}}return Y({width:d,height:h,x:a,y:c})}function Mt(t,e){const s=ut(t).scrollLeft;return e?e.left+s:yt(tt(t)).left+s}function It(t,e,s){void 0===s&&(s=!1);const o=t.getBoundingClientRect();return{x:o.left+e.scrollLeft-(s?0:Mt(t,o)),y:o.top+e.scrollTop}}function Nt(t,e,s){let o;if("viewport"===e)o=function(t,e){const s=J(t),o=tt(t),i=s.visualViewport;let n=o.clientWidth,l=o.clientHeight,r=0,a=0;if(i){n=i.width,l=i.height;const t=ct();(!t||t&&"fixed"===e)&&(r=i.offsetLeft,a=i.offsetTop)}return{width:n,height:l,x:r,y:a}}(t,s);else if("document"===e)o=function(t){const e=tt(t),s=ut(t),o=t.ownerDocument.body,i=k(e.scrollWidth,e.clientWidth,o.scrollWidth,o.clientWidth),n=k(e.scrollHeight,e.clientHeight,o.scrollHeight,o.clientHeight);let l=-s.scrollLeft+Mt(t);const r=-s.scrollTop;return"rtl"===ht(o).direction&&(l+=k(e.clientWidth,o.clientWidth)-i),{width:i,height:n,x:l,y:r}}(tt(t));else if(st(e))o=function(t,e){const s=yt(t,!0,"fixed"===e),o=s.top+t.clientTop,i=s.left+t.clientLeft,n=ot(t)?vt(t):z(1);return{width:t.clientWidth*n.x,height:t.clientHeight*n.y,x:i*n.x,y:o*n.y}}(e,s);else{const s=xt(t);o={x:e.x-s.x,y:e.y-s.y,width:e.width,height:e.height}}return Y(o)}function Tt(t,e){const s=pt(t);return!(s===e||!st(s)||dt(s))&&("fixed"===ht(s).position||Tt(s,e))}function Lt(t,e,s){const o=ot(e),i=tt(e),n="fixed"===s,l=yt(t,!0,n,e);let r={scrollLeft:0,scrollTop:0};const a=z(0);if(o||!o&&!n)if(("body"!==Q(e)||nt(i))&&(r=ut(e)),o){const t=yt(e,!0,n,e);a.x=t.x+e.clientLeft,a.y=t.y+e.clientTop}else i&&(a.x=Mt(i));const c=!i||o||n?z(0):It(i,r);return{x:l.left+r.scrollLeft-a.x-c.x,y:l.top+r.scrollTop-a.y-c.y,width:l.width,height:l.height}}function Et(t){return"static"===ht(t).position}function St(t,e){if(!ot(t)||"fixed"===ht(t).position)return null;if(e)return e(t);let s=t.offsetParent;return tt(t)===s&&(s=s.ownerDocument.body),s}function Bt(t,e){const s=J(t);if(rt(t))return s;if(!ot(t)){let e=pt(t);for(;e&&!dt(e);){if(st(e)&&!Et(e))return e;e=pt(e)}return s}let o=St(t,e);for(;o&<(o)&&Et(o);)o=St(o,e);return o&&dt(o)&&Et(o)&&!at(o)?s:o||function(t){let e=pt(t);for(;ot(e)&&!dt(e);){if(at(e))return e;if(rt(e))return null;e=pt(e)}return null}(t)||s}const Rt={convertOffsetParentRelativeRectToViewportRelativeRect:function(t){let{elements:e,rect:s,offsetParent:o,strategy:i}=t;const n="fixed"===i,l=tt(o),r=!!e&&rt(e.floating);if(o===l||r&&n)return s;let a={scrollLeft:0,scrollTop:0},c=z(1);const d=z(0),h=ot(o);if((h||!h&&!n)&&(("body"!==Q(o)||nt(l))&&(a=ut(o)),ot(o))){const t=yt(o);c=vt(o),d.x=t.x+o.clientLeft,d.y=t.y+o.clientTop}const u=!l||h||n?z(0):It(l,a,!0);return{width:s.width*c.x,height:s.height*c.y,x:s.x*c.x-a.scrollLeft*c.x+d.x+u.x,y:s.y*c.y-a.scrollTop*c.y+d.y+u.y}},getDocumentElement:tt,getClippingRect:function(t){let{element:e,boundary:s,rootBoundary:o,strategy:i}=t;const n=[..."clippingAncestors"===s?rt(e)?[]:function(t,e){const s=e.get(t);if(s)return s;let o=mt(t,[],!1).filter((t=>st(t)&&"body"!==Q(t))),i=null;const n="fixed"===ht(t).position;let l=n?pt(t):t;for(;st(l)&&!dt(l);){const e=ht(l),s=at(l);s||"fixed"!==e.position||(i=null),(n?!s&&!i:!s&&"static"===e.position&&i&&["absolute","fixed"].includes(i.position)||nt(l)&&!s&&Tt(t,l))?o=o.filter((t=>t!==l)):i=e,l=pt(l)}return e.set(t,o),o}(e,this._c):[].concat(s),o],l=n[0],r=n.reduce(((t,s)=>{const o=Nt(e,s,i);return t.top=k(o.top,t.top),t.right=R(o.right,t.right),t.bottom=R(o.bottom,t.bottom),t.left=k(o.left,t.left),t}),Nt(e,l,i));return{width:r.right-r.left,height:r.bottom-r.top,x:r.left,y:r.top}},getOffsetParent:Bt,getElementRects:async function(t){const e=this.getOffsetParent||Bt,s=this.getDimensions,o=await s(t.floating);return{reference:Lt(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}},getClientRects:function(t){return Array.from(t.getClientRects())},getDimensions:function(t){const{width:e,height:s}=gt(t);return{width:e,height:s}},getScale:vt,isElement:st,isRTL:function(t){return"rtl"===ht(t).direction}};function kt(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function At(t,e,s,o){void 0===o&&(o={});const{ancestorScroll:i=!0,ancestorResize:n=!0,elementResize:l="function"==typeof ResizeObserver,layoutShift:r="function"==typeof IntersectionObserver,animationFrame:a=!1}=o,c=wt(t),d=i||n?[...c?mt(c):[],...mt(e)]:[];d.forEach((t=>{i&&t.addEventListener("scroll",s,{passive:!0}),n&&t.addEventListener("resize",s)}));const h=c&&r?function(t,e){let s,o=null;const i=tt(t);function n(){var t;clearTimeout(s),null==(t=o)||t.disconnect(),o=null}return function l(r,a){void 0===r&&(r=!1),void 0===a&&(a=1),n();const c=t.getBoundingClientRect(),{left:d,top:h,width:u,height:p}=c;if(r||e(),!u||!p)return;const b={rootMargin:-O(h)+"px "+-O(i.clientWidth-(d+u))+"px "+-O(i.clientHeight-(h+p))+"px "+-O(d)+"px",threshold:k(0,R(1,a))||1};let m=!0;function f(e){const o=e[0].intersectionRatio;if(o!==a){if(!m)return l();o?l(!1,o):s=setTimeout((()=>{l(!1,1e-7)}),1e3)}1!==o||kt(c,t.getBoundingClientRect())||l(),m=!1}try{o=new IntersectionObserver(f,{...b,root:i.ownerDocument})}catch(t){o=new IntersectionObserver(f,b)}o.observe(t)}(!0),n}(c,s):null;let u,p=-1,b=null;l&&(b=new ResizeObserver((t=>{let[o]=t;o&&o.target===c&&b&&(b.unobserve(e),cancelAnimationFrame(p),p=requestAnimationFrame((()=>{var t;null==(t=b)||t.observe(e)}))),s()})),c&&!a&&b.observe(c),b.observe(e));let m=a?yt(t):null;return a&&function e(){const o=yt(t);m&&!kt(m,o)&&s();m=o,u=requestAnimationFrame(e)}(),s(),()=>{var t;d.forEach((t=>{i&&t.removeEventListener("scroll",s),n&&t.removeEventListener("resize",s)})),null==h||h(),null==(t=b)||t.disconnect(),b=null,a&&cancelAnimationFrame(u)}}const Ot=function(t){return void 0===t&&(t=0),{name:"offset",options:t,async fn(e){var s,o;const{x:i,y:n,placement:l,middlewareData:r}=e,a=await async function(t,e){const{placement:s,platform:o,elements:i}=t,n=await(null==o.isRTL?void 0:o.isRTL(i.floating)),l=D(s),r=F(s),a="y"===V(s),c=["left","top"].includes(l)?-1:1,d=n&&a?-1:1,h=W(e,t);let{mainAxis:u,crossAxis:p,alignmentAxis:b}="number"==typeof h?{mainAxis:h,crossAxis:0,alignmentAxis:null}:{mainAxis:h.mainAxis||0,crossAxis:h.crossAxis||0,alignmentAxis:h.alignmentAxis};return r&&"number"==typeof b&&(p="end"===r?-1*b:b),a?{x:p*d,y:u*c}:{x:u*c,y:p*d}}(e,t);return l===(null==(s=r.offset)?void 0:s.placement)&&null!=(o=r.arrow)&&o.alignmentOffset?{}:{x:i+a.x,y:n+a.y,data:{...a,placement:l}}}}},zt=function(t){return void 0===t&&(t={}),{name:"shift",options:t,async fn(e){const{x:s,y:o,placement:i}=e,{mainAxis:n=!0,crossAxis:l=!1,limiter:r={fn:t=>{let{x:e,y:s}=t;return{x:e,y:s}}},...a}=W(t,e),c={x:s,y:o},d=await K(e,a),h=V(D(i)),u=j(h);let p=c[u],b=c[h];if(n){const t="y"===u?"bottom":"right";p=H(p+d["y"===u?"top":"left"],p,p-d[t])}if(l){const t="y"===h?"bottom":"right";b=H(b+d["y"===h?"top":"left"],b,b-d[t])}const m=r.fn({...e,[u]:p,[h]:b});return{...m,data:{x:m.x-s,y:m.y-o,enabled:{[u]:n,[h]:l}}}}}},qt=function(t){return void 0===t&&(t={}),{name:"flip",options:t,async fn(e){var s,o;const{placement:i,middlewareData:n,rects:l,initialPlacement:r,platform:a,elements:c}=e,{mainAxis:d=!0,crossAxis:h=!0,fallbackPlacements:u,fallbackStrategy:p="bestFit",fallbackAxisSideDirection:b="none",flipAlignment:m=!0,...f}=W(t,e);if(null!=(s=n.arrow)&&s.alignmentOffset)return{};const g=D(i),w=V(r),v=D(r)===r,C=await(null==a.isRTL?void 0:a.isRTL(c.floating)),x=u||(v||!m?[U(r)]:function(t){const e=U(t);return[X(t),e,X(e)]}(r)),y="none"!==b;!u&&y&&x.push(...function(t,e,s,o){const i=F(t);let n=function(t,e,s){const o=["left","right"],i=["right","left"],n=["top","bottom"],l=["bottom","top"];switch(t){case"top":case"bottom":return s?e?i:o:e?o:i;case"left":case"right":return e?n:l;default:return[]}}(D(t),"start"===s,o);return i&&(n=n.map((t=>t+"-"+i)),e&&(n=n.concat(n.map(X)))),n}(r,m,b,C));const M=[r,...x],I=await K(e,f),N=[];let T=(null==(o=n.flip)?void 0:o.overflows)||[];if(d&&N.push(I[g]),h){const t=function(t,e,s){void 0===s&&(s=!1);const o=F(t),i=_(t),n=P(i);let l="x"===i?o===(s?"end":"start")?"right":"left":"start"===o?"bottom":"top";return e.reference[n]>e.floating[n]&&(l=U(l)),[l,U(l)]}(i,l,C);N.push(I[t[0]],I[t[1]])}if(T=[...T,{placement:i,overflows:N}],!N.every((t=>t<=0))){var L,E;const t=((null==(L=n.flip)?void 0:L.index)||0)+1,e=M[t];if(e)return{data:{index:t,overflows:T},reset:{placement:e}};let s=null==(E=T.filter((t=>t.overflows[0]<=0)).sort(((t,e)=>t.overflows[1]-e.overflows[1]))[0])?void 0:E.placement;if(!s)switch(p){case"bestFit":{var S;const t=null==(S=T.filter((t=>{if(y){const e=V(t.placement);return e===w||"y"===e}return!0})).map((t=>[t.placement,t.overflows.filter((t=>t>0)).reduce(((t,e)=>t+e),0)])).sort(((t,e)=>t[1]-e[1]))[0])?void 0:S[0];t&&(s=t);break}case"initialPlacement":s=r}if(i!==s)return{reset:{placement:s}}}return{}}}},$t=function(t){return void 0===t&&(t={}),{options:t,fn(e){const{x:s,y:o,placement:i,rects:n,middlewareData:l}=e,{offset:r=0,mainAxis:a=!0,crossAxis:c=!0}=W(t,e),d={x:s,y:o},h=V(i),u=j(h);let p=d[u],b=d[h];const m=W(r,e),f="number"==typeof m?{mainAxis:m,crossAxis:0}:{mainAxis:0,crossAxis:0,...m};if(a){const t="y"===u?"height":"width",e=n.reference[u]-n.floating[t]+f.mainAxis,s=n.reference[u]+n.reference[t]-f.mainAxis;p<e?p=e:p>s&&(p=s)}if(c){var g,w;const t="y"===u?"width":"height",e=["top","left"].includes(D(i)),s=n.reference[h]-n.floating[t]+(e&&(null==(g=l.offset)?void 0:g[h])||0)+(e?0:f.crossAxis),o=n.reference[h]+n.reference[t]+(e?0:(null==(w=l.offset)?void 0:w[h])||0)-(e?f.crossAxis:0);b<s?b=s:b>o&&(b=o)}return{[u]:p,[h]:b}}}},Ht=(t,e,s)=>{const o=new Map,i={platform:Rt,...s},n={...i.platform,_c:o};return(async(t,e,s)=>{const{placement:o="bottom",strategy:i="absolute",middleware:n=[],platform:l}=s,r=n.filter(Boolean),a=await(null==l.isRTL?void 0:l.isRTL(e));let c=await l.getElementRects({reference:t,floating:e,strategy:i}),{x:d,y:h}=G(c,o,a),u=o,p={},b=0;for(let s=0;s<r.length;s++){const{name:n,fn:m}=r[s],{x:f,y:g,data:w,reset:v}=await m({x:d,y:h,initialPlacement:o,placement:u,strategy:i,middlewareData:p,rects:c,platform:l,elements:{reference:t,floating:e}});d=null!=f?f:d,h=null!=g?g:h,p={...p,[n]:{...p[n],...w}},v&&b<=50&&(b++,"object"==typeof v&&(v.placement&&(u=v.placement),v.rects&&(c=!0===v.rects?await l.getElementRects({reference:t,floating:e,strategy:i}):v.rects),({x:d,y:h}=G(c,u,a))),s=-1)}return{x:d,y:h,placement:u,strategy:i,middlewareData:p}})(t,e,{...i,platform:n})};let Wt;function Dt(t,e={}){const{msg:s="",delay:o=150,content:i,direction:n="bottom",type:l="hover",container:r,onOpen:a,onClose:d,closed:h,onDestroy:u}=e,p=c("tooltip");if(s||i){Wt||(Wt=document.createElement("div"),document.body.appendChild(Wt));const e=r||Wt,c=document.createElement("div");let b,m,f;c.classList.add(p.b(),"hidden","transparent"),i?c.appendChild(i):s&&(c.textContent=s);const g=()=>{f&&f(),Ht(t,c,{placement:n,middleware:[qt(),zt({limiter:$t()}),Ot(4)]}).then((({x:t,y:e})=>{Object.assign(c.style,{left:`${t}px`,top:`${e}px`})}))},w=()=>{c.classList.add("hidden"),e.contains(c)&&e.removeChild(c),f&&f(),h&&h()},v=(s=!1)=>{m&&clearTimeout(m),b=setTimeout((()=>{if(a){const t=a(s);if(!s&&t)return}e.appendChild(c),c.removeEventListener("transitionend",w),c.classList.remove("hidden"),f=At(t,c,g),c.classList.remove("transparent")}),o)},C=(t=!1)=>{b&&clearTimeout(b),m=setTimeout((()=>{if(d){const e=d(t);if(!t&&e)return}!function(t,e,s,o,i){t.addEventListener("transitionend",s,o),setTimeout((()=>{s()}),e)}(c,150,w,{once:!0}),c.classList.add("transparent")}),o)},x=()=>{const e=t=>{t.stopPropagation(),C(!1)},s=t=>{t.stopPropagation(),v(),document.removeEventListener("click",e),document.addEventListener("click",e,{once:!0})};return{prepare:()=>{c.addEventListener("click",(t=>t.stopPropagation())),t.addEventListener("click",s)},show:v,hide:(t=!1)=>{C(t),document.removeEventListener("click",e)},destroy:()=>{t.removeEventListener("click",s),document.removeEventListener("click",e)}}},y={hover:()=>{const e=[t,c],s=C.bind(void 0,!1),o=v.bind(void 0,!1);return{prepare:()=>{for(const t of e)t.addEventListener("mouseenter",o),t.addEventListener("mouseleave",s)},show:v,hide:C,destroy:()=>{for(const t of e)t.removeEventListener("mouseenter",o),t.removeEventListener("mouseleave",s)}}},click:x},{prepare:M,show:I,hide:N,destroy:T}=y[l]();M();const L=()=>{N(!0),u&&u(),T(),f&&f(),c.remove()};return{show:I,hide:N,destroy:L}}return null}function Ft(t,e,s=0,o=!0){const{x:i,y:n,x1:l,y1:r}=t,{x:a,y:c,x1:d,y1:h}=e;let u,p;return o?(u=l<a+s||i-s>d,p=r<c+s||n-s>h):(u=l<=a+s||i-s>=d,p=r<=c+s||n-s>=h),!(u||p)}function jt(t){let{left:e,top:s,width:o,height:i}=t;const{clientWidth:n,clientHeight:l}=document.documentElement;let r=!1,a=!1;return e+o>n?(e=n-o-8,r=!0):e<0&&(e=8,r=!0),s+i>l?(s=l-i-8,a=!0):s<0&&(s=8,a=!0),{left:e,top:s,leftLimited:r,topLimited:a}}function Pt(t,e={}){const s=Symbol("ignoreFirstBind"),o=new Set,i=new ResizeObserver((o=>{e.ignoreFirstBind&&o.some((t=>{const e=t.target,o=e[s];return e[s]=!0,!o}))||t(o)})),n=i.observe;i.observe=(t,e)=>{o.add(t),n.call(i,t,e)};const l=i.unobserve;i.unobserve=t=>{o.has(t)&&(o.delete(t),t[s]=void 0),l.call(i,t)};const r=i.disconnect;return i.disconnect=()=>{for(const t of o.values())t[s]=void 0;r.call(i)},i}function Vt(t,e){t.addEventListener("scroll",e),this.scrollHandler.push([t,e])}function _t(){for(let t=0;t<this.scrollHandler.length;t++){const[e,s]=this.scrollHandler[t];e.removeEventListener("scroll",s)}this.scrollHandler=[]}function Xt(t){const e={},s=t.trim().split(";");for(let t=0;t<s.length;t++){const o=s[t].trim();if(!o)continue;const i=o.indexOf(":");if(-1===i)continue;const n=o.slice(0,Math.max(0,i)).trim(),l=o.slice(Math.max(0,i+1)).trim();e[Yt(n)]=l}return e}function Ut(t){return Object.entries(t).map((([t,e])=>`${function(t){const e=t.replaceAll(/([A-Z])/g," $1").trim();return e.split(" ").join("-").toLowerCase()}(t)}: ${e};`)).join(" ")}function Yt(t){return t.replaceAll(/-(\w)/g,((t,e)=>e.toUpperCase()))}const Gt=()=>Math.random().toString(36).slice(2);function Kt(t,e){let s;return function(...o){s&&clearTimeout(s),s=setTimeout((()=>{t.apply(this,o)}),e)}}const Zt=t.import("parchment"),Qt=t.import("blots/container"),Jt=t.import("blots/block"),te=t.import("blots/block/embed");class ee extends Qt{static tagName;static blotName=e.container;static scope=Zt.Scope.BLOCK_BLOT;static allowedChildren=[Jt,te,Qt];static requiredContainer;static defaultChild;static create(t){const e=document.createElement(this.tagName);return this.className&&e.classList.add(this.className),e}optimize(t){if(0===this.children.length)if(null!=this.statics.defaultChild){const t=this.scroll.create(this.statics.defaultChild.blotName);this.appendChild(t)}else this.remove();this.children.length>0&&null!=this.next&&this.checkMerge()&&(this.next.moveChildren(this),this.next.remove())}enforceAllowedChildren(){this.children.forEach((t=>{this.statics.allowedChildren.some((e=>t instanceof e))||(t.statics.scope===Zt.Scope.BLOCK_BLOT?(t.parent instanceof ee?(null!=t.next&&t.parent.splitAfter(t),null!=t.prev&&t.parent.splitAfter(t.prev)):(null!=t.next&&this.splitAfter(t),null!=t.prev&&this.splitAfter(t.prev)),t.parent.unwrap()):t instanceof Zt.ParentBlot?t.unwrap():t.remove())}))}}const se=t=>{return e=t,!Number.isNaN(e)&&Number(e)>0?t:1;var e},oe=t.import("blots/block"),ie=t.import("blots/block/embed");class ne extends ee{static blotName=e.tableCellInner;static tagName="div";static className="ql-table-cell-inner";static allowDataAttrs=new Set(["table-id","row-id","col-id","rowspan","colspan"]);static defaultChild=oe;static allowStyle=new Set(["background-color","border","height"]);static isAllowStyle(t){for(const e of this.allowStyle)if(t.startsWith(e))return!0;return!1}static create(t){const{tableId:e,rowId:s,colId:o,rowspan:i,colspan:n,style:l}=t,r=super.create();return r.dataset.tableId=e,r.dataset.rowId=s,r.dataset.colId=o,r.dataset.rowspan=String(se(i)),r.dataset.colspan=String(se(n)),l&&(r.dataset.style=l),r}static formats(t){const{tableId:e,rowId:s,colId:o,rowspan:i,colspan:n,style:l}=t.dataset,r={tableId:String(e),rowId:String(s),colId:String(o),rowspan:Number(se(i)),colspan:Number(se(n))};return l&&(r.style=l),r}constructor(t,e,s){super(t,e),e.setAttribute("contenteditable",String(t.isEnabled()))}setFormatValue(t,s,o=!1){if(o){if(!this.statics.isAllowStyle(t))return;this.parent&&this.parent.statics.blotName===e.tableCell&&this.parent.setFormatValue(t,s)}else{if(!this.statics.allowDataAttrs.has(t))return;const o=`data-${t}`;s?this.domNode.setAttribute(o,s):this.domNode.removeAttribute(o),this.parent&&this.parent.statics.blotName===e.tableCell&&this.parent.setFormatValue(t,s)}const i=this.descendants(oe,0);for(const t of i)t.cache={}}get tableId(){return this.domNode.dataset.tableId}get rowId(){return this.domNode.dataset.rowId}set rowId(t){this.setFormatValue("row-id",t)}get colId(){return this.domNode.dataset.colId}set colId(t){this.setFormatValue("col-id",t)}get rowspan(){return Number(this.domNode.dataset.rowspan)}set rowspan(t){this.setFormatValue("rowspan",t)}get colspan(){return Number(this.domNode.dataset.colspan)}set colspan(t){this.setFormatValue("colspan",t)}getColumnIndex(){return d(this,e.tableMain).getColIds().indexOf(this.colId)}formatAt(t,e,s,o){if(0===this.children.length&&(this.appendChild(this.scroll.create(this.statics.defaultChild.blotName)),e+=1),super.formatAt(t,e,s,o),o&&o.style){const t=Xt(o.style);for(const[e,s]of Object.entries(t))this.setFormatValue(e,s,!0)}}insertAt(t,e,s){const[o]=this.children.find(t);if(!o&&this.statics.defaultChild){const t=this.scroll.create(this.statics.defaultChild.blotName||"block");this.appendChild(t)}super.insertAt(t,e,s)}formats(){const t=this.statics.formats(this.domNode);return{[this.statics.blotName]:t}}checkMerge(){const{colId:t,rowId:e,colspan:s,rowspan:o}=this,i=this.next;return null!==i&&i.statics.blotName===this.statics.blotName&&i.rowId===e&&i.colId===t&&i.colspan===s&&i.rowspan===o}optimize(){const t=this.parent,s=this.statics.formats(this.domNode);if(this.prev&&this.prev instanceof ie){const t=this.scroll.create("block");this.appendChild(this.prev),this.appendChild(t)}if(null!==t&&t.statics.blotName!==e.tableCell&&(this.wrap(e.tableCell,s),0===this.children.length)){const t=this.scroll.create(this.statics.defaultChild.blotName);this.appendChild(t)}this.children.length>0&&null!=this.next&&this.checkMerge()&&(this.next.moveChildren(this),this.next.remove()),null!=this.uiNode&&this.uiNode!==this.domNode.firstChild&&this.domNode.insertBefore(this.uiNode,this.domNode.firstChild),0===this.children.length&&this.remove()}insertBefore(t,s){if(t.statics.blotName===this.statics.blotName){const o=t,i=this.statics.formats(o.domNode),n=this.statics.formats(this.domNode);if(Object.entries(n).every((([t,e])=>e===i[t])))return this.parent.insertBefore(o,this.next);{const[t,l]=h(this,[e.tableRow,e.tableCell]);if(s){const o=s.offset();if(o+1<this.length()){const s=this.scroll.create(e.tableCellInner,n);this.children.forEachAt(o+1,this.length(),(t=>{s.appendChild(t)})),t.insertBefore(s.wrap(e.tableCell,n),l.next),0===this.children.length&&(this.remove(),0===this.parent.children.length&&this.parent.remove())}}if(this.rowId!==o.rowId){if(s){const e=s.offset(t);t.split(e)}else if(l.next){const e=l.next.offset(t);t.split(e)}const n=this.scroll.create(e.tableRow,i),r=this.scroll.create(e.tableCell,i);return r.appendChild(o),n.appendChild(r),t.parent.insertBefore(n,t.next)}return t.insertBefore(o.wrap(e.tableCell,i),s?l:l.next)}}if(t.statics.blotName!==e.tableCol)super.insertBefore(t,s);else try{const s=d(this,e.tableBody),o=this.offset(s),i=s.split(o);s.parent.insertBefore(t,i),t.optimize({})}catch{console.warn("TableCellInner not in TableBody")}}}class le extends ee{static blotName=e.tableRow;static tagName="tr";static className="ql-table-row";static create(t){const e=super.create();return e.dataset.tableId=t.tableId,e.dataset.rowId=t.rowId,e}get rowId(){return this.domNode.dataset.rowId}get tableId(){return this.domNode.dataset.tableId}setHeight(t){this.foreachCellInner((e=>{e.setFormatValue("height",t,!0)}))}getCellByColId(t,s){const o=d(this,e.tableMain).getColIds(),i=o.indexOf(t),n=this.children.iterator();let l=null;for(;l=n();){if(l.colId===t)return l;const e=o.indexOf(l.colId);if(e<i&&e+l.colspan>i)return l}return this[s]&&this[s].statics.blotName===e.tableRow?this[s].getCellByColId(t,s):null}insertCell(t,s){const o=[],i=this.children.iterator();let n,l=0;for(;(n=i())&&(l+=n.colspan,!(l>t));)if(1!==n.rowspan)for(let t=0;t<n.rowspan-1;t++)o[t]=(o[t]||0)+n.colspan;if(n&&l-n.colspan<t){n.getCellInner().colspan+=1,1!==n.rowspan&&(o.skipRowNum=n.rowspan-1)}else{const t=this.scroll.create(e.tableCell,s),o=this.scroll.create(e.tableCellInner,s),i=this.scroll.create("block");i.appendChild(this.scroll.create("break")),o.appendChild(i),t.appendChild(o),this.insertBefore(t,n)}return o}getCellByColumIndex(t){const e=[];let s=null,o=0;if(t<0)return[s,o,e];const i=this.children.iterator();for(;s=i();){if(o+=s.colspan,1!==s.rowspan)for(let t=0;t<s.rowspan-1;t++)e[t]=(e[t]||0)+s.colspan;if(o>t)break}return[s,o,e]}removeCell(t){if(t<0)return[];const s=this.getCellByColumIndex(t),[o,i]=s,n=s[2];if(!o)return n;if(i-o.colspan<t||o.colspan>1){const[s]=o.descendants(ne);if(1!==o.colspan&&t===i-o.colspan){const t=d(this,e.tableMain).getColIds();s.colId=t[t.indexOf(s.colId)+1]}1!==o.rowspan&&(n.skipRowNum=o.rowspan-1),s.colspan-=1}else o.remove();return n}foreachCellInner(t){const e=this.children.iterator();let s,o=0;for(;s=e();){const[e]=s.descendants(ne);if(t(e,o++))break}}checkMerge(){const t=this.next;return null!==t&&t.statics.blotName===this.statics.blotName&&t.rowId===this.rowId}optimize(t){const s=this.parent,{tableId:o}=this;null!==s&&s.statics.blotName!==e.tableBody&&this.wrap(e.tableBody,o),super.optimize(t)}}class re extends ee{static blotName=e.tableBody;static tagName="tbody";static create(t){const e=super.create();return e.dataset.tableId=t,e}get tableId(){return this.domNode.dataset.tableId}insertRow(t){const s=d(this,e.tableMain);if(!s)return;const o=s.getColIds(),i=this.descendants(le),n=new Set(o);let l=0;for(const e of i){if(l===t)break;e.foreachCellInner((e=>{if(l+e.rowspan>t&&(e.rowspan+=1,n.delete(e.colId),1!==e.colspan)){const t=o.indexOf(e.colId);for(let s=0;s<e.colspan-1;s++)n.delete(o[t+s+1])}})),l+=1}const r=s.tableId,a=Gt(),c=this.scroll.create(e.tableRow,{tableId:r,rowId:a});for(const t of n){const s=this.scroll.create("break").wrap("block").wrap(e.tableCellInner,{tableId:r,rowId:a,colId:t,rowspan:1,colspan:1}).wrap(e.tableCell,{tableId:r,rowId:a,colId:t,rowspan:1,colspan:1});c.appendChild(s)}this.insertBefore(c,i[t]||null)}checkMerge(){const t=this.next;return null!==t&&t.statics.blotName===this.statics.blotName&&t.tableId===this.tableId}optimize(t){const s=this.parent;if(null!==s&&s.statics.blotName!==e.tableMain){const{tableId:t}=this;this.wrap(e.tableMain,{tableId:t})}super.optimize(t)}}const ae=t.import("parchment"),ce=t.import("blots/block");class de extends ce{replaceWith(t,s){const o="string"==typeof t?this.scroll.create(t,s):t;if(o instanceof ae.ParentBlot){if(o.statics.blotName===e.tableCellInner){const t=this.parent;if(t.statics.blotName===e.tableCellInner){if(null!=t&&t.insertBefore(o,this.prev?null:this.next),t.statics.blotName===e.tableCellInner){let t=this;for(;t;){const e=t.next;o.appendChild(t),t=e}}else o.appendChild(this);if(t&&0===t.length()){t.remove(),t.parent.statics.blotName===e.tableCell&&0===t.parent.length()&&t.parent.remove();const s=t.parent.parent;s.statics.blotName===e.tableRow&&0===s.children.length&&s.remove()}}else null!=t&&t.insertBefore(o,this.next),o.appendChild(this);return o}this.moveChildren(o)}return null!=this.parent&&(this.parent.insertBefore(o,this.next||void 0),this.remove()),this.attributes.copy(o),o}format(t,s){if(t!==e.tableCellInner||this.parent.statics.blotName!==t||s)super.format(t,s);else try{d(this,e.tableCellInner).unwrap()}catch{console.error("unwrap TableCellInner error")}}}const he=t.import("parchment"),ue=t.import("blots/scroll");class pe extends ue{enable(s=!0){const o=t.import(`formats/${e.tableCellInner}`),i=this.domNode.querySelectorAll(`.${o.className}`);for(const t of Array.from(i))t.setAttribute("contenteditable",String(!!s));const n=t.import(`formats/${e.tableCaption}`),l=this.domNode.querySelectorAll(`.${n.className}`);for(const t of Array.from(l))t.setAttribute("contenteditable",String(!!s));super.enable(s)}createBlock(t,s){let o,i={};if(t[e.tableCellInner])o=e.tableCellInner;else for(const[e,s]of Object.entries(t)){null!=this.query(e,he.Scope.BLOCK&he.Scope.BLOT)?o=e:i[e]=s}o===e.tableCellInner&&(i={...t},delete i[o]);const n=this.create(o||this.statics.defaultChild.blotName,o?t[o]:void 0);this.insertBefore(n,s||void 0);let l=n.length();n instanceof ne&&0===l&&(l+=1);for(const[t,e]of Object.entries(i))n.formatAt(0,l,t,e);return n}}const be=t.import("parchment"),me=t.import("blots/inline"),fe=t.import("blots/text");class ge extends de{static blotName=e.tableCaption;static tagName="caption";static className="ql-table-caption";static allowedChildren=[me,fe];static create(t){const{tableId:e}=t,s=super.create();return s.dataset.tableId=e,"bottom"===t.side&&(s.style.captionSide="bottom"),s}static formats(t){const{tableId:e}=t.dataset;return{tableId:String(e),side:"bottom"===t.style.captionSide?"bottom":"top"}}constructor(t,e,s){super(t,e),e.setAttribute("contenteditable",String(t.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(){const t=document.createElement("i");return t.classList.add("ql-table-caption--switch"),t.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">\r\n \x3c!-- Icon from Tabler Icons by Paweł Kuna - https://github.com/tabler/tabler-icons/blob/master/LICENSE --\x3e\r\n <path\r\n fill="none"\r\n stroke="currentColor"\r\n stroke-linecap="round"\r\n stroke-linejoin="round"\r\n stroke-width="2"\r\n d="M7 3v18m3-15L7 3L4 6m16 12l-3 3l-3-3m3 3V3"\r\n />\r\n</svg>\r\n',t.addEventListener("click",(()=>{this.scroll.isEnabled()&&(this.side="top"===this.side?"bottom":"top")})),t}get tableId(){return this.domNode.dataset.tableId}set side(t){this.domNode.style.captionSide="bottom"===t?"bottom":"top"}get side(){return"bottom"===this.domNode.style.captionSide?"bottom":"top"}format(t,e){this.scroll.query(t,be.Scope.BLOCK_BLOT)&&t!==this.statics.blotName||super.format(t,e)}checkMerge(){const t=this.next;return null!==t&&t.statics.blotName===this.statics.blotName&&t.tableId===this.tableId}optimize(t){const s=this.parent;if(null!==s&&s.statics.blotName!==e.tableMain){const{tableId:t}=this;this.wrap(e.tableMain,{tableId:t})}0===this.children.length?this.remove():(super.optimize(t),null!=this.next&&this.checkMerge()&&(this.next.moveChildren(this),this.next.remove()))}}class we extends ee{static blotName=e.tableCell;static tagName="td";static className="ql-table-cell";static allowDataAttrs=new Set(["table-id","row-id","col-id"]);static allowAttrs=new Set(["rowspan","colspan"]);static allowStyle=new Set(["background-color","border","height"]);static isAllowStyle(t){for(const e of this.allowStyle)if(t.startsWith(e))return!0;return!1}static create(t){const{tableId:e,rowId:s,colId:o,rowspan:i,colspan:n,style:l}=t,r=super.create();return r.dataset.tableId=e,r.dataset.rowId=s,r.dataset.colId=o,r.setAttribute("rowspan",String(se(i))),r.setAttribute("colspan",String(se(n))),l&&(r.style.cssText=l),r}static formats(t){const{tableId:e,rowId:s,colId:o}=t.dataset,i=Number(t.getAttribute("rowspan")),n=Number(t.getAttribute("colspan")),l={tableId:e,rowId:s,colId:o,rowspan:se(i),colspan:se(n)},r={};for(let e=0;e<t.style.length;e++){const s=t.style[e],o=t.style[s];this.isAllowStyle(String(s))&&!["initial","inherit"].includes(o)&&(r[s]=o)}const a=Object.entries(r);return a.length>0&&(l.style=a.map((([t,e])=>`${t}: ${e}`)).join(";")),l}setFormatValue(t,s){if(this.statics.allowAttrs.has(t)||this.statics.allowDataAttrs.has(t)){let e=t;this.statics.allowDataAttrs.has(t)&&(e=`data-${t}`),s?this.domNode.setAttribute(e,s):this.domNode.removeAttribute(e)}else this.statics.isAllowStyle(t)&&(Object.assign(this.domNode.style,{[t]:s}),t.startsWith("border")&&this.setStyleBoder(t,s));this.children.head&&this.children.head.statics.blotName===e.tableCellInner&&this.domNode.style.cssText&&(this.children.head.domNode.dataset.style=this.domNode.style.cssText)}setStyleBoder(t,e){const s=Boolean(e)?e:null;if(!(!["left","right","top","bottom"].some((e=>t.includes(e)))&&t.startsWith("border-")))return;const o=this.getNearByCell("left").map((t=>t.descendant(ne,0)[0])).filter(Boolean);for(const e of o)e.setFormatValue(t.replace("border-","border-right-"),s,!0);const i=this.getNearByCell("top").map((t=>t.descendant(ne,0)[0])).filter(Boolean);for(const e of i)e.setFormatValue(t.replace("border-","border-bottom-"),s,!0)}getNearByCell(t){const s=[];try{const t=d(this,e.tableMain);s.push(...t.getColIds())}catch(t){console.error(`Cell is not in table! ${t}`)}if(0===s.length)return[];if("left"===t){const t=new Set;let e=this.parent;for(let o=0;o<this.rowspan&&e instanceof le;o++){const o=e.children.iterator();let i=null;for(;i=o();){const e=s.indexOf(i.colId)+i.colspan;this.colId===s[e]&&t.add(i)}e=e.next}return Array.from(t)}if("top"===t){if(!(this.parent instanceof le&&this.parent.prev))return[];const t=new Set,e=this.getColumnIndex(),o=e+this.colspan,i=new Set(s.filter(((t,s)=>s>=e&&s<o)));let n=1,l=this.parent.prev;for(;l;){let e=!1;const o=l.children.iterator();let r=null,a=0;for(;r=o();)i.has(r.colId)&&r.rowspan>=n&&(t.add(r),i.delete(r.colId)),a+=r.colspan,r.rowspan>=n&&(e=!0);if(!e&&a===s.length)break;l=l.prev,n+=1}return Array.from(t)}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"))}getColumnIndex(){return d(this,e.tableMain).getColIds().indexOf(this.colId)}getCellInner(){return this.children.head}checkMerge(){const{colId:t,rowId:e,colspan:s,rowspan:o}=this,i=this.next;return null!==i&&i.statics.blotName===this.statics.blotName&&i.rowId===e&&i.colId===t&&i.colspan===s&&i.rowspan===o}optimize(t){const s=this.parent,{tableId:o,rowId:i}=this;null!==s&&s.statics.blotName!==e.tableRow&&this.wrap(e.tableRow,{tableId:o,rowId:i}),super.optimize(t)}}const ve=t.import("blots/block/embed");class Ce extends ve{static blotName=e.tableCol;static tagName="col";static validWidth(t,e){let o=Number.parseFloat(String(t));return Number.isNaN(o)&&(o=s[e?"colMinWidthPre":"colMinWidthPx"]),`${o}${e?"%":"px"}`}static create(t){const{width:e,tableId:s,colId:o,full:i,align:n}=t,l=super.create();return l.setAttribute("width",this.validWidth(e,!!i)),i&&(l.dataset.full=String(i)),n&&"left"!==n&&(l.dataset.align=n),l.dataset.tableId=s,l.dataset.colId=o,l}static value(t){const{tableId:e,colId:o}=t.dataset,i=t.getAttribute("width")||String(s.colDefaultWidth),n=t.dataset.align,l=Object.hasOwn(t.dataset,"full"),r={tableId:String(e),colId:String(o),full:l,width:Number.parseFloat(i)};return n&&(r.align=n),r}get width(){let t=this.domNode.getAttribute("width");if(!t){if(t=this.domNode.getBoundingClientRect().width,this.full){const e=this.domNode.closest("table");return e?t/100*e.getBoundingClientRect().width:s[this.full?"colMinWidthPre":"colMinWidthPx"]}return t}return Number.parseFloat(String(t))}set width(t){let e=Number.parseFloat(String(t));Number.isNaN(e)&&(e=s[this.full?"colMinWidthPre":"colMinWidthPx"]),this.domNode.setAttribute("width",this.statics.validWidth(e,!!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(t){t?this.domNode.dataset.full=String(!0):this.domNode.removeAttribute("data-full")}get align(){return this.domNode.dataset.align||""}set align(t){"right"===t||"center"===t?this.domNode.dataset.align=t:this.domNode.removeAttribute("data-align")}checkMerge(){const t=this.next,{tableId:e,colId:s}=this;return null!==t&&t.statics.blotName===this.statics.blotName&&t.tableId===e&&t.colId===s}optimize(t){const s=this.parent;if(null!=s&&s.statics.blotName!==e.tableColgroup){const t=this.statics.value(this.domNode);this.wrap(e.tableColgroup,t)}d(this,e.tableColgroup).align=this.align,null!=this.next&&this.checkMerge()&&this.next.remove(),super.optimize(t);try{const t=d(this,e.tableColgroup);let s=!0;t.children.forEach((t=>{s&&=t.full})),t.full=s}catch{}}insertAt(t,s,o){if(null==o)try{const t=s.split("\n"),o=t.pop(),i=d(this,e.tableColgroup),n=i.next;let l=this.scroll;const r=i.split(this.offset(i));if(n){const t=n.descendants(ne);if(t.length>0){const s=t[0],o=ne.formats(s.domNode),n=this.scroll.create(e.tableCellInner,o),a=n.wrap(e.tableCell,o),c=a.wrap(e.tableRow,o).wrap(e.tableBody,o.tableId);i.parent.insertBefore(c,r),l=n}}for(const e of t){const t=this.scroll.create("block");t.insertAt(0,e),l.appendChild(t)}if(o){const t=this.scroll.create("block");t.appendChild(this.scroll.create("text",o)),l.appendChild(t)}}catch{console.warn("TableCol not in TableColgroup")}else super.insertAt(t,s,o)}}class xe extends ee{scroll;static blotName=e.tableMain;static tagName="table";static className="ql-table";static create(t){const e=super.create(),{tableId:s,full:o,align:i}=t;return e.dataset.tableId=s,"right"===i||"center"===i?e.dataset.align=i:e.removeAttribute("date-align"),o&&(e.dataset.full=String(o)),e.setAttribute("cellpadding","0"),e.setAttribute("cellspacing","0"),e}constructor(t,e,s){super(t,e),this.scroll=t,this.updateAlign()}colWidthFillTable(){if(this.full)return void Object.assign(this.domNode.style,{width:null});const t=this.getCols();if(!t)return;const e=t.reduce(((t,e)=>e.width+t),0);return 0===e||Number.isNaN(e)?void 0:(this.domNode.style.width=`${e}px`,e)}get tableId(){return this.domNode.dataset.tableId}get full(){return Object.hasOwn(this.domNode.dataset,"full")}set full(t){t?this.domNode.dataset.full=String(!0):this.domNode.removeAttribute("data-full"),this.colWidthFillTable()}get align(){return this.domNode.dataset.align||""}set align(t){"right"===t||"center"===t?this.domNode.dataset.align=t:this.domNode.removeAttribute("data-align"),this.updateAlign()}setFull(){if(this.full)return;const t=this.getCols();if(0===t.length)return;const e=Math.floor(this.domNode.getBoundingClientRect().width);for(const s of t){const t=s.width/e*100;s.full=!0,s.width=t}}cancelFull(){if(!this.full)return;const t=this.getCols();if(0===t.length)return;const e=Math.floor(this.domNode.getBoundingClientRect().width);for(const o of t)o.full=!1,o.width=Math.max(o.width/100*e,s.colMinWidthPx)}updateAlign(){const t={marginLeft:null,marginRight:null};switch(this.align){case"center":t.marginLeft="auto",t.marginRight="auto";break;case"":case"left":t.marginRight="auto";break;case"right":t.marginLeft="auto"}Object.assign(this.domNode.style,t)}getRows(){return this.descendants(le)}getRowIds(){return this.getRows().map((t=>t.rowId))}getCols(){return this.descendants(Ce)}getColIds(){return this.getCols().map((t=>t.colId))}checkMerge(){const t=this.next;return null!==t&&t.statics.blotName===this.statics.blotName&&t.domNode.dataset.tableId===this.tableId}optimize(t){const s=this.parent;null!==s&&s.statics.blotName!==e.tableWrapper&&this.wrap(e.tableWrapper,this.tableId),super.optimize(t)}sortMergeChildren(){const t={[e.tableCaption]:[],[e.tableColgroup]:[],[e.tableBody]:[]};this.children.forEach((e=>{t[e.statics.blotName]&&t[e.statics.blotName].push(e)}));for(const e of Object.values(t))for(let t=1;t<e.length;t++)e[t].moveChildren(e[0]);const s=t[e.tableCaption][0],o=t[e.tableColgroup][0],i=t[e.tableBody][0],n=s&&this.children.head!==s,l=o&&s&&s.next!==o,r=o&&!s&&this.children.head!==o,a=i&&this.children.tail!==i;if(n||l||r||a){const t=this.clone();s&&t.appendChild(s),o&&t.appendChild(o),i&&t.appendChild(i),this.children.forEach((t=>t.remove())),t.moveChildren(this)}}}class ye extends ee{static blotName=e.tableColgroup;static tagName="colgroup";static create(t){const e=super.create();return e.dataset.tableId=t.tableId,t.full&&(e.dataset.full=String(t.full)),t.align&&"left"!==t.align&&(e.dataset.align=t.align),e.setAttribute("contenteditable","false"),e}get tableId(){return this.domNode.dataset.tableId}get full(){return Object.hasOwn(this.domNode.dataset,"full")}set full(t){t?this.domNode.dataset.full=String(!0):this.domNode.removeAttribute("data-full"),this.parent&&this.parent instanceof xe&&(this.parent.full=t)}get align(){return this.domNode.dataset.align||""}set align(t){"right"===t||"center"===t?this.domNode.dataset.align=t:this.domNode.removeAttribute("data-align")}findCol(t){const e=this.children.iterator();let s,o=0;for(;(s=e())&&o!==t;)o++;return s}insertColByIndex(t,o){const i=this.parent;if(!(i instanceof xe))throw new TypeError("TableColgroupFormat should be child of TableFormat");const n=this.findCol(t),l=this.scroll.create(e.tableCol,o);if(i.full){const t=this.children.iterator();let e;for(;e=t();)if(e.width-l.width>=s.colMinWidthPre){e.width-=l.width;break}}this.insertBefore(l,n)}removeColByIndex(t){const e=this.parent;if(!(e instanceof xe))throw new TypeError("TableColgroupFormat should be child of TableMainFormat");const s=this.findCol(t);s&&(e.full&&(s.next?s.next.width+=s.width:s.prev&&(s.prev.width+=s.width)),s.remove(),e.colWidthFillTable())}checkMerge(){const t=this.next,e=this.parent;return e instanceof xe&&!e.full&&e.colWidthFillTable(),null!==t&&t.statics.blotName===this.statics.blotName&&t.tableId===this.tableId}optimize(t){const s=this.parent,{tableId:o,full:i,align:n}=this;null!=s&&s.statics.blotName!==e.tableMain&&this.wrap(e.tableMain,{tableId:o,full:i,align:n});d(this,e.tableMain).align=n,super.optimize(t)}}const Me=t.import("parchment");class Ie extends ee{scroll;static blotName=e.tableWrapper;static tagName="div";static className="ql-table-wrapper";static create(t){const e=super.create();return e.dataset.tableId=t,e.addEventListener("dragstart",(t=>{t.preventDefault(),t.stopPropagation()}),!0),e.addEventListener("drop",(t=>{t.preventDefault()})),e.addEventListener("dragover",(t=>{t.preventDefault(),t.dataTransfer.dropEffect="none"})),e.setAttribute("contenteditable","false"),e}constructor(e,s,o){super(e,s),this.scroll=e,this.scroll.emitter.on(t.events.TEXT_CHANGE,this.insertLineAround)}get tableId(){return this.domNode.dataset.tableId}checkMerge(){const t=this.next;return null!==t&&t.statics.blotName===this.statics.blotName&&t.tableId===this.tableId}deleteAt(t,e){super.deleteAt(t,e);const s=this.descendants(re),o=this.descendants(ye);0!==s.length&&0!==o.length||this.remove()}remove(){super.remove(),this.scroll.emitter.off(t.events.TEXT_CHANGE,this.insertLineAround)}insertLineAround=()=>{this.prev&&this.prev instanceof Me.BlockBlot||this.parent.insertBefore(this.scroll.create("block"),this),this.next&&this.next instanceof Me.BlockBlot||this.parent.insertBefore(this.scroll.create("block"),this.next)}}function Ne(t){const[e]=p(t,re);return{body:e,rect:e.domNode.getBoundingClientRect()}}class Te{tableModule;table;quill;tableBlot;tableWrapperBlot;alignBox;cleanup;bem=c("align");resizeObserver=Pt((()=>this.update()),{ignoreFirstBind:!0});constructor(e,s,o){this.tableModule=e,this.table=s,this.quill=o,this.tableBlot=t.find(s),this.tableWrapperBlot=this.tableBlot.parent,this.alignBox=this.buildTool(),this.resizeObserver.observe(this.table),this.quill.on(t.events.TEXT_CHANGE,this.updateWhenTextChange),this.show()}updateWhenTextChange=()=>{this.update()};buildTool(){const e=this.tableModule.addContainer(this.bem.b()),s=t.import("ui/icons"),o={left:s.align[""],center:s.align.center,right:s.align.right};for(const[s,i]of Object.entries(o)){const o=document.createElement("span");o.dataset.align=s,o.classList.add(this.bem.be("item")),o.innerHTML=`<i class="icon">${i}</i>`,o.addEventListener("click",(()=>{const e=o.dataset.align;e&&(this.setTableAlign(this.tableBlot,e),this.quill.once(t.events.SCROLL_OPTIMIZE,(()=>{this.tableModule.tableSelection&&this.tableModule.tableSelection.hide(),this.tableModule.tableResize&&this.tableModule.tableResize.update(),this.tableModule.tableResizeScale&&this.tableModule.tableResizeScale.update(),this.tableModule.tableScrollbar&&this.tableModule.tableScrollbar.update()})))})),e.appendChild(o)}return this.cleanup||(this.cleanup=At(this.tableWrapperBlot.domNode,e,(()=>this.update()))),e}setTableAlign(t,e){const s=t.getCols();for(const t of s)t.align=e}show(){this.alignBox&&(this.alignBox.classList.add(this.bem.bm("active")),this.update())}hide(){this.alignBox&&(this.alignBox.classList.remove(this.bem.bm("active")),this.cleanup&&(this.cleanup(),this.cleanup=void 0))}update(){this.alignBox&&(this.tableBlot.full||this.tableBlot.domNode.offsetWidth>=this.quill.root.offsetWidth?this.hide():Ht(this.tableWrapperBlot.domNode,this.alignBox,{placement:"top",middleware:[qt(),zt({limiter:$t()}),Ot(16)]}).then((({x:t,y:e})=>{Object.assign(this.alignBox.style,{left:`${t}px`,top:`${e}px`})})))}destroy(){this.hide(),this.resizeObserver.disconnect(),this.quill.off(t.events.TEXT_CHANGE,this.updateWhenTextChange),this.alignBox&&(this.alignBox.remove(),this.alignBox=void 0)}}const Le=t.import("delta"),Ee=t.import("modules/clipboard");function Se(t){let e=Number.parseFloat(t.getAttribute("width")||String(s.colDefaultWidth));if(Number.isNaN(e)){const s=t.style.width;e=s?Number.parseFloat(s):t.offsetWidth}return e}class Be extends Ee{quill;tableId=Gt();rowId=Gt();rowIds=[];colIds=[];emptyRowCount=[];rowspanCount=[];cellCount=0;colCount=0;constructor(t,e){super(t,e),this.quill=t,this.addMatcher("table",this.matchTable.bind(this)),this.addMatcher("tbody",this.matchTbody.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))}matchTable(t,o){if(0===o.ops.length)return o;const i=this.emptyRowCount.reduce(((t,e)=>(t.push((t[t.length-1]??0)+e),t)),[]),n=[],l=[];let r=-1;for(let t=0;t<o.ops.length;t++){const{attributes:s,insert:a}=o.ops[t],{table:c,[e.tableCell]:d,...h}=s||{},u=I(a)&&a[e.tableCol];if(u)l.push({insert:a});else if(h[e.tableCellInner]){const t=h[e.tableCellInner],s=this.rowIds.indexOf(t.rowId);if(-1!==s){const e=t.rowspan;t.rowspan-=i[s+e-1]-i[s]}n.push({attributes:{...h,[e.tableCellInner]:t},insert:a})}else n.push({attributes:h,insert:a});!h?.[e.tableCellInner]&&!h?.[e.tableCaption]&&!u&&M(a)&&a.trim().length>0&&(r=t)}const a=function(t,e){const o=new Array(e).fill(s.colDefaultWidth),i=Array.from(t.querySelectorAll("tr"));for(const t of i){const s=Array.from(t.querySelectorAll("td"));for(const[t,i]of s.entries()){if(!(t<e))break;{const e=Se(i);o[t]=e||o[t]}}}return o}(t,this.colIds.length).reduce(((t,s,o)=>(l[o]?t.push(l[o]):t.push({insert:{[e.tableCol]:{tableId:this.tableId,colId:this.colIds[o],width:s,full:!1}}}),t)),[]);return n.splice(r+1,0,...a),this.tableId=Gt(),this.rowIds=[],this.colIds=[],this.emptyRowCount=[],this.rowspanCount=[],this.cellCount=0,this.colCount=0,new Le(n)}matchTbody(t,s){const o=t.style.backgroundColor;if(o)for(const t of s.ops)if(t.attributes?.[e.tableCellInner]){const{style:s,...i}=t.attributes[e.tableCellInner],n=Xt(s||"");n.backgroundColor||(n.backgroundColor=o,t.attributes[e.tableCellInner]={...i,style:Ut(n)})}return s}matchColgroup(t,s){const o=[];for(let t=0;t<s.ops.length;t++){const i=s.ops[t];i&&I(i.insert)&&i.insert[e.tableCol]&&o.push(i)}return new Le(o)}matchCol(t,s){let o=Number(t.getAttribute("span")||1);Number.isNaN(o)&&(o=1);const i=new Le;for(let s=0;s<o;s++)this.colIds[this.colCount]=Gt(),i.insert({[e.tableCol]:Object.assign(Ce.value(t),{tableId:this.tableId,colId:this.colIds[this.colCount]})}),this.colCount+=1;return i}matchTr(t,s){this.rowIds.push(this.rowId),this.rowId=Gt(),this.cellCount=0;for(const[t,e]of this.rowspanCount.entries())e.rowspan>0&&(e.rowspan-=1),e.rowspan<=0&&(this.rowspanCount[t]={rowspan:0,colspan:0});let o=!0;for(const t of s.ops)if(t.attributes){const{background:s,[e.tableCellInner]:i}=t.attributes;if(i||(o=!1),i&&s){const{style:o=""}=i,n=Xt(o);n.backgroundColor=s,t.attributes[e.tableCellInner].style=Ut(n)}}else o=!1;let i=0;return o||(i=1,s=new Le),this.emptyRowCount.push(i),s}matchTd(t,s){const o=t,i=we.formats(o);if(!this.colIds[this.cellCount]||!this.rowspanCount[this.cellCount])for(let t=this.cellCount;t>=0;t--)this.colIds[t]||(this.colIds[t]=Gt()),this.rowspanCount[t]||(this.rowspanCount[t]={rowspan:0,colspan:0});for(let t=this.cellCount;t<this.rowspanCount.length;t++){const{rowspan:e,colspan:s}=this.rowspanCount[t];if(0===e)break;this.cellCount+=s}i.rowspan>1&&(this.rowspanCount[this.cellCount]={rowspan:i.rowspan,colspan:i.colspan});const n=this.colIds[this.cellCount];this.cellCount+=i.colspan;const l=Object.assign(i,{tableId:this.tableId,rowId:this.rowId,colId:n});"none"===o.style.border&&(l.style=l.style.replaceAll(/border-(top|right|bottom|left)-style:none;?/g,""));const r=[];for(const t of s.ops){const{attributes:s={},...o}=t,{[e.tableCell]:i,...n}=s;r.push({...o,attributes:{...n,[e.tableCellInner]:l}})}return(r.length<=0||!M(r[r.length-1].insert)||!r[r.length-1].insert.endsWith("\n"))&&r.push({insert:"\n",attributes:{[e.tableCellInner]:l}}),new Le(r)}matchTdAttributor(t,s){if("td"===t.tagName.toLocaleLowerCase()){const t=[];for(const o of s.ops){const{attributes:s,...i}=o,n=s?.[e.tableCellInner];if(s&&n&&n.style){const{background:e,...o}=s,l=document.createElement("div");l.style.background=e;const r=document.createElement("div");if(r.style.cssText=n.style,l.style.background===r.style.backgroundColor){t.push({...i,attributes:{...o}});continue}}t.push(o)}return new Le(t)}return s}convert({html:t,text:s},o={}){const i=super.convert({html:t,text:s},o);if(o[e.tableCellInner])for(const t of i.ops)I(t.insert)&&t.insert[e.tableCol]?t.insert="":(t.attributes||(t.attributes={}),t.attributes[e.tableCellInner]=o[e.tableCellInner]);return i}matchCaption(t,s){for(let t=0;t<s.ops.length;t++){const o=s.ops[t],{attributes:i}=o;i&&i[e.tableCaption]&&(i[e.tableCaption].tableId=this.tableId,o.attributes=i)}return s}}const Re="color-selector",ke={Break:{name:"break"},CopyCell:{name:"CopyCell",tip:"Copy cell",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 256">\n <g fill="currentColor">\n <path d="M216 40v128h-48V88H88V40Z" opacity=".2" />\n <path\n d="M216 32H88a8 8 0 0 0-8 8v40H40a8 8 0 0 0-8 8v128a8 8 0 0 0 8 8h128a8 8 0 0 0 8-8v-40h40a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8m-56 176H48V96h112Zm48-48h-32V88a8 8 0 0 0-8-8H96V48h112Z"\n />\n </g>\n</svg>\n',handle:(t,e)=>{const s=t.getTextByCell(e),o=t.getHTMLByCell(e),i=new ClipboardItem({"text/plain":new Blob([s],{type:"text/plain"}),"text/html":new Blob([o],{type:"text/html"})});navigator.clipboard.write([i]),t.hideTableTools()}},CutCell:{name:"CutCell",tip:"Cut cell",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 32 32">\n <path\n fill="currentColor"\n 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"\n />\n <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" />\n</svg>\n',handle:(t,e)=>{const s=t.getTextByCell(e),o=t.getHTMLByCell(e,!0),i=new ClipboardItem({"text/plain":new Blob([s],{type:"text/plain"}),"text/html":new Blob([o],{type:"text/html"})});navigator.clipboard.write([i]),t.hideTableTools()}},InsertTop:{name:"InsertTop",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">\n <path\n fill="currentColor"\n 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"\n />\n</svg>\n',tip:"Insert row above",handle:(t,e)=>{t.appendRow(e,!1),t.hideTableTools()}},InsertRight:{name:"InsertRight",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">\n <path\n fill="currentColor"\n 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"\n />\n</svg>\n',tip:"Insert column right",handle:(t,e)=>{t.appendCol(e,!0),t.hideTableTools()}},InsertBottom:{name:"InsertBottom",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">\n <path\n fill="currentColor"\n 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"\n />\n</svg>\n',tip:"Insert row below",handle:(t,e)=>{t.appendRow(e,!0),t.hideTableTools()}},InsertLeft:{name:"InsertLeft",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">\n <path\n fill="currentColor"\n 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"\n />\n</svg>\n',tip:"Insert column Left",handle:(t,e)=>{t.appendCol(e,!1),t.hideTableTools()}},MergeCell:{name:"MergeCell",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">\n <path\n fill="currentColor"\n d="M5 10H3V4h8v2H5zm14 8h-6v2h8v-6h-2zM5 18v-4H3v6h8v-2zM21 4h-8v2h6v4h2zM8 13v2l3-3l-3-3v2H3v2zm8-2V9l-3 3l3 3v-2h5v-2z"\n />\n</svg>\n',tip:"Merge Cell",handle:(t,e)=>{t.mergeCells(e),t.hideTableTools()}},SplitCell:{name:"SplitCell",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">\n <path\n fill="currentColor"\n d="M19 14h2v6H3v-6h2v4h14zM3 4v6h2V6h14v4h2V4zm8 7v2H8v2l-3-3l3-3v2zm5 0V9l3 3l-3 3v-2h-3v-2z"\n />\n</svg>\n',tip:"Split Cell",handle:(t,e)=>{t.splitCell(e),t.hideTableTools()}},DeleteRow:{name:"DeleteRow",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">\n <path\n fill="currentColor"\n 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"\n />\n</svg>\n',tip:"Delete Row",handle:(t,e)=>{t.removeRow(e),t.hideTableTools()}},DeleteColumn:{name:"DeleteColumn",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">\n <path\n fill="currentColor"\n 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"\n />\n</svg>\n',tip:"Delete Column",handle:(t,e)=>{t.removeCol(e),t.hideTableTools()}},DeleteTable:{name:"DeleteTable",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">\n <path\n fill="currentColor"\n 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"\n />\n</svg>\n',tip:"Delete table",handle:(t,e)=>{t.deleteTable(e)}},BackgroundColor:{name:"BackgroundColor",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">\n <path\n fill="none"\n stroke="currentColor"\n stroke-linecap="round"\n stroke-linejoin="round"\n stroke-width="2"\n d="m4 8l4-4m6 0L4 14m0 6L20 4m0 6L10 20m10-4l-4 4"\n />\n</svg>\n',isColorChoose:!0,tip:"Set background color",key:"background-color",handle:(t,e,s)=>{t.setCellAttrs(e,"background-color",s,!0)}},BorderColor:{name:"BorderColor",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">\n <path\n fill="none"\n stroke="currentColor"\n stroke-linecap="round"\n stroke-linejoin="round"\n stroke-width="1.5"\n 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"\n />\n</svg>\n',isColorChoose:!0,tip:"Set border color",key:"border-color",handle:(t,e,s)=>{t.setCellAttrs(e,"border-color",s,!0)}},SwitchWidth:{name:"SwitchWidth",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">\n \x3c!-- Icon from Tabler Icons by Paweł Kuna - https://github.com/tabler/tabler-icons/blob/master/LICENSE --\x3e\n <path\n fill="none"\n stroke="currentColor"\n stroke-linecap="round"\n stroke-linejoin="round"\n stroke-width="2"\n 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"\n />\n</svg>\n',tip:"Switch table width",handle:e=>{if(!e.table)return;const s=t.find(e.table);s&&(s.full?s.cancelFull():s.setFull())}},InsertCaption:{name:"InsertCaption",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">\n \x3c!-- Icon from TDesign Icons by TDesign - https://github.com/Tencent/tdesign-icons/blob/main/LICENSE --\x3e\n <path fill="currentColor" d="M21 10v12h-2V12H5v10H3V10zm0-8v6H3V2zm-2 2H5v2h14z" />\n</svg>\n',tip:"Insert table caption",handle(s){if(!s.table)return;const o=t.find(s.table);if(!o)return;const i=s.quill.scroll.create("text","Table Caption").wrap(e.tableCaption,{tableId:o.tableId});o.insertBefore(i,o.children.head)}}},Ae=c("color-map"),Oe={selectWrapper:Ae.b(),used:Ae.bm("used"),item:Ae.be("item"),btn:Ae.be("btn"),map:Ae.be("content"),mapRow:Ae.be("content-row")};class ze{tableModule;quill;usedColors=new Set;options;menu=null;isMenuDisplay=!1;isColorPicking=!1;updateUsedColor;tooltipItem=[];activeTooltip=null;bem=c("menu");colorItemClass=`color-${Gt()}`;colorChooseTooltipOption={direction:"top"};constructor(e,s,o){this.tableModule=e,this.quill=s,this.options=this.resolveOptions(o);try{const t=localStorage.getItem(this.options.localstorageKey)||"[]";let e=JSON.parse(t);y(e)||(e=[]),e.slice(-10).map((t=>this.usedColors.add(t)))}catch{}this.updateUsedColor=Kt((t=>{if(!t)return;if(this.usedColors.add(t),this.usedColors.size>10){const t=Array.from(this.usedColors).slice(-10);this.usedColors.clear(),t.map((t=>this.usedColors.add(t)))}localStorage.setItem(this.options.localstorageKey,JSON.stringify(Array.from(this.usedColors)));const e=Array.from(document.querySelectorAll(`.${this.colorItemClass}.${Oe.used}`));for(const s of e){const e=document.createElement("div");e.classList.add(Oe.item),e.style.backgroundColor=String(t);Array.from(s.querySelectorAll(`.${Oe.item}[style*="background-color: ${e.style.backgroundColor}"]`)).length<=0&&s.appendChild(e);const o=Array.from(s.querySelectorAll(`.${Oe.item}`)).slice(0,-10);for(const t of o)t.remove()}}),1e3),this.quill.on(t.events.TEXT_CHANGE,this.updateWhenTextChange)}updateWhenTextChange=()=>{this.isMenuDisplay&&this.update()};resolveOptions(t){return Object.assign({tipText:!0,tools:[ke.InsertTop,ke.InsertRight,ke.InsertBottom,ke.InsertLeft,ke.Break,ke.MergeCell,ke.SplitCell,ke.Break,ke.DeleteRow,ke.DeleteColumn,ke.DeleteTable,ke.Break,ke.BackgroundColor,ke.BorderColor],localstorageKey:"__table-bg-used-color",defaultColorMap:n},t)}buildTools(){const t=document.createElement("div");t.classList.add(this.bem.b()),Object.assign(t.style,{display:"flex"});for(const e of this.options.tools){const{name:s,icon:o,handle:i,isColorChoose:n,key:l,tip:r=""}=e,a=document.createElement("span");if(a.classList.add(this.bem.be("item")),"break"===s)a.classList.add(this.bem.is("break"));else{const t=document.createElement("i");if(t.classList.add("icon"),x(o)?t.appendChild(o(this.tableModule)):t.innerHTML=o,a.appendChild(t),n&&l){const t=this.createColorChoose(a,{name:s,icon:o,handle:i,isColorChoose:n,key:l,tip:r});this.tooltipItem.push(t),a.classList.add(Re)}else x(i)&&a.addEventListener("click",(t=>{this.quill.focus(),i(this.tableModule,this.getSelectedTds(),t)}),!1);const e=this.tableModule.options.texts[s]||r;this.options.tipText&&e&&r&&this.createTipText(a,e)}t.appendChild(a)}return t}createColorChoose(t,{handle:e,key:s}){const o=document.createElement("div");if(o.classList.add(Oe.selectWrapper),this.options.defaultColorMap.length>0){const t=document.createElement("div");t.classList.add(Oe.map);for(const e of this.options.defaultColorMap){const s=document.createElement("div");s.classList.add(Oe.mapRow);for(const t of e){const e=document.createElement("div");e.classList.add(Oe.item),e.style.backgroundColor=t,s.appendChild(e)}t.appendChild(s)}o.appendChild(t)}const i=document.createElement("div");i.classList.add(Oe.mapRow),Object.assign(i.style,{marginTop:"4px"});const n=document.createElement("div");n.classList.add(Oe.btn,"transparent"),n.textContent=this.tableModule.options.texts.transparent,n.addEventListener("click",(()=>{e(this.tableModule,this.getSelectedTds(),"transparent")}));const l=document.createElement("div");l.classList.add(Oe.btn,"clear"),l.textContent=this.tableModule.options.texts.clear,l.addEventListener("click",(()=>{e(this.tableModule,this.getSelectedTds(),null)}));const r=document.createElement("div");r.classList.add(Oe.btn,"custom"),r.textContent=this.tableModule.options.texts.custom;const a=T({onChange:t=>{e(this.tableModule,this.getSelectedTds(),t),this.updateUsedColor(t)}}),{hide:c,destroy:d}=Dt(r,{direction:"right",type:"click",content:a,container:r});i.appendChild(n),i.appendChild(l),i.appendChild(r),o.appendChild(i);const h=document.createElement("div");h.classList.add(Oe.used,this.colorItemClass);for(const t of this.usedColors){const e=document.createElement("div");e.classList.add(Oe.item),e.style.backgroundColor=t,h.appendChild(e)}o.appendChild(h),o.addEventListener("click",(t=>{t.stopPropagation(),c();const e=t.target,o=e.style.backgroundColor,i=this.getSelectedTds();if(e&&o&&i.length>0){if(this.tableModule.setCellAttrs(i,s,o,!0),!e.closest(`.${Oe.item}`))return;this.updateUsedColor(o)}}));const u=Dt(t,{type:"click",content:o,onOpen:()=>(this.isMenuDisplay&&this.tableModule.tableSelection&&this.tableModule.tableSelection.hideDisplay(),this.setActiveTooltip(u),!1),onClose:()=>{this.isMenuDisplay&&this.tableModule.tableSelection&&(this.tableModule.tableSelection.updateWithSelectedTds(),this.tableModule.tableSelection.showDisplay());return o.contains(a)&&c(),this.activeTooltip===u&&(this.activeTooltip=null),!1},onDestroy:()=>{d(),this.activeTooltip===u&&(this.activeTooltip=null)},...this.colorChooseTooltipOption});return u.isColorPick=!0,u}setActiveTooltip(t){this.activeTooltip&&this.activeTooltip!==t&&this.activeTooltip.hide(!0),this.activeTooltip=t}getSelectedTds(){return this.tableModule.tableSelection?.selectedTds||[]}createTipText(t,e){const s=Dt(t,{msg:e});s&&this.tooltipItem.push(s)}show(){this.menu&&this.tableModule.tableSelection&&this.tableModule.tableSelection.boundary&&(Object.assign(this.menu.style,{display:"flex"}),this.isMenuDisplay=!0,this.update())}update(){}hide(){this.menu&&Object.assign(this.menu.style,{display:"none"});for(const t of this.tooltipItem)t.hide(!0);this.isMenuDisplay=!1}destroy(){this.quill.off(t.events.TEXT_CHANGE,this.updateWhenTextChange),this.activeTooltip=null;for(const t of this.tooltipItem)t.destroy();this.menu&&(this.hide(),this.menu.remove(),this.menu=null)}}class qe extends ze{tableModule;quill;colorChooseTooltipOption={direction:"right"};constructor(t,e,s){super(t,e,s),this.tableModule=t,this.quill=e,this.quill.root.addEventListener("contextmenu",this.listenContextmenu)}listenContextmenu=t=>{t.preventDefault();const e=t.composedPath();if(!e||e.length<=0)return;e.find((t=>t.tagName&&"TABLE"===t.tagName.toUpperCase()&&t.classList.contains("ql-table")))&&this.tableModule.tableSelection?.selectedTds?.length?(this.menu||(this.menu=this.buildTools()),Object.assign(this.menu.style,{display:"flex"}),this.isMenuDisplay=!0,this.update({x:t.clientX,y:t.clientY}),document.addEventListener("click",(()=>{this.hide()}),{once:!0})):this.hide()};buildTools(){const t=super.buildTools();t.classList.add(this.bem.is("contextmenu"));const e=t.getElementsByClassName(Re);for(const t of Array.from(e))t.addEventListener("click",(t=>t.stopPropagation()));return document.body.appendChild(t),t}createTipText(t,e){const s=document.createElement("span");s.textContent=e,t.appendChild(s)}show(){}update(t){if(!(this.isMenuDisplay&&this.menu&&this.tableModule.tableSelection&&this.tableModule.tableSelection.isDisplaySelection))return;if(!t)return;super.update();const e={display:"flex",left:0,top:0},{x:s,y:o}=t;e.left=s,e.top=o,Object.assign(this.menu.style,{...e,left:`${e.left+window.scrollX}px`,top:`${e.top+window.scrollY}px`});const i=this.menu.getBoundingClientRect(),{left:n,top:l}=jt(i);Object.assign(this.menu.style,{left:`${n+window.scrollX}px`,top:`${l+window.scrollY}px`})}destroy(){this.quill.root.removeEventListener("contextmenu",this.listenContextmenu),super.destroy()}}class $e extends ze{tableModule;quill;constructor(t,e,s){super(t,e,s),this.tableModule=t,this.quill=e,this.menu=this.buildTools(),this.tableModule.addContainer(this.menu),this.show(),this.update()}update(){this.isMenuDisplay&&this.menu&&this.tableModule.tableSelection&&this.tableModule.tableSelection.isDisplaySelection&&(super.update(),Ht(this.tableModule.tableSelection.cellSelect,this.menu,{placement:"bottom",middleware:[qt(),zt({limiter:$t()}),Ot(20)]}).then((({x:t,y:e})=>{Object.assign(this.menu.style,{left:`${t}px`,top:`${e}px`})})))}}const He=t=>!t.full&&"right"===t.align;class We{tableModule;quill;colIndex=-1;tableMain;dragging=!1;dragColBreak=null;handleColMouseUpFunc=this.handleColMouseUp.bind(this);handleColMouseMoveFunc=this.handleColMouseMove.bind(this);handleColMouseDownFunc=this.handleColMouseDown.bind(this);rowIndex=-1;dragRowBreak=null;handleRowMouseUpFunc=this.handleRowMouseUp.bind(this);handleRowMouseMoveFunc=this.handleRowMouseMove.bind(this);handleRowMouseDownFunc=this.handleRowMouseDown.bind(this);dragBEM=c("drag-line");constructor(t,e){this.tableModule=t,this.quill=e}findCurrentColIndex(t){return-1}colWidthChange(t,e,s){}async createConfirmDialog({message:t,confirm:e,cancel:s}){return new Promise((o=>{const i=document.createElement("div");Object.assign(i.style,{padding:"8px 12px",fontSize:"14px",lineHeight:"1.5"});const n=document.createElement("p");n.textContent=t;const l=document.createElement("div");Object.assign(l.style,{display:"flex",justifyContent:"flex-end",gap:"6px"});const r=N({content:s}),a=N({type:"confirm",content:e});l.appendChild(r),l.appendChild(a),i.appendChild(n),i.appendChild(l);const{close:c}=E({child:i});r.addEventListener("click",(()=>{o(!1),c()})),a.addEventListener("click",(()=>{o(!0),c()}))}))}async handleColMouseUp(){if(!this.dragColBreak||!this.tableMain||-1===this.colIndex)return;const t=this.tableMain.getCols(),e=Number.parseInt(this.dragColBreak.dataset.w||"0");let i=this.tableMain.full,n=!1;const l=[];if(i){let o=e/this.tableMain.domNode.getBoundingClientRect().width*100;const i=t[this.colIndex].width;if(o<i){if(o=Math.max(s.colMinWidthPre,o),t[this.colIndex+1]||t[this.colIndex-1]){const e=t[this.colIndex+1]?this.colIndex+1:this.colIndex-1;l.push({index:e,width:t[e].width+i-o})}else o=100;n=!0,l.push({index:this.colIndex,width:o})}else if(t[this.colIndex+1]){const e=i+t[this.colIndex+1].width;o=Math.min(e-s.colMinWidthPre,o),n=!0,l.push({index:this.colIndex,width:o},{index:this.colIndex+1,width:e-o})}}else this.tableMain.domNode.style.width=`${Number.parseFloat(this.tableMain.domNode.style.width)-t[this.colIndex].domNode.getBoundingClientRect().width+e}px`,n=!0,l.push({index:this.colIndex,width:e});if(document.body.removeChild(this.dragColBreak),this.dragColBreak=null,document.removeEventListener("mouseup",this.handleColMouseUpFunc),document.removeEventListener("mousemove",this.handleColMouseMoveFunc),this.dragging=!1,n){const e=this.tableMain.domNode.getBoundingClientRect().width;if(i){let s=0;const o=new Set(l.map((({index:t,width:e})=>(s+=e,t))));for(const[e,i]of t.entries())o.has(e)||(s+=i.width);if(s>100){if(!await this.createConfirmDialog({message:this.tableModule.options.texts.perWidthInsufficient,confirm:this.tableModule.options.texts.confirmText,cancel:this.tableModule.options.texts.cancelText}))return;this.tableMain.cancelFull(),i=!1;for(const[t,s]of l.entries()){const{width:o,index:i}=s;l[t]={index:i,width:o/100*e}}}}for(const{index:s,width:o}of l)t[s].width=`${Math.round(o)}${i?"%":"px"}`,this.colWidthChange(s,{px:Math.round(o/100*e),pre:Math.round(o)},i)}this.quill.emitter.emit(o.AFTER_TABLE_RESIZE)}getColumnRect(t){if(!this.tableMain)return null;const e=this.tableMain.getCols();if(t>=e.length)return null;let s=e[0].domNode.getBoundingClientRect().left;for(let o=0;o<t;o++){s+=e[o].domNode.getBoundingClientRect().width}const o=e[t].domNode.getBoundingClientRect().width;return{left:s,right:s+o,width:o}}handleColMouseMove(t){if(t.preventDefault(),!this.dragColBreak||!this.tableMain||-1===this.colIndex)return;const e=this.tableMain.getCols(),o=this.getColumnRect(this.colIndex),i=this.tableMain.domNode.getBoundingClientRect();let n=t.clientX;if(this.tableMain.full){const t=s.colMinWidthPre/100*i.width;let l=i.right;n>o.right&&e[this.colIndex+1]&&(l=Math.max(this.getColumnRect(this.colIndex+1).right-t,o.left+t));const r=o.left+t;n=Math.min(Math.max(n,r),l)}else He(this.tableMain)?o.right-n<s.colMinWidthPx&&(n=o.right-s.colMinWidthPx):n-o.left<s.colMinWidthPx&&(n=o.left+s.colMinWidthPx);let l=n-o.left;return He(this.tableMain)&&(l=o.right-n),this.dragColBreak.style.left=`${n}px`,this.dragColBreak.dataset.w=String(l),{left:n,width:l}}handleColMouseDown(t){if(0!==t.button)return;if(t.preventDefault(),!this.tableMain)return;const{rect:e,body:s}=Ne(this.tableMain);if(!s)return;const o=this.tableMain.getCols();if(this.colIndex=this.findCurrentColIndex(t),-1===this.colIndex)return;const i=o[this.colIndex].width,n=this.tableMain.full?i/100*e.width:i;document.addEventListener("mouseup",this.handleColMouseUpFunc),document.addEventListener("mousemove",this.handleColMouseMoveFunc),this.dragging=!0;const l=document.createElement("div");l.classList.add(this.dragBEM.b()),l.classList.add(this.dragBEM.is("col")),l.dataset.w=String(n);const r={top:e.y,left:t.clientX,height:e.height};Object.assign(l.style,{top:`${r.top}px`,left:`${r.left}px`,height:`${r.height}px`});const a=document.body;return a.appendChild(l),this.dragColBreak&&a.removeChild(this.dragColBreak),this.dragColBreak=l,r}findCurrentRowIndex(t){return-1}rowHeightChange(t,e){}handleRowMouseUp(){if(!this.tableMain||!this.dragRowBreak||-1===this.rowIndex)return;const t=Number.parseInt(this.dragRowBreak.dataset.h||"0");this.tableMain.getRows()[this.rowIndex].setHeight(`${t}px`),this.rowHeightChange(this.rowIndex,t),document.body.removeChild(this.dragRowBreak),this.dragRowBreak=null,document.removeEventListener("mouseup",this.handleRowMouseUpFunc),document.removeEventListener("mousemove",this.handleRowMouseMoveFunc),this.dragging=!1,this.quill.emitter.emit(o.AFTER_TABLE_RESIZE)}handleRowMouseMove(t){if(!this.tableMain||!this.dragRowBreak||-1===this.rowIndex)return;t.preventDefault();const e=this.tableMain.getRows()[this.rowIndex].domNode.getBoundingClientRect();let o=t.clientY;return o-e.y<s.rowMinHeightPx&&(o=e.y+s.rowMinHeightPx),this.dragRowBreak.style.top=`${o}px`,this.dragRowBreak.dataset.h=String(o-e.y),{top:o,height:o-e.y}}handleRowMouseDown(t){if(0!==t.button)return;if(t.preventDefault(),!this.tableMain)return;if(this.rowIndex=this.findCurrentRowIndex(t),-1===this.rowIndex)return;this.dragging=!0,document.addEventListener("mouseup",this.handleRowMouseUpFunc),document.addEventListener("mousemove",this.handleRowMouseMoveFunc);const e=this.tableMain.getRows()[this.rowIndex].domNode.getBoundingClientRect().height,s=this.tableMain.domNode.getBoundingClientRect(),o=document.createElement("div");o.classList.add(this.dragBEM.b()),o.classList.add(this.dragBEM.is("row")),o.dataset.h=String(e);const i={top:t.clientY,left:s.x,width:s.width};Object.assign(o.style,{top:`${i.top}px`,left:`${i.left}px`,width:`${i.width}px`});const n=document.body;return n.appendChild(o),this.dragRowBreak&&n.removeChild(this.dragRowBreak),this.dragRowBreak=o,i}update(){}destroy(){}}class De extends We{tableModule;table;root;tableMain;tableWrapper;resizeObserver;tableCols=[];tableRows=[];rowHeadWrapper=null;colHeadWrapper=null;corner=null;scrollHandler=[];lastHeaderSelect=null;size=12;bem=c("resize-box");constructor(e,s,o){super(e,o),this.tableModule=e,this.table=s,this.tableMain=t.find(this.table),this.tableMain&&(this.tableWrapper=this.tableMain.parent,this.tableWrapper&&(this.root=this.tableModule.addContainer(this.bem.b()),this.resizeObserver=new ResizeObserver((()=>{this.show()})),this.resizeObserver.observe(this.table),this.quill.on(t.events.TEXT_CHANGE,this.updateWhenTextChange)))}updateWhenTextChange=()=>{this.update()};handleResizerHeader(t,e,s){const{clientX:o,clientY:i}=s,n=this.table.getBoundingClientRect();if(this.tableModule.tableSelection){const l=this.tableModule.tableSelection;s.shiftKey||(this.lastHeaderSelect=null);const r=[{x:t?n.left:o,y:t?i:n.top},{x:t?n.right:o,y:t?i:n.bottom}];if(this.lastHeaderSelect){let e,s;if(this.lastHeaderSelect.isX){const t=Array.from(this.root.getElementsByClassName(this.bem.be("row-header")))[this.lastHeaderSelect.index].getBoundingClientRect();e=Math.min(t.left,n.left),s=t.top+t.height/2}else{const t=Array.from(this.root.getElementsByClassName(this.bem.be("col-header")))[this.lastHeaderSelect.index].getBoundingClientRect();e=t.left+t.width/2,s=Math.min(t.top,n.top)}this.lastHeaderSelect.isX!==t?(r[1]={x:Math.max(r[0].x,e),y:Math.max(r[0].y,s)},r[0]={x:Math.min(r[0].x,e),y:Math.min(r[0].y,s)}):t?(r[0].y=Math.min(r[0].y,s),r[1].y=Math.max(r[1].y,s)):(r[0].x=Math.min(r[0].x,e),r[1].x=Math.max(r[1].x,e))}else this.lastHeaderSelect={isX:t,index:e};l.table=this.table,l.selectedTds=l.computeSelectedTds(...r),l.show()}}findCurrentColIndex(t){return Array.from(this.root.getElementsByClassName(this.bem.be("col-separator"))).indexOf(t.target)}colWidthChange(t,e,s){Array.from(this.root.getElementsByClassName(this.bem.be("col-header")))[t].style.width=s?`${e.pre}%`:`${e.px}px`}handleColMouseDownFunc=function(t){const e=this.handleColMouseDown(t);if(e&&this.dragColBreak){const[t]=p(this.tableMain,ge),s=t&&"top"===t.side?0:this.size;Object.assign(this.dragColBreak.style,{top:e.top-s+"px",left:`${e.left}px`,height:`${e.height+this.size}px`})}return e}.bind(this);bindColEvents(){const t=Array.from(this.root.getElementsByClassName(this.bem.be("col-header"))),e=Array.from(this.root.getElementsByClassName(this.bem.be("col-separator")));Vt.call(this,this.tableWrapper.domNode,(()=>{this.colHeadWrapper.scrollLeft=this.tableWrapper.domNode.scrollLeft}));for(const[e,s]of t.entries())s.addEventListener("click",this.handleResizerHeader.bind(this,!1,e));for(const t of e)t.addEventListener("mousedown",this.handleColMouseDownFunc),t.addEventListener("dragstart",(t=>t.preventDefault()))}findCurrentRowIndex(t){return Array.from(this.root.getElementsByClassName(this.bem.be("row-separator"))).indexOf(t.target)}rowHeightChange(t,e){Array.from(this.root.getElementsByClassName(this.bem.be("row-header")))[t].style.height=`${e}px`}handleRowMouseDownFunc=function(t){const e=this.handleRowMouseDown(t);return e&&this.dragRowBreak&&Object.assign(this.dragRowBreak.style,{top:`${e.top}px`,left:e.left-this.size+"px",width:`${e.width+this.size}px`}),e}.bind(this);bindRowEvents(){const t=Array.from(this.root.getElementsByClassName(this.bem.be("row-header"))),e=Array.from(this.root.getElementsByClassName(this.bem.be("row-separator")));Vt.call(this,this.tableWrapper.domNode,(()=>{this.rowHeadWrapper.scrollTop=this.tableWrapper.domNode.scrollTop}));for(const[e,s]of t.entries())s.addEventListener("click",this.handleResizerHeader.bind(this,!0,e));for(const t of e)t.addEventListener("mousedown",this.handleRowMouseDownFunc),t.addEventListener("dragstart",(t=>t.preventDefault()))}update(){const{rect:t,body:e}=Ne(this.tableMain);if(!e)return;const s=this.tableWrapper.domNode.getBoundingClientRect(),o=this.quill.root.getBoundingClientRect();Object.assign(this.root.style,{top:Math.max(t.y,s.y)-o.y+"px",left:Math.max(t.x,s.x)-o.x+"px"});let i=-1*this.size,n=-1*this.size;He(this.tableMain)?(this.root.classList.add(this.bem.is("align-right")),i=Math.min(s.width,t.width),n=Math.min(s.width,t.width)):this.root.classList.remove(this.bem.is("align-right"));const[l]=p(this.tableMain,ge),r=!l||!(l&&"top"===l.side);r?this.root.classList.remove(this.bem.is("caption-bottom")):this.root.classList.add(this.bem.is("caption-bottom")),this.corner&&Object.assign(this.corner.style,{transform:`translateY(${-1*this.size}px) translateX(${i}px)`,top:`${r?0:t.height+this.size}px`}),this.rowHeadWrapper&&Object.assign(this.rowHeadWrapper.style,{transform:`translateX(${n}px)`}),this.colHeadWrapper&&Object.assign(this.colHeadWrapper.style,{top:`${r?0:t.height+this.size}px`})}show(){this.tableCols=this.tableMain.getCols(),this.tableRows=this.tableMain.getRows(),this.root.innerHTML="";const{rect:t,body:e}=Ne(this.tableMain);if(!e)return;const s=this.tableWrapper.domNode.getBoundingClientRect();if(this.tableCols.length>0&&this.tableRows.length>0&&(this.corner=document.createElement("div"),this.corner.classList.add(this.bem.be("corner")),Object.assign(this.corner.style,{width:`${this.size}px`,height:`${this.size}px`}),this.corner.addEventListener("click",(()=>{if(this.tableModule.tableSelection){const t=this.tableMain.descendants(ne),e=this.tableModule.tableSelection;e.selectedTds=t,e.show(),e.updateWithSelectedTds()}})),this.root.appendChild(this.corner)),this.tableCols.length>0){let e="";for(const[,s]of this.tableCols.entries()){const o=s.domNode.getBoundingClientRect().width;e+=`<div class="${this.bem.be("col-header")}" style="width: ${o}px">\n <div class="${this.bem.be("col-separator")}" style="height: ${t.height+this.size-3}px"></div>\n </div>`}const o=document.createElement("div");o.classList.add(this.bem.be("col"));const i=document.createElement("div");i.classList.add(this.bem.be("col-wrapper")),Object.assign(o.style,{transform:`translateY(-${this.size}px)`,maxWidth:`${s.width}px`,height:`${this.size}px`}),Object.assign(i.style,{width:`${t.width}px`}),i.innerHTML=e,o.appendChild(i),this.root.appendChild(o),o.scrollLeft=this.tableWrapper.domNode.scrollLeft,this.colHeadWrapper=o,this.bindColEvents()}if(this.tableRows.length>0){let e="";for(const[,s]of this.tableRows.entries()){const o=`${s.domNode.getBoundingClientRect().height}px`;e+=`<div class="${this.bem.be("row-header")}" style="height: ${Number.parseFloat(o)}px">\n <div class="${this.bem.be("row-separator")}" style="width: ${t.width+this.size-3}px"></div>\n </div>`}const o=document.createElement("div");o.classList.add(this.bem.be("row"));const i=document.createElement("div");i.classList.add(this.bem.be("row-wrapper")),Object.assign(o.style,{transform:`translateX(-${this.size}px)`,width:`${this.size}px`,maxHeight:`${s.height}px`}),Object.assign(i.style,{height:`${t.height}px`}),i.innerHTML=e,o.appendChild(i),this.root.appendChild(o),o.scrollTop=this.tableWrapper.domNode.scrollTop,this.rowHeadWrapper=o,this.bindRowEvents()}this.update(),Vt.call(this,this.quill.root,(()=>{this.update()}))}hide(){this.root.classList.add(this.bem.is("hidden"))}destroy(){this.hide(),_t.call(this),this.resizeObserver.disconnect(),this.quill.off(t.events.TEXT_CHANGE,this.updateWhenTextChange);for(const[t,e]of this.scrollHandler)t.removeEventListener("scroll",e);this.root.remove()}}class Fe extends We{tableModule;table;colResizer;rowResizer;currentTableCell;dragging=!1;curColIndex=-1;curRowIndex=-1;tableCellBlot;bem=c("resize-line");constructor(e,s,o){super(e,o),this.tableModule=e,this.table=s,this.colResizer=this.tableModule.addContainer(this.bem.be("col")),this.rowResizer=this.tableModule.addContainer(this.bem.be("row")),this.table.addEventListener("mousemove",this.mousemoveHandler),this.quill.on(t.events.TEXT_CHANGE,this.hideWhenTextChange)}mousemoveHandler=s=>{if(this.dragging)return;if(this.tableModule.tableSelection&&this.tableModule.tableSelection.dragging)return;const o=this.findTableCell(s);if(!o)return this.hide();const i=t.find(o);i&&this.currentTableCell!==o&&(this.show(),this.currentTableCell=o,this.tableCellBlot=i,this.tableMain=d(i,e.tableMain),this.tableMain.getCols().length>0&&this.updateColResizer(),this.updateRowResizer())};hideWhenTextChange=()=>{this.hide()};findTableCell(t){for(const e of t.composedPath()){if(e instanceof HTMLElement&&"TD"===e.tagName)return e;if(e===document.body)return null}return null}findCurrentColIndex(){return this.curColIndex}handleColMouseUpFunc=async function(){await this.handleColMouseUp(),this.updateColResizer()}.bind(this);updateColResizer(){if(!this.tableMain||!this.tableCellBlot)return;const t=this.tableCellBlot;this.tableModule.toolBox.removeChild(this.colResizer),this.colResizer=this.tableModule.addContainer(this.bem.be("col"));const[s]=h(t,[e.tableBody]),o=s.domNode.getBoundingClientRect(),i=t.domNode.getBoundingClientRect(),n=this.quill.root.getBoundingClientRect();let l=i.right-n.x;He(this.tableMain)&&(l=i.left-n.x),Object.assign(this.colResizer.style,{top:o.y-n.y+"px",left:`${l}px`,height:`${o.height}px`});const r=this.tableMain.getCols();this.curColIndex=r.findIndex((e=>e.colId===t.colId)),this.colResizer.addEventListener("mousedown",this.handleColMouseDownFunc),this.colResizer.addEventListener("dragstart",(t=>{t.preventDefault()}))}findCurrentRowIndex(){return this.curRowIndex}handleRowMouseUpFunc=function(){this.handleRowMouseUp(),this.updateRowResizer()}.bind(this);updateRowResizer(){if(!this.tableMain||!this.tableCellBlot)return;const t=this.tableCellBlot;this.tableModule.toolBox.removeChild(this.rowResizer),this.rowResizer=this.tableModule.addContainer(this.bem.be("row"));const s=t.parent;if(!(s instanceof le))return;const[o]=h(t,[e.tableBody]),i=o.domNode.getBoundingClientRect(),n=t.domNode.getBoundingClientRect(),l=this.quill.root.getBoundingClientRect();Object.assign(this.rowResizer.style,{top:n.bottom-l.y+"px",left:i.x-l.x+"px",width:`${i.width}px`});const r=this.tableMain.getRows();this.curRowIndex=r.indexOf(s),this.rowResizer.addEventListener("mousedown",this.handleRowMouseDownFunc),this.rowResizer.addEventListener("dragstart",(t=>{t.preventDefault()}))}show(){this.rowResizer.classList.remove(this.bem.is("hidden")),this.colResizer.classList.remove(this.bem.is("hidden"))}hide(){this.currentTableCell=void 0,this.rowResizer.classList.add(this.bem.is("hidden")),this.colResizer.classList.add(this.bem.is("hidden"))}update(){this.updateColResizer(),this.updateRowResizer()}destroy(){this.colResizer.remove(),this.rowResizer.remove(),this.table.removeEventListener("mousemove",this.mousemoveHandler),this.quill.off(t.events.TEXT_CHANGE,this.hideWhenTextChange)}}class je{tableModule;table;quill;scrollHandler=[];tableMainBlot=null;tableWrapperBlot=null;bem=c("scale");startX=0;startY=0;offset=6;options;root;block;resizeobserver=new ResizeObserver((()=>this.update()));constructor(e,s,o,i){this.tableModule=e,this.table=s,this.quill=o,this.options=this.resolveOptions(i),this.tableMainBlot=t.find(s),this.tableMainBlot&&!this.tableMainBlot.full&&(this.tableWrapperBlot=this.tableMainBlot.parent,this.buildResizer(),this.show()),this.quill.on(t.events.TEXT_CHANGE,this.updateWhenTextChange)}updateWhenTextChange=()=>{this.update()};resolveOptions(t){return Object.assign({blockSize:12},t)}buildResizer(){if(!this.tableMainBlot||!this.tableWrapperBlot)return;this.root=this.tableModule.addContainer(this.bem.b()),this.root.classList.add(this.bem.is("hidden")),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 t=[],e=[];const o=o=>{if(!this.tableMainBlot)return;const i=He(this.tableMainBlot)?-1:1,n=(o.clientX-this.startX)*i,l=o.clientY-this.startY,r=Math.floor(n/t.length),a=Math.floor(l/e.length);for(const{blot:e,width:o}of t)e.width=Math.max(o+r,s.colMinWidthPx);for(const{blot:t,height:o}of e)t.setHeight(`${Math.max(o+a,s.rowMinHeightPx)}px`)},i=()=>{t=[],e=[],document.removeEventListener("mousemove",o),document.removeEventListener("mouseup",i)};this.block.addEventListener("mousedown",(s=>{this.tableMainBlot&&!this.isTableOutofEditor()&&(this.startX=s.clientX,this.startY=s.clientY,t=this.tableMainBlot.getCols().map((t=>({blot:t,width:Math.floor(t.width)}))),e=this.tableMainBlot.getRows().map((t=>({blot:t,height:Math.floor(t.domNode.getBoundingClientRect().height)}))),document.addEventListener("mousemove",o),document.addEventListener("mouseup",i))})),this.block.addEventListener("dragstart",(t=>t.preventDefault())),this.resizeobserver.observe(this.tableMainBlot.domNode),Vt.call(this,this.quill.root,(()=>this.update())),Vt.call(this,this.tableWrapperBlot.domNode,(()=>this.update()))}isTableOutofEditor(){if(!this.tableMainBlot||!this.tableWrapperBlot||this.tableMainBlot.full)return!1;const t=this.tableMainBlot.domNode.getBoundingClientRect(),e=this.tableWrapperBlot.domNode.getBoundingClientRect();if(t.width>e.width){for(const s of this.tableMainBlot.getCols())s.width=Math.floor(s.width/t.width*e.width);return this.tableMainBlot.colWidthFillTable(),!0}return!1}update(){if(!(this.block&&this.root&&this.tableMainBlot&&this.tableWrapperBlot))return;if(this.tableMainBlot.full)return void this.hide();const{rect:t,body:e}=Ne(this.tableMainBlot);if(!e)return;const s=this.tableWrapperBlot.domNode.getBoundingClientRect(),o=this.quill.root.getBoundingClientRect(),{scrollTop:i,scrollLeft:n}=this.tableWrapperBlot.domNode,l=2*this.options.blockSize+this.offset,r=Math.min(t.width,s.width)+l,a=Math.min(t.height,s.height)+l;Object.assign(this.root.style,{width:`${r}px`,height:`${a}px`,left:Math.max(t.x,s.x)-o.x-this.options.blockSize+"px",top:Math.max(t.y,s.y)-o.y-this.options.blockSize+"px"});const c={left:t.width+l-n+"px",top:a-i+"px"};He(this.tableMainBlot)?(this.root.classList.add(this.bem.is("align-right")),c.left=`${this.options.blockSize+-1*n}px`):this.root.classList.remove(this.bem.is("align-right")),Object.assign(this.block.style,c)}show(){this.root&&(this.root.classList.remove(this.bem.is("hidden")),this.update())}hide(){this.root&&this.root.classList.add(this.bem.is("hidden"))}destroy(){this.hide(),this.quill.off(t.events.TEXT_CHANGE,this.updateWhenTextChange),this.resizeobserver.disconnect(),this.root&&this.root.remove(),_t.call(this)}}class Pe{quill;isVertical;table;scrollbarContainer;minSize=20;gap=4;move=0;cursorDown=!1;cursorLeave=!1;ratioY=1;ratioX=1;sizeWidth="";sizeHeight="";size="";thumbState={X:0,Y:0};ob;container;scrollbar;thumb=document.createElement("div");scrollHandler=[];propertyMap;bem=c("scrollbar");tableMainBlot;constructor(e,s,o,i){this.quill=e,this.isVertical=s,this.table=o,this.scrollbarContainer=i,this.tableMainBlot=t.find(this.table),this.container=o.parentElement,this.propertyMap=this.isVertical?{size:"height",offset:"offsetHeight",scrollDirection:"scrollTop",scrollSize:"scrollHeight",axis:"Y",direction:"top",client:"clientY"}:{size:"width",offset:"offsetWidth",scrollDirection:"scrollLeft",scrollSize:"scrollWidth",axis:"X",direction:"left",client:"clientX"},this.calculateSize(),this.ob=new ResizeObserver((()=>{this.update()})),this.ob.observe(o),this.scrollbar=this.createScrollbar(),this.setScrollbarPosition(),Vt.call(this,this.quill.root,(()=>this.setScrollbarPosition())),this.showScrollbar()}update(){this.calculateSize(),this.setScrollbarPosition()}setScrollbarPosition(){const{rect:{width:t,height:e},body:s}=Ne(this.tableMainBlot);if(!s)return;const{scrollLeft:o,scrollTop:i,offsetLeft:n,offsetTop:l}=this.quill.root,{offsetLeft:r,offsetTop:a}=this.container,{offsetLeft:c,offsetTop:d}=s.domNode,{width:h,height:u}=this.container.getBoundingClientRect();let p=r+c-n,b=a+d-l;this.isVertical?p+=Math.min(h,t):b+=Math.min(u,e),this.tableMainBlot&&"left"!==this.tableMainBlot.align&&(p+=this.table.offsetLeft-r),Object.assign(this.scrollbar.style,{[this.propertyMap.size]:`${this.isVertical?Math.min(u,e):h}px`,transform:`translate(${p-o}px, ${b-i}px)`}),this.containerScrollHandler(this.container)}calculateSize(){const t=this.container.offsetHeight-this.gap,e=this.container.offsetWidth-this.gap,s=t**2/this.container.scrollHeight,o=e**2/this.container.scrollWidth,i=Math.max(s,this.minSize),n=Math.max(o,this.minSize);this.ratioY=s/(t-s)/(i/(t-i)),this.ratioX=o/(e-o)/(n/(e-n)),this.sizeWidth=n+this.gap<e?`${n}px`:"",this.sizeHeight=i+this.gap<t?`${i}px`:"",this.size=this.isVertical?this.sizeHeight:this.sizeWidth}createScrollbar(){const t=document.createElement("div");t.classList.add(this.bem.b()),t.classList.add(this.isVertical?this.bem.is("vertical"):this.bem.is("horizontal"),this.bem.is("transparent")),Object.assign(t.style,{display:"none"}),this.thumb.classList.add(this.bem.be("thumb"));let e=null;const s=t=>{if(!1===this.cursorDown)return;const e=this.thumbState[this.propertyMap.axis];if(!e)return;const s=this.scrollbar[this.propertyMap.offset]**2/this.container[this.propertyMap.scrollSize]/(this.isVertical?this.ratioY:this.ratioX)/this.thumb[this.propertyMap.offset],o=100*(-1*(this.scrollbar.getBoundingClientRect()[this.propertyMap.direction]-t[this.propertyMap.client])-(this.thumb[this.propertyMap.offset]-e))*s/this.scrollbar[this.propertyMap.offset];this.container[this.propertyMap.scrollDirection]=o*this.container[this.propertyMap.scrollSize]/100},o=()=>{this.thumbState[this.propertyMap.axis]=0,this.cursorDown=!1,document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",o),this.cursorLeave&&this.hideScrollbar(),document.onselectstart=e},i=t=>{t.stopImmediatePropagation(),this.cursorDown=!0,document.addEventListener("mousemove",s),document.addEventListener("mouseup",o),e=document.onselectstart,document.onselectstart=()=>!1};this.thumb.addEventListener("mousedown",(t=>{if(t.stopPropagation(),t.ctrlKey||[1,2].includes(t.button))return;window.getSelection()?.removeAllRanges(),i(t);const e=t.currentTarget;e&&(this.thumbState[this.propertyMap.axis]=e[this.propertyMap.offset]-(t[this.propertyMap.client]-e.getBoundingClientRect()[this.propertyMap.direction]))}));const n=[this.table,t];for(const t of n)t.addEventListener("mouseenter",this.showScrollbar),t.addEventListener("mouseleave",this.hideScrollbar);return Vt.call(this,this.container,(()=>{this.containerScrollHandler(this.container)})),t.appendChild(this.thumb),t}containerScrollHandler(t){const e=t[this.propertyMap.offset]-this.gap;this.move=100*t[this.propertyMap.scrollDirection]/e*(this.isVertical?this.ratioY:this.ratioX),Object.assign(this.thumb.style,{[this.propertyMap.size]:this.size,transform:`translate${this.propertyMap.axis}(${this.move}%)`})}showScrollbar=Kt((()=>{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=Kt((()=>{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(),_t.call(this),this.table.removeEventListener("mouseenter",this.showScrollbar),this.table.removeEventListener("mouseleave",this.hideScrollbar)}}class Ve{tableModule;table;quill;scrollbarContainer;scrollbar;bem=c("scrollbar");constructor(e,s,o){this.tableModule=e,this.table=s,this.quill=o,this.scrollbarContainer=this.tableModule.addContainer(this.bem.be("container")),this.scrollbar=[new Pe(o,!0,s,this.scrollbarContainer),new Pe(o,!1,s,this.scrollbarContainer)];for(const t of this.scrollbar)this.scrollbarContainer.appendChild(t.scrollbar);this.quill.on(t.events.TEXT_CHANGE,this.updateWhenTextChange)}updateWhenTextChange=()=>{this.update()};hide(){for(const t of this.scrollbar)t.hideScrollbar()}show(){for(const t of this.scrollbar)t.showScrollbar()}update(){for(const t of this.scrollbar)t.calculateSize(),t.setScrollbarPosition()}destroy(){this.scrollbarContainer.remove(),this.quill.off(t.events.TEXT_CHANGE,this.updateWhenTextChange);for(const t of this.scrollbar)t.destroy()}}class _e{tableModule;quill;options;boundary=null;startScrollX=0;startScrollY=0;selectedTableScrollX=0;selectedTableScrollY=0;selectedEditorScrollX=0;selectedEditorScrollY=0;selectedTds=[];cellSelectWrap;cellSelect;dragging=!1;scrollHandler=[];tableMenu;resizeObserver;table;isDisplaySelection=!1;bem=c("selection");lastSelection={anchorNode:null,anchorOffset:0,focusNode:null,focusOffset:0};constructor(e,s,i={}){this.tableModule=e,this.quill=s,this.options=this.resolveOptions(i),this.cellSelectWrap=e.addContainer(this.bem.b()),this.cellSelect=this.helpLinesInitial(),this.resizeObserver=Pt((()=>this.updateAfterEvent()),{ignoreFirstBind:!0}),this.resizeObserver.observe(this.quill.root),this.quill.root.addEventListener("mousedown",this.mouseDownHandler,{passive:!1}),document.addEventListener("selectionchange",this.selectionChangeHandler,{passive:!1}),this.quill.on(o.AFTER_TABLE_RESIZE,this.updateAfterEvent),this.quill.on(t.events.SELECTION_CHANGE,this.quillSelectionChangeHandler),this.quill.on(t.events.TEXT_CHANGE,this.updateAfterEvent),this.options.tableMenu&&(this.tableMenu=new this.options.tableMenu(e,s,this.options.tableMenuOptions)),this.hide()}updateAfterEvent=()=>{this.updateWithSelectedTds()};getFirstTextNode(t){for(const e of Array.from(t.childNodes))if(e.nodeType===Node.TEXT_NODE)return e;return t}getLastTextNode(t){for(let e=t.childNodes.length-1;e>=0;e--){const s=t.childNodes[e];if(s.nodeType===Node.TEXT_NODE)return s}return t}getNodeTailOffset(t){const e=document.createRange();return e.selectNodeContents(t),e.collapse(!1),e.startOffset}quillSelectionChangeHandler=(s,o,i)=>{if(i!==t.sources.API&&s&&!this.quill.composition.isComposing&&this.selectedTds.length>0){const t=this.quill.getFormat(s),[o]=this.quill.getLine(s.index),i=!!t[e.tableCellInner]&&!!o,n=this.selectedTds.some((t=>t.children.contains(o)));if(i&&!n)try{const t=d(o,e.tableCellInner);this.selectedTds=[t],this.updateWithSelectedTds()}catch{}else i&&n||this.hide()}};setSelectionData(t,e){const{anchorNode:s,anchorOffset:o,focusNode:i,focusOffset:n}=e;if(!s||!i)return;const l=document.createRange(),r=this.selectionDirectionUp(e);r?(l.setStart(s,o),l.setEnd(s,o)):(l.setStart(s,o),l.setEnd(i,n)),t.removeAllRanges(),t.addRange(l),r&&t.extend(i,n)}selectionDirectionUp(t){const{anchorNode:e,anchorOffset:s,focusNode:o,focusOffset:i}=t;if(!e||!o)return!1;if(e===o)return s>i;const n=e.compareDocumentPosition(o);return n&Node.DOCUMENT_POSITION_CONTAINS||n&Node.DOCUMENT_POSITION_CONTAINED_BY?!!(n&Node.DOCUMENT_POSITION_FOLLOWING):!!(n&Node.DOCUMENT_POSITION_PRECEDING)}findWrapSelection(t){let e=null,s=0,o=null,i=0;for(const{node:n,offset:l}of t)n&&(e&&!this.selectionDirectionUp({anchorNode:e,anchorOffset:s,focusNode:n,focusOffset:l})||(e=n,s=l),o&&!this.selectionDirectionUp({anchorNode:n,anchorOffset:l,focusNode:o,focusOffset:i})||(o=n,i=l));return{startNode:e,startOffset:s,endNode:o,endOffset:i}}resolveOptions(t){return Object.assign({selectColor:"#0589f340",tableMenuOptions:{}},t)}selectionChangeHandler=()=>{const s=window.getSelection();if(!s)return;const{anchorNode:o,focusNode:i,anchorOffset:n,focusOffset:l}=s;if(!o||!i)return;const r=t.find(o),a=t.find(i);if(!r||!a||r.scroll!==this.quill.scroll||a.scroll!==this.quill.scroll)return;const c=u(r),d=u(a),h=c.has(e.tableColgroup),p=d.has(e.tableColgroup);if(h||p){let t=o,r=n,a=i,u=l;if(h){const s=c.get(e.tableWrapper).descendants(ne);s.length>0&&(t=s[0].domNode,r=0)}if(p){const t=d.get(e.tableWrapper).descendants(ne);t.length>0&&(a=t[0].domNode,u=0)}return void this.setSelectionData(s,{anchorNode:t,anchorOffset:r,focusNode:a,focusOffset:u})}const b=c.has(e.tableCellInner),m=d.has(e.tableCellInner);let f=b&&m;if(f){const t=c.get(e.tableCellInner),s=d.get(e.tableCellInner);f&&=t!==s}if(b&&m&&f||!b&&m||!m&&b)return this.setSelectionData(s,this.lastSelection),void(this.selectedTds.length>0&&this.hide());this.lastSelection={anchorNode:o,anchorOffset:n,focusNode:i,focusOffset:l}};helpLinesInitial(){this.cellSelectWrap.style.setProperty("--select-color",this.options.selectColor);const t=document.createElement("div");return t.classList.add(this.bem.be("line")),this.cellSelectWrap.appendChild(t),t}computeSelectedTds(e,s){if(!this.table)return[];const o=t.find(this.table);if(!o)return[];const i=o.descendants(re)[0];if(!i)return[];const n=new Set(i.descendants(we).map(((t,e)=>(t.index=e,t)))),{x:l,y:r}=this.getTableViewScroll(),{x:a,y:c}=this.getQuillViewScroll();this.selectedTableScrollX=l,this.selectedTableScrollY=r,this.selectedEditorScrollX=a,this.selectedEditorScrollY=c;const{rect:d}=Ne(o),h=e.x-l+this.startScrollX,u=e.y-r+this.startScrollY;let p={x:Math.max(d.left,Math.min(s.x,h)),y:Math.max(d.top,Math.min(s.y,u)),x1:Math.min(d.right,Math.max(s.x,h)),y1:Math.min(d.bottom,Math.max(s.y,u))};const b=new Set;let m=!0;for(;m;){m=!1;for(const t of n){t.__rect||(t.__rect=t.domNode.getBoundingClientRect());const{x:e,y:s,right:o,bottom:i}=t.__rect;if(Ft({x:Math.floor(p.x),y:Math.floor(p.y),x1:Math.floor(p.x1),y1:Math.floor(p.y1)},{x:Math.floor(e),y:Math.floor(s),x1:Math.floor(o),y1:Math.floor(i)},0,0===b.size)){b.add(t),n.delete(t),p={x:Math.min(p.x,e),y:Math.min(p.y,s),x1:Math.max(p.x1,o),y1:Math.max(p.y1,i)},m=!0;break}}}for(const t of[...b,...n])delete t.__rect;return this.boundary=function(t,e){const s=e.getBoundingClientRect();return{x:t.x-s.x-e.scrollLeft,y:t.y-s.y-e.scrollTop,x1:t.x-s.x-e.scrollLeft+t.width,y1:t.y-s.y-e.scrollTop+t.height,width:t.width,height:t.height}}({...p,width:p.x1-p.x,height:p.y1-p.y},this.quill.root),Array.from(b).sort(((t,e)=>t.index-e.index)).map((t=>(delete t.index,t.getCellInner())))}mouseDownHandler=t=>{const{button:e,target:s,clientX:o,clientY:i}=t,n=s.closest(".ql-table"),l=s.closest("tbody");if(0!==e||!n||!l)return;this.setSelectionTable(n);const r=n.dataset.tableId,a={x:o,y:i};this.selectedTds=this.computeSelectedTds(a,a),this.dragging=!0,this.show();const c=t=>{this.tableMenu&&this.tableMenu.hide(),this.tableModule.tableResize&&this.tableModule.tableResize.hide();const{button:e,target:s,clientX:o,clientY:i}=t,n=s.closest("tbody");if(0!==e||!n||n.dataset.tableId!==r)return;const l={x:o,y:i};this.selectedTds=this.computeSelectedTds(a,l),this.selectedTds.length>1&&this.quill.blur(),this.update()},d=()=>{document.body.removeEventListener("mousemove",c,!1),document.body.removeEventListener("mouseup",d,!1),this.dragging=!1,this.tableMenu&&this.selectedTds.length>0&&this.tableMenu.show()};document.body.addEventListener("mousemove",c,!1),document.body.addEventListener("mouseup",d,!1)};updateWithSelectedTds(){if(this.selectedTds.length<=0)return;const t={x:1/0,y:1/0},e={x:-1/0,y:-1/0};for(const s of this.selectedTds){const o=s.domNode.getBoundingClientRect();t.x=Math.min(t.x,o.left),t.y=Math.min(t.y,o.top),e.x=Math.max(e.x,o.right),e.y=Math.max(e.y,o.bottom)}this.selectedTds=this.computeSelectedTds(t,e),this.selectedTds.length>0?this.update():this.hide()}update(){if(0===this.selectedTds.length||!this.boundary||!this.table)return;const{x:t,y:e}=this.getQuillViewScroll(),{x:s,y:o}=this.getTableViewScroll(),i=this.table.parentElement.getBoundingClientRect(),n=this.quill.root.getBoundingClientRect(),l=i.x-n.x,r=i.y-n.y;this.startScrollX=s,this.startScrollY=o,Object.assign(this.cellSelect.style,{left:2*this.selectedEditorScrollX-t+this.boundary.x+this.selectedTableScrollX-s-l+"px",top:2*this.selectedEditorScrollY-e+this.boundary.y+this.selectedTableScrollY-o-r+"px",width:`${this.boundary.width}px`,height:`${this.boundary.height}px`}),Object.assign(this.cellSelectWrap.style,{left:`${l}px`,top:`${r}px`,width:`${i.width}px`,height:`${i.height}px`}),!this.dragging&&this.tableMenu&&this.tableMenu.update()}getQuillViewScroll(){return{x:this.quill.root.scrollLeft,y:this.quill.root.scrollTop}}getTableViewScroll(){return this.table?{x:this.table.parentElement.scrollLeft,y:this.table.parentElement.scrollTop}:{x:0,y:0}}setSelectionTable(t){this.table!==t&&(this.table=t)}removeCell=e=>{if(!(this.quill.getSelection()||"Backspace"!==e.key&&"Delete"!==e.key)){for(const t of this.selectedTds)t.deleteAt(0,t.length()-1);if(this.table){const e=t.find(this.table),s=e.descendants(ne);this.selectedTds.length===s.length&&e.remove()}}};showDisplay(){Object.assign(this.cellSelectWrap.style,{display:"block"}),this.isDisplaySelection=!0,this.table&&this.resizeObserver.observe(this.table)}show(){this.table&&(_t.call(this),this.update(),this.showDisplay(),document.addEventListener("keydown",this.removeCell),Vt.call(this,this.quill.root,(()=>{this.update()})),Vt.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(){_t.call(this),document.removeEventListener("keydown",this.removeCell),this.hideDisplay(),this.boundary=null,this.selectedTds=[],this.setSelectionTable(void 0),this.tableMenu&&this.tableMenu.hide()}destroy(){this.resizeObserver.disconnect(),this.hide(),this.cellSelectWrap.remove(),this.tableMenu&&this.tableMenu.destroy(),_t.call(this),this.quill.root.removeEventListener("mousedown",this.mouseDownHandler),document.removeEventListener("selectionchange",this.selectionChangeHandler),this.quill.off(t.events.SELECTION_CHANGE,this.quillSelectionChangeHandler),this.quill.off(t.events.TEXT_CHANGE,this.updateAfterEvent),this.quill.on(o.AFTER_TABLE_RESIZE,this.updateAfterEvent)}}const Xe=t.import("parchment"),Ue=t.import("delta"),Ye=t.import("blots/break"),Ge=t.import("ui/icons");function Ke(t,{tableId:s,rowId:o,colId:i}){const n={tableId:s,rowId:o,colId:i,colspan:1,rowspan:1},l=t.create(e.tableCell,n),r=t.create(e.tableCellInner,n),a=t.create("block");return a.appendChild(t.create("break")),r.appendChild(a),l.appendChild(r),l}function Ze(t){r.delete(e.tableCellInner),Object.assign(e,t.blotName||{}),Object.assign(s,t.tableUpSize||{}),Object.assign(o,t.tableUpEvent||{}),Object.assign(i,t.tableUpInternal||{}),ts.moduleName=i.moduleName,ts.toolName=e.tableWrapper,ee.blotName=e.container,Ie.blotName=e.tableWrapper,xe.blotName=e.tableMain,ye.blotName=e.tableColgroup,Ce.blotName=e.tableCol,re.blotName=e.tableBody,le.blotName=e.tableRow,we.blotName=e.tableCell,ne.blotName=e.tableCellInner,r.add(e.tableCellInner)}function Qe(t,e){return B({onSelect:(s,o)=>{t.insertTable(s,o),e&&e.close()},customBtn:t.options.customBtn,texts:t.options.texts})}function Je(s){return{bindInHead:!1,key:s?"ArrowUp":"ArrowDown",collapsed:!0,format:[e.tableCellInner],handler(o,i){let n,l,r,a;try{[n,l,r,a]=h(i.line,[e.tableWrapper,e.tableMain,e.tableRow,e.tableCell])}catch{return!0}const c=l.getColIds(),d=s?"prev":"next",u=s?"tail":"head",p=n.descendants(ge,0)[0];let b;if(p){const t=window.getComputedStyle(p.domNode);b="next"===d&&"bottom"===t.captionSide?p:"next"===d?n.next:p}else b=n[d];if(i.line[d]||!b)return!0;const m=r[d];if(m){const e=c.indexOf(a.colId),s=m.getCellByColId(c[e],d);if(!s)return!0;let o=s.children[u];o.children&&(o=o.children[u]);const n=o.offset(this.quill.scroll)+Math.min(i.offset,o.length()-1);this.quill.setSelection(n,0,t.sources.USER)}else{const e=b.offset(this.quill.scroll)+(s?b.length()-1:0);this.quill.setSelection(e,0,t.sources.USER)}return!1}}}class ts{static moduleName=i.moduleName;static toolName=e.tableWrapper;static keyboradHandler={"forbid remove table by backspace":{bindInHead:!0,key:"Backspace",collapsed:!0,offset:0,handler(t,s){const o=this.quill.getLine(t.index)[0];if(o.prev instanceof Ie)return o.prev.remove(),!1;if(s.format[e.tableCellInner]){if(0===o.offset(d(o,e.tableCellInner)))return!1}return!0}},"forbid remove table by delete":{bindInHead:!0,key:"Delete",collapsed:!0,handler(t,s){const o=this.quill.getLine(t.index),i=o[0],n=o[1];if((i.next instanceof Ie||i.next instanceof Ce)&&n===i.length()-1)return!1;if(s.format[e.tableCellInner]){if(i===d(i,e.tableCellInner).children.tail&&n===i.length()-1)return!1}return!0}},"table up":Je(!0),"table down":Je(!1),"table caption break":{bindInHead:!0,key:"Enter",shiftKey:null,format:[e.tableCaption],handler:(t,e)=>!1}};static register(){Ie.allowedChildren=[xe],xe.allowedChildren=[re,ye,ge],xe.requiredContainer=Ie,ge.requiredContainer=xe,ye.allowedChildren=[Ce],ye.requiredContainer=xe,re.allowedChildren=[le],re.requiredContainer=xe,le.allowedChildren=[we],we.requiredContainer=re,we.allowedChildren=[ne,Ye],we.requiredContainer=le,ne.requiredContainer=we;const s=["header","list","blockquote","code-block"].reduce(((e,s)=>{const o=`formats/${s}`,i=t.import(o);return e[o]=class extends(function(t,e){const s=class extends t{constructor(...t){super(...t)}};for(const t of e)b(s.prototype,t.prototype);return s}(i,[de])){static register(){}},e}),{});t.register({"blots/scroll":pe,"blots/block":de,...s,[`blots/${e.container}`]:ee,[`formats/${e.tableCell}`]:we,[`formats/${e.tableCellInner}`]:ne,[`formats/${e.tableRow}`]:le,[`formats/${e.tableBody}`]:re,[`formats/${e.tableCol}`]:Ce,[`formats/${e.tableColgroup}`]:ye,[`formats/${e.tableCaption}`]:ge,[`formats/${e.tableMain}`]:xe,[`formats/${e.tableWrapper}`]:Ie,"modules/clipboard":Be},!0)}quill;options;toolBox;fixTableByLisenter=Kt(this.balanceTables,100);selector;table;tableSelection;tableResize;tableScrollbar;tableAlign;tableResizeScale;resizeOb;get statics(){return this.constructor}constructor(e,s){if(this.quill=e,this.options=this.resolveOptions(s||{}),this.toolBox=this.initialContainer(),!this.options.scrollbar){const t=c("scrollbar");this.quill.container.classList.add(t.bm("origin"))}this.options.selection&&(this.tableSelection=new this.options.selection(this,this.quill,this.options.selectionOptions));const o=this.quill.getModule("toolbar");if(o&&this.quill.theme.pickers){const[,t]=(o.controls||[]).find((([t])=>t===this.statics.toolName))||[];if(t&&"select"===t.tagName.toLocaleLowerCase()){const e=this.quill.theme.pickers.find((e=>e.select===t));e&&(e.label.innerHTML=this.options.icon,this.buildCustomSelect(this.options.customSelect,e),e.label.addEventListener("mousedown",(()=>{if(!this.selector||!e)return;const t=this.selector.getBoundingClientRect(),{leftLimited:s}=jt(t);if(s){const t=e.label.getBoundingClientRect();Object.assign(e.options.style,{transform:`translateX(calc(-100% + ${t.width}px))`})}else Object.assign(e.options.style,{transform:void 0})})))}}const i=this.quill.getModule("keyboard");for(const t of Object.values(ts.keyboradHandler))t.bindInHead?i.bindings[t.key].unshift(t):i.addBinding(t.key,t);this.quill.root.addEventListener("click",(t=>{const e=t.composedPath();if(!e||e.length<=0)return;const s=e.find((t=>t.tagName&&"TABLE"===t.tagName.toUpperCase()&&t.classList.contains("ql-table")));if(s){if(this.table===s)return this.tableSelection&&this.tableSelection.show(),this.tableAlign&&this.tableAlign.update(),this.tableResize&&this.tableResize.update(),void(this.tableScrollbar&&this.tableScrollbar.update());this.table&&this.hideTableTools(),this.showTableTools(s)}else this.table&&this.hideTableTools()}),!1),this.quill.on(t.events.EDITOR_CHANGE,(e=>{e!==t.events.TEXT_CHANGE||this.table&&this.quill.root.contains(this.table)||this.hideTableTools()})),this.quillHack(),this.listenBalanceCells()}initialContainer(){const t=c("toolbox"),e=this.quill.addContainer(t.b());return this.resizeOb=new ResizeObserver((()=>{const t=this.quill.root.getBoundingClientRect(),{offsetLeft:s,offsetTop:o}=this.quill.root;Object.assign(e.style,{top:`${o}px`,left:`${s}px`,width:`${t.width}px`,height:`${t.height}px`})})),this.resizeOb.observe(this.quill.root),e}addContainer(t){if(M(t)){const e=document.createElement("div");for(const s of t.split(" "))e.classList.add(s);return this.toolBox.appendChild(e),e}return this.toolBox.appendChild(t),t}resolveOptions(t){return Object.assign({customBtn:!1,texts:this.resolveTexts(t.texts||{}),full:!1,fullSwitch:!0,icon:Ge.table,selectionOptions:{},alignOptions:{},scrollbarOptions:{},resizeOptions:{},resizeScaleOptions:{}},t)}resolveTexts(t){return Object.assign({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"},t)}quillHack(){const s=this.quill.getSemanticHTML;this.quill.getSemanticHTML=(o=0,i)=>{const n=s.call(this.quill,o,i),l=t.import(`formats/${e.tableWrapper}`),r=(new DOMParser).parseFromString(n,"text/html");for(const t of Array.from(r.querySelectorAll(`.${l.className} caption[contenteditable], .${l.className} td > [contenteditable]`)))t.removeAttribute("contenteditable");return r.body.innerHTML};const o=this.quill.format;this.quill.format=function(s,n,l=t.sources.API){if(!(this.scroll.query(s).prototype instanceof Xe.EmbedBlot)){const t=this.getModule(i.moduleName),r=this.getSelection(!0);if(!this.getFormat(r)[e.tableCellInner]||r.length>0||t&&t.tableSelection&&t.tableSelection.selectedTds.length<=1)return o.call(this,s,n,l);if(t&&t.tableSelection&&t.tableSelection.selectedTds.length>0){const e=t.tableSelection.selectedTds;let o=!1;const i=[];for(const t of e){const e=t.offset(this.scroll),l=t.length();i.push({index:e,length:l});this.getFormat(e,l)[s]!==n&&(o=!0)}const r=!!o&&n,a=new Ue;for(const[t,{index:e,length:o}]of i.entries()){const n=0===t?0:i[t-1].index+i[t-1].length;a.retain(e-n).retain(o,{[s]:r})}const c=this.updateContents(a,l);return this.blur(),c}}return o.call(this,s,n,l)};const n=this.quill.theme.modules.toolbar;if(n){const s=n.handlers?.clean;if(s){const o=(t,s,o=()=>"")=>{const i=this.quill.getText(t,s),[n,l]=this.quill.getLine(t+s);let r=0,a=new Ue;null!=n&&(r=n.length()-l,a=n.delta().slice(l,l+r-1).insert("\n"));const c=this.quill.getContents(t,s+r),d=c.diff((new Ue).insert(i).concat(a));let h=0;const u=d.ops.map((t=>{const{attributes:s,...i}=t;if(t.insert?h-=M(t.insert)?t.insert.length:1:t.retain?h+="number"==typeof t.retain?t.retain:1:t.delete&&(h+=t.delete),s){const{[e.tableCellInner]:t,...n}=s;if(o){const t=c.slice(h-1,h).ops[0];if(t&&t.attributes&&t.attributes[e.tableCellInner]){const s=t.attributes[e.tableCellInner],{style:l,...r}=s,a=o(l);return a?{...i,attributes:{...n,[e.tableCellInner]:{style:a,...r}}}:{...i,attributes:{...n,[e.tableCellInner]:r}}}}return{...i,attributes:{...n}}}return t}));return new Ue(u)};n.handlers.clean=function(n){const l=this.quill.getModule(i.moduleName),r=this.quill.getSelection();if(r&&r.length>0){if(this.quill.getFormat(r)[e.tableCellInner]){const e=o(r.index,r.length,!1),s=(new Ue).retain(r.index).concat(e);return void this.quill.updateContents(s,t.sources.USER)}}if(l&&l.tableSelection&&l.tableSelection.selectedTds.length>0&&l.tableSelection.table){const e=t.find(l.tableSelection.table);if(!e)return void console.warn("TableMainFormat not found");const s=l.tableSelection.selectedTds,i=new Set,n=[];for(const t of s)if(t.parent instanceof we){for(const e of t.parent.getNearByCell("top"))i.has(e)||(i.add(e),n.push({td:e,cleanBorder:"bottom"}));for(const e of t.parent.getNearByCell("left"))i.has(e)||(i.add(e),n.push({td:e,cleanBorder:"right"}));i.add(t.parent),n.push({td:t.parent,cleanBorder:!0})}const r=e.descendants(we),a=new Map(r.map(((t,e)=>[t,e])));n.sort(((t,e)=>a.get(t.td)-a.get(e.td)));let c=new Ue,d=0;for(const{td:t,cleanBorder:e}of n){const s=t.getCellInner().offset(this.quill.scroll),i=t.getCellInner().length(),n=o(s,i-1,(t=>{if(!t||!0===e)return"";const s=Xt(t);return Ut(Object.keys(s).filter((t=>!t.startsWith(Yt(`border-${e}`)))).reduce(((t,e)=>(t[e]=s[e],t)),{}))})),l=(new Ue).retain(s-d).concat(n);c=c.concat(l),d=s+i}return this.quill.updateContents(c,t.sources.USER),void(s.length>1&&this.quill.blur())}return s.call(this,n)}}}}showTableTools(t){t&&(this.table=t,this.tableSelection?.show(),this.options.align&&(this.tableAlign=new this.options.align(this,t,this.quill,this.options.alignOptions)),this.options.scrollbar&&(this.tableScrollbar=new this.options.scrollbar(this,t,this.quill,this.options.scrollbarOptions)),this.options.resize&&(this.tableResize=new this.options.resize(this,t,this.quill,this.options.resizeOptions)),this.options.resizeScale&&(this.tableResizeScale=new this.options.resizeScale(this,t,this.quill,this.options.resizeScaleOptions)))}hideTableTools(){this.tableSelection?.hide(),this.tableScrollbar&&(this.tableScrollbar.destroy(),this.tableScrollbar=void 0),this.tableAlign&&(this.tableAlign.destroy(),this.tableAlign=void 0),this.tableResize&&(this.tableResize.destroy(),this.tableResize=void 0),this.tableResizeScale&&this.tableResizeScale.destroy(),this.table=void 0}async buildCustomSelect(t,e){if(!t||!x(t))return;const s=document.createElement("div");if(s.classList.add("ql-custom-select"),this.selector=await t(this,e),s.appendChild(this.selector),this.options.fullSwitch){const t=c("creator"),e=document.createElement("label");e.classList.add(t.be("checkbox"));const o=document.createElement("input");o.type="checkbox",o.checked=this.options.full,o.addEventListener("change",(()=>{this.options.full=o.checked}));const i=document.createElement("span");i.textContent=this.options.texts.fullCheckboxText,e.appendChild(o),e.appendChild(i),s.appendChild(e)}e.options.innerHTML="",e.options.appendChild(s)}setCellAttrs(t,e,s,o=!1){if(0!==t.length)for(const i of t)i.setFormatValue(e,s,o)}getTextByCell(t){let e="";for(const s of t){const t=s.offset(this.quill.scroll),o=s.length();for(const s of this.quill.getContents(t,o).ops)M(s.insert)&&(e+=s.insert)}return e}getHTMLByCell(t,s=!1){if(0===t.length)return"";let o=null;try{for(const s of t){const t=d(s,e.tableMain);if(o||(o=t),t!==o)return console.error("tableMain is not same"),""}}catch{return console.error("tds must be in same tableMain"),""}if(!o)return"";const i=this.quill.getIndex(o),n=o.length(),l=this.quill.getSemanticHTML(i,n),r=(new DOMParser).parseFromString(l,"text/html"),a=[],c=new Set,h=new Set;for(const e of t)c.add(e.colId),h.add(`${e.rowId}-${e.colId}`);for(const t of Array.from(r.querySelectorAll("col")))c.has(t.dataset.colId)?a.push(t.getAttribute("width")):t.remove();let u=0,p=null;for(const t of Array.from(r.querySelectorAll("td")))if(h.has(`${t.dataset.rowId}-${t.dataset.colId}`))p!==t.dataset.rowId&&(u+=1,p=t.dataset.rowId);else{const e=t.parentElement;t.remove(),e&&e.children.length<=0&&e.remove()}const b=Array.from(r.querySelectorAll("col")),m=b.map((t=>Ce.value(t)));if(o.full){const t=m.reduce(((t,e)=>e.width+t),0);for(const[e,s]of m.entries())s.width=Math.round(s.width/t*100),b[e].setAttribute("width",`${s.width}%`)}else{let t=0;for(const e of m)t+=e.width;r.querySelector("table").style.width=`${t}px`}if(s){if(u===o.getRows().length)this.removeCol(t);else for(const e of t)e.domNode.innerHTML="<p><br></p>"}return r.body.innerHTML}insertTable(o,i){if(o>=30||i>=30)throw new Error("Both rows and columns must be less than 30.");this.quill.focus();const n=this.quill.getSelection();if(null==n)return;const[l]=this.quill.getLeaf(n.index);if(!l)return;if(a(l))throw new Error(`Not supported ${l.statics.blotName} insert into table.`);const r=this.calculateTableCellBorderWidth(),c=getComputedStyle(this.quill.root),d=Number.parseInt(c.paddingLeft),h=Number.parseInt(c.paddingRight),u=Number.parseInt(c.width)-d-h-r,p=Gt(),b=new Array(i).fill(0).map((()=>Gt())),m=this.options.full?`${Math.max(1/i*100,s.colMinWidthPre)}%`:`${Math.max(Math.floor(u/i),s.colMinWidthPx)}px`,f=[{retain:n.index},{insert:"\n"}];for(let t=0;t<i;t++)f.push({insert:{[e.tableCol]:{width:m,tableId:p,colId:b[t],full:this.options.full}}});for(let t=0;t<o;t++){const t=Gt();for(let s=0;s<i;s++)f.push({insert:"\n",attributes:{[e.tableCellInner]:{tableId:p,rowId:t,colId:b[s],rowspan:1,colspan:1}}})}this.quill.updateContents(new Ue(f),t.sources.USER),this.quill.setSelection(n.index+i+i*o+1,t.sources.SILENT),this.quill.focus()}calculateTableCellBorderWidth(){const t=`\n <table class="${xe.className}">\n <tbody>\n <tr>\n <td class="${we.className}"></td>\n </tr>\n </tbody>\n </table>\n `,e=document.createElement("div");e.className=Ie.className,e.innerHTML=t,e.style.position="absolute",e.style.left="-9999px",e.style.top="-9999px",e.style.visibility="hidden",this.quill.root.appendChild(e);const s=window.getComputedStyle(e.querySelector("td")),o=Number.parseFloat(s.borderWidth)||0;return this.quill.root.removeChild(e),o}fixUnusuaDeletelTable(t){const e=t.getRows(),s=t.getColIds();if(0===e.length)return t.remove();if(0===s.length)return;const o=new Array(e.length).fill(0).map((()=>new Array(s.length).fill(!1))),i=t.tableId;for(const[t,n]of e.entries()){let l=0,r=0;const a=o[t],c=n.descendants(we);for(;r<s.length;){if(a[r]){r+=1;continue}const d=c[l];if(d&&d.colId===s[r]){t+d.rowspan-1>=e.length&&(d.getCellInner().rowspan=e.length-t);const{colspan:s,rowspan:i}=d;if(s>1)for(let t=1;t<s;t++)a[r+t]=!0;if(i>1)for(let e=t+1;e<t+i;e++)for(let t=0;t<s;t++)o[e][r+t]=!0;l+=1}else n.insertBefore(Ke(this.quill.scroll,{tableId:i,colId:s[r],rowId:n.rowId}),d);r+=1}if(l<c.length)for(let t=l;t<c.length;t++)c[t].remove()}}balanceTables(){for(const t of this.quill.scroll.descendants(xe))this.fixUnusuaDeletelTable(t)}listenBalanceCells(){this.quill.on(t.events.SCROLL_OPTIMIZE,(e=>{e.some((t=>!!["TD","TR","TBODY","TABLE"].includes(t.target.tagName)&&(this.fixTableByLisenter(),!0)));for(const s of e){const e=s.target;if("TABLE"===e.tagName){const s=t.find(e);if(s){s.sortMergeChildren();break}}}}))}deleteTable(t){if(0===t.length)return;const s=d(t[0],e.tableMain);s&&s.remove(),this.hideTableTools()}appendRow(t,s){if(t.length<=0)return;const o=t[s?t.length-1:0],[i,n,l]=h(o,[e.tableMain,e.tableBody,e.tableRow]),r=i.getRows().indexOf(l)+(s?o.rowspan:0);n.insertRow(r)}appendCol(t,s){if(t.length<=0)return;const[o]=t.reduce(((t,e)=>{const o=e.getColumnIndex();return(!s&&o<=t[1]||s&&o>=t[1])&&(t=[e,o]),t}),[t[0],t[0].getColumnIndex()]),i=o.getColumnIndex()+(s?o.colspan:0),n=d(o,e.tableMain),l=n.tableId,r=Gt(),[a]=n.descendants(ye);a&&a.insertColByIndex(i,{tableId:l,colId:r,width:n.full?6:160,full:n.full});const c=n.getRows(),h=[];let u=0;for(const t of Object.values(c)){const e=h.shift()||0;if(u>0){u-=1;continue}const s=t.insertCell(i-e,{tableId:l,rowId:t.rowId,colId:r,rowspan:1,colspan:1});s.skipRowNum&&(u+=s.skipRowNum);for(const[t,e]of s.entries())h[t]=(h[t]||0)+e}}fixTableByRemove(t){const e=t.getRows(),s=t.getCols(),o=s.reduce(((t,e)=>(t[e.colId]=0,t)),{}),i=[...e].reverse(),n=[];for(const[t,s]of i.entries()){const i=e.length-t-1;s.children.length<=0?n.push(i):s.foreachCellInner((t=>{const e=n.reduce(((e,s)=>t.rowspan+i>s?e+1:e),0);t.rowspan-=e,o[t.colId]+=1}))}let l=0;for(const t of Object.values(o))if(0===t){const t=[];let s=0;for(const o of Object.values(e)){const e=t.shift()||0;let i=[];s>0?(i=o.getCellByColumIndex(l-e)[2],s-=1):(i=o.removeCell(l-e),i.skipRowNum&&(s+=i.skipRowNum));for(const[e,s]of i.entries())t[e]=(t[e]||0)+s}}else l+=1;for(const t of s)0===o[t.colId]&&(t.prev?t.prev.width+=t.width:t.next&&(t.next.width+=t.width),t.remove())}removeRow(t){if(t.length<=0)return;const s=d(t[0],e.tableMain),o=s.getRows();let i=o.length,n=-1;for(const s of t){const t=d(s,e.tableRow),l=o.indexOf(t);l<i&&(i=l),l+s.rowspan>n&&(n=l+s.rowspan)}const l={};for(let t=i;t<Math.min(o.length,n);t++){o[t].foreachCellInner((e=>{e.rowspan+t>n&&(l[e.colId]={rowspan:e.rowspan+t-n,colspan:e.colspan,colIndex:e.getColumnIndex()}),e.parent.remove()}))}if(o[n]){const t=o[n],e=s.tableId;for(const[s,{colIndex:o,colspan:i,rowspan:n}]of Object.entries(l))t.insertCell(o,{tableId:e,rowId:t.rowId,colId:s,colspan:i,rowspan:n})}this.fixTableByRemove(s)}removeCol(t){if(t.length<=0)return;const s=t[0],o=d(s,e.tableMain),i={};for(const e of t)i[e.rowId]||(i[e.rowId]=0),i[e.rowId]+=e.colspan;const n=Math.max(...Object.values(i)),l=s.getColumnIndex(),r=o.descendants(le);for(let t=0;t<n;t++){const t=[];let e=0;for(const s of Object.values(r)){const o=t.shift()||0;if(e>0){e-=1;continue}const i=s.removeCell(l-o);i.skipRowNum&&(e+=i.skipRowNum);for(const[e,s]of i.entries())t[e]=(t[e]||0)+s}}const[a]=o.descendants(ye);if(a)for(let t=0;t<n;t++)a.removeColByIndex(l);this.fixTableByRemove(o)}mergeCells(t){if(t.length<=1)return;const s=t.reduce(((t,e,s)=>{const o=e.colId;t[0][o]||(t[0][o]=0),t[0][o]+=e.rowspan;const i=e.rowId;return t[1][i]||(t[1][i]=0),t[1][i]+=e.colspan,0!==s&&(e.moveChildren(t[2]),e.parent.remove()),t}),[{},{},t[0]]),o=Math.max(...Object.values(s[0])),i=Math.max(...Object.values(s[1])),n=s[2];n.colspan=i,n.rowspan=o;const l=d(n,e.tableMain);this.fixTableByRemove(l)}splitCell(t){if(1!==t.length)return;const s=t[0];if(1===s.colspan&&1===s.rowspan)return;const[o,i]=h(s,[e.tableMain,e.tableRow]),n=o.tableId,l=s.getColumnIndex(),r=o.getColIds().slice(l,l+s.colspan).reverse();let a=i,c=s.rowspan;for(s.colspan=1,s.rowspan=1;a&&c>0;){for(const t of r)a===i&&t===s.colId||a.insertCell(l+(a===i?1:0),{tableId:n,rowId:a.rowId,colId:t,rowspan:1,colspan:1});c-=1,a=a.next}}}export{de as BlockOverride,ee as ContainerFormat,pe as ScrollOverride,Pe as Scrollbar,Te as TableAlign,re as TableBodyFormat,ge as TableCaptionFormat,we as TableCellFormat,ne as TableCellInnerFormat,Be as TableClipboard,Ce as TableColFormat,ye as TableColgroupFormat,xe as TableMainFormat,ze as TableMenuCommon,qe as TableMenuContextmenu,$e as TableMenuSelect,De as TableResizeBox,We as TableResizeCommon,Fe as TableResizeLine,je as TableResizeScale,le as TableRowFormat,_e as TableSelection,ts as TableUp,Ve as TableVirtualScrollbar,Ie as TableWrapperFormat,e as blotName,T as createColorPicker,B as createSelectBox,Dt as createTooltip,ts as default,Qe as defaultCustomSelect,d as findParentBlot,h as findParentBlots,Ne as getTableMainRect,He as isTableAlignRight,Gt as randomId,ke as tableMenuTools,o as tableUpEvent,i as tableUpInternal,s as tableUpSize,Ze as updateTableConstants};
|
|
2
|
-
|
|
1
|
+
import e from"quill";const t={container:`table-up-container`,tableCaption:`table-up-caption`,tableWrapper:`table-up`,tableMain:`table-up-main`,tableColgroup:`table-up-colgroup`,tableCol:`table-up-col`,tableBody:`table-up-body`,tableRow:`table-up-row`,tableCell:`table-up-cell`,tableCellInner:`table-up-cell-inner`},n={colMinWidthPre:5,colMinWidthPx:40,colDefaultWidth:100,rowMinHeightPx:36},r={AFTER_TABLE_RESIZE:`after-table-resize`},i={moduleName:`table-up`},a=[[`rgb(255, 255, 255)`,`rgb(0, 0, 0)`,`rgb(72, 83, 104)`,`rgb(41, 114, 244)`,`rgb(0, 163, 245)`,`rgb(49, 155, 98)`,`rgb(222, 60, 54)`,`rgb(248, 136, 37)`,`rgb(245, 196, 0)`,`rgb(153, 56, 215)`],[`rgb(242, 242, 242)`,`rgb(127, 127, 127)`,`rgb(243, 245, 247)`,`rgb(229, 239, 255)`,`rgb(229, 246, 255)`,`rgb(234, 250, 241)`,`rgb(254, 233, 232)`,`rgb(254, 243, 235)`,`rgb(254, 249, 227)`,`rgb(253, 235, 255)`],[`rgb(216, 216, 216)`,`rgb(89, 89, 89)`,`rgb(197, 202, 211)`,`rgb(199, 220, 255)`,`rgb(199, 236, 255)`,`rgb(195, 234, 213)`,`rgb(255, 201, 199)`,`rgb(255, 220, 196)`,`rgb(255, 238, 173)`,`rgb(242, 199, 255)`],[`rgb(191, 191, 191)`,`rgb(63, 63, 63)`,`rgb(128, 139, 158)`,`rgb(153, 190, 255)`,`rgb(153, 221, 255)`,`rgb(152, 215, 182)`,`rgb(255, 156, 153)`,`rgb(255, 186, 132)`,`rgb(255, 226, 112)`,`rgb(213, 142, 255)`],[`rgb(165, 165, 165)`,`rgb(38, 38, 38)`,`rgb(53, 59, 69)`,`rgb(20, 80, 184)`,`rgb(18, 116, 165)`,`rgb(39, 124, 79)`,`rgb(158, 30, 26)`,`rgb(184, 96, 20)`,`rgb(163, 130, 0)`,`rgb(94, 34, 129)`],[`rgb(147, 147, 147)`,`rgb(13, 13, 13)`,`rgb(36, 39, 46)`,`rgb(12, 48, 110)`,`rgb(10, 65, 92)`,`rgb(24, 78, 50)`,`rgb(88, 17, 14)`,`rgb(92, 48, 10)`,`rgb(102, 82, 0)`,`rgb(59, 21, 81)`]],o=`table-up`,s=new Set([t.tableCellInner]),c=e=>s.has(e.statics.blotName);function l(e){return e&&e.parent?c(e.parent)?!0:l(e.parent):!1}function u(e,t=o){let n=t?`${t}-`:``;return{b:()=>`${n}${e}`,be:t=>t?`${n}${e}__${t}`:``,bm:t=>t?`${n}${e}--${t}`:``,bem:(t,r)=>t&&r?`${n}${e}__${t}--${r}`:``,ns:e=>e?`${n}${e}`:``,bs:t=>t?`${n}${e}-${t}`:``,cv:e=>e?`--${n}${e}`:``,is:e=>`is-${e}`}}function d(e,t){let n=e.parent;for(;n&&n.statics.blotName!==t&&n!==e.scroll;)n=n.parent;if(n===e.scroll)throw Error(`${e.statics.blotName} must be a child of ${t}`);return n}function f(e,t){let n=Array(t.length),r=new Map(t.map((e,t)=>[e,t])),i=e.parent;for(;i&&i!==e.scroll&&r.size!==0;){if(r.has(i.statics.blotName)){let e=r.get(i.statics.blotName);n[e]=i,r.delete(i.statics.blotName)}i=i.parent}if(r.size>0)throw Error(`${e.statics.blotName} must be a child of ${Array.from(r.keys()).join(`, `)}`);return n}function p(e){let t=new Map,n=e;for(;n&&n.statics.blotName!==`scroll`;)t.set(n.statics.blotName,n),n=n.parent;return t}function m(e,t){let n=[],r=e.children.iterator(),i=null;for(;i=r();)i instanceof t&&n.push(i);return n}function h(e,t,n){for(let r of Object.getOwnPropertyNames(t)){if(n&&n.test(r))continue;Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}return e}function g(e,t){let n=class extends e{constructor(...e){super(...e)}};for(let e of t)h(n.prototype,e.prototype,/^constructor$/);return n}function _(e,t){return e.prototype instanceof t}function v(e,t){return e=Math.min(t,Math.max(0,Number.parseFloat(`${e}`))),Math.abs(e-t)<1e-6?1:e%t/Number.parseFloat(t)}function y(e){return{h:Math.min(360,Math.max(0,e.h)),s:Math.min(100,Math.max(0,e.s)),b:Math.min(100,Math.max(0,e.b)),a:Math.min(1,Math.max(0,e.a))}}function b(e){e=e.startsWith(`#`)?e.slice(1):e;let t=Number.parseInt(e.slice(0,2),16),n=Number.parseInt(e.slice(2,4),16),r=Number.parseInt(e.slice(4,6),16),i=Number((Number.parseInt(e.slice(6,8)||`ff`,16)/255).toFixed(2));return{r:t,g:n,b:r,a:i}}function x(e){let{r:t,g:n,b:r,a:i}=e;t=v(t,255),n=v(n,255),r=v(r,255);let a=Math.max(t,n,r),o=Math.min(t,n,r),s,c=a,l=a-o,u=a===0?0:l/a;if(a===o)s=0;else{switch(a){case t:s=(n-r)/l+(n<r?6:0);break;case n:s=(r-t)/l+2;break;case r:s=(t-n)/l+4;break}s/=6}return{h:s*360,s:u*100,b:c*100,a:i}}function ee(e){let{h:t,s:n,b:r,a:i}=e;t=v(t,360)*6,n=v(n,100),r=v(r,100);let a=Math.floor(t),o=t-a,s=r*(1-n),c=r*(1-o*n),l=r*(1-(1-o)*n),u=a%6,d=[r,c,s,s,l,r][u],f=[l,r,r,c,s,s][u],p=[s,s,l,r,r,c][u];return{r:Math.round(d*255),g:Math.round(f*255),b:Math.round(p*255),a:i}}function te(e){let t=[e.r.toString(16),e.g.toString(16),e.b.toString(16),Math.round(e.a*255).toString(16)];for(let e in t)t[e].length===1&&(t[e]=`0${t[e]}`);return t.join(``)}const ne=e=>te(ee(e)),S=e=>typeof e==`function`,C=Array.isArray,w=e=>typeof e==`string`,re=e=>typeof e==`number`,T=e=>typeof e==`object`&&!!e,ie=e=>!Number.isNaN(e)&&Number(e)>0;function ae(e){let{type:t=`default`,content:n}=e||{},r=u(`button`),i=document.createElement(`button`);return i.classList.add(r.b(),t),n&&(w(n)?i.textContent=n:i.appendChild(n)),i}function oe(e={}){let t=230,n=150,r=10,i=x(b(e.color||`#ff0000`)),a=u(`color-picker`),o=document.createElement(`div`);o.classList.add(a.b());let s=document.createElement(`div`);s.classList.add(a.be(`content`));let c=document.createElement(`div`);c.classList.add(a.be(`selector`));let l=document.createElement(`div`);l.classList.add(a.be(`background`)),c.appendChild(l);let d=document.createElement(`div`);d.classList.add(a.be(`background-handle`)),l.appendChild(d);let f=document.createElement(`div`);f.classList.add(a.be(`alpha`));let p=document.createElement(`div`);p.classList.add(a.be(`alpha-bg`));let m=document.createElement(`div`);m.classList.add(a.be(`alpha-handle`)),f.appendChild(p),f.appendChild(m);let h=document.createElement(`div`);h.classList.add(a.be(`hue`));let g=document.createElement(`div`);g.classList.add(a.be(`hue-handle`)),h.appendChild(g);let _=document.createElement(`div`);_.classList.add(a.be(`action`));let[v,S,C,w]=[`r`,`g`,`b`,`a`].map(e=>{let t=document.createElement(`div`);t.classList.add(a.be(`action-item`),e);let n=document.createElement(`label`);n.textContent=e.toUpperCase();let r=document.createElement(`input`);return r.classList.add(a.be(`input`)),r.addEventListener(`input`,()=>{r.value=r.value.replaceAll(/[^0-9]/g,``)}),r.addEventListener(`change`,()=>{let t=Math.round(Number(r.value));e===`a`&&(t/=100);let n=y(x(Object.assign({},ee(i),{[e]:t})));E(n),de()}),t.appendChild(n),t.appendChild(r),_.appendChild(t),r});s.appendChild(h),s.appendChild(c),s.appendChild(f),o.appendChild(s),o.appendChild(_);let re=!1,T=!1,ie=!1;function ae(){let e=ne(i);for(let[t,n]of[v,S,C].entries())n.value=String(Number.parseInt(e[t*2]+e[t*2+1],16));w.value=String((i.a*100).toFixed(0))}function oe(){Object.assign(d.style,{left:`${Math.floor(t*i.s/100)}px`,top:`${Math.floor(n*(100-i.b)/100)}px`})}function se(){c.style.backgroundColor=`#${te(ee({h:i.h,s:100,b:100,a:1}))}`}function ce(){g.style.top=`${Math.floor(n-n*i.h/360)}px`}function le(){m.style.left=`${i.a*100}%`}function ue(){let{r:e,g:t,b:n}=ee(i);p.style.background=`linear-gradient(to right, rgba(${e}, ${t}, ${n}, 0) 0%, rgba(${e}, ${t}, ${n}, 1) 100%)`}function de(){oe(),se(),ce(),le(),ue(),ae()}function E(t){i=y(Object.assign({},i,t)),ae(),e.onChange&&e.onChange(`#${ne(i)}`)}function D(e){let r=c.getBoundingClientRect(),i=r.top+(window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0),a=r.left+document.body.scrollLeft,o=Math.floor(100*Math.max(0,Math.min(t,e.pageX-a))/t),s=Math.floor(100*(n-Math.max(0,Math.min(n,e.pageY-i)))/n);E({s:o,b:s}),de()}function fe(e){let t=h.getBoundingClientRect().top+(window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0);E({h:Math.floor(360*(n-Math.max(0,Math.min(n,e.pageY-t)))/n)}),de()}function pe(e){let{pageX:t}=e,n=f.getBoundingClientRect(),i=t-n.left;i=Math.max(r/2,i),i=Math.min(i,n.width-r/2),E({a:Math.round((i-10/2)/(n.width-10)*100)/100}),de()}function O(e){re&&(e.preventDefault(),D(e)),T&&(e.preventDefault(),fe(e)),ie&&(e.preventDefault(),pe(e))}function me(){document.removeEventListener(`mousemove`,O),document.removeEventListener(`mouseup`,me),re=!1}function he(e){document.addEventListener(`mousemove`,O),document.addEventListener(`mouseup`,me),re=!0,D(e)}c.addEventListener(`mousedown`,he);function ge(){document.removeEventListener(`mousemove`,O),document.removeEventListener(`mouseup`,ge),T=!1}function _e(e){document.addEventListener(`mousemove`,O),document.addEventListener(`mouseup`,ge),T=!0,fe(e)}h.addEventListener(`mousedown`,_e);function k(){document.removeEventListener(`mousemove`,O),document.removeEventListener(`mouseup`,k),ie=!1}function ve(e){document.addEventListener(`mousemove`,O),document.addEventListener(`mouseup`,k),ie=!0,pe(e)}return f.addEventListener(`mousedown`,ve),de(),o}let se=8e3;function ce({child:e,target:t=document.body,beforeClose:n=()=>{}}={}){let r=u(`dialog`),i=t,a=document.createElement(`div`);a.classList.add(r.b()),a.style.zIndex=String(se);let o=document.createElement(`div`);if(o.classList.add(r.be(`overlay`)),a.appendChild(o),e){let t=document.createElement(`div`);t.classList.add(r.be(`content`)),t.appendChild(e),o.appendChild(t),t.addEventListener(`click`,e=>{e.stopPropagation()})}let s=getComputedStyle(i).overflow;i.style.overflow=`hidden`,i.appendChild(a);let c=()=>{n(),a.remove(),i.style.overflow=s};return a.addEventListener(`click`,c),se+=1,{dialog:a,close:c}}function le(e,t){let n=u(`input`);t.type||=`text`,t.value||=``;let r=document.createElement(`div`);if(r.classList.add(n.be(`item`)),e){let t=document.createElement(`span`);t.classList.add(n.be(`label`)),t.textContent=e,r.appendChild(t)}let i=document.createElement(`div`);i.classList.add(n.be(`input`));let a=document.createElement(`input`);for(let e in t)a.setAttribute(e,t[e]);(t.max||t.min)&&a.addEventListener(`blur`,()=>{t.max&&t.max<=Number(a.value)&&(a.value=String(t.max)),t.min&&t.min>=Number(a.value)&&(a.value=String(t.min))}),i.appendChild(a),r.appendChild(i),a.addEventListener(`focus`,()=>{i.classList.add(`focus`)}),a.addEventListener(`blur`,()=>{i.classList.remove(`focus`)});let o=e=>{let t;i.classList.contains(`error`)?t=i.querySelector(`.${n.be(`error-tip`)}`):(t=document.createElement(`span`),t.classList.add(n.be(`error-tip`)),i.appendChild(t)),t.textContent=e,i.classList.add(`error`);let r=()=>{i.classList.remove(`error`),t.remove()};return{removeError:r}};return{item:r,input:a,errorTip:o}}async function ue(e={}){let t=u(`creator`),n=document.createElement(`div`);n.classList.add(t.b());let r=document.createElement(`div`);r.classList.add(t.be(`input`));let{item:i,input:a,errorTip:o}=le(e.rowText||`Row`,{type:`number`,value:String(e.row||``),max:99}),{item:s,input:c,errorTip:l}=le(e.colText||`Column`,{type:`number`,value:String(e.col||``),max:99});r.appendChild(i),r.appendChild(s),n.appendChild(r);let d=document.createElement(`div`);d.classList.add(t.be(`control`));let f=ae({type:`confirm`,content:e.confirmText||`Confirm`}),p=ae({type:`default`,content:e.cancelText||`Cancel`});d.appendChild(f),d.appendChild(p),n.appendChild(d);let m=(t=Number(a.value),n=Number(c.value))=>{if(Number.isNaN(t)||t<=0){o(e.notPositiveNumberError||`Please enter a positive integer`);return}if(Number.isNaN(n)||n<=0){l(e.notPositiveNumberError||`Please enter a positive integer`);return}return{row:t,col:n}},h=e=>{e.key===`Escape`&&(close(),document.removeEventListener(`keydown`,h))};return new Promise((e,t)=>{let{close:r}=ce({child:n,beforeClose:t});a.focus();for(let t of[a,c])t.addEventListener(`keydown`,t=>{if(t.key===`Enter`){let t=m();t&&(e(t),r())}});f.addEventListener(`click`,async()=>{let t=m();t&&(e(t),r())}),document.addEventListener(`keydown`,h),p.addEventListener(`click`,r)})}function de(e={}){let t=u(`select-box`),n=document.createElement(`div`);n.classList.add(t.b());let r=document.createElement(`div`);r.classList.add(t.be(`block`));for(let n=0;n<(e.row||8);n++)for(let i=0;i<(e.col||8);i++){let e=document.createElement(`div`);e.classList.add(t.be(`item`)),e.dataset.row=String(n+1),e.dataset.col=String(i+1),r.appendChild(e)}let i=()=>{let{row:e,col:t}=n.dataset;for(let e of Array.from(r.querySelectorAll(`.active`)))e.classList.remove(`active`);if(!e||!t)return;let i=Array.from(r.children);for(let n=0;n<i.length;n++){let{row:r,col:a}=i[n].dataset;if(r>e&&a>t)return;r<=e&&a<=t?i[n].classList.add(`active`):i[n].classList.remove(`active`)}};if(r.addEventListener(`mousemove`,e=>{if(!e.target)return;let{row:t,col:r}=e.target.dataset;!t||!r||(n.dataset.row=t,n.dataset.col=r,i())}),r.addEventListener(`mouseleave`,()=>{n.removeAttribute(`data-row`),n.removeAttribute(`data-col`),i()}),r.addEventListener(`click`,()=>{let{row:t,col:r}=n.dataset;!t||!r||e.onSelect&&e.onSelect(Number(t),Number(r))}),n.appendChild(r),e.customBtn){let r=e.texts||{},i=document.createElement(`div`);i.classList.add(t.be(`custom`)),i.textContent=r.customBtnText||`Custom`,i.addEventListener(`click`,async()=>{let t=await ue(r);t&&e.onSelect&&e.onSelect(t.row,t.col)}),n.appendChild(i)}return n}const E=Math.min,D=Math.max,fe=Math.round,pe=Math.floor,O=e=>({x:e,y:e}),me={left:`right`,right:`left`,bottom:`top`,top:`bottom`},he={start:`end`,end:`start`};function ge(e,t,n){return D(e,E(t,n))}function _e(e,t){return typeof e==`function`?e(t):e}function k(e){return e.split(`-`)[0]}function ve(e){return e.split(`-`)[1]}function ye(e){return e===`x`?`y`:`x`}function be(e){return e===`y`?`height`:`width`}function A(e){return[`top`,`bottom`].includes(k(e))?`y`:`x`}function xe(e){return ye(A(e))}function Se(e,t,n){n===void 0&&(n=!1);let r=ve(e),i=xe(e),a=be(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=De(o)),[o,De(o)]}function Ce(e){let t=De(e);return[we(e),t,we(t)]}function we(e){return e.replace(/start|end/g,e=>he[e])}function Te(e,t,n){let r=[`left`,`right`],i=[`right`,`left`],a=[`top`,`bottom`],o=[`bottom`,`top`];switch(e){case`top`:case`bottom`:return n?t?i:r:t?r:i;case`left`:case`right`:return t?a:o;default:return[]}}function Ee(e,t,n,r){let i=ve(e),a=Te(k(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(we)))),a}function De(e){return e.replace(/left|right|bottom|top/g,e=>me[e])}function Oe(e){return{top:0,right:0,bottom:0,left:0,...e}}function ke(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:Oe(e)}function Ae(e){let{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function je(e,t,n){let{reference:r,floating:i}=e,a=A(t),o=xe(t),s=be(o),c=k(t),l=a===`y`,u=r.x+r.width/2-i.width/2,d=r.y+r.height/2-i.height/2,f=r[s]/2-i[s]/2,p;switch(c){case`top`:p={x:u,y:r.y-i.height};break;case`bottom`:p={x:u,y:r.y+r.height};break;case`right`:p={x:r.x+r.width,y:d};break;case`left`:p={x:r.x-i.width,y:d};break;default:p={x:r.x,y:r.y}}switch(ve(t)){case`start`:p[o]-=f*(n&&l?-1:1);break;case`end`:p[o]+=f*(n&&l?-1:1);break}return p}const Me=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=a.filter(Boolean),c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=je(l,r,c),f=r,p={},m=0;for(let n=0;n<s.length;n++){let{name:a,fn:h}=s[n],{x:g,y:_,data:v,reset:y}=await h({x:u,y:d,initialPlacement:r,placement:f,strategy:i,middlewareData:p,rects:l,platform:o,elements:{reference:e,floating:t}});u=g??u,d=_??d,p={...p,[a]:{...p[a],...v}},y&&m<=50&&(m++,typeof y==`object`&&(y.placement&&(f=y.placement),y.rects&&(l=y.rects===!0?await o.getElementRects({reference:e,floating:t,strategy:i}):y.rects),{x:u,y:d}=je(l,f,c)),n=-1)}return{x:u,y:d,placement:f,strategy:i,middlewareData:p}};async function Ne(e,t){var n;t===void 0&&(t={});let{x:r,y:i,platform:a,rects:o,elements:s,strategy:c}=e,{boundary:l=`clippingAncestors`,rootBoundary:u=`viewport`,elementContext:d=`floating`,altBoundary:f=!1,padding:p=0}=_e(t,e),m=ke(p),h=d===`floating`?`reference`:`floating`,g=s[f?h:d],_=Ae(await a.getClippingRect({element:(n=await(a.isElement==null?void 0:a.isElement(g)))??!0?g:g.contextElement||await(a.getDocumentElement==null?void 0:a.getDocumentElement(s.floating)),boundary:l,rootBoundary:u,strategy:c})),v=d===`floating`?{x:r,y:i,width:o.floating.width,height:o.floating.height}:o.reference,y=await(a.getOffsetParent==null?void 0:a.getOffsetParent(s.floating)),b=await(a.isElement==null?void 0:a.isElement(y))&&await(a.getScale==null?void 0:a.getScale(y))||{x:1,y:1},x=Ae(a.convertOffsetParentRelativeRectToViewportRelativeRect?await a.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:v,offsetParent:y,strategy:c}):v);return{top:(_.top-x.top+m.top)/b.y,bottom:(x.bottom-_.bottom+m.bottom)/b.y,left:(_.left-x.left+m.left)/b.x,right:(x.right-_.right+m.right)/b.x}}const Pe=function(e){return e===void 0&&(e={}),{name:`flip`,options:e,async fn(t){var n,r;let{placement:i,middlewareData:a,rects:o,initialPlacement:s,platform:c,elements:l}=t,{mainAxis:u=!0,crossAxis:d=!0,fallbackPlacements:f,fallbackStrategy:p=`bestFit`,fallbackAxisSideDirection:m=`none`,flipAlignment:h=!0,...g}=_e(e,t);if((n=a.arrow)!=null&&n.alignmentOffset)return{};let _=k(i),v=A(s),y=k(s)===s,b=await(c.isRTL==null?void 0:c.isRTL(l.floating)),x=f||(y||!h?[De(s)]:Ce(s)),ee=m!==`none`;!f&&ee&&x.push(...Ee(s,h,m,b));let te=[s,...x],ne=await Ne(t,g),S=[],C=(r=a.flip)?.overflows||[];if(u&&S.push(ne[_]),d){let e=Se(i,o,b);S.push(ne[e[0]],ne[e[1]])}if(C=[...C,{placement:i,overflows:S}],!S.every(e=>e<=0)){var w,re;let e=((w=a.flip)?.index||0)+1,t=te[e];if(t){let n=d===`alignment`?v!==A(t):!1;if(!n||C.every(e=>e.overflows[0]>0&&A(e.placement)===v))return{data:{index:e,overflows:C},reset:{placement:t}}}let n=(re=C.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0])?.placement;if(!n)switch(p){case`bestFit`:{var T;let e=(T=C.filter(e=>{if(ee){let t=A(e.placement);return t===v||t===`y`}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0])?.[0];e&&(n=e);break}case`initialPlacement`:n=s;break}if(i!==n)return{reset:{placement:n}}}return{}}}};async function Fe(e,t){let{placement:n,platform:r,elements:i}=e,a=await(r.isRTL==null?void 0:r.isRTL(i.floating)),o=k(n),s=ve(n),c=A(n)===`y`,l=[`left`,`top`].includes(o)?-1:1,u=a&&c?-1:1,d=_e(t,e),{mainAxis:f,crossAxis:p,alignmentAxis:m}=typeof d==`number`?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof m==`number`&&(p=s===`end`?m*-1:m),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}const Ie=function(e){return e===void 0&&(e=0),{name:`offset`,options:e,async fn(t){var n,r;let{x:i,y:a,placement:o,middlewareData:s}=t,c=await Fe(t,e);return o===(n=s.offset)?.placement&&(r=s.arrow)!=null&&r.alignmentOffset?{}:{x:i+c.x,y:a+c.y,data:{...c,placement:o}}}}},Le=function(e){return e===void 0&&(e={}),{name:`shift`,options:e,async fn(t){let{x:n,y:r,placement:i}=t,{mainAxis:a=!0,crossAxis:o=!1,limiter:s={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...c}=_e(e,t),l={x:n,y:r},u=await Ne(t,c),d=A(k(i)),f=ye(d),p=l[f],m=l[d];if(a){let e=f===`y`?`top`:`left`,t=f===`y`?`bottom`:`right`,n=p+u[e],r=p-u[t];p=ge(n,p,r)}if(o){let e=d===`y`?`top`:`left`,t=d===`y`?`bottom`:`right`,n=m+u[e],r=m-u[t];m=ge(n,m,r)}let h=s.fn({...t,[f]:p,[d]:m});return{...h,data:{x:h.x-n,y:h.y-r,enabled:{[f]:a,[d]:o}}}}}},Re=function(e){return e===void 0&&(e={}),{options:e,fn(t){let{x:n,y:r,placement:i,rects:a,middlewareData:o}=t,{offset:s=0,mainAxis:c=!0,crossAxis:l=!0}=_e(e,t),u={x:n,y:r},d=A(i),f=ye(d),p=u[f],m=u[d],h=_e(s,t),g=typeof h==`number`?{mainAxis:h,crossAxis:0}:{mainAxis:0,crossAxis:0,...h};if(c){let e=f===`y`?`height`:`width`,t=a.reference[f]-a.floating[e]+g.mainAxis,n=a.reference[f]+a.reference[e]-g.mainAxis;p<t?p=t:p>n&&(p=n)}if(l){var _,v;let e=f===`y`?`width`:`height`,t=[`top`,`left`].includes(k(i)),n=a.reference[d]-a.floating[e]+(t&&(_=o.offset)?.[d]||0)+(t?0:g.crossAxis),r=a.reference[d]+a.reference[e]+(t?0:(v=o.offset)?.[d]||0)-(t?g.crossAxis:0);m<n?m=n:m>r&&(m=r)}return{[f]:p,[d]:m}}}};function ze(){return typeof window<`u`}function Be(e){return Ve(e)?(e.nodeName||``).toLowerCase():`#document`}function j(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function M(e){var t;return(t=(Ve(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function Ve(e){return ze()?e instanceof Node||e instanceof j(e).Node:!1}function N(e){return ze()?e instanceof Element||e instanceof j(e).Element:!1}function P(e){return ze()?e instanceof HTMLElement||e instanceof j(e).HTMLElement:!1}function He(e){return!ze()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof j(e).ShadowRoot}function Ue(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=F(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&![`inline`,`contents`].includes(i)}function We(e){return[`table`,`td`,`th`].includes(Be(e))}function Ge(e){return[`:popover-open`,`:modal`].some(t=>{try{return e.matches(t)}catch{return!1}})}function Ke(e){let t=Je(),n=N(e)?F(e):e;return[`transform`,`translate`,`scale`,`rotate`,`perspective`].some(e=>n[e]?n[e]!==`none`:!1)||(n.containerType?n.containerType!==`normal`:!1)||!t&&(n.backdropFilter?n.backdropFilter!==`none`:!1)||!t&&(n.filter?n.filter!==`none`:!1)||[`transform`,`translate`,`scale`,`rotate`,`perspective`,`filter`].some(e=>(n.willChange||``).includes(e))||[`paint`,`layout`,`strict`,`content`].some(e=>(n.contain||``).includes(e))}function qe(e){let t=I(e);for(;P(t)&&!Ye(t);){if(Ke(t))return t;if(Ge(t))return null;t=I(t)}return null}function Je(){return typeof CSS>`u`||!CSS.supports?!1:CSS.supports(`-webkit-backdrop-filter`,`none`)}function Ye(e){return[`html`,`body`,`#document`].includes(Be(e))}function F(e){return j(e).getComputedStyle(e)}function Xe(e){return N(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function I(e){if(Be(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||He(e)&&e.host||M(e);return He(t)?t.host:t}function Ze(e){let t=I(e);return Ye(t)?e.ownerDocument?e.ownerDocument.body:e.body:P(t)&&Ue(t)?t:Ze(t)}function Qe(e,t,n){var r;t===void 0&&(t=[]),n===void 0&&(n=!0);let i=Ze(e),a=i===(r=e.ownerDocument)?.body,o=j(i);if(a){let e=$e(o);return t.concat(o,o.visualViewport||[],Ue(i)?i:[],e&&n?Qe(e):[])}return t.concat(i,Qe(i,[],n))}function $e(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function et(e){let t=F(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0,i=P(e),a=i?e.offsetWidth:n,o=i?e.offsetHeight:r,s=fe(n)!==a||fe(r)!==o;return s&&(n=a,r=o),{width:n,height:r,$:s}}function tt(e){return N(e)?e:e.contextElement}function nt(e){let t=tt(e);if(!P(t))return O(1);let n=t.getBoundingClientRect(),{width:r,height:i,$:a}=et(t),o=(a?fe(n.width):n.width)/r,s=(a?fe(n.height):n.height)/i;return(!o||!Number.isFinite(o))&&(o=1),(!s||!Number.isFinite(s))&&(s=1),{x:o,y:s}}const rt=O(0);function it(e){let t=j(e);return!Je()||!t.visualViewport?rt:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function at(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==j(e)?!1:t}function ot(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);let i=e.getBoundingClientRect(),a=tt(e),o=O(1);t&&(r?N(r)&&(o=nt(r)):o=nt(e));let s=at(a,n,r)?it(a):O(0),c=(i.left+s.x)/o.x,l=(i.top+s.y)/o.y,u=i.width/o.x,d=i.height/o.y;if(a){let e=j(a),t=r&&N(r)?j(r):r,n=e,i=$e(n);for(;i&&r&&t!==n;){let e=nt(i),t=i.getBoundingClientRect(),r=F(i),a=t.left+(i.clientLeft+parseFloat(r.paddingLeft))*e.x,o=t.top+(i.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,l*=e.y,u*=e.x,d*=e.y,c+=a,l+=o,n=j(i),i=$e(n)}}return Ae({width:u,height:d,x:c,y:l})}function st(e,t){let n=Xe(e).scrollLeft;return t?t.left+n:ot(M(e)).left+n}function ct(e,t,n){n===void 0&&(n=!1);let r=e.getBoundingClientRect(),i=r.left+t.scrollLeft-(n?0:st(e,r)),a=r.top+t.scrollTop;return{x:i,y:a}}function lt(e){let{elements:t,rect:n,offsetParent:r,strategy:i}=e,a=i===`fixed`,o=M(r),s=t?Ge(t.floating):!1;if(r===o||s&&a)return n;let c={scrollLeft:0,scrollTop:0},l=O(1),u=O(0),d=P(r);if((d||!d&&!a)&&((Be(r)!==`body`||Ue(o))&&(c=Xe(r)),P(r))){let e=ot(r);l=nt(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}let f=o&&!d&&!a?ct(o,c,!0):O(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:n.y*l.y-c.scrollTop*l.y+u.y+f.y}}function ut(e){return Array.from(e.getClientRects())}function dt(e){let t=M(e),n=Xe(e),r=e.ownerDocument.body,i=D(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),a=D(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight),o=-n.scrollLeft+st(e),s=-n.scrollTop;return F(r).direction===`rtl`&&(o+=D(t.clientWidth,r.clientWidth)-i),{width:i,height:a,x:o,y:s}}function ft(e,t){let n=j(e),r=M(e),i=n.visualViewport,a=r.clientWidth,o=r.clientHeight,s=0,c=0;if(i){a=i.width,o=i.height;let e=Je();(!e||e&&t===`fixed`)&&(s=i.offsetLeft,c=i.offsetTop)}return{width:a,height:o,x:s,y:c}}function pt(e,t){let n=ot(e,!0,t===`fixed`),r=n.top+e.clientTop,i=n.left+e.clientLeft,a=P(e)?nt(e):O(1),o=e.clientWidth*a.x,s=e.clientHeight*a.y,c=i*a.x,l=r*a.y;return{width:o,height:s,x:c,y:l}}function mt(e,t,n){let r;if(t===`viewport`)r=ft(e,n);else if(t===`document`)r=dt(M(e));else if(N(t))r=pt(t,n);else{let n=it(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return Ae(r)}function ht(e,t){let n=I(e);return n===t||!N(n)||Ye(n)?!1:F(n).position===`fixed`||ht(n,t)}function gt(e,t){let n=t.get(e);if(n)return n;let r=Qe(e,[],!1).filter(e=>N(e)&&Be(e)!==`body`),i=null,a=F(e).position===`fixed`,o=a?I(e):e;for(;N(o)&&!Ye(o);){let t=F(o),n=Ke(o);!n&&t.position===`fixed`&&(i=null);let s=a?!n&&!i:!n&&t.position===`static`&&!!i&&[`absolute`,`fixed`].includes(i.position)||Ue(o)&&!n&&ht(e,o);s?r=r.filter(e=>e!==o):i=t,o=I(o)}return t.set(e,r),r}function _t(e){let{element:t,boundary:n,rootBoundary:r,strategy:i}=e,a=n===`clippingAncestors`?Ge(t)?[]:gt(t,this._c):[].concat(n),o=[...a,r],s=o[0],c=o.reduce((e,n)=>{let r=mt(t,n,i);return e.top=D(r.top,e.top),e.right=E(r.right,e.right),e.bottom=E(r.bottom,e.bottom),e.left=D(r.left,e.left),e},mt(t,s,i));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function vt(e){let{width:t,height:n}=et(e);return{width:t,height:n}}function yt(e,t,n){let r=P(t),i=M(t),a=n===`fixed`,o=ot(e,!0,a,t),s={scrollLeft:0,scrollTop:0},c=O(0);function l(){c.x=st(i)}if(r||!r&&!a)if((Be(t)!==`body`||Ue(i))&&(s=Xe(t)),r){let e=ot(t,!0,a,t);c.x=e.x+t.clientLeft,c.y=e.y+t.clientTop}else i&&l();a&&!r&&i&&l();let u=i&&!r&&!a?ct(i,s):O(0),d=o.left+s.scrollLeft-c.x-u.x,f=o.top+s.scrollTop-c.y-u.y;return{x:d,y:f,width:o.width,height:o.height}}function bt(e){return F(e).position===`static`}function xt(e,t){if(!P(e)||F(e).position===`fixed`)return null;if(t)return t(e);let n=e.offsetParent;return M(e)===n&&(n=n.ownerDocument.body),n}function St(e,t){let n=j(e);if(Ge(e))return n;if(!P(e)){let t=I(e);for(;t&&!Ye(t);){if(N(t)&&!bt(t))return t;t=I(t)}return n}let r=xt(e,t);for(;r&&We(r)&&bt(r);)r=xt(r,t);return r&&Ye(r)&&bt(r)&&!Ke(r)?n:r||qe(e)||n}const Ct=async function(e){let t=this.getOffsetParent||St,n=this.getDimensions,r=await n(e.floating);return{reference:yt(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function wt(e){return F(e).direction===`rtl`}const Tt={convertOffsetParentRelativeRectToViewportRelativeRect:lt,getDocumentElement:M,getClippingRect:_t,getOffsetParent:St,getElementRects:Ct,getClientRects:ut,getDimensions:vt,getScale:nt,isElement:N,isRTL:wt};function Et(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function Dt(e,t){let n=null,r,i=M(e);function a(){var e;clearTimeout(r),(e=n)==null||e.disconnect(),n=null}function o(s,c){s===void 0&&(s=!1),c===void 0&&(c=1),a();let l=e.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=l;if(s||t(),!f||!p)return;let m=pe(d),h=pe(i.clientWidth-(u+f)),g=pe(i.clientHeight-(d+p)),_=pe(u),v=-m+`px `+-h+`px `+-g+`px `+-_+`px`,y={rootMargin:v,threshold:D(0,E(1,c))||1},b=!0;function x(t){let n=t[0].intersectionRatio;if(n!==c){if(!b)return o();n?o(!1,n):r=setTimeout(()=>{o(!1,1e-7)},1e3)}n===1&&!Et(l,e.getBoundingClientRect())&&o(),b=!1}try{n=new IntersectionObserver(x,{...y,root:i.ownerDocument})}catch{n=new IntersectionObserver(x,y)}n.observe(e)}return o(!0),a}function Ot(e,t,n,r){r===void 0&&(r={});let{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:o=typeof ResizeObserver==`function`,layoutShift:s=typeof IntersectionObserver==`function`,animationFrame:c=!1}=r,l=tt(e),u=i||a?[...l?Qe(l):[],...Qe(t)]:[];u.forEach(e=>{i&&e.addEventListener(`scroll`,n,{passive:!0}),a&&e.addEventListener(`resize`,n)});let d=l&&s?Dt(l,n):null,f=-1,p=null;o&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var e;(e=p)==null||e.observe(t)})),n()}),l&&!c&&p.observe(l),p.observe(t));let m,h=c?ot(e):null;c&&g();function g(){let t=ot(e);h&&!Et(h,t)&&n(),h=t,m=requestAnimationFrame(g)}return n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener(`scroll`,n),a&&e.removeEventListener(`resize`,n)}),d?.(),(e=p)==null||e.disconnect(),p=null,c&&cancelAnimationFrame(m)}}const kt=Ie,At=Le,jt=Pe,Mt=Re,Nt=(e,t,n)=>{let r=new Map,i={platform:Tt,...n},a={...i.platform,_c:r};return Me(e,t,{...i,platform:a})};function Pt(e,t,n,r,i){return i&&clearTimeout(i),e.addEventListener(`transitionend`,n,r),setTimeout(()=>{n()},t)}const Ft=4;let It;function Lt(e,t={}){let{msg:n=``,delay:r=150,content:i,direction:a=`bottom`,type:o=`hover`,container:s,onOpen:c,onClose:l,closed:d,onDestroy:f}=t,p=u(`tooltip`);if(n||i){It||(It=document.createElement(`div`),document.body.appendChild(It));let t=s||It,u=document.createElement(`div`);u.classList.add(p.b(),`hidden`,`transparent`),i?u.appendChild(i):n&&(u.textContent=n);let m,h,g,_=()=>{g&&g(),Nt(e,u,{placement:a,middleware:[jt(),At({limiter:Mt()}),kt(Ft)]}).then(({x:e,y:t})=>{Object.assign(u.style,{left:`${e}px`,top:`${t}px`})})},v=()=>{u.classList.add(`hidden`),t.contains(u)&&t.removeChild(u),g&&g(),d&&d()},y=(n=!1)=>{h&&clearTimeout(h),m=setTimeout(()=>{if(c){let e=c(n);if(!n&&e)return}t.appendChild(u),u.removeEventListener(`transitionend`,v),u.classList.remove(`hidden`),g=Ot(e,u,_),u.classList.remove(`transparent`)},r)},b=(e=!1)=>{m&&clearTimeout(m),h=setTimeout(()=>{if(l){let t=l(e);if(!e&&t)return}Pt(u,150,v,{once:!0}),u.classList.add(`transparent`)},r)},x=()=>{let t=[e,u],n=b.bind(void 0,!1),r=y.bind(void 0,!1),i=()=>{for(let e of t)e.addEventListener(`mouseenter`,r),e.addEventListener(`mouseleave`,n)};return{prepare:i,show:y,hide:b,destroy:()=>{for(let e of t)e.removeEventListener(`mouseenter`,r),e.removeEventListener(`mouseleave`,n)}}},ee=()=>{let t=e=>{e.stopPropagation(),b(!1)},n=e=>{e.stopPropagation(),y(),document.removeEventListener(`click`,t),document.addEventListener(`click`,t,{once:!0})};return{prepare:()=>{u.addEventListener(`click`,e=>e.stopPropagation()),e.addEventListener(`click`,n)},show:y,hide:(e=!1)=>{b(e),document.removeEventListener(`click`,t)},destroy:()=>{e.removeEventListener(`click`,n),document.removeEventListener(`click`,t)}}},te={hover:x,click:ee},{prepare:ne,show:S,hide:C,destroy:w}=te[o]();ne();let re=()=>{C(!0),f&&f(),w(),g&&g(),u.remove()};return{show:S,hide:C,destroy:re}}return null}function Rt(e,t,n=0,r=!0){let{x:i,y:a,x1:o,y1:s}=e,{x:c,y:l,x1:u,y1:d}=t,f,p;return r?(f=o<c+n||i-n>u,p=s<l+n||a-n>d):(f=o<=c+n||i-n>=u,p=s<=l+n||a-n>=d),!(f||p)}function zt(e,t){let n=t.getBoundingClientRect();return{x:e.x-n.x-t.scrollLeft,y:e.y-n.y-t.scrollTop,x1:e.x-n.x-t.scrollLeft+e.width,y1:e.y-n.y-t.scrollTop+e.height,width:e.width,height:e.height}}const Bt=8;function Vt(e){let{left:t,top:n,width:r,height:i}=e,{clientWidth:a,clientHeight:o}=document.documentElement,s=!1,c=!1;return t+r>a?(t=a-r-Bt,s=!0):t<0&&(t=Bt,s=!0),n+i>o?(n=o-i-Bt,c=!0):n<0&&(n=Bt,c=!0),{left:t,top:n,leftLimited:s,topLimited:c}}function Ht(e,t={}){let n=Symbol(`ignoreFirstBind`),r=new Set,i=new ResizeObserver(r=>{t.ignoreFirstBind&&r.some(e=>{let t=e.target,r=t[n];return t[n]=!0,!r})||e(r)}),a=i.observe;i.observe=(e,t)=>{r.add(e),a.call(i,e,t)};let o=i.unobserve;i.unobserve=e=>{r.has(e)&&(r.delete(e),e[n]=void 0),o.call(i,e)};let s=i.disconnect;return i.disconnect=()=>{for(let e of r.values())e[n]=void 0;s.call(i)},i}function L(e,t){e.addEventListener(`scroll`,t),this.scrollHandler.push([e,t])}function Ut(){for(let e=0;e<this.scrollHandler.length;e++){let[t,n]=this.scrollHandler[e];t.removeEventListener(`scroll`,n)}this.scrollHandler=[]}function Wt(e){return{y:e.scrollTop,x:e.scrollLeft}}function Gt(e){let t={},n=e.trim().split(`;`);for(let e=0;e<n.length;e++){let r=n[e].trim();if(!r)continue;let i=r.indexOf(`:`);if(i===-1)continue;let a=r.slice(0,Math.max(0,i)).trim(),o=r.slice(Math.max(0,i+1)).trim();t[Jt(a)]=o}return t}function Kt(e){return Object.entries(e).map(([e,t])=>`${qt(e)}: ${t};`).join(` `)}function qt(e){let t=e.replaceAll(/([A-Z])/g,` $1`).trim();return t.split(` `).join(`-`).toLowerCase()}function Jt(e){return e.replaceAll(/-(\w)/g,(e,t)=>t.toUpperCase())}const R=()=>Math.random().toString(36).slice(2);function Yt(e,t){let n;return function(...r){n&&clearTimeout(n),n=setTimeout(()=>{e.apply(this,r)},t)}}const Xt=e.import(`parchment`),Zt=e.import(`blots/container`),Qt=e.import(`blots/block`),$t=e.import(`blots/block/embed`);var z=class e extends Zt{static tagName;static blotName=t.container;static scope=Xt.Scope.BLOCK_BLOT;static allowedChildren=[Qt,$t,Zt];static requiredContainer;static defaultChild;static create(e){let t=document.createElement(this.tagName);return this.className&&t.classList.add(this.className),t}optimize(e){if(this.children.length===0)if(this.statics.defaultChild!=null){let e=this.scroll.create(this.statics.defaultChild.blotName);this.appendChild(e)}else this.remove();this.children.length>0&&this.next!=null&&this.checkMerge()&&(this.next.moveChildren(this),this.next.remove())}enforceAllowedChildren(){this.children.forEach(t=>{let n=this.statics.allowedChildren.some(e=>t instanceof e);n||(t.statics.scope===Xt.Scope.BLOCK_BLOT?(t.parent instanceof e?(t.next!=null&&t.parent.splitAfter(t),t.prev!=null&&t.parent.splitAfter(t.prev)):(t.next!=null&&this.splitAfter(t),t.prev!=null&&this.splitAfter(t.prev)),t.parent.unwrap()):t instanceof Xt.ParentBlot?t.unwrap():t.remove())})}};const B=e=>ie(e)?e:1,en=e.import(`blots/block`),tn=e.import(`blots/block/embed`);var V=class extends z{static blotName=t.tableCellInner;static tagName=`div`;static className=`ql-table-cell-inner`;static allowDataAttrs=new Set([`table-id`,`row-id`,`col-id`,`rowspan`,`colspan`,`empty-row`]);static defaultChild=en;static allowStyle=new Set([`background-color`,`border`,`height`]);static isAllowStyle(e){let t=Jt(e);for(let e of this.allowStyle)if(t.startsWith(Jt(e)))return!0;return!1}static create(e){let{tableId:t,rowId:n,colId:r,rowspan:i,colspan:a,style:o,emptyRow:s}=e,c=super.create();c.dataset.tableId=t,c.dataset.rowId=n,c.dataset.colId=r,c.dataset.rowspan=String(B(i)),c.dataset.colspan=String(B(a)),o&&(c.dataset.style=o);try{s&&(c.dataset.emptyRow=JSON.stringify(s))}catch{}return c}static formats(e){let{tableId:t,rowId:n,colId:r,rowspan:i,colspan:a,style:o,emptyRow:s}=e.dataset,c={tableId:String(t),rowId:String(n),colId:String(r),rowspan:Number(B(i)),colspan:Number(B(a))};o&&(c.style=o);try{s&&(c.emptyRow=JSON.parse(s))}catch{}return c}constructor(e,t,n){super(e,t),t.setAttribute(`contenteditable`,String(e.isEnabled()))}setFormatValue(e,n,r=!1){if(r){if(!this.statics.isAllowStyle(e))return;this.parent&&this.parent.statics.blotName===t.tableCell&&this.parent.setFormatValue(e,n)}else{if(!this.statics.allowDataAttrs.has(e))return;let r=`data-${e}`;n?this.domNode.setAttribute(r,n):this.domNode.removeAttribute(r),this.parent&&this.parent.statics.blotName===t.tableCell&&this.parent.setFormatValue(e,n)}let i=this.descendants(en,0);for(let e of i)e.cache={}}get tableId(){return this.domNode.dataset.tableId}get rowId(){return this.domNode.dataset.rowId}set rowId(e){this.setFormatValue(`row-id`,e)}get colId(){return this.domNode.dataset.colId}set colId(e){this.setFormatValue(`col-id`,e)}get rowspan(){return Number(this.domNode.dataset.rowspan)}set rowspan(e){this.setFormatValue(`rowspan`,e)}get colspan(){return Number(this.domNode.dataset.colspan)}set colspan(e){this.setFormatValue(`colspan`,e)}get emptyRow(){try{return JSON.parse(this.domNode.dataset.emptyRow)}catch{return[]}}set emptyRow(e){if(this.emptyRow.toString()!==e.toString())try{e.length>0?this.setFormatValue(`empty-row`,JSON.stringify(e),!1):this.setFormatValue(`empty-row`,null,!1)}catch{this.setFormatValue(`empty-row`,null,!1)}}getColumnIndex(){let e=d(this,t.tableMain);return e.getColIds().indexOf(this.colId)}setStyleByString(e){let t=Gt(e);for(let[e,n]of Object.entries(t))this.setFormatValue(e,n,!0)}formatAt(e,t,n,r){this.children.length===0&&(this.appendChild(this.scroll.create(this.statics.defaultChild.blotName)),t+=1),super.formatAt(e,t,n,r),r&&r.style&&this.setStyleByString(r.style)}insertAt(e,t,n){let[r]=this.children.find(e);if(!r&&this.statics.defaultChild){let e=this.scroll.create(this.statics.defaultChild.blotName||`block`);this.appendChild(e)}super.insertAt(e,t,n)}formats(){let e=this.statics.formats(this.domNode);return{[this.statics.blotName]:e}}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(){let e=this.parent,n=this.statics.formats(this.domNode);if(this.prev&&this.prev instanceof tn){let e=this.prev;if(this.insertBefore(e,this.children.head),this.length()<=1){let t=this.scroll.create(`block`);this.insertBefore(t,e.next)}}let r=e!==null&&e.statics.blotName!==t.tableCell;if(r&&(this.wrap(t.tableCell,n),this.children.length===0)){let e=this.scroll.create(this.statics.defaultChild.blotName);this.appendChild(e)}this.children.length>0&&this.next!=null&&this.checkMerge()&&(this.next.moveChildren(this),this.next.remove()),this.uiNode!=null&&this.uiNode!==this.domNode.firstChild&&this.domNode.insertBefore(this.uiNode,this.domNode.firstChild),this.children.length===0?this.remove():this.domNode.dataset.style&&r&&e.domNode.style.cssText!==this.domNode.dataset.style&&this.setStyleByString(this.domNode.dataset.style)}insertBefore(e,n){if(e.statics.blotName===this.statics.blotName){let r=e,i=this.statics.formats(r.domNode),a=this.statics.formats(this.domNode),o=Object.entries(a).every(([e,t])=>String(t)===String(i[e]));if(o){let e=this.split(n?n.offset():0);return this.parent.insertBefore(r,e)}else{let[e,o]=f(this,[t.tableRow,t.tableCell]);if(n){let r=n.offset(),i=this.length();if(r+1<i){let n=this.scroll.create(t.tableCellInner,a);this.children.forEachAt(r+1,this.length(),e=>{n.appendChild(e)}),e.insertBefore(n.wrap(t.tableCell,a),o.next)}}if(this.rowId!==r.rowId){if(n){let t=n.offset(e);e.split(t)}else if(o.next){let t=o.next.offset(e);e.split(t)}let a=this.scroll.create(t.tableRow,i),s=this.scroll.create(t.tableCell,i);return s.appendChild(r),a.appendChild(s),e.parent.insertBefore(a,e.next)}return e.insertBefore(r.wrap(t.tableCell,i),n?o:o.next)}}else if(e.statics.blotName===t.tableCol){try{let n=d(this,t.tableBody),r=this.offset(n),i=n.split(r);n.parent.insertBefore(e,i),e.optimize({})}catch{console.warn(`TableCellInner not in TableBody`)}return}super.insertBefore(e,n)}},H=class extends z{static blotName=t.tableRow;static tagName=`tr`;static className=`ql-table-row`;static create(e){let t=super.create();return t.dataset.tableId=e.tableId,t.dataset.rowId=e.rowId,t}get rowId(){return this.domNode.dataset.rowId}get tableId(){return this.domNode.dataset.tableId}setHeight(e){this.foreachCellInner(t=>{t.setFormatValue(`height`,e,!0)})}getCellByColId(e,n){let r=d(this,t.tableMain),i=r.getColIds(),a=i.indexOf(e),o=this.children.iterator(),s=null;for(;s=o();){if(s.colId===e)return s;let t=i.indexOf(s.colId);if(t<a&&t+s.colspan>a)return s}return this[n]&&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(V);if(r.colspan!==1&&e===i-r.colspan){let e=d(this,t.tableMain),r=e.getColIds();n.colId=r[r.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(V);if(e(t,n++))break}}checkMerge(){let e=this.next;return e!==null&&e.statics.blotName===this.statics.blotName&&e.rowId===this.rowId}optimize(e){let n=this.parent,{tableId:r}=this;n!==null&&n.statics.blotName!==t.tableBody&&this.wrap(t.tableBody,r),this.statics.requiredContainer&&!(this.parent instanceof this.statics.requiredContainer)&&this.wrap(this.statics.requiredContainer.blotName),this.enforceAllowedChildren(),this.children.length>0&&this.next!=null&&this.checkMerge()&&(this.next.moveChildren(this),this.next.remove())}},U=class extends z{static blotName=t.tableBody;static tagName=`tbody`;static create(e){let t=super.create();return t.dataset.tableId=e,t}get tableId(){return this.domNode.dataset.tableId}insertRow(e){let n=d(this,t.tableMain);if(!n)return;let r=n.getColIds(),i=this.descendants(H),a=new Set(r),o=0;for(let t of i){if(o===e)break;t.foreachCellInner(t=>{if(o+t.rowspan>e&&(t.rowspan+=1,a.delete(t.colId),t.colspan!==1)){let e=r.indexOf(t.colId);for(let n=0;n<t.colspan-1;n++)a.delete(r[e+n+1])}}),o+=1}let s=n.tableId,c=R(),l=this.scroll.create(t.tableRow,{tableId:s,rowId:c});for(let e of a){let n=this.scroll.create(`break`),r=n.wrap(`block`),i=r.wrap(t.tableCellInner,{tableId:s,rowId:c,colId:e,rowspan:1,colspan:1}),a=i.wrap(t.tableCell,{tableId:s,rowId:c,colId:e,rowspan:1,colspan:1});l.appendChild(a)}this.insertBefore(l,i[e]||null)}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})}super.optimize(e)}};const nn=e.import(`parchment`),rn=e.import(`blots/block`),an=e.import(`blots/container`);var on=class extends rn{replaceWith(e,n){let r=w(e)?this.scroll.create(e,n):e;if(r instanceof nn.ParentBlot)if(r.statics.blotName===t.tableCellInner){let e=this.parent;if(e.statics.blotName===t.tableCellInner){if(e?.insertBefore(r,this.prev?null:this.next),e.statics.blotName===t.tableCellInner){let e=this;for(;e;){let t=e.next;r.appendChild(e),e=t}}else r.appendChild(this);if(e&&e.length()===0){e.remove(),e.parent.statics.blotName===t.tableCell&&e.parent.length()===0&&e.parent.remove();let n=e.parent.parent;n.statics.blotName===t.tableRow&&n.children.length===0&&n.remove()}}else e instanceof an?e.parent.insertBefore(r,e):e?.insertBefore(r,this.next),r.appendChild(this);return r}else this.moveChildren(r);return this.parent!=null&&(this.parent.insertBefore(r,this.next),this.remove()),this.attributes.copy(r),r}format(e,n){if(e===t.tableCellInner&&this.parent.statics.blotName===e&&!n)try{let e=d(this,t.tableCellInner);e.unwrap()}catch{console.error(`unwrap TableCellInner error`)}else super.format(e,n)}};const sn=e.import(`blots/block/embed`);var cn=class extends sn{delta(){let e=super.delta(),n=ln(this);return n[t.tableCellInner]&&e.insert(`
|
|
2
|
+
`,{[t.tableCellInner]:n[t.tableCellInner]}),e}length(){let e=ln(this);return e[t.tableCellInner]&&(!this.next||this.next.length()<=1)?super.length()+1:super.length()}};function ln(e,t={},n=!0){return e==null||(`formats`in e&&typeof e.formats==`function`&&(t={...t,...e.formats()},n&&delete t[`code-token`]),e.parent==null||e.parent.statics.blotName===`scroll`||e.parent.statics.scope!==e.statics.scope)?t:ln(e.parent,t,n)}const un=e.import(`parchment`),dn=e.import(`blots/scroll`);var fn=class extends dn{enable(n=!0){let r=e.import(`formats/${t.tableCellInner}`),i=this.domNode.querySelectorAll(`.${r.className}`);for(let e of Array.from(i))e.setAttribute(`contenteditable`,String(!!n));let a=e.import(`formats/${t.tableCaption}`),o=this.domNode.querySelectorAll(`.${a.className}`);for(let e of Array.from(o))e.setAttribute(`contenteditable`,String(!!n));super.enable(n)}createBlock(e,n){let r,i={};if(e[t.tableCellInner])r=t.tableCellInner;else for(let[t,n]of Object.entries(e)){let e=this.query(t,un.Scope.BLOCK&un.Scope.BLOT)!=null;e?r=t:i[t]=n}r===t.tableCellInner&&(i={...e},delete i[r]);let a=this.create(r||this.statics.defaultChild.blotName,r?e[r]:void 0);this.insertBefore(a,n||void 0);let o=a.length();a instanceof V&&o===0&&(o+=1);for(let[e,t]of Object.entries(i))a.formatAt(0,o,e,t);return a}},pn=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">\r
|
|
3
|
+
<!-- Icon from Tabler Icons by Paweł Kuna - https://github.com/tabler/tabler-icons/blob/master/LICENSE -->\r
|
|
4
|
+
<path\r
|
|
5
|
+
fill="none"\r
|
|
6
|
+
stroke="currentColor"\r
|
|
7
|
+
stroke-linecap="round"\r
|
|
8
|
+
stroke-linejoin="round"\r
|
|
9
|
+
stroke-width="2"\r
|
|
10
|
+
d="M7 3v18m3-15L7 3L4 6m16 12l-3 3l-3-3m3 3V3"\r
|
|
11
|
+
/>\r
|
|
12
|
+
</svg>\r
|
|
13
|
+
`;const mn=e.import(`parchment`),hn=e.import(`blots/inline`),gn=e.import(`blots/text`);var W=class extends on{static blotName=t.tableCaption;static tagName=`caption`;static className=`ql-table-caption`;static allowedChildren=[hn,gn];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,n={tableId:String(t),side:e.style.captionSide===`bottom`?`bottom`:`top`};return n}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=pn,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){let n=this.scroll.query(e,mn.Scope.BLOCK_BLOT);(!n||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()))}},G=class extends z{static blotName=t.tableCell;static tagName=`td`;static className=`ql-table-cell`;static allowDataAttrs=new Set([`table-id`,`row-id`,`col-id`,`empty-row`]);static allowAttrs=new Set([`rowspan`,`colspan`]);static allowStyle=new Set([`background-color`,`border`,`height`]);static isAllowStyle(e){let t=Jt(e);for(let e of this.allowStyle)if(t.startsWith(Jt(e)))return!0;return!1}static create(e){let{tableId:t,rowId:n,colId:r,rowspan:i,colspan:a,style:o,emptyRow:s}=e,c=super.create();c.dataset.tableId=t,c.dataset.rowId=n,c.dataset.colId=r,c.setAttribute(`rowspan`,String(B(i))),c.setAttribute(`colspan`,String(B(a))),o&&(c.style.cssText=o);try{s&&(c.dataset.emptyRow=JSON.stringify(s))}catch{}return c}static formats(e){let{tableId:t,rowId:n,colId:r,emptyRow:i}=e.dataset,a=Number(e.getAttribute(`rowspan`)),o=Number(e.getAttribute(`colspan`)),s={tableId:t,rowId:n,colId:r,rowspan:B(a),colspan:B(o)},c={};for(let t=0;t<e.style.length;t++){let n=e.style[t],r=e.style[n];this.isAllowStyle(String(n))&&![`initial`,`inherit`].includes(r)&&(c[n]=r)}let l=Object.entries(c);l.length>0&&(s.style=l.map(([e,t])=>`${e}: ${t}`).join(`;`));try{i&&(s.emptyRow=JSON.parse(i))}catch{}return s}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.domNode.style.cssText&&r&&r.statics.blotName===t.tableCellInner&&this.domNode.style.cssText!==r.domNode.dataset.style&&(r.domNode.dataset.style=this.domNode.style.cssText)}setStyleBoder(e,t){let n=t||null,r=![`left`,`right`,`top`,`bottom`].some(t=>e.includes(t))&&e.startsWith(`border-`);if(!r)return;let i=this.getNearByCell(`left`).map(e=>e.descendant(V,0)[0]).filter(Boolean);for(let t of i)t.setFormatValue(e.replace(`border-`,`border-right-`),n,!0);let a=this.getNearByCell(`top`).map(e=>e.descendant(V,0)[0]).filter(Boolean);for(let t of a)t.setFormatValue(e.replace(`border-`,`border-bottom-`),n,!0)}getNearByCell(e){let n=[];try{let e=d(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 H;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 H)||!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[]}}getColumnIndex(){let e=d(this,t.tableMain);return e.getColIds().indexOf(this.colId)}getCellInner(){return this.children.head}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 n=this.parent,{tableId:r,rowId:i}=this;if(n!==null&&n.statics.blotName!==t.tableRow&&this.wrap(t.tableRow,{tableId:r,rowId:i}),this.emptyRow.length>0)for(let e of this.emptyRow)this.parent.parent.insertBefore(this.scroll.create(t.tableRow,{tableId:this.tableId,rowId:e}),this.parent.next);super.optimize(e)}};const _n=e.import(`blots/block/embed`);var K=class extends _n{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`]),`${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=d(this,t.tableColgroup);r.align=this.align,this.next!=null&&this.checkMerge()&&this.next.remove(),super.optimize(e);try{let e=d(this,t.tableColgroup),n=!0;e.children.forEach(e=>{n&&=e.full}),e.full=n}catch{}}insertAt(e,n,r){if(r!=null){super.insertAt(e,n,r);return}try{let e=n.split(`
|
|
14
|
+
`),r=e.pop(),i=d(this,t.tableColgroup),a=i.next,o=this.scroll,s=i.split(this.offset(i));if(a){let e=a.descendants(V);if(e.length>0){let n=e[0],r=V.formats(n.domNode),a=this.scroll.create(t.tableCellInner,r),c=a.wrap(t.tableCell,r),l=c.wrap(t.tableRow,r),u=l.wrap(t.tableBody,r.tableId);i.parent.insertBefore(u,s),o=a}}for(let t of e){let e=this.scroll.create(`block`);e.insertAt(0,t),o.appendChild(e)}if(r){let e=this.scroll.create(`block`);e.appendChild(this.scroll.create(`text`,r)),o.appendChild(e)}}catch{console.warn(`TableCol not in TableColgroup`)}}},q=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)}getRows(){return Array.from(this.domNode.querySelectorAll(`${H.tagName}`)).map(e=>this.scroll.find(e)).filter(Boolean)}getRowIds(){return this.getRows().map(e=>e.rowId)}getCols(){return this.descendants(K)}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(V);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++){let r=n[t];r.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&&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.tableBody]:[]};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.tableBody][0],a=n&&this.children.head!==n,o=r&&n&&n.next!==r,s=r&&!n&&this.children.head!==r,c=i&&this.children.tail!==i;if(a||o||s||c){let e=this.clone();n&&e.appendChild(n),r&&e.appendChild(r),i&&e.appendChild(i),this.children.forEach(e=>e.remove()),e.moveChildren(this)}}},J=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 q&&(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 q))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 q))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 q&&!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=d(this,t.tableMain);o.align=a,super.optimize(e)}};const vn=e.import(`parchment`);var Y=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}deleteAt(e,t){super.deleteAt(e,t);let n=this.descendants(U),r=this.descendants(J);(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 vn.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 yn(e){let[t]=m(e,U);return t?{body:t,rect:t.domNode.getBoundingClientRect()}:{body:null,rect:null}}var bn=class{tableBlot;tableWrapperBlot;alignBox;cleanup;bem=u(`align`);resizeObserver=Ht(()=>this.update(),{ignoreFirstBind:!0});constructor(t,n,r){this.tableModule=t,this.table=n,this.quill=r,this.tableBlot=e.find(n),this.tableWrapperBlot=this.tableBlot.parent,this.alignBox=this.buildTool(),this.resizeObserver.observe(this.table),this.quill.on(e.events.TEXT_CHANGE,this.updateWhenTextChange),this.show()}updateWhenTextChange=()=>{this.update()};buildTool(){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[n,i]of Object.entries(r)){let r=document.createElement(`span`);r.dataset.align=n,r.classList.add(this.bem.be(`item`)),r.innerHTML=`<i class="icon">${i}</i>`,r.addEventListener(`click`,()=>{let t=r.dataset.align;t&&(this.setTableAlign(this.tableBlot,t),this.quill.once(e.events.SCROLL_OPTIMIZE,()=>{this.tableModule.tableSelection&&this.tableModule.tableSelection.hide(),this.tableModule.tableResize&&this.tableModule.tableResize.update(),this.tableModule.tableResizeScale&&this.tableModule.tableResizeScale.update(),this.tableModule.tableScrollbar&&this.tableModule.tableScrollbar.update()}))}),t.appendChild(r)}return this.cleanup||=Ot(this.tableWrapperBlot.domNode,t,()=>this.update()),t}setTableAlign(e,t){let n=e.getCols();for(let e of n)e.align=t}show(){this.alignBox&&(this.alignBox.classList.add(this.bem.bm(`active`)),this.update())}hide(){this.alignBox&&(this.alignBox.classList.remove(this.bem.bm(`active`)),this.cleanup&&(this.cleanup(),this.cleanup=void 0))}update(){if(this.alignBox){if(this.tableBlot.full||this.tableBlot.domNode.offsetWidth>=this.quill.root.offsetWidth){this.hide();return}Nt(this.tableWrapperBlot.domNode,this.alignBox,{placement:`top`,middleware:[jt(),At({limiter:Mt()}),kt(16)]}).then(({x:e,y:t})=>{Object.assign(this.alignBox.style,{left:`${e}px`,top:`${t}px`})})}}destroy(){this.hide(),this.resizeObserver.disconnect(),this.quill.off(e.events.TEXT_CHANGE,this.updateWhenTextChange),this.alignBox&&(this.alignBox.remove(),this.alignBox=void 0)}};const xn=e.import(`delta`),Sn=e.import(`modules/clipboard`);function Cn(e){let t=Number.parseFloat(e.getAttribute(`width`)||String(n.colDefaultWidth));if(Number.isNaN(t)){let n=e.style.width;t=n?Number.parseFloat(n):e.offsetWidth}return t}function wn(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`));for(let[e,i]of n.entries())if(e<t){let t=Cn(i);r[e]=t||r[e]}else break}return r}var Tn=class extends Sn{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(`tbody`,this.matchTbody.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))}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(!T(s)&&o&&!o[t.tableCellInner]&&!o[t.tableCaption]){n.ops.splice(e,1),--e;continue}let{table:c,[t.tableCell]:l,...u}=o||{},d=T(s)&&s[t.tableCol];d?i.push({insert:s}):r.push({attributes:u,insert:s}),!u?.[t.tableCellInner]&&!u?.[t.tableCaption]&&!d&&w(s)&&s.trim().length>0&&(a=e)}let o=wn(e,this.colIds.length),s=o.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),[]);return r.splice(a+1,0,...s),this.tableId=R(),this.colIds=[],this.rowspanCount=[],this.cellCount=0,this.colCount=0,new xn(r)}matchTbody(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=Gt(n||``);a.backgroundColor||(a.backgroundColor=r,e.attributes[t.tableCellInner]={...i,style:Kt(a)})}}let i=[];for(let e=n.ops.length-1;e>=0;e--){let r=n.ops[e];r.attributes&&(r.attributes[t.tableCellInner]?r.attributes[t.tableCellInner].rowspan===1?i=[]:i.length>0&&(r.attributes[t.tableCellInner].emptyRow||(r.attributes[t.tableCellInner].emptyRow=[]),r.attributes[t.tableCellInner].emptyRow.push(...i)):(i=[],i.push(R())))}return n}matchColgroup(e,n){let r=[];for(let e=0;e<n.ops.length;e++){let i=n.ops[e];i&&T(i.insert)&&i.insert[t.tableCol]&&r.push(i)}return new xn(r)}matchCol(e,n){let r=Number(e.getAttribute(`span`)||1);Number.isNaN(r)&&(r=1);let i=new xn;for(let n=0;n<r;n++)this.colIds[this.colCount]=R(),i.insert({[t.tableCol]:Object.assign(K.value(e),{tableId:this.tableId,colId:this.colIds[this.colCount]})}),this.colCount+=1;return i}matchTr(e,n){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});for(let e of n.ops)if(e.attributes){let{background:n,[t.tableCellInner]:r}=e.attributes;if(r&&n){let{style:i=``}=r,a=Gt(i);a.backgroundColor=n,e.attributes[t.tableCellInner].style=Kt(a)}}return n}matchTd(e,n){let r=e,i=G.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||!w(s[s.length-1].insert)||!s[s.length-1].insert.endsWith(`
|
|
15
|
+
`))&&s.push({insert:`
|
|
16
|
+
`,attributes:{[t.tableCellInner]:o}}),new xn(s)}matchTdAttributor(e,n){let r=e;if(r.tagName.toLocaleLowerCase()===`td`){let e=[];for(let r of n.ops){let{attributes:n,...i}=r,a=n?.[t.tableCellInner];if(n&&a&&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 xn(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(T(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=0;e<n.ops.length;e++){let r=n.ops[e],{attributes:i}=r;i&&i[t.tableCaption]&&(i[t.tableCaption].tableId=this.tableId,r.attributes=i)}return n}},En=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
17
|
+
<!-- Icon from Tabler Icons by Paweł Kuna - https://github.com/tabler/tabler-icons/blob/master/LICENSE -->
|
|
18
|
+
<path
|
|
19
|
+
fill="none"
|
|
20
|
+
stroke="currentColor"
|
|
21
|
+
stroke-linecap="round"
|
|
22
|
+
stroke-linejoin="round"
|
|
23
|
+
stroke-width="2"
|
|
24
|
+
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"
|
|
25
|
+
/>
|
|
26
|
+
</svg>
|
|
27
|
+
`,Dn=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
28
|
+
<path
|
|
29
|
+
fill="none"
|
|
30
|
+
stroke="currentColor"
|
|
31
|
+
stroke-linecap="round"
|
|
32
|
+
stroke-linejoin="round"
|
|
33
|
+
stroke-width="2"
|
|
34
|
+
d="m4 8l4-4m6 0L4 14m0 6L20 4m0 6L10 20m10-4l-4 4"
|
|
35
|
+
/>
|
|
36
|
+
</svg>
|
|
37
|
+
`,On=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
38
|
+
<path
|
|
39
|
+
fill="none"
|
|
40
|
+
stroke="currentColor"
|
|
41
|
+
stroke-linecap="round"
|
|
42
|
+
stroke-linejoin="round"
|
|
43
|
+
stroke-width="1.5"
|
|
44
|
+
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"
|
|
45
|
+
/>
|
|
46
|
+
</svg>
|
|
47
|
+
`,kn=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 256">
|
|
48
|
+
<g fill="currentColor">
|
|
49
|
+
<path d="M216 40v128h-48V88H88V40Z" opacity=".2" />
|
|
50
|
+
<path
|
|
51
|
+
d="M216 32H88a8 8 0 0 0-8 8v40H40a8 8 0 0 0-8 8v128a8 8 0 0 0 8 8h128a8 8 0 0 0 8-8v-40h40a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8m-56 176H48V96h112Zm48-48h-32V88a8 8 0 0 0-8-8H96V48h112Z"
|
|
52
|
+
/>
|
|
53
|
+
</g>
|
|
54
|
+
</svg>
|
|
55
|
+
`,An=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 32 32">
|
|
56
|
+
<path
|
|
57
|
+
fill="currentColor"
|
|
58
|
+
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"
|
|
59
|
+
/>
|
|
60
|
+
<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" />
|
|
61
|
+
</svg>
|
|
62
|
+
`,jn=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
63
|
+
<path
|
|
64
|
+
fill="currentColor"
|
|
65
|
+
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"
|
|
66
|
+
/>
|
|
67
|
+
</svg>
|
|
68
|
+
`,Mn=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
69
|
+
<path
|
|
70
|
+
fill="currentColor"
|
|
71
|
+
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"
|
|
72
|
+
/>
|
|
73
|
+
</svg>
|
|
74
|
+
`,Nn=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
75
|
+
<path
|
|
76
|
+
fill="currentColor"
|
|
77
|
+
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"
|
|
78
|
+
/>
|
|
79
|
+
</svg>
|
|
80
|
+
`,Pn=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
81
|
+
<path
|
|
82
|
+
fill="currentColor"
|
|
83
|
+
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"
|
|
84
|
+
/>
|
|
85
|
+
</svg>
|
|
86
|
+
`,Fn=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
87
|
+
<path
|
|
88
|
+
fill="currentColor"
|
|
89
|
+
d="M5 10H3V4h8v2H5zm14 8h-6v2h8v-6h-2zM5 18v-4H3v6h8v-2zM21 4h-8v2h6v4h2zM8 13v2l3-3l-3-3v2H3v2zm8-2V9l-3 3l3 3v-2h5v-2z"
|
|
90
|
+
/>
|
|
91
|
+
</svg>
|
|
92
|
+
`,In=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
93
|
+
<path
|
|
94
|
+
fill="currentColor"
|
|
95
|
+
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"
|
|
96
|
+
/>
|
|
97
|
+
</svg>
|
|
98
|
+
`,Ln=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
99
|
+
<path
|
|
100
|
+
fill="currentColor"
|
|
101
|
+
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"
|
|
102
|
+
/>
|
|
103
|
+
</svg>
|
|
104
|
+
`,Rn=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
105
|
+
<path
|
|
106
|
+
fill="currentColor"
|
|
107
|
+
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"
|
|
108
|
+
/>
|
|
109
|
+
</svg>
|
|
110
|
+
`,zn=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
111
|
+
<path
|
|
112
|
+
fill="currentColor"
|
|
113
|
+
d="M19 14h2v6H3v-6h2v4h14zM3 4v6h2V6h14v4h2V4zm8 7v2H8v2l-3-3l3-3v2zm5 0V9l3 3l-3 3v-2h-3v-2z"
|
|
114
|
+
/>
|
|
115
|
+
</svg>
|
|
116
|
+
`,Bn=`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
|
|
117
|
+
<!-- Icon from TDesign Icons by TDesign - https://github.com/Tencent/tdesign-icons/blob/main/LICENSE -->
|
|
118
|
+
<path fill="currentColor" d="M21 10v12h-2V12H5v10H3V10zm0-8v6H3V2zm-2 2H5v2h14z" />
|
|
119
|
+
</svg>
|
|
120
|
+
`;const Vn=`color-selector`,X={Break:{name:`break`},CopyCell:{name:`CopyCell`,tip:`Copy cell`,icon:kn,handle:(e,t)=>{let n=e.getTextByCell(t),r=e.getHTMLByCell(t),i=new ClipboardItem({"text/plain":new Blob([n],{type:`text/plain`}),"text/html":new Blob([r],{type:`text/html`})});navigator.clipboard.write([i]),e.hideTableTools()}},CutCell:{name:`CutCell`,tip:`Cut cell`,icon:An,handle:(e,t)=>{let n=e.getTextByCell(t),r=e.getHTMLByCell(t,!0),i=new ClipboardItem({"text/plain":new Blob([n],{type:`text/plain`}),"text/html":new Blob([r],{type:`text/html`})});navigator.clipboard.write([i]),e.hideTableTools()}},InsertTop:{name:`InsertTop`,icon:Pn,tip:`Insert row above`,handle:(e,t)=>{e.appendRow(t,!1),e.hideTableTools()}},InsertRight:{name:`InsertRight`,icon:Nn,tip:`Insert column right`,handle:(e,t)=>{e.appendCol(t,!0),e.hideTableTools()}},InsertBottom:{name:`InsertBottom`,icon:jn,tip:`Insert row below`,handle:(e,t)=>{e.appendRow(t,!0),e.hideTableTools()}},InsertLeft:{name:`InsertLeft`,icon:Mn,tip:`Insert column Left`,handle:(e,t)=>{e.appendCol(t,!1),e.hideTableTools()}},MergeCell:{name:`MergeCell`,icon:Fn,tip:`Merge Cell`,handle:(e,t)=>{e.mergeCells(t),e.hideTableTools()}},SplitCell:{name:`SplitCell`,icon:zn,tip:`Split Cell`,handle:(e,t)=>{e.splitCell(t),e.hideTableTools()}},DeleteRow:{name:`DeleteRow`,icon:Ln,tip:`Delete Row`,handle:(e,t)=>{e.removeRow(t),e.hideTableTools()}},DeleteColumn:{name:`DeleteColumn`,icon:In,tip:`Delete Column`,handle:(e,t)=>{e.removeCol(t),e.hideTableTools()}},DeleteTable:{name:`DeleteTable`,icon:Rn,tip:`Delete table`,handle:(e,t)=>{e.deleteTable(t)}},BackgroundColor:{name:`BackgroundColor`,icon:Dn,isColorChoose:!0,tip:`Set background color`,key:`background-color`,handle:(e,t,n)=>{e.setCellAttrs(t,`background-color`,n,!0)}},BorderColor:{name:`BorderColor`,icon:On,isColorChoose:!0,tip:`Set border color`,key:`border-color`,handle:(e,t,n)=>{e.setCellAttrs(t,`border-color`,n,!0)}},SwitchWidth:{name:`SwitchWidth`,icon:En,tip:`Switch table width`,handle:t=>{if(!t.table)return;let n=e.find(t.table);n&&(n.full?n.cancelFull():n.setFull())}},InsertCaption:{name:`InsertCaption`,icon:Bn,tip:`Insert table caption`,handle(n){if(!n.table)return;let r=e.find(n.table);if(!r)return;let i=n.quill.scroll.create(`text`,`Table Caption`).wrap(t.tableCaption,{tableId:r.tableId});r.insertBefore(i,r.children.head)}}},Hn=10,Un=u(`color-map`),Z={selectWrapper:Un.b(),used:Un.bm(`used`),item:Un.be(`item`),btn:Un.be(`btn`),map:Un.be(`content`),mapRow:Un.be(`content-row`)};var Wn=class{usedColors=new Set;options;menu=null;isMenuDisplay=!1;isColorPicking=!1;updateUsedColor;tooltipItem=[];activeTooltip=null;bem=u(`menu`);colorItemClass=`color-${R()}`;colorChooseTooltipOption={direction:`top`};constructor(t,n,r){this.tableModule=t,this.quill=n,this.options=this.resolveOptions(r);try{let e=localStorage.getItem(this.options.localstorageKey)||`[]`,t=JSON.parse(e);C(t)||(t=[]),t.slice(-1*Hn).map(e=>this.usedColors.add(e))}catch{}this.updateUsedColor=Yt(e=>{if(!e)return;if(this.usedColors.add(e),this.usedColors.size>Hn){let e=Array.from(this.usedColors).slice(-1*Hn);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);let r=Array.from(n.querySelectorAll(`.${Z.item}[style*="background-color: ${t.style.backgroundColor}"]`));r.length<=0&&n.appendChild(t);let i=Array.from(n.querySelectorAll(`.${Z.item}`)).slice(0,-1*Hn);for(let e of i)e.remove()}},1e3),this.quill.on(e.events.TEXT_CHANGE,this.updateWhenTextChange)}updateWhenTextChange=()=>{this.isMenuDisplay&&this.update()};resolveOptions(e){let t=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);return t}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`),S(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(Vn)}else S(i)&&c.addEventListener(`click`,e=>{this.quill.focus(),i(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 i=document.createElement(`div`);i.classList.add(Z.mapRow),Object.assign(i.style,{marginTop:`4px`});let a=document.createElement(`div`);a.classList.add(Z.btn,`transparent`),a.textContent=this.tableModule.options.texts.transparent,a.addEventListener(`click`,()=>{t(this.tableModule,this.getSelectedTds(),`transparent`)});let o=document.createElement(`div`);o.classList.add(Z.btn,`clear`),o.textContent=this.tableModule.options.texts.clear,o.addEventListener(`click`,()=>{t(this.tableModule,this.getSelectedTds(),null)});let s=document.createElement(`div`);s.classList.add(Z.btn,`custom`),s.textContent=this.tableModule.options.texts.custom;let c=oe({onChange:e=>{t(this.tableModule,this.getSelectedTds(),e),this.updateUsedColor(e)}}),{hide:l,destroy:u}=Lt(s,{direction:`right`,type:`click`,content:c,container:s});i.appendChild(a),i.appendChild(o),i.appendChild(s),r.appendChild(i);let d=document.createElement(`div`);d.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,d.appendChild(t)}r.appendChild(d),r.addEventListener(`click`,e=>{e.stopPropagation(),l();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 f=Lt(e,{type:`click`,content:r,onOpen:()=>(this.isMenuDisplay&&this.tableModule.tableSelection&&this.tableModule.tableSelection.hideDisplay(),this.setActiveTooltip(f),!1),onClose:()=>{this.isMenuDisplay&&this.tableModule.tableSelection&&(this.tableModule.tableSelection.updateWithSelectedTds(),this.tableModule.tableSelection.showDisplay());let e=r.contains(c);return e&&l(),this.activeTooltip===f&&(this.activeTooltip=null),!1},onDestroy:()=>{u(),this.activeTooltip===f&&(this.activeTooltip=null)},...this.colorChooseTooltipOption});return f.isColorPick=!0,f}setActiveTooltip(e){this.activeTooltip&&this.activeTooltip!==e&&this.activeTooltip.hide(!0),this.activeTooltip=e}getSelectedTds(){return this.tableModule.tableSelection?.selectedTds||[]}createTipText(e,t){let n=Lt(e,{msg:t});n&&this.tooltipItem.push(n)}show(){!this.menu||!this.tableModule.tableSelection||!this.tableModule.tableSelection.boundary||(Object.assign(this.menu.style,{display:`flex`}),this.isMenuDisplay=!0,this.update())}update(){}hide(){this.menu&&Object.assign(this.menu.style,{display:`none`});for(let e of this.tooltipItem)e.hide(!0);this.isMenuDisplay=!1}destroy(){this.quill.off(e.events.TEXT_CHANGE,this.updateWhenTextChange),this.activeTooltip=null;for(let e of this.tooltipItem)e.destroy();this.menu&&(this.hide(),this.menu.remove(),this.menu=null)}},Gn=class extends Wn{colorChooseTooltipOption={direction:`right`};constructor(e,t,n){super(e,t,n),this.tableModule=e,this.quill=t,this.quill.root.addEventListener(`contextmenu`,this.listenContextmenu)}listenContextmenu=e=>{e.preventDefault();let t=e.composedPath();if(!t||t.length<=0)return;let n=t.find(e=>e.tagName&&e.tagName.toUpperCase()===`TABLE`&&e.classList.contains(`ql-table`));n&&this.tableModule.tableSelection?.selectedTds?.length?(this.menu||=this.buildTools(),Object.assign(this.menu.style,{display:`flex`}),this.isMenuDisplay=!0,this.update({x:e.clientX,y:e.clientY}),document.addEventListener(`click`,()=>{this.hide()},{once:!0})):this.hide()};buildTools(){let e=super.buildTools();e.classList.add(this.bem.is(`contextmenu`));let t=e.getElementsByClassName(Vn);for(let e of Array.from(t))e.addEventListener(`click`,e=>e.stopPropagation());return document.body.appendChild(e),e}createTipText(e,t){let n=document.createElement(`span`);n.textContent=t,e.appendChild(n)}show(){}update(e){if(!this.isMenuDisplay||!this.menu||!this.tableModule.tableSelection||!this.tableModule.tableSelection.isDisplaySelection||!e)return;super.update();let t={display:`flex`,left:0,top:0},{x:n,y:r}=e;t.left=n,t.top=r,Object.assign(this.menu.style,{...t,left:`${t.left+window.scrollX}px`,top:`${t.top+window.scrollY}px`});let i=this.menu.getBoundingClientRect(),{left:a,top:o}=Vt(i);Object.assign(this.menu.style,{left:`${a+window.scrollX}px`,top:`${o+window.scrollY}px`})}destroy(){this.quill.root.removeEventListener(`contextmenu`,this.listenContextmenu),super.destroy()}},Kn=class extends Wn{constructor(e,t,n){super(e,t,n),this.tableModule=e,this.quill=t,this.menu=this.buildTools(),this.tableModule.addContainer(this.menu),this.show(),this.update()}update(){!this.isMenuDisplay||!this.menu||!this.tableModule.tableSelection||!this.tableModule.tableSelection.isDisplaySelection||(super.update(),Nt(this.tableModule.tableSelection.cellSelect,this.menu,{placement:`bottom`,middleware:[jt(),At({limiter:Mt()}),kt(20)]}).then(({x:e,y:t})=>{Object.assign(this.menu.style,{left:`${e}px`,top:`${t}px`})}))}};const Q=e=>!e.full&&e.align===`right`;var qn=class{colIndex=-1;tableMain;dragging=!1;dragColBreak=null;handleColMouseUpFunc=this.handleColMouseUp.bind(this);handleColMouseMoveFunc=this.handleColMouseMove.bind(this);handleColMouseDownFunc=this.handleColMouseDown.bind(this);rowIndex=-1;dragRowBreak=null;handleRowMouseUpFunc=this.handleRowMouseUp.bind(this);handleRowMouseMoveFunc=this.handleRowMouseMove.bind(this);handleRowMouseDownFunc=this.handleRowMouseDown.bind(this);dragBEM=u(`drag-line`);constructor(e,t){this.tableModule=e,this.quill=t}findCurrentColIndex(e){return-1}colWidthChange(e,t,n){}async createConfirmDialog({message:e,confirm:t,cancel:n}){return new Promise(r=>{let i=document.createElement(`div`);Object.assign(i.style,{padding:`8px 12px`,fontSize:`14px`,lineHeight:`1.5`});let a=document.createElement(`p`);a.textContent=e;let o=document.createElement(`div`);Object.assign(o.style,{display:`flex`,justifyContent:`flex-end`,gap:`6px`});let s=ae({content:n}),c=ae({type:`confirm`,content:t});o.appendChild(s),o.appendChild(c),i.appendChild(a),i.appendChild(o);let{close:l}=ce({child:i});s.addEventListener(`click`,()=>{r(!1),l()}),c.addEventListener(`click`,()=>{r(!0),l()})})}async handleColMouseUp(){if(!this.dragColBreak||!this.tableMain||this.colIndex===-1)return;let e=this.tableMain.getCols(),t=Number.parseInt(this.dragColBreak.dataset.w||`0`),i=this.tableMain.full,a=!1,o=[];if(i){let r=this.tableMain.domNode.getBoundingClientRect().width,i=t/r*100,s=e[this.colIndex].width;if(i<s){if(i=Math.max(n.colMinWidthPre,i),e[this.colIndex+1]||e[this.colIndex-1]){let t=e[this.colIndex+1]?this.colIndex+1:this.colIndex-1;o.push({index:t,width:e[t].width+s-i})}else i=100;a=!0,o.push({index:this.colIndex,width:i})}else if(e[this.colIndex+1]){let t=s+e[this.colIndex+1].width;i=Math.min(t-n.colMinWidthPre,i),a=!0,o.push({index:this.colIndex,width:i},{index:this.colIndex+1,width:t-i})}}else this.tableMain.domNode.style.width=`${Number.parseFloat(this.tableMain.domNode.style.width)-e[this.colIndex].domNode.getBoundingClientRect().width+t}px`,a=!0,o.push({index:this.colIndex,width:t});if(document.body.removeChild(this.dragColBreak),this.dragColBreak=null,document.removeEventListener(`mouseup`,this.handleColMouseUpFunc),document.removeEventListener(`mousemove`,this.handleColMouseMoveFunc),this.dragging=!1,a){let t=this.tableMain.domNode.getBoundingClientRect().width;if(i){let n=0,r=new Set(o.map(({index:e,width:t})=>(n+=t,e)));for(let[t,i]of e.entries()){if(r.has(t))continue;n+=i.width}if(n>100){if(!await this.createConfirmDialog({message:this.tableModule.options.texts.perWidthInsufficient,confirm:this.tableModule.options.texts.confirmText,cancel:this.tableModule.options.texts.cancelText}))return;this.tableMain.cancelFull(),i=!1;for(let[e,n]of o.entries()){let{width:r,index:i}=n;o[e]={index:i,width:r/100*t}}}}for(let{index:n,width:r}of o)e[n].width=`${Math.round(r)}${i?`%`:`px`}`,this.colWidthChange(n,{px:Math.round(r/100*t),pre:Math.round(r)},i)}this.quill.emitter.emit(r.AFTER_TABLE_RESIZE)}getColumnRect(e){if(!this.tableMain)return null;let t=this.tableMain.getCols();if(e>=t.length)return null;let n=t[0].domNode.getBoundingClientRect().left;for(let r=0;r<e;r++){let e=t[r].domNode.getBoundingClientRect();n+=e.width}let r=t[e],i=r.domNode.getBoundingClientRect().width;return{left:n,right:n+i,width:i}}handleColMouseMove(e){if(e.preventDefault(),!this.dragColBreak||!this.tableMain||this.colIndex===-1)return;let t=this.tableMain.getCols(),r=this.getColumnRect(this.colIndex),i=this.tableMain.domNode.getBoundingClientRect(),a=e.clientX;if(this.tableMain.full){let e=n.colMinWidthPre/100*i.width,o=i.right;a>r.right&&t[this.colIndex+1]&&(o=Math.max(this.getColumnRect(this.colIndex+1).right-e,r.left+e));let s=r.left+e;a=Math.min(Math.max(a,s),o)}else Q(this.tableMain)?r.right-a<n.colMinWidthPx&&(a=r.right-n.colMinWidthPx):a-r.left<n.colMinWidthPx&&(a=r.left+n.colMinWidthPx);let o=a-r.left;return Q(this.tableMain)&&(o=r.right-a),this.dragColBreak.style.left=`${a}px`,this.dragColBreak.dataset.w=String(o),{left:a,width:o}}handleColMouseDown(e){if(e.button!==0||(e.preventDefault(),!this.tableMain))return;let{rect:t,body:n}=yn(this.tableMain);if(!n||!t)return;let r=this.tableMain.getCols();if(this.colIndex=this.findCurrentColIndex(e),this.colIndex===-1)return;let i=r[this.colIndex].width,a=this.tableMain.full?i/100*t.width:i;document.addEventListener(`mouseup`,this.handleColMouseUpFunc),document.addEventListener(`mousemove`,this.handleColMouseMoveFunc),this.dragging=!0;let o=document.createElement(`div`);o.classList.add(this.dragBEM.b()),o.classList.add(this.dragBEM.is(`col`)),o.dataset.w=String(a);let s={top:t.y,left:e.clientX,height:t.height};Object.assign(o.style,{top:`${s.top}px`,left:`${s.left}px`,height:`${s.height}px`});let c=document.body;return c.appendChild(o),this.dragColBreak&&c.removeChild(this.dragColBreak),this.dragColBreak=o,s}findCurrentRowIndex(e){return-1}rowHeightChange(e,t){}handleRowMouseUp(){if(!this.tableMain||!this.dragRowBreak||this.rowIndex===-1)return;let e=Number.parseInt(this.dragRowBreak.dataset.h||`0`),t=this.tableMain.getRows();t[this.rowIndex].setHeight(`${e}px`),this.rowHeightChange(this.rowIndex,e),document.body.removeChild(this.dragRowBreak),this.dragRowBreak=null,document.removeEventListener(`mouseup`,this.handleRowMouseUpFunc),document.removeEventListener(`mousemove`,this.handleRowMouseMoveFunc),this.dragging=!1,this.quill.emitter.emit(r.AFTER_TABLE_RESIZE)}handleRowMouseMove(e){if(!this.tableMain||!this.dragRowBreak||this.rowIndex===-1)return;e.preventDefault();let t=this.tableMain.getRows(),r=t[this.rowIndex].domNode.getBoundingClientRect(),i=e.clientY;return i-r.y<n.rowMinHeightPx&&(i=r.y+n.rowMinHeightPx),this.dragRowBreak.style.top=`${i}px`,this.dragRowBreak.dataset.h=String(i-r.y),{top:i,height:i-r.y}}handleRowMouseDown(e){if(e.button!==0||(e.preventDefault(),!this.tableMain)||(this.rowIndex=this.findCurrentRowIndex(e),this.rowIndex===-1))return;this.dragging=!0,document.addEventListener(`mouseup`,this.handleRowMouseUpFunc),document.addEventListener(`mousemove`,this.handleRowMouseMoveFunc);let t=this.tableMain.getRows(),n=t[this.rowIndex].domNode.getBoundingClientRect().height,r=this.tableMain.domNode.getBoundingClientRect(),i=document.createElement(`div`);i.classList.add(this.dragBEM.b()),i.classList.add(this.dragBEM.is(`row`)),i.dataset.h=String(n);let a={top:e.clientY,left:r.x,width:r.width};Object.assign(i.style,{top:`${a.top}px`,left:`${a.left}px`,width:`${a.width}px`});let o=document.body;return o.appendChild(i),this.dragRowBreak&&o.removeChild(this.dragRowBreak),this.dragRowBreak=i,a}update(){}destroy(){}},Jn=class extends qn{root;tableMain;tableWrapper;resizeObserver;tableCols=[];tableRows=[];rowHeadWrapper=null;colHeadWrapper=null;corner=null;scrollHandler=[];lastHeaderSelect=null;size=12;bem=u(`resize-box`);constructor(t,n,r){super(t,r),this.tableModule=t,this.table=n,this.tableMain=e.find(this.table),this.tableMain&&(this.tableWrapper=this.tableMain.parent,this.tableWrapper&&(this.root=this.tableModule.addContainer(this.bem.b()),this.resizeObserver=new ResizeObserver(()=>{this.show()}),this.resizeObserver.observe(this.table),this.quill.on(e.events.TEXT_CHANGE,this.updateWhenTextChange)))}updateWhenTextChange=()=>{this.update()};handleResizerHeader(e,t,n){let{clientX:r,clientY:i}=n,a=this.table.getBoundingClientRect();if(this.tableModule.tableSelection){let o=this.tableModule.tableSelection;n.shiftKey||(this.lastHeaderSelect=null);let s=[{x:e?a.left:r,y:e?i:a.top},{x:e?a.right:r,y:e?i:a.bottom}];if(this.lastHeaderSelect){let t,n;if(this.lastHeaderSelect.isX){let e=Array.from(this.root.getElementsByClassName(this.bem.be(`row-header`))),r=e[this.lastHeaderSelect.index].getBoundingClientRect();t=Math.min(r.left,a.left),n=r.top+r.height/2}else{let e=Array.from(this.root.getElementsByClassName(this.bem.be(`col-header`))),r=e[this.lastHeaderSelect.index].getBoundingClientRect();t=r.left+r.width/2,n=Math.min(r.top,a.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};o.table=this.table,o.selectedTds=o.computeSelectedTds(...s),o.show()}}findCurrentColIndex(e){return Array.from(this.root.getElementsByClassName(this.bem.be(`col-separator`))).indexOf(e.target)}colWidthChange(e,t,n){let r=Array.from(this.root.getElementsByClassName(this.bem.be(`col-header`)));r[e].style.width=n?`${t.pre}%`:`${t.px}px`}handleColMouseDownFunc=function(e){let t=this.handleColMouseDown(e);if(t&&this.dragColBreak){let[e]=m(this.tableMain,W),n=e&&e.side===`top`?0:this.size;Object.assign(this.dragColBreak.style,{top:`${t.top-n}px`,left:`${t.left}px`,height:`${t.height+this.size}px`})}return t}.bind(this);bindColEvents(){let e=Array.from(this.root.getElementsByClassName(this.bem.be(`col-header`))),t=Array.from(this.root.getElementsByClassName(this.bem.be(`col-separator`)));L.call(this,this.tableWrapper.domNode,()=>{this.colHeadWrapper.scrollLeft=this.tableWrapper.domNode.scrollLeft});for(let[t,n]of e.entries())n.addEventListener(`click`,this.handleResizerHeader.bind(this,!1,t));for(let e of t)e.addEventListener(`mousedown`,this.handleColMouseDownFunc),e.addEventListener(`dragstart`,e=>e.preventDefault())}findCurrentRowIndex(e){return Array.from(this.root.getElementsByClassName(this.bem.be(`row-separator`))).indexOf(e.target)}rowHeightChange(e,t){let n=Array.from(this.root.getElementsByClassName(this.bem.be(`row-header`)));n[e].style.height=`${t}px`}handleRowMouseDownFunc=function(e){let t=this.handleRowMouseDown(e);return t&&this.dragRowBreak&&Object.assign(this.dragRowBreak.style,{top:`${t.top}px`,left:`${t.left-this.size}px`,width:`${t.width+this.size}px`}),t}.bind(this);bindRowEvents(){let e=Array.from(this.root.getElementsByClassName(this.bem.be(`row-header`))),t=Array.from(this.root.getElementsByClassName(this.bem.be(`row-separator`)));L.call(this,this.tableWrapper.domNode,()=>{this.rowHeadWrapper.scrollTop=this.tableWrapper.domNode.scrollTop});for(let[t,n]of e.entries())n.addEventListener(`click`,this.handleResizerHeader.bind(this,!0,t));for(let e of t)e.addEventListener(`mousedown`,this.handleRowMouseDownFunc),e.addEventListener(`dragstart`,e=>e.preventDefault())}update(){let{rect:e,body:t}=yn(this.tableMain);if(!t||!e)return;let n=this.tableWrapper.domNode.getBoundingClientRect(),r=this.quill.root.getBoundingClientRect();Object.assign(this.root.style,{top:`${Math.max(e.y,n.y)-r.y}px`,left:`${Math.max(e.x,n.x)-r.x}px`});let i=-1*this.size,a=-1*this.size;Q(this.tableMain)?(this.root.classList.add(this.bem.is(`align-right`)),i=Math.min(n.width,e.width),a=Math.min(n.width,e.width)):this.root.classList.remove(this.bem.is(`align-right`));let[o]=m(this.tableMain,W),s=!o||!(o&&o.side===`top`);s?this.root.classList.remove(this.bem.is(`caption-bottom`)):this.root.classList.add(this.bem.is(`caption-bottom`)),this.corner&&Object.assign(this.corner.style,{transform:`translateY(${-1*this.size}px) translateX(${i}px)`,top:`${s?0:e.height+this.size}px`}),this.rowHeadWrapper&&Object.assign(this.rowHeadWrapper.style,{transform:`translateX(${a}px)`}),this.colHeadWrapper&&Object.assign(this.colHeadWrapper.style,{top:`${s?0:e.height+this.size}px`})}show(){this.tableCols=this.tableMain.getCols(),this.tableRows=this.tableMain.getRows(),this.root.innerHTML=``;let{rect:e,body:t}=yn(this.tableMain);if(!t||!e)return;let n=this.tableWrapper.domNode.getBoundingClientRect();if(this.tableCols.length>0&&this.tableRows.length>0&&(this.corner=document.createElement(`div`),this.corner.classList.add(this.bem.be(`corner`)),Object.assign(this.corner.style,{width:`${this.size}px`,height:`${this.size}px`}),this.corner.addEventListener(`click`,()=>{if(this.tableModule.tableSelection){let e=this.tableMain.descendants(V),t=this.tableModule.tableSelection;t.selectedTds=e,t.show(),t.updateWithSelectedTds()}}),this.root.appendChild(this.corner)),this.tableCols.length>0){let t=``;for(let[,n]of this.tableCols.entries()){let r=n.domNode.getBoundingClientRect().width;t+=`<div class="${this.bem.be(`col-header`)}" style="width: ${r}px">
|
|
121
|
+
<div class="${this.bem.be(`col-separator`)}" style="height: ${e.height+this.size-3}px"></div>
|
|
122
|
+
</div>`}let r=document.createElement(`div`);r.classList.add(this.bem.be(`col`));let i=document.createElement(`div`);i.classList.add(this.bem.be(`col-wrapper`)),Object.assign(r.style,{transform:`translateY(-${this.size}px)`,maxWidth:`${n.width}px`,height:`${this.size}px`}),Object.assign(i.style,{width:`${e.width}px`}),i.innerHTML=t,r.appendChild(i),this.root.appendChild(r),r.scrollLeft=this.tableWrapper.domNode.scrollLeft,this.colHeadWrapper=r,this.bindColEvents()}if(this.tableRows.length>0){let t=``;for(let[,n]of this.tableRows.entries()){let r=`${n.domNode.getBoundingClientRect().height}px`;t+=`<div class="${this.bem.be(`row-header`)}" style="height: ${Number.parseFloat(r)}px">
|
|
123
|
+
<div class="${this.bem.be(`row-separator`)}" style="width: ${e.width+this.size-3}px"></div>
|
|
124
|
+
</div>`}let r=document.createElement(`div`);r.classList.add(this.bem.be(`row`));let i=document.createElement(`div`);i.classList.add(this.bem.be(`row-wrapper`)),Object.assign(r.style,{transform:`translateX(-${this.size}px)`,width:`${this.size}px`,maxHeight:`${n.height}px`}),Object.assign(i.style,{height:`${e.height}px`}),i.innerHTML=t,r.appendChild(i),this.root.appendChild(r),r.scrollTop=this.tableWrapper.domNode.scrollTop,this.rowHeadWrapper=r,this.bindRowEvents()}this.update(),L.call(this,this.quill.root,()=>{this.update()})}hide(){this.root.classList.add(this.bem.is(`hidden`))}destroy(){this.hide(),Ut.call(this),this.resizeObserver.disconnect(),this.quill.off(e.events.TEXT_CHANGE,this.updateWhenTextChange);for(let[e,t]of this.scrollHandler)e.removeEventListener(`scroll`,t);this.root.remove()}},Yn=class extends qn{colResizer;rowResizer;currentTableCell;dragging=!1;curColIndex=-1;curRowIndex=-1;tableCellBlot;bem=u(`resize-line`);constructor(t,n,r){super(t,r),this.tableModule=t,this.table=n,this.colResizer=this.tableModule.addContainer(this.bem.be(`col`)),this.rowResizer=this.tableModule.addContainer(this.bem.be(`row`)),this.table.addEventListener(`mousemove`,this.mousemoveHandler),this.quill.on(e.events.TEXT_CHANGE,this.hideWhenTextChange)}mousemoveHandler=n=>{if(this.dragging||this.tableModule.tableSelection&&this.tableModule.tableSelection.dragging)return;let r=this.findTableCell(n);if(!r)return this.hide();let i=e.find(r);i&&this.currentTableCell!==r&&(this.show(),this.currentTableCell=r,this.tableCellBlot=i,this.tableMain=d(i,t.tableMain),this.tableMain.getCols().length>0&&this.updateColResizer(),this.updateRowResizer())};hideWhenTextChange=()=>{this.hide()};findTableCell(e){for(let t of e.composedPath()){if(t instanceof HTMLElement&&t.tagName===`TD`)return t;if(t===document.body)return null}return null}findCurrentColIndex(){return this.curColIndex+(this.tableCellBlot?.colspan||1)-1}handleColMouseUpFunc=async function(){await this.handleColMouseUp(),this.updateColResizer()}.bind(this);updateColResizer(){if(!this.tableMain||!this.tableCellBlot)return;let e=this.tableCellBlot;this.tableModule.toolBox.removeChild(this.colResizer),this.colResizer=this.tableModule.addContainer(this.bem.be(`col`));let[n]=f(e,[t.tableBody]),r=n.domNode.getBoundingClientRect(),i=e.domNode.getBoundingClientRect(),a=this.quill.root.getBoundingClientRect(),o=i.right-a.x;Q(this.tableMain)&&(o=i.left-a.x),Object.assign(this.colResizer.style,{top:`${r.y-a.y}px`,left:`${o}px`,height:`${r.height}px`});let s=this.tableMain.getCols();this.curColIndex=s.findIndex(t=>t.colId===e.colId),this.colResizer.addEventListener(`mousedown`,this.handleColMouseDownFunc),this.colResizer.addEventListener(`dragstart`,e=>{e.preventDefault()})}findCurrentRowIndex(){return this.curRowIndex}handleRowMouseUpFunc=function(){this.handleRowMouseUp(),this.updateRowResizer()}.bind(this);updateRowResizer(){if(!this.tableMain||!this.tableCellBlot)return;let e=this.tableCellBlot;this.tableModule.toolBox.removeChild(this.rowResizer),this.rowResizer=this.tableModule.addContainer(this.bem.be(`row`));let n=e.parent;if(!(n instanceof H))return;let[r]=f(e,[t.tableBody]),i=r.domNode.getBoundingClientRect(),a=e.domNode.getBoundingClientRect(),o=this.quill.root.getBoundingClientRect();Object.assign(this.rowResizer.style,{top:`${a.bottom-o.y}px`,left:`${i.x-o.x}px`,width:`${i.width}px`});let s=this.tableMain.getRows();this.curRowIndex=s.indexOf(n),this.rowResizer.addEventListener(`mousedown`,this.handleRowMouseDownFunc),this.rowResizer.addEventListener(`dragstart`,e=>{e.preventDefault()})}show(){this.rowResizer.classList.remove(this.bem.is(`hidden`)),this.colResizer.classList.remove(this.bem.is(`hidden`))}hide(){this.currentTableCell=void 0,this.rowResizer.classList.add(this.bem.is(`hidden`)),this.colResizer.classList.add(this.bem.is(`hidden`))}update(){this.updateColResizer(),this.updateRowResizer()}destroy(){this.colResizer.remove(),this.rowResizer.remove(),this.table.removeEventListener(`mousemove`,this.mousemoveHandler),this.quill.off(e.events.TEXT_CHANGE,this.hideWhenTextChange)}},Xn=class{scrollHandler=[];tableMainBlot=null;tableWrapperBlot=null;bem=u(`scale`);startX=0;startY=0;offset=6;options;root;block;resizeobserver=new ResizeObserver(()=>this.update());constructor(t,n,r,i){this.tableModule=t,this.table=n,this.quill=r,this.options=this.resolveOptions(i),this.tableMainBlot=e.find(n),this.tableMainBlot&&!this.tableMainBlot.full&&(this.tableWrapperBlot=this.tableMainBlot.parent,this.buildResizer(),this.show()),this.quill.on(e.events.TEXT_CHANGE,this.updateWhenTextChange)}updateWhenTextChange=()=>{this.update()};resolveOptions(e){return Object.assign({blockSize:12},e)}buildResizer(){if(!this.tableMainBlot||!this.tableWrapperBlot)return;this.root=this.tableModule.addContainer(this.bem.b()),this.root.classList.add(this.bem.is(`hidden`)),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=[],r=r=>{if(!this.tableMainBlot)return;let i=Q(this.tableMainBlot)?-1:1,a=(r.clientX-this.startX)*i,o=r.clientY-this.startY,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`)},i=()=>{e=[],t=[],document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};this.block.addEventListener(`mousedown`,n=>{!this.tableMainBlot||this.isTableOutofEditor()||(this.startX=n.clientX,this.startY=n.clientY,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)})),document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i))}),this.block.addEventListener(`dragstart`,e=>e.preventDefault()),this.resizeobserver.observe(this.tableMainBlot.domNode),L.call(this,this.quill.root,()=>this.update()),L.call(this,this.tableWrapperBlot.domNode,()=>this.update())}isTableOutofEditor(){if(!this.tableMainBlot||!this.tableWrapperBlot||this.tableMainBlot.full)return!1;let e=this.tableMainBlot.domNode.getBoundingClientRect(),t=this.tableWrapperBlot.domNode.getBoundingClientRect();if(e.width>t.width){for(let n of this.tableMainBlot.getCols())n.width=Math.floor(n.width/e.width*t.width);return this.tableMainBlot.colWidthFillTable(),!0}return!1}update(){if(!this.block||!this.root||!this.tableMainBlot||!this.tableWrapperBlot)return;if(this.tableMainBlot.full){this.hide();return}let{rect:e,body:t}=yn(this.tableMainBlot);if(!t||!e)return;let n=this.tableWrapperBlot.domNode.getBoundingClientRect(),r=this.quill.root.getBoundingClientRect(),{scrollTop:i,scrollLeft:a}=this.tableWrapperBlot.domNode,o=this.options.blockSize*2+this.offset,s=Math.min(e.width,n.width)+o,c=Math.min(e.height,n.height)+o;Object.assign(this.root.style,{width:`${s}px`,height:`${c}px`,left:`${Math.max(e.x,n.x)-r.x-this.options.blockSize}px`,top:`${Math.max(e.y,n.y)-r.y-this.options.blockSize}px`});let l={left:`${e.width+o-a}px`,top:`${c-i}px`};Q(this.tableMainBlot)?(this.root.classList.add(this.bem.is(`align-right`)),l.left=`${this.options.blockSize+-1*a}px`):this.root.classList.remove(this.bem.is(`align-right`)),Object.assign(this.block.style,l)}show(){this.root&&(this.root.classList.remove(this.bem.is(`hidden`)),this.update())}hide(){this.root&&this.root.classList.add(this.bem.is(`hidden`))}destroy(){this.hide(),this.quill.off(e.events.TEXT_CHANGE,this.updateWhenTextChange),this.resizeobserver.disconnect(),this.root&&this.root.remove(),Ut.call(this)}},Zn=class{minSize=20;gap=4;move=0;cursorDown=!1;cursorLeave=!1;ratioY=1;ratioX=1;sizeWidth=``;sizeHeight=``;size=``;thumbState={X:0,Y:0};ob;container;scrollbar;thumb=document.createElement(`div`);scrollHandler=[];propertyMap;bem=u(`scrollbar`);tableMainBlot;constructor(t,n,r,i){this.quill=t,this.isVertical=n,this.table=r,this.scrollbarContainer=i,this.tableMainBlot=e.find(this.table),this.container=r.parentElement,this.propertyMap=this.isVertical?{size:`height`,offset:`offsetHeight`,scrollDirection:`scrollTop`,scrollSize:`scrollHeight`,axis:`Y`,direction:`top`,client:`clientY`}:{size:`width`,offset:`offsetWidth`,scrollDirection:`scrollLeft`,scrollSize:`scrollWidth`,axis:`X`,direction:`left`,client:`clientX`},this.calculateSize(),this.ob=new ResizeObserver(()=>{this.update()}),this.ob.observe(r),this.scrollbar=this.createScrollbar(),this.setScrollbarPosition(),L.call(this,this.quill.root,()=>this.setScrollbarPosition()),this.showScrollbar()}update(){this.calculateSize(),this.setScrollbarPosition()}setScrollbarPosition(){let{rect:e,body:t}=yn(this.tableMainBlot);if(!t||!e)return;let{scrollLeft:n,scrollTop:r,offsetLeft:i,offsetTop:a}=this.quill.root,{offsetLeft:o,offsetTop:s}=this.container,{offsetLeft:c,offsetTop:l}=t.domNode,{width:u,height:d}=this.container.getBoundingClientRect(),f=o+c-i,p=s+l-a;this.isVertical?f+=Math.min(u,e.width):p+=Math.min(d,e.height),this.tableMainBlot&&this.tableMainBlot.align!==`left`&&(f+=this.table.offsetLeft-o),Object.assign(this.scrollbar.style,{[this.propertyMap.size]:`${this.isVertical?Math.min(d,e.height):u}px`,transform:`translate(${f-n}px, ${p-r}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()),e.classList.add(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,i=this.thumb[this.propertyMap.offset]-t,a=(r-i)*100*n/this.scrollbar[this.propertyMap.offset];this.container[this.propertyMap.scrollDirection]=a*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 L.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}(${this.move}%)`})}showScrollbar=Yt(()=>{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=Yt(()=>{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(),Ut.call(this),this.table.removeEventListener(`mouseenter`,this.showScrollbar),this.table.removeEventListener(`mouseleave`,this.hideScrollbar)}},Qn=class{scrollbarContainer;scrollbar;bem=u(`scrollbar`);constructor(t,n,r){this.tableModule=t,this.table=n,this.quill=r,this.scrollbarContainer=this.tableModule.addContainer(this.bem.be(`container`)),this.scrollbar=[new Zn(r,!0,n,this.scrollbarContainer),new Zn(r,!1,n,this.scrollbarContainer)];for(let e of this.scrollbar)this.scrollbarContainer.appendChild(e.scrollbar);this.quill.on(e.events.TEXT_CHANGE,this.updateWhenTextChange)}updateWhenTextChange=()=>{this.update()};hide(){for(let e of this.scrollbar)e.hideScrollbar()}show(){for(let e of this.scrollbar)e.showScrollbar()}update(){for(let e of this.scrollbar)e.calculateSize(),e.setScrollbarPosition()}destroy(){this.scrollbarContainer.remove(),this.quill.off(e.events.TEXT_CHANGE,this.updateWhenTextChange);for(let e of this.scrollbar)e.destroy()}};const $n=0;var er=class{options;boundary=null;scrollRecordEls=[];startScrollRecordPosition=[];selectedTableScrollX=0;selectedTableScrollY=0;selectedEditorScrollX=0;selectedEditorScrollY=0;selectedTds=[];cellSelectWrap;cellSelect;dragging=!1;scrollHandler=[];tableMenu;resizeObserver;table;isDisplaySelection=!1;bem=u(`selection`);lastSelection={anchorNode:null,anchorOffset:0,focusNode:null,focusOffset:0};constructor(t,n,i={}){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=Ht(()=>this.updateAfterEvent(),{ignoreFirstBind:!0}),this.resizeObserver.observe(this.quill.root),this.quill.root.addEventListener(`mousedown`,this.mouseDownHandler,{passive:!1}),document.addEventListener(`selectionchange`,this.selectionChangeHandler,{passive:!1}),this.quill.on(r.AFTER_TABLE_RESIZE,this.updateAfterEvent),this.quill.on(e.events.SELECTION_CHANGE,this.quillSelectionChangeHandler),this.quill.on(e.events.TEXT_CHANGE,this.updateAfterEvent),this.options.tableMenu&&(this.tableMenu=new this.options.tableMenu(t,n,this.options.tableMenuOptions)),this.hide()}updateAfterEvent=()=>{this.updateWithSelectedTds()};getFirstTextNode(e){for(let t of Array.from(e.childNodes))if(t.nodeType===Node.TEXT_NODE)return t;return e}getLastTextNode(e){for(let t=e.childNodes.length-1;t>=0;t--){let n=e.childNodes[t];if(n.nodeType===Node.TEXT_NODE)return n}return e}getNodeTailOffset(e){let t=document.createRange();return t.selectNodeContents(e),t.collapse(!1),t.startOffset}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=this.selectedTds.some(e=>e.children.contains(r));if(i&&!a)try{let e=d(r,t.tableCellInner);this.selectedTds=[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}findWrapSelection(e){let t=null,n=0,r=null,i=0;for(let{node:a,offset:o}of e)a&&((!t||this.selectionDirectionUp({anchorNode:t,anchorOffset:n,focusNode:a,focusOffset:o}))&&(t=a,n=o),(!r||this.selectionDirectionUp({anchorNode:a,anchorOffset:o,focusNode:r,focusOffset:i}))&&(r=a,i=o));return{startNode:t,startOffset:n,endNode:r,endOffset:i}}resolveOptions(e){return Object.assign({selectColor:`#0589f340`,tableMenuOptions:{}},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=p(s),u=p(c),d=l.has(t.tableColgroup),f=u.has(t.tableColgroup);if(d||f){let e=r,s=a,c=i,p=o;if(d){let n=l.get(t.tableWrapper),r=n.descendants(V);r.length>0&&(e=r[0].domNode,s=0)}if(f){let e=u.get(t.tableWrapper),n=e.descendants(V);n.length>0&&(c=n[0].domNode,p=0)}this.setSelectionData(n,{anchorNode:e,anchorOffset:s,focusNode:c,focusOffset:p});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=r.descendants(U)[0];if(!i)return[];let a=new Set(i.descendants(G).map((e,t)=>(e.index=t,e))),o=this.getScrollPositionDiff(),{rect:s}=yn(r);if(!s)return[];let c=t.x+o.x,l=t.y+o.y,u={x:Math.max(s.left,Math.min(n.x,c)),y:Math.max(s.top,Math.min(n.y,l)),x1:Math.min(s.right,Math.max(n.x,c)),y1:Math.min(s.bottom,Math.max(n.y,l))},d=new Set,f=!0;for(;f;){f=!1;for(let e of a){e.__rect||=e.domNode.getBoundingClientRect();let{x:t,y:n,right:r,bottom:i}=e.__rect;if(Rt({x:Math.floor(u.x),y:Math.floor(u.y),x1:Math.floor(u.x1),y1:Math.floor(u.y1)},{x:Math.floor(t),y:Math.floor(n),x1:Math.floor(r),y1:Math.floor(i)},$n,d.size===0)){d.add(e),a.delete(e),u={x:Math.min(u.x,t),y:Math.min(u.y,n),x1:Math.max(u.x1,r),y1:Math.max(u.y1,i)},f=!0;break}}}for(let e of[...d,...a])delete e.__rect;return this.boundary=zt({...u,width:u.x1-u.x,height:u.y1-u.y},this.quill.root),Array.from(d).sort((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}=Wt(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}=Wt(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(Wt(e))}clearRecordScrollPosition(){this.startScrollRecordPosition=[]}mouseDownHandler=e=>{let{button:t,target:n,clientX:r,clientY:i}=e,a=n.closest(`.ql-table`),o=n.closest(`caption`);if(t!==0||!a||o)return;this.setSelectionTable(a);let s=a.dataset.tableId,c={x:r,y:i};this.recordScrollPosition(),this.selectedTds=this.computeSelectedTds(c,c),this.dragging=!0,this.show();let l=e=>{this.tableMenu&&this.tableMenu.hide(),this.tableModule.tableResize&&this.tableModule.tableResize.hide();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!==s)return;let l={x:r,y:i};this.selectedTds=this.computeSelectedTds(c,l),this.selectedTds.length>1&&this.quill.blur(),this.update()},u=()=>{document.body.removeEventListener(`mousemove`,l,!1),document.body.removeEventListener(`mouseup`,u,!1),this.dragging=!1,this.clearRecordScrollPosition(),this.tableMenu&&this.selectedTds.length>0&&this.tableMenu.show()};document.body.addEventListener(`mousemove`,l,!1),document.body.addEventListener(`mouseup`,u,!1)};updateWithSelectedTds(){if(this.selectedTds.length<=0)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.selectedTds=this.computeSelectedTds(e,t),this.selectedTds.length>0?this.update():this.hide()}update(){if(this.selectedTds.length===0||!this.boundary||!this.table)return;let{x:e,y:t}=Wt(this.quill.root),{x:n,y:r}=this.getTableViewScroll(),i=this.table.parentElement.getBoundingClientRect(),a=this.quill.root.getBoundingClientRect(),o=i.x-a.x,s=i.y-a.y;Object.assign(this.cellSelect.style,{left:`${this.selectedEditorScrollX*2-e+this.boundary.x+this.selectedTableScrollX-n-o}px`,top:`${this.selectedEditorScrollY*2-t+this.boundary.y+this.selectedTableScrollY-r-s}px`,width:`${this.boundary.width}px`,height:`${this.boundary.height}px`}),Object.assign(this.cellSelectWrap.style,{left:`${o}px`,top:`${s}px`,width:`${i.width}px`,height:`${i.height}px`}),!this.dragging&&this.tableMenu&&this.tableMenu.update()}getTableViewScroll(){return this.table?Wt(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())}removeCell=t=>{let n=this.quill.getSelection();if(!(n||t.key!==`Backspace`&&t.key!==`Delete`)){for(let e of this.selectedTds)e.deleteAt(0,e.length()-1);if(this.table){let t=e.find(this.table),n=t.descendants(V);this.selectedTds.length===n.length&&t.remove()}}};showDisplay(){Object.assign(this.cellSelectWrap.style,{display:`block`}),this.isDisplaySelection=!0,this.table&&this.resizeObserver.observe(this.table)}show(){this.table&&(Ut.call(this),this.update(),this.showDisplay(),document.addEventListener(`keydown`,this.removeCell),L.call(this,this.quill.root,()=>{this.update()}),L.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(){Ut.call(this),document.removeEventListener(`keydown`,this.removeCell),this.hideDisplay(),this.boundary=null,this.selectedTds=[],this.setSelectionTable(void 0),this.tableMenu&&this.tableMenu.hide()}destroy(){this.resizeObserver.disconnect(),this.hide(),this.cellSelectWrap.remove(),this.tableMenu&&this.tableMenu.destroy(),Ut.call(this),this.quill.root.removeEventListener(`mousedown`,this.mouseDownHandler),document.removeEventListener(`selectionchange`,this.selectionChangeHandler),this.quill.off(e.events.SELECTION_CHANGE,this.quillSelectionChangeHandler),this.quill.off(e.events.TEXT_CHANGE,this.updateAfterEvent),this.quill.on(r.AFTER_TABLE_RESIZE,this.updateAfterEvent)}};const tr=e.import(`parchment`),$=e.import(`delta`),nr=e.import(`ui/icons`),rr=e.import(`blots/break`),ir=e.import(`blots/block`),ar=e.import(`blots/block/embed`);function or(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 sr(e){s.delete(t.tableCellInner),Object.assign(t,e.blotName||{}),Object.assign(n,e.tableUpSize||{}),Object.assign(r,e.tableUpEvent||{}),Object.assign(i,e.tableUpInternal||{}),ur.moduleName=i.moduleName,ur.toolName=t.tableWrapper,z.blotName=t.container,Y.blotName=t.tableWrapper,q.blotName=t.tableMain,J.blotName=t.tableColgroup,K.blotName=t.tableCol,U.blotName=t.tableBody,H.blotName=t.tableRow,G.blotName=t.tableCell,V.blotName=t.tableCellInner,s.add(t.tableCellInner)}function cr(e,t){return de({onSelect:(n,r)=>{e.insertTable(n,r),t&&t.close()},customBtn:e.options.customBtn,texts:e.options.texts})}function lr(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,d,p;try{[l,u,d,p]=f(i.line,[t.tableWrapper,t.tableMain,t.tableRow,t.tableCell])}catch{return!0}let m=u.getColIds(),h=l.descendants(W,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 _=d[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 ur=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),i=r[0];if(i.prev instanceof Y)return i.prev.remove(),!1;if(n.format[t.tableCellInner]){let e=i.offset(d(i,t.tableCellInner));if(e===0)return!1}return!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];if((i.next instanceof Y||i.next instanceof K)&&a===i.length()-1)return!1;if(n.format[t.tableCellInner]){let e=d(i,t.tableCellInner);if(i===e.children.tail&&a===i.length()-1)return!1}return!0}},"table up":lr(!0),"table down":lr(!1),"table caption break":{bindInHead:!0,key:`Enter`,shiftKey:null,format:[t.tableCaption],handler(e,t){return!1}}};static register(){Y.allowedChildren=[q],q.allowedChildren=[U,J,W],q.requiredContainer=Y,W.requiredContainer=q,J.allowedChildren=[K],J.requiredContainer=q,U.allowedChildren=[H],U.requiredContainer=q,H.allowedChildren=[G],G.requiredContainer=U,G.allowedChildren=[V,rr],G.requiredContainer=H,V.requiredContainer=G;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)&&!_(t,tr.Attributor)&&(_(t,ir)||_(t,ar))}),i=r.reduce((e,[t,n])=>{let r=_(n,ar)?cn:on;return e[t]=class extends g(n,[r]){static register(){}},e},{});e.register({"blots/scroll":fn,"blots/block":on,"blots/block/embed":cn,...i,[`blots/${t.container}`]:z,[`formats/${t.tableCell}`]:G,[`formats/${t.tableCellInner}`]:V,[`formats/${t.tableRow}`]:H,[`formats/${t.tableBody}`]:U,[`formats/${t.tableCol}`]:K,[`formats/${t.tableColgroup}`]:J,[`formats/${t.tableCaption}`]:W,[`formats/${t.tableMain}`]:q,[`formats/${t.tableWrapper}`]:Y,"modules/clipboard":Tn},!0)}quill;options;toolBox;fixTableByLisenter=Yt(this.balanceTables,100);selector;table;tableSelection;tableResize;tableScrollbar;tableAlign;tableResizeScale;resizeOb;get statics(){return this.constructor}constructor(t,n){if(this.quill=t,this.options=this.resolveOptions(n||{}),this.toolBox=this.initialContainer(),!this.options.scrollbar){let e=u(`scrollbar`);this.quill.container.classList.add(e.bm(`origin`))}this.options.selection&&(this.tableSelection=new this.options.selection(this,this.quill,this.options.selectionOptions));let i=this.quill.getModule(`toolbar`);if(i&&this.quill.theme.pickers){let[,e]=(i.controls||[]).find(([e])=>e===this.statics.toolName)||[];if(e&&e.tagName.toLocaleLowerCase()===`select`){let t=this.quill.theme.pickers.find(t=>t.select===e);t&&(t.label.innerHTML=this.options.icon,this.buildCustomSelect(this.options.customSelect,t),t.label.addEventListener(`mousedown`,()=>{if(!this.selector||!t)return;let e=this.selector.getBoundingClientRect(),{leftLimited:n}=Vt(e);if(n){let e=t.label.getBoundingClientRect();Object.assign(t.options.style,{transform:`translateX(calc(-100% + ${e.width}px))`})}else Object.assign(t.options.style,{transform:void 0})}))}}let a=this.quill.getModule(`keyboard`);for(let e of Object.values(r.keyboradHandler))e.bindInHead?a.bindings[e.key].unshift(e):a.addBinding(e.key,e);this.quill.root.addEventListener(`click`,e=>{let t=e.composedPath();if(!t||t.length<=0)return;let n=t.find(e=>e.tagName&&e.tagName.toUpperCase()===`TABLE`&&e.classList.contains(`ql-table`));if(n){if(this.table===n){this.tableSelection&&this.tableSelection.show(),this.tableAlign&&this.tableAlign.update(),this.tableResize&&this.tableResize.update(),this.tableScrollbar&&this.tableScrollbar.update();return}this.table&&this.hideTableTools(),this.showTableTools(n)}else this.table&&this.hideTableTools()},!1),this.quill.on(e.events.EDITOR_CHANGE,t=>{t===e.events.TEXT_CHANGE&&(!this.table||!this.quill.root.contains(this.table))&&this.hideTableTools()}),this.quillHack(),this.listenBalanceCells()}initialContainer(){let e=u(`toolbox`),t=this.quill.addContainer(e.b()),n=()=>{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`})};return this.resizeOb=new ResizeObserver(n),this.resizeOb.observe(this.quill.root),t}addContainer(e){if(w(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}resolveOptions(e){return Object.assign({customBtn:!1,texts:this.resolveTexts(e.texts||{}),full:!1,fullSwitch:!0,icon:nr.table,selectionOptions:{},alignOptions:{},scrollbarOptions:{},resizeOptions:{},resizeScaleOptions:{},autoMergeCell:!0},e)}resolveTexts(e){return Object.assign({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`},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,c=s.parseFromString(a,`text/html`);for(let e of Array.from(c.querySelectorAll(`.${o.className} caption[contenteditable], .${o.className} td > [contenteditable]`)))e.removeAttribute(`contenteditable`);return c.body.innerHTML};let r=this.quill.format;this.quill.format=function(n,a,o=e.sources.API){let s=this.scroll.query(n);if(!(s.prototype instanceof tr.EmbedBlot)){let e=this.getModule(i.moduleName),s=this.getSelection(!0),c=this.getFormat(s);if(!c[t.tableCellInner]||s.length>0||e&&e.tableSelection&&e.tableSelection.selectedTds.length<=1)return r.call(this,n,a,o);if(e&&e.tableSelection&&e.tableSelection.selectedTds.length>0){let t=e.tableSelection.selectedTds,r=!1,i=[];for(let e of t){let t=e.offset(this.scroll),o=e.length();i.push({index:t,length:o});let s=this.getFormat(t,o);s[n]!==a&&(r=!0)}let s=r?a:!1,c=new $;for(let[e,{index:t,length:r}]of i.entries()){let a=e===0?0:i[e-1].index+i[e-1].length;c.retain(t-a).retain(r,{[n]:s})}let l=this.updateContents(c,o);return this.blur(),l}}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(`
|
|
125
|
+
`));let l=this.quill.getContents(e,n+s),u=l.diff(new $().insert(i).concat(c)),d=0,f=u.ops.map(e=>{let{attributes:n,...i}=e;if(e.insert?d-=w(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&&e.attributes&&e.attributes[t.tableCellInner]){let n=e.attributes[t.tableCellInner],{style:o,...s}=n,c=r(o);return c?{...i,attributes:{...a,[t.tableCellInner]:{style:c,...s}}}:{...i,attributes:{...a,[t.tableCellInner]:s}}}}return{...i,attributes:{...a}}}return e});return new $(f)};a.handlers.clean=function(a){let o=this.quill.getModule(i.moduleName),s=this.quill.getSelection();if(s&&s.length>0){let n=this.quill.getFormat(s);if(n[t.tableCellInner]){let t=r(s.index,s.length,!1),n=new $().retain(s.index).concat(t);this.quill.updateContents(n,e.sources.USER);return}}if(o&&o.tableSelection&&o.tableSelection.selectedTds.length>0&&o.tableSelection.table){let t=e.find(o.tableSelection.table);if(!t){console.warn(`TableMainFormat not found`);return}let n=o.tableSelection.selectedTds,i=new Set,a=[];for(let e of n)if(e.parent instanceof G){for(let t of e.parent.getNearByCell(`top`)){if(i.has(t))continue;i.add(t),a.push({td:t,cleanBorder:`bottom`})}for(let t of e.parent.getNearByCell(`left`)){if(i.has(t))continue;i.add(t),a.push({td:t,cleanBorder:`right`})}i.add(e.parent),a.push({td:e.parent,cleanBorder:!0})}let s=t.descendants(G),c=new Map(s.map((e,t)=>[e,t]));a.sort((e,t)=>c.get(e.td)-c.get(t.td));let l=new $,u=0;for(let{td:e,cleanBorder:t}of a){let n=e.getCellInner().offset(this.quill.scroll),i=e.getCellInner().length(),a=r(n,i-1,e=>{if(!e||t===!0)return``;let n=Gt(e),r=Object.keys(n).filter(e=>!e.startsWith(Jt(`border-${t}`))).reduce((e,t)=>(e[t]=n[t],e),{});return Kt(r)}),o=new $().retain(n-u).concat(a);l=l.concat(o),u=n+i}this.quill.updateContents(l,e.sources.USER),n.length>1&&this.quill.blur();return}return n.call(this,a)}}}}showTableTools(e){e&&(this.table=e,this.tableSelection?.show(),this.options.align&&(this.tableAlign=new this.options.align(this,e,this.quill,this.options.alignOptions)),this.options.scrollbar&&(this.tableScrollbar=new this.options.scrollbar(this,e,this.quill,this.options.scrollbarOptions)),this.options.resize&&(this.tableResize=new this.options.resize(this,e,this.quill,this.options.resizeOptions)),this.options.resizeScale&&(this.tableResizeScale=new this.options.resizeScale(this,e,this.quill,this.options.resizeScaleOptions)))}hideTableTools(){this.tableSelection?.hide(),this.tableScrollbar&&(this.tableScrollbar.destroy(),this.tableScrollbar=void 0),this.tableAlign&&(this.tableAlign.destroy(),this.tableAlign=void 0),this.tableResize&&(this.tableResize.destroy(),this.tableResize=void 0),this.tableResizeScale&&this.tableResizeScale.destroy(),this.table=void 0}async buildCustomSelect(e,t){if(!e||!S(e))return;let n=document.createElement(`div`);if(n.classList.add(`ql-custom-select`),this.selector=await e(this,t),n.appendChild(this.selector),this.options.fullSwitch){let e=u(`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)w(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=d(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,c=s.parseFromString(o,`text/html`),l=[],u=new Set,f=new Set;for(let t of e)u.add(t.colId),f.add(`${t.rowId}-${t.colId}`);for(let e of Array.from(c.querySelectorAll(`col`)))u.has(e.dataset.colId)?l.push(e.getAttribute(`width`)):e.remove();let p=0,m=null;for(let e of Array.from(c.querySelectorAll(`td`)))if(f.has(`${e.dataset.rowId}-${e.dataset.colId}`))m!==e.dataset.rowId&&(p+=1,m=e.dataset.rowId);else{let t=e.parentElement;e.remove(),t&&t.children.length<=0&&t.remove()}let h=Array.from(c.querySelectorAll(`col`)),g=h.map(e=>K.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),h[t].setAttribute(`width`,`${n.width}%`)}else{let e=0;for(let t of g)e+=t.width;let t=c.querySelector(`table`);t.style.width=`${e}px`}if(n){let t=r.getRows();if(p===t.length)this.removeCol(e);else for(let t of e)t.domNode.innerHTML=`<p><br></p>`}return c.body.innerHTML}insertTable(r,i){if(r>=30||i>=30)throw Error(`Both rows and columns must be less than 30.`);this.quill.focus();let a=this.quill.getSelection();if(a==null)return;let[o]=this.quill.getLeaf(a.index);if(!o)return;if(l(o))throw Error(`Not supported ${o.statics.blotName} insert into table.`);let s=this.calculateTableCellBorderWidth(),c=getComputedStyle(this.quill.root),u=Number.parseInt(c.paddingLeft),d=Number.parseInt(c.paddingRight),f=Number.parseInt(c.width)-u-d-s,p=R(),m=Array(i).fill(0).map(()=>R()),h=this.options.full?`${Math.max(1/i*100,n.colMinWidthPre)}%`:`${Math.max(Math.floor(f/i),n.colMinWidthPx)}px`,g=[{retain:a.index}],_=this.quill.getContents(a.index,1),[,v]=this.quill.getLine(a.index);_.ops[0].insert!==`
|
|
126
|
+
`&&v!==0&&g.push({insert:`
|
|
127
|
+
`});for(let e=0;e<i;e++)g.push({insert:{[t.tableCol]:{width:h,tableId:p,colId:m[e],full:this.options.full}}});for(let e=0;e<r;e++){let e=R();for(let n=0;n<i;n++)g.push({insert:`
|
|
128
|
+
`,attributes:{[t.tableCellInner]:{tableId:p,rowId:e,colId:m[n],rowspan:1,colspan:1}}})}this.quill.updateContents(new $(g),e.sources.USER),this.quill.setSelection(a.index+i,e.sources.SILENT),this.quill.focus()}calculateTableCellBorderWidth(){let e=`
|
|
129
|
+
<table class="${q.className}">
|
|
130
|
+
<tbody>
|
|
131
|
+
<tr>
|
|
132
|
+
<td class="${G.className}"></td>
|
|
133
|
+
</tr>
|
|
134
|
+
</tbody>
|
|
135
|
+
</table>
|
|
136
|
+
`,t=document.createElement(`div`);t.className=Y.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.getRows(),n=e.getColIds();if(t.length===0)return e.remove();if(n.length===0)return;let r=Array(t.length).fill(0).map(()=>Array(n.length).fill(!1)),i=e.tableId;for(let[e,a]of t.entries()){let o=0,s=0,c=r[e],l=a.descendants(G);for(;s<n.length;){if(c[s]){s+=1;continue}let u=l[o];if(!u||u.colId!==n[s])a.insertBefore(or(this.quill.scroll,{tableId:i,colId:n[s],rowId:a.rowId}),u);else{e+u.rowspan-1>=t.length&&(u.getCellInner().rowspan=t.length-e);let{colspan:n,rowspan:i}=u;if(n>1)for(let e=1;e<n;e++)c[s+e]=!0;if(i>1)for(let t=e+1;t<e+i;t++)for(let e=0;e<n;e++)r[t][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(q))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){if(e.length===0)return;let n=d(e[0],t.tableMain);n&&n.remove(),this.hideTableTools()}appendRow(e,n){if(e.length<=0)return;let r=e[n?e.length-1:0],[i,a,o]=f(r,[t.tableMain,t.tableBody,t.tableRow]),s=i.getRows(),c=s.indexOf(o),l=c+(n?r.rowspan:0);a.insertRow(l)}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=d(r,t.tableMain),o=a.tableId,s=R(),[c]=a.descendants(J);c&&c.insertColByIndex(i,{tableId:o,colId:s,width:a.full?6:160,full:a.full});let l=a.getRows(),u=[],f=0;for(let e of Object.values(l)){let t=u.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())u[e]=(u[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].reverse(),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=d(n,t.tableMain),i=r.getRows(),a=i.length,o=-1;for(let n of e){let e=d(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=d(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(H);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(J);if(c)for(let e=0;e<a;e++)c.removeColByIndex(o);this.fixTableByRemove(r)}mergeCells(e){if(e.length<=1)return;let n=e.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.moveChildren(e[2]),t.parent.remove()),e},[{},{},e[0]]),r=Math.max(...Object.values(n[0])),i=Math.max(...Object.values(n[1])),a=n[2];a.colspan=i,a.rowspan=r;let o=d(a,t.tableMain);this.fixTableByRemove(o)}splitCell(e){if(e.length!==1)return;let n=e[0];if(n.colspan===1&&n.rowspan===1)return;let[r,i]=f(n,[t.tableMain,t.tableRow]),a=r.tableId,o=n.getColumnIndex(),s=r.getColIds().slice(o,o+n.colspan).reverse(),c=n.formats()[t.tableCellInner].style,l=i,u=n.rowspan;for(n.colspan=1,n.rowspan=1;l&&u>0;){for(let e of s){if(l===i&&e===n.colId)continue;let t={tableId:a,rowId:l.rowId,colId:e,rowspan:1,colspan:1};c&&(t.style=c),l.insertCell(o+(l===i?1:0),t)}--u,l=l.next}}},dr=ur;export{cn as BlockEmbedOverride,on as BlockOverride,z as ContainerFormat,fn as ScrollOverride,Zn as Scrollbar,bn as TableAlign,U as TableBodyFormat,W as TableCaptionFormat,G as TableCellFormat,V as TableCellInnerFormat,Tn as TableClipboard,K as TableColFormat,J as TableColgroupFormat,q as TableMainFormat,Wn as TableMenuCommon,Gn as TableMenuContextmenu,Kn as TableMenuSelect,Jn as TableResizeBox,qn as TableResizeCommon,Yn as TableResizeLine,Xn as TableResizeScale,H as TableRowFormat,er as TableSelection,ur as TableUp,Qn as TableVirtualScrollbar,Y as TableWrapperFormat,t as blotName,oe as createColorPicker,de as createSelectBox,Lt as createTooltip,dr as default,cr as defaultCustomSelect,d as findParentBlot,f as findParentBlots,yn as getTableMainRect,Q as isTableAlignRight,R as randomId,X as tableMenuTools,r as tableUpEvent,i as tableUpInternal,n as tableUpSize,sr as updateTableConstants};
|
|
137
|
+
//# sourceMappingURL=index.js.map
|