open-grid 1.0.2 → 1.0.7

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.
@@ -1,90 +0,0 @@
1
- "use strict";class ot{constructor(){this.listeners=new Map}on(e,t){const s=this.listeners.get(e)??[];return s.push({handler:t,once:!1}),this.listeners.set(e,s),this}once(e,t){const s=this.listeners.get(e)??[];return s.push({handler:t,once:!0}),this.listeners.set(e,s),this}off(e,t){if(!t)return this.listeners.delete(e),this;const s=this.listeners.get(e);if(s){const o=s.filter(i=>i.handler!==t);o.length===0?this.listeners.delete(e):this.listeners.set(e,o)}return this}emit(e,...t){const s=this.listeners.get(e);if(!s||s.length===0)return!1;const o=[];for(const i of s)i.handler(...t),i.once||o.push(i);return o.length!==s.length&&(o.length===0?this.listeners.delete(e):this.listeners.set(e,o)),!0}removeAllListeners(e){return e?this.listeners.delete(e):this.listeners.clear(),this}listenerCount(e){var t;return((t=this.listeners.get(e))==null?void 0:t.length)??0}}let nt=0;function Te(){return`og-r-${++nt}`}class rt{constructor(e="_ogRowId"){this._data=[],this._original=[],this._meta=new Map,this._displayIndexes=[],this._idMap=new Map,this._findQuery="",this._findFields=[],this._getStrategy=(t,s)=>s,this._idField=e}setStrategyResolver(e){this._getStrategy=e}setData(e){this._data=e.map(t=>{const s=Te(),o={...t,[this._idField]:s};return this._meta.set(s,{state:"none",rowId:s}),o}),this._original=this._data.map(t=>({...t})),this._rebuildIdMap(),this._displayIndexes=this._data.map((t,s)=>s)}getData(){return this._displayIndexes.map(e=>this._data[e])}getOriginalData(){return[...this._original]}getAllData(){return[...this._data]}clearData(){this._data=[],this._original=[],this._meta.clear(),this._idMap.clear(),this._displayIndexes=[]}get rowCount(){return this._displayIndexes.length}get totalRowCount(){return this._data.length}addRow(e,t="last"){const s=Te(),o={...e,[this._idField]:s};if(this._meta.set(s,{state:"added",rowId:s}),t==="last"){const i=this._data.push(o)-1;this._idMap.set(s,i),this._displayIndexes.push(i)}else if(t==="first")this._data.unshift(o),this._rebuildIdMap(),this._displayIndexes.unshift(0);else{const i=Math.min(t,this._displayIndexes.length),n=i<this._displayIndexes.length?this._displayIndexes[i]:this._data.length;this._data.splice(n,0,o),this._rebuildIdMap(),this._displayIndexes=this._data.map((r,l)=>l)}}removeRow(e){const t=this._displayIndexes[e];if(t===void 0)return;const s=this._data[t],o=s[this._idField],i=this._meta.get(o);return(i==null?void 0:i.state)==="added"?(this._data.splice(t,1),this._meta.delete(o)):this._meta.set(o,{...i,state:"removed"}),this._rebuildIdMap(),this._displayIndexes=this._data.map((n,r)=>({r:n,i:r})).filter(({r:n})=>{var r;return((r=this._meta.get(n[this._idField]))==null?void 0:r.state)!=="removed"}).map(({i:n})=>n),s}moveRow(e,t){const s=this._displayIndexes[e],o=this._displayIndexes[t];if(s===void 0||o===void 0)return;const[i]=this._data.splice(s,1),n=s<o?o-1:o;this._data.splice(n,0,i),this._rebuildIdMap(),this._displayIndexes=this._data.map((r,l)=>({r,i:l})).filter(({r})=>{var l;return((l=this._meta.get(r[this._idField]))==null?void 0:l.state)!=="removed"}).map(({i:r})=>r)}updateCell(e,t,s){const o=this._displayIndexes[e];if(o===void 0)return!1;const n=this._data[o][this._idField],r=this._meta.get(n);return(r==null?void 0:r.state)==="none"&&this._meta.set(n,{...r,state:"edited",original:{...this._original[o]}}),this._data[o][t]=s,!0}getRowByIndex(e){const t=this._displayIndexes[e];return t!==void 0?this._data[t]:void 0}getCellValue(e,t){var s;return(s=this.getRowByIndex(e))==null?void 0:s[t]}getEditedRows(){return this._data.filter(e=>{var t;return((t=this._meta.get(e[this._idField]))==null?void 0:t.state)==="edited"})}getChangedRows(){return this.getEditedRows()}getAddedRows(){return this._data.filter(e=>{var t;return((t=this._meta.get(e[this._idField]))==null?void 0:t.state)==="added"})}getRemovedRows(){return this._data.filter(e=>{var t;return((t=this._meta.get(e[this._idField]))==null?void 0:t.state)==="removed"})}getChanges(){const e=[],t=[],s=[];for(const o of this._data){const i=o[this._idField],n=this._meta.get(i),r=(n==null?void 0:n.state)??"none";if(r==="added")e.push({...o});else if(r==="removed")s.push({...o});else if(r==="edited"){const l=n.original??{},a=Object.keys(o).filter(c=>c!==this._idField&&o[c]!==l[c]);t.push({...o,_changedFields:a})}}return{added:e,edited:t,removed:s}}getChangedColumns(){return this._data.filter(e=>{var t;return((t=this._meta.get(e[this._idField]))==null?void 0:t.state)==="edited"}).map(e=>{var o;const t=((o=this._meta.get(e[this._idField]))==null?void 0:o.original)??{},s=[];for(const i of Object.keys(e))i!==this._idField&&e[i]!==t[i]&&s.push({field:i,oldValue:t[i],newValue:e[i]});return{row:{...e},fields:s.map(i=>i.field),diff:s}})}getOriginalRow(e){const t=this._displayIndexes[e];if(t===void 0)return;const s=this._data[t],o=this._meta.get(s[this._idField]);if(!(!o||o.state==="added"))return o.state==="edited"&&o.original?{...o.original}:{...this._original[t]}}getRowsWithState(e){return this._data.map(t=>{var o;const s=((o=this._meta.get(t[this._idField]))==null?void 0:o.state)??"none";return{...t,[e]:s}})}getRowState(e){var s;const t=this.getRowByIndex(e);return t?((s=this._meta.get(t[this._idField]))==null?void 0:s.state)??"none":"none"}applySort(e){const t=i=>{var n,r;return((r=this._meta.get((n=this._data[i])==null?void 0:n[this._idField]))==null?void 0:r.state)!=="removed"};if(e.length===0){this._displayIndexes=this._data.map((i,n)=>n).filter(t);return}const s=this._displayIndexes.filter(t).map(i=>{const n=this._data[i];return{idx:i,keys:e.map(r=>n[r.field])}}),o=this._getStrategy("sortComparator",(i,n,r,l)=>{if(i==null&&n==null)return 0;if(i==null)return-1;if(n==null)return 1;if(typeof i=="number"&&typeof n=="number")return i-n;const a=String(i),c=String(n);return a<c?-1:a>c?1:0});s.sort((i,n)=>{for(let r=0;r<e.length;r++){const l=e[r].dir,a=e[r].field,c=i.keys[r],u=n.keys[r],h=o(c,u,a,l);if(h!==0)return l==="asc"?h:-h}return 0}),this._displayIndexes=s.map(i=>i.idx)}applyFilter(e){const t=Object.keys(e),s=this._getStrategy("filterPredicate",(o,i,n)=>lt(o,i));this._displayIndexes=this._data.map((o,i)=>({r:o,i})).filter(({r:o})=>{var i;if(((i=this._meta.get(o[this._idField]))==null?void 0:i.state)==="removed"||t.length>0&&!t.every(n=>{const r=o[n];return e[n].every(l=>s(r,l,n))}))return!1;if(this._findQuery&&this._findFields.length>0){const n=this._findQuery;if(!this._findFields.some(l=>{const a=o[l];return a!=null&&String(a).toLowerCase().includes(n)}))return!1}return!0}).map(({i:o})=>o)}setFindFilter(e,t){this._findQuery=e.toLowerCase(),this._findFields=t}_rebuildIdMap(){this._idMap.clear(),this._data.forEach((e,t)=>{this._idMap.set(e[this._idField],t)})}}function lt(d,e){const t=d,s=e.value;switch(e.operator){case"=":return t==s;case"!=":return t!=s;case">":return t>s;case">=":return t>=s;case"<":return t<s;case"<=":return t<=s;case"contains":return String(t).includes(String(s));case"startsWith":return String(t).startsWith(String(s));case"endsWith":return String(t).endsWith(String(s));default:return!0}}class at{constructor(e,t){this._totalRows=0,this._scrollTop=0,this._viewportHeight=0,this._rafId=null,this._onScroll=()=>{this._scrollTop=this.container.scrollTop,this._scheduleRender()},this.container=e,this.rowHeight=t.rowHeight,this.overscan=t.overscan??5,this.onRender=t.onRender,this.container.addEventListener("scroll",this._onScroll,{passive:!0})}_scheduleRender(){this._rafId===null&&(this._rafId=requestAnimationFrame(()=>{this._rafId=null;const e=this.getVisibleRange();this.onRender(e.startIndex,e.endIndex)}))}getVisibleRange(){const e=Math.ceil(this._viewportHeight/this.rowHeight),t=Math.max(0,Math.floor(this._scrollTop/this.rowHeight)-this.overscan),s=Math.min(this._totalRows-1,t+e+this.overscan*2),o=t*this.rowHeight;return{startIndex:t,endIndex:s,offsetY:o}}setTotalRows(e){this._totalRows=e,this._updateSpacerHeight(),this._scheduleRender()}setViewportHeight(e){this._viewportHeight=e,this._scheduleRender()}setRowHeight(e){this.rowHeight=e,this._updateSpacerHeight(),this._scheduleRender()}scrollToRow(e){const t=e*this.rowHeight,s=t+this.rowHeight,o=this._scrollTop+this._viewportHeight;if(t<this._scrollTop)this._scrollTop=t,this.container.scrollTop=t;else if(s>o){const i=s-this._viewportHeight;this._scrollTop=i,this.container.scrollTop=i}}getTotalHeight(){return this._totalRows*this.rowHeight}_updateSpacerHeight(){const e=this.container.querySelector(".og-spacer");e&&(e.style.height=`${this.getTotalHeight()}px`)}destroy(){this.container.removeEventListener("scroll",this._onScroll),this._rafId!==null&&cancelAnimationFrame(this._rafId)}}class ue{constructor(e,t=0){this._flatLeaves=[],this._maxDepth=1,this._frozenCount=0,this._columns=e,this._frozenCount=t,this._process()}_process(){const e=[];let t=0;const s=(o,i)=>{for(const n of o)n.children&&n.children.length>0?(s(n.children,i+1),this._maxDepth=Math.max(this._maxDepth,i+1)):e.push({...n,_colIndex:t++,_depth:i,_leaf:!0})};this._maxDepth=1,s(this._columns,1),this._flatLeaves=e}get leaves(){return this._flatLeaves}get visibleLeaves(){return this._flatLeaves.filter(e=>!e.hidden)}get headerDepth(){return this._maxDepth}get frozenCount(){return this._frozenCount}setFrozen(e){this._frozenCount=e}setColumns(e){this._columns=e,this._process()}hideColumn(e){const t=Array.isArray(e)?e:[e];this._flatLeaves.forEach(s=>{t.includes(s.field)&&(s.hidden=!0)})}showColumn(e){const t=Array.isArray(e)?e:[e];this._flatLeaves.forEach(s=>{t.includes(s.field)&&(s.hidden=!1)})}addColumn(e,t="last"){t==="last"?this._columns.push(e):t==="first"?this._columns.unshift(e):this._columns.splice(t,0,e),this._process()}removeColumn(e){const t=s=>s.filter(o=>o.field===e?!1:(o.children&&(o.children=t(o.children)),!0));this._columns=t(this._columns),this._process()}getColumnByField(e){return this._flatLeaves.find(t=>t.field===e)}getColumnByIndex(e){return this._flatLeaves[e]}getColumnIndex(e){return this._flatLeaves.findIndex(t=>t.field===e)}buildHeaderCells(){const e=Array.from({length:this._maxDepth},()=>[]);let t=0;const s=(o,i)=>{let n=0;for(const r of o)if(!r.hidden)if(r.children&&r.children.length>0){const l=s(r.children,i+1);l>0&&(e[i-1].push({column:r,colIndex:t,depth:i,colSpan:l,rowSpan:1}),n+=l)}else e[i-1].push({column:r,colIndex:t++,depth:i,colSpan:1,rowSpan:this._maxDepth-i+1}),n++;return n};return s(this._columns,1),e}computeWidths(e,t=100){const s=this.visibleLeaves,o=s.filter(l=>l.flex),i=s.filter(l=>!l.flex&&l.width).reduce((l,a)=>l+a.width,0),n=o.reduce((l,a)=>l+(a.flex??1),0),r=Math.max(0,e-i);return s.map(l=>l.flex?Math.round(l.flex/n*r):l.width??t)}}class dt{constructor(e,t,s){this._field="",this._outsideHandler=null,this._onApply=t,this._onClear=s,this._el=document.createElement("div"),this._el.className="og-filter-panel",this._el.style.cssText=`
2
- position:absolute;z-index:1000;min-width:200px;max-width:280px;
3
- background:var(--og-row-bg,#fff);border:1px solid var(--og-border-color,#e0e0e0);
4
- border-radius:4px;box-shadow:0 4px 16px rgba(0,0,0,0.15);
5
- padding:10px;box-sizing:border-box;display:none;font-size:13px;
6
- `,e.appendChild(this._el)}open(e,t,s){var k;this._field=e,this._el.innerHTML="";const o=document.createElement("div");o.textContent="필터",o.style.cssText="font-weight:600;margin-bottom:8px;color:var(--og-text-color,#333);",this._el.appendChild(o);const i=document.createElement("div");i.style.cssText="display:flex;gap:4px;margin-bottom:6px;";const n=document.createElement("select");n.style.cssText="flex:1;padding:3px 4px;border:1px solid var(--og-border-color,#e0e0e0);border-radius:3px;font-size:12px;";const r=[{label:"포함",value:"contains"},{label:"같음",value:"="},{label:"같지 않음",value:"!="},{label:"시작",value:"startsWith"},{label:"끝남",value:"endsWith"},{label:"보다 큼",value:">"},{label:"보다 작음",value:"<"},{label:"이상",value:">="},{label:"이하",value:"<="}];for(const m of r){const w=document.createElement("option");w.value=m.value,w.textContent=m.label,n.appendChild(w)}s[0]&&(n.value=s[0].operator),i.appendChild(n),this._el.appendChild(i);const l=document.createElement("input");l.type="text",l.placeholder="필터 값 입력...",l.value=((k=s[0])==null?void 0:k.value)??"",l.style.cssText=`
7
- width:100%;padding:4px 6px;border:1px solid var(--og-border-color,#e0e0e0);
8
- border-radius:3px;font-size:12px;box-sizing:border-box;margin-bottom:8px;
9
- outline:none;
10
- `,l.addEventListener("keydown",m=>{m.key==="Enter"?u.click():m.key==="Escape"&&this.close()}),this._el.appendChild(l);const a=document.createElement("div");a.style.cssText="display:flex;gap:6px;justify-content:flex-end;";const c=document.createElement("button");c.textContent="초기화",c.style.cssText=`
11
- padding:3px 10px;border:1px solid var(--og-border-color,#e0e0e0);
12
- border-radius:3px;background:#fff;cursor:pointer;font-size:12px;color:#666;
13
- `,c.addEventListener("click",()=>{this._onClear(this._field),this.close()});const u=document.createElement("button");u.textContent="적용",u.style.cssText=`
14
- padding:3px 10px;border:1px solid var(--og-primary,#1976d2);
15
- border-radius:3px;background:var(--og-primary,#1976d2);
16
- color:#fff;cursor:pointer;font-size:12px;
17
- `,u.addEventListener("click",()=>{const m=l.value.trim();m?this._onApply(this._field,[{operator:n.value,value:m}]):this._onClear(this._field),this.close()}),a.appendChild(c),a.appendChild(u),this._el.appendChild(a);const h=t.getBoundingClientRect(),g=this._el.parentElement.getBoundingClientRect();this._el.style.top=`${h.bottom-g.top+2}px`,this._el.style.left=`${Math.min(h.left-g.left,g.width-220)}px`,this._el.style.display="block",requestAnimationFrame(()=>l.focus()),this._outsideHandler&&document.removeEventListener("mousedown",this._outsideHandler),this._outsideHandler=m=>{!this._el.contains(m.target)&&m.target!==t&&this.close()},setTimeout(()=>document.addEventListener("mousedown",this._outsideHandler),0)}close(){this._el.style.display="none",this._outsideHandler&&(document.removeEventListener("mousedown",this._outsideHandler),this._outsideHandler=null)}get isOpen(){return this._el.style.display!=="none"}destroy(){this.close(),this._el.remove()}}const ct=10;function ht(d,e=ct){const t=Math.pow(10,e);return Math.round(d*t)/t}class M{constructor(e,t){this._c=e,this._s=t<0?0:t}static from(e){if(e instanceof M)return e;if(typeof e=="bigint")return new M(e,0);const t=String(e).trim();if(!t||t==="null"||t==="undefined"||t==="NaN")return new M(0n,0);const s=t.startsWith("-"),o=s?t.slice(1):t,i=o.indexOf(".");let n,r;if(i===-1)n=BigInt(o),r=0;else{const l=o.slice(i+1);n=BigInt(o.slice(0,i)+l),r=l.length}return new M(s?-n:n,r)}static zero(){return new M(0n,0)}static one(){return new M(1n,0)}static _align(e,t){return e._s===t._s?[e._c,t._c,e._s]:e._s>t._s?[e._c,t._c*10n**BigInt(e._s-t._s),e._s]:[e._c*10n**BigInt(t._s-e._s),t._c,t._s]}add(e){const[t,s,o]=M._align(this,M.from(e));return new M(t+s,o)}sub(e){const[t,s,o]=M._align(this,M.from(e));return new M(t-s,o)}mul(e){const t=M.from(e);return new M(this._c*t._c,this._s+t._s)}div(e,t=20){const s=M.from(e);if(s._c===0n)throw new Error("OGDecimal: division by zero");const i=this._c*10n**BigInt(t+s._s)/s._c;return new M(i,t+this._s)}mod(e){const t=M.from(e),[s,o,i]=M._align(this,t);return new M(s%o,i)}neg(){return new M(-this._c,this._s)}abs(){return new M(this._c<0n?-this._c:this._c,this._s)}eq(e){const[t,s]=M._align(this,M.from(e));return t===s}gt(e){const[t,s]=M._align(this,M.from(e));return t>s}lt(e){const[t,s]=M._align(this,M.from(e));return t<s}gte(e){return!this.lt(e)}lte(e){return!this.gt(e)}isZero(){return this._c===0n}isNeg(){return this._c<0n}isPos(){return this._c>0n}toFixed(e){let t=this._c,s=this._s;if(s<e)t=t*10n**BigInt(e-s);else if(s>e){const c=10n**BigInt(s-e),u=c/2n,h=t<0n,g=h?-t:t,k=g%c;let m=g/c;k>=u&&(m+=1n),t=h?-m:m}s=e;const o=t<0n,n=(o?-t:t).toString().padStart(e+1,"0"),r=n.slice(0,n.length-e)||"0",l=e>0?"."+n.slice(n.length-e):"";return(o?"-":"")+r+l}toString(){if(this._s===0)return this._c.toString();let e=this._c,t=this._s;for(;t>0&&e!==0n&&e%10n===0n;)e/=10n,t--;return new M(e,t).toFixed(t)}toNumber(){return parseFloat(this.toFixed(20))}static sum(e){return e.reduce((t,s)=>t.add(s),M.zero())}static avg(e,t=20){return e.length?M.sum(e).div(e.length,t):M.zero()}static min(e){if(!e.length)throw new Error("OGDecimal.min: empty array");return e.map(M.from).reduce((t,s)=>t.lt(s)?t:s)}static max(e){if(!e.length)throw new Error("OGDecimal.max: empty array");return e.map(M.from).reduce((t,s)=>t.gt(s)?t:s)}}function Ge(d,e,t=30){return new ut(d,e,t).parse()}class ut{constructor(e,t,s){this._ctx=t,this._prec=s,this._pos=0,this._src=e.trim()}parse(){const e=this._additive();if(this._skip(),this._pos<this._src.length)throw new SyntaxError(`FormulaEngine: 예상치 못한 토큰 '${this._src[this._pos]}' (위치 ${this._pos})`);return e}_additive(){let e=this._multiplicative();for(this._skip();this._pos<this._src.length;){const t=this._src[this._pos];if(t!=="+"&&t!=="-")break;this._pos++,this._skip();const s=this._multiplicative();e=t==="+"?e.add(s):e.sub(s),this._skip()}return e}_multiplicative(){let e=this._unary();for(this._skip();this._pos<this._src.length;){const t=this._src[this._pos];if(t!=="*"&&t!=="/"&&t!=="%")break;this._pos++,this._skip();const s=this._unary();t==="*"?e=e.mul(s):t==="/"?e=e.div(s,this._prec):e=e.mod(s),this._skip()}return e}_unary(){return this._skip(),this._src[this._pos]==="-"?(this._pos++,this._unary().neg()):this._primary()}_primary(){this._skip();const e=this._src[this._pos];if(e==="("){this._pos++;const t=this._additive();if(this._skip(),this._src[this._pos]!==")")throw new SyntaxError("FormulaEngine: 닫는 괄호 ) 누락");return this._pos++,t}return e==="["?this._fieldRef():this._literal()}_fieldRef(){this._pos++;const e=this._pos;for(;this._pos<this._src.length&&this._src[this._pos]!=="]";)this._pos++;if(this._pos>=this._src.length)throw new SyntaxError("FormulaEngine: 닫는 ] 누락");const t=this._src.slice(e,this._pos);this._pos++;const s=this._ctx[t];if(s==null)throw new ReferenceError(`FormulaEngine: 필드 '[${t}]'가 행 데이터에 없습니다`);return M.from(s)}_literal(){const e=this._pos;for(;this._pos<this._src.length&&/[0-9.]/.test(this._src[this._pos]);)this._pos++;const t=this._src.slice(e,this._pos);if(!t)throw new SyntaxError(`FormulaEngine: 숫자 또는 [필드]를 기대했지만 '${this._src[this._pos]??"EOF"}' 발견 (위치 ${e})`);return M.from(t)}_skip(){for(;this._pos<this._src.length&&/\s/.test(this._src[this._pos]);)this._pos++}}function Re(d,e){if(d==null||d==="")return d??"";const t=typeof e=="string"?{type:e}:e,s=t.char??"*";switch(t.type){case"ssn":return gt(d,s);case"phone":case"mobile":return pt(d,s);case"email":return _t(d,s);case"credit":return ft(d,s);case"account":return mt(d,s,t.visiblePrefix??3,t.visibleSuffix??4);case"password":return s.repeat(Math.max(d.length,6));case"name":return yt(d,s);case"ip":return wt(d,s);case"partial":return re(d,s,t.visiblePrefix??0,t.visibleSuffix??4);default:return d}}function gt(d,e){const t=d.replace(/[^0-9]/g,"");if(t.length<7){const n=d.includes("-")?"-":"",r=d.indexOf("-")>=0?d.indexOf("-"):6;return d.slice(0,r)+n+e.repeat(Math.max(1,d.length-r-n.length))}const s=t.slice(0,6),o=t[6],i=t.length-7;return`${s}-${o}${e.repeat(i)}`}function pt(d,e){const t=d.replace(/[^0-9]/g,"");return t.length===11?`${t.slice(0,3)}-${e.repeat(4)}-${t.slice(7)}`:t.length===10?t.startsWith("02")?`${t.slice(0,2)}-${e.repeat(4)}-${t.slice(6)}`:`${t.slice(0,3)}-${e.repeat(3)}-${t.slice(6)}`:t.length===9?`${t.slice(0,2)}-${e.repeat(3)}-${t.slice(5)}`:re(d,e,3,4)}function _t(d,e){const t=d.indexOf("@");if(t<0)return re(d,e,2,0);const s=d.slice(0,t),o=d.slice(t),i=Math.min(2,s.length),n=s.slice(0,i),r=Math.max(s.length-i,3);return`${n}${e.repeat(r)}${o}`}function ft(d,e){const t=d.replace(/[^0-9]/g,"");if(t.length<8)return d;const s=t.slice(0,4),o=t.slice(-4),i=t.length-8,n=e.repeat(Math.max(i,8)),r=[s];for(let l=0;l<n.length;l+=4){const a=n.slice(l,l+4);a&&r.push(a)}return r.push(o),r.join("-")}function mt(d,e,t,s){const o=d.replace(/[^0-9]/g,"");if(o.length<=t+s)return re(o,e,t,s);const i=o.slice(0,t),n=o.slice(-s),r=o.length-t-s;return`${i}-${e.repeat(r)}-${n}`}function yt(d,e){const t=d.trim();return t.length===0?d:t.length===1?e:t.length===2?`${t[0]}${e}`:`${t[0]}${e.repeat(t.length-2)}${t[t.length-1]}`}function wt(d,e){const t=d.split(".");if(t.length!==4)return re(d,e,3,0);const s=o=>e.repeat(Math.max(o.length,3));return`${t[0]}.${t[1]}.${s(t[2])}.${s(t[3])}`}function re(d,e,t,s){if(d.length<=t+s)return d;const o=d.slice(0,t),i=s>0?d.slice(-s):"",n=d.length-t-s;return`${o}${e.repeat(n)}${i}`}let oe=null;function bt(d){oe=d}function qe(d){const e=d.column;if(!e.formula)return null;const t=e.formulaPrecision??30;try{let s;return typeof e.formula=="function"?s=e.formula(d.row,M):s=Ge(e.formula,d.row,t),s instanceof M?e.precision!=null?s.toFixed(e.precision):s.toString():typeof s=="string"?s:e.precision!=null?M.from(s).toFixed(e.precision):String(s)}catch(s){return console.warn("[OpenGrid] Formula error:",s),"#ERR"}}function vt(d,e,t,s,o,i){if(oe){const _=oe(d,o??"",i);if(_!=null)return _}if(d==null||d==="")return"";let n=Number(d);if(isNaN(n))return String(d);if(t!=null&&(n=ht(n,t)),s)try{return new Intl.NumberFormat(void 0,{style:"currency",currency:s,...t!=null?{minimumFractionDigits:t,maximumFractionDigits:t}:{}}).format(n)}catch{}if(!e)return t!=null?n.toFixed(t):String(n);const r=e.indexOf(";"),l=r>=0?e.slice(r+1):null,a=n<0&&l!=null?l:r>=0?e.slice(0,r):e,c=n<0&&l!=null?Math.abs(n):n,u=a.match(/[#0][#0,]*(?:\.[#0]+)?/);if(!u)return String(n);const h=u[0],g=a.slice(0,u.index),k=a.slice(u.index+h.length),m=h.includes(","),w=h.includes(".")?h.split(".")[1].length:t??0,x=c.toLocaleString("ko-KR",{minimumFractionDigits:w,maximumFractionDigits:w,useGrouping:m});return g+x+k}function Xe(d,e="yyyy-MM-dd",t,s){if(oe){const l=oe(d,t??"",s);if(l!=null)return l}if(!d)return"";const o=d instanceof Date?d:new Date(d);if(isNaN(o.getTime()))return String(d);const i=o.getFullYear(),n=String(o.getMonth()+1).padStart(2,"0"),r=String(o.getDate()).padStart(2,"0");return e.replace("yyyy",String(i)).replace("MM",n).replace("dd",r)}function xt(d,e,t){const s=Re(d,e.mask),o=document.createElement("span");o.style.cssText="display:flex;align-items:center;gap:3px;overflow:hidden;width:100%;box-sizing:border-box;";const i=document.createElement("span");i.style.cssText="flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:monospace;letter-spacing:0.4px;color:var(--og-mask-text,#888);",i.textContent=s;const n=document.createElement("button");return n.title="클릭하면 원문 표시",n.setAttribute("aria-label","마스킹 해제"),n.innerHTML='<svg width="13" height="13" viewBox="0 0 16 16" fill="currentColor"><path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8z"/><path d="M8 5.5A2.5 2.5 0 1 0 8 10.5 2.5 2.5 0 0 0 8 5.5zm0 4A1.5 1.5 0 1 1 8 6.5a1.5 1.5 0 0 1 0 3z" fill="#fff"/></svg>',n.style.cssText="flex-shrink:0;background:none;border:none;cursor:pointer;color:#c0c0c0;padding:1px 2px;line-height:0;border-radius:3px;display:flex;align-items:center;",n.addEventListener("mouseover",()=>{n.style.color="var(--og-primary,#1976d2)",n.style.background="rgba(25,118,210,0.08)"}),n.addEventListener("mouseout",()=>{n.style.color="#c0c0c0",n.style.background="none"}),n.addEventListener("click",r=>{r.stopPropagation(),i.textContent=d,i.style.fontFamily="",i.style.letterSpacing="",i.style.color="",n.remove(),(e._maskRevealedRows??(e._maskRevealedRows=new Set)).add(t)}),o.appendChild(i),o.appendChild(n),o}class ge{render(e){var l;const t=document.createElement("span");t.className="og-cell-text";const s=qe(e);if(s!==null)return t.textContent=s,t.style.cssText="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;",t;const{value:o,column:i,rowIndex:n}=e;let r;if(i.valueMap&&o!=null&&i.valueMap[o]?r=i.valueMap[o]:r=o==null?"":String(o),i.mask){const a=i._maskRevealed===!0,c=((l=i._maskRevealedRows)==null?void 0:l.has(n))===!0;if(!a&&!c)return xt(r,i,n)}return t.textContent=r,t.style.cssText="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;",t}}class Ct{constructor(e=[],t){this._opts=e.map(s=>typeof s=="string"?{label:s,value:s}:{label:s.label??s.text??String(s.value??""),value:s.value}),this._fn=t??null}render(e){const t=document.createElement("span");t.className="og-cell-text",t.style.cssText="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;";const s=e.value;if(s==null||s==="")return t;const o=String(s),n=(this._fn?this._fn(e.row,e.rowIndex).map(r=>typeof r=="string"?{label:r,value:r}:{label:r.label??r.text??String(r.value??""),value:r.value}):this._opts).find(r=>String(r.value)===o);return t.textContent=n?n.label:o,t}}class pe{render(e){const t=document.createElement("span");t.className="og-cell-number";const s=qe(e);return s!==null?(t.textContent=s,t.style.cssText="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;width:100%;text-align:right;",t):(t.textContent=vt(e.value,e.column.format??"#,##0",e.column.precision,e.column.currency,e.column.field,e.row),t.style.cssText="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;width:100%;text-align:right;",t)}}class _e{render(e){const t=document.createElement("span");return t.className="og-cell-date",t.textContent=Xe(e.value,e.column.format,e.column.field,e.row),t.style.cssText="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;",t}}class fe{render(e){const t=document.createElement("span");t.className="og-cell-checkbox",t.style.cssText="display:flex;align-items:center;justify-content:center;height:100%;";const s=document.createElement("input");return s.type="checkbox",s.checked=!!e.value,s.disabled=!0,s.style.cssText+="cursor:pointer;pointer-events:none;",t.appendChild(s),t}}class De{constructor(e){this.def=e}render(e){var i,n,r;const t=document.createElement("span");t.style.cssText="display:flex;align-items:center;justify-content:center;height:100%;";const s=document.createElement("button");s.className=`og-cell-btn${(i=this.def)!=null&&i.buttonClass?" "+this.def.buttonClass:""}`;const o=(n=this.def)==null?void 0:n.label;return typeof o=="function"?s.textContent=o(e.value,e.row):s.textContent=o??String(e.value??"btn"),s.style.cssText=`
18
- padding:2px 10px;border:1px solid var(--og-primary,#1976d2);
19
- border-radius:4px;background:var(--og-row-bg,#fff);color:var(--og-primary,#1976d2);
20
- cursor:pointer;font-size:12px;white-space:nowrap;transition:background 0.12s;
21
- ${((r=this.def)==null?void 0:r.style)??""}
22
- `,s.addEventListener("mouseover",()=>s.style.background="var(--og-primary-light,#e3f2fd)"),s.addEventListener("mouseout",()=>s.style.background="var(--og-row-bg,#fff)"),t.appendChild(s),t}}class $e{constructor(e,t){this.colorMap=e,this.labelMap=t}render(e){var r,l,a;const t=document.createElement("span");t.style.cssText="display:flex;align-items:center;height:100%;";const s=document.createElement("span"),o=e.value==null?"":String(e.value),i=((r=this.labelMap)==null?void 0:r[o])??((l=e.column.valueMap)==null?void 0:l[o])??o;s.textContent=i;const n=((a=this.colorMap)==null?void 0:a[o])??"#666";return s.style.cssText=`
23
- display:inline-block;padding:2px 8px;border-radius:12px;font-size:11px;
24
- background:${n}22;color:${n};border:1px solid ${n}66;
25
- white-space:nowrap;
26
- `,t.appendChild(s),t}}class Ae{constructor(e,t){this.hrefFn=e,this.target=t}render(e){const t=document.createElement("a");return t.className="og-cell-link",t.textContent=e.value==null?"":String(e.value),t.href=this.hrefFn?this.hrefFn(e.value,e.row):"#",this.target&&(t.target=this.target),t.style.cssText="color:var(--og-primary,#1976d2);text-decoration:underline;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;",this.hrefFn||t.addEventListener("click",s=>s.preventDefault()),t}}class Mt{constructor(e){this.templateFn=e}render(e){const t=document.createElement("div");return t.className="og-cell-template",t.style.cssText="display:flex;align-items:center;height:100%;overflow:hidden;",t.innerHTML=this.templateFn(e.value,e.row,e.rowIndex),t}}class kt{constructor(e){this.def=e}render(e){var a,c,u,h,g;const t=document.createElement("span");t.style.cssText="display:flex;align-items:center;justify-content:center;height:100%;";const s=document.createElement("img"),o=(a=this.def)!=null&&a.srcFn?this.def.srcFn(e.value,e.row):String(e.value??"");s.src=o;const i=((c=this.def)==null?void 0:c.width)??28,n=((u=this.def)==null?void 0:u.height)??28,r=((h=this.def)==null?void 0:h.radius)??4;s.style.cssText=`width:${i}px;height:${n}px;object-fit:cover;border-radius:${r}px;display:block;`;const l=(g=this.def)==null?void 0:g.alt;return s.alt=typeof l=="function"?l(e.value,e.row):l??"",s.onerror=()=>{s.style.display="none"},t.appendChild(s),t}}class Rt{constructor(e){this.def=e}render(e){var a,c,u,h;const t=document.createElement("span");t.style.cssText="display:flex;align-items:center;gap:5px;width:100%;padding:0 4px;box-sizing:border-box;";const s=((a=this.def)==null?void 0:a.max)??100,o=Number(e.value)||0,i=Math.min(100,Math.max(0,o/s*100)),n=(c=this.def)!=null&&c.colorFn?this.def.colorFn(o):((u=this.def)==null?void 0:u.color)??"var(--og-primary,#1976d2)",r=document.createElement("div");r.className="og-progress-track",r.style.cssText="flex:1;height:10px;background:#e0e0e0;border-radius:5px;overflow:hidden;";const l=document.createElement("div");if(l.className="og-progress-fill",l.style.cssText=`width:${i}%;height:100%;background:${n};border-radius:5px;`,r.appendChild(l),t.appendChild(r),((h=this.def)==null?void 0:h.showLabel)!==!1){const g=document.createElement("span");g.style.cssText="font-size:11px;color:#666;white-space:nowrap;min-width:28px;text-align:right;",g.textContent=`${Math.round(i)}%`,t.appendChild(g)}return t}}class Et{constructor(e){this.def=e}render(e){var c,u,h,g;const t=document.createElement("span");t.style.cssText="display:flex;align-items:center;justify-content:center;height:100%;";const s=Array.isArray(e.value)?e.value.map(Number):[];if(!s.length)return t.textContent="-",t;const o=((c=this.def)==null?void 0:c.width)??80,i=((u=this.def)==null?void 0:u.height)??22,n=((h=this.def)==null?void 0:h.color)??"#1976d2",r=((g=this.def)==null?void 0:g.chartType)??"bar",l=document.createElement("canvas");l.width=o,l.height=i,l.style.cssText="display:block;";const a=l.getContext("2d");if(a){const k=Math.max(...s,1),m=Math.min(...s,0),w=k-m||1,x=s.length;if(r==="bar"){const _=o/x;s.forEach((b,L)=>{const v=(b-m)/w*(i-2);a.fillStyle=n,a.fillRect(L*_+1,i-v-1,_-2,v)})}else{const _=s.map((b,L)=>({x:L/(x-1||1)*o,y:i-(b-m)/w*(i-4)-2}));r==="area"&&(a.fillStyle=n+"33",a.beginPath(),a.moveTo(_[0].x,i),_.forEach(b=>a.lineTo(b.x,b.y)),a.lineTo(_[_.length-1].x,i),a.closePath(),a.fill()),a.strokeStyle=n,a.lineWidth=1.5,a.beginPath(),_.forEach((b,L)=>L===0?a.moveTo(b.x,b.y):a.lineTo(b.x,b.y)),a.stroke()}}return t.appendChild(l),t}}class He{render(e){const t=document.createElement("span");t.style.cssText="display:flex;align-items:center;justify-content:center;height:100%;";const s=!!e.value,o=document.createElement("span");o.className="og-switch"+(s?" og-switch--on":""),o.style.cssText=`display:inline-block;width:34px;height:18px;border-radius:9px;
27
- background:${s?"var(--og-primary,#1976d2)":"#bdbdbd"};
28
- position:relative;transition:background 0.2s;cursor:pointer;flex-shrink:0;pointer-events:none;`;const i=document.createElement("span");return i.style.cssText=`position:absolute;top:2px;left:${s?"16px":"2px"};
29
- width:14px;height:14px;border-radius:50%;background:#fff;
30
- transition:left 0.2s;box-shadow:0 1px 3px rgba(0,0,0,0.3);`,o.appendChild(i),t.appendChild(o),t}}class St{constructor(e){this.def=e}render(e){var n,r;const t=document.createElement("span");t.style.cssText="display:flex;align-items:center;gap:1px;height:100%;";const s=((n=this.def)==null?void 0:n.max)??5,o=Math.round(Number(e.value)||0),i=((r=this.def)==null?void 0:r.color)??"#ffa000";for(let l=1;l<=s;l++){const a=document.createElement("span");a.textContent="★",a.style.cssText=`font-size:14px;color:${l<=o?i:"#e0e0e0"};line-height:1;`,t.appendChild(a)}return t}}class me{render(e){const t=document.createElement("span");t.style.cssText="display:flex;align-items:center;justify-content:center;height:100%;pointer-events:none;";const s=document.createElement("input");return s.type="radio",s.checked=!!e.value,s.setAttribute("aria-checked",e.value?"true":"false"),s.setAttribute("aria-label",e.column.header??"선택"),e.column.group&&(s.name=`og-radio-${e.rowIndex}-${e.column.group}`),s.style.cssText="width:14px;height:14px;cursor:pointer;accent-color:var(--og-primary,#1976d2);",t.appendChild(s),t}}class ye{render(e){const t=document.createElement("span");if(t.style.cssText="display:flex;align-items:center;justify-content:center;height:100%;overflow:hidden;",!e.value)return t;const s=document.createElement("img");return s.src=String(e.value),s.alt=e.column.alt??e.column.field,s.style.cssText="max-width:100%;max-height:100%;object-fit:contain;display:block;",s.setAttribute("role","img"),t.appendChild(s),t}}function Lt(d){const e=document.createElement("div");return e.innerHTML=d,e.querySelectorAll("script,iframe,object,embed").forEach(t=>t.remove()),e.querySelectorAll("*").forEach(t=>{for(const s of[...t.attributes])s.name.startsWith("on")&&t.removeAttribute(s.name);if(t.tagName==="A"){const s=t.getAttribute("href")??"";/^javascript:/i.test(s)&&t.removeAttribute("href")}}),e.innerHTML}class we{render(e){const t=document.createElement("span");t.style.cssText="display:block;overflow:hidden;width:100%;";const s=e.column.sanitize!==!1,o=String(e.value??"");return t.innerHTML=s?Lt(o):o,t}}const Ft=["212222","222122","222221","121223","121322","131222","122213","122312","132212","221213","221312","231212","112232","122132","122231","113222","123122","123221","223211","221132","221231","213212","223112","312131","311222","321122","321221","312212","322112","322211","212123","212321","232121","111323","131123","131321","112313","132113","132311","211313","231113","231311","112133","112331","132131","113123","113321","133121","313121","211331","231131","213113","213311","213131","311123","311321","331121","312113","312311","332111","314111","221411","431111","111224","111422","121124","121421","141122","141221","112214","112412","122114","122411","142112","142211","241211","221114","413111","241112","134111","111242","121142","121241","114212","124112","124211","411212","421112","421211","212141","214121","412121","111143","111341","131141","114113","114311","411113","411311","113141","114131","311141","411131","211412","211214","211232"],Tt="2331112";function ze(d){let e="",t=!0;for(const s of d)e+=(t?"1":"0").repeat(+s),t=!t;return e}function Dt(d){const e=[104];for(const s of d){const o=s.charCodeAt(0)-32;o>=0&&o<=94&&e.push(o)}let t=104;for(let s=1;s<e.length;s++)t+=e[s]*s;return e.push(t%103),e.map(s=>ze(Ft[s])).join("")+ze(Tt)+"11"}class be{render(e){const t=String(e.value??""),s=e.column.barcodeHeight??28,o=document.createElement("div");o.style.cssText="display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;overflow:hidden;gap:1px;",o.setAttribute("role","img"),o.setAttribute("aria-label",`바코드: ${t}`),o.innerHTML=$t(t,s);const i=document.createElement("span");return i.textContent=t,i.style.cssText="font-size:9px;font-family:monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;",o.appendChild(i),o}}function $t(d,e){if(!d)return"";const t=Dt(d),s=1.4,o=6,i=t.length*s+o*2,n=[];let r=0,l=o;for(;r<t.length;)if(t[r]==="1"){let a=0;for(;r+a<t.length&&t[r+a]==="1";)a++;n.push(`<rect x="${l.toFixed(2)}" y="0" width="${(a*s).toFixed(2)}" height="${e}"/>`),l+=a*s,r+=a}else l+=s,r++;return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${i.toFixed(2)} ${e}" width="${i.toFixed(2)}" height="${e}" style="display:block" aria-hidden="true"><g fill="currentColor">${n.join("")}</g></svg>`}function At(d){const e=d.renderer;if(!e)switch(d.type){case"number":return new pe;case"date":return new _e;case"boolean":return new fe;case"radio":return new me;case"img":return new ye;case"html":return new we;case"barcode":return new be;case"select":return new Ct(d.options??[],d.optionsFn);default:return new ge}if(typeof e=="string")switch(e){case"number":return new pe;case"date":return new _e;case"checkbox":return new fe;case"button":return new De;case"link":return new Ae;case"badge":return new $e;case"switch":return new He;case"radio":return new me;case"img":return new ye;case"html":return new we;case"barcode":return new be;default:return new ge}switch(e.type){case"button":return new De(e);case"checkbox":return new fe;case"link":return new Ae(e.hrefFn,e.target);case"template":return new Mt(e.templateFn);case"badge":return new $e(e.colorMap,e.labelMap??e.valueMap);case"image":return new kt(e);case"progress":return new Rt(e);case"sparkline":return new Et(e);case"switch":return new He;case"rating":return new St(e);case"number":return new pe;case"date":return new _e;case"radio":return new me;case"img":return new ye;case"html":return new we;case"barcode":return new be;default:return new ge}}class Ht{constructor(e,t,s){this._cellMap=new Map,this._root=e,this._opts=t,this._cbs=s,this._header=D("div","og-header"),this._header.style.cssText="flex-shrink:0;overflow-x:auto;overflow-y:hidden;border:0;border-bottom:1px solid var(--og-border-color,#e0e0e0);scrollbar-width:none;",this._bodyWrap=D("div","og-body-wrapper"),this._bodyWrap.style.cssText="flex:1;overflow:auto;position:relative;",this._bodyWrap.style.setProperty("--scrollbar-size","8px"),this._body=D("div","og-body"),this._body.style.cssText="position:relative;",this._bodyWrap.appendChild(this._body),e.appendChild(this._header),e.appendChild(this._bodyWrap),this._bodyWrap.addEventListener("scroll",()=>{this._header.scrollLeft=this._bodyWrap.scrollLeft},{passive:!0})}get bodyWrapper(){return this._bodyWrap}updateSize(e,t){this._bodyWrap.style.height=`${e-t}px`}getHeaderHeight(){return this._header.offsetHeight}renderHeader(e,t,s,o,i){var g,k;this._header.innerHTML="";const n=i._frozenCount??0;let r=0;i.stateColumn&&(r+=24),i.draggable&&(r+=18),i.rowNumber&&(r+=44),i.checkColumn&&(r+=36);const l=r+t.reduce((m,w,x)=>m+(s[x]??i.defaultColumnWidth),0);this._header.style.background="var(--og-header-bg,#f5f5f5)";const a=D("table","og-header-table");a.setAttribute("role","presentation"),a.style.cssText=`table-layout:fixed;border-collapse:collapse;border-spacing:0;margin:0;width:${l}px;background:var(--og-header-bg,#f5f5f5);`;const c=e.length;let u=0;const h=(m,w,x,_="")=>{const b=D("th",`og-header-cell og-extra-col ${_}`);b.setAttribute("rowspan",String(c)),b.textContent=x,Be(b,{width:`${w}px`,minWidth:`${w}px`,textAlign:"center",borderRight:"1px solid var(--og-border-color,#e0e0e0)",borderBottom:"1px solid var(--og-border-color,#e0e0e0)",borderTop:"0",borderLeft:"0",lineHeight:"normal",verticalAlign:"middle",padding:"0",fontSize:"11px",color:"#999",userSelect:"none",boxSizing:"border-box",background:"var(--og-header-bg,#f5f5f5)"}),n>0&&(b.style.position="sticky",b.style.left=`${u}px`,b.style.zIndex="4"),u+=w,m.appendChild(b)};for(let m=0;m<e.length;m++){const w=D("tr","og-header-row");if(w.style.height=`${i.headerHeight}px`,m===0&&(i.stateColumn&&h(w,24,""),i.draggable&&h(w,18,""),i.rowNumber&&h(w,44,"No"),i.checkColumn)){const x=D("th","og-header-cell og-extra-col");x.setAttribute("rowspan",String(c)),x.style.cssText="width:36px;min-width:36px;text-align:center;border-right:1px solid var(--og-border-color,#e0e0e0);border-bottom:1px solid var(--og-border-color,#e0e0e0);border-top:0;border-left:0;line-height:normal;vertical-align:middle;background:var(--og-header-bg,#f5f5f5);box-sizing:border-box;",n>0&&(x.style.position="sticky",x.style.left=`${u}px`,x.style.zIndex="4"),u+=36;const _=document.createElement("input");_.type="checkbox",_.setAttribute("aria-label","전체 행 선택"),_.style.cssText="width:16px;height:16px;",_.addEventListener("change",()=>this._cbs.onAllCheck(_.checked)),x.appendChild(_),w.appendChild(x)}for(const x of e[m]??[]){const _=D("th","og-header-cell"),b=x.column;x.colSpan>1&&(_.colSpan=x.colSpan),x.rowSpan>1&&(_.rowSpan=x.rowSpan);const L=x.colSpan===1?t.findIndex(p=>p.field===b.field):-1;if(x.colSpan===1){const p=L>=0?s[L]??i.defaultColumnWidth:b.width??i.defaultColumnWidth;_.style.width=`${p}px`,_.style.minWidth=`${p}px`}const v=o.find(p=>p.field===b.field),R=b.sortable!==!1&&i.sortable&&x.colSpan===1;if(_.setAttribute("role","columnheader"),_.setAttribute("scope","col"),R&&(_.setAttribute("aria-sort",v?v.dir==="asc"?"ascending":"descending":"none"),_.tabIndex=L===0?0:-1,_.addEventListener("keydown",p=>{if(p.key==="Enter"||p.key===" ")p.preventDefault(),this._cbs.onHeaderClick(b.field,p.shiftKey);else if(p.key==="ArrowRight"){p.preventDefault();const C=_.nextElementSibling;(C==null?void 0:C.tagName)==="TH"&&C.focus()}else if(p.key==="ArrowLeft"){p.preventDefault();const C=_.previousElementSibling;(C==null?void 0:C.tagName)==="TH"&&C.focus()}})),L>=0&&L<n){let p=0;i.stateColumn&&(p+=24),i.draggable&&(p+=18),i.rowNumber&&(p+=44),i.checkColumn&&(p+=36);for(let C=0;C<L;C++)p+=s[C]??i.defaultColumnWidth;_.classList.add("og-frozen"),L===n-1&&_.classList.add("og-frozen-last"),_.style.left=`${p}px`}const F=b.header??b.field,I=typeof F=="string"&&F.indexOf(`
31
- `)>=0,T=b.headerWrap===!0||I;Be(_,{padding:"4px 8px",boxSizing:"border-box",background:"var(--og-header-bg)",color:"var(--og-header-color)",lineHeight:T?"1.3":"normal",verticalAlign:"middle",fontSize:"var(--og-font-size)",textAlign:b.headerAlign??"center",borderTop:"0",borderLeft:"0",borderRight:"1px solid var(--og-border-color,#e0e0e0)",borderBottom:"1px solid var(--og-border-color,#e0e0e0)",userSelect:"none",cursor:R?"pointer":"default",whiteSpace:T?"normal":"nowrap",overflow:T?"visible":"hidden",textOverflow:T?"clip":"ellipsis",wordBreak:T?"break-word":"normal",position:"relative"}),_.title=(typeof b.tooltip=="string"?b.tooltip:F)??"";const A=D("span");if(T?(A.style.cssText="overflow:visible;text-overflow:clip;white-space:normal;word-break:break-word;",String(F).split(`
32
- `).forEach((C,O)=>{O>0&&A.appendChild(document.createElement("br")),A.appendChild(document.createTextNode(C))})):(A.textContent=F,A.style.cssText="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;"),_.appendChild(A),v){_.classList.add("og-sorted");const p=D("span","og-sort-icon");p.textContent=v.dir==="asc"?" ↑":" ↓",_.appendChild(p)}if(b.filterable!==!1&&i.filterable&&x.colSpan===1){const p=D("span","og-filter-icon"),C=((k=(g=i._activeFilters)==null?void 0:g[b.field])==null?void 0:k.length)>0;p.textContent=C?"⊿":"▿",p.title="필터",p.style.cssText="margin-left:3px;cursor:pointer;font-size:10px;opacity:0.6;",C&&p.classList.add("og-filter-icon--active"),p.addEventListener("click",O=>{O.stopPropagation(),this._cbs.onFilterIconClick(b.field,p)}),_.appendChild(p)}if(b.resizable!==!1){const p=D("div","og-resize-handle");p.style.cssText="position:absolute;right:0;top:0;bottom:0;width:4px;cursor:col-resize;z-index:1;",_.appendChild(p);const C=L;zt(p,_,O=>{C>=0&&this._cbs.onColResize(C,O)})}i.columnReorder&&L>=0&&x.colSpan===1&&(_.draggable=!0,_.addEventListener("dragstart",p=>{var C;this._cbs.onColDragStart(L),_.classList.add("og-col-dragging"),(C=p.dataTransfer)==null||C.setData("text/plain",String(L))}),_.addEventListener("dragend",()=>{_.classList.remove("og-col-dragging"),this._header.querySelectorAll(".og-col-drop-over").forEach(p=>p.classList.remove("og-col-drop-over"))}),_.addEventListener("dragover",p=>{p.preventDefault();const C=this._cbs.getColDragIdx();C!==null&&C!==L&&(this._header.querySelectorAll(".og-col-drop-over").forEach(O=>O.classList.remove("og-col-drop-over")),_.classList.add("og-col-drop-over"))}),_.addEventListener("dragleave",()=>{_.classList.remove("og-col-drop-over")}),_.addEventListener("drop",p=>{p.preventDefault(),_.classList.remove("og-col-drop-over"),this._cbs.onColDrop(L)})),R&&_.addEventListener("click",p=>{p.target.classList.contains("og-resize-handle")||this._cbs.onHeaderClick(b.field,p.shiftKey)}),w.appendChild(_)}a.appendChild(w)}this._header.appendChild(a)}renderBody(e,t,s,o,i,n,r,l,a,c,u=null,h,g,k={},m){var b,L;Object.keys(k).length&&(n={...n,...k}),this._body.innerHTML="",this._cellMap.clear();const w=n.autoHeight===!0;this._body.classList.toggle("og-autoheight",w),this._body.style.height=w?"":`${l}px`;const x=n._frozenCount??0;{let v=0;n.stateColumn&&(v+=24),n.draggable&&(v+=18),n.rowNumber&&(v+=44),n.checkColumn&&(v+=36);const R=v+o.reduce((F,I,T)=>F+(i[T]??n.defaultColumnWidth),0);this._body.style.minWidth=`${R}px`}if(t<e)return;const _=document.createDocumentFragment();for(let v=e;v<=t;v++){const R=u?u[v]:null,F=R&&R._isGroup===!0,I=R&&R._isTree===!0;if(F){const f=R,S=`__${f._groupField}:${f._groupValue}`,H=D("div","og-group-row"),ee=r+(v-e)*n.rowHeight;H.style.cssText=[w?"":`top:${ee}px;height:${n.rowHeight}px;`,"display:flex;align-items:stretch;cursor:pointer;",`padding-left:${4+f._depth*12}px;`,"background:var(--og-header-bg,#f5f5f5);","border:0;border-bottom:1px solid var(--og-border-color,#e0e0e0);"].join(""),H.setAttribute("role","row"),H.setAttribute("aria-expanded",f._expanded?"true":"false"),H.setAttribute("aria-rowindex",String(v+1)),H.setAttribute("aria-level",String(f._depth+1));let j=0;if(n.stateColumn&&(j+=24),n.draggable&&(j+=18),n.rowNumber&&(j+=44),n.checkColumn&&(j+=36),j>0){const y=D("div","og-group-state-cell");y.style.cssText=[`width:${j}px;min-width:${j}px;flex-shrink:0;`,"display:flex;align-items:center;justify-content:center;","font-size:10px;font-weight:700;gap:2px;","border-right:1px solid var(--og-border-color,#e0e0e0);"].join("");const B=f._states??{added:0,edited:0,removed:0};if(B.added>0){const z=D("span");z.textContent=`+${B.added}`,z.style.cssText="color:var(--og-row-added-bg,#2e7d32);background:#e8f5e9;padding:1px 3px;border-radius:3px;",y.appendChild(z)}if(B.edited>0){const z=D("span");z.textContent=`M${B.edited}`,z.style.cssText="color:#e65100;background:#fff8e1;padding:1px 3px;border-radius:3px;",y.appendChild(z)}if(B.removed>0){const z=D("span");z.textContent=`D${B.removed}`,z.style.cssText="color:var(--og-row-removed-bg,#c62828);background:#ffebee;padding:1px 3px;border-radius:3px;",y.appendChild(z)}H.appendChild(y)}let P=!1;for(let y=0;y<o.length;y++){const B=o[y],z=i[y]??n.defaultColumnWidth,ae=f._summaryFmt!==void 0&&B.field in(f._summaryFmt??{}),W=D("div","og-group-cell");if(W.style.cssText=[`width:${z}px;min-width:${z}px;flex-shrink:0;`,"padding:2px 8px;box-sizing:border-box;overflow:hidden;","border-right:1px solid var(--og-border-color,#e0e0e0);","display:flex;align-items:center;","white-space:nowrap;text-overflow:ellipsis;"].join(""),ae){const U=f._summaryFmt[B.field];W.textContent=U!==""?U:"-",W.style.justifyContent="flex-end",W.style.color="var(--og-primary,#1976d2)",W.style.fontWeight="600"}else if(!P){P=!0;const U=D("span","og-group-arrow");U.textContent=f._expanded?"▾ ":"▸ ",U.style.cssText="color:var(--og-primary,#1976d2);margin-right:4px;flex-shrink:0;",W.appendChild(U);const G=D("span","og-group-label");G.textContent=`${f._groupLabel} (${f._childCount}건)`,G.style.cssText="overflow:hidden;text-overflow:ellipsis;font-weight:600;",W.appendChild(G),W.style.gap="0"}H.appendChild(W)}H.addEventListener("click",()=>h==null?void 0:h(S)),_.appendChild(H);continue}const T=I?R:null,A=T?T.data:u?R:s.getRowByIndex(v);if(!A)continue;const $=I||F?"none":s.getRowState(v),p=D("div","og-row");if(p.setAttribute("role","row"),p.setAttribute("aria-rowindex",String(v+1)),!w){const f=r+(v-e)*n.rowHeight;p.style.top=`${f}px`,p.style.height=`${n.rowHeight}px`}let C=v%2===0?"var(--og-row-bg,#fff)":"var(--og-row-alt-bg,#fafafa)";p.style.background=C,$==="added"&&p.classList.add("og-state-added"),$==="edited"&&p.classList.add("og-state-edited"),$==="removed"&&p.classList.add("og-state-removed"),a.has(v)&&p.classList.add("og-selected"),p.setAttribute("aria-selected",a.has(v)?"true":"false"),$==="added"&&(C="var(--og-row-added-bg,#e8f5e9)"),$==="edited"&&(C="var(--og-row-edited-bg,#fff8e1)"),$==="removed"&&(C="var(--og-row-removed-bg,#ffebee)"),a.has(v)&&(C="var(--og-row-selected-bg,#bbdefb)");const O=v;p.addEventListener("click",f=>{this._cbs.onCellClick(O,-1,f)});const le=new Map;let X=0;if(n.stateColumn){const f=D("div","og-cell og-col-state"),S={added:"✚",edited:"✎",removed:"✖",none:""},H={added:"#2e7d32",edited:"#bf360c",removed:"#c62828",none:""};f.textContent=S[$]??"",f.style.color=H[$]??"",f.title=$,x>0&&(f.style.position="sticky",f.style.left=`${X}px`,f.style.zIndex="2",f.style.background=C),X+=24,p.appendChild(f)}const se=this._cbs.getDndManager();if(n.draggable&&se){const f=se.attachHandle(p,v,n._totalRows??t+1);x>0&&(f.style.position="sticky",f.style.left=`${X}px`,f.style.zIndex="2",f.style.background=C),X+=18,p.appendChild(f)}if(n.rowNumber){const f=D("div","og-cell og-col-rownum");f.textContent=String(v+1),x>0&&(f.style.position="sticky",f.style.left=`${X}px`,f.style.zIndex="2",f.style.background=C),X+=44,p.appendChild(f)}if(n.checkColumn){const f=D("div","og-cell og-col-check"),S=document.createElement("input");S.type="checkbox",S.checked=c.has(v),S.setAttribute("aria-label",`${v+1}행 선택`),S.addEventListener("click",H=>H.stopPropagation()),S.addEventListener("change",H=>{H.stopPropagation(),this._cbs.onRowCheck(v,S.checked)}),f.appendChild(S),x>0&&(f.style.position="sticky",f.style.left=`${X}px`,f.style.zIndex="2",f.style.background=C),X+=36,p.appendChild(f)}for(let f=0;f<o.length;f++){const S=o[f],H=i[f]??n.defaultColumnWidth,ee=n.editable&&S.editable!==!1,j=f===0,P=m&&!m.isEmpty?m.getInfo(v,f):null;if(P!=null&&P.hidden){const E=D("div","og-cell og-cell--merge-ph");E.style.cssText=`width:${H}px;min-width:${H}px;flex-shrink:0;visibility:hidden;box-sizing:border-box;`,p.appendChild(E);continue}const y=D("div","og-cell");y.setAttribute("role","gridcell"),y.setAttribute("aria-colindex",String(f+1));const B=(P==null?void 0:P.rowSpan)??1,z=(P==null?void 0:P.colSpan)??1,ae=B>1?B*n.rowHeight:n.rowHeight;let W=H;if(z>1)for(let E=1;E<z;E++)W+=i[f+E]??n.defaultColumnWidth;const U=f<x;let G=0;if(U){n.stateColumn&&(G+=24),n.draggable&&(G+=18),n.rowNumber&&(G+=44),n.checkColumn&&(G+=36);for(let E=0;E<f;E++)G+=i[E]??n.defaultColumnWidth;y.classList.add("og-frozen-cell"),f===x-1&&y.classList.add("og-frozen-last")}y.style.width=`${W}px`,y.style.minWidth=`${W}px`,y.style.maxWidth=`${W}px`,B>1&&(y.style.height=`${ae}px`),U&&(y.style.background=C),T&&j&&(y.style.padding="0"),y.style.overflow="hidden",B>1?(y.style.height=`${ae}px`,y.style.position="absolute",y.style.zIndex="3",y.style.background=C&&C!=="inherit"?C:"var(--og-row-bg, #fff)",y.style.borderTop="0",y.style.borderLeft="0",y.style.borderBottom="1px solid var(--og-border-color, #e0e0e0)"):U&&(y.style.position="sticky",y.style.left=`${G}px`,y.style.zIndex="1"),S.type==="number"||S.align==="right"?y.classList.add("og-cell--right"):S.align==="center"&&y.classList.add("og-cell--center"),ee&&y.classList.add("og-cell--editable"),S.wrap&&y.classList.add("og-cell--wrap"),ee||y.setAttribute("aria-readonly","true"),z>1&&y.setAttribute("aria-colspan",String(z)),B>1&&y.setAttribute("aria-rowspan",String(B)),((b=n._focusCell)==null?void 0:b.ri)===v&&((L=n._focusCell)==null?void 0:L.ci)===f&&(y.classList.add("og-cell-focused"),y.tabIndex=-1);const te=A?A[S.field]:null;y.setAttribute("aria-label",`${S.header}: ${te==null?"":String(te)}`),S.tooltip!=null?y.title=typeof S.tooltip=="function"?String(S.tooltip(te,A)??""):String(S.tooltip):n.tooltips&&te!=null&&te!==""&&(y.title=String(te));let Fe=y;if(T&&j){const E=D("div","og-tree-cell"),q=T._ancestorHasMore??[];for(let K=0;K<T._depth;K++){const Y=D("span","og-tree-guide");q[K]&&Y.classList.add("og-tree-guide--line"),E.appendChild(Y)}if(T._depth>0){const K=D("span","og-tree-connector");K.classList.add(T._isLastChild?"og-tree-connector--last":"og-tree-connector--mid"),E.appendChild(K)}const de=D("span","og-tree-toggle-wrap");if(!T._hasChildren){const K=D("span","og-tree-leaf-dot");de.appendChild(K)}E.appendChild(de);const N=document.createElement("i");if(T._hasChildren){const K=Ie(S.treeNodeIcon,A,!0,T._expanded);N.className=T._expanded?`${K} og-tree-node-icon og-tree-node-icon--branch og-tree-node-icon--open og-tree-node-icon--toggle`:`${K} og-tree-node-icon og-tree-node-icon--branch og-tree-node-icon--toggle`,N.setAttribute("role","button"),N.setAttribute("tabindex","0"),N.setAttribute("aria-expanded",T._expanded?"true":"false"),N.setAttribute("aria-label",T._expanded?"접기":"펼치기"),N.addEventListener("click",Y=>{Y.stopPropagation(),g==null||g(T._treeId)}),N.addEventListener("keydown",Y=>{(Y.key==="Enter"||Y.key===" ")&&(Y.preventDefault(),Y.stopPropagation(),g==null||g(T._treeId))})}else{const K=Ie(S.treeNodeIcon,A,!1,!1);N.setAttribute("aria-hidden","true"),N.className=`${K} og-tree-node-icon og-tree-node-icon--leaf`}E.appendChild(N),y.appendChild(E),Fe=E}if(S.cellStyle){const E=A[S.field],q=typeof S.cellStyle=="function"?S.cellStyle(E,A,v):S.cellStyle;Object.assign(y.style,q)}const it=At(S).render({value:A[S.field],row:A,rowIndex:v,column:S,colIndex:f,isSelected:a.has(v),rowState:$});Fe.appendChild(it);const J=v,Q=f;if(y.addEventListener("click",E=>{E.stopPropagation(),this._cbs.onCellClick(J,Q,E)}),y.addEventListener("dblclick",E=>{E.stopPropagation(),this._cbs.onCellDblClick(J,Q,E)}),y.addEventListener("mouseover",E=>{E.stopPropagation(),this._cbs.onCellMouseOver(J,Q,E)}),y.addEventListener("mouseout",E=>{E.stopPropagation(),this._cbs.onCellMouseOut(J,Q,E)}),y.addEventListener("mousedown",E=>{E.stopPropagation(),this._cbs.onCellMouseDown(J,Q,E)}),y.addEventListener("mouseup",E=>{E.stopPropagation(),this._cbs.onCellMouseUp(J,Q,E)}),y.addEventListener("mousemove",E=>{E.stopPropagation(),this._cbs.onCellMouseMove(J,Q,E)}),le.set(f,y),B>1){const E=document.createElement("div");E.style.cssText=[`width:${H}px;min-width:${H}px;height:${n.rowHeight}px;`,"flex-shrink:0;box-sizing:border-box;","border-right:1px solid var(--og-border-color,#e0e0e0);"].join(""),p.appendChild(E);let q=0;n.stateColumn&&(q+=24),n.draggable&&(q+=18),n.rowNumber&&(q+=44),n.checkColumn&&(q+=36);for(let N=0;N<f;N++)q+=i[N]??n.defaultColumnWidth;const de=r+(v-e)*n.rowHeight;y.style.left=`${q}px`,y.style.top=`${de}px`,_.appendChild(y)}else p.appendChild(y)}this._cellMap.set(v,le),_.appendChild(p)}if(s.rowCount===0){const v=D("div","og-empty-message");v.textContent="데이터가 없습니다.",v.style.cssText="width:100%;",_.appendChild(v)}this._body.appendChild(_)}getCellEl(e,t){var s;return(s=this._cellMap.get(e))==null?void 0:s.get(t)}destroy(){this._root.innerHTML=""}}function Ie(d,e,t,s){let o;return d?typeof d=="function"?o=d(e,t,s):t?o=s?d.branchOpen??"bi-folder2-open":d.branch??"bi-folder2":o=d.leaf??"bi-file-earmark":o=t?s?"bi-folder2-open":"bi-folder2":"bi-file-earmark",o.startsWith("bi ")?o:`bi ${o}`}function D(d,e){const t=document.createElement(d);return e&&(t.className=e),t}function Be(d,e){Object.assign(d.style,e)}function Oe(d,e,t="text/plain;charset=utf-8"){const s=new Blob([d],{type:t}),o=URL.createObjectURL(s),i=document.createElement("a");i.href=o,i.download=e,i.click(),URL.revokeObjectURL(o)}function zt(d,e,t){let s=0,o=0;d.addEventListener("mousedown",i=>{i.stopPropagation(),i.preventDefault(),s=i.clientX,o=e.offsetWidth;const n=l=>{const a=Math.max(40,o+l.clientX-s);e.style.width=`${a}px`,e.style.minWidth=`${a}px`},r=l=>{document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",r),t(Math.max(40,o+l.clientX-s))};document.addEventListener("mousemove",n),document.addEventListener("mouseup",r)})}class It{constructor(e){this._selectedRows=new Set,this._checkedRows=new Set,this._data=e}get selectedRows(){return this._selectedRows}get checkedRows(){return this._checkedRows}selectSingle(e){this._selectedRows.clear(),this._selectedRows.add(e)}selectToggle(e){this._selectedRows.has(e)?this._selectedRows.delete(e):this._selectedRows.add(e)}clearSelection(){this._selectedRows.clear()}check(e,t){t?this._checkedRows.add(e):this._checkedRows.delete(e)}checkAll(e,t){if(e)for(let s=0;s<t;s++)this._checkedRows.add(s);else this._checkedRows.clear()}checkByValue(e,t){for(let s=0;s<this._data.rowCount;s++)t.includes(this._data.getCellValue(s,e))&&this._checkedRows.add(s)}uncheckAll(){this._checkedRows.clear()}checkById(e){}addCheckById(e){}uncheckById(e){}getSelections(){return[...this._selectedRows].map(e=>this._data.getRowByIndex(e)).filter(Boolean)}getChecked(){return[...this._checkedRows].map(e=>({row:this._data.getRowByIndex(e),rowIndex:e}))}getAllChecked(){return this.getChecked().map(e=>e.row)}getActiveRow(){return this._selectedRows.size>0?[...this._selectedRows][0]:-1}activate(e){this._selectedRows.clear(),this._selectedRows.add(e)}deselect(){this._selectedRows.clear()}reset(){this._selectedRows.clear(),this._checkedRows.clear()}}class ve{constructor(){this._onKeyDown=e=>{e.stopPropagation(),e.key==="Enter"?(e.preventDefault(),this._onCommit(this.input.value)):e.key==="Escape"&&this._onCancel()},this._onBlur=()=>{this._onCommit(this.input.value)}}mount(e,t,s,o){this._container=e,this._onCommit=s,this._onCancel=o,e.setAttribute("aria-haspopup","dialog"),e.setAttribute("aria-expanded","true"),this.input=document.createElement("input"),this.input.type="date",this.input.className="og-cell-input",this.input.setAttribute("aria-label",t.column.header??"날짜 선택");const i=t.value;if(i){const n=i instanceof Date?i:new Date(i);isNaN(n.getTime())||(this.input.value=Xe(n,"yyyy-MM-dd"))}this.input.addEventListener("keydown",this._onKeyDown),this.input.addEventListener("blur",this._onBlur),e.appendChild(this.input)}getValue(){var e;return(e=this.input)==null?void 0:e.value}focus(){var e;(e=this.input)==null||e.focus()}destroy(){var e,t,s;(e=this._container)==null||e.setAttribute("aria-expanded","false"),(t=this.input)==null||t.removeEventListener("keydown",this._onKeyDown),(s=this.input)==null||s.removeEventListener("blur",this._onBlur)}}function We(d){return d.map(e=>typeof e=="string"?{label:e,value:e}:{label:e.label??e.text??String(e.value??""),value:e.value})}class xe{constructor(e=[],t){this._options=We(e),this._optionsFn=t??null}mount(e,t,s,o){this._container=e,this._onCommit=s,this._onCancel=o,e.setAttribute("aria-haspopup","listbox"),e.setAttribute("aria-expanded","true"),this.select=document.createElement("select"),this.select.className="og-cell-select",this.select.setAttribute("aria-label",t.column.header??"선택");const i=this._optionsFn?We(this._optionsFn(t.row,t.rowIndex)):this._options;for(const r of i){const l=document.createElement("option");l.value=String(r.value),l.textContent=r.label,this.select.appendChild(l)}const n=t.value==null?"":String(t.value);i.some(r=>String(r.value)===n)&&(this.select.value=n),this.select.addEventListener("change",()=>s(this.select.value)),this.select.addEventListener("blur",()=>s(this.select.value)),this.select.addEventListener("keydown",r=>{r.key==="Escape"&&o()}),e.appendChild(this.select)}getValue(){var e;return(e=this.select)==null?void 0:e.value}focus(){var e;(e=this.select)==null||e.focus()}destroy(){var e;(e=this._container)==null||e.setAttribute("aria-expanded","false")}}class Ce{constructor(){this._onKeyDown=e=>{e.stopPropagation(),e.key==="Enter"||e.key==="Tab"?(e.preventDefault(),this._onCommit(this.input.value)):e.key==="Escape"&&this._onCancel()},this._onBlur=()=>{this._onCommit(this.input.value)}}mount(e,t,s,o){this._onCommit=s,this._onCancel=o,this.input=document.createElement("input"),this.input.type="text",this.input.value=t.value==null?"":String(t.value),this.input.style.cssText=`
33
- width:100%;height:100%;border:none;outline:none;padding:0 8px;
34
- font-size:var(--og-font-size,13px);font-family:var(--og-font-family,sans-serif);
35
- background:var(--og-row-bg,#fff);box-sizing:border-box;
36
- `,this.input.addEventListener("keydown",this._onKeyDown),this.input.addEventListener("blur",this._onBlur),e.appendChild(this.input)}getValue(){var e;return(e=this.input)==null?void 0:e.value}focus(){var e,t;(e=this.input)==null||e.focus(),(t=this.input)==null||t.select()}destroy(){var e,t;(e=this.input)==null||e.removeEventListener("keydown",this._onKeyDown),(t=this.input)==null||t.removeEventListener("blur",this._onBlur)}}class Me{constructor(e){this._onKeyDown=t=>{t.stopPropagation(),t.key==="Enter"||t.key==="Tab"?(t.preventDefault(),this._commit()):t.key==="Escape"&&this._onCancel()},this._onBlur=()=>{this._commit()},this.min=e==null?void 0:e.min,this.max=e==null?void 0:e.max,this.step=e==null?void 0:e.step}mount(e,t,s,o){this._onCommit=s,this._onCancel=o,this.input=document.createElement("input"),this.input.type="number",this.input.value=t.value==null?"":String(t.value),this.min!=null&&(this.input.min=String(this.min)),this.max!=null&&(this.input.max=String(this.max)),this.step!=null&&(this.input.step=String(this.step)),this.input.style.cssText=`
37
- width:100%;height:100%;border:none;outline:none;padding:0 8px;
38
- font-size:var(--og-font-size,13px);text-align:right;
39
- background:var(--og-row-bg,#fff);box-sizing:border-box;
40
- `,this.input.addEventListener("keydown",this._onKeyDown),this.input.addEventListener("blur",this._onBlur),e.appendChild(this.input)}_commit(){const e=this.input.value===""?null:Number(this.input.value);this._onCommit(e)}getValue(){var e,t;return((e=this.input)==null?void 0:e.value)===""?null:Number((t=this.input)==null?void 0:t.value)}focus(){var e,t;(e=this.input)==null||e.focus(),(t=this.input)==null||t.select()}destroy(){var e,t;(e=this.input)==null||e.removeEventListener("keydown",this._onKeyDown),(t=this.input)==null||t.removeEventListener("blur",this._onBlur)}}class ke{mount(e,t,s,o){this._onCommit=s,e.style.cssText+="display:flex;align-items:center;justify-content:center;",this.chk=document.createElement("input"),this.chk.type="checkbox",this.chk.checked=!!t.value,this.chk.style.cursor="pointer",this.chk.addEventListener("change",()=>s(this.chk.checked)),e.appendChild(this.chk)}getValue(){var e;return(e=this.chk)==null?void 0:e.checked}focus(){var e;(e=this.chk)==null||e.focus()}destroy(){}}function Ne(d){const e=d.editor;if(!e)switch(d.type){case"number":return new Me;case"date":return new ve;case"boolean":return new ke;case"select":return new xe(d.options??[],d.optionsFn);default:return new Ce}if(typeof e=="string")switch(e){case"number":return new Me;case"date":return new ve;case"select":return new xe(d.options??[],d.optionsFn);case"checkbox":return new ke;default:return new Ce}switch(e.type){case"number":{const t={};return e.min!=null&&(t.min=e.min),e.max!=null&&(t.max=e.max),e.step!=null&&(t.step=e.step),new Me(t)}case"date":return new ve;case"select":return new xe(e.options??[],d.optionsFn);case"checkbox":return new ke;default:return new Ce}}function ne(d){const e=typeof d.renderer=="string"?d.renderer:d.renderer&&typeof d.renderer=="object"?d.renderer.type:"";return d.type==="boolean"||d.type==="checkbox"||e==="checkbox"||e==="switch"}class Bt{constructor(e){this._activeEditor=null,this._editCell=null,this._focusCell=null,this._dragColIdx=null,this._d=e}get activeEditor(){return this._activeEditor}get editCell(){return this._editCell}get focusCell(){return this._focusCell}get dragColIdx(){return this._dragColIdx}set dragColIdx(e){this._dragColIdx=e}setFocusCell(e,t){this._focusCell={ri:e,ci:t},this._d.scrollToRow(e),this._d.doRender();const s=this._d.getVisibleLeaves()[t],o=this._d.data.getRowByIndex(e);if(s&&o){const i=o[s.field];this._d.announce(`${e+1}행 ${t+1}열, ${s.header}: ${i==null?"빈 값":String(i)}`)}}clearFocusCell(){this._focusCell=null}startEditByKey(e,t){var a,c,u;const s=this._d.getVisibleLeaves()[t];if(!s)return;if(ne(s)){const h=this._d.getOptions();if(s.editable!==!1&&(s.editable!==void 0||h.editable)){const k=this._d.data.getRowByIndex(e);k&&this._d.writeCell(e,s.field,!k[s.field])}return}const o=this._d.data.getRowByIndex(e);if(s.editable===!1||typeof s.editable=="function"&&!s.editable(o,e))return;this.commitEdit();const i=(a=this._d.getRenderer())==null?void 0:a.getCellEl(e,t);if(!i)return;i.innerHTML="";const n=Ne(s);this._activeEditor=n,this._editCell={ri:e,ci:t};const r={type:"editStart",rowIndex:e,columnIndex:t,field:s.field,oldValue:o==null?void 0:o[s.field],newValue:o==null?void 0:o[s.field],row:o,column:s};this._d.emit("editStart",r),(u=(c=this._d.getOptions()).onEditStart)==null||u.call(c,r),i.classList.add("og-editing");const l={value:o==null?void 0:o[s.field],row:o,rowIndex:e,column:s,colIndex:t,isSelected:!0,rowState:"none"};n.mount(i,l,h=>this.commitEditWithValue(e,t,h),()=>this.cancelEdit()),requestAnimationFrame(()=>n.focus())}startEdit(e,t,s){var u,h;const o=this._d.getOptions();if(!o.editable)return;const i=this._d.getVisibleLeaves()[t];if(!i||ne(i))return;const n=this._d.data.getRowByIndex(e);if(i.editable===!1||typeof i.editable=="function"&&!i.editable(n,e)||!i.editable&&!o.editable)return;this.commitEdit();const r=(u=this._d.getRenderer())==null?void 0:u.getCellEl(e,t);if(!r)return;r.innerHTML="";const l=Ne(i);this._activeEditor=l,this._editCell={ri:e,ci:t};const a={type:"editStart",rowIndex:e,columnIndex:t,field:i.field,oldValue:n==null?void 0:n[i.field],newValue:n==null?void 0:n[i.field],row:n,column:i};this._d.emit("editStart",a),(h=o.onEditStart)==null||h.call(o,a),r.classList.add("og-editing");const c={value:n==null?void 0:n[i.field],row:n,rowIndex:e,column:i,colIndex:t,isSelected:!0,rowState:"none"};l.mount(r,c,g=>this.commitEditWithValue(e,t,g),()=>this.cancelEdit()),requestAnimationFrame(()=>l.focus())}commitEdit(){if(!this._activeEditor||!this._editCell)return;const e=this._activeEditor.getValue(),{ri:t,ci:s}=this._editCell;this._finishEdit(t,s,e,!1)}commitEditWithValue(e,t,s){this._finishEdit(e,t,s,!1)}cancelEdit(){if(!this._editCell)return;const{ri:e,ci:t}=this._editCell;this._finishEdit(e,t,void 0,!0)}_finishEdit(e,t,s,o){var r,l,a;if(!this._activeEditor)return;const i=this._d.getVisibleLeaves()[t],n=(r=this._d.getRenderer())==null?void 0:r.getCellEl(e,t);if(n&&(this._activeEditor.destroy(),n.classList.remove("og-editing")),this._activeEditor=null,this._editCell=null,!o&&i){const c=this._d.data.getCellValue(e,i.field);if(s!==c){this._d.data.updateCell(e,i.field,s);const u=this._d.data.getRowByIndex(e),h=this._d.getOptions(),g={type:"editEnd",rowIndex:e,columnIndex:t,field:i.field,oldValue:c,newValue:s,row:u,column:i};this._d.emit("editEnd",g),(l=h.onEditEnd)==null||l.call(h,g),this._d.emit("dataChange",this._d.data.getData()),(a=h.onDataChange)==null||a.call(h,this._d.data.getData())}}this._d.doRender(),requestAnimationFrame(()=>this._d.getContainer().focus({preventScroll:!0}))}}class Ot{constructor(e,t,s,o,i){this._selects=new Map,this._selected={},this._config=t,this._onFilter=s,this._onReset=o,this._el=document.createElement("fieldset"),this._el.className="og-filter-select";const n=document.createElement("legend");n.className="og-filter-select-legend",n.textContent=t.legend??"필터",this._el.appendChild(n);const r=document.createElement("div");r.className="og-filter-select-row";for(const a of t.columns){const c=`og-fsel-${a.field}`,u=document.createElement("div");u.className="og-filter-select-group";const h=document.createElement("label");h.htmlFor=c,h.textContent=a.label,h.className="og-filter-select-label";const g=document.createElement("select");g.id=c,g.className="og-filter-select-sel",g.setAttribute("aria-label",a.label),i&&g.setAttribute("aria-controls",i),a.dependsOn?this._fill(g,[],!1):this._fill(g,this._resolve(a,""),!0),g.addEventListener("change",()=>this._onChange(a.field,g.value)),u.appendChild(h),u.appendChild(g),r.appendChild(u),this._selects.set(a.field,g)}const l=document.createElement("button");l.type="button",l.textContent="초기화",l.className="og-filter-select-reset",l.setAttribute("aria-label","필터 초기화"),l.addEventListener("click",()=>this._reset()),this._el.appendChild(r),this._el.appendChild(l),e.insertBefore(this._el,e.firstChild)}_resolve(e,t){if(e.options)return e.options;let s=e.data??[];e.dependsOn&&e.dependsOnKey&&t&&(s=s.filter(n=>String(n[e.dependsOnKey]??"")===t));const o=e.valueKey??"value",i=e.textKey??o;return s.map(n=>({value:String(n[o]??""),text:String(n[i]??n[o]??"")}))}_fill(e,t,s){e.innerHTML="";const o=document.createElement("option");o.value="",o.textContent="전체",e.appendChild(o);for(const i of t){const n=document.createElement("option");n.value=i.value,n.textContent=i.text,e.appendChild(n)}e.disabled=!s}_onChange(e,t){const s=this._config.columns.find(i=>i.field===e),o=s.filterKey??s.field;t?(this._selected[e]=t,this._onFilter(o,[{operator:"=",value:t}])):(delete this._selected[e],this._onReset(o)),this._cascade(e)}_cascade(e){const t=this._selected[e]??"";for(const s of this._config.columns){if(s.dependsOn!==e)continue;const o=this._selects.get(s.field);if(!o)continue;const i=s.filterKey??s.field;t?(this._fill(o,this._resolve(s,t),!0),o.value="",delete this._selected[s.field],this._onReset(i)):(this._fill(o,[],!1),delete this._selected[s.field],this._onReset(i),this._cascade(s.field))}}_reset(){this._selected={};for(const e of this._config.columns){const t=this._selects.get(e.field),s=e.filterKey??e.field;t&&(e.dependsOn?this._fill(t,[],!1):(t.value="",t.disabled=!1),this._onReset(s))}}reset(){this._reset()}destroy(){this._el.remove()}}class Wt{constructor(e,t,s){this._page=1,this._totalRows=0,this._pageSize=t,this._onChange=s,this._el=document.createElement("div"),this._el.className="og-pagination",this._el.style.cssText=`
41
- display:flex;align-items:center;justify-content:center;gap:4px;
42
- padding:6px 8px;border-top:1px solid var(--og-border-color,#e0e0e0);
43
- background:var(--og-header-bg,#f5f5f5);flex-shrink:0;user-select:none;
44
- font-size:12px;color:var(--og-text-color,#333);
45
- `,e.appendChild(this._el),this._render()}get page(){return this._page}get pageSize(){return this._pageSize}get totalPages(){return Math.max(1,Math.ceil(this._totalRows/this._pageSize))}setTotalRows(e){this._totalRows=e,this._page>this.totalPages&&(this._page=this.totalPages),this._render()}setPageSize(e){this._pageSize=e,this._page=1,this._render(),this._emit()}goTo(e){const t=Math.max(1,Math.min(e,this.totalPages));t!==this._page&&(this._page=t,this._render(),this._emit())}getRange(){const e=(this._page-1)*this._pageSize,t=Math.min(e+this._pageSize-1,this._totalRows-1);return{start:e,end:t}}_emit(){this._onChange({page:this._page,pageSize:this._pageSize,totalRows:this._totalRows,totalPages:this.totalPages})}_render(){this._el.innerHTML="";const e=this.totalPages,t=document.createElement("span");t.style.cssText="display:flex;align-items:center;gap:3px;margin-right:8px;";const s=document.createElement("span");s.textContent="행/페이지:",s.style.color="#888";const o=document.createElement("select");o.style.cssText="padding:2px 4px;border:1px solid var(--og-border-color,#e0e0e0);border-radius:3px;font-size:11px;cursor:pointer;";for(const c of[10,20,50,100,200]){const u=document.createElement("option");u.value=String(c),u.textContent=String(c),c===this._pageSize&&(u.selected=!0),o.appendChild(u)}o.addEventListener("change",()=>this.setPageSize(Number(o.value))),t.appendChild(s),t.appendChild(o),this._el.appendChild(t);const i=document.createElement("span"),{start:n,end:r}=this.getRange();i.textContent=this._totalRows>0?`${n+1}–${r+1} / ${this._totalRows}건`:"0건",i.style.cssText="margin-right:8px;color:#888;",this._el.appendChild(i);const l=(c,u,h)=>{const g=document.createElement("button");return g.textContent=c,g.disabled=h,g.style.cssText=`
46
- min-width:28px;height:24px;padding:0 6px;
47
- border:1px solid var(--og-border-color,#e0e0e0);border-radius:3px;
48
- background:${h?"#f5f5f5":"#fff"};
49
- color:${h?"#bbb":"var(--og-text-color,#333)"};
50
- cursor:${h?"default":"pointer"};font-size:12px;
51
- `,h||g.addEventListener("click",()=>this.goTo(u)),g};this._el.appendChild(l("«",1,this._page===1)),this._el.appendChild(l("‹",this._page-1,this._page===1));const a=Nt(this._page,e);for(const c of a)if(c===-1){const u=document.createElement("span");u.textContent="…",u.style.padding="0 3px",this._el.appendChild(u)}else{const u=l(String(c),c,c===this._page);c===this._page&&(u.style.background="var(--og-primary,#1976d2)",u.style.color="#fff",u.style.borderColor="var(--og-primary,#1976d2)"),this._el.appendChild(u)}this._el.appendChild(l("›",this._page+1,this._page===e)),this._el.appendChild(l("»",e,this._page===e))}destroy(){this._el.remove()}}function Nt(d,e){if(e<=7)return Array.from({length:e},(s,o)=>o+1);const t=[1];d>3&&t.push(-1);for(let s=Math.max(2,d-1);s<=Math.min(e-1,d+1);s++)t.push(s);return d<e-2&&t.push(-1),t.push(e),t}class Kt{constructor(e,t,s,o){this._dx=t-e.left,this._dy=s-e.top;const i=document.createElement("div");i.className="og-drag-ghost",i.style.cssText=`position:fixed;left:0;top:0;width:${e.width}px;height:${Math.min(e.height,40)}px;transform:translate(${e.left}px,${e.top}px);background:rgba(25,118,210,0.12);border:2px dashed #1976d2;box-sizing:border-box;pointer-events:none;z-index:10000;border-radius:3px;opacity:0.92;display:flex;align-items:center;padding-left:10px;font-size:12px;color:#1565c0;font-weight:600;white-space:nowrap;overflow:hidden;`,o>1&&(i.textContent=`${o}개 행 이동`),document.body.appendChild(i),this._el=i}move(e,t){this._el.style.transform=`translate(${e-this._dx}px,${t-this._dy}px)`}destroy(){this._el.remove()}}class Ke{constructor(e="#1976d2"){const t=document.createElement("div");t.className="og-drop-indicator",t.style.cssText="position:absolute;left:0;right:0;display:none;align-items:center;pointer-events:none;z-index:9998;transform:translateY(-50%);";const s=i=>{const n=document.createElement("div"),r=i==="left"?`border-left:7px solid ${e}`:`border-right:7px solid ${e}`;return n.style.cssText=`width:0;height:0;flex-shrink:0;border-top:5px solid transparent;border-bottom:5px solid transparent;${r};`,n},o=document.createElement("div");o.style.cssText=`flex:1;height:3px;background:${e};border-radius:2px;box-shadow:0 0 0 1px rgba(255,255,255,0.7);`,t.append(s("left"),o,s("right")),this._el=t}showIn(e,t){this._el.parentElement!==e&&(this._el.remove(),e.appendChild(this._el)),this._el.style.display="flex",this._el.style.top=`${t}px`}hide(){this._el.style.display="none"}destroy(){this._el.remove()}}const Pe=(d,e,t)=>Math.max(e,Math.min(t,d));class Pt{constructor(e,t,s,o=null,i=()=>1){this._bodyEl=e,this._rowHeight=t,this._onDrop=s,this._cross=o,this._getDragCount=i,this._drag=null,this._selfIndicator=new Ke("#1976d2"),this._crossIndicator=new Ke("#2e7d32"),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this)}attachHandle(e,t,s){const o=document.createElement("div");return o.className="og-drag-handle",o.innerHTML="⠿",o.style.cssText=`
52
- width:18px;min-width:18px;height:100%;
53
- display:flex;align-items:center;justify-content:center;
54
- cursor:grab;font-size:14px;color:#bbb;flex-shrink:0;
55
- user-select:none;border-right:1px solid var(--og-border-color,#e0e0e0);
56
- `,o.addEventListener("mousedown",i=>{i.preventDefault(),i.stopPropagation(),this._startDrag(i,e,t,s)}),o}_startDrag(e,t,s,o){const i=t.getBoundingClientRect(),n=this._getDragCount(s);this._drag={fromIndex:s,bodyEl:this._bodyEl,rowHeight:this._rowHeight,totalRows:o,ghost:new Kt(i,e.clientX,e.clientY,n),currentTarget:s,crossTarget:null},document.addEventListener("mousemove",this._onMouseMove,!0),document.addEventListener("mouseup",this._onMouseUp,!0)}_onMouseMove(e){if(!this._drag)return;const t=this._drag;if(t.ghost.move(e.clientX,e.clientY),this._cross){const i=this._cross.resolveTarget(e.clientX,e.clientY);if(i&&i.bodyEl!==t.bodyEl){const n=i.bodyEl.getBoundingClientRect(),r=e.clientY-n.top+i.bodyEl.scrollTop,l=Pe(Math.round(r/i.rowHeight),0,i.totalRows);t.crossTarget={bodyEl:i.bodyEl,index:l},this._selfIndicator.hide(),this._crossIndicator.showIn(i.bodyEl,l*i.rowHeight);return}}t.crossTarget=null,this._crossIndicator.hide();const s=t.bodyEl.getBoundingClientRect(),o=e.clientY-s.top+t.bodyEl.scrollTop;t.currentTarget=Pe(Math.round(o/t.rowHeight),0,t.totalRows-1),this._selfIndicator.showIn(t.bodyEl,t.currentTarget*t.rowHeight)}_onMouseUp(e){if(document.removeEventListener("mousemove",this._onMouseMove,!0),document.removeEventListener("mouseup",this._onMouseUp,!0),!this._drag)return;const{fromIndex:t,currentTarget:s,ghost:o,crossTarget:i}=this._drag;this._drag=null,o.destroy(),this._selfIndicator.hide(),this._crossIndicator.hide(),i&&this._cross?this._cross.onCrossDrop(t,i.bodyEl,i.index):t!==s&&this._onDrop(t,s)}destroy(){var e;document.removeEventListener("mousemove",this._onMouseMove,!0),document.removeEventListener("mouseup",this._onMouseUp,!0),(e=this._drag)==null||e.ghost.destroy(),this._selfIndicator.destroy(),this._crossIndicator.destroy(),this._drag=null}}class Z{constructor(){this._map=new Map}static _key(e,t){return`${e}:${t}`}applyMergeCells(e){this._map.clear();for(const t of e){const s=Math.max(1,t.rowSpan??1),o=Math.max(1,t.colSpan??1);this._map.set(Z._key(t.row,t.col),{rowSpan:s,colSpan:o,hidden:!1});for(let i=0;i<s;i++)for(let n=0;n<o;n++)i===0&&n===0||this._map.set(Z._key(t.row+i,t.col+n),{rowSpan:1,colSpan:1,hidden:!0})}}applyAutoMerge(e,t,s){var o,i;this._map.clear();for(let n=0;n<t.length;n++){const r=t[n],l=s[n];let a=0;for(let c=1;c<=e.length;c++){const u=(o=e[c-1])==null?void 0:o[l],h=c<e.length?(i=e[c])==null?void 0:i[l]:void 0;if(c===e.length||h!==u){const g=c-a;if(g>1){this._map.set(Z._key(a,r),{rowSpan:g,colSpan:1,hidden:!1});for(let k=a+1;k<c;k++)this._map.set(Z._key(k,r),{rowSpan:1,colSpan:1,hidden:!0})}a=c}}}}getInfo(e,t){return this._map.get(Z._key(e,t))??null}clear(){this._map.clear()}get isEmpty(){return this._map.size===0}}const Vt=[{id:"sort-asc",label:"오름차순 정렬",icon:"↑",action:"sortAsc"},{id:"sort-desc",label:"내림차순 정렬",icon:"↓",action:"sortDesc"},{type:"divider"},{id:"find",label:"찾기",icon:"🔍",action:"find"},{type:"divider"},{id:"excel",label:"Excel로 저장",icon:"📊",action:"excel"},{id:"csv",label:"CSV로 저장",icon:"📄",action:"csv"},{id:"print",label:"인쇄",icon:"🖨",action:"print"}];class jt{constructor(e,t){this._anchor=e,this._actions=t,this._el=null,this._docClick=null,this._docKey=null,this._docScroll=null,this._docMouseMove=null,this._focusIdx=-1}open(e,t){this.close();const s=t??Vt,o=document.createElement("div");o.className="og-context-menu",o.setAttribute("role","menu");for(const r of s){if(r.type==="divider"){const c=document.createElement("div");c.className="og-cm-divider",c.setAttribute("role","separator"),o.appendChild(c);continue}const l=document.createElement("button");if(l.className="og-cm-item",l.setAttribute("role","menuitem"),l.setAttribute("tabindex","-1"),r.disabled&&(l.classList.add("og-cm-disabled"),l.setAttribute("aria-disabled","true")),r.icon){const c=document.createElement("span");if(c.className="og-cm-icon",/^[a-zA-Z][\w-]*(\s+[\w-]+)+$/.test(r.icon.trim())){const u=document.createElement("i");u.className=r.icon,c.appendChild(u)}else c.textContent=r.icon;c.setAttribute("aria-hidden","true"),l.appendChild(c)}const a=document.createElement("span");a.className="og-cm-label",a.textContent=r.label??"",l.appendChild(a),l.addEventListener("click",c=>{c.stopPropagation(),r.disabled||this._runAction(r),this.close()}),o.appendChild(l)}const i=this._anchor.closest("[data-og-theme]"),n=i==null?void 0:i.getAttribute("data-og-theme");n&&o.setAttribute("data-og-theme",n),document.body.appendChild(o),this._el=o,this._docMouseMove=r=>{if(!this._el)return;const l=this._el.getBoundingClientRect();(r.clientX<l.left-4||r.clientX>l.right+4||r.clientY<l.top-4||r.clientY>l.bottom+4)&&this.close()},this._position(o,e.clientX,e.clientY,()=>{this._el===o&&document.addEventListener("mousemove",this._docMouseMove,{capture:!0,passive:!0})}),this._docClick=r=>{o.contains(r.target)||this.close()},this._docKey=r=>{if(r.key==="Escape"){this.close();return}if(r.key==="ArrowDown"){r.preventDefault(),this._moveFocus(1);return}if(r.key==="ArrowUp"){r.preventDefault(),this._moveFocus(-1);return}if(r.key==="Enter"){const l=o.querySelector(".og-cm-item:focus");l==null||l.click()}},this._docScroll=()=>this.close(),setTimeout(()=>{document.addEventListener("click",this._docClick),document.addEventListener("keydown",this._docKey),window.addEventListener("scroll",this._docScroll,{passive:!0})},0),this._focusIdx=-1,this._moveFocus(1)}close(){var e;(e=this._el)==null||e.remove(),this._el=null,this._docClick&&document.removeEventListener("click",this._docClick),this._docKey&&document.removeEventListener("keydown",this._docKey),this._docScroll&&window.removeEventListener("scroll",this._docScroll),this._docMouseMove&&document.removeEventListener("mousemove",this._docMouseMove,{capture:!0}),this._docClick=this._docKey=this._docScroll=this._docMouseMove=null,this._focusIdx=-1}destroy(){this.close()}_position(e,t,s,o){e.style.cssText="position:fixed;visibility:hidden;left:0;top:0;",requestAnimationFrame(()=>{const{width:i,height:n}=e.getBoundingClientRect(),r=window.innerWidth,l=window.innerHeight,a=t+i>r?Math.max(0,t-i):t,c=s+n>l?Math.max(0,s-n):s;e.style.cssText=`position:fixed;left:${a}px;top:${c}px;z-index:9999;`,o==null||o()})}_moveFocus(e){var s;if(!this._el)return;const t=Array.from(this._el.querySelectorAll(".og-cm-item:not(.og-cm-disabled)"));t.length&&(this._focusIdx=(this._focusIdx+e+t.length)%t.length,(s=t[this._focusIdx])==null||s.focus())}_runAction(e){if(typeof e.action=="function"){e.action();return}switch(e.action){case"sortAsc":this._actions.onSortAsc();break;case"sortDesc":this._actions.onSortDesc();break;case"find":this._actions.onFind();break;case"excel":this._actions.onExcel();break;case"csv":this._actions.onCsv();break;case"print":this._actions.onPrint();break}}}class Ve{constructor(e,t){this._sheets=new Map,this._active="",this._onSwitch=t,this._tabBar=this._buildTabBar(e)}add(e,t=[],s=[]){if(this._sheets.has(e))throw new Error(`WorksheetManager: 시트 '${e}'이 이미 존재합니다`);this._sheets.set(e,{name:e,columns:t,data:s}),this._renderTabs(),this._sheets.size===1&&this.switch(e)}remove(e){if(!this._sheets.has(e))return;if(this._sheets.size===1)throw new Error("WorksheetManager: 마지막 시트는 삭제할 수 없습니다");const t=this._active===e;this._sheets.delete(e),this._renderTabs(),t&&this.switch(this._sheets.keys().next().value)}rename(e,t){if(!this._sheets.has(e))return;if(this._sheets.has(t))throw new Error(`WorksheetManager: 시트 '${t}'이 이미 존재합니다`);this._sheets.get(e);const s=Array.from(this._sheets.entries()).map(([o,i])=>o===e?[t,{...i,name:t}]:[o,i]);this._sheets=new Map(s),this._active===e&&(this._active=t),this._renderTabs()}switch(e){const t=this._sheets.get(e);if(!t)throw new Error(`WorksheetManager: 시트 '${e}'을 찾을 수 없습니다`);this._active=e,this._renderTabs(),this._onSwitch(e,t)}get(e){return this._sheets.get(e)}getNames(){return Array.from(this._sheets.keys())}getActive(){return this._active}syncData(e,t){const s=this._sheets.get(e);s&&(s.data=t)}destroy(){this._tabBar.remove()}_buildTabBar(e){const t=document.createElement("div");return t.className="og-sheet-tabs",e.appendChild(t),t}_renderTabs(){this._tabBar.innerHTML="";for(const t of this._sheets.keys()){const s=document.createElement("button");s.className="og-sheet-tab",s.textContent=t,s.setAttribute("role","tab"),s.setAttribute("aria-selected",t===this._active?"true":"false"),t===this._active&&s.classList.add("og-sheet-tab--active"),s.addEventListener("click",()=>{t!==this._active&&this.switch(t)}),s.addEventListener("dblclick",()=>this._startRename(s,t)),this._tabBar.appendChild(s)}const e=document.createElement("button");e.className="og-sheet-add",e.textContent="+",e.setAttribute("aria-label","새 워크시트 추가"),e.addEventListener("click",()=>{const t=`Sheet${this._sheets.size+1}`;this.add(t,[],[]),this.switch(t)}),this._tabBar.appendChild(e)}_startRename(e,t){const s=document.createElement("input");s.className="og-sheet-tab-rename",s.value=t,e.replaceWith(s),s.focus(),s.select();const o=()=>{const i=s.value.trim()||t;try{i!==t?this.rename(t,i):this._renderTabs()}catch{this._renderTabs()}};s.addEventListener("blur",o),s.addEventListener("keydown",i=>{i.key==="Enter"&&s.blur(),i.key==="Escape"&&(s.value=t,s.blur())})}}class Ut{constructor(e){this._d=e}_readCssVar(e){return getComputedStyle(this._d.getContainer()).getPropertyValue(e).trim()}_hexToXlsxRgb(e){const t=e.trim(),s=t.match(/^rgba?\(\s*(\d+),\s*(\d+),\s*(\d+)/i);if(s)return[s[1],s[2],s[3]].map(i=>parseInt(i).toString(16).padStart(2,"0")).join("").toUpperCase();const o=t.replace("#","").toUpperCase();return o.length===3?o[0]+o[0]+o[1]+o[1]+o[2]+o[2]:o.length===6?o:""}exportExcel(e){const t=typeof e=="string"?{filename:e}:e??{};let s=t.filename??"export";s.toLowerCase().endsWith(".xlsx")||(s+=".xlsx");const o=t.sheetName??(this._d.getOptions().ariaLabel||"Sheet1"),i=this._d.getData(),n=this._d.getColLayout().visibleLeaves.filter(a=>{var c;return!((c=t.exceptFields)!=null&&c.includes(a.field))}),r=t.includeHeader!==!1,l=(this._d.getStrategy??((a,c)=>c))("cellSerializer",(a,c,u)=>c.type==="number"&&typeof a=="number"?a:typeof a=="boolean"?a?"✓":"":typeof a=="object"?"":String(a));Promise.resolve().then(()=>require("./xlsx.min-Bx-LxWOf.cjs")).then(a=>a.xlsx_min).then(({utils:a,writeFile:c})=>{var A;const u=[];r&&u.push(n.map($=>$.header));for(const $ of i)u.push(n.map(p=>{const C=$[p.field];if(t.maskOnExport&&p.mask&&this._d.getMaskEnabled(p.field))return Re(C==null?"":String(C),p.mask);const O=C;return O==null||O===""?"":l(O,p,$)}));const h=a.aoa_to_sheet(u),g=this._d.getColWidths(),k=this._d.getColLayout();h["!cols"]=n.map($=>({wpx:g[k.getColumnIndex($.field)]??100})),h["!rows"]=u.map(($,p)=>({hpx:p===0&&r?22:19}));const m=t.styleMode??"theme";let w="1565C0",x="FFFFFF",_="FFFFFF",b="EEF2FF",L="212121",v="BDBDBD",R=10;if(m==="theme"){const $=C=>this._hexToXlsxRgb(C);w=$(this._readCssVar("--og-header-bg"))||w,x=$(this._readCssVar("--og-header-color"))||x,_=$(this._readCssVar("--og-row-bg"))||_,b=$(this._readCssVar("--og-row-alt-bg"))||b,L=$(this._readCssVar("--og-row-color"))||L,v=$(this._readCssVar("--og-border-color"))||v;const p=this._readCssVar("--og-font-size");p&&(R=Math.max(8,Math.round(parseFloat(p)*.75)))}const F=m==="none",I={hdrFont:F?{}:{bold:!0,color:{rgb:x},sz:R,name:"맑은 고딕"},dataFont:F?{}:{sz:R,color:{rgb:L},name:"맑은 고딕"},hdrFill:F?{}:{patternType:"solid",fgColor:{rgb:w}},evenFill:F?{}:{patternType:"solid",fgColor:{rgb:_}},oddFill:F?{}:{patternType:"solid",fgColor:{rgb:b}},hdrBorder:F?{}:{top:{style:"medium",color:{rgb:w}},bottom:{style:"medium",color:{rgb:w}},left:{style:"thin",color:{rgb:w}},right:{style:"thin",color:{rgb:w}}},dataBorder:F?{}:{top:{style:"thin",color:{rgb:v}},bottom:{style:"thin",color:{rgb:v}},left:{style:"thin",color:{rgb:v}},right:{style:"thin",color:{rgb:v}}}};u.forEach(($,p)=>{const C=r&&p===0,le=(r?p-1:p)%2===0;$.forEach((X,se)=>{const f=a.encode_cell({r:p,c:se});h[f]||(h[f]={t:"s",v:""});const S=n[se],H=S.type==="number"||S.align==="right",ee=C?"center":H?"right":S.align??"left";h[f].s={font:C?I.hdrFont:I.dataFont,fill:C?I.hdrFill:le?I.evenFill:I.oddFill,border:C?I.hdrBorder:I.dataBorder,alignment:{horizontal:ee,vertical:"center",wrapText:!1}}})});const T=a.book_new();a.book_append_sheet(T,h,o),c(T,s,{cellStyles:!0}),(A=t.onAfter)==null||A.call(t,new Blob([]))}).catch(()=>{console.error("Excel 내보내기 실패: xlsx 패키지를 확인하세요.")})}exportCsv(e){const t=typeof e=="string"?{filename:e}:e??{},s=this._d.getData(),o=this._d.getColLayout().visibleLeaves,i=o.map(l=>`"${l.header}"`).join(","),n=s.map(l=>o.map(a=>{const c=l[a.field]??"";if(t.maskOnExport&&a.mask&&this._d.getMaskEnabled(a.field))return Re(String(c),a.mask);const u=c;return typeof u=="string"&&u.includes(",")?`"${u}"`:u}).join(",")),r=t.filename??"export.csv";Oe("\uFEFF"+[i,...n].join(`
57
- `),r)}exportJson(e){const t=typeof e=="string"?e:(e==null?void 0:e.filename)??"export.json";Oe(JSON.stringify(this._d.getData(),null,2),t,"application/json")}print(e){const t=(e==null?void 0:e.title)??"OPEN_GRID",s=(e==null?void 0:e.footerText)??"",o=this._d.getData(),i=this._d.getColLayout().visibleLeaves.filter(u=>{var h;return!((h=e==null?void 0:e.excludeFields)!=null&&h.includes(u.field))}),n=i.map(u=>`<th>${u.header??u.field}</th>`).join(""),r=o.map(u=>`<tr>${i.map(h=>`<td>${String(u[h.field]??"")}</td>`).join("")}</tr>`).join(""),l=s?`<div class="og-print-footer">${s}</div>`:"",a=`<!DOCTYPE html>
58
- <html lang="ko"><head>
59
- <meta charset="UTF-8"><title>${t}</title>
60
- <style>
61
- @page{margin:0;}
62
- body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:12px;margin:0;padding:1cm;}
63
- h2{margin:0 0 10px;font-size:14px;color:#333;}
64
- p{margin:0 0 8px;font-size:11px;color:#999;}
65
- table{border-collapse:collapse;width:100%;}
66
- th,td{border:1px solid #ccc;padding:5px 8px;text-align:left;white-space:nowrap;}
67
- th{background:#f5f5f5;font-weight:600;color:#333;}
68
- tr:nth-child(even) td{background:#fafafa;}
69
- .og-print-footer{position:fixed;bottom:0;left:0;right:0;padding:6px 1cm;font-size:10px;color:#888;border-top:1px solid #e5e7eb;background:#fff;text-align:center;}
70
- </style>
71
- </head><body>
72
- <h2>${t}</h2>
73
- <p>${o.length}행 × ${i.length}열 · ${new Date().toLocaleString("ko-KR")}</p>
74
- <table>
75
- <thead><tr>${n}</tr></thead>
76
- <tbody>${r}</tbody>
77
- </table>
78
- ${l}
79
- <script>window.addEventListener('load',()=>{window.print();window.addEventListener('afterprint',()=>window.close());});<\/script>
80
- </body></html>`,c=window.open("","_blank","width=960,height=640");c&&(c.document.write(a),c.document.close())}exportSheetsExcel(e){const t=this._d.getWsManager();if(!t){this.exportExcel(e??"workbook");return}const s=e??"workbook.xlsx",o=(this._d.getStrategy??((i,n)=>n))("cellSerializer",(i,n,r)=>typeof i=="boolean"?i?"✓":"":n.type==="number"&&typeof i=="number"?i:String(i));Promise.resolve().then(()=>require("./xlsx.min-Bx-LxWOf.cjs")).then(i=>i.xlsx_min).then(({utils:i,writeFile:n})=>{const r=i.book_new(),l=this._d.getOptions();for(const a of t.getNames()){const c=t.get(a),u=c.columns.length?c.columns:l.columns,h=[u.map(k=>k.header)];for(const k of c.data)h.push(u.map(m=>{const w=k[m.field];return w==null?"":o(w,m,k)}));const g=i.aoa_to_sheet(h);g["!cols"]=u.map(()=>({wpx:100})),i.book_append_sheet(r,g,a)}n(r,s.endsWith(".xlsx")?s:s+".xlsx",{cellStyles:!0})}).catch(()=>console.error("exportSheetsExcel: xlsx 패키지를 확인하세요."))}}class Gt{constructor(e){this._d=e}fmtNum(e,t){if(!t)return Math.round(e).toLocaleString("ko-KR");const s=t.match(/[#0][#0,]*(?:\.[#0]+)?|\d+/),o=s?t.slice(0,s.index):"",i=s?t.slice(s.index+s[0].length):"",n=s?s[0]:t,r=n.includes("#")||n.includes(","),l=n.match(/\.(\d+)$/),a=l?parseInt(l[1],10):/^\d+$/.test(n)?parseInt(n,10):0,c=Math.abs(e).toFixed(a),[u="0",h]=c.split("."),g=r?u.replace(/\B(?=(\d{3})+(?!\d))/g,","):u,k=h!==void 0?`${g}.${h}`:g,m=`${o}${k}${i}`;return e<0?`-${m}`:m}computeValues(){const e=this._d.getOptions().footer;if(!e||e.length===0)return[];const t=this._d.getData();return e.filter(s=>s.field&&s.op).map(s=>{const o=s.field,i=s.op,n=t.map(h=>h[o]).filter(h=>h!=null&&h!=="");let r=null;const l=i.toUpperCase(),a=(this._d.getStrategy??((h,g)=>g))("summaryOp",null);if(a){const h=a(l,n,o);if(h!=null)return{_field:o,_value:h,_formatted:this.fmtNum(h,s.format)}}if(l==="SUM")r=n.length>0?M.sum(n.map(h=>String(h))):null;else if(l==="AVG")r=n.length>0?M.sum(n.map(h=>String(h))).div(M.from(String(n.length))):null;else if(l==="COUNT"){const h=n.length;return{_field:o,_value:h,_formatted:h.toLocaleString("ko-KR")}}else l==="MAX"?r=n.length>0?M.max(n.map(h=>String(h))):null:l==="MIN"&&(r=n.length>0?M.min(n.map(h=>String(h))):null);if(!r)return{_field:o,_value:null,_formatted:""};const c=r.toNumber(),u=this.fmtNum(c,s.format);return{_field:o,_value:c,_formatted:u}})}render(){var u;const e=this._d.getContainer(),t=e.querySelector(".og-footer-bar");t==null||t.remove();const s=this._d.getOptions(),o=s.footer;if(!o||o.length===0)return;const i=this._d.getColLayout().visibleLeaves,n=this._d.getColWidths()??i.map(h=>h.width??100),r=new Map(this.computeValues().map(h=>[h._field,h])),l=document.createElement("div");l.className="og-footer-bar",l.style.cssText=["display:flex;align-items:stretch;",`min-height:${s.footerHeight}px;`,"border-top:2px solid var(--og-primary,#1976d2);","background:var(--og-header-bg,#f5f5f5);","overflow:hidden;flex-shrink:0;font-size:13px;font-weight:600;"].join("");let a=0;if(s.stateColumn&&(a+=24),s.draggable&&(a+=18),s.rowNumber&&(a+=44),s.checkColumn&&(a+=36),a>0){const h=document.createElement("div");h.style.cssText=`width:${a}px;flex-shrink:0;border-right:1px solid var(--og-border-color,#e0e0e0);`,l.appendChild(h)}let c=0;for(const h of o){const g=Math.max(1,h.colspan??1);let k=0;for(let b=0;b<g;b++)k+=n[c+b]??100;const m=i[c];c+=g;const w=document.createElement("div");w.style.cssText=[`width:${k}px;min-width:${k}px;flex-shrink:0;`,"padding:4px 8px;box-sizing:border-box;overflow:hidden;","border-right:1px solid var(--og-border-color,#e0e0e0);","white-space:nowrap;text-overflow:ellipsis;"].join("");const x=h.field,_=x?r.get(x):null;if(_){const b=_._formatted??String(_._value??""),L=h.label?`${h.label}: `:"";w.textContent=L+b,w.title=`${((u=h.op)==null?void 0:u.toUpperCase())??""} = ${b}`,w.style.color="var(--og-primary,#1976d2)",w.style.textAlign=h.align??((m==null?void 0:m.type)==="number","right")}else h.label&&(w.textContent=h.label,w.style.textAlign=h.align??"left",w.style.color="var(--og-row-color,#212121)");l.appendChild(w)}s.footerPosition==="top"?e.insertBefore(l,e.firstChild):e.appendChild(l)}}class qt{constructor(e){this._d=e}handleKeyDown(e){const t=this._d.getEditMgr();if(t.activeEditor)return;this._d.handleCellKeyEvt("cellKeyDown",e);const s=this._d.getData(),o=this._d.getColLayout(),i=s.rowCount,n=o.visibleLeaves.length;if(i===0||n===0)return;if((e.ctrlKey||e.metaKey)&&e.key==="c"){e.preventDefault(),this._copyToClipboard();return}if((e.ctrlKey||e.metaKey)&&e.key==="v"){e.preventDefault(),this._pasteFromClipboard();return}const r=this._d.getOptions();if((e.ctrlKey||e.metaKey)&&r.draggable&&t.focusCell){if(e.key==="ArrowDown"){e.preventDefault();const l=t.focusCell.ci!==void 0?t.focusCell.ri:0;l<i-1&&(this._d.handleRowDrop(l,l+1),this._d.setFocusCell(l+1,t.focusCell.ci),this._d.announce(`행 ${l+1}을(를) ${l+2}번째 위치로 이동`));return}if(e.key==="ArrowUp"){e.preventDefault();const l=t.focusCell.ri;l>0&&(this._d.handleRowDrop(l,l-1),this._d.setFocusCell(l-1,t.focusCell.ci),this._d.announce(`행 ${l+1}을(를) ${l}번째 위치로 이동`));return}}switch(e.key){case"ArrowDown":{e.preventDefault();const l=t.focusCell,a=l?Math.min(l.ri+1,i-1):0;this._d.setFocusCell(a,(l==null?void 0:l.ci)??0);break}case"ArrowUp":{e.preventDefault();const l=t.focusCell,a=l?Math.max(l.ri-1,0):0;this._d.setFocusCell(a,(l==null?void 0:l.ci)??0);break}case"ArrowRight":{e.preventDefault();const l=t.focusCell;if(!l){this._d.setFocusCell(0,0);break}l.ci<n-1?this._d.setFocusCell(l.ri,l.ci+1):l.ri<i-1&&this._d.setFocusCell(l.ri+1,0);break}case"ArrowLeft":{e.preventDefault();const l=t.focusCell;if(!l){this._d.setFocusCell(0,0);break}l.ci>0?this._d.setFocusCell(l.ri,l.ci-1):l.ri>0&&this._d.setFocusCell(l.ri-1,n-1);break}case"Tab":{e.preventDefault();const l=t.focusCell;if(!l){this._d.setFocusCell(0,0);break}e.shiftKey?l.ci>0?this._d.setFocusCell(l.ri,l.ci-1):l.ri>0&&this._d.setFocusCell(l.ri-1,n-1):l.ci<n-1?this._d.setFocusCell(l.ri,l.ci+1):l.ri<i-1&&this._d.setFocusCell(l.ri+1,0);break}case"Home":{if(e.preventDefault(),e.ctrlKey||e.metaKey)this._d.setFocusCell(0,0);else{const l=t.focusCell;this._d.setFocusCell((l==null?void 0:l.ri)??0,0)}break}case"End":{if(e.preventDefault(),e.ctrlKey||e.metaKey)this._d.setFocusCell(i-1,n-1);else{const l=t.focusCell;this._d.setFocusCell((l==null?void 0:l.ri)??0,n-1)}break}case"PageDown":{e.preventDefault();const l=t.focusCell,a=this._d.getOptions().pageSize??10,c=Math.min(l?l.ri+a:a-1,i-1);this._d.setFocusCell(c,(l==null?void 0:l.ci)??0);break}case"PageUp":{e.preventDefault();const l=t.focusCell,a=this._d.getOptions().pageSize??10,c=l?Math.max(l.ri-a,0):0;this._d.setFocusCell(c,(l==null?void 0:l.ci)??0);break}case" ":{if(t.focusCell){e.preventDefault();const l=t.focusCell.ri,a=this._d.getRowMgr();this._d.getOptions().checkColumn?(a.check(l,!a.checkedRows.has(l)),this._d.doRender()):(a.selectToggle(l),this._d.doRender())}break}case"F2":case"Enter":{t.focusCell&&this._d.getOptions().editable&&(e.preventDefault(),t.startEditByKey(t.focusCell.ri,t.focusCell.ci));break}case"Escape":{t.clearFocusCell(),this._d.doRender();break}}}_copyToClipboard(){var n;if(!this._d.getOptions().clipboard)return;const t=this._d.getEditMgr(),s=this._d.getColLayout(),o=this._d.getData();let i="";if(t.focusCell){const{ri:r,ci:l}=t.focusCell,a=s.visibleLeaves[l];a&&(i=String(o.getCellValue(r,a.field)??""))}else if(this._d.getRowMgr().selectedRows.size>0){const r=s.visibleLeaves;i=[...this._d.getRowMgr().selectedRows].sort((a,c)=>a-c).map(a=>{const c=o.getRowByIndex(a);return r.map(u=>String((c==null?void 0:c[u.field])??"")).join(" ")}).join(`
81
- `)}i&&((n=navigator.clipboard)==null||n.writeText(i).catch(()=>{}))}_pasteFromClipboard(){var s;const e=this._d.getOptions();if(!e.clipboard||!e.editable)return;const t=this._d.getEditMgr();t.focusCell&&((s=navigator.clipboard)==null||s.readText().then(o=>{if(!o)return;const{ri:i,ci:n}=t.focusCell,r=o.split(`
82
- `),l=this._d.getColLayout().visibleLeaves,a=this._d.getData();for(let c=0;c<r.length;c++){const u=r[c].split(" ");for(let h=0;h<u.length;h++){const g=i+c,k=n+h,m=l[k];m&&g<a.rowCount&&a.updateCell(g,m.field,u[h])}}this._d.emit("dataChange",a.getData()),this._d.doRender()}).catch(()=>{}))}}class Xt{constructor(e){this._bar=null,this._input=null,this._count=null,this._filter="",this._d=e}get findFilter(){return this._filter}init(e){const t=document.createElement("div");t.className="og-find-bar",t.hidden=!0;const s=document.createElement("span");s.className="og-find-label",s.textContent="찾기";const o=document.createElement("input");o.type="text",o.className="og-find-input",o.placeholder="검색어 입력...",o.setAttribute("aria-label","그리드 내 검색");const i=document.createElement("span");i.className="og-find-count";const n=document.createElement("button");n.className="og-find-close",n.textContent="✕",n.setAttribute("aria-label","찾기 닫기"),t.appendChild(s),t.appendChild(o),t.appendChild(i),t.appendChild(n),e.insertBefore(t,e.firstChild),o.addEventListener("input",()=>{this._filter=o.value.trim(),this._apply()}),o.addEventListener("keydown",r=>{r.key==="Escape"&&this.close()}),n.addEventListener("click",()=>this.close()),this._bar=t,this._input=o,this._count=i}open(){this._bar&&(this._bar.hidden=!1,this._input.focus(),this._input.select())}close(){this._bar&&(this._bar.hidden=!0,this._filter="",this._input.value="",this._count&&(this._count.textContent=""),this._apply())}_apply(){var o,i;const e=this._d.getData(),t=this._d.getColLayout().visibleLeaves.map(n=>n.field);e.setFindFilter(this._filter,t),e.applyFilter(this._d.getFilters());const s=e.rowCount;(o=this._d.getVs())==null||o.setTotalRows(s),(i=this._d.getPagination())==null||i.setTotalRows(s),this._count&&(this._count.textContent=this._filter?`${s}건`:""),this._d.doRender()}}function Ye(d){return d&&d._isGroup===!0}function je(d,e,t=[],s=new Set,o,i){return e.length?Je(d,e,0,t,s,"",o,i):[]}function Je(d,e,t,s,o,i,n,r){const l=e[t],a=new Map;for(const u of d){const h=r?r(u,e.slice(t)):u[l];a.has(h)||a.set(h,[]),a.get(h).push(u)}const c=[];for(const[u,h]of a){const g=`${i}__${l}:${u}`,k=o.has(g);let m;t<e.length-1?m=Je(h,e,t+1,s,o,g,n,r):m=h;const{summary:w,summaryFmt:x}=Yt(h,s),_=Jt(h,n);c.push({_isGroup:!0,_groupField:l,_groupValue:u,_groupLabel:u==null?"(없음)":String(u),_depth:t,_expanded:k,_childCount:h.length,_summary:w,_summaryFmt:x,_states:_,children:m})}return c}function Yt(d,e){const t={},s={};for(const o of e){const i=d.map(a=>a[o.field]).filter(a=>a!=null&&a!=="");let n=null;const r=o.op.toUpperCase();if(r==="SUM")n=i.length>0?M.sum(i.map(String)):null;else if(r==="AVG")n=i.length>0?M.sum(i.map(String)).div(M.from(String(i.length))):null;else if(r==="COUNT"){t[o.field]=d.length,s[o.field]=d.length.toLocaleString("ko-KR");continue}else r==="MAX"?n=i.length>0?M.max(i.map(String)):null:r==="MIN"&&(n=i.length>0?M.min(i.map(String)):null);if(!n){t[o.field]=null,s[o.field]="";continue}const l=n.toNumber();t[o.field]=l,s[o.field]=Qt(l,o.format)}return{summary:t,summaryFmt:s}}function Jt(d,e){if(!e)return{added:0,edited:0,removed:0};let t=0,s=0,o=0;for(const i of d){const n=e(i);n==="added"?t++:n==="edited"?s++:n==="removed"&&o++}return{added:t,edited:s,removed:o}}function Qt(d,e){if(e==null)return d%1===0?d.toLocaleString("ko-KR"):parseFloat(d.toFixed(6)).toLocaleString("ko-KR",{minimumFractionDigits:2,maximumFractionDigits:6});const t=e.includes("#")||e.includes(","),s=e.match(/\.(\d+)$/),o=s?parseInt(s[1],10):/^\d+$/.test(e)?parseInt(e,10):0,i=Math.abs(d).toFixed(o),[n="0",r]=i.split("."),l=t?n.replace(/\B(?=(\d{3})+(?!\d))/g,","):n,a=r!==void 0?`${l}.${r}`:l;return d<0?`-${a}`:a}function Qe(d){const e=[];for(const t of d)if(e.push(t),t._expanded)for(const s of t.children)Ye(s)?e.push(...Qe([s])):e.push(s);return e}function Ze(d,e=""){const t=[];for(const s of d){const o=`${e}__${s._groupField}:${s._groupValue}`;t.push(o);const i=s.children.filter(n=>Ye(n));i.length&&t.push(...Ze(i,o))}return t}function Ee(d,e,t=new Set){const{idField:s,parentIdField:o,expandOnLoad:i=!1}=e,n=new Map,r=[];for(const c of d){const u=c[s],h={_isTree:!0,_treeId:u,_treeParentId:c[o],_depth:0,_expanded:i||t.has(u),_hasChildren:!1,_childCount:0,_isLastChild:!1,_ancestorHasMore:[],data:c,children:[]};n.set(u,h)}for(const c of n.values()){const u=c._treeParentId;if(u==null||u===""||!n.has(u))r.push(c);else{const g=n.get(u);g.children.push(c),g._hasChildren=!0}}function l(c,u){for(const h of c)h._depth=u,h._childCount=et(h),l(h.children,u+1)}l(r,0);function a(c,u){for(let h=0;h<c.length;h++){const g=c[h],k=h===c.length-1;g._isLastChild=k,g._ancestorHasMore=u,g.children.length>0&&a(g.children,[...u,!k])}}return a(r,[]),r}function et(d){let e=d.children.length;for(const t of d.children)e+=et(t);return e}function tt(d){const e=[];for(const t of d)e.push(t),t._expanded&&t.children.length>0&&e.push(...tt(t.children));return e}function Zt(d,e){d.has(e)?d.delete(e):d.add(e)}function Se(d){const e=[];for(const t of d)e.push(t._treeId),t.children.length&&e.push(...Se(t.children));return e}class es{constructor(e){this._groupFields=[],this._groupExpandedKeys=new Set,this._groupFlatRows=[],this._isGroupMode=!1,this._treeRoots=[],this._treeFlatRows=[],this._treeExpandedKeys=new Set,this._isTreeMode=!1,this._d=e}get isGroupMode(){return this._isGroupMode}get isTreeMode(){return this._isTreeMode}get groupFlatRows(){return this._groupFlatRows}get treeFlatRows(){return this._treeFlatRows}groupBy(e){this._groupFields=e,this._groupExpandedKeys.clear(),this._isGroupMode=e.length>0,this.rebuildGroups()}clearGroup(){var t;this._groupFields=[],this._groupExpandedKeys.clear(),this._isGroupMode=!1,this._groupFlatRows=[];const e=this._d.getData().length;(t=this._d.getVs())==null||t.setTotalRows(e),this._d.doRender()}expandAll(){if(!this._isGroupMode)return;const e=je(this._d.getData(),this._groupFields,this._getSummaryDefs(),void 0,void 0,this._groupKeyFn());Ze(e).forEach(t=>this._groupExpandedKeys.add(t)),this.rebuildGroups()}_groupKeyFn(){return this._d.getStrategy?this._d.getStrategy("groupKeyFn",void 0):void 0}collapseAll(){this._groupExpandedKeys.clear(),this._isGroupMode&&this.rebuildGroups()}handleGroupToggle(e){this._groupExpandedKeys.has(e)?this._groupExpandedKeys.delete(e):this._groupExpandedKeys.add(e),this.rebuildGroups()}rebuildGroups(){var i;const e=this._d.getData(),t=this._d.getDataLayer(),s=n=>{const r=e.indexOf(n);return r>=0?t.getRowState(r):"none"},o=je(e,this._groupFields,this._getSummaryDefs(),this._groupExpandedKeys,s,this._groupKeyFn());this._groupFlatRows=Qe(o),(i=this._d.getVs())==null||i.setTotalRows(this._groupFlatRows.length),this._d.doRenderFull(this._groupFlatRows.length)}enableTree(){this._isTreeMode=!0,this._isGroupMode=!1;const e=this._d.getOptions();if(e.expandOnLoad){const t=Ee(this._d.getData(),{idField:e.treeId,parentIdField:e.treeParentId});Se(t).forEach(s=>this._treeExpandedKeys.add(s))}this.rebuildTree()}disableTree(){var t;this._isTreeMode=!1,this._treeRoots=[],this._treeFlatRows=[],this._treeExpandedKeys.clear();const e=this._d.getData().length;(t=this._d.getVs())==null||t.setTotalRows(e),this._d.doRender()}expandNodes(e,t=!0){const s=Array.isArray(e)?e:[e];for(const o of s)t?this._treeExpandedKeys.add(o):this._treeExpandedKeys.delete(o);this._isTreeMode&&this.rebuildTree()}expandAllNodes(){this._isTreeMode&&(Se(this._treeRoots).forEach(e=>this._treeExpandedKeys.add(e)),this.rebuildTree())}collapseAllNodes(){this._isTreeMode&&(this._treeExpandedKeys.clear(),this.rebuildTree())}handleTreeToggle(e){Zt(this._treeExpandedKeys,e),this.rebuildTree()}rebuildTree(){var t;const e=this._d.getOptions();this._treeRoots=Ee(this._d.getData(),{idField:e.treeId,parentIdField:e.treeParentId,expandOnLoad:e.expandOnLoad},this._treeExpandedKeys),this._treeFlatRows=tt(this._treeRoots),(t=this._d.getVs())==null||t.setTotalRows(this._treeFlatRows.length),this._d.doRenderFull(this._treeFlatRows.length)}_getSummaryDefs(){const e=this._d.getOptions().summary;if(!e)return[];if(e.rows&&e.rows.length>0)return e.fields.flatMap(s=>e.rows.map(o=>({field:s,op:o.op,format:o.format})));const t=Array.isArray(e.ops)?e.ops:e.ops?[e.ops]:["SUM"];return e.fields.map(s=>({field:s,op:t[0]??"SUM",format:e.format}))}}class ts{constructor(e){this._sortList=[],this._filters={},this._d=e}get sortList(){return this._sortList}get filters(){return this._filters}handleSortClick(e,t){var r;const s=this._d.getOptions();if(!s.sortable)return;const o=this._sortList.findIndex(l=>l.field===e);if(o>=0){const l=this._sortList[o];l.dir==="asc"?l.dir="desc":this._sortList.splice(o,1)}else(!t||!s.multiSort)&&(this._sortList=[]),this._sortList.push({field:e,dir:"asc"});this._d.getData().applySort(this._sortList),this._d.renderHeader(),this._d.doRender();const i=this._sortList.find(l=>l.field===e),n=i?i.dir==="asc"?"오름차순":"내림차순":"정렬 해제";this._d.announce(`${e} ${n} 정렬`),this._d.emit("sortChange",{sortList:this._sortList}),(r=s.onSortChange)==null||r.call(s,{field:e,dir:(i==null?void 0:i.dir)??"asc",sortList:this._sortList})}sort(e,t="asc"){if(Array.isArray(e))this._sortList=e;else{const s=this._sortList.findIndex(o=>o.field===e);s>=0?this._sortList[s].dir=t:this._sortList=[{field:e,dir:t}],this._d.getOptions().multiSort||(this._sortList=this._sortList.slice(-1))}this._d.getData().applySort(this._sortList),this._d.renderHeader(),this._d.doRender(),this._d.emit("sortChange",{sortList:this._sortList})}resetSort(){this._sortList=[],this._d.getData().applySort([]),this._d.renderHeader(),this._d.doRender()}initSort(e){this._sortList=[...e],this._d.getData().applySort(this._sortList)}getSortState(){return[...this._sortList]}setFilter(e,t){var s,o;this._filters[e]=t,this.applyFilters(),this._d.renderHeader(),this._d.doRender(),this._d.emit("filterChange",{field:e,filterItems:t,allFilters:this._filters}),(o=(s=this._d.getOptions()).onFilterChange)==null||o.call(s,{field:e,filterItems:t,allFilters:this._filters})}resetFilter(e){e?delete this._filters[e]:this._filters={},this.applyFilters(),this._d.renderHeader(),this._d.doRender()}getFilterState(){return{...this._filters}}restoreFilter(e){this._filters={...e},this.applyFilters()}applyFilters(){var s,o;const e=this._d.getData();e.setFindFilter(this._d.getFindFilter(),this._d.getColLayout().visibleLeaves.map(i=>i.field)),e.applyFilter(this._filters);const t=e.rowCount;(s=this._d.getVs())==null||s.setTotalRows(t),(o=this._d.getPagination())==null||o.setTotalRows(t)}}class ss{constructor(e){this._d=e}handleCellClick(e,t,s){var a,c,u,h,g,k,m;const o=this._d.getOptions(),i=this._d.getRowMgr(),n=this._d.getEditMgr();o.selection==="single"||o.selection==="row"?i.selectSingle(e):o.selection==="multiple"&&(s.ctrlKey||s.metaKey?i.selectToggle(e):i.selectSingle(e));const r=this._d.getData().getRowByIndex(e),l=this._d.getColLayout().visibleLeaves[t];if(r&&l){const w=l.editable!==!1&&(l.editable!==void 0||o.editable);if(ne(l)&&w){const R=r[l.field];this._d.writeCell(e,l.field,!R)}if(l.type==="radio"){const R=l.group;for(const F of this._d.getColLayout().visibleLeaves)F.type==="radio"&&F.field!==l.field&&(!R||F.group===R)&&this._d.getData().updateCell(e,F.field,!1);this._d.writeCell(e,l.field,!0)}let x=r[l.field];if(x===void 0&&l.formula)try{const R=l.formulaPrecision??30,F=Ge(l.formula,r,R);x=F instanceof M?l.precision!=null?F.toFixed(l.precision):F.toString():String(F)}catch{}const _={type:"cellClick",rowIndex:e,columnIndex:t,field:l.field,value:x,row:r,column:l,target:s.target,originalEvent:s};this._d.emit("cellClick",_),(a=o.onCellClick)==null||a.call(o,_);const b={type:"rowClick",rowIndex:e,row:r,target:s.target,originalEvent:s};this._d.emit("rowClick",b),(c=o.onRowClick)==null||c.call(o,b);const L=l.type==="select";!(n.activeEditor!=null&&((u=n.editCell)==null?void 0:u.ri)===e&&((h=n.editCell)==null?void 0:h.ci)===t)&&(o.editMode==="click"||L)&&!ne(l)&&n.startEdit(e,t,s)}n.activeEditor&&((g=n.editCell)==null?void 0:g.ri)===e&&((k=n.editCell)==null?void 0:k.ci)===t||(this._d.doRender(),this._d.emit("selectionChange",{rows:i.getSelections(),rowIndexes:[...i.selectedRows]}),(m=o.onSelectionChange)==null||m.call(o,{rows:i.getSelections(),rowIndexes:[...i.selectedRows],cells:[]}))}handleCellDblClick(e,t,s){var a,c;const o=this._d.getData().getRowByIndex(e),i=this._d.getColLayout().visibleLeaves[t];if(!o||!i)return;const n=this._d.getOptions(),r={type:"cellDblClick",rowIndex:e,columnIndex:t,field:i.field,value:o[i.field],row:o,column:i,target:s.target,originalEvent:s};this._d.emit("cellDblClick",r),(a=n.onCellDblClick)==null||a.call(n,r);const l={type:"rowDblClick",rowIndex:e,row:o,target:s.target,originalEvent:s};this._d.emit("rowDblClick",l),(c=n.onRowDblClick)==null||c.call(n,l),n.editMode==="dblclick"&&this._d.getEditMgr().startEdit(e,t,s)}handleCellMouseOver(e,t,s){var a,c;const o=this._d.getData().getRowByIndex(e),i=this._d.getColLayout().visibleLeaves[t];if(!o||!i)return;const n=this._d.getOptions(),r={type:"cellMouseOver",rowIndex:e,columnIndex:t,field:i.field,value:o[i.field],row:o,column:i,target:s.target,originalEvent:s};this._d.emit("cellMouseOver",r),(a=n.onCellMouseOver)==null||a.call(n,r);const l={type:"rowMouseOver",rowIndex:e,row:o,target:s.target,originalEvent:s};this._d.emit("rowMouseOver",l),(c=n.onRowMouseOver)==null||c.call(n,l)}handleCellMouseOut(e,t,s){var a,c;const o=this._d.getData().getRowByIndex(e),i=this._d.getColLayout().visibleLeaves[t];if(!o||!i)return;const n=this._d.getOptions(),r={type:"cellMouseOut",rowIndex:e,columnIndex:t,field:i.field,value:o[i.field],row:o,column:i,target:s.target,originalEvent:s};this._d.emit("cellMouseOut",r),(a=n.onCellMouseOut)==null||a.call(n,r);const l={type:"rowMouseOut",rowIndex:e,row:o,target:s.target,originalEvent:s};this._d.emit("rowMouseOut",l),(c=n.onRowMouseOut)==null||c.call(n,l)}handleCellMouseDown(e,t,s){var a,c;const o=this._d.getData().getRowByIndex(e),i=this._d.getColLayout().visibleLeaves[t];if(!o||!i)return;const n=this._d.getOptions(),r={type:"cellMouseDown",rowIndex:e,columnIndex:t,field:i.field,value:o[i.field],row:o,column:i,target:s.target,originalEvent:s};this._d.emit("cellMouseDown",r),(a=n.onCellMouseDown)==null||a.call(n,r);const l={type:"rowMouseDown",rowIndex:e,row:o,target:s.target,originalEvent:s};this._d.emit("rowMouseDown",l),(c=n.onRowMouseDown)==null||c.call(n,l)}handleCellMouseUp(e,t,s){var a,c;const o=this._d.getData().getRowByIndex(e),i=this._d.getColLayout().visibleLeaves[t];if(!o||!i)return;const n=this._d.getOptions(),r={type:"cellMouseUp",rowIndex:e,columnIndex:t,field:i.field,value:o[i.field],row:o,column:i,target:s.target,originalEvent:s};this._d.emit("cellMouseUp",r),(a=n.onCellMouseUp)==null||a.call(n,r);const l={type:"rowMouseUp",rowIndex:e,row:o,target:s.target,originalEvent:s};this._d.emit("rowMouseUp",l),(c=n.onRowMouseUp)==null||c.call(n,l)}handleCellMouseMove(e,t,s){var a,c;const o=this._d.getData().getRowByIndex(e),i=this._d.getColLayout().visibleLeaves[t];if(!o||!i)return;const n=this._d.getOptions(),r={type:"cellMouseMove",rowIndex:e,columnIndex:t,field:i.field,value:o[i.field],row:o,column:i,target:s.target,originalEvent:s};this._d.emit("cellMouseMove",r),(a=n.onCellMouseMove)==null||a.call(n,r);const l={type:"rowMouseMove",rowIndex:e,row:o,target:s.target,originalEvent:s};this._d.emit("rowMouseMove",l),(c=n.onRowMouseMove)==null||c.call(n,l)}handleCellKeyEvt(e,t){var c,u,h;const s=this._d.getEditMgr();if(!s.focusCell||s.activeEditor)return;const{ri:o,ci:i}=s.focusCell,n=this._d.getData().getRowByIndex(o),r=this._d.getColLayout().visibleLeaves[i];if(!n||!r)return;const l=this._d.getOptions(),a={type:e,rowIndex:o,columnIndex:i,field:r.field,value:n[r.field],row:n,column:r,key:t.key,target:this._d.getContainer(),originalEvent:t};this._d.emit(e,a),e==="cellKeyDown"?(c=l.onCellKeyDown)==null||c.call(l,a):e==="cellKeyUp"?(u=l.onCellKeyUp)==null||u.call(l,a):(h=l.onCellKeyPress)==null||h.call(l,a)}}class is{constructor(){this._triggers=new Map}add(e,t){this._triggers.has(e)||this._triggers.set(e,[]),this._triggers.get(e).push(t)}remove(e,t){const s=this._triggers.get(e);if(s){const o=s.indexOf(t);o>=0&&s.splice(o,1)}}clear(e){e?this._triggers.delete(e):this._triggers.clear()}mkCtx(e,t){let s=!1;return{operation:e,args:t,result:void 0,extra:{},timestamp:Date.now(),get cancelled(){return s},cancel(){s=!0}}}exec(e,t){const s=this._triggers.get(e)??[];for(const o of s)if(o(t),t.cancelled)return!1;if(e.startsWith("after:")){const o=this._triggers.get("complete")??[];for(const i of o)i(t)}return!0}}const he="";function st(d){const e=Object.entries(d).filter(([,t])=>t!==he).map(([t,s])=>` ${JSON.stringify(t)}: src[${JSON.stringify(s)}],`);return`// crossGridMapping 옵션에 이 함수를 그대로 지정하세요.
83
- function mapRow(src) {
84
- return {
85
- `+e.join(`
86
- `)+(e.length?`
87
- `:"")+` };
88
- }`}function os(d){return e=>{const t={};for(const[s,o]of Object.entries(d))o!==he&&(t[s]=e[o]);return t}}function ns(d,e){if(d.length!==e.length)return!1;const t=new Set(e);return d.every(s=>t.has(s))}function rs(d,e){return new Promise(t=>{const s=new Set(d.map(R=>R.field)),o={};for(const R of e)o[R.field]=s.has(R.field)?R.field:he;const i=document.createElement("div");i.className="og-mapper-overlay",i.setAttribute("role","dialog"),i.setAttribute("aria-modal","true"),i.setAttribute("aria-label","그리드 필드 매핑"),i.style.cssText="position:fixed;inset:0;z-index:100000;background:rgba(0,0,0,0.45);display:flex;align-items:center;justify-content:center;font-family:var(--og-font-family,-apple-system,sans-serif);";const n=document.createElement("div");n.style.cssText="background:#fff;border-radius:10px;box-shadow:0 12px 40px rgba(0,0,0,0.3);width:min(620px,92vw);max-height:88vh;overflow:auto;color:#222;",i.appendChild(n);const r=document.createElement("div");r.style.cssText="padding:18px 20px 8px;",r.innerHTML='<div style="font-size:16px;font-weight:700;">필드 매핑</div><div style="font-size:12.5px;color:#666;margin-top:4px;line-height:1.5;">두 그리드의 필드 구조가 다릅니다. <b>타깃 필드</b>마다 어떤 <b>소스 필드</b>의 값을 가져올지 지정하세요. 아래 스크립트를 복사해 <code>crossGridMapping</code> 에 baking 하면 다음부터는 이 창 없이 자동 변환됩니다.</div>',n.appendChild(r);const l=document.createElement("div");l.style.cssText="padding:6px 20px;";const a='<option value="">(비움)</option>'+d.map(R=>`<option value="${ie(R.field)}">${ie(R.header)} &lt;${ie(R.field)}&gt;</option>`).join("");for(const R of e){const F=document.createElement("div");F.style.cssText="display:flex;align-items:center;gap:10px;padding:7px 0;border-bottom:1px solid #f0f0f0;";const I=document.createElement("div");I.style.cssText="flex:1;font-size:13px;min-width:0;",I.innerHTML=`<span style="font-weight:600;">${ie(R.header)}</span><span style="color:#999;font-size:11.5px;"> &lt;${ie(R.field)}&gt;</span>`;const T=document.createElement("span");T.textContent="←",T.style.cssText="color:#888;flex-shrink:0;";const A=document.createElement("select");A.style.cssText="flex:1;min-width:0;padding:6px 8px;border:1px solid #ccc;border-radius:6px;font-size:13px;background:#fff;",A.innerHTML=a,A.value=o[R.field]??he,A.addEventListener("change",()=>{o[R.field]=A.value,m()}),F.append(I,T,A),l.appendChild(F)}n.appendChild(l);const c=document.createElement("div");c.style.cssText="padding:10px 20px 4px;";const u=document.createElement("div");u.style.cssText="display:flex;align-items:center;justify-content:space-between;margin-bottom:6px;",u.innerHTML='<span style="font-size:12.5px;font-weight:600;color:#444;">생성된 변환 스크립트</span>';const h=document.createElement("button");h.type="button",h.textContent="복사",h.style.cssText="font-size:12px;padding:4px 10px;border:1px solid #ccc;border-radius:6px;background:#f7f7f7;cursor:pointer;",u.appendChild(h);const g=document.createElement("pre");g.style.cssText="margin:0;background:#0d1117;color:#c9d1d9;padding:12px;border-radius:8px;font-family:ui-monospace,Consolas,monospace;font-size:12px;line-height:1.5;overflow:auto;max-height:180px;",c.append(u,g),n.appendChild(c);function k(){return st(o)}function m(){g.textContent=k()}m(),h.addEventListener("click",()=>{var F;const R=k();(F=navigator.clipboard)==null||F.writeText(R).then(()=>{h.textContent="복사됨!",setTimeout(()=>h.textContent="복사",1200)},()=>{h.textContent="복사 실패",setTimeout(()=>h.textContent="복사",1200)})});const w=document.createElement("div");w.style.cssText="display:flex;justify-content:flex-end;gap:8px;padding:14px 20px 18px;";const x=document.createElement("button");x.type="button",x.textContent="취소",x.style.cssText="font-size:13px;padding:8px 16px;border:1px solid #ccc;border-radius:7px;background:#fff;cursor:pointer;";const _=document.createElement("button");_.type="button",_.textContent="적용 후 이동",_.style.cssText="font-size:13px;padding:8px 16px;border:0;border-radius:7px;background:#1976d2;color:#fff;cursor:pointer;font-weight:600;",w.append(x,_),n.appendChild(w);let b=!1;function L(R){b||(b=!0,document.removeEventListener("keydown",v),i.remove(),t(R))}function v(R){R.key==="Escape"&&L(null)}x.addEventListener("click",()=>L(null)),i.addEventListener("mousedown",R=>{R.target===i&&L(null)}),_.addEventListener("click",()=>L({mapping:{...o},script:k()})),document.addEventListener("keydown",v),document.body.appendChild(i),_.focus()})}function ie(d){return String(d).replace(/[&<>"]/g,e=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[e])}class ls{constructor(){this._map=new Map}register(e,t){this._map.set(e,t)}unregister(e){this._map.delete(e)}get(e){return this._map.get(e)}get size(){return this._map.size}resolveAt(e,t,s){const o=document.elementFromPoint(e,t),i=o==null?void 0:o.closest(".og-body-wrapper");if(!i)return null;const n=this._map.get(i);return!n||n===s?null:n}}const ce=new ls;class as{constructor(e,t){this._originals=new Map,this._hadOwn=new Map,this._stack=new Map,this._strategies=new Map,this._callPath=[],this._host=e,this._strict=(t==null?void 0:t.strict)??!0,this._maxDepth=(t==null?void 0:t.maxDepth)??32}override(e,t,s={}){if(typeof t!="function")throw new TypeError(`OverrideKernel.override: fn for "${e}" must be a function`);if(!this._originals.has(e)){const i=this._host[e];if(typeof i!="function")throw new TypeError(`OverrideKernel.override: host["${e}"] is not a function`);this._hadOwn.set(e,Object.prototype.hasOwnProperty.call(this._host,e)),this._originals.set(e,i.bind(this._host))}const o=this._stack.get(e)??[];return o.push({fn:t,opts:s}),this._stack.set(e,o),this._host[e]=this._buildDispatcher(e),this._host}_buildDispatcher(e){var a;const t=this._originals.get(e),s=this._stack.get(e)??[],o=s.reduce((c,u)=>(...h)=>u.fn(c,...h),t),i=((a=s[s.length-1])==null?void 0:a.opts)??{},n=i.reentrant===!0,r=i.onError==="fallback",l=this;return function(...c){if(!n&&l._callPath.indexOf(e)!==-1)return t(...c);if(l._callPath.length>=l._maxDepth){if(l._strict&&!r)throw new Error(`OverrideKernel: max override depth (${l._maxDepth}) exceeded at "${e}"`);return t(...c)}l._callPath.push(e);try{return o(...c)}catch(u){if(r&&!l._strict)return console.warn(`[og.override:${e}]`,u),t(...c);if(r&&l._strict)return console.warn(`[og.override:${e}]`,u),t(...c);throw u}finally{l._callPath.pop()}}}strategy(e,t){if(typeof t!="function")throw new TypeError(`OverrideKernel.strategy: fn for "${e}" must be a function`);return this._strategies.set(e,t),this._host}getStrategy(e,t){return this._strategies.get(e)??t}hasStrategy(e){return this._strategies.has(e)}restore(e){return this._originals.has(e)?(this._hadOwn.get(e)?this._host[e]=this._originals.get(e):delete this._host[e],this._originals.delete(e),this._hadOwn.delete(e),this._stack.delete(e),this._host):this._host}restoreAll(){for(const e of[...this._originals.keys()])this.restore(e);return this._strategies.clear(),this._callPath=[],this._host}hasOverride(e){return this._originals.has(e)}getOverrideNames(){return[...this._originals.keys()]}}const Ue="_ogRowId",V=class V extends ot{constructor(e,t){var i;super(),this._vs=null,this._ro=null,this._renderer=null,this._trigMgr=new is,this._destroyed=!1,this._autoHeightWarned=!1,this._colWidths=[],this._userWidths=new Map,this._filterPanel=null,this._filterSelect=null,this._pagination=null,this._dnd=null,this._mergeEngine=new Z,this._liveRegion=null,this._ctxMenu=null,this._cmHandler=null,this._cmKbdHandler=null,this._wsManager=null;const s=typeof e=="string"?document.querySelector(e):e;if(!s)throw new Error(`OpenGrid: container not found: ${e}`);this._container=s,this._options={height:"100%",width:"100%",rowHeight:32,headerHeight:34,footerHeight:30,autoHeight:!1,fillWidth:!1,defaultColumnWidth:100,editable:!1,editMode:"dblclick",history:!0,historySize:100,selection:"single",clipboard:!0,sortable:!0,multiSort:!0,filterable:!0,defaultSort:[],frozenColumns:0,frozenRows:0,rowNumber:!1,stateColumn:!1,checkColumn:!1,draggable:!1,crossGrid:!1,crossGridMapping:"auto",mergeCells:!1,groupBy:[],summary:void 0,treeMode:"auto",treeId:"id",treeParentId:"parentId",expandOnLoad:!1,pagination:!1,pageSize:50,footer:void 0,footerPosition:"bottom",theme:"default",cssVars:{},ariaLabel:"OPEN_GRID 데이터 그리드",...t},this._data=new rt(Ue),this._rowMgr=new It(this._data),this._colLayout=new ue(this._options.columns,this._options.frozenColumns),this._editMgr=new Bt({data:this._data,colLayout:this._colLayout,getRenderer:()=>this._renderer,getContainer:()=>this._container,getOptions:()=>this._options,emit:(n,...r)=>this.emit(n,...r),doRender:()=>this._doRender(...this._visRange()),announce:n=>this._announce(n),writeCell:(n,r,l)=>this.writeCell(n,r,l),scrollToRow:n=>{var r;return(r=this._vs)==null?void 0:r.scrollToRow(n)},getVisibleLeaves:()=>this._colLayout.visibleLeaves}),this._exportMgr=new Ut({getData:()=>this._data.getData(),getColLayout:()=>this._colLayout,getColWidths:()=>this._colWidths,getOptions:()=>this._options,getContainer:()=>this._container,getMaskEnabled:n=>this.getMaskEnabled(n),getWsManager:()=>this._wsManager,getStrategy:(n,r)=>this._ovk.getStrategy(n,r)}),this._footerMgr=new Gt({getData:()=>this._data.getData(),getColLayout:()=>this._colLayout,getColWidths:()=>this._colWidths,getOptions:()=>this._options,getContainer:()=>this._container,getStrategy:(n,r)=>this._ovk.getStrategy(n,r)}),this._kbdMgr=new qt({getEditMgr:()=>this._editMgr,getRowMgr:()=>this._rowMgr,getData:()=>this._data,getColLayout:()=>this._colLayout,getOptions:()=>this._options,setFocusCell:(n,r)=>this._setFocusCell(n,r),handleRowDrop:(n,r)=>this._handleRowDrop(n,r),doRender:()=>this._doRender(...this._visRange()),announce:n=>this._announce(n),emit:(n,...r)=>this.emit(n,...r),visRange:()=>this._visRange(),handleCellKeyEvt:(n,r)=>this._handleCellKeyEvt(n,r)}),this._sfMgr=new ts({getData:()=>this._data,getColLayout:()=>this._colLayout,getFindFilter:()=>this._findMgr.findFilter,getVs:()=>this._vs,getPagination:()=>this._pagination,getOptions:()=>this._options,renderHeader:()=>this._renderHeader(),doRender:()=>this._doRender(...this._visRange()),announce:n=>this._announce(n),emit:(n,...r)=>this.emit(n,...r)}),this._findMgr=new Xt({getColLayout:()=>this._colLayout,getData:()=>this._data,getFilters:()=>this._sfMgr.filters,getVs:()=>this._vs,getPagination:()=>this._pagination,doRender:()=>this._doRender(...this._visRange())}),this._cellEvt=new ss({getData:()=>this._data,getColLayout:()=>this._colLayout,getOptions:()=>this._options,getEditMgr:()=>this._editMgr,getRowMgr:()=>this._rowMgr,emit:(n,...r)=>this.emit(n,...r),writeCell:(n,r,l)=>this.writeCell(n,r,l),doRender:()=>this._doRender(...this._visRange()),getContainer:()=>this._container}),this._grpMgr=new es({getData:()=>this._data.getData(),getDataLayer:()=>this._data,getOptions:()=>this._options,getVs:()=>this._vs,doRenderFull:n=>this._doRender(0,n-1),doRender:()=>this._doRender(...this._visRange()),getStrategy:(n,r)=>this._ovk.getStrategy(n,r)}),this._ovk=new as(this,{strict:this._options.overrideStrict??!0}),this._data.setStrategyResolver((n,r)=>this._ovk.getStrategy(n,r)),bt((n,r,l)=>{var a;return((a=this._ovk.getStrategy("displayFormatter",null))==null?void 0:a(n,r,l))??null}),this._mount(),this._bindOptionEvents(),(i=this._options.defaultSort)!=null&&i.length&&this._sfMgr.initSort(this._options.defaultSort),this.override=Object.assign((n,r,l)=>this._ovk.override(n,r,l),{strategy:(n,r)=>this._ovk.strategy(n,r)});const o=this.destroy.bind(this);this.destroy=()=>{try{o()}finally{this._ovk.restoreAll()}};for(const[n,r]of V._defaultStrategies)this._ovk.strategy(n,r);for(const[n,r,l]of V._defaultOverrides)this._ovk.override(n,r,l);requestAnimationFrame(()=>{var n,r;this.emit("ready",this),(r=(n=this._options).onReady)==null||r.call(n,this)})}static defaultOverride(e,t,s={}){return V._defaultOverrides.push([e,t,s]),V}restore(e){return this._ovk.restore(e),this}restoreAll(){return this._ovk.restoreAll(),this}hasOverride(e){return this._ovk.hasOverride(e)}getOverrideNames(){return this._ovk.getOverrideNames()}getStrategy(e,t){return this._ovk.getStrategy(e,t)}_mount(){var s,o;this._container.classList.add("og-container");const e=this._options.height,t=this._options.width;this._container.style.height=typeof e=="number"?`${e}px`:String(e),this._container.style.width=typeof t=="number"?`${t}px`:String(t),this._container.style.display="flex",this._container.style.flexDirection="column",this._container.style.overflow="hidden",this._container.style.boxSizing="border-box",this._container.style.border="1px solid var(--og-border-color, #e0e0e0)",this._container.style.fontFamily="var(--og-font-family, -apple-system, sans-serif)",this._container.style.fontSize="var(--og-font-size, 13px)",this._container.setAttribute("data-og-theme",this._options.theme);for(const[i,n]of Object.entries(this._options.cssVars))this._container.style.setProperty(i,n);this._renderer=new Ht(this._container,this._options,{onHeaderClick:(i,n)=>this._handleSortClick(i,n),onCellClick:(i,n,r)=>this._handleCellClick(i,n,r),onCellDblClick:(i,n,r)=>this._handleCellDblClick(i,n,r),onCellMouseOver:(i,n,r)=>this._handleCellMouseOver(i,n,r),onCellMouseOut:(i,n,r)=>this._handleCellMouseOut(i,n,r),onCellMouseDown:(i,n,r)=>this._handleCellMouseDown(i,n,r),onCellMouseUp:(i,n,r)=>this._handleCellMouseUp(i,n,r),onCellMouseMove:(i,n,r)=>this._handleCellMouseMove(i,n,r),onRowCheck:(i,n)=>this._handleRowCheck(i,n),onAllCheck:i=>this._handleAllCheck(i),onColResize:(i,n)=>this._handleColResize(i,n),onFilterIconClick:(i,n)=>this._handleFilterIconClick(i,n),getDndManager:()=>this._dnd,onColDragStart:i=>{this._editMgr.dragColIdx=i},onColDrop:i=>{this._editMgr.dragColIdx!==null&&this._editMgr.dragColIdx!==i&&this._reorderColumn(this._editMgr.dragColIdx,i),this._editMgr.dragColIdx=null},getColDragIdx:()=>this._editMgr.dragColIdx}),this._filterPanel=new dt(this._container,(i,n)=>this.setFilter(i,n),i=>this.resetFilter(i)),this._container.setAttribute("role","grid"),this._container.setAttribute("aria-label",this._options.ariaLabel??((s=this._options.cssVars)==null?void 0:s["aria-label"])??"OPEN_GRID 데이터 그리드"),this._container.setAttribute("aria-rowcount","0"),this._container.setAttribute("aria-colcount",String(this._options.columns.filter(i=>!i.hidden).length)),this._liveRegion=document.createElement("div"),this._liveRegion.setAttribute("aria-live","polite"),this._liveRegion.setAttribute("aria-atomic","true"),this._liveRegion.className="og-live-region",this._container.insertAdjacentElement("beforebegin",this._liveRegion),this._container.tabIndex=0,this._container.addEventListener("keydown",i=>this._handleKeyDown(i)),this._container.addEventListener("keyup",i=>this._handleCellKeyEvt("cellKeyUp",i)),this._container.addEventListener("keypress",i=>this._handleCellKeyEvt("cellKeyPress",i)),this._vs=new at(this._renderer.bodyWrapper,{rowHeight:this._options.rowHeight,onRender:(i,n)=>this._doRender(i,n)}),ce.register(this._renderer.bodyWrapper,this),this._options.draggable&&(this._dnd=new Pt(this._renderer.bodyWrapper,this._options.rowHeight,(i,n)=>this._handleRowDrop(i,n),this._options.crossGrid?{resolveTarget:(i,n)=>{const r=ce.resolveAt(i,n,this);return!r||!r._options.crossGrid?null:{bodyEl:r._crossBodyEl(),rowHeight:r._options.rowHeight,totalRows:r._data.rowCount}},onCrossDrop:(i,n,r)=>this._handleCrossGridDrop(i,n,r)}:void 0,i=>this._dragRowSet(i).length)),this._options.pagination&&(this._pagination=new Wt(this._container,this._options.pageSize,i=>{this.emit("pageChange",i),this._doRender(...this._visRange())})),this._findMgr.init(this._container),this._initContextMenu(),(o=this._options.worksheets)!=null&&o.length&&this._initWorksheets(),this._ro=new ResizeObserver(()=>this._onResize()),this._ro.observe(this._container),this._onResize()}_initContextMenu(){const e=this._options.contextMenu;e!==!1&&(this._cmHandler&&this._container.removeEventListener("contextmenu",this._cmHandler),this._cmKbdHandler&&this._container.removeEventListener("keydown",this._cmKbdHandler),this._cmHandler=this._cmKbdHandler=null,this._ctxMenu=new jt(this._container,{onSortAsc:()=>{const t=this._colLayout.visibleLeaves[0];t&&this.orderBy(t.field,"asc")},onSortDesc:()=>{const t=this._colLayout.visibleLeaves[0];t&&this.orderBy(t.field,"desc")},onFind:()=>this._findMgr.open(),onExcel:()=>this.exportExcel(),onCsv:()=>this.exportCsv(),onPrint:()=>this.print()}),this._cmHandler=t=>{var r;const s=t.target.closest(".og-cell");if(!s)return;t.preventDefault();const o=Number(s.dataset.colIndex??-1),i=this._colLayout.visibleLeaves[o];i&&this._ctxMenu&&(this._ctxMenu._actions.onSortAsc=()=>this.orderBy(i.field,"asc"),this._ctxMenu._actions.onSortDesc=()=>this.orderBy(i.field,"desc"));const n=Array.isArray(e)?e:void 0;(r=this._ctxMenu)==null||r.open(t,n)},this._container.addEventListener("contextmenu",this._cmHandler),this._cmKbdHandler=t=>{var s;if(t.shiftKey&&t.key==="F10"){t.preventDefault();const o=this._container.getBoundingClientRect(),i={clientX:o.left+80,clientY:o.top+40};(s=this._ctxMenu)==null||s.open(i)}},this._container.addEventListener("keydown",this._cmKbdHandler))}openContextMenu(e,t){var s;(s=this._ctxMenu)==null||s.open(e,t)}closeContextMenu(){var e;(e=this._ctxMenu)==null||e.close()}setFilterSelect(e){var t;(t=this._filterSelect)==null||t.destroy(),this._filterSelect=null,e&&(this._container.id||(this._container.id=`og-${Math.random().toString(36).slice(2,7)}`),this._filterSelect=new Ot(this._container,e,(s,o)=>this.setFilter(s,o),s=>this.resetFilter(s),this._container.id))}setOptions(e){var t;if(Object.assign(this._options,e),"contextMenu"in e&&((t=this._ctxMenu)==null||t.destroy(),this._ctxMenu=null,this._initContextMenu()),"groupBy"in e||"summary"in e){const s=e.groupBy??[];s.length>0?this._grpMgr.groupBy(s):this.clearGroup();return}this._renderHeader(),this._doRender(...this._visRange())}setMaskEnabled(e,t){var o;const s=this._colLayout.getColumnByField(e);s&&(t?(s._maskRevealed=!1,(o=s._maskRevealedRows)==null||o.clear()):s._maskRevealed=!0,this._doRender(...this._visRange()))}getMaskEnabled(e){const t=this._colLayout.getColumnByField(e);return t?t._maskRevealed!==!0:!1}_initWorksheets(){const e=this._options.worksheets;this._wsManager=new Ve(this._container,(t,s)=>{this._data.setData(s.data),this._colLayout=new ue(s.columns.length?s.columns:this._options.columns,this._options.frozenColumns),this._doRender(...this._visRange()),this._renderHeader()});for(const t of e)this._wsManager.add(t.name,t.columns??this._options.columns,t.data??[])}addWorksheet(e,t,s){this._wsManager||(this._wsManager=new Ve(this._container,(o,i)=>{this._data.setData(i.data),this._colLayout=new ue(i.columns.length?i.columns:this._options.columns,this._options.frozenColumns),this._doRender(...this._visRange()),this._renderHeader()})),this._wsManager.add(e,t??this._options.columns,s??[])}removeWorksheet(e){var t;(t=this._wsManager)==null||t.remove(e)}switchWorksheet(e){var t;(t=this._wsManager)==null||t.switch(e)}renameWorksheet(e,t){var s;(s=this._wsManager)==null||s.rename(e,t)}getWorksheet(e){var t;return(t=this._wsManager)==null?void 0:t.get(e)}getWorksheetNames(){var e;return((e=this._wsManager)==null?void 0:e.getNames())??[]}exportSheetsExcel(e){this._exportMgr.exportSheetsExcel(e)}_paginationHeight(){return this._options.pagination?38:0}_onResize(){const{width:e}=this._container.getBoundingClientRect();e&&(this._recalcWidths(e),this._renderHeader(),this._doRender(...this._visRange()))}_recalcWidths(e){this._colWidths=this._colLayout.computeWidths(e-(this._options.stateColumn?24:0)-(this._options.draggable?18:0)-(this._options.rowNumber?44:0)-(this._options.checkColumn?36:0),this._options.defaultColumnWidth),this._userWidths.size&&this._colLayout.visibleLeaves.forEach((t,s)=>{const o=this._userWidths.get(t.field);o!=null&&(this._colWidths[s]=o)})}_renderHeader(){var e;(e=this._renderer)==null||e.renderHeader(this._colLayout.buildHeaderCells(),this._colLayout.visibleLeaves,this._colWidths,this._sfMgr.sortList,{...this._options,_activeFilters:this._sfMgr.filters,_frozenCount:this._colLayout.frozenCount}),this._syncHeaderLayout()}_syncHeaderLayout(){if(!this._renderer||!this._vs)return;const{height:e}=this._container.getBoundingClientRect();if(!e)return;const t=this._renderer.getHeaderHeight(),s=t>this._options.headerHeight?t:this._options.headerHeight;this._renderer.updateSize(e-this._paginationHeight(),s),this._vs.setViewportHeight(e-s-this._paginationHeight())}_doRender(e,t){var i;if(!this._renderer||!this._vs)return;const s=this._vs.getVisibleRange(),o=this._options.autoHeight===!0;o&&([e,t]=this._visRange(),!this._autoHeightWarned&&t-e+1>2e3&&(this._autoHeightWarned=!0,console.warn(`[OpenGrid] autoHeight 는 가상 스크롤이 아니라 전 행(${t-e+1}행)을 렌더합니다. 행이 많으면 고정 rowHeight(가상 스크롤) 사용을 권장합니다.`))),this._renderer.renderBody(e,t,this._data,this._colLayout.visibleLeaves,this._colWidths,this._options,o?0:s.offsetY,o?0:this._vs.getTotalHeight(),this._rowMgr.selectedRows,this._rowMgr.checkedRows,this._grpMgr.isGroupMode?this._grpMgr.groupFlatRows:this._grpMgr.isTreeMode?this._grpMgr.treeFlatRows:null,n=>this._grpMgr.handleGroupToggle(n),this._grpMgr.isTreeMode?n=>this._grpMgr.handleTreeToggle(n):void 0,{_totalRows:this._data.rowCount,_frozenCount:this._colLayout.frozenCount,_focusCell:this._editMgr.focusCell},this._mergeEngine),(i=this._options.footer)!=null&&i.length&&this._renderFooterEl()}_handleGroupToggle(e){this._grpMgr.handleGroupToggle(e)}_visRange(){var t;if(this._options.pagination&&this._pagination){const{start:s,end:o}=this._pagination.getRange();return[s,o]}if(this._options.autoHeight)return[0,(this._grpMgr.isGroupMode?this._grpMgr.groupFlatRows.length:this._grpMgr.isTreeMode?this._grpMgr.treeFlatRows.length:this._data.rowCount)-1];const e=(t=this._vs)==null?void 0:t.getVisibleRange();return[(e==null?void 0:e.startIndex)??0,Math.min(((e==null?void 0:e.endIndex)??30)+this._visCount()+5,this._data.rowCount-1)]}_visCount(){const e=this._container.getBoundingClientRect().height;return Math.ceil((e-this._options.headerHeight-this._paginationHeight())/this._options.rowHeight)+5}_handleSortClick(e,t){this._sfMgr.handleSortClick(e,t)}_isToggleCol(e){return ne(e)}_handleCellClick(e,t,s){this._cellEvt.handleCellClick(e,t,s)}_handleCellDblClick(e,t,s){this._cellEvt.handleCellDblClick(e,t,s)}_handleCellMouseOver(e,t,s){this._cellEvt.handleCellMouseOver(e,t,s)}_handleCellMouseOut(e,t,s){this._cellEvt.handleCellMouseOut(e,t,s)}_handleCellMouseDown(e,t,s){this._cellEvt.handleCellMouseDown(e,t,s)}_handleCellMouseUp(e,t,s){this._cellEvt.handleCellMouseUp(e,t,s)}_handleCellMouseMove(e,t,s){this._cellEvt.handleCellMouseMove(e,t,s)}_handleCellKeyEvt(e,t){this._cellEvt.handleCellKeyEvt(e,t)}_handleRowCheck(e,t){this._rowMgr.check(e,t),this._doRender(...this._visRange()),this.emit("rowCheck",{rowIndex:e,checked:t,row:this._data.getRowByIndex(e)})}_handleFilterIconClick(e,t){var o,i;if((o=this._filterPanel)!=null&&o.isOpen){this._filterPanel.close();return}const s=this._sfMgr.filters[e]??[];(i=this._filterPanel)==null||i.open(e,t,s)}_handleAllCheck(e){this._rowMgr.checkAll(e,this._data.rowCount),this._doRender(...this._visRange()),this.emit("allCheck",{checked:e})}_handleRowDrop(e,t){var s,o;this._data.moveRow(e,t),this._doRender(...this._visRange()),this.emit("rowDrop",{fromIndex:e,toIndex:t}),(o=(s=this._options).onRowDrop)==null||o.call(s,{fromIndex:e,toIndex:t})}_crossBodyEl(){return this._renderer.bodyWrapper}_dragRowSet(e){const t=[...this._rowMgr.selectedRows];return t.length>1&&t.includes(e)?t.sort((s,o)=>s-o):[e]}_handleCrossGridDrop(e,t,s){const o=ce.get(t);!o||o===this||this.moveRowsTo(o,this._dragRowSet(e),s)}async moveRowsTo(e,t,s){const o=e;if(!o||o===this||!t.length)return!1;const i=[...new Set(t)].sort((c,u)=>c-u),n=s??o._data.rowCount;let r=i.map(c=>{const u={...this._data.getRowByIndex(c)};return delete u[Ue],u});const l=await this._resolveCrossTransform(o);if(l===!1)return!1;l&&(r=r.map(c=>l(c)));const a={sourceGrid:this,targetGrid:o,rows:r,sourceIndexes:i,targetIndex:n};return this._fireGridDropBefore(a)===!1||a.cancel||o._fireGridDropBefore(a)===!1||a.cancel?!1:(r.forEach((c,u)=>o.insertRow(c,n+u)),[...i].sort((c,u)=>u-c).forEach(c=>this.deleteRow(c)),this._fireGridDropAfter(a),o._fireGridDropAfter(a),this._fireGridDropComplete(a),o._fireGridDropComplete(a),!0)}async moveCheckedTo(e){const t=this._rowMgr.getChecked().map(s=>s.rowIndex);return t.length?(this._rowMgr.uncheckAll(),this.moveRowsTo(e,t)):!1}async _resolveCrossTransform(e){var r,l;const t=this._options.crossGridMapping;if(typeof t=="function")return t;if(t!=="interactive")return null;const s=this._colLayout.visibleLeaves.map(a=>({field:a.field,header:a.header})),o=e._colLayout.visibleLeaves.map(a=>({field:a.field,header:a.header}));if(ns(s.map(a=>a.field),o.map(a=>a.field)))return null;const i=await rs(s,o);if(!i)return!1;const n={sourceGrid:this,targetGrid:e,mapping:i.mapping,script:i.script};return this.emit("gridDropMapping",n),(l=(r=this._options).onGridDropMapping)==null||l.call(r,n),console.log(`[OpenGrid] cross-grid mapping script:
89
- `+st(i.mapping)),os(i.mapping)}_fireGridDropBefore(e){var t,s;return this.emit("gridDropBefore",e),(s=(t=this._options).onGridDropBefore)==null?void 0:s.call(t,e)}_fireGridDropAfter(e){var t,s;this.emit("gridDropAfter",e),(s=(t=this._options).onGridDropAfter)==null||s.call(t,e)}_fireGridDropComplete(e){var t,s;this.emit("gridDropComplete",e),(s=(t=this._options).onGridDropComplete)==null||s.call(t,e)}reorderRow(e,t){this._data.moveRow(e,t),this._doRender(...this._visRange())}_handleColResize(e,t){this._colWidths[e]!==void 0&&(this._colWidths[e]=t);const s=this._colLayout.visibleLeaves[e];s&&this._userWidths.set(s.field,t),this._renderHeader(),this._doRender(...this._visRange())}_handleKeyDown(e){this._kbdMgr.handleKeyDown(e)}_setFocusCell(e,t){this._rowMgr.selectSingle(e),this._editMgr.setFocusCell(e,t)}_announce(e){this._liveRegion&&(this._liveRegion.textContent="",setTimeout(()=>{this._liveRegion&&(this._liveRegion.textContent=e)},50))}_bindOptionEvents(){this._options.onCellClick&&this.on("cellClick",this._options.onCellClick),this._options.onCellDblClick&&this.on("cellDblClick",this._options.onCellDblClick),this._options.onRowClick&&this.on("rowClick",this._options.onRowClick),this._options.onEditStart&&this.on("editStart",this._options.onEditStart),this._options.onEditEnd&&this.on("editEnd",this._options.onEditEnd),this._options.onSortChange&&this.on("sortChange",this._options.onSortChange),this._options.onFilterChange&&this.on("filterChange",this._options.onFilterChange),this._options.onScroll&&this.on("scroll",this._options.onScroll),this._options.onDataChange&&this.on("dataChange",this._options.onDataChange),this._options.onSelectionChange&&this.on("selectionChange",this._options.onSelectionChange),this._options.onRowDblClick&&this.on("rowDblClick",this._options.onRowDblClick),this._options.onRowMouseOver&&this.on("rowMouseOver",this._options.onRowMouseOver),this._options.onRowMouseOut&&this.on("rowMouseOut",this._options.onRowMouseOut),this._options.onRowMouseDown&&this.on("rowMouseDown",this._options.onRowMouseDown),this._options.onRowMouseUp&&this.on("rowMouseUp",this._options.onRowMouseUp),this._options.onRowMouseMove&&this.on("rowMouseMove",this._options.onRowMouseMove),this._options.onCellMouseOver&&this.on("cellMouseOver",this._options.onCellMouseOver),this._options.onCellMouseOut&&this.on("cellMouseOut",this._options.onCellMouseOut),this._options.onCellMouseDown&&this.on("cellMouseDown",this._options.onCellMouseDown),this._options.onCellMouseUp&&this.on("cellMouseUp",this._options.onCellMouseUp),this._options.onCellMouseMove&&this.on("cellMouseMove",this._options.onCellMouseMove),this._options.onCellKeyDown&&this.on("cellKeyDown",this._options.onCellKeyDown),this._options.onCellKeyUp&&this.on("cellKeyUp",this._options.onCellKeyUp),this._options.onCellKeyPress&&this.on("cellKeyPress",this._options.onCellKeyPress)}setData(e){var s;const t=this._trigMgr.mkCtx("setData",[e]);this._trigMgr.exec("before:setData",t)&&(this._rowMgr.reset(),this._data.setData(e),this._applyFilters(),this._grpMgr.isTreeMode?this._grpMgr.rebuildTree():this._grpMgr.isGroupMode?this._grpMgr.rebuildGroups():(s=this._vs)==null||s.setTotalRows(this._data.rowCount),this._container.setAttribute("aria-rowcount",String(this._data.rowCount)),this._container.setAttribute("aria-colcount",String(this._colLayout.visibleLeaves.length)),this._announce(`${this._data.rowCount}행 데이터 로드됨`),this.emit("dataChange",this._data.getData()),t.result=e.length,this._trigMgr.exec("after:setData",t))}getData(){return this._data.getData()}getSourceRows(){return this._data.getOriginalData()}pushData(e){var o,i;const t=[...this._data.getAllData(),...e];this._data.setData(t);const s=this._data.rowCount;(o=this._vs)==null||o.setTotalRows(s),(i=this._pagination)==null||i.setTotalRows(s)}prefixData(e){var o,i;const t=[...e,...this._data.getAllData()];this._data.setData(t);const s=this._data.rowCount;(o=this._vs)==null||o.setTotalRows(s),(i=this._pagination)==null||i.setTotalRows(s)}clearData(){var e,t;this._rowMgr.reset(),this._data.clearData(),(e=this._vs)==null||e.setTotalRows(0),(t=this._pagination)==null||t.setTotalRows(0),this._doRender(0,-1),this.emit("dataChange",[])}insertRow(e,t="last"){var n,r,l,a;const s=this._trigMgr.mkCtx("insertRow",[e,t]);if(!this._trigMgr.exec("before:insertRow",s))return;const o=t==="before"?0:t==="after"?this._data.rowCount:t;this._data.addRow(e,o);const i=this._data.rowCount;(n=this._vs)==null||n.setTotalRows(i),(r=this._pagination)==null||r.setTotalRows(i),this._doRender(...this._visRange()),this.emit("dataChange",this._data.getData()),(a=(l=this._options).onDataChange)==null||a.call(l,this._data.getData()),s.result={rowCount:i,item:e},this._trigMgr.exec("after:insertRow",s)}pushRow(e){var o,i,n,r;(Array.isArray(e)?e:[e]).forEach(l=>this._data.addRow(l,"last"));const s=this._data.rowCount;(o=this._vs)==null||o.setTotalRows(s),(i=this._pagination)==null||i.setTotalRows(s),this._doRender(...this._visRange()),this.emit("dataChange",this._data.getData()),(r=(n=this._options).onDataChange)==null||r.call(n,this._data.getData())}appendRows(e){this.pushRow(e)}unshiftRow(e){var o,i,n,r;(Array.isArray(e)?e:[e]).forEach(l=>this._data.addRow(l,"first"));const s=this._data.rowCount;(o=this._vs)==null||o.setTotalRows(s),(i=this._pagination)==null||i.setTotalRows(s),this._doRender(...this._visRange()),this.emit("dataChange",this._data.getData()),(r=(n=this._options).onDataChange)==null||r.call(n,this._data.getData())}prependRows(e){this.unshiftRow(e)}deleteRow(e){var n,r,l,a;const t=this._trigMgr.mkCtx("deleteRow",[e]),s=Array.isArray(e)?[...e]:[e];if(t.extra={rows:s.map(c=>this._data.getRowByIndex(c))},!this._trigMgr.exec("before:deleteRow",t))return;const o=s.sort((c,u)=>u-c);o.forEach(c=>this._data.removeRow(c));const i=this._data.rowCount;(n=this._vs)==null||n.setTotalRows(i),(r=this._pagination)==null||r.setTotalRows(i),this._doRender(...this._visRange()),this.emit("dataChange",this._data.getData()),(a=(l=this._options).onDataChange)==null||a.call(l,this._data.getData()),t.result={deleted:o.length,rowCount:i},this._trigMgr.exec("after:deleteRow",t)}deleteById(e){}readCell(e,t){return this._data.getCellValue(e,t)}getDisplayValue(e,t){const s=this.readCell(e,t);return this._ovk.getStrategy("displayFormatter",(i,n,r)=>i==null?"":String(i))(s,t,this._data.getRowByIndex(e))}writeCell(e,t,s){var c,u,h,g;const o=this.readCell(e,t),i=this._trigMgr.mkCtx("writeCell",[e,t,s]);if(i.extra={oldValue:o,rowIndex:e,field:t},!this._trigMgr.exec("before:writeCell",i))return;this._data.updateCell(e,t,s);const n=this._data.getRowByIndex(e),r=this._colLayout.getColumnByField(t),l=this._colLayout.getColumnIndex(t),a={type:"editEnd",rowIndex:e,columnIndex:l,field:t,oldValue:o,newValue:s,row:n,column:r};this.emit("editEnd",a),(u=(c=this._options).onEditEnd)==null||u.call(c,a),this.emit("dataChange",this._data.getData()),(g=(h=this._options).onDataChange)==null||g.call(h,this._data.getData()),this._doRender(...this._visRange()),i.result={rowIndex:e,field:t,oldValue:o,newValue:s},this._trigMgr.exec("after:writeCell",i)}getRowAt(e){return this._data.getRowByIndex(e)}getChanges(){return this._data.getChanges()}getEditedRows(){return this._data.getEditedRows()}getChangedRows(){return this._data.getChangedRows()}getChangedColumns(){return this._data.getChangedColumns()}getAddedRows(){return this._data.getAddedRows()}getRemovedRows(){return this._data.getRemovedRows()}getOriginalRow(e){return this._data.getOriginalRow(e)}getRowsWithState(e){return this._data.getRowsWithState(e)}undo(){}redo(){}clearHistory(){}getColumnDefs(){return this._colLayout.visibleLeaves}getAllColumnDefs(){return this._colLayout.leaves}getColumnCount(){return this._colLayout.visibleLeaves.length}applyColumns(e){const t=this._trigMgr.mkCtx("applyColumns",[e]);this._trigMgr.exec("before:applyColumns",t)&&(this._colLayout.setColumns(e),this._recalcWidths(this._container.getBoundingClientRect().width),this._renderHeader(),this._doRender(...this._visRange()),t.result={columnCount:e.length},this._trigMgr.exec("after:applyColumns",t))}insertColumn(e,t){this._colLayout.addColumn(e,t),this._recalcWidths(this._container.getBoundingClientRect().width),this._renderHeader(),this._doRender(...this._visRange())}deleteColumn(e){this._colLayout.removeColumn(e),this._recalcWidths(this._container.getBoundingClientRect().width),this._renderHeader(),this._doRender(...this._visRange())}_reorderColumn(e,t){var n,r;const s=this._colLayout.visibleLeaves.map(l=>l);if(e<0||t<0||e>=s.length||t>=s.length)return;const o=[...this._options.columns],[i]=o.splice(e,1);o.splice(t,0,i),this._options.columns=o,this.applyColumns(o),(r=(n=this._options).onColumnReorder)==null||r.call(n,{fromIndex:e,toIndex:t,field:i.field??""})}hideColumn(e){this._colLayout.hideColumn(e),this._recalcWidths(this._container.getBoundingClientRect().width),this._renderHeader(),this._doRender(...this._visRange())}showColumn(e){this._colLayout.showColumn(e),this._recalcWidths(this._container.getBoundingClientRect().width),this._renderHeader(),this._doRender(...this._visRange())}getColumnIndex(e){return this._colLayout.getColumnIndex(e)}getFieldAt(e){var t;return((t=this._colLayout.getColumnByIndex(e))==null?void 0:t.field)??""}getColValues(e,t=!1){return this._data.getData().map(s=>s[e])}getUniqueValues(e,t=!1){return[...new Set(this.getColValues(e,t))]}setColWidths(e){}calcColWidths(e=!1){return[]}getSelections(){return this._rowMgr.getSelections()}getActiveRow(){return this._rowMgr.getActiveRow()}activate(e){this._rowMgr.activate(e),this._doRender(...this._visRange())}deselect(){this._rowMgr.deselect(),this._doRender(...this._visRange())}getChecked(){return this._rowMgr.getChecked()}getAllChecked(){return this._rowMgr.getAllChecked()}checkById(e){}addCheckById(e){}checkByValue(e,t){this._rowMgr.checkByValue(e,t),this._doRender(...this._visRange())}uncheckById(e){}uncheckAll(){this._rowMgr.uncheckAll(),this._doRender(...this._visRange())}orderBy(e,t="asc"){const s=this._trigMgr.mkCtx("orderBy",[e,t]);this._trigMgr.exec("before:orderBy",s)&&(this._sfMgr.sort(e,t),s.result={sortList:this._sfMgr.sortList},this._trigMgr.exec("after:orderBy",s))}resetOrder(){this._sfMgr.resetSort()}setFilter(e,t){const s=this._trigMgr.mkCtx("setFilter",[e,t]);this._trigMgr.exec("before:setFilter",s)&&(this._sfMgr.setFilter(e,t),s.result={field:e,filteredCount:this._data.rowCount},this._trigMgr.exec("after:setFilter",s))}resetFilter(e){this._sfMgr.resetFilter(e)}getFilterState(){return this._sfMgr.getFilterState()}restoreFilter(e){this._sfMgr.restoreFilter(e)}_applyFilters(){this._sfMgr.applyFilters()}freeze(e){this._colLayout.setFrozen(e),this._renderHeader(),this._doRender(...this._visRange())}mergeCells(e){this._mergeEngine.applyMergeCells(e),this._doRender(...this._visRange())}autoMerge(e){const t=this._colLayout.visibleLeaves,s=[],o=[];for(const i of e){const n=t.findIndex(r=>r.field===i);n>=0&&(s.push(n),o.push(i))}this._mergeEngine.applyAutoMerge(this._data.getData(),s,o),this._doRender(...this._visRange())}clearMerge(){this._mergeEngine.clear(),this._doRender(...this._visRange())}freezeRows(e){}groupBy(e){const t=this._trigMgr.mkCtx("groupBy",[e]);this._trigMgr.exec("before:groupBy",t)&&(this._grpMgr.groupBy(e),t.result={fields:e},this._trigMgr.exec("after:groupBy",t))}clearGroup(){this._grpMgr.clearGroup()}expandAll(){this._grpMgr.expandAll()}collapseAll(){this._grpMgr.collapseAll()}enableTree(){this._grpMgr.enableTree()}disableTree(){this._grpMgr.disableTree()}expandNodes(e,t=!0){this._grpMgr.expandNodes(e,t)}expandAllNodes(){this._grpMgr.expandAllNodes()}collapseAllNodes(){this._grpMgr.collapseAllNodes()}addTreeRow(e,t,s){}exportExcel(e){this._exportMgr.exportExcel(e)}exportCsv(e){this._exportMgr.exportCsv(e)}exportJson(e){this._exportMgr.exportJson(e)}print(e){this._exportMgr.print(e)}toArray(e=!0){const t=this._data.getData();if(e)return t;const s=this._colLayout.visibleLeaves;return t.map(o=>s.map(i=>o[i.field]))}jumpToRow(e){var t;this._rowMgr.selectSingle(e),(t=this._vs)==null||t.scrollToRow(e),this._doRender(...this._visRange())}jumpToCol(e){}getScrollPos(){var e,t;return{x:((e=this._renderer)==null?void 0:e.bodyWrapper.scrollLeft)??0,y:((t=this._renderer)==null?void 0:t.bodyWrapper.scrollTop)??0}}setFooter(e){this._options.footer=e,this._renderFooterEl()}getFooterData(){return this._footerMgr.computeValues()}getFooterValue(e){var t;return((t=this._footerMgr.computeValues().find(s=>s._field===e))==null?void 0:t._value)??null}_renderFooterEl(){this._footerMgr.render()}resize(e,t){e&&(this._container.style.width=`${e}px`),t&&(this._container.style.height=`${t}px`),this._onResize()}setTheme(e){this._container.setAttribute("data-og-theme",e)}setThemeVar(e,t){this._container.style.setProperty(e,t)}addTrigger(e,t){return this._trigMgr.add(e,t),this}removeTrigger(e,t){return this._trigMgr.remove(e,t),this}clearTriggers(e){return this._trigMgr.clear(e),this}_mkCtx(e,t){return this._trigMgr.mkCtx(e,t)}_trig(e,t){return this._trigMgr.exec(e,t)}destroy(){var e,t,s,o,i,n,r,l;this._destroyed||(this._destroyed=!0,this._renderer&&ce.unregister(this._renderer.bodyWrapper),this._trigMgr.clear(),(e=this._ro)==null||e.disconnect(),(t=this._vs)==null||t.destroy(),(s=this._filterPanel)==null||s.destroy(),(o=this._dnd)==null||o.destroy(),this._cmHandler&&this._container.removeEventListener("contextmenu",this._cmHandler),this._cmKbdHandler&&this._container.removeEventListener("keydown",this._cmKbdHandler),this._cmHandler=this._cmKbdHandler=null,(i=this._ctxMenu)==null||i.destroy(),(n=this._wsManager)==null||n.destroy(),(r=this._renderer)==null||r.destroy(),(l=this._liveRegion)==null||l.remove(),this._liveRegion=null,this._container.innerHTML="",this._container.classList.remove("og-container"),this.removeAllListeners())}};V._defaultOverrides=[],V._defaultStrategies=[],V.defaults={strategy(e,t){return V._defaultStrategies.push([e,t]),V}};let Le=V;exports.OpenGrid=Le;exports.buildTree=Ee;
90
- //# sourceMappingURL=OpenGrid-B7dLL9eH.cjs.map