import{Component as t,NewState as e,Util as i,RefreshState as n}from"@web/state";import{VirtualScroll as s}from"@web/base";t.register("DataTable",t=>{const i=s();t.state||(t.state=e({}));const n=t.state;Object.assign(n,{list:[],fields:[],renderedList:[],prevHeight:0,postHeight:0,_listStartIndex:0,selStartR:-1,selStartF:-1,selEndR:-1,selEndF:-1,multiSelections:[],isSelecting:!1});const d=()=>{const s=t.querySelector(".dt-body");if(!s)return;const d=i.calc(s,n.list);d&&(d.renderedList.forEach((t,i)=>{if(t&&!t.__watch){const s=e(t);d.renderedList[i]=s,n.list[d.listStartIndex+i]=s}}),Object.assign(n,{prevHeight:d.prevHeight,postHeight:d.postHeight,_listStartIndex:d.listStartIndex,renderedList:d.renderedList}))};t.refresh=d,n.__watch("fields",t=>{if(!t)return;const e=[],i=[];let s=0;t.forEach((t,i)=>{"left"===t.pinned&&(e[i]=s,s+=t.width||150)}),t.forEach((e,n)=>{if("right"===e.pinned){let e=0;for(let i=n+1;i{n._listStartIndex=0;const s=t.querySelector(".dt-body");n.renderedList=i.reset(e,s||{clientHeight:800})||[],s&&(i.init(e,d),requestAnimationFrame(d))}),t.onItemUpdate=(t,e)=>i.update(t+n._listStartIndex,e),t.getOffset=(t,e)=>(n._leftOffsets||[])[t]||(n._rightOffsets||[])[t]||0,t.isCellSelected=(t,e)=>{const i=Math.min(n.selStartR,n.selEndR),s=Math.max(n.selStartR,n.selEndR),d=Math.min(n.selStartF,n.selEndF),r=Math.max(n.selStartF,n.selEndF);return t>=i&&t<=s&&e>=d&&e<=r||n.multiSelections.some(i=>t>=i.r1&&t<=i.r2&&e>=i.f1&&e<=i.f2)},t.clearAllActive=(t=!1)=>{n.list.forEach(t=>{t&&t.__watch&&(null!==t._editingF&&(t._editingF=null),null!==t._activeF&&(t._activeF=null))}),t||(n.selStartR=-1,n.multiSelections=[])},t.startSelect=(e,i,s)=>{const d=t.isCellSelected(e,i);n.editingCell&&(n.editingCell=null),s.shiftKey&&-1!==n.selStartR?(n.selEndR=e,n.selEndF=i):(d||(s.ctrlKey||s.metaKey?-1!==n.selStartR&&n.multiSelections.push({r1:Math.min(n.selStartR,n.selEndR),r2:Math.max(n.selStartR,n.selEndR),f1:Math.min(n.selStartF,n.selEndF),f2:Math.max(n.selStartF,n.selEndF)}):t.clearAllActive(),n.selStartR=n.selEndR=e,n.selStartF=n.selEndF=i),n.isSelecting=!0,n.list[e]&&n.list[e].__watch&&(n.list[e]._activeF=i))},t.updateSelect=(t,e)=>n.isSelecting&&(n.selEndR=t,n.selEndF=e),t.endSelect=()=>n.isSelecting=!1,t.editCell=(i,s,d)=>{var r;const l=Math.min(n.selStartR,n.selEndR),a=Math.max(n.selStartR,n.selEndR),o=Math.min(n.selStartF,n.selEndF),c=Math.max(n.selStartF,n.selEndF),h=n.list.indexOf(i),f=-1!==n.selStartR&&h>=l&&h<=a&&d>=o&&d<=c?a-l+1:0;if(f>1&&(null==(r=globalThis.UI)?void 0:r.toast)&&UI.toast(`{#Bulk Editing {num} rows... || ${f}#}`),t.clearAllActive(!0),i._editingF=s.id,i._activeF=d,f>1){const t=i.__watch(s.id,d=>{for(let t=l;t<=a;t++){const r=n.list[t];if(r!==i){const i=r.__watch?r:e(r);n.list[t]=i,i[s.id]=d}}t()})}};t.copy=async()=>{const t=Math.min(n.selStartR,n.selEndR),e=Math.max(n.selStartR,n.selEndR),i=Math.min(n.selStartF,n.selEndF),s=Math.max(n.selStartF,n.selEndF);if(-1===t)return;const d=n.list.slice(t,e+1).map(t=>n.fields.slice(i,s+1).map(e=>(t=>{const e=String(t??"");return e.includes("\t")||e.includes("\n")||e.includes('"')?'"'+e.replace(/"/g,'""')+'"':e})(t[e.id])).join("\t")).join("\n");await navigator.clipboard.writeText(d)},t.paste=async()=>{const t=(t=>{const e=[];let i=[],n="",s=!1;for(let d=0;d{let r=n.list[i+d];r&&(r.__watch||(r=e(r),n.list[i+d]=r),t.forEach((t,e)=>{const i=n.fields[s+e];i&&("boolean"==typeof r[i.id]?r[i.id]="true"===t.toLowerCase():"number"==typeof r[i.id]?r[i.id]=Number(t):r[i.id]=t)}))})},t.addEventListener("keydown",e=>{(e.ctrlKey||e.metaKey)&&("c"===e.key&&(e.preventDefault(),t.copy()),"v"===e.key&&(e.preventDefault(),t.paste()))});const r=e=>!t.contains(e.target)&&t.clearAllActive();document.addEventListener("mousedown",r),window.addEventListener("mouseup",t.endSelect),t._onUnload=()=>{document.removeEventListener("mousedown",r),window.removeEventListener("mouseup",t.endSelect)}},i.makeDom("\n
\n\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t
\n\t
this.refresh())\" style=\"overflow-anchor:none\">\n\t\t
0\" $style=\"'height:' + this.state.prevHeight + 'px;'\">
\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t
0\" $style=\"'height:' + this.state.postHeight + 'px;'\">
\n\t
\n\t\n
\n")),"undefined"!=typeof document&&n(document.documentElement);