@ninebone/table 0.0.65 โ†’ 0.0.67

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,49 +1,49 @@
1
- var Y = Object.defineProperty;
2
- var D = (l) => {
3
- throw TypeError(l);
1
+ var P = Object.defineProperty;
2
+ var Z = (r) => {
3
+ throw TypeError(r);
4
4
  };
5
- var J = (l, e, t) => e in l ? Y(l, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : l[e] = t;
6
- var d = (l, e) => Y(l, "name", { value: e, configurable: !0 });
7
- var C = (l, e, t) => J(l, typeof e != "symbol" ? e + "" : e, t), G = (l, e, t) => e.has(l) || D("Cannot " + t);
8
- var r = (l, e, t) => (G(l, e, "read from private field"), t ? t.call(l) : e.get(l)), w = (l, e, t) => e.has(l) ? D("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(l) : e.set(l, t), q = (l, e, t, a) => (G(l, e, "write to private field"), a ? a.call(l, t) : e.set(l, t), t);
9
- import { trace as Q } from "@ninebone/util";
10
- const j = class j extends Q.constructor {
5
+ var D = (r, t, e) => t in r ? P(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;
6
+ var c = (r, t) => P(r, "name", { value: t, configurable: !0 });
7
+ var q = (r, t, e) => D(r, typeof t != "symbol" ? t + "" : t, e), X = (r, t, e) => t.has(r) || Z("Cannot " + e);
8
+ var a = (r, t, e) => (X(r, t, "read from private field"), e ? e.call(r) : t.get(r)), w = (r, t, e) => t.has(r) ? Z("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(r) : t.set(r, e), k = (r, t, e, l) => (X(r, t, "write to private field"), l ? l.call(r, e) : t.set(r, e), e);
9
+ import { trace as G } from "@ninebone/util";
10
+ const j = class j extends G.constructor {
11
11
  constructor() {
12
12
  super(), this.init("nine-table", "green");
13
13
  }
14
14
  };
15
- d(j, "Trace");
16
- let z = j;
17
- const L = new z();
18
- var S, H;
19
- const K = class K extends HTMLElement {
15
+ c(j, "Trace");
16
+ let I = j;
17
+ const $ = new I();
18
+ var S, R;
19
+ const E = class E extends HTMLElement {
20
20
  constructor() {
21
21
  super();
22
22
  w(this, S, null);
23
- C(this, "init", /* @__PURE__ */ d((t) => {
24
- if (!t) return;
25
- const a = /* @__PURE__ */ d((n) => {
26
- const c = /* @__PURE__ */ d((o) => {
23
+ q(this, "init", /* @__PURE__ */ c((e) => {
24
+ if (!e) return;
25
+ const l = /* @__PURE__ */ c((n) => {
26
+ const d = /* @__PURE__ */ c((o) => {
27
27
  if (o.querySelector("colgroup")) return;
28
28
  const s = o.querySelector("tbody tr") || o.querySelector("tr"), y = s ? s.querySelectorAll("th, td").length : 1, b = document.createElement("colgroup"), m = Math.max(Math.floor((o.clientWidth || 600) / y), 100);
29
29
  for (let x = 0; x < y; x++) {
30
- const M = document.createElement("col");
31
- M.setAttribute("width", m), b.appendChild(M);
30
+ const z = document.createElement("col");
31
+ z.setAttribute("width", m), b.appendChild(z);
32
32
  }
33
33
  o.prepend(b);
34
- }, "ensureColgroup"), i = /* @__PURE__ */ d((o) => {
34
+ }, "ensureColgroup"), i = /* @__PURE__ */ c((o) => {
35
35
  if (o.querySelector("thead")) return;
36
36
  const s = document.createElement("thead"), y = o.querySelector("colgroup");
37
37
  y ? y.after(s) : o.prepend(s);
38
38
  }, "ensureThead");
39
- return c(n), i(n), n.classList.add("nine-table-element"), n;
40
- }, "initializeTable"), u = t.cloneNode(!0);
41
- q(this, S, a(u)), r(this, S).style.display = "table";
42
- const g = this.querySelector(".ng-container-left"), h = this.querySelector(".ng-container-body"), f = this.querySelector(".ng-container-right"), p = /* @__PURE__ */ d((n, c, i = !1) => {
39
+ return d(n), i(n), n.classList.add("nine-table-element"), n;
40
+ }, "initializeTable"), u = e.cloneNode(!0);
41
+ k(this, S, l(u)), a(this, S).style.display = "table";
42
+ const g = this.querySelector(".ng-container-left"), h = this.querySelector(".ng-container-body"), f = this.querySelector(".ng-container-right"), p = /* @__PURE__ */ c((n, d, i = !1) => {
43
43
  const o = n.cloneNode(!0), s = Array.from(o.querySelectorAll("colgroup col")), y = [];
44
44
  return s.forEach((b, m) => {
45
45
  const x = b.getAttribute("fixed");
46
- (i ? !x || x === "" : x === c) || y.push(m);
46
+ (i ? !x || x === "" : x === d) || y.push(m);
47
47
  }), y.reverse().forEach((b) => {
48
48
  s[b] && s[b].remove(), o.querySelectorAll("tr").forEach((m) => {
49
49
  const x = m.querySelectorAll("th, td");
@@ -52,33 +52,47 @@ const K = class K extends HTMLElement {
52
52
  }), o;
53
53
  }, "filterTableByFixed");
54
54
  if (h) {
55
- const n = p(r(this, S), null, !0);
55
+ const n = p(a(this, S), null, !0);
56
56
  h.innerHTML = "", h.appendChild(n);
57
57
  }
58
58
  if (g) {
59
- const n = p(r(this, S), "left", !1);
60
- let c = 0;
59
+ const n = p(a(this, S), "left", !1);
60
+ let d = 0;
61
61
  n.querySelectorAll("col").forEach((o) => {
62
62
  const s = parseInt(o.getAttribute("width"), 10);
63
- isNaN(s) || (c += s);
63
+ isNaN(s) || (d += s);
64
64
  }), g.innerHTML = "", g.appendChild(n);
65
- const i = c > 0 ? c : 0;
65
+ const i = d > 0 ? d : 0;
66
66
  g.style.flex = `0 0 ${i}px`, g.style.width = `${i}px`;
67
67
  }
68
68
  if (f) {
69
- const n = p(r(this, S), "right", !1);
70
- let c = 0;
69
+ const n = p(a(this, S), "right", !1);
70
+ let d = 0;
71
71
  n.querySelectorAll("col").forEach((o) => {
72
72
  const s = parseInt(o.getAttribute("width"), 10);
73
- isNaN(s) || (c += s);
73
+ isNaN(s) || (d += s);
74
74
  }), f.innerHTML = "", f.appendChild(n);
75
- const i = c > 0 ? c : 0;
75
+ const i = d > 0 ? d : 0;
76
76
  f.style.flex = `0 0 ${i}px`, f.style.width = `${i}px`;
77
77
  }
78
- L.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);
78
+ if (h) {
79
+ const n = this.getRowCount();
80
+ h.style.overflowY = n > 10 ? "auto" : "hidden";
81
+ }
82
+ $.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);
79
83
  }, "init"));
80
- C(this, "getRowCount", /* @__PURE__ */ d(() => r(this, S) ? r(this, S).querySelectorAll("tbody tr").length : 0, "getRowCount"));
81
- w(this, H, /* @__PURE__ */ d(() => {
84
+ q(this, "getRowCount", /* @__PURE__ */ c(() => a(this, S) ? a(this, S).querySelectorAll("tbody tr").length : 0, "getRowCount"));
85
+ // ๐ŸŽฏ ์™ธ๋ถ€ ์Šคํฌ๋กค๋ฐ” ๋ฐ ์ปจํŠธ๋กค๋Ÿฌ ์—ฐ๋™์šฉ ๋ฉ”์„œ๋“œ
86
+ q(this, "scrollToX", /* @__PURE__ */ c((e) => {
87
+ const l = this.querySelector(".ng-container-body");
88
+ l && (l.scrollLeft = e);
89
+ }, "scrollToX"));
90
+ q(this, "scrollToY", /* @__PURE__ */ c((e) => {
91
+ const l = this.querySelector(".ng-container-body");
92
+ l && (l.scrollTop = e);
93
+ }, "scrollToY"));
94
+ w(this, R, /* @__PURE__ */ c(() => {
95
+ const e = E.SCROLLBAR_SIZE;
82
96
  this.innerHTML = `
83
97
  <style>
84
98
  nine-table-sheet {
@@ -95,36 +109,46 @@ const K = class K extends HTMLElement {
95
109
  nine-table-sheet .ng-container-top {
96
110
  display: flex;
97
111
  flex-direction: row;
98
- flex: 1;
112
+ flex: 1 1 auto;
99
113
  width: 100%;
114
+ height: calc(100% - ${e}px);
100
115
  overflow: hidden;
101
116
  position: relative;
102
117
  }
103
118
 
104
119
  nine-table-sheet .ng-container-left {
120
+ display: flex;
121
+ flex-direction: column;
105
122
  overflow: hidden;
106
123
  background: #ffffff;
107
124
  border-right: 1px solid #e5e7eb;
125
+ flex-shrink: 0;
108
126
  }
109
127
 
110
- /* ์ปจํ…Œ์ด๋„ˆ ์ž์ฒด ์Šคํฌ๋กค๋ฐ” ์ œ๊ฑฐ ๋ฐ ์™ธ๋ถ€ ์ œ์–ด์šฉ ๋ทฐํฌํŠธ ์„ค์ • */
111
128
  nine-table-sheet .ng-container-body {
129
+ display: flex;
130
+ flex-direction: column;
112
131
  flex: 1;
113
- overflow: hidden;
132
+ overflow-x: auto;
133
+ overflow-y: auto;
114
134
  background: #ffffff;
115
135
  position: relative;
116
136
  }
117
137
 
118
138
  nine-table-sheet .ng-container-right {
139
+ display: flex;
140
+ flex-direction: column;
119
141
  overflow: hidden;
120
142
  background: #ffffff;
121
143
  border-left: 1px solid #e5e7eb;
144
+ flex-shrink: 0;
122
145
  }
123
146
 
124
147
  nine-table-sheet .ng-container-bottom {
125
148
  display: flex;
126
149
  flex-direction: row;
127
- height: 16px;
150
+ height: ${e}px;
151
+ min-height: ${e}px;
128
152
  flex-shrink: 0;
129
153
  background: #f9fafb;
130
154
  border-top: 1px solid #e5e7eb;
@@ -132,12 +156,15 @@ const K = class K extends HTMLElement {
132
156
 
133
157
  nine-table-sheet nine-table-hscrollbar {
134
158
  flex: 1;
159
+ height: 100%;
135
160
  overflow: hidden;
136
161
  display: block;
137
162
  }
138
163
 
139
164
  nine-table-sheet .ng-scroll-edge {
140
- width: 16px;
165
+ width: ${e}px;
166
+ min-width: ${e}px;
167
+ height: 100%;
141
168
  flex-shrink: 0;
142
169
  background: #f3f4f6;
143
170
  }
@@ -180,51 +207,51 @@ const K = class K extends HTMLElement {
180
207
  }, "#render"));
181
208
  }
182
209
  connectedCallback() {
183
- r(this, H).call(this);
210
+ a(this, R).call(this);
184
211
  }
185
212
  disconnectedCallback() {
186
- this.innerHTML = "", L.log("NineTableSheet destroyed.");
213
+ this.innerHTML = "", $.log("NineTableSheet destroyed.");
187
214
  }
188
215
  };
189
- S = new WeakMap(), H = new WeakMap(), d(K, "NineTableSheet");
190
- let I = K;
191
- customElements.get("nine-table-sheet") || customElements.define("nine-table-sheet", I);
192
- var $;
193
- const F = class F extends HTMLElement {
216
+ S = new WeakMap(), R = new WeakMap(), c(E, "NineTableSheet"), q(E, "SCROLLBAR_SIZE", 16);
217
+ let B = E;
218
+ customElements.get("nine-table-sheet") || customElements.define("nine-table-sheet", B);
219
+ var H;
220
+ const K = class K extends HTMLElement {
194
221
  constructor() {
195
222
  super();
196
- w(this, $, /* @__PURE__ */ d(() => {
197
- const t = this.querySelector(".nine-tab-bar");
198
- t && (t.addEventListener("click", (a) => {
199
- const u = a.target.closest(".nine-tab-item");
223
+ w(this, H, /* @__PURE__ */ c(() => {
224
+ const e = this.querySelector(".nine-tab-bar");
225
+ e && (e.addEventListener("click", (l) => {
226
+ const u = l.target.closest(".nine-tab-item");
200
227
  if (!u) return;
201
- const g = a.ctrlKey || a.metaKey || a.shiftKey, h = parseInt(u.dataset.index, 10);
228
+ const g = l.ctrlKey || l.metaKey || l.shiftKey, h = parseInt(u.dataset.index, 10);
202
229
  this.switchSheet(h, g);
203
230
  }), this.switchSheet(0, !1));
204
231
  }, "#init"));
205
- C(this, "switchSheet", /* @__PURE__ */ d((t, a = !1) => {
206
- const u = /* @__PURE__ */ d(() => {
232
+ q(this, "switchSheet", /* @__PURE__ */ c((e, l = !1) => {
233
+ const u = /* @__PURE__ */ c(() => {
207
234
  const i = this.querySelector("nine-table-sheets-body");
208
235
  i.querySelectorAll("nine-splitter").forEach((s) => {
209
236
  const y = parseInt(s.dataset.splitIndex, 10), b = i.querySelector(`nine-table-sheet[data-index="${y - 1}"]`), m = i.querySelector(`nine-table-sheet[data-index="${y}"]`);
210
237
  b && m && b.classList.contains("active") && m.classList.contains("active") ? s.classList.add("active") : s.classList.remove("active");
211
238
  });
212
239
  }, "updateSplitters"), g = this.querySelector(".nine-tab-bar"), h = this.querySelector("nine-table-sheets-body"), f = g.querySelectorAll(".nine-tab-item"), p = h.querySelectorAll("nine-table-sheet");
213
- if (!f[t]) return;
214
- if (!a)
240
+ if (!f[e]) return;
241
+ if (!l)
215
242
  f.forEach((i, o) => {
216
- i.classList.toggle("active", o === t);
243
+ i.classList.toggle("active", o === e);
217
244
  const s = h.querySelector(`nine-table-sheet[data-index="${o}"]`);
218
245
  s && (s.style.flex = "");
219
246
  }), p.forEach((i, o) => {
220
- i.classList.toggle("active", o === t);
247
+ i.classList.toggle("active", o === e);
221
248
  });
222
249
  else {
223
- const i = f[t], o = g.querySelectorAll(".nine-tab-item.active");
250
+ const i = f[e], o = g.querySelectorAll(".nine-tab-item.active");
224
251
  if (i.classList.contains("active") && o.length <= 1)
225
252
  return;
226
253
  i.classList.toggle("active");
227
- const s = h.querySelector(`nine-table-sheet[data-index="${t}"]`);
254
+ const s = h.querySelector(`nine-table-sheet[data-index="${e}"]`);
228
255
  s && (s.classList.toggle("active"), s.classList.contains("active") || (s.style.flex = ""));
229
256
  }
230
257
  const n = Array.from(h.querySelectorAll("nine-table-sheet.active"));
@@ -238,44 +265,44 @@ const F = class F extends HTMLElement {
238
265
  i.style.flex = "1 1 100%";
239
266
  });
240
267
  u();
241
- const c = h.querySelector("nine-table-sheet.active");
242
- if (c && typeof c.getRowCount == "function") {
268
+ const d = h.querySelector("nine-table-sheet.active");
269
+ if (d && typeof d.getRowCount == "function") {
243
270
  const i = this.querySelector("#row-count");
244
- i && (i.textContent = c.getRowCount().toLocaleString());
271
+ i && (i.textContent = d.getRowCount().toLocaleString());
245
272
  }
246
273
  }, "switchSheet"));
247
274
  }
248
275
  connectedCallback() {
249
- r(this, $).call(this);
276
+ a(this, H).call(this);
250
277
  }
251
278
  };
252
- $ = new WeakMap(), d(F, "NineTableSheets");
253
- let B = F;
254
- customElements.get("nine-table-sheets") || customElements.define("nine-table-sheets", B);
255
- var v, k, T, E, R;
256
- const O = class O {
257
- constructor(e) {
279
+ H = new WeakMap(), c(K, "NineTableSheets");
280
+ let N = K;
281
+ customElements.get("nine-table-sheets") || customElements.define("nine-table-sheets", N);
282
+ var v, C, T, A, M;
283
+ const Y = class Y {
284
+ constructor(t) {
258
285
  w(this, v);
259
- w(this, k, null);
260
- w(this, T, /* @__PURE__ */ d(() => {
261
- const e = r(this, v).host;
262
- e && (q(this, k, new ResizeObserver((t) => {
263
- for (let a of t)
264
- e.getAttribute("auto-height") === "true" && r(this, E).call(this, e);
265
- })), r(this, k).observe(e));
286
+ w(this, C, null);
287
+ w(this, T, /* @__PURE__ */ c(() => {
288
+ const t = a(this, v).host;
289
+ t && (k(this, C, new ResizeObserver((e) => {
290
+ for (let l of e)
291
+ t.getAttribute("auto-height") === "true" && a(this, A).call(this, t);
292
+ })), a(this, C).observe(t));
266
293
  }, "#observeResize"));
267
- w(this, E, /* @__PURE__ */ d((e) => {
294
+ w(this, A, /* @__PURE__ */ c((t) => {
268
295
  var m, x;
269
- const t = (m = e.shadowRoot) == null ? void 0 : m.querySelector("nine-table-sheet.active");
270
- if (!t) return;
271
- const a = ((x = t.getRowCount) == null ? void 0 : x.call(t)) || 0, u = parseInt(e.getAttribute("max-display-row"), 10) || 10, g = Math.min(a, u), h = t.querySelector("tbody tr") || t.querySelector("tr"), f = h ? h.getBoundingClientRect().height : 32, p = r(this, v).querySelector("nine-table-header"), n = r(this, v).querySelector("nine-table-sheets-footer"), c = p ? p.getBoundingClientRect().height : 40, i = n ? n.getBoundingClientRect().height : 32, s = c + i + 16, y = g * f + s;
272
- e.style.height = `${y}px`, e.style.maxHeight = `${u * f + s}px`;
273
- const b = r(this, v).querySelector("nine-table-sheets-body");
274
- b && (b.style.overflowY = a > u ? "auto" : "hidden");
296
+ const e = (m = t.shadowRoot) == null ? void 0 : m.querySelector("nine-table-sheet.active");
297
+ if (!e) return;
298
+ const l = ((x = e.getRowCount) == null ? void 0 : x.call(e)) || 0, u = parseInt(t.getAttribute("max-display-row"), 10) || 10, g = Math.min(l, u), h = e.querySelector("tbody tr") || e.querySelector("tr"), f = h ? h.getBoundingClientRect().height : 32, p = a(this, v).querySelector("nine-table-header"), n = a(this, v).querySelector("nine-table-sheets-footer"), d = p ? p.getBoundingClientRect().height : 40, i = n ? n.getBoundingClientRect().height : 32, s = d + i + 16, y = g * f + s;
299
+ t.style.height = `${y}px`, t.style.maxHeight = `${u * f + s}px`;
300
+ const b = a(this, v).querySelector("nine-table-sheets-body");
301
+ b && (b.style.overflowY = l > u ? "auto" : "hidden");
275
302
  }, "#applyAutoHeight"));
276
- w(this, R, /* @__PURE__ */ d(() => {
277
- const e = r(this, v).host, a = Array.from(e.children).filter((p) => p.tagName === "TABLE"), u = e.getAttribute("auto-height") === "true", g = a.map((p, n) => `<nine-table-sheet class="${n === 0 ? "active" : ""}" data-index="${n}"></nine-table-sheet>`).join(""), h = a.map((p, n) => `<div class="nine-tab-item ${n === 0 ? "active" : ""}" data-index="${n}">Sheet ${n + 1}</div>`).join("");
278
- r(this, v).innerHTML = `
303
+ w(this, M, /* @__PURE__ */ c(() => {
304
+ const t = a(this, v).host, l = Array.from(t.children).filter((p) => p.tagName === "TABLE"), u = t.getAttribute("auto-height") === "true", g = l.map((p, n) => `<nine-table-sheet class="${n === 0 ? "active" : ""}" data-index="${n}"></nine-table-sheet>`).join(""), h = l.map((p, n) => `<div class="nine-tab-item ${n === 0 ? "active" : ""}" data-index="${n}">Sheet ${n + 1}</div>`).join("");
305
+ a(this, v).innerHTML = `
279
306
  <style>
280
307
  :host {
281
308
  display: flex;
@@ -373,33 +400,33 @@ const O = class O {
373
400
  </nine-table-body>
374
401
  <nine-table-footer></nine-table-footer>
375
402
  `;
376
- const f = r(this, v).querySelectorAll("nine-table-sheet");
403
+ const f = a(this, v).querySelectorAll("nine-table-sheet");
377
404
  f == null || f.forEach((p, n) => {
378
- a[n] && setTimeout(() => {
379
- p.init(a[n]), u && r(this, E).call(this, e);
405
+ l[n] && setTimeout(() => {
406
+ p.init(l[n]), u && a(this, A).call(this, t);
380
407
  });
381
408
  });
382
409
  }, "#render"));
383
- q(this, v, e), r(this, R).call(this), r(this, T).call(this);
410
+ k(this, v, t), a(this, M).call(this), a(this, T).call(this);
384
411
  }
385
412
  };
386
- v = new WeakMap(), k = new WeakMap(), T = new WeakMap(), E = new WeakMap(), R = new WeakMap(), d(O, "LayoutManager");
387
- let N = O;
388
- var A;
389
- const P = class P extends HTMLElement {
413
+ v = new WeakMap(), C = new WeakMap(), T = new WeakMap(), A = new WeakMap(), M = new WeakMap(), c(Y, "LayoutManager");
414
+ let W = Y;
415
+ var L;
416
+ const F = class F extends HTMLElement {
390
417
  constructor() {
391
418
  super();
392
- w(this, A, !1);
419
+ w(this, L, !1);
393
420
  this.attachShadow({ mode: "open" });
394
421
  }
395
422
  connectedCallback() {
396
- r(this, A) || (this.layoutManager = new N(this.shadowRoot), q(this, A, !0), L.log("NineTable connected."), this.dispatchEvent(new CustomEvent("load", { bubbles: !0, detail: { target: this } })));
423
+ a(this, L) || (this.layoutManager = new W(this.shadowRoot), k(this, L, !0), $.log("NineTable connected."), this.dispatchEvent(new CustomEvent("load", { bubbles: !0, detail: { target: this } })));
397
424
  }
398
425
  disconnectedCallback() {
399
- L.log("NineTable disconnected.");
426
+ $.log("NineTable disconnected.");
400
427
  }
401
428
  };
402
- A = new WeakMap(), d(P, "NineTable");
403
- let W = P;
404
- customElements.get("nine-table") || customElements.define("nine-table", W);
429
+ L = new WeakMap(), c(F, "NineTable");
430
+ let O = F;
431
+ customElements.get("nine-table") || customElements.define("nine-table", O);
405
432
  //# sourceMappingURL=nine-table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nine-table.js","sources":["../src/external/NoPeer.js","../src/ui/nine-table-sheet.js","../src/ui/nine-table-sheets.js","../src/ui/LayoutManager.js","../src/core/nine-table.js"],"sourcesContent":["import { trace as traceOrigin } from '@ninebone/util';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-table\", \"green\");\n }\n}\n\nexport const trace = new Trace();","import { trace } from \"@nopeer\";\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#render();\n };\n\n init = (tableEl) => {\n if (!tableEl) return;\n\n const initializeTable = (tbl) => {\n\n const ensureColgroup = (tbl) => {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n };\n\n const ensureThead = (tbl) => {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n };\n\n ensureColgroup(tbl);\n ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n };\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const leftContainer = this.querySelector('.ng-container-left');\n const bodyContainer = this.querySelector('.ng-container-body');\n const rightContainer = this.querySelector('.ng-container-right');\n\n const filterTableByFixed = (sourceTable, targetFixedType, isBody = false) => {\n const tbl = sourceTable.cloneNode(true);\n const cols = Array.from(tbl.querySelectorAll('colgroup col'));\n const targetIndices = [];\n\n cols.forEach((col, idx) => {\n const fixedAttr = col.getAttribute('fixed');\n const isMatch = isBody ? (!fixedAttr || fixedAttr === '') : (fixedAttr === targetFixedType);\n if (!isMatch) {\n targetIndices.push(idx);\n }\n });\n\n targetIndices.reverse().forEach(idx => {\n if (cols[idx]) cols[idx].remove();\n tbl.querySelectorAll('tr').forEach(tr => {\n const cells = tr.querySelectorAll('th, td');\n if (cells[idx]) cells[idx].remove();\n });\n });\n\n return tbl;\n };\n\n // 1. ๋ฉ”์ธ ๋ฐ”๋”” ์˜์—ญ\n if (bodyContainer) {\n const bodyTable = filterTableByFixed(this.#tableElement, null, true);\n bodyContainer.innerHTML = '';\n bodyContainer.appendChild(bodyTable);\n }\n\n // 2. ์ขŒ์ธก ๊ณ ์ • ์˜์—ญ\n if (leftContainer) {\n const leftTable = filterTableByFixed(this.#tableElement, 'left', false);\n\n let leftWidth = 0;\n leftTable.querySelectorAll('col').forEach(col => {\n const w = parseInt(col.getAttribute('width'), 10);\n if (!isNaN(w)) leftWidth += w;\n });\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n\n const activeLeftWidth = leftWidth > 0 ? leftWidth : 0;\n leftContainer.style.flex = `0 0 ${activeLeftWidth}px`;\n leftContainer.style.width = `${activeLeftWidth}px`;\n }\n\n // 3. ์šฐ์ธก ๊ณ ์ • ์˜์—ญ\n if (rightContainer) {\n const rightTable = filterTableByFixed(this.#tableElement, 'right', false);\n\n let rightWidth = 0;\n rightTable.querySelectorAll('col').forEach(col => {\n const w = parseInt(col.getAttribute('width'), 10);\n if (!isNaN(w)) rightWidth += w;\n });\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n\n const activeRightWidth = rightWidth > 0 ? rightWidth : 0;\n rightContainer.style.flex = `0 0 ${activeRightWidth}px`;\n rightContainer.style.width = `${activeRightWidth}px`;\n }\n\n trace.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);\n };\n\n getRowCount = () => {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n };\n\n #render = () => {\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n overflow: hidden;\n }\n \n nine-table-sheet .ng-container-top {\n display: flex;\n flex-direction: row;\n flex: 1;\n width: 100%;\n overflow: hidden;\n position: relative;\n }\n \n nine-table-sheet .ng-container-left {\n overflow: hidden;\n background: #ffffff;\n border-right: 1px solid #e5e7eb;\n }\n \n /* ์ปจํ…Œ์ด๋„ˆ ์ž์ฒด ์Šคํฌ๋กค๋ฐ” ์ œ๊ฑฐ ๋ฐ ์™ธ๋ถ€ ์ œ์–ด์šฉ ๋ทฐํฌํŠธ ์„ค์ • */\n nine-table-sheet .ng-container-body {\n flex: 1;\n overflow: hidden;\n background: #ffffff;\n position: relative;\n }\n \n nine-table-sheet .ng-container-right {\n overflow: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\n }\n \n nine-table-sheet .ng-container-bottom {\n display: flex;\n flex-direction: row;\n height: 16px;\n flex-shrink: 0;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n }\n \n nine-table-sheet nine-table-hscrollbar {\n flex: 1;\n overflow: hidden;\n display: block;\n }\n \n nine-table-sheet .ng-scroll-edge {\n width: 16px;\n flex-shrink: 0;\n background: #f3f4f6;\n }\n \n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n \n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n \n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class='ng-container-top'>\n <div class='ng-container-left'></div>\n <div class='ng-container-body'></div>\n <div class='ng-container-right'></div>\n <nine-table-vscrollbar></nine-table-vscrollbar>\n </div>\n <div class='ng-container-bottom'>\n <nine-table-hscrollbar></nine-table-hscrollbar>\n <div class='ng-scroll-edge'></div>\n </div>\n `;\n };\n\n disconnectedCallback() {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n };\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#init();\n };\n\n #init = () => {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.switchSheet(index, isMultiSelect);\n });\n\n this.switchSheet(0, false);\n };\n\n switchSheet = (index, isMultiSelect = false) => {\n\n const updateSplitters = () => {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n };\n\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n };\n\n\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","/**\n * [LayoutManager ๋†’์ด ์„ค์ •(Height Configuration) ์‚ฌ์šฉ ์˜ˆ์ œ]\n *\n * 1. ๋ถ€๋ชจ ์˜์—ญ ์ฑ„์šฐ๊ธฐ (Fluid / 100% Fill) - ๊ธฐ๋ณธ๊ฐ’\n * - ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ์˜ ๋‚จ์€ ๊ณต๊ฐ„์„ ๊ฐ€๋“ ์ฑ„์šฐ๊ณ  ๋‚ด๋ถ€ ์˜์—ญ์—์„œ ์Šคํฌ๋กค์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.\n * - ์‚ฌ์šฉ๋ฒ•: <nine-table> ๋˜๋Š” ํ˜ธ์ŠคํŠธ ์—˜๋ฆฌ๋จผํŠธ์— ๋ณ„๋„ ์†์„ฑ์„ ์ฃผ์ง€ ์•Š์œผ๋ฉด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.\n *\n * 2. ์ฝ˜ํ…์ธ  ๋ฐ€์ฐฉํ˜• / ๋ฐ์ดํ„ฐ ๊ฑด์ˆ˜ ๊ธฐ๋ฐ˜ ๋™์  ๋†’์ด (Auto-Height)\n * - ๋ฐ์ดํ„ฐ ํ–‰ ๊ฐœ์ˆ˜์— ๋งž์ถฐ ์ปดํฌ๋„ŒํŠธ ์ „์ฒด ๋†’์ด๊ฐ€ ์œ ์—ฐํ•˜๊ฒŒ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค.\n * - ์‚ฌ์šฉ๋ฒ•: <nine-table auto-height=\"true\"> ๋˜๋Š” ํ˜ธ์ŠคํŠธ ์—˜๋ฆฌ๋จผํŠธ์— auto-height=\"true\" ์†์„ฑ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.\n *\n * 3. ํ”ฝ์…€ ๊ณ ์ • ๋†’์ด (Fixed Pixel)\n * - ๋ถ€๋ชจ ํฌ๊ธฐ์— ์ƒ๊ด€์—†์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง€์ •ํ•œ ๊ณ ์ • ํฌ๊ธฐ๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.\n * - ์‚ฌ์šฉ๋ฒ•: <nine-table style=\"height: 400px;\"> ์ฒ˜๋Ÿผ ์ธ๋ผ์ธ ์Šคํƒ€์ผ๋กœ ๋†’์ด๋ฅผ ์ง์ ‘ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.\n */\n\nimport './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n #resizeObserver = null;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n this.#observeResize();\n }\n\n #observeResize = () => {\n const hostEl = this.#root.host;\n if (!hostEl) return;\n\n this.#resizeObserver = new ResizeObserver((entries) => {\n for (let entry of entries) {\n const isAutoHeight = hostEl.getAttribute('auto-height') === 'true';\n if (isAutoHeight) {\n this.#applyAutoHeight(hostEl);\n }\n }\n });\n\n this.#resizeObserver.observe(hostEl);\n };\n\n #applyAutoHeight = (hostEl) => {\n const activeSheet = hostEl.shadowRoot?.querySelector('nine-table-sheet.active');\n if (!activeSheet) return;\n\n const rowCount = activeSheet.getRowCount?.() || 0;\n\n // 1. ์†์„ฑ์œผ๋กœ maxRows๋ฅผ ๋ฐ›๋˜, ์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’ 10 ์„ค์ •\n const maxRows = parseInt(hostEl.getAttribute('max-display-row'), 10) || 10;\n const targetRows = Math.min(rowCount, maxRows);\n\n // 2. ์‹ค์ œ ๋ Œ๋”๋ง๋œ ํ–‰(tr) ๋†’์ด๋ฅผ ๋™์ ์œผ๋กœ ์ธก์ • (์—†์œผ๋ฉด ๊ธฐ๋ณธ 32px ํด๋ฐฑ)\n const sampleRow = activeSheet.querySelector('tbody tr') || activeSheet.querySelector('tr');\n const rowHeight = sampleRow ? sampleRow.getBoundingClientRect().height : 32;\n\n // 3. ํ—ค๋” ๋ฐ ํ‘ธํ„ฐ/ํƒญ ์˜์—ญ์˜ ์‹ค์ œ ๋†’์ด๋ฅผ DOM์—์„œ ๋™์  ์ธก์ •\n const headerEl = this.#root.querySelector('nine-table-header');\n const footerEl = this.#root.querySelector('nine-table-sheets-footer');\n const headerHeight = headerEl ? headerEl.getBoundingClientRect().height : 40;\n const footerHeight = footerEl ? footerEl.getBoundingClientRect().height : 32;\n const extraPadding = 16; // ๋ฏธ์„ธ ์—ฌ๋ฐฑ\n\n const headerFooterHeight = headerHeight + footerHeight + extraPadding;\n const calculatedHeight = (targetRows * rowHeight) + headerFooterHeight;\n\n hostEl.style.height = `${calculatedHeight}px`;\n hostEl.style.maxHeight = `${(maxRows * rowHeight) + headerFooterHeight}px`;\n\n const sheetsBody = this.#root.querySelector('nine-table-sheets-body');\n if (sheetsBody) {\n sheetsBody.style.overflowY = rowCount > maxRows ? 'auto' : 'hidden';\n }\n };\n\n #render = () => {\n const hostEl = this.#root.host;\n const rawElements = Array.from(hostEl.children);\n const rawTables = rawElements.filter(el => el.tagName === 'TABLE');\n const isAutoHeight = hostEl.getAttribute('auto-height') === 'true';\n\n const sheetsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<nine-table-sheet class=\"${className}\" data-index=\"${idx}\"></nine-table-sheet>`;\n }).join('');\n\n const tabsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<div class=\"nine-tab-item ${className}\" data-index=\"${idx}\">Sheet ${idx + 1}</div>`;\n }).join('');\n\n this.#root.innerHTML = `\n <style>\n :host { \n display: flex; \n flex-direction: column; \n position: relative; \n overflow: hidden; \n height: ${isAutoHeight ? 'auto' : '100%'}; \n background: #fff; \n }\n nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }\n nine-table-body { display: flex; flex-direction: row; flex: 1; overflow: hidden; position: relative; }\n nine-table-summary { display: none; width: 250px; flex-shrink: 0; border-right: 1px solid #e5e7eb; }\n nine-splitter:not([data-split-index]) { width: 4px; background: #e5e7eb; cursor: col-resize; flex-shrink: 0; }\n nine-table-analysis { display: none; }\n nine-table-footer { display: none; }\n\n nine-table-sheets {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n background: #fff;\n }\n nine-table-sheets-body {\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n flex-direction: row;\n }\n nine-table-sheet {\n display: none !important;\n height: 100%;\n overflow: auto;\n flex: 1 1 100%;\n }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-footer {\n display: flex;\n height: 32px;\n background: #f3f4f6;\n border-top: 1px solid #e5e7eb;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n flex-shrink: 0;\n }\n nine-table-sheets .nine-tab-bar {\n display: flex;\n align-items: center;\n gap: 2px;\n overflow-x: auto;\n flex: 1;\n height: 100%;\n }\n nine-table-sheets .nine-tab-item {\n padding: 4px 12px;\n cursor: pointer;\n font-size: 12px;\n color: #4b5563;\n background: #e5e7eb;\n border: 1px solid #d1d5db;\n border-top: none;\n border-radius: 0 0 3px 3px;\n user-select: none;\n }\n nine-table-sheets .nine-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n nine-table-sheets .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-table-sheets>\n <nine-table-sheets-body>${sheetsHtml}</nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\">${tabsHtml}</div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n </nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n\n const $sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n $sheetElements?.forEach(($el, idx) => {\n if (rawTables[idx]) {\n setTimeout(() => {\n $el.init(rawTables[idx]);\n if (isAutoHeight) {\n this.#applyAutoHeight(hostEl);\n }\n });\n }\n });\n };\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot ํ•˜๋‚˜๋งŒ ๋„˜๊ฒจ์„œ ๋‚ด๋ถ€์—์„œ ๋ ˆ์ด์•„์›ƒ ๋ฐ ํ…Œ์ด๋ธ” ์ˆ˜์ง‘ ์ฒ˜๋ฆฌ\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_NineTableSheet","__privateAdd","_tableElement","__publicField","tableEl","initializeTable","tbl","ensureColgroup","firstRow","colCount","colgroup","defaultWidth","i","col","ensureThead","thead","clonedTable","__privateSet","__privateGet","leftContainer","bodyContainer","rightContainer","filterTableByFixed","sourceTable","targetFixedType","isBody","cols","targetIndices","idx","fixedAttr","tr","cells","bodyTable","leftTable","leftWidth","w","activeLeftWidth","rightTable","rightWidth","activeRightWidth","_render","NineTableSheet","_NineTableSheets","_init","tabBar","e","tabItem","isMultiSelect","index","updateSplitters","body","splitter","splitIndex","leftSheet","rightSheet","tabItems","sheetElements","tab","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","activeSheet","rowCountEl","NineTableSheets","_LayoutManager","shadowRoot","_root","_resizeObserver","_observeResize","hostEl","entries","entry","_applyAutoHeight","_a","rowCount","_b","maxRows","targetRows","sampleRow","rowHeight","headerEl","footerEl","headerHeight","footerHeight","headerFooterHeight","calculatedHeight","sheetsBody","rawTables","el","isAutoHeight","sheetsHtml","_","tabsHtml","$sheetElements","$el","LayoutManager","_NineTable","_created","NineTable"],"mappings":";;;;;;;;;AAEO,MAAMA,IAAN,MAAMA,UAAcC,EAAY,YAAY;AAAA,EAC/C,cAAc;AACV,UAAK,GACL,KAAK,KAAK,cAAc,OAAO;AAAA,EACnC;AACJ;AALmDC,EAAAF,GAAA;AAA5C,IAAMG,IAANH;AAOA,MAAMI,IAAQ,IAAID,EAAK;;ACPvB,MAAME,IAAN,MAAMA,UAAuB,YAAY;AAAA,EAG5C,cAAc;AACV,UAAK;AAHT,IAAAC,EAAA,MAAAC,GAAgB;AAUhB,IAAAC,EAAA,cAAO,gBAAAN,EAAA,CAACO,MAAY;AAChB,UAAI,CAACA,EAAS;AAEd,YAAMC,IAAkB,gBAAAR,EAAA,CAACS,MAAQ;AAE7B,cAAMC,IAAiB,gBAAAV,EAAA,CAACS,MAAQ;AAC5B,cAAIA,EAAI,cAAc,UAAU,EAAG;AAEnC,gBAAME,IAAWF,EAAI,cAAc,UAAU,KAAKA,EAAI,cAAc,IAAI,GAClEG,IAAWD,IAAWA,EAAS,iBAAiB,QAAQ,EAAE,SAAS,GAEnEE,IAAW,SAAS,cAAc,UAAU,GAC5CC,IAAe,KAAK,IAAI,KAAK,OAAOL,EAAI,eAAe,OAAOG,CAAQ,GAAG,GAAG;AAElF,mBAASG,IAAI,GAAGA,IAAIH,GAAUG,KAAK;AAC/B,kBAAMC,IAAM,SAAS,cAAc,KAAK;AACxC,YAAAA,EAAI,aAAa,SAASF,CAAY,GACtCD,EAAS,YAAYG,CAAG;AAAA,UAC5B;AACA,UAAAP,EAAI,QAAQI,CAAQ;AAAA,QACxB,GAfuB,mBAiBjBI,IAAc,gBAAAjB,EAAA,CAACS,MAAQ;AACzB,cAAIA,EAAI,cAAc,OAAO,EAAG;AAEhC,gBAAMS,IAAQ,SAAS,cAAc,OAAO,GACtCL,IAAWJ,EAAI,cAAc,UAAU;AAE7C,UAAII,IACAA,EAAS,MAAMK,CAAK,IAEpBT,EAAI,QAAQS,CAAK;AAAA,QAEzB,GAXoB;AAapB,eAAAR,EAAeD,CAAG,GAClBQ,EAAYR,CAAG,GAEfA,EAAI,UAAU,IAAI,oBAAoB,GAC/BA;AAAA,MACX,GArCwB,oBAuClBU,IAAcZ,EAAQ,UAAU,EAAI;AAC1C,MAAAa,EAAA,MAAKf,GAAgBG,EAAgBW,CAAW,IAChDE,EAAA,MAAKhB,GAAc,MAAM,UAAU;AAEnC,YAAMiB,IAAgB,KAAK,cAAc,oBAAoB,GACvDC,IAAgB,KAAK,cAAc,oBAAoB,GACvDC,IAAiB,KAAK,cAAc,qBAAqB,GAEzDC,IAAqB,gBAAAzB,EAAA,CAAC0B,GAAaC,GAAiBC,IAAS,OAAU;AACzE,cAAMnB,IAAMiB,EAAY,UAAU,EAAI,GAChCG,IAAO,MAAM,KAAKpB,EAAI,iBAAiB,cAAc,CAAC,GACtDqB,IAAgB,CAAA;AAEtB,eAAAD,EAAK,QAAQ,CAACb,GAAKe,MAAQ;AACvB,gBAAMC,IAAYhB,EAAI,aAAa,OAAO;AAE1C,WADgBY,IAAU,CAACI,KAAaA,MAAc,KAAOA,MAAcL,MAEvEG,EAAc,KAAKC,CAAG;AAAA,QAE9B,CAAC,GAEDD,EAAc,QAAO,EAAG,QAAQ,CAAAC,MAAO;AACnC,UAAIF,EAAKE,CAAG,KAAGF,EAAKE,CAAG,EAAE,OAAM,GAC/BtB,EAAI,iBAAiB,IAAI,EAAE,QAAQ,CAAAwB,MAAM;AACrC,kBAAMC,IAAQD,EAAG,iBAAiB,QAAQ;AAC1C,YAAIC,EAAMH,CAAG,KAAGG,EAAMH,CAAG,EAAE,OAAM;AAAA,UACrC,CAAC;AAAA,QACL,CAAC,GAEMtB;AAAA,MACX,GAtB2B;AAyB3B,UAAIc,GAAe;AACf,cAAMY,IAAYV,EAAmBJ,EAAA,MAAKhB,IAAe,MAAM,EAAI;AACnE,QAAAkB,EAAc,YAAY,IAC1BA,EAAc,YAAYY,CAAS;AAAA,MACvC;AAGA,UAAIb,GAAe;AACf,cAAMc,IAAYX,EAAmBJ,EAAA,MAAKhB,IAAe,QAAQ,EAAK;AAEtE,YAAIgC,IAAY;AAChB,QAAAD,EAAU,iBAAiB,KAAK,EAAE,QAAQ,CAAApB,MAAO;AAC7C,gBAAMsB,IAAI,SAAStB,EAAI,aAAa,OAAO,GAAG,EAAE;AAChD,UAAK,MAAMsB,CAAC,MAAGD,KAAaC;AAAA,QAChC,CAAC,GAEDhB,EAAc,YAAY,IAC1BA,EAAc,YAAYc,CAAS;AAEnC,cAAMG,IAAkBF,IAAY,IAAIA,IAAY;AACpD,QAAAf,EAAc,MAAM,OAAO,OAAOiB,CAAe,MACjDjB,EAAc,MAAM,QAAQ,GAAGiB,CAAe;AAAA,MAClD;AAGA,UAAIf,GAAgB;AAChB,cAAMgB,IAAaf,EAAmBJ,EAAA,MAAKhB,IAAe,SAAS,EAAK;AAExE,YAAIoC,IAAa;AACjB,QAAAD,EAAW,iBAAiB,KAAK,EAAE,QAAQ,CAAAxB,MAAO;AAC9C,gBAAMsB,IAAI,SAAStB,EAAI,aAAa,OAAO,GAAG,EAAE;AAChD,UAAK,MAAMsB,CAAC,MAAGG,KAAcH;AAAA,QACjC,CAAC,GAEDd,EAAe,YAAY,IAC3BA,EAAe,YAAYgB,CAAU;AAErC,cAAME,IAAmBD,IAAa,IAAIA,IAAa;AACvD,QAAAjB,EAAe,MAAM,OAAO,OAAOkB,CAAgB,MACnDlB,EAAe,MAAM,QAAQ,GAAGkB,CAAgB;AAAA,MACpD;AAEA,MAAAxC,EAAM,IAAI,iDAAiD,KAAK,YAAW,CAAE,EAAE;AAAA,IACnF,GAtHO;AAwHP,IAAAI,EAAA,qBAAc,gBAAAN,EAAA,MACLqB,EAAA,MAAKhB,KACHgB,EAAA,MAAKhB,GAAc,iBAAiB,UAAU,EAAE,SADvB,GADtB;AAKd,IAAAD,EAAA,MAAAuC,GAAU,gBAAA3C,EAAA,MAAM;AACZ,WAAK,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAkGrB,GAnGU;AAAA,EAnIV;AAAA,EAEA,oBAAoB;AAChB,IAAAqB,EAAA,MAAKsB,GAAL;AAAA,EACJ;AAAA,EAoOA,uBAAuB;AACnB,SAAK,YAAY,IACjBzC,EAAM,IAAI,2BAA2B;AAAA,EACzC;AACJ;AAhPIG,IAAA,eAuIAsC,IAAA,eAxI4C3C,EAAAG,GAAA;AAAzC,IAAMyC,IAANzC;AAmPF,eAAe,IAAI,kBAAkB,KACtC,eAAe,OAAO,oBAAoByC,CAAc;;ACpPrD,MAAMC,IAAN,MAAMA,UAAwB,YAAY;AAAA,EAC7C,cAAc;AACV,UAAK;AAOT,IAAAzC,EAAA,MAAA0C,GAAQ,gBAAA9C,EAAA,MAAM;AACV,YAAM+C,IAAS,KAAK,cAAc,eAAe;AACjD,MAAKA,MAELA,EAAO,iBAAiB,SAAS,CAACC,MAAM;AACpC,cAAMC,IAAUD,EAAE,OAAO,QAAQ,gBAAgB;AACjD,YAAI,CAACC,EAAS;AAEd,cAAMC,IAAgBF,EAAE,WAAWA,EAAE,WAAWA,EAAE,UAC5CG,IAAQ,SAASF,EAAQ,QAAQ,OAAO,EAAE;AAChD,aAAK,YAAYE,GAAOD,CAAa;AAAA,MACzC,CAAC,GAED,KAAK,YAAY,GAAG,EAAK;AAAA,IAC7B,GAdQ;AAgBR,IAAA5C,EAAA,qBAAc,gBAAAN,EAAA,CAACmD,GAAOD,IAAgB,OAAU;AAE5C,YAAME,IAAkB,gBAAApD,EAAA,MAAM;AAC1B,cAAMqD,IAAO,KAAK,cAAc,wBAAwB;AAExD,QADkBA,EAAK,iBAAiB,eAAe,EAC7C,QAAQ,CAAAC,MAAY;AAC1B,gBAAMC,IAAa,SAASD,EAAS,QAAQ,YAAY,EAAE,GACrDE,IAAYH,EAAK,cAAc,gCAAgCE,IAAa,CAAC,IAAI,GACjFE,IAAaJ,EAAK,cAAc,gCAAgCE,CAAU,IAAI;AAEpF,UAAIC,KAAaC,KAAcD,EAAU,UAAU,SAAS,QAAQ,KAAKC,EAAW,UAAU,SAAS,QAAQ,IAC3GH,EAAS,UAAU,IAAI,QAAQ,IAE/BA,EAAS,UAAU,OAAO,QAAQ;AAAA,QAE1C,CAAC;AAAA,MACL,GAdwB,oBAgBlBP,IAAS,KAAK,cAAc,eAAe,GAC3CM,IAAO,KAAK,cAAc,wBAAwB,GAClDK,IAAWX,EAAO,iBAAiB,gBAAgB,GACnDY,IAAgBN,EAAK,iBAAiB,kBAAkB;AAE9D,UAAI,CAACK,EAASP,CAAK,EAAG;AAEtB,UAAI,CAACD;AACD,QAAAQ,EAAS,QAAQ,CAACE,GAAK7B,MAAQ;AAC3B,UAAA6B,EAAI,UAAU,OAAO,UAAU7B,MAAQoB,CAAK;AAC5C,gBAAMU,IAAQR,EAAK,cAAc,gCAAgCtB,CAAG,IAAI;AACxE,UAAI8B,MAAOA,EAAM,MAAM,OAAO;AAAA,QAClC,CAAC,GACDF,EAAc,QAAQ,CAACE,GAAO9B,MAAQ;AAClC,UAAA8B,EAAM,UAAU,OAAO,UAAU9B,MAAQoB,CAAK;AAAA,QAClD,CAAC;AAAA,WACE;AACH,cAAMW,IAAaJ,EAASP,CAAK,GAC3BY,IAAahB,EAAO,iBAAiB,uBAAuB;AAElE,YAAIe,EAAW,UAAU,SAAS,QAAQ,KAAKC,EAAW,UAAU;AAChE;AAGJ,QAAAD,EAAW,UAAU,OAAO,QAAQ;AACpC,cAAME,IAAcX,EAAK,cAAc,gCAAgCF,CAAK,IAAI;AAChF,QAAIa,MACAA,EAAY,UAAU,OAAO,QAAQ,GAChCA,EAAY,UAAU,SAAS,QAAQ,MACxCA,EAAY,MAAM,OAAO;AAAA,MAGrC;AAEA,YAAMC,IAAe,MAAM,KAAKZ,EAAK,iBAAiB,yBAAyB,CAAC;AAChF,UAAIY,EAAa,SAAS,GAAG;AACzB,cAAMC,IAAgB,IAAID,EAAa;AACvC,QAAAA,EAAa,QAAQ,CAAAJ,MAAS;AAC1B,WAAI,CAACA,EAAM,MAAM,QAAQA,EAAM,MAAM,SAAS,gBAC1CA,EAAM,MAAM,OAAO,GAAGK,CAAY,IAAIA,CAAY;AAAA,QAE1D,CAAC;AAAA,MACL;AACI,QAAAD,EAAa,QAAQ,CAAAJ,MAAS;AAC1B,UAAAA,EAAM,MAAM,OAAO;AAAA,QACvB,CAAC;AAGL,MAAAT,EAAe;AAEf,YAAMe,IAAcd,EAAK,cAAc,yBAAyB;AAChE,UAAIc,KAAe,OAAOA,EAAY,eAAgB,YAAY;AAC9D,cAAMC,IAAa,KAAK,cAAc,YAAY;AAClD,QAAIA,MACAA,EAAW,cAAcD,EAAY,YAAW,EAAG,eAAc;AAAA,MAEzE;AAAA,IACJ,GA3Ec;AAAA,EAtBd;AAAA,EAEA,oBAAoB;AAChB,IAAA9C,EAAA,MAAKyB,GAAL;AAAA,EACJ;AAgGJ;AA9FIA,IAAA,eAT6C9C,EAAA6C,GAAA;AAA1C,IAAMwB,IAANxB;AAyGF,eAAe,IAAI,mBAAmB,KACvC,eAAe,OAAO,qBAAqBwB,CAAe;;AC1FvD,MAAMC,IAAN,MAAMA,EAAc;AAAA,EAIvB,YAAYC,GAAY;AAHxB,IAAAnE,EAAA,MAAAoE;AACA,IAAApE,EAAA,MAAAqE,GAAkB;AAQlB,IAAArE,EAAA,MAAAsE,GAAiB,gBAAA1E,EAAA,MAAM;AACnB,YAAM2E,IAAStD,EAAA,MAAKmD,GAAM;AAC1B,MAAKG,MAELvD,EAAA,MAAKqD,GAAkB,IAAI,eAAe,CAACG,MAAY;AACnD,iBAASC,KAASD;AAEd,UADqBD,EAAO,aAAa,aAAa,MAAM,UAExDtD,EAAA,MAAKyD,GAAL,WAAsBH;AAAA,MAGlC,CAAC,IAEDtD,EAAA,MAAKoD,GAAgB,QAAQE,CAAM;AAAA,IACvC,GAdiB;AAgBjB,IAAAvE,EAAA,MAAA0E,GAAmB,gBAAA9E,EAAA,CAAC2E,MAAW;;AAC3B,YAAMR,KAAcY,IAAAJ,EAAO,eAAP,gBAAAI,EAAmB,cAAc;AACrD,UAAI,CAACZ,EAAa;AAElB,YAAMa,MAAWC,IAAAd,EAAY,gBAAZ,gBAAAc,EAAA,KAAAd,OAA+B,GAG1Ce,IAAU,SAASP,EAAO,aAAa,iBAAiB,GAAG,EAAE,KAAK,IAClEQ,IAAa,KAAK,IAAIH,GAAUE,CAAO,GAGvCE,IAAYjB,EAAY,cAAc,UAAU,KAAKA,EAAY,cAAc,IAAI,GACnFkB,IAAYD,IAAYA,EAAU,sBAAqB,EAAG,SAAS,IAGnEE,IAAWjE,EAAA,MAAKmD,GAAM,cAAc,mBAAmB,GACvDe,IAAWlE,EAAA,MAAKmD,GAAM,cAAc,0BAA0B,GAC9DgB,IAAeF,IAAWA,EAAS,sBAAqB,EAAG,SAAS,IACpEG,IAAeF,IAAWA,EAAS,sBAAqB,EAAG,SAAS,IAGpEG,IAAqBF,IAAeC,IAFrB,IAGfE,IAAoBR,IAAaE,IAAaK;AAEpD,MAAAf,EAAO,MAAM,SAAS,GAAGgB,CAAgB,MACzChB,EAAO,MAAM,YAAY,GAAIO,IAAUG,IAAaK,CAAkB;AAEtE,YAAME,IAAavE,EAAA,MAAKmD,GAAM,cAAc,wBAAwB;AACpE,MAAIoB,MACAA,EAAW,MAAM,YAAYZ,IAAWE,IAAU,SAAS;AAAA,IAEnE,GA/BmB;AAiCnB,IAAA9E,EAAA,MAAAuC,GAAU,gBAAA3C,EAAA,MAAM;AACZ,YAAM2E,IAAStD,EAAA,MAAKmD,GAAM,MAEpBqB,IADc,MAAM,KAAKlB,EAAO,QAAQ,EAChB,OAAO,CAAAmB,MAAMA,EAAG,YAAY,OAAO,GAC3DC,IAAepB,EAAO,aAAa,aAAa,MAAM,QAEtDqB,IAAaH,EAAU,IAAI,CAACI,GAAGlE,MAE1B,4BADWA,MAAQ,IAAI,WAAW,EACG,iBAAiBA,CAAG,uBACnE,EAAE,KAAK,EAAE,GAEJmE,IAAWL,EAAU,IAAI,CAACI,GAAGlE,MAExB,6BADWA,MAAQ,IAAI,WAAW,EACI,iBAAiBA,CAAG,WAAWA,IAAM,CAAC,QACtF,EAAE,KAAK,EAAE;AAEV,MAAAV,EAAA,MAAKmD,GAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAODuB,IAAe,SAAS,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CAiFdC,CAAU;AAAA;AAAA,oDAEJE,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASpD,YAAMC,IAAiB9E,EAAA,MAAKmD,GAAM,iBAAiB,kBAAkB;AAErE,MAAA2B,KAAA,QAAAA,EAAgB,QAAQ,CAACC,GAAKrE,MAAQ;AAClC,QAAI8D,EAAU9D,CAAG,KACb,WAAW,MAAM;AACb,UAAAqE,EAAI,KAAKP,EAAU9D,CAAG,CAAC,GACnBgE,KACA1E,EAAA,MAAKyD,GAAL,WAAsBH;AAAA,QAE9B,CAAC;AAAA,MAET;AAAA,IACJ,GA/HU;AAtDN,IAAAvD,EAAA,MAAKoD,GAAQD,IACblD,EAAA,MAAKsB,GAAL,YACAtB,EAAA,MAAKqD,GAAL;AAAA,EACJ;AAmLJ;AA1LIF,IAAA,eACAC,IAAA,eAQAC,IAAA,eAgBAI,IAAA,eAiCAnC,IAAA,eA3DuB3C,EAAAsE,GAAA;AAApB,IAAM+B,IAAN/B;;ACfQ,MAAMgC,IAAN,MAAMA,UAAkB,YAAY;AAAA,EAG/C,cAAc;AACV,UAAK;AAHT,IAAAlG,EAAA,MAAAmG,GAAW;AAIP,SAAK,aAAa,EAAE,MAAM,OAAM,CAAE;AAAA,EACtC;AAAA,EAEA,oBAAoB;AAChB,IAAIlF,EAAA,MAAKkF,OAGT,KAAK,gBAAgB,IAAIF,EAAc,KAAK,UAAU,GAGtDjF,EAAA,MAAKmF,GAAW,KAChBrG,EAAM,IAAI,sBAAsB,GAEhC,KAAK,cAAc,IAAI,YAAY,QAAQ,EAAE,SAAS,IAAM,QAAQ,EAAE,QAAQ,KAAI,EAAE,CAAE,CAAC;AAAA,EAC3F;AAAA,EAEA,uBAAuB;AACnB,IAAAA,EAAM,IAAI,yBAAyB;AAAA,EACvC;AACJ;AAvBIqG,IAAA,eAD+CvG,EAAAsG,GAAA;AAApC,IAAME,IAANF;AA0BV,eAAe,IAAI,YAAY,KAChC,eAAe,OAAO,cAAcE,CAAS;"}
1
+ {"version":3,"file":"nine-table.js","sources":["../src/external/NoPeer.js","../src/ui/nine-table-sheet.js","../src/ui/nine-table-sheets.js","../src/ui/LayoutManager.js","../src/core/nine-table.js"],"sourcesContent":["import { trace as traceOrigin } from '@ninebone/util';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-table\", \"green\");\n }\n}\n\nexport const trace = new Trace();","import { trace } from \"@nopeer\";\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n static SCROLLBAR_SIZE = 16;\n\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#render();\n };\n\n init = (tableEl) => {\n if (!tableEl) return;\n\n const initializeTable = (tbl) => {\n\n const ensureColgroup = (tbl) => {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n };\n\n const ensureThead = (tbl) => {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n };\n\n ensureColgroup(tbl);\n ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n };\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const leftContainer = this.querySelector('.ng-container-left');\n const bodyContainer = this.querySelector('.ng-container-body');\n const rightContainer = this.querySelector('.ng-container-right');\n\n const filterTableByFixed = (sourceTable, targetFixedType, isBody = false) => {\n const tbl = sourceTable.cloneNode(true);\n const cols = Array.from(tbl.querySelectorAll('colgroup col'));\n const targetIndices = [];\n\n cols.forEach((col, idx) => {\n const fixedAttr = col.getAttribute('fixed');\n const isMatch = isBody ? (!fixedAttr || fixedAttr === '') : (fixedAttr === targetFixedType);\n if (!isMatch) {\n targetIndices.push(idx);\n }\n });\n\n targetIndices.reverse().forEach(idx => {\n if (cols[idx]) cols[idx].remove();\n tbl.querySelectorAll('tr').forEach(tr => {\n const cells = tr.querySelectorAll('th, td');\n if (cells[idx]) cells[idx].remove();\n });\n });\n\n return tbl;\n };\n\n // 1. ๋ฉ”์ธ ๋ฐ”๋”” ์˜์—ญ\n if (bodyContainer) {\n const bodyTable = filterTableByFixed(this.#tableElement, null, true);\n bodyContainer.innerHTML = '';\n bodyContainer.appendChild(bodyTable);\n }\n\n // 2. ์ขŒ์ธก ๊ณ ์ • ์˜์—ญ\n if (leftContainer) {\n const leftTable = filterTableByFixed(this.#tableElement, 'left', false);\n\n let leftWidth = 0;\n leftTable.querySelectorAll('col').forEach(col => {\n const w = parseInt(col.getAttribute('width'), 10);\n if (!isNaN(w)) leftWidth += w;\n });\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n\n const activeLeftWidth = leftWidth > 0 ? leftWidth : 0;\n leftContainer.style.flex = `0 0 ${activeLeftWidth}px`;\n leftContainer.style.width = `${activeLeftWidth}px`;\n }\n\n // 3. ์šฐ์ธก ๊ณ ์ • ์˜์—ญ\n if (rightContainer) {\n const rightTable = filterTableByFixed(this.#tableElement, 'right', false);\n\n let rightWidth = 0;\n rightTable.querySelectorAll('col').forEach(col => {\n const w = parseInt(col.getAttribute('width'), 10);\n if (!isNaN(w)) rightWidth += w;\n });\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n\n const activeRightWidth = rightWidth > 0 ? rightWidth : 0;\n rightContainer.style.flex = `0 0 ${activeRightWidth}px`;\n rightContainer.style.width = `${activeRightWidth}px`;\n }\n\n // ๋ฐ์ดํ„ฐ ๊ฑด์ˆ˜ ๊ธฐ๋ฐ˜ ์„ธ๋กœ ์Šคํฌ๋กค ์ œ์–ด ์ •์ฑ… ๋ฐ˜์˜\n if (bodyContainer) {\n const rowCount = this.getRowCount();\n bodyContainer.style.overflowY = rowCount > 10 ? 'auto' : 'hidden';\n }\n\n trace.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);\n };\n\n getRowCount = () => {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n };\n\n // ๐ŸŽฏ ์™ธ๋ถ€ ์Šคํฌ๋กค๋ฐ” ๋ฐ ์ปจํŠธ๋กค๋Ÿฌ ์—ฐ๋™์šฉ ๋ฉ”์„œ๋“œ\n scrollToX = (scrollLeft) => {\n const bodyContainer = this.querySelector('.ng-container-body');\n if (bodyContainer) bodyContainer.scrollLeft = scrollLeft;\n };\n\n scrollToY = (scrollTop) => {\n const bodyContainer = this.querySelector('.ng-container-body');\n if (bodyContainer) bodyContainer.scrollTop = scrollTop;\n };\n\n #render = () => {\n const sbSize = NineTableSheet.SCROLLBAR_SIZE;\n\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n overflow: hidden;\n }\n \n nine-table-sheet .ng-container-top {\n display: flex;\n flex-direction: row;\n flex: 1 1 auto;\n width: 100%;\n height: calc(100% - ${sbSize}px);\n overflow: hidden;\n position: relative;\n }\n \n nine-table-sheet .ng-container-left {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: #ffffff;\n border-right: 1px solid #e5e7eb;\n flex-shrink: 0;\n }\n \n nine-table-sheet .ng-container-body {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow-x: auto;\n overflow-y: auto;\n background: #ffffff;\n position: relative;\n }\n \n nine-table-sheet .ng-container-right {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\n flex-shrink: 0;\n }\n \n nine-table-sheet .ng-container-bottom {\n display: flex;\n flex-direction: row;\n height: ${sbSize}px;\n min-height: ${sbSize}px;\n flex-shrink: 0;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n }\n \n nine-table-sheet nine-table-hscrollbar {\n flex: 1;\n height: 100%;\n overflow: hidden;\n display: block;\n }\n \n nine-table-sheet .ng-scroll-edge {\n width: ${sbSize}px;\n min-width: ${sbSize}px;\n height: 100%;\n flex-shrink: 0;\n background: #f3f4f6;\n }\n \n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n \n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n \n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class='ng-container-top'>\n <div class='ng-container-left'></div>\n <div class='ng-container-body'></div>\n <div class='ng-container-right'></div>\n <nine-table-vscrollbar></nine-table-vscrollbar>\n </div>\n <div class='ng-container-bottom'>\n <nine-table-hscrollbar></nine-table-hscrollbar>\n <div class='ng-scroll-edge'></div>\n </div>\n `;\n };\n\n disconnectedCallback() {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n };\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#init();\n };\n\n #init = () => {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.switchSheet(index, isMultiSelect);\n });\n\n this.switchSheet(0, false);\n };\n\n switchSheet = (index, isMultiSelect = false) => {\n\n const updateSplitters = () => {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n };\n\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n };\n\n\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","/**\n * [LayoutManager ๋†’์ด ์„ค์ •(Height Configuration) ์‚ฌ์šฉ ์˜ˆ์ œ]\n *\n * 1. ๋ถ€๋ชจ ์˜์—ญ ์ฑ„์šฐ๊ธฐ (Fluid / 100% Fill) - ๊ธฐ๋ณธ๊ฐ’\n * - ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ์˜ ๋‚จ์€ ๊ณต๊ฐ„์„ ๊ฐ€๋“ ์ฑ„์šฐ๊ณ  ๋‚ด๋ถ€ ์˜์—ญ์—์„œ ์Šคํฌ๋กค์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.\n * - ์‚ฌ์šฉ๋ฒ•: <nine-table> ๋˜๋Š” ํ˜ธ์ŠคํŠธ ์—˜๋ฆฌ๋จผํŠธ์— ๋ณ„๋„ ์†์„ฑ์„ ์ฃผ์ง€ ์•Š์œผ๋ฉด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.\n *\n * 2. ์ฝ˜ํ…์ธ  ๋ฐ€์ฐฉํ˜• / ๋ฐ์ดํ„ฐ ๊ฑด์ˆ˜ ๊ธฐ๋ฐ˜ ๋™์  ๋†’์ด (Auto-Height)\n * - ๋ฐ์ดํ„ฐ ํ–‰ ๊ฐœ์ˆ˜์— ๋งž์ถฐ ์ปดํฌ๋„ŒํŠธ ์ „์ฒด ๋†’์ด๊ฐ€ ์œ ์—ฐํ•˜๊ฒŒ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค.\n * - ์‚ฌ์šฉ๋ฒ•: <nine-table auto-height=\"true\"> ๋˜๋Š” ํ˜ธ์ŠคํŠธ ์—˜๋ฆฌ๋จผํŠธ์— auto-height=\"true\" ์†์„ฑ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.\n *\n * 3. ํ”ฝ์…€ ๊ณ ์ • ๋†’์ด (Fixed Pixel)\n * - ๋ถ€๋ชจ ํฌ๊ธฐ์— ์ƒ๊ด€์—†์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง€์ •ํ•œ ๊ณ ์ • ํฌ๊ธฐ๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.\n * - ์‚ฌ์šฉ๋ฒ•: <nine-table style=\"height: 400px;\"> ์ฒ˜๋Ÿผ ์ธ๋ผ์ธ ์Šคํƒ€์ผ๋กœ ๋†’์ด๋ฅผ ์ง์ ‘ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.\n */\n\nimport './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n #resizeObserver = null;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n this.#observeResize();\n }\n\n #observeResize = () => {\n const hostEl = this.#root.host;\n if (!hostEl) return;\n\n this.#resizeObserver = new ResizeObserver((entries) => {\n for (let entry of entries) {\n const isAutoHeight = hostEl.getAttribute('auto-height') === 'true';\n if (isAutoHeight) {\n this.#applyAutoHeight(hostEl);\n }\n }\n });\n\n this.#resizeObserver.observe(hostEl);\n };\n\n #applyAutoHeight = (hostEl) => {\n const activeSheet = hostEl.shadowRoot?.querySelector('nine-table-sheet.active');\n if (!activeSheet) return;\n\n const rowCount = activeSheet.getRowCount?.() || 0;\n\n // 1. ์†์„ฑ์œผ๋กœ maxRows๋ฅผ ๋ฐ›๋˜, ์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’ 10 ์„ค์ •\n const maxRows = parseInt(hostEl.getAttribute('max-display-row'), 10) || 10;\n const targetRows = Math.min(rowCount, maxRows);\n\n // 2. ์‹ค์ œ ๋ Œ๋”๋ง๋œ ํ–‰(tr) ๋†’์ด๋ฅผ ๋™์ ์œผ๋กœ ์ธก์ • (์—†์œผ๋ฉด ๊ธฐ๋ณธ 32px ํด๋ฐฑ)\n const sampleRow = activeSheet.querySelector('tbody tr') || activeSheet.querySelector('tr');\n const rowHeight = sampleRow ? sampleRow.getBoundingClientRect().height : 32;\n\n // 3. ํ—ค๋” ๋ฐ ํ‘ธํ„ฐ/ํƒญ ์˜์—ญ์˜ ์‹ค์ œ ๋†’์ด๋ฅผ DOM์—์„œ ๋™์  ์ธก์ •\n const headerEl = this.#root.querySelector('nine-table-header');\n const footerEl = this.#root.querySelector('nine-table-sheets-footer');\n const headerHeight = headerEl ? headerEl.getBoundingClientRect().height : 40;\n const footerHeight = footerEl ? footerEl.getBoundingClientRect().height : 32;\n const extraPadding = 16; // ๋ฏธ์„ธ ์—ฌ๋ฐฑ\n\n const headerFooterHeight = headerHeight + footerHeight + extraPadding;\n const calculatedHeight = (targetRows * rowHeight) + headerFooterHeight;\n\n hostEl.style.height = `${calculatedHeight}px`;\n hostEl.style.maxHeight = `${(maxRows * rowHeight) + headerFooterHeight}px`;\n\n const sheetsBody = this.#root.querySelector('nine-table-sheets-body');\n if (sheetsBody) {\n sheetsBody.style.overflowY = rowCount > maxRows ? 'auto' : 'hidden';\n }\n };\n\n #render = () => {\n const hostEl = this.#root.host;\n const rawElements = Array.from(hostEl.children);\n const rawTables = rawElements.filter(el => el.tagName === 'TABLE');\n const isAutoHeight = hostEl.getAttribute('auto-height') === 'true';\n\n const sheetsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<nine-table-sheet class=\"${className}\" data-index=\"${idx}\"></nine-table-sheet>`;\n }).join('');\n\n const tabsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<div class=\"nine-tab-item ${className}\" data-index=\"${idx}\">Sheet ${idx + 1}</div>`;\n }).join('');\n\n this.#root.innerHTML = `\n <style>\n :host { \n display: flex; \n flex-direction: column; \n position: relative; \n overflow: hidden; \n height: ${isAutoHeight ? 'auto' : '100%'}; \n background: #fff; \n }\n nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }\n nine-table-body { display: flex; flex-direction: row; flex: 1; overflow: hidden; position: relative; }\n nine-table-summary { display: none; width: 250px; flex-shrink: 0; border-right: 1px solid #e5e7eb; }\n nine-splitter:not([data-split-index]) { width: 4px; background: #e5e7eb; cursor: col-resize; flex-shrink: 0; }\n nine-table-analysis { display: none; }\n nine-table-footer { display: none; }\n\n nine-table-sheets {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n background: #fff;\n }\n nine-table-sheets-body {\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n flex-direction: row;\n }\n nine-table-sheet {\n display: none !important;\n height: 100%;\n overflow: auto;\n flex: 1 1 100%;\n }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-footer {\n display: flex;\n height: 32px;\n background: #f3f4f6;\n border-top: 1px solid #e5e7eb;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n flex-shrink: 0;\n }\n nine-table-sheets .nine-tab-bar {\n display: flex;\n align-items: center;\n gap: 2px;\n overflow-x: auto;\n flex: 1;\n height: 100%;\n }\n nine-table-sheets .nine-tab-item {\n padding: 4px 12px;\n cursor: pointer;\n font-size: 12px;\n color: #4b5563;\n background: #e5e7eb;\n border: 1px solid #d1d5db;\n border-top: none;\n border-radius: 0 0 3px 3px;\n user-select: none;\n }\n nine-table-sheets .nine-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n nine-table-sheets .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-table-sheets>\n <nine-table-sheets-body>${sheetsHtml}</nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\">${tabsHtml}</div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n </nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n\n const $sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n $sheetElements?.forEach(($el, idx) => {\n if (rawTables[idx]) {\n setTimeout(() => {\n $el.init(rawTables[idx]);\n if (isAutoHeight) {\n this.#applyAutoHeight(hostEl);\n }\n });\n }\n });\n };\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot ํ•˜๋‚˜๋งŒ ๋„˜๊ฒจ์„œ ๋‚ด๋ถ€์—์„œ ๋ ˆ์ด์•„์›ƒ ๋ฐ ํ…Œ์ด๋ธ” ์ˆ˜์ง‘ ์ฒ˜๋ฆฌ\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_NineTableSheet","__privateAdd","_tableElement","__publicField","tableEl","initializeTable","tbl","ensureColgroup","firstRow","colCount","colgroup","defaultWidth","i","col","ensureThead","thead","clonedTable","__privateSet","__privateGet","leftContainer","bodyContainer","rightContainer","filterTableByFixed","sourceTable","targetFixedType","isBody","cols","targetIndices","idx","fixedAttr","tr","cells","bodyTable","leftTable","leftWidth","w","activeLeftWidth","rightTable","rightWidth","activeRightWidth","rowCount","scrollLeft","scrollTop","_render","sbSize","NineTableSheet","_NineTableSheets","_init","tabBar","e","tabItem","isMultiSelect","index","updateSplitters","body","splitter","splitIndex","leftSheet","rightSheet","tabItems","sheetElements","tab","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","activeSheet","rowCountEl","NineTableSheets","_LayoutManager","shadowRoot","_root","_resizeObserver","_observeResize","hostEl","entries","entry","_applyAutoHeight","_a","_b","maxRows","targetRows","sampleRow","rowHeight","headerEl","footerEl","headerHeight","footerHeight","headerFooterHeight","calculatedHeight","sheetsBody","rawTables","el","isAutoHeight","sheetsHtml","_","tabsHtml","$sheetElements","$el","LayoutManager","_NineTable","_created","NineTable"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- (function(s,t){typeof exports=="object"&&typeof module<"u"?t(require("@ninebone/util")):typeof define=="function"&&define.amd?define(["@ninebone/util"],t):(s=typeof globalThis<"u"?globalThis:s||self,t(s.NineboneUtil))})(this,function(s){"use strict";var U=Object.defineProperty;var Y=s=>{throw TypeError(s)};var G=(s,t,a)=>t in s?U(s,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):s[t]=a;var d=(s,t)=>U(s,"name",{value:t,configurable:!0});var z=(s,t,a)=>G(s,typeof t!="symbol"?t+"":t,a),D=(s,t,a)=>t.has(s)||Y("Cannot "+a);var l=(s,t,a)=>(D(s,t,"read from private field"),a?a.call(s):t.get(s)),k=(s,t,a)=>t.has(s)?Y("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(s):t.set(s,a),H=(s,t,a,E)=>(D(s,t,"write to private field"),E?E.call(s,a):t.set(s,a),a);var q,T,$,w,A,R,C,M,L;const W=class W extends s.trace.constructor{constructor(){super(),this.init("nine-table","green")}};d(W,"Trace");let t=W;const a=new t,j=class j extends HTMLElement{constructor(){super();k(this,q,null);z(this,"init",d(r=>{if(!r)return;const f=d(e=>{const c=d(i=>{if(i.querySelector("colgroup"))return;const o=i.querySelector("tbody tr")||i.querySelector("tr"),m=o?o.querySelectorAll("th, td").length:1,g=document.createElement("colgroup"),S=Math.max(Math.floor((i.clientWidth||600)/m),100);for(let v=0;v<m;v++){const P=document.createElement("col");P.setAttribute("width",S),g.appendChild(P)}i.prepend(g)},"ensureColgroup"),n=d(i=>{if(i.querySelector("thead"))return;const o=document.createElement("thead"),m=i.querySelector("colgroup");m?m.after(o):i.prepend(o)},"ensureThead");return c(e),n(e),e.classList.add("nine-table-element"),e},"initializeTable"),p=r.cloneNode(!0);H(this,q,f(p)),l(this,q).style.display="table";const y=this.querySelector(".ng-container-left"),b=this.querySelector(".ng-container-body"),u=this.querySelector(".ng-container-right"),x=d((e,c,n=!1)=>{const i=e.cloneNode(!0),o=Array.from(i.querySelectorAll("colgroup col")),m=[];return o.forEach((g,S)=>{const v=g.getAttribute("fixed");(n?!v||v==="":v===c)||m.push(S)}),m.reverse().forEach(g=>{o[g]&&o[g].remove(),i.querySelectorAll("tr").forEach(S=>{const v=S.querySelectorAll("th, td");v[g]&&v[g].remove()})}),i},"filterTableByFixed");if(b){const e=x(l(this,q),null,!0);b.innerHTML="",b.appendChild(e)}if(y){const e=x(l(this,q),"left",!1);let c=0;e.querySelectorAll("col").forEach(i=>{const o=parseInt(i.getAttribute("width"),10);isNaN(o)||(c+=o)}),y.innerHTML="",y.appendChild(e);const n=c>0?c:0;y.style.flex=`0 0 ${n}px`,y.style.width=`${n}px`}if(u){const e=x(l(this,q),"right",!1);let c=0;e.querySelectorAll("col").forEach(i=>{const o=parseInt(i.getAttribute("width"),10);isNaN(o)||(c+=o)}),u.innerHTML="",u.appendChild(e);const n=c>0?c:0;u.style.flex=`0 0 ${n}px`,u.style.width=`${n}px`}a.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`)},"init"));z(this,"getRowCount",d(()=>l(this,q)?l(this,q).querySelectorAll("tbody tr").length:0,"getRowCount"));k(this,T,d(()=>{this.innerHTML=`
1
+ (function(l,n){typeof exports=="object"&&typeof module<"u"?n(require("@ninebone/util")):typeof define=="function"&&define.amd?define(["@ninebone/util"],n):(l=typeof globalThis<"u"?globalThis:l||self,n(l.NineboneUtil))})(this,function(l){"use strict";var P=Object.defineProperty;var Z=l=>{throw TypeError(l)};var X=(l,n,d)=>n in l?P(l,n,{enumerable:!0,configurable:!0,writable:!0,value:d}):l[n]=d;var c=(l,n)=>P(l,"name",{value:n,configurable:!0});var E=(l,n,d)=>X(l,typeof n!="symbol"?n+"":n,d),U=(l,n,d)=>n.has(l)||Z("Cannot "+d);var a=(l,n,d)=>(U(l,n,"read from private field"),d?d.call(l):n.get(l)),k=(l,n,d)=>n.has(l)?Z("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(l):n.set(l,d),T=(l,n,d,C)=>(U(l,n,"write to private field"),C?C.call(l,d):n.set(l,d),d);var q,H,M,w,L,z,$,I,R;const j=class j extends l.trace.constructor{constructor(){super(),this.init("nine-table","green")}};c(j,"Trace");let n=j;const d=new n,A=class A extends HTMLElement{constructor(){super();k(this,q,null);E(this,"init",c(t=>{if(!t)return;const r=c(e=>{const h=c(o=>{if(o.querySelector("colgroup"))return;const s=o.querySelector("tbody tr")||o.querySelector("tr"),m=s?s.querySelectorAll("th, td").length:1,g=document.createElement("colgroup"),S=Math.max(Math.floor((o.clientWidth||600)/m),100);for(let v=0;v<m;v++){const F=document.createElement("col");F.setAttribute("width",S),g.appendChild(F)}o.prepend(g)},"ensureColgroup"),i=c(o=>{if(o.querySelector("thead"))return;const s=document.createElement("thead"),m=o.querySelector("colgroup");m?m.after(s):o.prepend(s)},"ensureThead");return h(e),i(e),e.classList.add("nine-table-element"),e},"initializeTable"),p=t.cloneNode(!0);T(this,q,r(p)),a(this,q).style.display="table";const y=this.querySelector(".ng-container-left"),b=this.querySelector(".ng-container-body"),u=this.querySelector(".ng-container-right"),x=c((e,h,i=!1)=>{const o=e.cloneNode(!0),s=Array.from(o.querySelectorAll("colgroup col")),m=[];return s.forEach((g,S)=>{const v=g.getAttribute("fixed");(i?!v||v==="":v===h)||m.push(S)}),m.reverse().forEach(g=>{s[g]&&s[g].remove(),o.querySelectorAll("tr").forEach(S=>{const v=S.querySelectorAll("th, td");v[g]&&v[g].remove()})}),o},"filterTableByFixed");if(b){const e=x(a(this,q),null,!0);b.innerHTML="",b.appendChild(e)}if(y){const e=x(a(this,q),"left",!1);let h=0;e.querySelectorAll("col").forEach(o=>{const s=parseInt(o.getAttribute("width"),10);isNaN(s)||(h+=s)}),y.innerHTML="",y.appendChild(e);const i=h>0?h:0;y.style.flex=`0 0 ${i}px`,y.style.width=`${i}px`}if(u){const e=x(a(this,q),"right",!1);let h=0;e.querySelectorAll("col").forEach(o=>{const s=parseInt(o.getAttribute("width"),10);isNaN(s)||(h+=s)}),u.innerHTML="",u.appendChild(e);const i=h>0?h:0;u.style.flex=`0 0 ${i}px`,u.style.width=`${i}px`}if(b){const e=this.getRowCount();b.style.overflowY=e>10?"auto":"hidden"}d.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`)},"init"));E(this,"getRowCount",c(()=>a(this,q)?a(this,q).querySelectorAll("tbody tr").length:0,"getRowCount"));E(this,"scrollToX",c(t=>{const r=this.querySelector(".ng-container-body");r&&(r.scrollLeft=t)},"scrollToX"));E(this,"scrollToY",c(t=>{const r=this.querySelector(".ng-container-body");r&&(r.scrollTop=t)},"scrollToY"));k(this,H,c(()=>{const t=A.SCROLLBAR_SIZE;this.innerHTML=`
2
2
  <style>
3
3
  nine-table-sheet {
4
4
  display: flex;
@@ -14,36 +14,46 @@
14
14
  nine-table-sheet .ng-container-top {
15
15
  display: flex;
16
16
  flex-direction: row;
17
- flex: 1;
17
+ flex: 1 1 auto;
18
18
  width: 100%;
19
+ height: calc(100% - ${t}px);
19
20
  overflow: hidden;
20
21
  position: relative;
21
22
  }
22
23
 
23
24
  nine-table-sheet .ng-container-left {
25
+ display: flex;
26
+ flex-direction: column;
24
27
  overflow: hidden;
25
28
  background: #ffffff;
26
29
  border-right: 1px solid #e5e7eb;
30
+ flex-shrink: 0;
27
31
  }
28
32
 
29
- /* ์ปจํ…Œ์ด๋„ˆ ์ž์ฒด ์Šคํฌ๋กค๋ฐ” ์ œ๊ฑฐ ๋ฐ ์™ธ๋ถ€ ์ œ์–ด์šฉ ๋ทฐํฌํŠธ ์„ค์ • */
30
33
  nine-table-sheet .ng-container-body {
34
+ display: flex;
35
+ flex-direction: column;
31
36
  flex: 1;
32
- overflow: hidden;
37
+ overflow-x: auto;
38
+ overflow-y: auto;
33
39
  background: #ffffff;
34
40
  position: relative;
35
41
  }
36
42
 
37
43
  nine-table-sheet .ng-container-right {
44
+ display: flex;
45
+ flex-direction: column;
38
46
  overflow: hidden;
39
47
  background: #ffffff;
40
48
  border-left: 1px solid #e5e7eb;
49
+ flex-shrink: 0;
41
50
  }
42
51
 
43
52
  nine-table-sheet .ng-container-bottom {
44
53
  display: flex;
45
54
  flex-direction: row;
46
- height: 16px;
55
+ height: ${t}px;
56
+ min-height: ${t}px;
47
57
  flex-shrink: 0;
48
58
  background: #f9fafb;
49
59
  border-top: 1px solid #e5e7eb;
@@ -51,12 +61,15 @@
51
61
 
52
62
  nine-table-sheet nine-table-hscrollbar {
53
63
  flex: 1;
64
+ height: 100%;
54
65
  overflow: hidden;
55
66
  display: block;
56
67
  }
57
68
 
58
69
  nine-table-sheet .ng-scroll-edge {
59
- width: 16px;
70
+ width: ${t}px;
71
+ min-width: ${t}px;
72
+ height: 100%;
60
73
  flex-shrink: 0;
61
74
  background: #f3f4f6;
62
75
  }
@@ -95,7 +108,7 @@
95
108
  <nine-table-hscrollbar></nine-table-hscrollbar>
96
109
  <div class='ng-scroll-edge'></div>
97
110
  </div>
98
- `},"#render"))}connectedCallback(){l(this,T).call(this)}disconnectedCallback(){this.innerHTML="",a.log("NineTableSheet destroyed.")}};q=new WeakMap,T=new WeakMap,d(j,"NineTableSheet");let E=j;customElements.get("nine-table-sheet")||customElements.define("nine-table-sheet",E);const K=class K extends HTMLElement{constructor(){super();k(this,$,d(()=>{const r=this.querySelector(".nine-tab-bar");r&&(r.addEventListener("click",f=>{const p=f.target.closest(".nine-tab-item");if(!p)return;const y=f.ctrlKey||f.metaKey||f.shiftKey,b=parseInt(p.dataset.index,10);this.switchSheet(b,y)}),this.switchSheet(0,!1))},"#init"));z(this,"switchSheet",d((r,f=!1)=>{const p=d(()=>{const n=this.querySelector("nine-table-sheets-body");n.querySelectorAll("nine-splitter").forEach(o=>{const m=parseInt(o.dataset.splitIndex,10),g=n.querySelector(`nine-table-sheet[data-index="${m-1}"]`),S=n.querySelector(`nine-table-sheet[data-index="${m}"]`);g&&S&&g.classList.contains("active")&&S.classList.contains("active")?o.classList.add("active"):o.classList.remove("active")})},"updateSplitters"),y=this.querySelector(".nine-tab-bar"),b=this.querySelector("nine-table-sheets-body"),u=y.querySelectorAll(".nine-tab-item"),x=b.querySelectorAll("nine-table-sheet");if(!u[r])return;if(!f)u.forEach((n,i)=>{n.classList.toggle("active",i===r);const o=b.querySelector(`nine-table-sheet[data-index="${i}"]`);o&&(o.style.flex="")}),x.forEach((n,i)=>{n.classList.toggle("active",i===r)});else{const n=u[r],i=y.querySelectorAll(".nine-tab-item.active");if(n.classList.contains("active")&&i.length<=1)return;n.classList.toggle("active");const o=b.querySelector(`nine-table-sheet[data-index="${r}"]`);o&&(o.classList.toggle("active"),o.classList.contains("active")||(o.style.flex=""))}const e=Array.from(b.querySelectorAll("nine-table-sheet.active"));if(e.length>1){const n=1/e.length;e.forEach(i=>{(!i.style.flex||i.style.flex==="1 1 100%")&&(i.style.flex=`${n} ${n} 0px`)})}else e.forEach(n=>{n.style.flex="1 1 100%"});p();const c=b.querySelector("nine-table-sheet.active");if(c&&typeof c.getRowCount=="function"){const n=this.querySelector("#row-count");n&&(n.textContent=c.getRowCount().toLocaleString())}},"switchSheet"))}connectedCallback(){l(this,$).call(this)}};$=new WeakMap,d(K,"NineTableSheets");let I=K;customElements.get("nine-table-sheets")||customElements.define("nine-table-sheets",I);const F=class F{constructor(h){k(this,w);k(this,A,null);k(this,R,d(()=>{const h=l(this,w).host;h&&(H(this,A,new ResizeObserver(r=>{for(let f of r)h.getAttribute("auto-height")==="true"&&l(this,C).call(this,h)})),l(this,A).observe(h))},"#observeResize"));k(this,C,d(h=>{var S,v;const r=(S=h.shadowRoot)==null?void 0:S.querySelector("nine-table-sheet.active");if(!r)return;const f=((v=r.getRowCount)==null?void 0:v.call(r))||0,p=parseInt(h.getAttribute("max-display-row"),10)||10,y=Math.min(f,p),b=r.querySelector("tbody tr")||r.querySelector("tr"),u=b?b.getBoundingClientRect().height:32,x=l(this,w).querySelector("nine-table-header"),e=l(this,w).querySelector("nine-table-sheets-footer"),c=x?x.getBoundingClientRect().height:40,n=e?e.getBoundingClientRect().height:32,o=c+n+16,m=y*u+o;h.style.height=`${m}px`,h.style.maxHeight=`${p*u+o}px`;const g=l(this,w).querySelector("nine-table-sheets-body");g&&(g.style.overflowY=f>p?"auto":"hidden")},"#applyAutoHeight"));k(this,M,d(()=>{const h=l(this,w).host,f=Array.from(h.children).filter(x=>x.tagName==="TABLE"),p=h.getAttribute("auto-height")==="true",y=f.map((x,e)=>`<nine-table-sheet class="${e===0?"active":""}" data-index="${e}"></nine-table-sheet>`).join(""),b=f.map((x,e)=>`<div class="nine-tab-item ${e===0?"active":""}" data-index="${e}">Sheet ${e+1}</div>`).join("");l(this,w).innerHTML=`
111
+ `},"#render"))}connectedCallback(){a(this,H).call(this)}disconnectedCallback(){this.innerHTML="",d.log("NineTableSheet destroyed.")}};q=new WeakMap,H=new WeakMap,c(A,"NineTableSheet"),E(A,"SCROLLBAR_SIZE",16);let C=A;customElements.get("nine-table-sheet")||customElements.define("nine-table-sheet",C);const O=class O extends HTMLElement{constructor(){super();k(this,M,c(()=>{const t=this.querySelector(".nine-tab-bar");t&&(t.addEventListener("click",r=>{const p=r.target.closest(".nine-tab-item");if(!p)return;const y=r.ctrlKey||r.metaKey||r.shiftKey,b=parseInt(p.dataset.index,10);this.switchSheet(b,y)}),this.switchSheet(0,!1))},"#init"));E(this,"switchSheet",c((t,r=!1)=>{const p=c(()=>{const i=this.querySelector("nine-table-sheets-body");i.querySelectorAll("nine-splitter").forEach(s=>{const m=parseInt(s.dataset.splitIndex,10),g=i.querySelector(`nine-table-sheet[data-index="${m-1}"]`),S=i.querySelector(`nine-table-sheet[data-index="${m}"]`);g&&S&&g.classList.contains("active")&&S.classList.contains("active")?s.classList.add("active"):s.classList.remove("active")})},"updateSplitters"),y=this.querySelector(".nine-tab-bar"),b=this.querySelector("nine-table-sheets-body"),u=y.querySelectorAll(".nine-tab-item"),x=b.querySelectorAll("nine-table-sheet");if(!u[t])return;if(!r)u.forEach((i,o)=>{i.classList.toggle("active",o===t);const s=b.querySelector(`nine-table-sheet[data-index="${o}"]`);s&&(s.style.flex="")}),x.forEach((i,o)=>{i.classList.toggle("active",o===t)});else{const i=u[t],o=y.querySelectorAll(".nine-tab-item.active");if(i.classList.contains("active")&&o.length<=1)return;i.classList.toggle("active");const s=b.querySelector(`nine-table-sheet[data-index="${t}"]`);s&&(s.classList.toggle("active"),s.classList.contains("active")||(s.style.flex=""))}const e=Array.from(b.querySelectorAll("nine-table-sheet.active"));if(e.length>1){const i=1/e.length;e.forEach(o=>{(!o.style.flex||o.style.flex==="1 1 100%")&&(o.style.flex=`${i} ${i} 0px`)})}else e.forEach(i=>{i.style.flex="1 1 100%"});p();const h=b.querySelector("nine-table-sheet.active");if(h&&typeof h.getRowCount=="function"){const i=this.querySelector("#row-count");i&&(i.textContent=h.getRowCount().toLocaleString())}},"switchSheet"))}connectedCallback(){a(this,M).call(this)}};M=new WeakMap,c(O,"NineTableSheets");let B=O;customElements.get("nine-table-sheets")||customElements.define("nine-table-sheets",B);const K=class K{constructor(f){k(this,w);k(this,L,null);k(this,z,c(()=>{const f=a(this,w).host;f&&(T(this,L,new ResizeObserver(t=>{for(let r of t)f.getAttribute("auto-height")==="true"&&a(this,$).call(this,f)})),a(this,L).observe(f))},"#observeResize"));k(this,$,c(f=>{var S,v;const t=(S=f.shadowRoot)==null?void 0:S.querySelector("nine-table-sheet.active");if(!t)return;const r=((v=t.getRowCount)==null?void 0:v.call(t))||0,p=parseInt(f.getAttribute("max-display-row"),10)||10,y=Math.min(r,p),b=t.querySelector("tbody tr")||t.querySelector("tr"),u=b?b.getBoundingClientRect().height:32,x=a(this,w).querySelector("nine-table-header"),e=a(this,w).querySelector("nine-table-sheets-footer"),h=x?x.getBoundingClientRect().height:40,i=e?e.getBoundingClientRect().height:32,s=h+i+16,m=y*u+s;f.style.height=`${m}px`,f.style.maxHeight=`${p*u+s}px`;const g=a(this,w).querySelector("nine-table-sheets-body");g&&(g.style.overflowY=r>p?"auto":"hidden")},"#applyAutoHeight"));k(this,I,c(()=>{const f=a(this,w).host,r=Array.from(f.children).filter(x=>x.tagName==="TABLE"),p=f.getAttribute("auto-height")==="true",y=r.map((x,e)=>`<nine-table-sheet class="${e===0?"active":""}" data-index="${e}"></nine-table-sheet>`).join(""),b=r.map((x,e)=>`<div class="nine-tab-item ${e===0?"active":""}" data-index="${e}">Sheet ${e+1}</div>`).join("");a(this,w).innerHTML=`
99
112
  <style>
100
113
  :host {
101
114
  display: flex;
@@ -192,5 +205,5 @@
192
205
  <nine-table-analysis></nine-table-analysis>
193
206
  </nine-table-body>
194
207
  <nine-table-footer></nine-table-footer>
195
- `;const u=l(this,w).querySelectorAll("nine-table-sheet");u==null||u.forEach((x,e)=>{f[e]&&setTimeout(()=>{x.init(f[e]),p&&l(this,C).call(this,h)})})},"#render"));H(this,w,h),l(this,M).call(this),l(this,R).call(this)}};w=new WeakMap,A=new WeakMap,R=new WeakMap,C=new WeakMap,M=new WeakMap,d(F,"LayoutManager");let N=F;const O=class O extends HTMLElement{constructor(){super();k(this,L,!1);this.attachShadow({mode:"open"})}connectedCallback(){l(this,L)||(this.layoutManager=new N(this.shadowRoot),H(this,L,!0),a.log("NineTable connected."),this.dispatchEvent(new CustomEvent("load",{bubbles:!0,detail:{target:this}})))}disconnectedCallback(){a.log("NineTable disconnected.")}};L=new WeakMap,d(O,"NineTable");let B=O;customElements.get("nine-table")||customElements.define("nine-table",B)});
208
+ `;const u=a(this,w).querySelectorAll("nine-table-sheet");u==null||u.forEach((x,e)=>{r[e]&&setTimeout(()=>{x.init(r[e]),p&&a(this,$).call(this,f)})})},"#render"));T(this,w,f),a(this,I).call(this),a(this,z).call(this)}};w=new WeakMap,L=new WeakMap,z=new WeakMap,$=new WeakMap,I=new WeakMap,c(K,"LayoutManager");let N=K;const Y=class Y extends HTMLElement{constructor(){super();k(this,R,!1);this.attachShadow({mode:"open"})}connectedCallback(){a(this,R)||(this.layoutManager=new N(this.shadowRoot),T(this,R,!0),d.log("NineTable connected."),this.dispatchEvent(new CustomEvent("load",{bubbles:!0,detail:{target:this}})))}disconnectedCallback(){d.log("NineTable disconnected.")}};R=new WeakMap,c(Y,"NineTable");let W=Y;customElements.get("nine-table")||customElements.define("nine-table",W)});
196
209
  //# sourceMappingURL=nine-table.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nine-table.umd.js","sources":["../src/external/NoPeer.js","../src/ui/nine-table-sheet.js","../src/ui/nine-table-sheets.js","../src/ui/LayoutManager.js","../src/core/nine-table.js"],"sourcesContent":["import { trace as traceOrigin } from '@ninebone/util';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-table\", \"green\");\n }\n}\n\nexport const trace = new Trace();","import { trace } from \"@nopeer\";\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#render();\n };\n\n init = (tableEl) => {\n if (!tableEl) return;\n\n const initializeTable = (tbl) => {\n\n const ensureColgroup = (tbl) => {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n };\n\n const ensureThead = (tbl) => {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n };\n\n ensureColgroup(tbl);\n ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n };\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const leftContainer = this.querySelector('.ng-container-left');\n const bodyContainer = this.querySelector('.ng-container-body');\n const rightContainer = this.querySelector('.ng-container-right');\n\n const filterTableByFixed = (sourceTable, targetFixedType, isBody = false) => {\n const tbl = sourceTable.cloneNode(true);\n const cols = Array.from(tbl.querySelectorAll('colgroup col'));\n const targetIndices = [];\n\n cols.forEach((col, idx) => {\n const fixedAttr = col.getAttribute('fixed');\n const isMatch = isBody ? (!fixedAttr || fixedAttr === '') : (fixedAttr === targetFixedType);\n if (!isMatch) {\n targetIndices.push(idx);\n }\n });\n\n targetIndices.reverse().forEach(idx => {\n if (cols[idx]) cols[idx].remove();\n tbl.querySelectorAll('tr').forEach(tr => {\n const cells = tr.querySelectorAll('th, td');\n if (cells[idx]) cells[idx].remove();\n });\n });\n\n return tbl;\n };\n\n // 1. ๋ฉ”์ธ ๋ฐ”๋”” ์˜์—ญ\n if (bodyContainer) {\n const bodyTable = filterTableByFixed(this.#tableElement, null, true);\n bodyContainer.innerHTML = '';\n bodyContainer.appendChild(bodyTable);\n }\n\n // 2. ์ขŒ์ธก ๊ณ ์ • ์˜์—ญ\n if (leftContainer) {\n const leftTable = filterTableByFixed(this.#tableElement, 'left', false);\n\n let leftWidth = 0;\n leftTable.querySelectorAll('col').forEach(col => {\n const w = parseInt(col.getAttribute('width'), 10);\n if (!isNaN(w)) leftWidth += w;\n });\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n\n const activeLeftWidth = leftWidth > 0 ? leftWidth : 0;\n leftContainer.style.flex = `0 0 ${activeLeftWidth}px`;\n leftContainer.style.width = `${activeLeftWidth}px`;\n }\n\n // 3. ์šฐ์ธก ๊ณ ์ • ์˜์—ญ\n if (rightContainer) {\n const rightTable = filterTableByFixed(this.#tableElement, 'right', false);\n\n let rightWidth = 0;\n rightTable.querySelectorAll('col').forEach(col => {\n const w = parseInt(col.getAttribute('width'), 10);\n if (!isNaN(w)) rightWidth += w;\n });\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n\n const activeRightWidth = rightWidth > 0 ? rightWidth : 0;\n rightContainer.style.flex = `0 0 ${activeRightWidth}px`;\n rightContainer.style.width = `${activeRightWidth}px`;\n }\n\n trace.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);\n };\n\n getRowCount = () => {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n };\n\n #render = () => {\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n overflow: hidden;\n }\n \n nine-table-sheet .ng-container-top {\n display: flex;\n flex-direction: row;\n flex: 1;\n width: 100%;\n overflow: hidden;\n position: relative;\n }\n \n nine-table-sheet .ng-container-left {\n overflow: hidden;\n background: #ffffff;\n border-right: 1px solid #e5e7eb;\n }\n \n /* ์ปจํ…Œ์ด๋„ˆ ์ž์ฒด ์Šคํฌ๋กค๋ฐ” ์ œ๊ฑฐ ๋ฐ ์™ธ๋ถ€ ์ œ์–ด์šฉ ๋ทฐํฌํŠธ ์„ค์ • */\n nine-table-sheet .ng-container-body {\n flex: 1;\n overflow: hidden;\n background: #ffffff;\n position: relative;\n }\n \n nine-table-sheet .ng-container-right {\n overflow: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\n }\n \n nine-table-sheet .ng-container-bottom {\n display: flex;\n flex-direction: row;\n height: 16px;\n flex-shrink: 0;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n }\n \n nine-table-sheet nine-table-hscrollbar {\n flex: 1;\n overflow: hidden;\n display: block;\n }\n \n nine-table-sheet .ng-scroll-edge {\n width: 16px;\n flex-shrink: 0;\n background: #f3f4f6;\n }\n \n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n \n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n \n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class='ng-container-top'>\n <div class='ng-container-left'></div>\n <div class='ng-container-body'></div>\n <div class='ng-container-right'></div>\n <nine-table-vscrollbar></nine-table-vscrollbar>\n </div>\n <div class='ng-container-bottom'>\n <nine-table-hscrollbar></nine-table-hscrollbar>\n <div class='ng-scroll-edge'></div>\n </div>\n `;\n };\n\n disconnectedCallback() {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n };\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#init();\n };\n\n #init = () => {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.switchSheet(index, isMultiSelect);\n });\n\n this.switchSheet(0, false);\n };\n\n switchSheet = (index, isMultiSelect = false) => {\n\n const updateSplitters = () => {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n };\n\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n };\n\n\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","/**\n * [LayoutManager ๋†’์ด ์„ค์ •(Height Configuration) ์‚ฌ์šฉ ์˜ˆ์ œ]\n *\n * 1. ๋ถ€๋ชจ ์˜์—ญ ์ฑ„์šฐ๊ธฐ (Fluid / 100% Fill) - ๊ธฐ๋ณธ๊ฐ’\n * - ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ์˜ ๋‚จ์€ ๊ณต๊ฐ„์„ ๊ฐ€๋“ ์ฑ„์šฐ๊ณ  ๋‚ด๋ถ€ ์˜์—ญ์—์„œ ์Šคํฌ๋กค์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.\n * - ์‚ฌ์šฉ๋ฒ•: <nine-table> ๋˜๋Š” ํ˜ธ์ŠคํŠธ ์—˜๋ฆฌ๋จผํŠธ์— ๋ณ„๋„ ์†์„ฑ์„ ์ฃผ์ง€ ์•Š์œผ๋ฉด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.\n *\n * 2. ์ฝ˜ํ…์ธ  ๋ฐ€์ฐฉํ˜• / ๋ฐ์ดํ„ฐ ๊ฑด์ˆ˜ ๊ธฐ๋ฐ˜ ๋™์  ๋†’์ด (Auto-Height)\n * - ๋ฐ์ดํ„ฐ ํ–‰ ๊ฐœ์ˆ˜์— ๋งž์ถฐ ์ปดํฌ๋„ŒํŠธ ์ „์ฒด ๋†’์ด๊ฐ€ ์œ ์—ฐํ•˜๊ฒŒ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค.\n * - ์‚ฌ์šฉ๋ฒ•: <nine-table auto-height=\"true\"> ๋˜๋Š” ํ˜ธ์ŠคํŠธ ์—˜๋ฆฌ๋จผํŠธ์— auto-height=\"true\" ์†์„ฑ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.\n *\n * 3. ํ”ฝ์…€ ๊ณ ์ • ๋†’์ด (Fixed Pixel)\n * - ๋ถ€๋ชจ ํฌ๊ธฐ์— ์ƒ๊ด€์—†์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง€์ •ํ•œ ๊ณ ์ • ํฌ๊ธฐ๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.\n * - ์‚ฌ์šฉ๋ฒ•: <nine-table style=\"height: 400px;\"> ์ฒ˜๋Ÿผ ์ธ๋ผ์ธ ์Šคํƒ€์ผ๋กœ ๋†’์ด๋ฅผ ์ง์ ‘ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.\n */\n\nimport './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n #resizeObserver = null;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n this.#observeResize();\n }\n\n #observeResize = () => {\n const hostEl = this.#root.host;\n if (!hostEl) return;\n\n this.#resizeObserver = new ResizeObserver((entries) => {\n for (let entry of entries) {\n const isAutoHeight = hostEl.getAttribute('auto-height') === 'true';\n if (isAutoHeight) {\n this.#applyAutoHeight(hostEl);\n }\n }\n });\n\n this.#resizeObserver.observe(hostEl);\n };\n\n #applyAutoHeight = (hostEl) => {\n const activeSheet = hostEl.shadowRoot?.querySelector('nine-table-sheet.active');\n if (!activeSheet) return;\n\n const rowCount = activeSheet.getRowCount?.() || 0;\n\n // 1. ์†์„ฑ์œผ๋กœ maxRows๋ฅผ ๋ฐ›๋˜, ์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’ 10 ์„ค์ •\n const maxRows = parseInt(hostEl.getAttribute('max-display-row'), 10) || 10;\n const targetRows = Math.min(rowCount, maxRows);\n\n // 2. ์‹ค์ œ ๋ Œ๋”๋ง๋œ ํ–‰(tr) ๋†’์ด๋ฅผ ๋™์ ์œผ๋กœ ์ธก์ • (์—†์œผ๋ฉด ๊ธฐ๋ณธ 32px ํด๋ฐฑ)\n const sampleRow = activeSheet.querySelector('tbody tr') || activeSheet.querySelector('tr');\n const rowHeight = sampleRow ? sampleRow.getBoundingClientRect().height : 32;\n\n // 3. ํ—ค๋” ๋ฐ ํ‘ธํ„ฐ/ํƒญ ์˜์—ญ์˜ ์‹ค์ œ ๋†’์ด๋ฅผ DOM์—์„œ ๋™์  ์ธก์ •\n const headerEl = this.#root.querySelector('nine-table-header');\n const footerEl = this.#root.querySelector('nine-table-sheets-footer');\n const headerHeight = headerEl ? headerEl.getBoundingClientRect().height : 40;\n const footerHeight = footerEl ? footerEl.getBoundingClientRect().height : 32;\n const extraPadding = 16; // ๋ฏธ์„ธ ์—ฌ๋ฐฑ\n\n const headerFooterHeight = headerHeight + footerHeight + extraPadding;\n const calculatedHeight = (targetRows * rowHeight) + headerFooterHeight;\n\n hostEl.style.height = `${calculatedHeight}px`;\n hostEl.style.maxHeight = `${(maxRows * rowHeight) + headerFooterHeight}px`;\n\n const sheetsBody = this.#root.querySelector('nine-table-sheets-body');\n if (sheetsBody) {\n sheetsBody.style.overflowY = rowCount > maxRows ? 'auto' : 'hidden';\n }\n };\n\n #render = () => {\n const hostEl = this.#root.host;\n const rawElements = Array.from(hostEl.children);\n const rawTables = rawElements.filter(el => el.tagName === 'TABLE');\n const isAutoHeight = hostEl.getAttribute('auto-height') === 'true';\n\n const sheetsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<nine-table-sheet class=\"${className}\" data-index=\"${idx}\"></nine-table-sheet>`;\n }).join('');\n\n const tabsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<div class=\"nine-tab-item ${className}\" data-index=\"${idx}\">Sheet ${idx + 1}</div>`;\n }).join('');\n\n this.#root.innerHTML = `\n <style>\n :host { \n display: flex; \n flex-direction: column; \n position: relative; \n overflow: hidden; \n height: ${isAutoHeight ? 'auto' : '100%'}; \n background: #fff; \n }\n nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }\n nine-table-body { display: flex; flex-direction: row; flex: 1; overflow: hidden; position: relative; }\n nine-table-summary { display: none; width: 250px; flex-shrink: 0; border-right: 1px solid #e5e7eb; }\n nine-splitter:not([data-split-index]) { width: 4px; background: #e5e7eb; cursor: col-resize; flex-shrink: 0; }\n nine-table-analysis { display: none; }\n nine-table-footer { display: none; }\n\n nine-table-sheets {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n background: #fff;\n }\n nine-table-sheets-body {\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n flex-direction: row;\n }\n nine-table-sheet {\n display: none !important;\n height: 100%;\n overflow: auto;\n flex: 1 1 100%;\n }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-footer {\n display: flex;\n height: 32px;\n background: #f3f4f6;\n border-top: 1px solid #e5e7eb;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n flex-shrink: 0;\n }\n nine-table-sheets .nine-tab-bar {\n display: flex;\n align-items: center;\n gap: 2px;\n overflow-x: auto;\n flex: 1;\n height: 100%;\n }\n nine-table-sheets .nine-tab-item {\n padding: 4px 12px;\n cursor: pointer;\n font-size: 12px;\n color: #4b5563;\n background: #e5e7eb;\n border: 1px solid #d1d5db;\n border-top: none;\n border-radius: 0 0 3px 3px;\n user-select: none;\n }\n nine-table-sheets .nine-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n nine-table-sheets .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-table-sheets>\n <nine-table-sheets-body>${sheetsHtml}</nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\">${tabsHtml}</div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n </nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n\n const $sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n $sheetElements?.forEach(($el, idx) => {\n if (rawTables[idx]) {\n setTimeout(() => {\n $el.init(rawTables[idx]);\n if (isAutoHeight) {\n this.#applyAutoHeight(hostEl);\n }\n });\n }\n });\n };\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot ํ•˜๋‚˜๋งŒ ๋„˜๊ฒจ์„œ ๋‚ด๋ถ€์—์„œ ๋ ˆ์ด์•„์›ƒ ๋ฐ ํ…Œ์ด๋ธ” ์ˆ˜์ง‘ ์ฒ˜๋ฆฌ\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_NineTableSheet","__privateAdd","_tableElement","__publicField","tableEl","initializeTable","tbl","ensureColgroup","firstRow","colCount","colgroup","defaultWidth","i","col","ensureThead","thead","clonedTable","__privateSet","__privateGet","leftContainer","bodyContainer","rightContainer","filterTableByFixed","sourceTable","targetFixedType","isBody","cols","targetIndices","idx","fixedAttr","tr","cells","bodyTable","leftTable","leftWidth","w","activeLeftWidth","rightTable","rightWidth","activeRightWidth","_render","NineTableSheet","_NineTableSheets","_init","tabBar","e","tabItem","isMultiSelect","index","updateSplitters","body","splitter","splitIndex","leftSheet","rightSheet","tabItems","sheetElements","tab","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","activeSheet","rowCountEl","NineTableSheets","_LayoutManager","shadowRoot","_root","_resizeObserver","_observeResize","hostEl","entries","entry","_applyAutoHeight","_a","rowCount","_b","maxRows","targetRows","sampleRow","rowHeight","headerEl","footerEl","headerHeight","footerHeight","headerFooterHeight","calculatedHeight","sheetsBody","rawTables","el","isAutoHeight","sheetsHtml","_","tabsHtml","$sheetElements","$el","LayoutManager","_NineTable","_created","NineTable"],"mappings":"8yBAEO,MAAMA,EAAN,MAAMA,UAAcC,EAAAA,MAAY,WAAY,CAC/C,aAAc,CACV,MAAK,EACL,KAAK,KAAK,aAAc,OAAO,CACnC,CACJ,EALmDC,EAAAF,EAAA,SAA5C,IAAMG,EAANH,EAOA,MAAMI,EAAQ,IAAID,ECPZE,EAAN,MAAMA,UAAuB,WAAY,CAG5C,aAAc,CACV,MAAK,EAHTC,EAAA,KAAAC,EAAgB,MAUhBC,EAAA,YAAON,EAACO,GAAY,CAChB,GAAI,CAACA,EAAS,OAEd,MAAMC,EAAkBR,EAACS,GAAQ,CAE7B,MAAMC,EAAiBV,EAACS,GAAQ,CAC5B,GAAIA,EAAI,cAAc,UAAU,EAAG,OAEnC,MAAME,EAAWF,EAAI,cAAc,UAAU,GAAKA,EAAI,cAAc,IAAI,EAClEG,EAAWD,EAAWA,EAAS,iBAAiB,QAAQ,EAAE,OAAS,EAEnEE,EAAW,SAAS,cAAc,UAAU,EAC5CC,EAAe,KAAK,IAAI,KAAK,OAAOL,EAAI,aAAe,KAAOG,CAAQ,EAAG,GAAG,EAElF,QAASG,EAAI,EAAGA,EAAIH,EAAUG,IAAK,CAC/B,MAAMC,EAAM,SAAS,cAAc,KAAK,EACxCA,EAAI,aAAa,QAASF,CAAY,EACtCD,EAAS,YAAYG,CAAG,CAC5B,CACAP,EAAI,QAAQI,CAAQ,CACxB,EAfuB,kBAiBjBI,EAAcjB,EAACS,GAAQ,CACzB,GAAIA,EAAI,cAAc,OAAO,EAAG,OAEhC,MAAMS,EAAQ,SAAS,cAAc,OAAO,EACtCL,EAAWJ,EAAI,cAAc,UAAU,EAEzCI,EACAA,EAAS,MAAMK,CAAK,EAEpBT,EAAI,QAAQS,CAAK,CAEzB,EAXoB,eAapB,OAAAR,EAAeD,CAAG,EAClBQ,EAAYR,CAAG,EAEfA,EAAI,UAAU,IAAI,oBAAoB,EAC/BA,CACX,EArCwB,mBAuClBU,EAAcZ,EAAQ,UAAU,EAAI,EAC1Ca,EAAA,KAAKf,EAAgBG,EAAgBW,CAAW,GAChDE,EAAA,KAAKhB,GAAc,MAAM,QAAU,QAEnC,MAAMiB,EAAgB,KAAK,cAAc,oBAAoB,EACvDC,EAAgB,KAAK,cAAc,oBAAoB,EACvDC,EAAiB,KAAK,cAAc,qBAAqB,EAEzDC,EAAqBzB,EAAA,CAAC0B,EAAaC,EAAiBC,EAAS,KAAU,CACzE,MAAMnB,EAAMiB,EAAY,UAAU,EAAI,EAChCG,EAAO,MAAM,KAAKpB,EAAI,iBAAiB,cAAc,CAAC,EACtDqB,EAAgB,CAAA,EAEtB,OAAAD,EAAK,QAAQ,CAACb,EAAKe,IAAQ,CACvB,MAAMC,EAAYhB,EAAI,aAAa,OAAO,GAC1BY,EAAU,CAACI,GAAaA,IAAc,GAAOA,IAAcL,IAEvEG,EAAc,KAAKC,CAAG,CAE9B,CAAC,EAEDD,EAAc,QAAO,EAAG,QAAQC,GAAO,CAC/BF,EAAKE,CAAG,GAAGF,EAAKE,CAAG,EAAE,OAAM,EAC/BtB,EAAI,iBAAiB,IAAI,EAAE,QAAQwB,GAAM,CACrC,MAAMC,EAAQD,EAAG,iBAAiB,QAAQ,EACtCC,EAAMH,CAAG,GAAGG,EAAMH,CAAG,EAAE,OAAM,CACrC,CAAC,CACL,CAAC,EAEMtB,CACX,EAtB2B,sBAyB3B,GAAIc,EAAe,CACf,MAAMY,EAAYV,EAAmBJ,EAAA,KAAKhB,GAAe,KAAM,EAAI,EACnEkB,EAAc,UAAY,GAC1BA,EAAc,YAAYY,CAAS,CACvC,CAGA,GAAIb,EAAe,CACf,MAAMc,EAAYX,EAAmBJ,EAAA,KAAKhB,GAAe,OAAQ,EAAK,EAEtE,IAAIgC,EAAY,EAChBD,EAAU,iBAAiB,KAAK,EAAE,QAAQpB,GAAO,CAC7C,MAAMsB,EAAI,SAAStB,EAAI,aAAa,OAAO,EAAG,EAAE,EAC3C,MAAMsB,CAAC,IAAGD,GAAaC,EAChC,CAAC,EAEDhB,EAAc,UAAY,GAC1BA,EAAc,YAAYc,CAAS,EAEnC,MAAMG,EAAkBF,EAAY,EAAIA,EAAY,EACpDf,EAAc,MAAM,KAAO,OAAOiB,CAAe,KACjDjB,EAAc,MAAM,MAAQ,GAAGiB,CAAe,IAClD,CAGA,GAAIf,EAAgB,CAChB,MAAMgB,EAAaf,EAAmBJ,EAAA,KAAKhB,GAAe,QAAS,EAAK,EAExE,IAAIoC,EAAa,EACjBD,EAAW,iBAAiB,KAAK,EAAE,QAAQxB,GAAO,CAC9C,MAAMsB,EAAI,SAAStB,EAAI,aAAa,OAAO,EAAG,EAAE,EAC3C,MAAMsB,CAAC,IAAGG,GAAcH,EACjC,CAAC,EAEDd,EAAe,UAAY,GAC3BA,EAAe,YAAYgB,CAAU,EAErC,MAAME,EAAmBD,EAAa,EAAIA,EAAa,EACvDjB,EAAe,MAAM,KAAO,OAAOkB,CAAgB,KACnDlB,EAAe,MAAM,MAAQ,GAAGkB,CAAgB,IACpD,CAEAxC,EAAM,IAAI,iDAAiD,KAAK,YAAW,CAAE,EAAE,CACnF,EAtHO,SAwHPI,EAAA,mBAAcN,EAAA,IACLqB,EAAA,KAAKhB,GACHgB,EAAA,KAAKhB,GAAc,iBAAiB,UAAU,EAAE,OADvB,EADtB,gBAKdD,EAAA,KAAAuC,EAAU3C,EAAA,IAAM,CACZ,KAAK,UAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAkGrB,EAnGU,WAnIV,CAEA,mBAAoB,CAChBqB,EAAA,KAAKsB,GAAL,UACJ,CAoOA,sBAAuB,CACnB,KAAK,UAAY,GACjBzC,EAAM,IAAI,2BAA2B,CACzC,CACJ,EAhPIG,EAAA,YAuIAsC,EAAA,YAxI4C3C,EAAAG,EAAA,kBAAzC,IAAMyC,EAANzC,EAmPF,eAAe,IAAI,kBAAkB,GACtC,eAAe,OAAO,mBAAoByC,CAAc,ECpPrD,MAAMC,EAAN,MAAMA,UAAwB,WAAY,CAC7C,aAAc,CACV,MAAK,EAOTzC,EAAA,KAAA0C,EAAQ9C,EAAA,IAAM,CACV,MAAM+C,EAAS,KAAK,cAAc,eAAe,EAC5CA,IAELA,EAAO,iBAAiB,QAAUC,GAAM,CACpC,MAAMC,EAAUD,EAAE,OAAO,QAAQ,gBAAgB,EACjD,GAAI,CAACC,EAAS,OAEd,MAAMC,EAAgBF,EAAE,SAAWA,EAAE,SAAWA,EAAE,SAC5CG,EAAQ,SAASF,EAAQ,QAAQ,MAAO,EAAE,EAChD,KAAK,YAAYE,EAAOD,CAAa,CACzC,CAAC,EAED,KAAK,YAAY,EAAG,EAAK,EAC7B,EAdQ,UAgBR5C,EAAA,mBAAcN,EAAA,CAACmD,EAAOD,EAAgB,KAAU,CAE5C,MAAME,EAAkBpD,EAAA,IAAM,CAC1B,MAAMqD,EAAO,KAAK,cAAc,wBAAwB,EACtCA,EAAK,iBAAiB,eAAe,EAC7C,QAAQC,GAAY,CAC1B,MAAMC,EAAa,SAASD,EAAS,QAAQ,WAAY,EAAE,EACrDE,EAAYH,EAAK,cAAc,gCAAgCE,EAAa,CAAC,IAAI,EACjFE,EAAaJ,EAAK,cAAc,gCAAgCE,CAAU,IAAI,EAEhFC,GAAaC,GAAcD,EAAU,UAAU,SAAS,QAAQ,GAAKC,EAAW,UAAU,SAAS,QAAQ,EAC3GH,EAAS,UAAU,IAAI,QAAQ,EAE/BA,EAAS,UAAU,OAAO,QAAQ,CAE1C,CAAC,CACL,EAdwB,mBAgBlBP,EAAS,KAAK,cAAc,eAAe,EAC3CM,EAAO,KAAK,cAAc,wBAAwB,EAClDK,EAAWX,EAAO,iBAAiB,gBAAgB,EACnDY,EAAgBN,EAAK,iBAAiB,kBAAkB,EAE9D,GAAI,CAACK,EAASP,CAAK,EAAG,OAEtB,GAAI,CAACD,EACDQ,EAAS,QAAQ,CAACE,EAAK7B,IAAQ,CAC3B6B,EAAI,UAAU,OAAO,SAAU7B,IAAQoB,CAAK,EAC5C,MAAMU,EAAQR,EAAK,cAAc,gCAAgCtB,CAAG,IAAI,EACpE8B,IAAOA,EAAM,MAAM,KAAO,GAClC,CAAC,EACDF,EAAc,QAAQ,CAACE,EAAO9B,IAAQ,CAClC8B,EAAM,UAAU,OAAO,SAAU9B,IAAQoB,CAAK,CAClD,CAAC,MACE,CACH,MAAMW,EAAaJ,EAASP,CAAK,EAC3BY,EAAahB,EAAO,iBAAiB,uBAAuB,EAElE,GAAIe,EAAW,UAAU,SAAS,QAAQ,GAAKC,EAAW,QAAU,EAChE,OAGJD,EAAW,UAAU,OAAO,QAAQ,EACpC,MAAME,EAAcX,EAAK,cAAc,gCAAgCF,CAAK,IAAI,EAC5Ea,IACAA,EAAY,UAAU,OAAO,QAAQ,EAChCA,EAAY,UAAU,SAAS,QAAQ,IACxCA,EAAY,MAAM,KAAO,IAGrC,CAEA,MAAMC,EAAe,MAAM,KAAKZ,EAAK,iBAAiB,yBAAyB,CAAC,EAChF,GAAIY,EAAa,OAAS,EAAG,CACzB,MAAMC,EAAgB,EAAID,EAAa,OACvCA,EAAa,QAAQJ,GAAS,EACtB,CAACA,EAAM,MAAM,MAAQA,EAAM,MAAM,OAAS,cAC1CA,EAAM,MAAM,KAAO,GAAGK,CAAY,IAAIA,CAAY,OAE1D,CAAC,CACL,MACID,EAAa,QAAQJ,GAAS,CAC1BA,EAAM,MAAM,KAAO,UACvB,CAAC,EAGLT,EAAe,EAEf,MAAMe,EAAcd,EAAK,cAAc,yBAAyB,EAChE,GAAIc,GAAe,OAAOA,EAAY,aAAgB,WAAY,CAC9D,MAAMC,EAAa,KAAK,cAAc,YAAY,EAC9CA,IACAA,EAAW,YAAcD,EAAY,YAAW,EAAG,eAAc,EAEzE,CACJ,EA3Ec,eAtBd,CAEA,mBAAoB,CAChB9C,EAAA,KAAKyB,GAAL,UACJ,CAgGJ,EA9FIA,EAAA,YAT6C9C,EAAA6C,EAAA,mBAA1C,IAAMwB,EAANxB,EAyGF,eAAe,IAAI,mBAAmB,GACvC,eAAe,OAAO,oBAAqBwB,CAAe,EC1FvD,MAAMC,EAAN,MAAMA,CAAc,CAIvB,YAAYC,EAAY,CAHxBnE,EAAA,KAAAoE,GACApE,EAAA,KAAAqE,EAAkB,MAQlBrE,EAAA,KAAAsE,EAAiB1E,EAAA,IAAM,CACnB,MAAM2E,EAAStD,EAAA,KAAKmD,GAAM,KACrBG,IAELvD,EAAA,KAAKqD,EAAkB,IAAI,eAAgBG,GAAY,CACnD,QAASC,KAASD,EACOD,EAAO,aAAa,aAAa,IAAM,QAExDtD,EAAA,KAAKyD,GAAL,UAAsBH,EAGlC,CAAC,GAEDtD,EAAA,KAAKoD,GAAgB,QAAQE,CAAM,EACvC,EAdiB,mBAgBjBvE,EAAA,KAAA0E,EAAmB9E,EAAC2E,GAAW,SAC3B,MAAMR,GAAcY,EAAAJ,EAAO,aAAP,YAAAI,EAAmB,cAAc,2BACrD,GAAI,CAACZ,EAAa,OAElB,MAAMa,IAAWC,EAAAd,EAAY,cAAZ,YAAAc,EAAA,KAAAd,KAA+B,EAG1Ce,EAAU,SAASP,EAAO,aAAa,iBAAiB,EAAG,EAAE,GAAK,GAClEQ,EAAa,KAAK,IAAIH,EAAUE,CAAO,EAGvCE,EAAYjB,EAAY,cAAc,UAAU,GAAKA,EAAY,cAAc,IAAI,EACnFkB,EAAYD,EAAYA,EAAU,sBAAqB,EAAG,OAAS,GAGnEE,EAAWjE,EAAA,KAAKmD,GAAM,cAAc,mBAAmB,EACvDe,EAAWlE,EAAA,KAAKmD,GAAM,cAAc,0BAA0B,EAC9DgB,EAAeF,EAAWA,EAAS,sBAAqB,EAAG,OAAS,GACpEG,EAAeF,EAAWA,EAAS,sBAAqB,EAAG,OAAS,GAGpEG,EAAqBF,EAAeC,EAFrB,GAGfE,EAAoBR,EAAaE,EAAaK,EAEpDf,EAAO,MAAM,OAAS,GAAGgB,CAAgB,KACzChB,EAAO,MAAM,UAAY,GAAIO,EAAUG,EAAaK,CAAkB,KAEtE,MAAME,EAAavE,EAAA,KAAKmD,GAAM,cAAc,wBAAwB,EAChEoB,IACAA,EAAW,MAAM,UAAYZ,EAAWE,EAAU,OAAS,SAEnE,EA/BmB,qBAiCnB9E,EAAA,KAAAuC,EAAU3C,EAAA,IAAM,CACZ,MAAM2E,EAAStD,EAAA,KAAKmD,GAAM,KAEpBqB,EADc,MAAM,KAAKlB,EAAO,QAAQ,EAChB,OAAOmB,GAAMA,EAAG,UAAY,OAAO,EAC3DC,EAAepB,EAAO,aAAa,aAAa,IAAM,OAEtDqB,EAAaH,EAAU,IAAI,CAACI,EAAGlE,IAE1B,4BADWA,IAAQ,EAAI,SAAW,EACG,iBAAiBA,CAAG,uBACnE,EAAE,KAAK,EAAE,EAEJmE,EAAWL,EAAU,IAAI,CAACI,EAAGlE,IAExB,6BADWA,IAAQ,EAAI,SAAW,EACI,iBAAiBA,CAAG,WAAWA,EAAM,CAAC,QACtF,EAAE,KAAK,EAAE,EAEVV,EAAA,KAAKmD,GAAM,UAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAODuB,EAAe,OAAS,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CAiFdC,CAAU;AAAA;AAAA,oDAEJE,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UASpD,MAAMC,EAAiB9E,EAAA,KAAKmD,GAAM,iBAAiB,kBAAkB,EAErE2B,GAAA,MAAAA,EAAgB,QAAQ,CAACC,EAAKrE,IAAQ,CAC9B8D,EAAU9D,CAAG,GACb,WAAW,IAAM,CACbqE,EAAI,KAAKP,EAAU9D,CAAG,CAAC,EACnBgE,GACA1E,EAAA,KAAKyD,GAAL,UAAsBH,EAE9B,CAAC,CAET,EACJ,EA/HU,YAtDNvD,EAAA,KAAKoD,EAAQD,GACblD,EAAA,KAAKsB,GAAL,WACAtB,EAAA,KAAKqD,GAAL,UACJ,CAmLJ,EA1LIF,EAAA,YACAC,EAAA,YAQAC,EAAA,YAgBAI,EAAA,YAiCAnC,EAAA,YA3DuB3C,EAAAsE,EAAA,iBAApB,IAAM+B,EAAN/B,ECfQ,MAAMgC,EAAN,MAAMA,UAAkB,WAAY,CAG/C,aAAc,CACV,MAAK,EAHTlG,EAAA,KAAAmG,EAAW,IAIP,KAAK,aAAa,CAAE,KAAM,MAAM,CAAE,CACtC,CAEA,mBAAoB,CACZlF,EAAA,KAAKkF,KAGT,KAAK,cAAgB,IAAIF,EAAc,KAAK,UAAU,EAGtDjF,EAAA,KAAKmF,EAAW,IAChBrG,EAAM,IAAI,sBAAsB,EAEhC,KAAK,cAAc,IAAI,YAAY,OAAQ,CAAE,QAAS,GAAM,OAAQ,CAAE,OAAQ,IAAI,CAAE,CAAE,CAAC,EAC3F,CAEA,sBAAuB,CACnBA,EAAM,IAAI,yBAAyB,CACvC,CACJ,EAvBIqG,EAAA,YAD+CvG,EAAAsG,EAAA,aAApC,IAAME,EAANF,EA0BV,eAAe,IAAI,YAAY,GAChC,eAAe,OAAO,aAAcE,CAAS"}
1
+ {"version":3,"file":"nine-table.umd.js","sources":["../src/external/NoPeer.js","../src/ui/nine-table-sheet.js","../src/ui/nine-table-sheets.js","../src/ui/LayoutManager.js","../src/core/nine-table.js"],"sourcesContent":["import { trace as traceOrigin } from '@ninebone/util';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-table\", \"green\");\n }\n}\n\nexport const trace = new Trace();","import { trace } from \"@nopeer\";\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n static SCROLLBAR_SIZE = 16;\n\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#render();\n };\n\n init = (tableEl) => {\n if (!tableEl) return;\n\n const initializeTable = (tbl) => {\n\n const ensureColgroup = (tbl) => {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n };\n\n const ensureThead = (tbl) => {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n };\n\n ensureColgroup(tbl);\n ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n };\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const leftContainer = this.querySelector('.ng-container-left');\n const bodyContainer = this.querySelector('.ng-container-body');\n const rightContainer = this.querySelector('.ng-container-right');\n\n const filterTableByFixed = (sourceTable, targetFixedType, isBody = false) => {\n const tbl = sourceTable.cloneNode(true);\n const cols = Array.from(tbl.querySelectorAll('colgroup col'));\n const targetIndices = [];\n\n cols.forEach((col, idx) => {\n const fixedAttr = col.getAttribute('fixed');\n const isMatch = isBody ? (!fixedAttr || fixedAttr === '') : (fixedAttr === targetFixedType);\n if (!isMatch) {\n targetIndices.push(idx);\n }\n });\n\n targetIndices.reverse().forEach(idx => {\n if (cols[idx]) cols[idx].remove();\n tbl.querySelectorAll('tr').forEach(tr => {\n const cells = tr.querySelectorAll('th, td');\n if (cells[idx]) cells[idx].remove();\n });\n });\n\n return tbl;\n };\n\n // 1. ๋ฉ”์ธ ๋ฐ”๋”” ์˜์—ญ\n if (bodyContainer) {\n const bodyTable = filterTableByFixed(this.#tableElement, null, true);\n bodyContainer.innerHTML = '';\n bodyContainer.appendChild(bodyTable);\n }\n\n // 2. ์ขŒ์ธก ๊ณ ์ • ์˜์—ญ\n if (leftContainer) {\n const leftTable = filterTableByFixed(this.#tableElement, 'left', false);\n\n let leftWidth = 0;\n leftTable.querySelectorAll('col').forEach(col => {\n const w = parseInt(col.getAttribute('width'), 10);\n if (!isNaN(w)) leftWidth += w;\n });\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n\n const activeLeftWidth = leftWidth > 0 ? leftWidth : 0;\n leftContainer.style.flex = `0 0 ${activeLeftWidth}px`;\n leftContainer.style.width = `${activeLeftWidth}px`;\n }\n\n // 3. ์šฐ์ธก ๊ณ ์ • ์˜์—ญ\n if (rightContainer) {\n const rightTable = filterTableByFixed(this.#tableElement, 'right', false);\n\n let rightWidth = 0;\n rightTable.querySelectorAll('col').forEach(col => {\n const w = parseInt(col.getAttribute('width'), 10);\n if (!isNaN(w)) rightWidth += w;\n });\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n\n const activeRightWidth = rightWidth > 0 ? rightWidth : 0;\n rightContainer.style.flex = `0 0 ${activeRightWidth}px`;\n rightContainer.style.width = `${activeRightWidth}px`;\n }\n\n // ๋ฐ์ดํ„ฐ ๊ฑด์ˆ˜ ๊ธฐ๋ฐ˜ ์„ธ๋กœ ์Šคํฌ๋กค ์ œ์–ด ์ •์ฑ… ๋ฐ˜์˜\n if (bodyContainer) {\n const rowCount = this.getRowCount();\n bodyContainer.style.overflowY = rowCount > 10 ? 'auto' : 'hidden';\n }\n\n trace.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);\n };\n\n getRowCount = () => {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n };\n\n // ๐ŸŽฏ ์™ธ๋ถ€ ์Šคํฌ๋กค๋ฐ” ๋ฐ ์ปจํŠธ๋กค๋Ÿฌ ์—ฐ๋™์šฉ ๋ฉ”์„œ๋“œ\n scrollToX = (scrollLeft) => {\n const bodyContainer = this.querySelector('.ng-container-body');\n if (bodyContainer) bodyContainer.scrollLeft = scrollLeft;\n };\n\n scrollToY = (scrollTop) => {\n const bodyContainer = this.querySelector('.ng-container-body');\n if (bodyContainer) bodyContainer.scrollTop = scrollTop;\n };\n\n #render = () => {\n const sbSize = NineTableSheet.SCROLLBAR_SIZE;\n\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n overflow: hidden;\n }\n \n nine-table-sheet .ng-container-top {\n display: flex;\n flex-direction: row;\n flex: 1 1 auto;\n width: 100%;\n height: calc(100% - ${sbSize}px);\n overflow: hidden;\n position: relative;\n }\n \n nine-table-sheet .ng-container-left {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: #ffffff;\n border-right: 1px solid #e5e7eb;\n flex-shrink: 0;\n }\n \n nine-table-sheet .ng-container-body {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow-x: auto;\n overflow-y: auto;\n background: #ffffff;\n position: relative;\n }\n \n nine-table-sheet .ng-container-right {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\n flex-shrink: 0;\n }\n \n nine-table-sheet .ng-container-bottom {\n display: flex;\n flex-direction: row;\n height: ${sbSize}px;\n min-height: ${sbSize}px;\n flex-shrink: 0;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n }\n \n nine-table-sheet nine-table-hscrollbar {\n flex: 1;\n height: 100%;\n overflow: hidden;\n display: block;\n }\n \n nine-table-sheet .ng-scroll-edge {\n width: ${sbSize}px;\n min-width: ${sbSize}px;\n height: 100%;\n flex-shrink: 0;\n background: #f3f4f6;\n }\n \n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n \n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n \n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class='ng-container-top'>\n <div class='ng-container-left'></div>\n <div class='ng-container-body'></div>\n <div class='ng-container-right'></div>\n <nine-table-vscrollbar></nine-table-vscrollbar>\n </div>\n <div class='ng-container-bottom'>\n <nine-table-hscrollbar></nine-table-hscrollbar>\n <div class='ng-scroll-edge'></div>\n </div>\n `;\n };\n\n disconnectedCallback() {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n };\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#init();\n };\n\n #init = () => {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.switchSheet(index, isMultiSelect);\n });\n\n this.switchSheet(0, false);\n };\n\n switchSheet = (index, isMultiSelect = false) => {\n\n const updateSplitters = () => {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n };\n\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n };\n\n\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","/**\n * [LayoutManager ๋†’์ด ์„ค์ •(Height Configuration) ์‚ฌ์šฉ ์˜ˆ์ œ]\n *\n * 1. ๋ถ€๋ชจ ์˜์—ญ ์ฑ„์šฐ๊ธฐ (Fluid / 100% Fill) - ๊ธฐ๋ณธ๊ฐ’\n * - ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ์˜ ๋‚จ์€ ๊ณต๊ฐ„์„ ๊ฐ€๋“ ์ฑ„์šฐ๊ณ  ๋‚ด๋ถ€ ์˜์—ญ์—์„œ ์Šคํฌ๋กค์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.\n * - ์‚ฌ์šฉ๋ฒ•: <nine-table> ๋˜๋Š” ํ˜ธ์ŠคํŠธ ์—˜๋ฆฌ๋จผํŠธ์— ๋ณ„๋„ ์†์„ฑ์„ ์ฃผ์ง€ ์•Š์œผ๋ฉด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.\n *\n * 2. ์ฝ˜ํ…์ธ  ๋ฐ€์ฐฉํ˜• / ๋ฐ์ดํ„ฐ ๊ฑด์ˆ˜ ๊ธฐ๋ฐ˜ ๋™์  ๋†’์ด (Auto-Height)\n * - ๋ฐ์ดํ„ฐ ํ–‰ ๊ฐœ์ˆ˜์— ๋งž์ถฐ ์ปดํฌ๋„ŒํŠธ ์ „์ฒด ๋†’์ด๊ฐ€ ์œ ์—ฐํ•˜๊ฒŒ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค.\n * - ์‚ฌ์šฉ๋ฒ•: <nine-table auto-height=\"true\"> ๋˜๋Š” ํ˜ธ์ŠคํŠธ ์—˜๋ฆฌ๋จผํŠธ์— auto-height=\"true\" ์†์„ฑ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.\n *\n * 3. ํ”ฝ์…€ ๊ณ ์ • ๋†’์ด (Fixed Pixel)\n * - ๋ถ€๋ชจ ํฌ๊ธฐ์— ์ƒ๊ด€์—†์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง€์ •ํ•œ ๊ณ ์ • ํฌ๊ธฐ๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.\n * - ์‚ฌ์šฉ๋ฒ•: <nine-table style=\"height: 400px;\"> ์ฒ˜๋Ÿผ ์ธ๋ผ์ธ ์Šคํƒ€์ผ๋กœ ๋†’์ด๋ฅผ ์ง์ ‘ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.\n */\n\nimport './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n #resizeObserver = null;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n this.#observeResize();\n }\n\n #observeResize = () => {\n const hostEl = this.#root.host;\n if (!hostEl) return;\n\n this.#resizeObserver = new ResizeObserver((entries) => {\n for (let entry of entries) {\n const isAutoHeight = hostEl.getAttribute('auto-height') === 'true';\n if (isAutoHeight) {\n this.#applyAutoHeight(hostEl);\n }\n }\n });\n\n this.#resizeObserver.observe(hostEl);\n };\n\n #applyAutoHeight = (hostEl) => {\n const activeSheet = hostEl.shadowRoot?.querySelector('nine-table-sheet.active');\n if (!activeSheet) return;\n\n const rowCount = activeSheet.getRowCount?.() || 0;\n\n // 1. ์†์„ฑ์œผ๋กœ maxRows๋ฅผ ๋ฐ›๋˜, ์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’ 10 ์„ค์ •\n const maxRows = parseInt(hostEl.getAttribute('max-display-row'), 10) || 10;\n const targetRows = Math.min(rowCount, maxRows);\n\n // 2. ์‹ค์ œ ๋ Œ๋”๋ง๋œ ํ–‰(tr) ๋†’์ด๋ฅผ ๋™์ ์œผ๋กœ ์ธก์ • (์—†์œผ๋ฉด ๊ธฐ๋ณธ 32px ํด๋ฐฑ)\n const sampleRow = activeSheet.querySelector('tbody tr') || activeSheet.querySelector('tr');\n const rowHeight = sampleRow ? sampleRow.getBoundingClientRect().height : 32;\n\n // 3. ํ—ค๋” ๋ฐ ํ‘ธํ„ฐ/ํƒญ ์˜์—ญ์˜ ์‹ค์ œ ๋†’์ด๋ฅผ DOM์—์„œ ๋™์  ์ธก์ •\n const headerEl = this.#root.querySelector('nine-table-header');\n const footerEl = this.#root.querySelector('nine-table-sheets-footer');\n const headerHeight = headerEl ? headerEl.getBoundingClientRect().height : 40;\n const footerHeight = footerEl ? footerEl.getBoundingClientRect().height : 32;\n const extraPadding = 16; // ๋ฏธ์„ธ ์—ฌ๋ฐฑ\n\n const headerFooterHeight = headerHeight + footerHeight + extraPadding;\n const calculatedHeight = (targetRows * rowHeight) + headerFooterHeight;\n\n hostEl.style.height = `${calculatedHeight}px`;\n hostEl.style.maxHeight = `${(maxRows * rowHeight) + headerFooterHeight}px`;\n\n const sheetsBody = this.#root.querySelector('nine-table-sheets-body');\n if (sheetsBody) {\n sheetsBody.style.overflowY = rowCount > maxRows ? 'auto' : 'hidden';\n }\n };\n\n #render = () => {\n const hostEl = this.#root.host;\n const rawElements = Array.from(hostEl.children);\n const rawTables = rawElements.filter(el => el.tagName === 'TABLE');\n const isAutoHeight = hostEl.getAttribute('auto-height') === 'true';\n\n const sheetsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<nine-table-sheet class=\"${className}\" data-index=\"${idx}\"></nine-table-sheet>`;\n }).join('');\n\n const tabsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<div class=\"nine-tab-item ${className}\" data-index=\"${idx}\">Sheet ${idx + 1}</div>`;\n }).join('');\n\n this.#root.innerHTML = `\n <style>\n :host { \n display: flex; \n flex-direction: column; \n position: relative; \n overflow: hidden; \n height: ${isAutoHeight ? 'auto' : '100%'}; \n background: #fff; \n }\n nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }\n nine-table-body { display: flex; flex-direction: row; flex: 1; overflow: hidden; position: relative; }\n nine-table-summary { display: none; width: 250px; flex-shrink: 0; border-right: 1px solid #e5e7eb; }\n nine-splitter:not([data-split-index]) { width: 4px; background: #e5e7eb; cursor: col-resize; flex-shrink: 0; }\n nine-table-analysis { display: none; }\n nine-table-footer { display: none; }\n\n nine-table-sheets {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n background: #fff;\n }\n nine-table-sheets-body {\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n flex-direction: row;\n }\n nine-table-sheet {\n display: none !important;\n height: 100%;\n overflow: auto;\n flex: 1 1 100%;\n }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-footer {\n display: flex;\n height: 32px;\n background: #f3f4f6;\n border-top: 1px solid #e5e7eb;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n flex-shrink: 0;\n }\n nine-table-sheets .nine-tab-bar {\n display: flex;\n align-items: center;\n gap: 2px;\n overflow-x: auto;\n flex: 1;\n height: 100%;\n }\n nine-table-sheets .nine-tab-item {\n padding: 4px 12px;\n cursor: pointer;\n font-size: 12px;\n color: #4b5563;\n background: #e5e7eb;\n border: 1px solid #d1d5db;\n border-top: none;\n border-radius: 0 0 3px 3px;\n user-select: none;\n }\n nine-table-sheets .nine-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n nine-table-sheets .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-table-sheets>\n <nine-table-sheets-body>${sheetsHtml}</nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\">${tabsHtml}</div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n </nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n\n const $sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n $sheetElements?.forEach(($el, idx) => {\n if (rawTables[idx]) {\n setTimeout(() => {\n $el.init(rawTables[idx]);\n if (isAutoHeight) {\n this.#applyAutoHeight(hostEl);\n }\n });\n }\n });\n };\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot ํ•˜๋‚˜๋งŒ ๋„˜๊ฒจ์„œ ๋‚ด๋ถ€์—์„œ ๋ ˆ์ด์•„์›ƒ ๋ฐ ํ…Œ์ด๋ธ” ์ˆ˜์ง‘ ์ฒ˜๋ฆฌ\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_NineTableSheet","__privateAdd","_tableElement","__publicField","tableEl","initializeTable","tbl","ensureColgroup","firstRow","colCount","colgroup","defaultWidth","i","col","ensureThead","thead","clonedTable","__privateSet","__privateGet","leftContainer","bodyContainer","rightContainer","filterTableByFixed","sourceTable","targetFixedType","isBody","cols","targetIndices","idx","fixedAttr","tr","cells","bodyTable","leftTable","leftWidth","w","activeLeftWidth","rightTable","rightWidth","activeRightWidth","rowCount","scrollLeft","scrollTop","_render","sbSize","NineTableSheet","_NineTableSheets","_init","tabBar","e","tabItem","isMultiSelect","index","updateSplitters","body","splitter","splitIndex","leftSheet","rightSheet","tabItems","sheetElements","tab","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","activeSheet","rowCountEl","NineTableSheets","_LayoutManager","shadowRoot","_root","_resizeObserver","_observeResize","hostEl","entries","entry","_applyAutoHeight","_a","_b","maxRows","targetRows","sampleRow","rowHeight","headerEl","footerEl","headerHeight","footerHeight","headerFooterHeight","calculatedHeight","sheetsBody","rawTables","el","isAutoHeight","sheetsHtml","_","tabsHtml","$sheetElements","$el","LayoutManager","_NineTable","_created","NineTable"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ninebone/table",
3
- "version": "0.0.65",
3
+ "version": "0.0.67",
4
4
  "description": "Grid component for real-time collaboration (Vanilla JS based)",
5
5
  "type": "module",
6
6
  "main": "./dist/nine-table.umd.js",