const MODE_MAP={text:["contains","equals","starts","ends"],textarea:["contains","equals","starts","ends"],number:["=",">","<","between"],date:["=",">","<","between"],select:["contains","equals"],TagsInput:["contains","equals","starts","ends"]},MODE_ICONS={contains:"bi-search",equals:"bi-distribute-vertical",starts:"bi-align-start",ends:"bi-align-end","=":"bi-calculator",">":"bi-chevron-right","<":"bi-chevron-left",between:"bi-arrows-expand"},DataGridConfig={_fieldTypes:new Map,registerFieldType:e=>{DataGridConfig._fieldTypes.set(e.value,e)},getFieldTypes:()=>Array.from(DataGridConfig._fieldTypes.values())};DataGridConfig.registerFieldType({value:"text",label:"{#Text#}",typeForDB:"v4096",schema:[{name:"placeholder",label:"Placeholder",type:"text",if:'this.data.user_type=="text"'}]}),DataGridConfig.registerFieldType({value:"number",label:"{#Number#}",typeForDB:"ff",schema:[{name:"decimals",label:"Decimals",type:"number",setting:{min:0,max:10},if:'this.data.user_type=="number"'},{name:"prefix",label:"Prefix (e.g. $)",type:"text",if:'this.data.user_type=="number"'},{name:"suffix",label:"Suffix (e.g. %)",type:"text",if:'this.data.user_type=="number"'},{name:"thousandSep",label:"Thousand Sep",type:"switch",if:'this.data.user_type=="number"'}],formatter:(e,t)=>{if(null==e||""===e)return"";let i=Number(e);if(isNaN(i))return e;const n=t.settings||{};void 0!==n.decimals&&(i=i.toFixed(n.decimals));let l=String(i);if(n.thousandSep){const e=l.split(".");e[0]=e[0].replace(/\B(?=(\d{3})+(?!\d))/g,","),l=e.join(".")}return(n.prefix||"")+l+(n.suffix||"")}}),DataGridConfig.registerFieldType({value:"select",label:"{#Single Select#}",typeForDB:"v1024",schema:[{name:"options_str",label:"Options",type:"textarea",setting:{rows:3,placeholder:"Label:Value per line"},if:'this.data.user_type=="select"'}],formatter:(e,t)=>{if(null==e||""===e)return"";const i=(t.settings?.options||[]).find(t=>"object"==typeof t?t.value==e:t==e);return i?"object"==typeof i?i.label:i:e}}),DataGridConfig.registerFieldType({value:"checkbox",label:"{#Multi Select#}",typeForDB:"v4096",schema:[{name:"options_str",label:"Options",type:"textarea",setting:{rows:3,placeholder:"Label:Value per line"},if:'this.data.user_type=="checkbox"'}],formatter:(e,t)=>{if(!Array.isArray(e))return null==e?"":String(e);const i=t.settings?.options||[];return e.map(e=>{const t=i.find(t=>"object"==typeof t?t.value==e:t==e);return t?"object"==typeof t?t.label:t:e}).join(", ")}}),DataGridConfig.registerFieldType({value:"switch",label:"{#Switch#}",typeForDB:"b",schema:[{name:"labelOn",label:"Label On",type:"text",if:'this.data.user_type=="switch"'},{name:"labelOff",label:"Label Off",type:"text",if:'this.data.user_type=="switch"'}],formatter:(e,t)=>{const i=t.settings||{};return e?i.labelOn||"Yes":i.labelOff||"No"}}),DataGridConfig.registerFieldType({value:"datetime",label:"{#DateTime#}",typeForDB:"dt",schema:[{name:"format",label:"Format",type:"text",setting:{placeholder:"YYYY-MM-DD"},if:'this.data.user_type=="datetime"'}]}),DataGridConfig.registerFieldType({value:"textarea",label:"{#Long Text#}",typeForDB:"t",schema:[{name:"placeholder",label:"Placeholder",type:"text",if:'this.data.user_type=="textarea"'}]});const createPerfMonitor=()=>{let e=!!globalThis.__DT_PERF_MODE__;const t={refreshTime:0,refreshCount:0,scrollCount:0,totalNodes:0};return e&&!globalThis.__statePerformanceTelemetry&&(globalThis.__statePerformanceTelemetry={scanCount:0,reuseCount:0,moveCount:0}),{get stats(){return t},enable:()=>{e=!0},disable:()=>{e=!1},onScroll:()=>{e&&t.scrollCount++},startFrame:()=>e?{start:performance.now(),scan:globalThis.__statePerformanceTelemetry?.scanCount||0,move:globalThis.__statePerformanceTelemetry?.moveCount||0,reuse:globalThis.__statePerformanceTelemetry?.reuseCount||0}:null,endFrame:(i,n)=>{if(!e||!i)return;t.refreshCount++,t.totalNodes+=n;const l=performance.now()-i.start;t.refreshTime+=l;const s=globalThis.__statePerformanceTelemetry;if(s){const e=s.scanCount-i.scan,t=s.moveCount-i.move,o=s.reuseCount-i.reuse;(e>0||l>2)&&console.log(`[DataGrid Frame] Time: ${l.toFixed(2)}ms, Scans: ${e}, Moves: ${t}, Reuses: ${o}, Rows: ${n}`)}}}},createScrollManager=(e,t,i)=>{const n=globalThis.VirtualScroll({itemHeight:40});let l=null;const s=(e=!1)=>{if(!l)return;const s=n.calc(l,t.list);if(s){if(!e&&t.prevHeight===s.prevHeight&&t.postHeight===s.postHeight&&t._listStartIndex===s.listStartIndex&&t._renderedList.length===s.renderedList.length)return;Object.assign(t,{prevHeight:s.prevHeight,postHeight:s.postHeight,_listStartIndex:s.listStartIndex,_renderedList:s.renderedList}),i?.(s.renderedList.length,e)}};return{init:()=>{l=e.querySelector(".dt-main")},reset:i=>{t._listStartIndex=0,n.reset(i,l||e),t.list===i&&n.init(i,()=>s(!0))},refresh:s,onScroll:()=>s(!1)}},createSelectionManager=(e,t)=>{let i=null,n=null,l=[];const s=(e,t)=>!!(i&&e>=i.minRow&&e<=i.maxRow&&t>=i.minCol&&t<=i.maxCol)||l.some(i=>e>=i.minRow&&e<=i.maxRow&&t>=i.minCol&&t<=i.maxCol);let o=!1;const a=()=>{if(globalThis.__DT_FEATURES__&&!globalThis.__DT_FEATURES__.selection)return;let n=1/0,a=-1/0;i&&(n=Math.min(n,i.minRow),a=Math.max(a,i.maxRow)),l.forEach(e=>{n=Math.min(n,e.minRow),a=Math.max(a,e.maxRow)});const r=n!==1/0;if(!r&&!o)return;o=r;const d=e.querySelector(".dt-body");if(!d)return;d.querySelectorAll(".dt-body-row").forEach(e=>{const i=(e._ref?.rIdx??-1)+t._listStartIndex,l=e.querySelectorAll(".dt-cell");!r||ia?l.forEach(e=>e.classList.remove("dt-cell-selected")):l.forEach((e,t)=>{s(i,t)?e.classList.add("dt-cell-selected"):e.classList.remove("dt-cell-selected")})})},r=()=>{let e=0;i&&(e+=i.maxRow-i.minRow+1),l.forEach(t=>e+=t.maxRow-t.minRow+1),t.selectedRowCount=e},d=(e=!1)=>{e||(i=null,n=null,l=[],a(),r())},c=()=>{if(!i)return null;let e=i.minRow,t=i.maxRow,n=i.minCol,s=i.maxCol;return l.forEach(i=>{e=Math.min(e,i.minRow),t=Math.max(t,i.maxRow),n=Math.min(n,i.minCol),s=Math.max(s,i.maxCol)}),{minRow:e,maxRow:t,minCol:n,maxCol:s}};return{applySelectionUI:a,clearAllActive:d,startSelect:(o,c,m)=>{const p=s(o,c),u=i&&(i.minRow!==i.maxRow||i.minCol!==i.maxCol)||l.length>0;m.shiftKey&&n?i={minRow:Math.min(n.row,o),maxRow:Math.max(n.row,o),minCol:Math.min(n.col,c),maxCol:Math.max(n.col,c)}:(!p||m.ctrlKey||m.metaKey?(m.ctrlKey||m.metaKey?i&&!p&&l.push(i):d(),n={row:o,col:c},i={minRow:o,maxRow:o,minCol:c,maxCol:c}):u||(e._potentialCancel={row:o,col:c}),t.isSelecting=!0),a(),r(),e.focus()},updateSelect:(l,s)=>{t.isSelecting&&n&&(i={minRow:Math.min(n.row,l),maxRow:Math.max(n.row,l),minCol:Math.min(n.col,s),maxCol:Math.max(n.col,s)},e._potentialCancel=null,a(),r())},endSelect:()=>{if(e._potentialCancel){const{row:t,col:i}=e._potentialCancel;s(t,i)&&d(),e._potentialCancel=null}t.isSelecting=!1},getSelectionBounds:c,copy:async()=>{const e=c();if(!e)return;const i=t.list.slice(e.minRow,e.maxRow+1).map(i=>t.fields.slice(e.minCol,e.maxCol+1).map(e=>{let t=String(i[e.id]??"");return(t.includes("\t")||t.includes("\n")||t.includes('"'))&&(t='"'+t.replace(/"/g,'""')+'"'),t}).join("\t")).join("\n");await navigator.clipboard.writeText(i)},paste:async()=>{try{const i=await navigator.clipboard.readText();if(!i)return;const n=c();if(!n)return;const l=i.split(/\r?\n/).filter(e=>e.length>0).map(e=>{const t=[];let i="",n=!1;for(let l=0;le.classList?.contains("dt-body-row"));let m=!1;l.forEach((e,i)=>{const n=s+i;if(n>a||n>=t.list.length)return;const l=t.list[n];let d=!1;e.forEach((e,i)=>{const n=o+i;if(n>r||n>=t.fields.length)return;const s=t.fields[n];l[s.id]=e,d=!0}),d&&(m=!0)}),m&&(t.list=[...t.list])}catch(e){console.error("Paste Error:",e)}}}};globalThis.Component.register("DataGrid",e=>{e.state||(e.state=globalThis.NewState({}));const t=e.state;e.editable=e.hasAttribute("editable"),Object.assign(t,{list:[],fields:[],_renderedList:[],prevHeight:0,postHeight:0,_listStartIndex:0,selectedRowCount:0,_originalList:[],sortConfig:{fieldId:null,direction:null},filterConfig:{},activeFieldId:null,activeField:null,activeModes:[],_columnStats:{},_internalUpdate:!1,_appliedHash:"",_fieldsDirty:!1,_masterCellNodes:null,isDirty:!1,isBulkEdit:null,editable:e.editable});const i=createPerfMonitor();t.perf=i.stats;const n=createSelectionManager(e,t),l=createScrollManager(e,t,()=>setTimeout(()=>n.applySelectionUI(),50)),s=e.querySelector(".dt-column-menu");s&&(s._thisObj=e),e.onColumnResizing=(t,i)=>e.style.setProperty(`--w-${t.id}`,i.detail.newSize+"px"),e.onColumnResize=(e,i)=>{const n=t.fields.findIndex(t=>t.id===e.id);-1!==n&&(t.fields[n].width=i.detail.newSize,t.fields=[...t.fields])};let o,a=null;e.format=(e,t)=>{if(t.formatter)return t.formatter(e,t);const i=DataGridConfig._fieldTypes.get(t.settings?.formType||t.type||"text");return i&&i.formatter?i.formatter(e,t):null==e?"":"object"==typeof e?JSON.stringify(e):String(e)},e.onScroll=()=>{i.onScroll(),l.refresh(),e.hideColumnMenu(),e.hideEditor(!0);const n=e.querySelector(".dt-spacer-prev"),s=e.querySelector(".dt-spacer-post");n&&(n.style.height=(t.prevHeight||0)+"px",n.style.display=t.prevHeight>0?"block":"none"),s&&(s.style.height=(t.postHeight||0)+"px",s.style.display=t.postHeight>0?"block":"none")},e.applySortFilter=(e={})=>{if(t._internalUpdate)return;const i={...t.filterConfig,...e.filters||{}},n=void 0!==e.sort?e.sort?{fieldId:t.activeFieldId,direction:e.sort}:{fieldId:null,direction:null}:t.sortConfig;let l=[...t._originalList];if(Object.entries(i).forEach(([e,t])=>{(t.value||t.selectedValues&&0!==t.selectedValues.length)&&(l=l.filter(i=>{const n=i[e];if(t.selectedValues?.length>0)return t.selectedValues.includes(String(n));const l=String(t.value).toLowerCase(),s=String(n??"").toLowerCase();switch(t.mode){case"contains":return s.includes(l);case"equals":return s===l;case"starts":return s.startsWith(l);case"ends":return s.endsWith(l);case"=":return Number(n)===Number(t.value);case">":return Number(n)>Number(t.value);case"<":return Number(n)=Number(t.value)&&Number(n)<=Number(t.value2);default:return!0}}))}),n.fieldId&&n.direction){const e=n.fieldId,t="asc"===n.direction?1:-1;l.sort((i,n)=>i[e]==n[e]?0:i[e]>n[e]?t:-t)}t._internalUpdate=!0,t.filterConfig=i,t.sortConfig=n,t.list=l,t._internalUpdate=!1},e.showColumnMenu=(i,n)=>{const l=n.currentTarget,s=e.querySelector(".dt-column-menu");if("block"===s.style.display&&t.activeFieldId===i.id)return e.hideColumnMenu(),void e.applySortFilter();const o=i.settings?.formType||i.type||"text";t.activeModes=MODE_MAP[o]||(["boolean","switch","checkbox","radio"].includes(o)?[]:MODE_MAP.text),t.filterConfig[i.id]||(t.filterConfig[i.id]={mode:t.activeModes[0]||"contains",value:"",selectedValues:[]}),t.activeField=i,t.activeFieldId=i.id,s.style.display="block";const a=l.closest(".dt-cell").getBoundingClientRect(),r=e.getBoundingClientRect(),d=s.offsetWidth||260;let c=a.right-r.left-d;c<0&&(c=Math.max(0,a.left-r.left)),s.style.left=c+"px",s.style.top=a.bottom-r.top+5+"px";const m=t=>{s.contains(t.target)||l.contains(t.target)||(e.hideColumnMenu(),e.applySortFilter(),document.removeEventListener("mousedown",m))};document.addEventListener("mousedown",m),setTimeout(()=>s.querySelector("input")?.focus(),50)},e.toggleSelectedValue=i=>{const n=t.filterConfig[t.activeFieldId];if(!n)return;const l=n.selectedValues.indexOf(i);-1===l?n.selectedValues.push(i):n.selectedValues.splice(l,1),t.filterConfig={...t.filterConfig},e.applySortFilter()},e.filterOnlyThis=i=>{t.filterConfig[t.activeFieldId]={mode:"contains",value:"",selectedValues:[String(i)]},t.filterConfig={...t.filterConfig},e.applySortFilter()},e.hideColumnMenu=()=>{const t=e.querySelector(".dt-column-menu");t&&(t.style.display="none")},e.setSort=i=>{const n=t.sortConfig.direction===i&&t.sortConfig.fieldId===t.activeFieldId?null:i;e.applySortFilter({sort:n})},e.clearColumnSettings=()=>{t.activeFieldId&&(t.filterConfig={...t.filterConfig,[t.activeFieldId]:{mode:t.activeModes[0]||"contains",value:"",value2:"",selectedValues:[]}},e.applySortFilter())},e._initRow=i=>{const n=i._ref?.item;n&&void 0===n._editingF&&Object.defineProperty(n,"_editingF",{set:t=>{null===t&&e.hideEditor(!0)},configurable:!0}),Array.from(i.children).forEach(e=>{const n=parseInt(e.dataset.fidx);isNaN(n)||(e._ref={...e._ref||i._ref,f:t.fields[n],fIdx:n})})},t.__watch("fields",i=>{if(!i)return;t._fieldsDirty=!0,t._masterCellNodes=null,e.style.setProperty("--dt-grid-template",i.map(e=>`var(--w-${e.id}, ${e.settings?.width||e.width||150}px)`).join(" ")),e.style.setProperty("--dt-row-width",i.reduce((e,t)=>e+(t.settings?.width||t.width||150),0)+"px");let n=0;i.forEach(t=>{"left"===(t.settings?.pinned||t.pinned)&&(e.style.setProperty(`--l-${t.id}`,n+"px"),n+=t.settings?.width||t.width||150)});let l=0;[...i].reverse().forEach(t=>{"right"===(t.settings?.pinned||t.pinned)&&(e.style.setProperty(`--r-${t.id}`,l+"px"),l+=t.settings?.width||t.width||150)})}),t.__watch("list",e=>{t._internalUpdate||(t._originalList=[...e||[]],setTimeout(()=>{const e={};t.fields.forEach(i=>{const n={};t._originalList.forEach(e=>{const t=e[i.id],l=null==t||""===t?"":String(t);n[l]=(n[l]||0)+1}),e[i.id]=Object.entries(n).sort((e,t)=>t[1]-e[1]).slice(0,20).map(([e,t])=>({val:e,count:t}))}),t._columnStats=e},200)),l.init(),l.reset(e)}),e.editCell=(t,i,n)=>{const l=e.querySelector(".dt-main"),s=e.querySelector(".dt-editor-overlay"),o=n.getBoundingClientRect(),r=l.getBoundingClientRect();a=n;const d=i.settings?.formType||i.type||"text",c=s.querySelector("AutoForm");c&&(c.state.data=globalThis.NewState(globalThis.Util.clone(t)),c.state.schema=[{...i,type:d,options:i.settings?.options||i.options,name:i.id,label:""}]);const m=["textarea","TagsInput","checkbox","radio"].includes(d);let p=o.top-r.top+l.scrollTop-1,u=o.left-r.left+l.scrollLeft-1,f=Math.max(o.width+2,m?300:0);const h=l.scrollWidth-f-5;u>h&&(u=Math.max(0,h)),Object.assign(s.style,{display:"flex",left:u+"px",top:p+"px",width:f+"px",height:"auto",minHeight:o.height+2+"px",maxHeight:Math.max(100,r.height-(o.top-r.top)-5)+"px",overflow:"auto",padding:"0"}),setTimeout(()=>s.querySelector("input, textarea, select, .form-control")?.focus(),30)},e.hideEditor=(i=!0)=>{if(o||(o=e.querySelector(".dt-editor-overlay")),!o||"none"===o.style.display)return;const n=o.querySelector("AutoForm");if(i&&n&&n.data){const e=o.querySelector("input:focus, select:focus, textarea:focus");e&&e.dispatchEvent(new Event("number"===e.type||"SELECT"===e.tagName?"change":"input",{bubbles:!0}));let i=!1;if((n.state.schema||[]).forEach(e=>{const t=a?.closest(".dt-row")?._ref?.item;t&&JSON.stringify(t[e.name])!==JSON.stringify(n.data[e.name])&&(t[e.name]=n.data[e.name],i=!0)}),t.isBulkEdit){const{minRow:e,maxRow:l,fIdx:s}=t.isBulkEdit,o=t.fields[s],a=n.data[o.id];for(let n=e;n<=l;n++)t.list[n]&&t.list[n][o.id]!==a&&(t.list[n][o.id]=a,i=!0)}i&&(t.list=[...t.list],t.isDirty=!0)}o.style.display="none",n&&(n.state.schema=[],n.data=null),a=null,t.isBulkEdit=null,e.focus()},e.onMainMouseDown=i=>{const l=i.target.closest(".dt-cell"),s=l?.closest(".dt-row");if(!s||s.classList.contains("dt-header-row"))return;const o=l.dataset.fidx?parseInt(l.dataset.fidx):Array.from(s.querySelectorAll(".dt-cell")).indexOf(l),a=s._ref?.rIdx??Array.from(e.querySelectorAll(".dt-body-row")).indexOf(s);n.startSelect(a+t._listStartIndex,o,i)},e.onMainMouseOver=i=>{if(t.isSelecting){const l=i.target.closest(".dt-cell"),s=l?.closest(".dt-row");if(s&&!s.classList.contains("dt-header-row")){const i=l.dataset.fidx?parseInt(l.dataset.fidx):Array.from(s.querySelectorAll(".dt-cell")).indexOf(l),o=s._ref?.rIdx??Array.from(e.querySelectorAll(".dt-body-row")).indexOf(s);n.updateSelect(o+t._listStartIndex,i)}}},e.onMainDblClick=i=>{if(!e.editable)return;const l=i.target.closest(".dt-cell"),s=l?.closest(".dt-row");if(s&&!s.classList.contains("dt-header-row")){const i=s._ref?.item,o=l.dataset.fidx?parseInt(l.dataset.fidx):Array.from(s.querySelectorAll(".dt-cell")).indexOf(l),a=(s._ref?.rIdx??Array.from(e.querySelectorAll(".dt-body-row")).indexOf(s))+t._listStartIndex;if(i&&t.fields[o]){const s=n.getSelectionBounds();if(s&&a>=s.minRow&&a<=s.maxRow&&o>=s.minCol&&o<=s.maxCol){const e=s.maxRow-s.minRow+1;e>1&&(t.isBulkEdit={...s,fIdx:o},globalThis.UI?.toast&&globalThis.UI.toast(`Bulk Edit: Updating ${e} rows in column "${t.fields[o].name}"`,{type:"warning"}))}e.editCell(i,t.fields[o],l)}}},e.addRow=()=>{const i={};t.fields.forEach(e=>i[e.id]=""),t._originalList.push(i),t.list=[...t._originalList],t.isDirty=!0,setTimeout(()=>{l.reset(t.list),e.querySelector(".dt-main").scrollTop=e.querySelector(".dt-main").scrollHeight},50)},e.deleteSelectedRow=async()=>{const i=n.getSelectionBounds();if(!i)return;const l=i.maxRow-i.minRow+1;if(await globalThis.Dialog.confirm(`Are you sure you want to delete ${l} row(s)?`)){const l=i.minRow,s=i.maxRow,o=t.list.slice(l,s+1);t.list=t.list.filter((e,t)=>!(t>=l&&t<=s)),t._originalList=t._originalList.filter(e=>!o.includes(e)),t.isDirty=!0,n.clearAllActive(),e.dispatchEvent(new CustomEvent("remove",{detail:{items:o}}))}},e.saveChanges=()=>{e.dispatchEvent(new CustomEvent("save",{detail:{list:t._originalList,fields:t.fields}})),t.isDirty=!1};const r=()=>{const e=globalThis.DataGrid.getFieldTypes(),t=[{name:"id",label:"Field ID",type:"text",setting:{required:!0,placeholder:"e.g. user_name"}},{name:"name",label:"Display Name",type:"text",setting:{required:!0,placeholder:"e.g. 用户名"}},{name:"user_type",label:"Field Type",type:"select",options:e.map(e=>({label:e.label,value:e.value}))}],i=e.reduce((e,t)=>e.concat(t.schema||[]),[]);return t.concat(i,[{name:"isIndex",label:"Index",type:"switch"},{name:"memo",label:"Memo",type:"text"}])},d=e=>{if(e)return e.split("\n").map(e=>e.trim()).filter(Boolean).map(e=>{const t=e.indexOf(":");return t>-1?{label:e.slice(0,t).trim(),value:e.slice(t+1).trim()}:e})};e.addField=async()=>{e.hideColumnMenu();const i=globalThis.NewState({id:"c"+Date.now().toString().slice(-4),name:"New Field",user_type:"text",decimals:0,isIndex:!1,memo:"",options_str:""}),n=e.querySelector(`Modal[id="${e.id}_field_modal"]`);if(!n)return;Object.assign(n.state,{title:"Add Field",buttons:["Cancel","Save"]});const l=n.querySelector("AutoForm");l&&(l.state.data=i,l.state.schema=r()),n.show();if(2===await new Promise(e=>n.addEventListener("change",t=>e(n.result),{once:!0}))){const n=globalThis.DataGrid.getFieldTypes().find(e=>e.value===i.user_type);let l=n?.typeForDB||"v1024";"number"===i.user_type&&(l=i.decimals>0?"ff":"bi");const s={id:i.id,name:i.name,memo:i.memo,isIndex:!!i.isIndex,type:l,settings:{formType:i.user_type,decimals:i.decimals,prefix:i.prefix,suffix:i.suffix,thousandSep:i.thousandSep,labelOn:i.labelOn,labelOff:i.labelOff,format:i.format,placeholder:i.placeholder,options:d(i.options_str)}};t.fields=[...t.fields,s],t.isDirty=!0,e.dispatchEvent(new CustomEvent("savefields",{detail:t.fields})),t.list=[...t.list]}},e.editField=async()=>{if(!t.activeField)return;e.hideColumnMenu();const i=t.activeField,n=i.settings||{},l=globalThis.NewState({id:i.id,name:i.name,memo:i.memo||"",isIndex:!!i.isIndex,user_type:n.formType||"text",decimals:n.decimals||0,prefix:n.prefix||"",suffix:n.suffix||"",thousandSep:!!n.thousandSep,labelOn:n.labelOn||"",labelOff:n.labelOff||"",format:n.format||"",placeholder:n.placeholder||"",options_str:(s=n.options,s?s.map(e=>"object"==typeof e?`${e.label}:${e.value}`:e).join("\n"):"")});var s;const o=e.querySelector(`Modal[id="${e.id}_field_modal"]`);if(!o)return;Object.assign(o.state,{title:"Edit Field",buttons:["Cancel","Save"]});const a=o.querySelector("AutoForm");a&&(a.state.data=l,a.state.schema=r()),o.show();if(2===await new Promise(e=>o.addEventListener("change",t=>e(o.result),{once:!0}))){const n=t.fields.findIndex(e=>e.id===i.id);if(-1!==n){const s=globalThis.DataGrid.getFieldTypes().find(e=>e.value===l.user_type);let o=s?.typeForDB||"v1024";"number"===l.user_type&&(o=l.decimals>0?"ff":"bi");const a={...i,id:l.id,name:l.name,memo:l.memo,isIndex:!!l.isIndex,type:o,settings:{...i.settings,formType:l.user_type,decimals:l.decimals,prefix:l.prefix,suffix:l.suffix,thousandSep:l.thousandSep,labelOn:l.labelOn,labelOff:l.labelOff,format:l.format,placeholder:l.placeholder,options:d(l.options_str)}};t.fields[n]=a,t.fields=[...t.fields],t.isDirty=!0,e.dispatchEvent(new CustomEvent("savefields",{detail:t.fields})),t.list=[...t.list]}}},e.deleteField=async()=>{if(t.activeField&&(e.hideColumnMenu(),await globalThis.Dialog.confirm(`Are you sure you want to delete field "${t.activeField.name}"?`))){const i=t.fields.findIndex(e=>e.id===t.activeField.id);-1!==i&&(t.fields.splice(i,1),t.fields=[...t.fields],t.isDirty=!0,e.dispatchEvent(new CustomEvent("savefields",{detail:t.fields})),t.list=[...t.list])}},window.addEventListener("mouseup",n.endSelect),document.addEventListener("mousedown",t=>{const i=e.querySelector(".dt-editor-overlay"),l=e.querySelector(".dt-column-menu");"none"===i?.style.display||i.contains(t.target)||setTimeout(()=>e.hideEditor(!0)),e.contains(t.target)||i?.contains(t.target)||l?.contains(t.target)||n.clearAllActive()}),e.addEventListener("keydown",e=>{(e.ctrlKey||e.metaKey)&&"c"===e.key.toLowerCase()&&(e.preventDefault(),n.copy()),(e.ctrlKey||e.metaKey)&&"v"===e.key.toLowerCase()&&(e.preventDefault(),n.paste())}),t._MODE_ICONS=MODE_ICONS},globalThis.Util.makeDom('\n
\n
\n
\n
\n \n
\n
\n
\n \n \n \n
\n \n
\n\n \n\n \n
\n
\n \n \n
\n
\n\n \n
\n'),globalThis.Util.makeDom("\n\n")),globalThis.DataGrid=DataGridConfig;