@ninebone/table 0.0.28 → 0.0.30

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,59 +1,59 @@
1
- var Z = Object.defineProperty;
2
- var J = (s) => {
1
+ var Y = Object.defineProperty;
2
+ var G = (s) => {
3
3
  throw TypeError(s);
4
4
  };
5
- var r = (s, e) => Z(s, "name", { value: e, configurable: !0 });
6
- var T = (s, e, t) => e.has(s) || J("Cannot " + t);
7
- var n = (s, e, t) => (T(s, e, "read from private field"), t ? t.call(s) : e.get(s)), b = (s, e, t) => e.has(s) ? J("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(s) : e.set(s, t), v = (s, e, t, o) => (T(s, e, "write to private field"), o ? o.call(s, t) : e.set(s, t), t), y = (s, e, t) => (T(s, e, "access private method"), t);
8
- import { trace as N } from "@ninebone/util";
9
- const B = class B extends N.constructor {
5
+ var r = (s, e) => Y(s, "name", { value: e, configurable: !0 });
6
+ var M = (s, e, t) => e.has(s) || G("Cannot " + t);
7
+ var l = (s, e, t) => (M(s, e, "read from private field"), t ? t.call(s) : e.get(s)), f = (s, e, t) => e.has(s) ? G("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(s) : e.set(s, t), w = (s, e, t, i) => (M(s, e, "write to private field"), i ? i.call(s, t) : e.set(s, t), t), p = (s, e, t) => (M(s, e, "access private method"), t);
8
+ import { trace as Z } from "@ninebone/util";
9
+ const j = class j extends Z.constructor {
10
10
  constructor() {
11
11
  super(), this.init("nine-table", "green");
12
12
  }
13
13
  };
14
- r(B, "Trace");
15
- let A = B;
16
- const L = new A();
17
- var $, S, O, P;
18
- const K = class K {
14
+ r(j, "Trace");
15
+ let T = j;
16
+ const C = new T();
17
+ var L, v, J, O;
18
+ const B = class B {
19
19
  constructor(e) {
20
- b(this, S);
21
- b(this, $);
22
- v(this, $, e);
20
+ f(this, v);
21
+ f(this, L);
22
+ w(this, L, e);
23
23
  }
24
24
  // [Public] 테이블 초기화 진입점 (필요한 최소한의 마크업 보정만 수행)
25
25
  initializeTable(e) {
26
- return y(this, S, O).call(this, e), y(this, S, P).call(this, e), e.classList.add("nine-table-element"), e;
26
+ return p(this, v, J).call(this, e), p(this, v, O).call(this, e), e.classList.add("nine-table-element"), e;
27
27
  }
28
28
  };
29
- $ = new WeakMap(), S = new WeakSet(), // [Private] colgroup 보정
30
- O = /* @__PURE__ */ r(function(e) {
29
+ L = new WeakMap(), v = new WeakSet(), // [Private] colgroup 보정
30
+ J = /* @__PURE__ */ r(function(e) {
31
31
  var c;
32
32
  if (e.querySelector("colgroup")) return;
33
- const t = ((c = e.querySelector("tbody tr")) == null ? void 0 : c.querySelectorAll("th, td").length) || 1, o = document.createElement("colgroup"), a = Math.max(Math.floor((e.clientWidth || 600) / t), 100);
34
- for (let f = 0; f < t; f++) {
35
- const p = document.createElement("col");
36
- p.setAttribute("width", a), o.appendChild(p);
33
+ const t = ((c = e.querySelector("tbody tr")) == null ? void 0 : c.querySelectorAll("th, td").length) || 1, i = document.createElement("colgroup"), a = Math.max(Math.floor((e.clientWidth || 600) / t), 100);
34
+ for (let b = 0; b < t; b++) {
35
+ const u = document.createElement("col");
36
+ u.setAttribute("width", a), i.appendChild(u);
37
37
  }
38
- e.prepend(o);
38
+ e.prepend(i);
39
39
  }, "#ensureColgroup"), // [Private] thead 보정
40
- P = /* @__PURE__ */ r(function(e) {
40
+ O = /* @__PURE__ */ r(function(e) {
41
41
  if (e.querySelector("thead")) return;
42
- const t = document.createElement("thead"), o = e.querySelector("colgroup");
43
- o ? o.after(t) : e.prepend(t);
44
- }, "#ensureThead"), r(K, "TableInitializer");
45
- let H = K;
46
- var g, k, M, Q;
47
- const W = class W extends HTMLElement {
42
+ const t = document.createElement("thead"), i = e.querySelector("colgroup");
43
+ i ? i.after(t) : e.prepend(t);
44
+ }, "#ensureThead"), r(B, "TableInitializer");
45
+ let A = B;
46
+ var y, q, $, P;
47
+ const K = class K extends HTMLElement {
48
48
  constructor() {
49
49
  super();
50
- b(this, M);
51
- b(this, g, null);
52
- b(this, k);
53
- v(this, k, new H(this));
50
+ f(this, $);
51
+ f(this, y, null);
52
+ f(this, q);
53
+ w(this, q, new A(this));
54
54
  }
55
55
  connectedCallback() {
56
- y(this, M, Q).call(this);
56
+ p(this, $, P).call(this);
57
57
  }
58
58
  /**
59
59
  * 외부(LayoutManager 등)에서 원본 테이블 엘리먼트를 주입받아 초기화 및 보정 수행
@@ -61,19 +61,19 @@ const W = class W extends HTMLElement {
61
61
  */
62
62
  init(t) {
63
63
  if (!t) return;
64
- const o = t.cloneNode(!0);
65
- v(this, g, n(this, k).initializeTable(o)), n(this, g).style.display = "table";
64
+ const i = t.cloneNode(!0);
65
+ w(this, y, l(this, q).initializeTable(i)), l(this, y).style.display = "table";
66
66
  const a = this.querySelector(".sheet-content-container");
67
- a && (a.innerHTML = "", a.appendChild(n(this, g))), L.log(`NineTableSheet initialized with table rows: ${this.getRowCount()}`);
67
+ a && (a.innerHTML = "", a.appendChild(l(this, y))), C.log(`NineTableSheet initialized with table rows: ${this.getRowCount()}`);
68
68
  }
69
69
  getRowCount() {
70
- return n(this, g) ? n(this, g).querySelectorAll("tbody tr").length : 0;
70
+ return l(this, y) ? l(this, y).querySelectorAll("tbody tr").length : 0;
71
71
  }
72
72
  disconnectedCallback() {
73
- this.innerHTML = "", L.log("NineTableSheet destroyed.");
73
+ this.innerHTML = "", C.log("NineTableSheet destroyed.");
74
74
  }
75
75
  };
76
- g = new WeakMap(), k = new WeakMap(), M = new WeakSet(), Q = /* @__PURE__ */ r(function() {
76
+ y = new WeakMap(), q = new WeakMap(), $ = new WeakSet(), P = /* @__PURE__ */ r(function() {
77
77
  this.innerHTML = `
78
78
  <style>
79
79
  nine-table-sheet {
@@ -119,92 +119,90 @@ g = new WeakMap(), k = new WeakMap(), M = new WeakSet(), Q = /* @__PURE__ */ r(f
119
119
  <!-- 테이블이 동적으로 주입되는 영역 -->
120
120
  </div>
121
121
  `;
122
- }, "#render"), r(W, "NineTableSheet");
123
- let z = W;
124
- customElements.get("nine-table-sheet") || customElements.define("nine-table-sheet", z);
125
- var u, E, U, V;
126
- const D = class D extends HTMLElement {
122
+ }, "#render"), r(K, "NineTableSheet");
123
+ let H = K;
124
+ customElements.get("nine-table-sheet") || customElements.define("nine-table-sheet", H);
125
+ var S, Q, U;
126
+ const W = class W extends HTMLElement {
127
127
  constructor() {
128
128
  super();
129
- b(this, E);
130
- b(this, u);
131
- v(this, u, this.attachShadow({ mode: "open" }));
129
+ f(this, S);
132
130
  }
133
131
  connectedCallback() {
134
- y(this, E, V).call(this);
132
+ p(this, S, U).call(this);
135
133
  }
136
134
  /**
137
135
  * 외부(LayoutManager 등)에서 테이블 목록을 받아 시트와 스플리터 마크업 구성
138
136
  * @param {HTMLTableElement[]} tables
139
137
  */
140
138
  initSheets(t) {
141
- const o = n(this, u).querySelector("nine-table-sheets-body"), a = n(this, u).querySelector(".nine-tab-bar"), c = t.map((h, i) => {
142
- const l = `<nine-table-sheet class="${i === 0 ? "active" : ""}" data-index="${i}"></nine-table-sheet>`;
143
- return i === 0 ? l : `<nine-splitter class="h" data-split-index="${i}"></nine-splitter>${l}`;
144
- }).join(""), f = t.map((h, i) => `
145
- <div class="nine-tab-item ${i === 0 ? "active" : ""}" data-index="${i}">Sheet ${i + 1}</div>
139
+ const i = this.querySelector("nine-table-sheets-body"), a = this.querySelector(".nine-tab-bar"), c = t.map((h, n) => {
140
+ const o = `<nine-table-sheet class="${n === 0 ? "active" : ""}" data-index="${n}"></nine-table-sheet>`;
141
+ return n === 0 ? o : `<nine-splitter class="h" data-split-index="${n}"></nine-splitter>${o}`;
142
+ }).join(""), b = t.map((h, n) => `
143
+ <div class="nine-tab-item ${n === 0 ? "active" : ""}" data-index="${n}">Sheet ${n + 1}</div>
146
144
  `).join("");
147
- o.innerHTML = c, a.innerHTML = f, o.querySelectorAll("nine-table-sheet").forEach((h, i) => {
148
- t[i] && h.init(t[i]);
145
+ i.innerHTML = c, a.innerHTML = b, i.querySelectorAll("nine-table-sheet").forEach((h, n) => {
146
+ t[n] && h.init(t[n]);
149
147
  }), a.addEventListener("click", (h) => {
150
- const i = h.target.closest(".nine-tab-item");
151
- if (!i) return;
152
- const l = h.ctrlKey || h.metaKey || h.shiftKey, d = parseInt(i.dataset.index, 10);
153
- this.switchSheet(d, l);
148
+ const n = h.target.closest(".nine-tab-item");
149
+ if (!n) return;
150
+ const o = h.ctrlKey || h.metaKey || h.shiftKey, d = parseInt(n.dataset.index, 10);
151
+ this.switchSheet(d, o);
154
152
  }), this.switchSheet(0, !1);
155
153
  }
156
- switchSheet(t, o = !1) {
157
- const a = n(this, u).querySelector(".nine-tab-bar"), c = n(this, u).querySelector("nine-table-sheets-body"), f = a.querySelectorAll(".nine-tab-item"), p = c.querySelectorAll("nine-table-sheet");
158
- if (!f[t]) return;
159
- if (!o)
160
- f.forEach((l, d) => {
161
- l.classList.toggle("active", d === t);
162
- const w = c.querySelector(`nine-table-sheet[data-index="${d}"]`);
163
- w && (w.style.flex = "");
164
- }), p.forEach((l, d) => {
165
- l.classList.toggle("active", d === t);
154
+ switchSheet(t, i = !1) {
155
+ const a = this.querySelector(".nine-tab-bar"), c = this.querySelector("nine-table-sheets-body"), b = a.querySelectorAll(".nine-tab-item"), u = c.querySelectorAll("nine-table-sheet");
156
+ if (!b[t]) return;
157
+ if (!i)
158
+ b.forEach((o, d) => {
159
+ o.classList.toggle("active", d === t);
160
+ const m = c.querySelector(`nine-table-sheet[data-index="${d}"]`);
161
+ m && (m.style.flex = "");
162
+ }), u.forEach((o, d) => {
163
+ o.classList.toggle("active", d === t);
166
164
  });
167
165
  else {
168
- const l = f[t], d = a.querySelectorAll(".nine-tab-item.active");
169
- if (l.classList.contains("active") && d.length <= 1)
166
+ const o = b[t], d = a.querySelectorAll(".nine-tab-item.active");
167
+ if (o.classList.contains("active") && d.length <= 1)
170
168
  return;
171
- l.classList.toggle("active");
172
- const w = c.querySelector(`nine-table-sheet[data-index="${t}"]`);
173
- w && (w.classList.toggle("active"), w.classList.contains("active") || (w.style.flex = ""));
169
+ o.classList.toggle("active");
170
+ const m = c.querySelector(`nine-table-sheet[data-index="${t}"]`);
171
+ m && (m.classList.toggle("active"), m.classList.contains("active") || (m.style.flex = ""));
174
172
  }
175
173
  const h = Array.from(c.querySelectorAll("nine-table-sheet.active"));
176
174
  if (h.length > 1) {
177
- const l = 1 / h.length;
175
+ const o = 1 / h.length;
178
176
  h.forEach((d) => {
179
- (!d.style.flex || d.style.flex === "1 1 100%") && (d.style.flex = `${l} ${l} 0px`);
177
+ (!d.style.flex || d.style.flex === "1 1 100%") && (d.style.flex = `${o} ${o} 0px`);
180
178
  });
181
179
  } else
182
- h.forEach((l) => {
183
- l.style.flex = "1 1 100%";
180
+ h.forEach((o) => {
181
+ o.style.flex = "1 1 100%";
184
182
  });
185
- y(this, E, U).call(this);
186
- const i = c.querySelector("nine-table-sheet.active");
187
- if (i && typeof i.getRowCount == "function") {
188
- const l = n(this, u).querySelector("#row-count");
189
- l && (l.textContent = i.getRowCount().toLocaleString());
183
+ p(this, S, Q).call(this);
184
+ const n = c.querySelector("nine-table-sheet.active");
185
+ if (n && typeof n.getRowCount == "function") {
186
+ const o = this.querySelector("#row-count");
187
+ o && (o.textContent = n.getRowCount().toLocaleString());
190
188
  }
191
189
  this.dispatchEvent(new CustomEvent("sheet-switched", {
192
- detail: { rowCount: i ? i.getRowCount() : 0 },
190
+ detail: { rowCount: n ? n.getRowCount() : 0 },
193
191
  bubbles: !0,
194
192
  composed: !0
195
193
  }));
196
194
  }
197
195
  };
198
- u = new WeakMap(), E = new WeakSet(), U = /* @__PURE__ */ r(function() {
199
- const t = n(this, u).querySelector("nine-table-sheets-body");
196
+ S = new WeakSet(), Q = /* @__PURE__ */ r(function() {
197
+ const t = this.querySelector("nine-table-sheets-body");
200
198
  t.querySelectorAll("nine-splitter").forEach((a) => {
201
- const c = parseInt(a.dataset.splitIndex, 10), f = t.querySelector(`nine-table-sheet[data-index="${c - 1}"]`), p = t.querySelector(`nine-table-sheet[data-index="${c}"]`);
202
- f && p && f.classList.contains("active") && p.classList.contains("active") ? a.classList.add("active") : a.classList.remove("active");
199
+ const c = parseInt(a.dataset.splitIndex, 10), b = t.querySelector(`nine-table-sheet[data-index="${c - 1}"]`), u = t.querySelector(`nine-table-sheet[data-index="${c}"]`);
200
+ b && u && b.classList.contains("active") && u.classList.contains("active") ? a.classList.add("active") : a.classList.remove("active");
203
201
  });
204
- }, "#updateSplitters"), V = /* @__PURE__ */ r(function() {
205
- n(this, u).innerHTML = `
202
+ }, "#updateSplitters"), U = /* @__PURE__ */ r(function() {
203
+ this.innerHTML = `
206
204
  <style>
207
- :host {
205
+ nine-table-sheets {
208
206
  flex: 1;
209
207
  display: flex;
210
208
  flex-direction: column;
@@ -247,7 +245,7 @@ u = new WeakMap(), E = new WeakSet(), U = /* @__PURE__ */ r(function() {
247
245
  padding: 0 8px;
248
246
  flex-shrink: 0;
249
247
  }
250
- .nine-tab-bar {
248
+ nine-table-sheets .nine-tab-bar {
251
249
  display: flex;
252
250
  align-items: center;
253
251
  gap: 2px;
@@ -255,7 +253,7 @@ u = new WeakMap(), E = new WeakSet(), U = /* @__PURE__ */ r(function() {
255
253
  flex: 1;
256
254
  height: 100%;
257
255
  }
258
- .nine-tab-item {
256
+ nine-table-sheets .nine-tab-item {
259
257
  padding: 4px 12px;
260
258
  cursor: pointer;
261
259
  font-size: 12px;
@@ -266,13 +264,13 @@ u = new WeakMap(), E = new WeakSet(), U = /* @__PURE__ */ r(function() {
266
264
  border-radius: 0 0 3px 3px;
267
265
  user-select: none;
268
266
  }
269
- .nine-tab-item.active {
267
+ nine-table-sheets .nine-tab-item.active {
270
268
  background: #ffffff;
271
269
  color: #111827;
272
270
  font-weight: 600;
273
271
  border-bottom: 2px solid #2563eb;
274
272
  }
275
- .sheets-counter {
273
+ nine-table-sheets .sheets-counter {
276
274
  font-size: 12px;
277
275
  color: #6b7280;
278
276
  padding-left: 12px;
@@ -286,25 +284,25 @@ u = new WeakMap(), E = new WeakSet(), U = /* @__PURE__ */ r(function() {
286
284
  <div class="sheets-counter">Total : <span id="row-count">0</span></div>
287
285
  </nine-table-sheets-footer>
288
286
  `;
289
- }, "#render"), r(D, "NineTableSheets");
290
- let R = D;
291
- customElements.get("nine-table-sheets") || customElements.define("nine-table-sheets", R);
292
- var m, x, q, X, Y;
293
- const F = class F {
287
+ }, "#render"), r(W, "NineTableSheets");
288
+ let z = W;
289
+ customElements.get("nine-table-sheets") || customElements.define("nine-table-sheets", z);
290
+ var g, x, E, V, X;
291
+ const D = class D {
294
292
  constructor(e) {
295
- b(this, q);
296
- b(this, m);
297
- b(this, x, []);
298
- v(this, m, e);
293
+ f(this, E);
294
+ f(this, g);
295
+ f(this, x, []);
296
+ w(this, g, e);
299
297
  }
300
298
  render() {
301
- n(this, m).host.querySelectorAll("table").forEach((t) => {
302
- n(this, x).push(t), t.style.display = "none";
303
- }), y(this, q, X).call(this), y(this, q, Y).call(this);
299
+ l(this, g).host.querySelectorAll("table").forEach((t) => {
300
+ l(this, x).push(t), t.style.display = "none";
301
+ }), p(this, E, V).call(this), p(this, E, X).call(this);
304
302
  }
305
303
  };
306
- m = new WeakMap(), x = new WeakMap(), q = new WeakSet(), X = /* @__PURE__ */ r(function() {
307
- n(this, x)[0] && n(this, x)[0].querySelectorAll("tbody tr").length, n(this, m).innerHTML = `
304
+ g = new WeakMap(), x = new WeakMap(), E = new WeakSet(), V = /* @__PURE__ */ r(function() {
305
+ l(this, x)[0] && l(this, x)[0].querySelectorAll("tbody tr").length, l(this, g).innerHTML = `
308
306
  <style>
309
307
  :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }
310
308
  nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }
@@ -318,35 +316,34 @@ m = new WeakMap(), x = new WeakMap(), q = new WeakSet(), X = /* @__PURE__ */ r(f
318
316
  <nine-table-header></nine-table-header>
319
317
  <nine-table-body>
320
318
  <nine-table-summary></nine-table-summary>
321
- <nine-splitter></nine-splitter>
322
319
  <nine-table-sheets></nine-table-sheets>
323
320
  <nine-table-analysis></nine-table-analysis>
324
321
  </nine-table-body>
325
322
  <nine-table-footer></nine-table-footer>
326
323
  `;
327
- }, "#renderLayoutShell"), Y = /* @__PURE__ */ r(function() {
328
- const e = n(this, m).querySelector("nine-table-sheets");
329
- e && n(this, x).length > 0 && (e.initSheets(n(this, x)), e.addEventListener("sheet-switched", (t) => {
330
- const o = n(this, m).querySelector("#row-count");
331
- o && t.detail && (o.textContent = t.detail.rowCount.toLocaleString());
324
+ }, "#renderLayoutShell"), X = /* @__PURE__ */ r(function() {
325
+ const e = l(this, g).querySelector("nine-table-sheets");
326
+ e && l(this, x).length > 0 && (e.initSheets(l(this, x)), e.addEventListener("sheet-switched", (t) => {
327
+ const i = l(this, g).querySelector("#row-count");
328
+ i && t.detail && (i.textContent = t.detail.rowCount.toLocaleString());
332
329
  }));
333
- }, "#initSheetsContainer"), r(F, "LayoutManager");
334
- let I = F;
335
- var C;
336
- const G = class G extends HTMLElement {
330
+ }, "#initSheetsContainer"), r(D, "LayoutManager");
331
+ let R = D;
332
+ var k;
333
+ const F = class F extends HTMLElement {
337
334
  constructor() {
338
335
  super();
339
- b(this, C, !1);
336
+ f(this, k, !1);
340
337
  this.attachShadow({ mode: "open" });
341
338
  }
342
339
  connectedCallback() {
343
- n(this, C) || (this.layoutManager = new I(this.shadowRoot), this.layoutManager.render(), v(this, C, !0), L.log("NineTable connected."), this.dispatchEvent(new CustomEvent("load", { bubbles: !0, detail: { target: this } })));
340
+ l(this, k) || (this.layoutManager = new R(this.shadowRoot), this.layoutManager.render(), w(this, k, !0), C.log("NineTable connected."), this.dispatchEvent(new CustomEvent("load", { bubbles: !0, detail: { target: this } })));
344
341
  }
345
342
  disconnectedCallback() {
346
- L.log("NineTable disconnected.");
343
+ C.log("NineTable disconnected.");
347
344
  }
348
345
  };
349
- C = new WeakMap(), r(G, "NineTable");
350
- let j = G;
351
- customElements.get("nine-table") || customElements.define("nine-table", j);
346
+ k = new WeakMap(), r(F, "NineTable");
347
+ let I = F;
348
+ customElements.get("nine-table") || customElements.define("nine-table", I);
352
349
  //# sourceMappingURL=nine-table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nine-table.js","sources":["../src/external/NoPeer.js","../src/ui/TableInitializer.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();","export class TableInitializer {\n #container;\n\n constructor(container) {\n this.#container = container;\n }\n\n // [Public] 테이블 초기화 진입점 (필요한 최소한의 마크업 보정만 수행)\n initializeTable(tbl) {\n this.#ensureColgroup(tbl);\n this.#ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n }\n\n // [Private] colgroup 보정\n #ensureColgroup(tbl) {\n if (tbl.querySelector('colgroup')) return;\n\n const colCount = tbl.querySelector('tbody tr')?.querySelectorAll('th, td').length || 1;\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 // [Private] thead 보정\n #ensureThead(tbl) {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n }\n}","import { trace } from \"@nopeer\";\nimport { TableInitializer } from \"./TableInitializer.js\"; // 경로에 맞게 조정 필요\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n #initializer;\n\n constructor() {\n super();\n this.#initializer = new TableInitializer(this);\n }\n\n connectedCallback() {\n this.#render();\n }\n\n /**\n * 외부(LayoutManager 등)에서 원본 테이블 엘리먼트를 주입받아 초기화 및 보정 수행\n * @param {HTMLTableElement} tableEl\n */\n init(tableEl) {\n if (!tableEl) return;\n\n // 원본 테이블 복제 후 TableInitializer를 통한 구조 보정\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = this.#initializer.initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const container = this.querySelector('.sheet-content-container');\n if (container) {\n container.innerHTML = '';\n container.appendChild(this.#tableElement);\n }\n\n trace.log(`NineTableSheet initialized with table 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: block;\n width: 100%;\n height: 100%;\n overflow: auto;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n }\n\n nine-table-sheet .sheet-content-container {\n width: 100%;\n min-width: fit-content;\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=\"sheet-content-container\">\n <!-- 테이블이 동적으로 주입되는 영역 -->\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}\n","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n #shadowRoot;\n\n constructor() {\n super();\n this.#shadowRoot = this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n this.#render();\n }\n\n /**\n * 외부(LayoutManager 등)에서 테이블 목록을 받아 시트와 스플리터 마크업 구성\n * @param {HTMLTableElement[]} tables\n */\n initSheets(tables) {\n const body = this.#shadowRoot.querySelector('nine-table-sheets-body');\n const tabBar = this.#shadowRoot.querySelector('.nine-tab-bar');\n\n const sheetsHtml = tables.map((_, idx) => {\n const sheet = `<nine-table-sheet class=\"${idx === 0 ? 'active' : ''}\" data-index=\"${idx}\"></nine-table-sheet>`;\n if (idx === 0) return sheet;\n return `<nine-splitter class=\"h\" data-split-index=\"${idx}\"></nine-splitter>${sheet}`;\n }).join('');\n\n const tabsHtml = tables.map((_, idx) => `\n <div class=\"nine-tab-item ${idx === 0 ? 'active' : ''}\" data-index=\"${idx}\">Sheet ${idx + 1}</div>\n `).join('');\n\n body.innerHTML = sheetsHtml;\n tabBar.innerHTML = tabsHtml;\n\n // 각 시트에 원본 테이블 데이터 주입\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n sheetElements.forEach((sheetEl, idx) => {\n if (tables[idx]) {\n sheetEl.init(tables[idx]);\n }\n });\n\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 const tabBar = this.#shadowRoot.querySelector('.nine-tab-bar');\n const body = this.#shadowRoot.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 this.#updateSplitters();\n\n // 마지막으로 활성화된 시트 기준 행 카운트 갱신 전달\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.#shadowRoot.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n\n // 외부로 현재 선택된 행 개수 이벤트 디스패치 등 확장 가능\n this.dispatchEvent(new CustomEvent('sheet-switched', {\n detail: { rowCount: activeSheet ? activeSheet.getRowCount() : 0 },\n bubbles: true,\n composed: true\n }));\n }\n\n #updateSplitters() {\n const body = this.#shadowRoot.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 #render() {\n this.#shadowRoot.innerHTML = `\n <style>\n :host {\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 }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-body nine-splitter {\n width: 4px;\n background: #e5e7eb;\n cursor: col-resize;\n flex-shrink: 0;\n display: none !important;\n }\n nine-table-sheets-body nine-splitter.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-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-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-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-sheets-body></nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\"></div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n `;\n }\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","import './nine-table-sheets.js';\n\nexport class LayoutManager {\n #shadowRoot;\n #tables = [];\n\n constructor(shadowRoot) {\n this.#shadowRoot = shadowRoot;\n }\n\n render() {\n const rawTables = this.#shadowRoot.host.querySelectorAll('table');\n rawTables.forEach(tbl => {\n this.#tables.push(tbl);\n tbl.style.display = 'none';\n });\n\n this.#renderLayoutShell();\n this.#initSheetsContainer();\n }\n\n #renderLayoutShell() {\n const totalRowCount = this.#tables[0] ? this.#tables[0].querySelectorAll('tbody tr').length : 0;\n\n this.#shadowRoot.innerHTML = `\n <style>\n :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }\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 </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-splitter></nine-splitter>\n <nine-table-sheets></nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n }\n\n #initSheetsContainer() {\n const sheetsContainer = this.#shadowRoot.querySelector('nine-table-sheets');\n if (sheetsContainer && this.#tables.length > 0) {\n sheetsContainer.initSheets(this.#tables);\n\n // 시트 전환 이벤트 수신 시 상단 전역 카운터 동기화\n sheetsContainer.addEventListener('sheet-switched', (e) => {\n const rowCountEl = this.#shadowRoot.querySelector('#row-count');\n if (rowCountEl && e.detail) {\n rowCountEl.textContent = e.detail.rowCount.toLocaleString();\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","_TableInitializer","container","__privateAdd","_TableInitializer_instances","_container","__privateSet","tbl","__privateMethod","ensureColgroup_fn","ensureThead_fn","colCount","_a","colgroup","defaultWidth","i","col","thead","TableInitializer","_NineTableSheet","_NineTableSheet_instances","_tableElement","_initializer","render_fn","tableEl","clonedTable","__privateGet","NineTableSheet","_NineTableSheets","_NineTableSheets_instances","_shadowRoot","tables","body","tabBar","sheetsHtml","_","idx","sheet","tabsHtml","sheetEl","e","tabItem","isMultiSelect","index","tabItems","sheetElements","tab","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","updateSplitters_fn","activeSheet","rowCountEl","splitter","splitIndex","leftSheet","rightSheet","NineTableSheets","_LayoutManager","shadowRoot","_LayoutManager_instances","_tables","renderLayoutShell_fn","initSheetsContainer_fn","sheetsContainer","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;;ACTvB,MAAME,IAAN,MAAMA,EAAiB;AAAA,EAG1B,YAAYC,GAAW;AAHpB,IAAAC,EAAA,MAAAC;AACH,IAAAD,EAAA,MAAAE;AAGI,IAAAC,EAAA,MAAKD,GAAaH;AAAA,EACtB;AAAA;AAAA,EAGA,gBAAgBK,GAAK;AACjB,WAAAC,EAAA,MAAKJ,GAAAK,GAAL,WAAqBF,IACrBC,EAAA,MAAKJ,GAAAM,GAAL,WAAkBH,IAElBA,EAAI,UAAU,IAAI,oBAAoB,GAC/BA;AAAA,EACX;AA8BJ;AA3CIF,IAAA,eADGD,IAAA;AAiBHK,IAAe,gBAAAX,EAAA,SAACS,GAAK;;AACjB,MAAIA,EAAI,cAAc,UAAU,EAAG;AAEnC,QAAMI,MAAWC,IAAAL,EAAI,cAAc,UAAU,MAA5B,gBAAAK,EAA+B,iBAAiB,UAAU,WAAU,GAC/EC,IAAW,SAAS,cAAc,UAAU,GAC5CC,IAAe,KAAK,IAAI,KAAK,OAAOP,EAAI,eAAe,OAAOI,CAAQ,GAAG,GAAG;AAElF,WAASI,IAAI,GAAGA,IAAIJ,GAAUI,KAAK;AAC/B,UAAMC,IAAM,SAAS,cAAc,KAAK;AACxC,IAAAA,EAAI,aAAa,SAASF,CAAY,GACtCD,EAAS,YAAYG,CAAG;AAAA,EAC5B;AACA,EAAAT,EAAI,QAAQM,CAAQ;AACxB,GAbe;AAgBfH,IAAY,gBAAAZ,EAAA,SAACS,GAAK;AACd,MAAIA,EAAI,cAAc,OAAO,EAAG;AAEhC,QAAMU,IAAQ,SAAS,cAAc,OAAO,GACtCJ,IAAWN,EAAI,cAAc,UAAU;AAC7C,EAAIM,IACAA,EAAS,MAAMI,CAAK,IAEpBV,EAAI,QAAQU,CAAK;AAEzB,GAVY,iBAjCcnB,EAAAG,GAAA;AAAvB,IAAMiB,IAANjB;;ACGA,MAAMkB,IAAN,MAAMA,UAAuB,YAAY;AAAA,EAI5C,cAAc;AACV,UAAK;AALN,IAAAhB,EAAA,MAAAiB;AACH,IAAAjB,EAAA,MAAAkB,GAAgB;AAChB,IAAAlB,EAAA,MAAAmB;AAII,IAAAhB,EAAA,MAAKgB,GAAe,IAAIJ,EAAiB,IAAI;AAAA,EACjD;AAAA,EAEA,oBAAoB;AAChB,IAAAV,EAAA,MAAKY,GAAAG,GAAL;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAKC,GAAS;AACV,QAAI,CAACA,EAAS;AAGd,UAAMC,IAAcD,EAAQ,UAAU,EAAI;AAC1C,IAAAlB,EAAA,MAAKe,GAAgBK,EAAA,MAAKJ,GAAa,gBAAgBG,CAAW,IAClEC,EAAA,MAAKL,GAAc,MAAM,UAAU;AAEnC,UAAMnB,IAAY,KAAK,cAAc,0BAA0B;AAC/D,IAAIA,MACAA,EAAU,YAAY,IACtBA,EAAU,YAAYwB,EAAA,MAAKL,EAAa,IAG5CrB,EAAM,IAAI,+CAA+C,KAAK,YAAW,CAAE,EAAE;AAAA,EACjF;AAAA,EAEA,cAAc;AACV,WAAK0B,EAAA,MAAKL,KACHK,EAAA,MAAKL,GAAc,iBAAiB,UAAU,EAAE,SADvB;AAAA,EAEpC;AAAA,EAkDA,uBAAuB;AACnB,SAAK,YAAY,IACjBrB,EAAM,IAAI,2BAA2B;AAAA,EACzC;AACJ;AA1FIqB,IAAA,eACAC,IAAA,eAFGF,IAAA,eAuCHG,IAAO,gBAAAzB,EAAA,WAAG;AACN,OAAK,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;AA6CrB,GA9CO,YAvCqCA,EAAAqB,GAAA;AAAzC,IAAMQ,IAANR;AA6FF,eAAe,IAAI,kBAAkB,KACtC,eAAe,OAAO,oBAAoBQ,CAAc;;AC/FrD,MAAMC,IAAN,MAAMA,UAAwB,YAAY;AAAA,EAG7C,cAAc;AACV,UAAK;AAJN,IAAAzB,EAAA,MAAA0B;AACH,IAAA1B,EAAA,MAAA2B;AAII,IAAAxB,EAAA,MAAKwB,GAAc,KAAK,aAAa,EAAE,MAAM,QAAQ;AAAA,EACzD;AAAA,EAEA,oBAAoB;AAChB,IAAAtB,EAAA,MAAKqB,GAAAN,GAAL;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAWQ,GAAQ;AACf,UAAMC,IAAON,EAAA,MAAKI,GAAY,cAAc,wBAAwB,GAC9DG,IAASP,EAAA,MAAKI,GAAY,cAAc,eAAe,GAEvDI,IAAaH,EAAO,IAAI,CAACI,GAAGC,MAAQ;AACtC,YAAMC,IAAQ,4BAA4BD,MAAQ,IAAI,WAAW,EAAE,iBAAiBA,CAAG;AACvF,aAAIA,MAAQ,IAAUC,IACf,8CAA8CD,CAAG,qBAAqBC,CAAK;AAAA,IACtF,CAAC,EAAE,KAAK,EAAE,GAEJC,IAAWP,EAAO,IAAI,CAACI,GAAGC,MAAQ;AAAA,wCACRA,MAAQ,IAAI,WAAW,EAAE,iBAAiBA,CAAG,WAAWA,IAAM,CAAC;AAAA,SAC9F,EAAE,KAAK,EAAE;AAEV,IAAAJ,EAAK,YAAYE,GACjBD,EAAO,YAAYK,GAGGN,EAAK,iBAAiB,kBAAkB,EAChD,QAAQ,CAACO,GAASH,MAAQ;AACpC,MAAIL,EAAOK,CAAG,KACVG,EAAQ,KAAKR,EAAOK,CAAG,CAAC;AAAA,IAEhC,CAAC,GAGDH,EAAO,iBAAiB,SAAS,CAACO,MAAM;AACpC,YAAMC,IAAUD,EAAE,OAAO,QAAQ,gBAAgB;AACjD,UAAI,CAACC,EAAS;AAEd,YAAMC,IAAgBF,EAAE,WAAWA,EAAE,WAAWA,EAAE,UAC5CG,IAAQ,SAASF,EAAQ,QAAQ,OAAO,EAAE;AAChD,WAAK,YAAYE,GAAOD,CAAa;AAAA,IACzC,CAAC,GAED,KAAK,YAAY,GAAG,EAAK;AAAA,EAC7B;AAAA,EAEA,YAAYC,GAAOD,IAAgB,IAAO;AACtC,UAAMT,IAASP,EAAA,MAAKI,GAAY,cAAc,eAAe,GACvDE,IAAON,EAAA,MAAKI,GAAY,cAAc,wBAAwB,GAC9Dc,IAAWX,EAAO,iBAAiB,gBAAgB,GACnDY,IAAgBb,EAAK,iBAAiB,kBAAkB;AAE9D,QAAI,CAACY,EAASD,CAAK,EAAG;AAEtB,QAAI,CAACD;AACD,MAAAE,EAAS,QAAQ,CAACE,GAAKV,MAAQ;AAC3B,QAAAU,EAAI,UAAU,OAAO,UAAUV,MAAQO,CAAK;AAC5C,cAAMN,IAAQL,EAAK,cAAc,gCAAgCI,CAAG,IAAI;AACxE,QAAIC,MAAOA,EAAM,MAAM,OAAO;AAAA,MAClC,CAAC,GACDQ,EAAc,QAAQ,CAACR,GAAOD,MAAQ;AAClC,QAAAC,EAAM,UAAU,OAAO,UAAUD,MAAQO,CAAK;AAAA,MAClD,CAAC;AAAA,SACE;AACH,YAAMI,IAAaH,EAASD,CAAK,GAC3BK,IAAaf,EAAO,iBAAiB,uBAAuB;AAElE,UAAIc,EAAW,UAAU,SAAS,QAAQ,KAAKC,EAAW,UAAU;AAChE;AAGJ,MAAAD,EAAW,UAAU,OAAO,QAAQ;AACpC,YAAME,IAAcjB,EAAK,cAAc,gCAAgCW,CAAK,IAAI;AAChF,MAAIM,MACAA,EAAY,UAAU,OAAO,QAAQ,GAChCA,EAAY,UAAU,SAAS,QAAQ,MACxCA,EAAY,MAAM,OAAO;AAAA,IAGrC;AAEA,UAAMC,IAAe,MAAM,KAAKlB,EAAK,iBAAiB,yBAAyB,CAAC;AAChF,QAAIkB,EAAa,SAAS,GAAG;AACzB,YAAMC,IAAgB,IAAID,EAAa;AACvC,MAAAA,EAAa,QAAQ,CAAAb,MAAS;AAC1B,SAAI,CAACA,EAAM,MAAM,QAAQA,EAAM,MAAM,SAAS,gBAC1CA,EAAM,MAAM,OAAO,GAAGc,CAAY,IAAIA,CAAY;AAAA,MAE1D,CAAC;AAAA,IACL;AACI,MAAAD,EAAa,QAAQ,CAAAb,MAAS;AAC1B,QAAAA,EAAM,MAAM,OAAO;AAAA,MACvB,CAAC;AAGL,IAAA7B,EAAA,MAAKqB,GAAAuB,GAAL;AAGA,UAAMC,IAAcrB,EAAK,cAAc,yBAAyB;AAChE,QAAIqB,KAAe,OAAOA,EAAY,eAAgB,YAAY;AAC9D,YAAMC,IAAa5B,EAAA,MAAKI,GAAY,cAAc,YAAY;AAC9D,MAAIwB,MACAA,EAAW,cAAcD,EAAY,YAAW,EAAG,eAAc;AAAA,IAEzE;AAGA,SAAK,cAAc,IAAI,YAAY,kBAAkB;AAAA,MACjD,QAAQ,EAAE,UAAUA,IAAcA,EAAY,YAAW,IAAK,EAAC;AAAA,MAC/D,SAAS;AAAA,MACT,UAAU;AAAA,IACtB,CAAS,CAAC;AAAA,EACN;AAwGJ;AA/NIvB,IAAA,eADGD,IAAA,eA0HHuB,IAAgB,gBAAAtD,EAAA,WAAG;AACf,QAAMkC,IAAON,EAAA,MAAKI,GAAY,cAAc,wBAAwB;AAEpE,EADkBE,EAAK,iBAAiB,eAAe,EAC7C,QAAQ,CAAAuB,MAAY;AAC1B,UAAMC,IAAa,SAASD,EAAS,QAAQ,YAAY,EAAE,GACrDE,IAAYzB,EAAK,cAAc,gCAAgCwB,IAAa,CAAC,IAAI,GACjFE,IAAa1B,EAAK,cAAc,gCAAgCwB,CAAU,IAAI;AAEpF,IAAIC,KAAaC,KAAcD,EAAU,UAAU,SAAS,QAAQ,KAAKC,EAAW,UAAU,SAAS,QAAQ,IAC3GH,EAAS,UAAU,IAAI,QAAQ,IAE/BA,EAAS,UAAU,OAAO,QAAQ;AAAA,EAE1C,CAAC;AACL,GAdgB,qBAgBhBhC,IAAO,gBAAAzB,EAAA,WAAG;AACN,EAAA4B,EAAA,MAAKI,GAAY,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;AAoFjC,GArFO,YA1IsChC,EAAA8B,GAAA;AAA1C,IAAM+B,IAAN/B;AAkOF,eAAe,IAAI,mBAAmB,KACvC,eAAe,OAAO,qBAAqB+B,CAAe;;ACnOvD,MAAMC,IAAN,MAAMA,EAAc;AAAA,EAIvB,YAAYC,GAAY;AAJrB,IAAA1D,EAAA,MAAA2D;AACH,IAAA3D,EAAA,MAAA2B;AACA,IAAA3B,EAAA,MAAA4D,GAAU,CAAA;AAGN,IAAAzD,EAAA,MAAKwB,GAAc+B;AAAA,EACvB;AAAA,EAEA,SAAS;AAEL,IADkBnC,EAAA,MAAKI,GAAY,KAAK,iBAAiB,OAAO,EACtD,QAAQ,CAAAvB,MAAO;AACrB,MAAAmB,EAAA,MAAKqC,GAAQ,KAAKxD,CAAG,GACrBA,EAAI,MAAM,UAAU;AAAA,IACxB,CAAC,GAEDC,EAAA,MAAKsD,GAAAE,GAAL,YACAxD,EAAA,MAAKsD,GAAAG,GAAL;AAAA,EACJ;AAyCJ;AAzDInC,IAAA,eACAiC,IAAA,eAFGD,IAAA,eAmBHE,IAAkB,gBAAAlE,EAAA,WAAG;AACK,EAAA4B,EAAA,MAAKqC,GAAQ,CAAC,KAAIrC,EAAA,MAAKqC,GAAQ,CAAC,EAAE,iBAAiB,UAAU,EAAE,QAErFrC,EAAA,MAAKI,GAAY,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBjC,GAvBkB,uBAyBlBmC,IAAoB,gBAAAnE,EAAA,WAAG;AACnB,QAAMoE,IAAkBxC,EAAA,MAAKI,GAAY,cAAc,mBAAmB;AAC1E,EAAIoC,KAAmBxC,EAAA,MAAKqC,GAAQ,SAAS,MACzCG,EAAgB,WAAWxC,EAAA,MAAKqC,EAAO,GAGvCG,EAAgB,iBAAiB,kBAAkB,CAAC1B,MAAM;AACtD,UAAMc,IAAa5B,EAAA,MAAKI,GAAY,cAAc,YAAY;AAC9D,IAAIwB,KAAcd,EAAE,WAChBc,EAAW,cAAcd,EAAE,OAAO,SAAS,eAAc;AAAA,EAEjE,CAAC;AAET,GAboB,yBA5CG1C,EAAA8D,GAAA;AAApB,IAAMO,IAANP;;ACCQ,MAAMQ,IAAN,MAAMA,UAAkB,YAAY;AAAA,EAG/C,cAAc;AACV,UAAK;AAHT,IAAAjE,EAAA,MAAAkE,GAAW;AAIP,SAAK,aAAa,EAAE,MAAM,OAAM,CAAE;AAAA,EACtC;AAAA,EAEA,oBAAoB;AAChB,IAAI3C,EAAA,MAAK2C,OAGT,KAAK,gBAAgB,IAAIF,EAAc,KAAK,UAAU,GACtD,KAAK,cAAc,OAAM,GAEzB7D,EAAA,MAAK+D,GAAW,KAChBrE,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;AAvBIqE,IAAA,eAD+CvE,EAAAsE,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/TableInitializer.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();","export class TableInitializer {\n #container;\n\n constructor(container) {\n this.#container = container;\n }\n\n // [Public] 테이블 초기화 진입점 (필요한 최소한의 마크업 보정만 수행)\n initializeTable(tbl) {\n this.#ensureColgroup(tbl);\n this.#ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n }\n\n // [Private] colgroup 보정\n #ensureColgroup(tbl) {\n if (tbl.querySelector('colgroup')) return;\n\n const colCount = tbl.querySelector('tbody tr')?.querySelectorAll('th, td').length || 1;\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 // [Private] thead 보정\n #ensureThead(tbl) {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n }\n}","import { trace } from \"@nopeer\";\nimport { TableInitializer } from \"./TableInitializer.js\"; // 경로에 맞게 조정 필요\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n #initializer;\n\n constructor() {\n super();\n this.#initializer = new TableInitializer(this);\n }\n\n connectedCallback() {\n this.#render();\n }\n\n /**\n * 외부(LayoutManager 등)에서 원본 테이블 엘리먼트를 주입받아 초기화 및 보정 수행\n * @param {HTMLTableElement} tableEl\n */\n init(tableEl) {\n if (!tableEl) return;\n\n // 원본 테이블 복제 후 TableInitializer를 통한 구조 보정\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = this.#initializer.initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const container = this.querySelector('.sheet-content-container');\n if (container) {\n container.innerHTML = '';\n container.appendChild(this.#tableElement);\n }\n\n trace.log(`NineTableSheet initialized with table 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: block;\n width: 100%;\n height: 100%;\n overflow: auto;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n }\n\n nine-table-sheet .sheet-content-container {\n width: 100%;\n min-width: fit-content;\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=\"sheet-content-container\">\n <!-- 테이블이 동적으로 주입되는 영역 -->\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}\n","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#render();\n }\n\n /**\n * 외부(LayoutManager 등)에서 테이블 목록을 받아 시트와 스플리터 마크업 구성\n * @param {HTMLTableElement[]} tables\n */\n initSheets(tables) {\n const body = this.querySelector('nine-table-sheets-body');\n const tabBar = this.querySelector('.nine-tab-bar');\n\n const sheetsHtml = tables.map((_, idx) => {\n const sheet = `<nine-table-sheet class=\"${idx === 0 ? 'active' : ''}\" data-index=\"${idx}\"></nine-table-sheet>`;\n if (idx === 0) return sheet;\n return `<nine-splitter class=\"h\" data-split-index=\"${idx}\"></nine-splitter>${sheet}`;\n }).join('');\n\n const tabsHtml = tables.map((_, idx) => `\n <div class=\"nine-tab-item ${idx === 0 ? 'active' : ''}\" data-index=\"${idx}\">Sheet ${idx + 1}</div>\n `).join('');\n\n body.innerHTML = sheetsHtml;\n tabBar.innerHTML = tabsHtml;\n\n // 각 시트에 원본 테이블 데이터 주입\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n sheetElements.forEach((sheetEl, idx) => {\n if (tables[idx]) {\n sheetEl.init(tables[idx]);\n }\n });\n\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 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 this.#updateSplitters();\n\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 this.dispatchEvent(new CustomEvent('sheet-switched', {\n detail: { rowCount: activeSheet ? activeSheet.getRowCount() : 0 },\n bubbles: true,\n composed: true\n }));\n }\n\n #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 #render() {\n this.innerHTML = `\n <style>\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 }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-body nine-splitter {\n width: 4px;\n background: #e5e7eb;\n cursor: col-resize;\n flex-shrink: 0;\n display: none !important;\n }\n nine-table-sheets-body nine-splitter.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-sheets-body></nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\"></div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n `;\n }\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","import './nine-table-sheets.js';\n\nexport class LayoutManager {\n #shadowRoot;\n #tables = [];\n\n constructor(shadowRoot) {\n this.#shadowRoot = shadowRoot;\n }\n\n render() {\n const rawTables = this.#shadowRoot.host.querySelectorAll('table');\n rawTables.forEach(tbl => {\n this.#tables.push(tbl);\n tbl.style.display = 'none';\n });\n\n this.#renderLayoutShell();\n this.#initSheetsContainer();\n }\n\n #renderLayoutShell() {\n const totalRowCount = this.#tables[0] ? this.#tables[0].querySelectorAll('tbody tr').length : 0;\n\n this.#shadowRoot.innerHTML = `\n <style>\n :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }\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 </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-table-sheets></nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n }\n\n #initSheetsContainer() {\n const sheetsContainer = this.#shadowRoot.querySelector('nine-table-sheets');\n if (sheetsContainer && this.#tables.length > 0) {\n sheetsContainer.initSheets(this.#tables);\n\n // 시트 전환 이벤트 수신 시 상단 전역 카운터 동기화\n sheetsContainer.addEventListener('sheet-switched', (e) => {\n const rowCountEl = this.#shadowRoot.querySelector('#row-count');\n if (rowCountEl && e.detail) {\n rowCountEl.textContent = e.detail.rowCount.toLocaleString();\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","_TableInitializer","container","__privateAdd","_TableInitializer_instances","_container","__privateSet","tbl","__privateMethod","ensureColgroup_fn","ensureThead_fn","colCount","_a","colgroup","defaultWidth","i","col","thead","TableInitializer","_NineTableSheet","_NineTableSheet_instances","_tableElement","_initializer","render_fn","tableEl","clonedTable","__privateGet","NineTableSheet","_NineTableSheets","_NineTableSheets_instances","tables","body","tabBar","sheetsHtml","_","idx","sheet","tabsHtml","sheetEl","e","tabItem","isMultiSelect","index","tabItems","sheetElements","tab","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","updateSplitters_fn","activeSheet","rowCountEl","splitter","splitIndex","leftSheet","rightSheet","NineTableSheets","_LayoutManager","shadowRoot","_LayoutManager_instances","_shadowRoot","_tables","renderLayoutShell_fn","initSheetsContainer_fn","sheetsContainer","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;;ACTvB,MAAME,IAAN,MAAMA,EAAiB;AAAA,EAG1B,YAAYC,GAAW;AAHpB,IAAAC,EAAA,MAAAC;AACH,IAAAD,EAAA,MAAAE;AAGI,IAAAC,EAAA,MAAKD,GAAaH;AAAA,EACtB;AAAA;AAAA,EAGA,gBAAgBK,GAAK;AACjB,WAAAC,EAAA,MAAKJ,GAAAK,GAAL,WAAqBF,IACrBC,EAAA,MAAKJ,GAAAM,GAAL,WAAkBH,IAElBA,EAAI,UAAU,IAAI,oBAAoB,GAC/BA;AAAA,EACX;AA8BJ;AA3CIF,IAAA,eADGD,IAAA;AAiBHK,IAAe,gBAAAX,EAAA,SAACS,GAAK;;AACjB,MAAIA,EAAI,cAAc,UAAU,EAAG;AAEnC,QAAMI,MAAWC,IAAAL,EAAI,cAAc,UAAU,MAA5B,gBAAAK,EAA+B,iBAAiB,UAAU,WAAU,GAC/EC,IAAW,SAAS,cAAc,UAAU,GAC5CC,IAAe,KAAK,IAAI,KAAK,OAAOP,EAAI,eAAe,OAAOI,CAAQ,GAAG,GAAG;AAElF,WAASI,IAAI,GAAGA,IAAIJ,GAAUI,KAAK;AAC/B,UAAMC,IAAM,SAAS,cAAc,KAAK;AACxC,IAAAA,EAAI,aAAa,SAASF,CAAY,GACtCD,EAAS,YAAYG,CAAG;AAAA,EAC5B;AACA,EAAAT,EAAI,QAAQM,CAAQ;AACxB,GAbe;AAgBfH,IAAY,gBAAAZ,EAAA,SAACS,GAAK;AACd,MAAIA,EAAI,cAAc,OAAO,EAAG;AAEhC,QAAMU,IAAQ,SAAS,cAAc,OAAO,GACtCJ,IAAWN,EAAI,cAAc,UAAU;AAC7C,EAAIM,IACAA,EAAS,MAAMI,CAAK,IAEpBV,EAAI,QAAQU,CAAK;AAEzB,GAVY,iBAjCcnB,EAAAG,GAAA;AAAvB,IAAMiB,IAANjB;;ACGA,MAAMkB,IAAN,MAAMA,UAAuB,YAAY;AAAA,EAI5C,cAAc;AACV,UAAK;AALN,IAAAhB,EAAA,MAAAiB;AACH,IAAAjB,EAAA,MAAAkB,GAAgB;AAChB,IAAAlB,EAAA,MAAAmB;AAII,IAAAhB,EAAA,MAAKgB,GAAe,IAAIJ,EAAiB,IAAI;AAAA,EACjD;AAAA,EAEA,oBAAoB;AAChB,IAAAV,EAAA,MAAKY,GAAAG,GAAL;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAKC,GAAS;AACV,QAAI,CAACA,EAAS;AAGd,UAAMC,IAAcD,EAAQ,UAAU,EAAI;AAC1C,IAAAlB,EAAA,MAAKe,GAAgBK,EAAA,MAAKJ,GAAa,gBAAgBG,CAAW,IAClEC,EAAA,MAAKL,GAAc,MAAM,UAAU;AAEnC,UAAMnB,IAAY,KAAK,cAAc,0BAA0B;AAC/D,IAAIA,MACAA,EAAU,YAAY,IACtBA,EAAU,YAAYwB,EAAA,MAAKL,EAAa,IAG5CrB,EAAM,IAAI,+CAA+C,KAAK,YAAW,CAAE,EAAE;AAAA,EACjF;AAAA,EAEA,cAAc;AACV,WAAK0B,EAAA,MAAKL,KACHK,EAAA,MAAKL,GAAc,iBAAiB,UAAU,EAAE,SADvB;AAAA,EAEpC;AAAA,EAkDA,uBAAuB;AACnB,SAAK,YAAY,IACjBrB,EAAM,IAAI,2BAA2B;AAAA,EACzC;AACJ;AA1FIqB,IAAA,eACAC,IAAA,eAFGF,IAAA,eAuCHG,IAAO,gBAAAzB,EAAA,WAAG;AACN,OAAK,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;AA6CrB,GA9CO,YAvCqCA,EAAAqB,GAAA;AAAzC,IAAMQ,IAANR;AA6FF,eAAe,IAAI,kBAAkB,KACtC,eAAe,OAAO,oBAAoBQ,CAAc;;AC/FrD,MAAMC,IAAN,MAAMA,UAAwB,YAAY;AAAA,EAC7C,cAAc;AACV,UAAK;AAFN,IAAAzB,EAAA,MAAA0B;AAAA,EAGH;AAAA,EAEA,oBAAoB;AAChB,IAAArB,EAAA,MAAKqB,GAAAN,GAAL;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAWO,GAAQ;AACf,UAAMC,IAAO,KAAK,cAAc,wBAAwB,GAClDC,IAAS,KAAK,cAAc,eAAe,GAE3CC,IAAaH,EAAO,IAAI,CAACI,GAAGC,MAAQ;AACtC,YAAMC,IAAQ,4BAA4BD,MAAQ,IAAI,WAAW,EAAE,iBAAiBA,CAAG;AACvF,aAAIA,MAAQ,IAAUC,IACf,8CAA8CD,CAAG,qBAAqBC,CAAK;AAAA,IACtF,CAAC,EAAE,KAAK,EAAE,GAEJC,IAAWP,EAAO,IAAI,CAACI,GAAGC,MAAQ;AAAA,wCACRA,MAAQ,IAAI,WAAW,EAAE,iBAAiBA,CAAG,WAAWA,IAAM,CAAC;AAAA,SAC9F,EAAE,KAAK,EAAE;AAEV,IAAAJ,EAAK,YAAYE,GACjBD,EAAO,YAAYK,GAGGN,EAAK,iBAAiB,kBAAkB,EAChD,QAAQ,CAACO,GAASH,MAAQ;AACpC,MAAIL,EAAOK,CAAG,KACVG,EAAQ,KAAKR,EAAOK,CAAG,CAAC;AAAA,IAEhC,CAAC,GAGDH,EAAO,iBAAiB,SAAS,CAACO,MAAM;AACpC,YAAMC,IAAUD,EAAE,OAAO,QAAQ,gBAAgB;AACjD,UAAI,CAACC,EAAS;AAEd,YAAMC,IAAgBF,EAAE,WAAWA,EAAE,WAAWA,EAAE,UAC5CG,IAAQ,SAASF,EAAQ,QAAQ,OAAO,EAAE;AAChD,WAAK,YAAYE,GAAOD,CAAa;AAAA,IACzC,CAAC,GAED,KAAK,YAAY,GAAG,EAAK;AAAA,EAC7B;AAAA,EAEA,YAAYC,GAAOD,IAAgB,IAAO;AACtC,UAAMT,IAAS,KAAK,cAAc,eAAe,GAC3CD,IAAO,KAAK,cAAc,wBAAwB,GAClDY,IAAWX,EAAO,iBAAiB,gBAAgB,GACnDY,IAAgBb,EAAK,iBAAiB,kBAAkB;AAE9D,QAAI,CAACY,EAASD,CAAK,EAAG;AAEtB,QAAI,CAACD;AACD,MAAAE,EAAS,QAAQ,CAACE,GAAKV,MAAQ;AAC3B,QAAAU,EAAI,UAAU,OAAO,UAAUV,MAAQO,CAAK;AAC5C,cAAMN,IAAQL,EAAK,cAAc,gCAAgCI,CAAG,IAAI;AACxE,QAAIC,MAAOA,EAAM,MAAM,OAAO;AAAA,MAClC,CAAC,GACDQ,EAAc,QAAQ,CAACR,GAAOD,MAAQ;AAClC,QAAAC,EAAM,UAAU,OAAO,UAAUD,MAAQO,CAAK;AAAA,MAClD,CAAC;AAAA,SACE;AACH,YAAMI,IAAaH,EAASD,CAAK,GAC3BK,IAAaf,EAAO,iBAAiB,uBAAuB;AAElE,UAAIc,EAAW,UAAU,SAAS,QAAQ,KAAKC,EAAW,UAAU;AAChE;AAGJ,MAAAD,EAAW,UAAU,OAAO,QAAQ;AACpC,YAAME,IAAcjB,EAAK,cAAc,gCAAgCW,CAAK,IAAI;AAChF,MAAIM,MACAA,EAAY,UAAU,OAAO,QAAQ,GAChCA,EAAY,UAAU,SAAS,QAAQ,MACxCA,EAAY,MAAM,OAAO;AAAA,IAGrC;AAEA,UAAMC,IAAe,MAAM,KAAKlB,EAAK,iBAAiB,yBAAyB,CAAC;AAChF,QAAIkB,EAAa,SAAS,GAAG;AACzB,YAAMC,IAAgB,IAAID,EAAa;AACvC,MAAAA,EAAa,QAAQ,CAAAb,MAAS;AAC1B,SAAI,CAACA,EAAM,MAAM,QAAQA,EAAM,MAAM,SAAS,gBAC1CA,EAAM,MAAM,OAAO,GAAGc,CAAY,IAAIA,CAAY;AAAA,MAE1D,CAAC;AAAA,IACL;AACI,MAAAD,EAAa,QAAQ,CAAAb,MAAS;AAC1B,QAAAA,EAAM,MAAM,OAAO;AAAA,MACvB,CAAC;AAGL,IAAA5B,EAAA,MAAKqB,GAAAsB,GAAL;AAGA,UAAMC,IAAcrB,EAAK,cAAc,yBAAyB;AAChE,QAAIqB,KAAe,OAAOA,EAAY,eAAgB,YAAY;AAC9D,YAAMC,IAAa,KAAK,cAAc,YAAY;AAClD,MAAIA,MACAA,EAAW,cAAcD,EAAY,YAAW,EAAG,eAAc;AAAA,IAEzE;AAEA,SAAK,cAAc,IAAI,YAAY,kBAAkB;AAAA,MACjD,QAAQ,EAAE,UAAUA,IAAcA,EAAY,YAAW,IAAK,EAAC;AAAA,MAC/D,SAAS;AAAA,MACT,UAAU;AAAA,IACtB,CAAS,CAAC;AAAA,EACN;AAwGJ;AA5NOvB,IAAA,eAsHHsB,IAAgB,gBAAArD,EAAA,WAAG;AACf,QAAMiC,IAAO,KAAK,cAAc,wBAAwB;AAExD,EADkBA,EAAK,iBAAiB,eAAe,EAC7C,QAAQ,CAAAuB,MAAY;AAC1B,UAAMC,IAAa,SAASD,EAAS,QAAQ,YAAY,EAAE,GACrDE,IAAYzB,EAAK,cAAc,gCAAgCwB,IAAa,CAAC,IAAI,GACjFE,IAAa1B,EAAK,cAAc,gCAAgCwB,CAAU,IAAI;AAEpF,IAAIC,KAAaC,KAAcD,EAAU,UAAU,SAAS,QAAQ,KAAKC,EAAW,UAAU,SAAS,QAAQ,IAC3GH,EAAS,UAAU,IAAI,QAAQ,IAE/BA,EAAS,UAAU,OAAO,QAAQ;AAAA,EAE1C,CAAC;AACL,GAdgB,qBAgBhB/B,IAAO,gBAAAzB,EAAA,WAAG;AACN,OAAK,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;AAoFrB,GArFO,YAtIsCA,EAAA8B,GAAA;AAA1C,IAAM8B,IAAN9B;AA8NF,eAAe,IAAI,mBAAmB,KACvC,eAAe,OAAO,qBAAqB8B,CAAe;;AC/NvD,MAAMC,IAAN,MAAMA,EAAc;AAAA,EAIvB,YAAYC,GAAY;AAJrB,IAAAzD,EAAA,MAAA0D;AACH,IAAA1D,EAAA,MAAA2D;AACA,IAAA3D,EAAA,MAAA4D,GAAU,CAAA;AAGN,IAAAzD,EAAA,MAAKwD,GAAcF;AAAA,EACvB;AAAA,EAEA,SAAS;AAEL,IADkBlC,EAAA,MAAKoC,GAAY,KAAK,iBAAiB,OAAO,EACtD,QAAQ,CAAAvD,MAAO;AACrB,MAAAmB,EAAA,MAAKqC,GAAQ,KAAKxD,CAAG,GACrBA,EAAI,MAAM,UAAU;AAAA,IACxB,CAAC,GAEDC,EAAA,MAAKqD,GAAAG,GAAL,YACAxD,EAAA,MAAKqD,GAAAI,GAAL;AAAA,EACJ;AAwCJ;AAxDIH,IAAA,eACAC,IAAA,eAFGF,IAAA,eAmBHG,IAAkB,gBAAAlE,EAAA,WAAG;AACK,EAAA4B,EAAA,MAAKqC,GAAQ,CAAC,KAAIrC,EAAA,MAAKqC,GAAQ,CAAC,EAAE,iBAAiB,UAAU,EAAE,QAErFrC,EAAA,MAAKoC,GAAY,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBjC,GAtBkB,uBAwBlBG,IAAoB,gBAAAnE,EAAA,WAAG;AACnB,QAAMoE,IAAkBxC,EAAA,MAAKoC,GAAY,cAAc,mBAAmB;AAC1E,EAAII,KAAmBxC,EAAA,MAAKqC,GAAQ,SAAS,MACzCG,EAAgB,WAAWxC,EAAA,MAAKqC,EAAO,GAGvCG,EAAgB,iBAAiB,kBAAkB,CAAC3B,MAAM;AACtD,UAAMc,IAAa3B,EAAA,MAAKoC,GAAY,cAAc,YAAY;AAC9D,IAAIT,KAAcd,EAAE,WAChBc,EAAW,cAAcd,EAAE,OAAO,SAAS,eAAc;AAAA,EAEjE,CAAC;AAET,GAboB,yBA3CGzC,EAAA6D,GAAA;AAApB,IAAMQ,IAANR;;ACCQ,MAAMS,IAAN,MAAMA,UAAkB,YAAY;AAAA,EAG/C,cAAc;AACV,UAAK;AAHT,IAAAjE,EAAA,MAAAkE,GAAW;AAIP,SAAK,aAAa,EAAE,MAAM,OAAM,CAAE;AAAA,EACtC;AAAA,EAEA,oBAAoB;AAChB,IAAI3C,EAAA,MAAK2C,OAGT,KAAK,gBAAgB,IAAIF,EAAc,KAAK,UAAU,GACtD,KAAK,cAAc,OAAM,GAEzB7D,EAAA,MAAK+D,GAAW,KAChBrE,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;AAvBIqE,IAAA,eAD+CvE,EAAAsE,GAAA;AAApC,IAAME,IAANF;AA0BV,eAAe,IAAI,YAAY,KAChC,eAAe,OAAO,cAAcE,CAAS;"}
@@ -1,4 +1,4 @@
1
- (function(t,i){typeof exports=="object"&&typeof module<"u"?i(require("@ninebone/util")):typeof define=="function"&&define.amd?define(["@ninebone/util"],i):(t=typeof globalThis<"u"?globalThis:t||self,i(t.NineboneUtil))})(this,function(t){"use strict";var Y=Object.defineProperty;var G=t=>{throw TypeError(t)};var d=(t,i)=>Y(t,"name",{value:i,configurable:!0});var F=(t,i,a)=>i.has(t)||G("Cannot "+a);var s=(t,i,a)=>(F(t,i,"read from private field"),a?a.call(t):i.get(t)),u=(t,i,a)=>i.has(t)?G("Cannot add the same private member more than once"):i instanceof WeakSet?i.add(t):i.set(t,a),E=(t,i,a,q)=>(F(t,i,"write to private field"),q?q.call(t,a):i.set(t,a),a),v=(t,i,a)=>(F(t,i,"access private method"),a);var M,k,J,N,g,T,A,O,p,C,P,Q,x,m,L,V,X,$;const I=class I extends t.trace.constructor{constructor(){super(),this.init("nine-table","green")}};d(I,"Trace");let i=I;const a=new i,B=class B{constructor(n){u(this,k);u(this,M);E(this,M,n)}initializeTable(n){return v(this,k,J).call(this,n),v(this,k,N).call(this,n),n.classList.add("nine-table-element"),n}};M=new WeakMap,k=new WeakSet,J=d(function(n){var h;if(n.querySelector("colgroup"))return;const e=((h=n.querySelector("tbody tr"))==null?void 0:h.querySelectorAll("th, td").length)||1,r=document.createElement("colgroup"),c=Math.max(Math.floor((n.clientWidth||600)/e),100);for(let y=0;y<e;y++){const w=document.createElement("col");w.setAttribute("width",c),r.appendChild(w)}n.prepend(r)},"#ensureColgroup"),N=d(function(n){if(n.querySelector("thead"))return;const e=document.createElement("thead"),r=n.querySelector("colgroup");r?r.after(e):n.prepend(e)},"#ensureThead"),d(B,"TableInitializer");let q=B;const K=class K extends HTMLElement{constructor(){super();u(this,A);u(this,g,null);u(this,T);E(this,T,new q(this))}connectedCallback(){v(this,A,O).call(this)}init(e){if(!e)return;const r=e.cloneNode(!0);E(this,g,s(this,T).initializeTable(r)),s(this,g).style.display="table";const c=this.querySelector(".sheet-content-container");c&&(c.innerHTML="",c.appendChild(s(this,g))),a.log(`NineTableSheet initialized with table rows: ${this.getRowCount()}`)}getRowCount(){return s(this,g)?s(this,g).querySelectorAll("tbody tr").length:0}disconnectedCallback(){this.innerHTML="",a.log("NineTableSheet destroyed.")}};g=new WeakMap,T=new WeakMap,A=new WeakSet,O=d(function(){this.innerHTML=`
1
+ (function(t,i){typeof exports=="object"&&typeof module<"u"?i(require("@ninebone/util")):typeof define=="function"&&define.amd?define(["@ninebone/util"],i):(t=typeof globalThis<"u"?globalThis:t||self,i(t.NineboneUtil))})(this,function(t){"use strict";var X=Object.defineProperty;var F=t=>{throw TypeError(t)};var h=(t,i)=>X(t,"name",{value:i,configurable:!0});var D=(t,i,l)=>i.has(t)||F("Cannot "+l);var r=(t,i,l)=>(D(t,i,"read from private field"),l?l.call(t):i.get(t)),p=(t,i,l)=>i.has(t)?F("Cannot add the same private member more than once"):i instanceof WeakSet?i.add(t):i.set(t,l),C=(t,i,l,S)=>(D(t,i,"write to private field"),S?S.call(t,l):i.set(t,l),l),w=(t,i,l)=>(D(t,i,"access private method"),l);var $,E,G,J,y,L,M,N,q,O,P,g,x,k,Q,V,T;const j=class j extends t.trace.constructor{constructor(){super(),this.init("nine-table","green")}};h(j,"Trace");let i=j;const l=new i,I=class I{constructor(n){p(this,E);p(this,$);C(this,$,n)}initializeTable(n){return w(this,E,G).call(this,n),w(this,E,J).call(this,n),n.classList.add("nine-table-element"),n}};$=new WeakMap,E=new WeakSet,G=h(function(n){var d;if(n.querySelector("colgroup"))return;const e=((d=n.querySelector("tbody tr"))==null?void 0:d.querySelectorAll("th, td").length)||1,a=document.createElement("colgroup"),c=Math.max(Math.floor((n.clientWidth||600)/e),100);for(let u=0;u<e;u++){const m=document.createElement("col");m.setAttribute("width",c),a.appendChild(m)}n.prepend(a)},"#ensureColgroup"),J=h(function(n){if(n.querySelector("thead"))return;const e=document.createElement("thead"),a=n.querySelector("colgroup");a?a.after(e):n.prepend(e)},"#ensureThead"),h(I,"TableInitializer");let S=I;const B=class B extends HTMLElement{constructor(){super();p(this,M);p(this,y,null);p(this,L);C(this,L,new S(this))}connectedCallback(){w(this,M,N).call(this)}init(e){if(!e)return;const a=e.cloneNode(!0);C(this,y,r(this,L).initializeTable(a)),r(this,y).style.display="table";const c=this.querySelector(".sheet-content-container");c&&(c.innerHTML="",c.appendChild(r(this,y))),l.log(`NineTableSheet initialized with table rows: ${this.getRowCount()}`)}getRowCount(){return r(this,y)?r(this,y).querySelectorAll("tbody tr").length:0}disconnectedCallback(){this.innerHTML="",l.log("NineTableSheet destroyed.")}};y=new WeakMap,L=new WeakMap,M=new WeakSet,N=h(function(){this.innerHTML=`
2
2
  <style>
3
3
  nine-table-sheet {
4
4
  display: block;
@@ -42,11 +42,11 @@
42
42
  <div class="sheet-content-container">
43
43
  <!-- 테이블이 동적으로 주입되는 영역 -->
44
44
  </div>
45
- `},"#render"),d(K,"NineTableSheet");let H=K;customElements.get("nine-table-sheet")||customElements.define("nine-table-sheet",H);const W=class W extends HTMLElement{constructor(){super();u(this,C);u(this,p);E(this,p,this.attachShadow({mode:"open"}))}connectedCallback(){v(this,C,Q).call(this)}initSheets(e){const r=s(this,p).querySelector("nine-table-sheets-body"),c=s(this,p).querySelector(".nine-tab-bar"),h=e.map((b,o)=>{const l=`<nine-table-sheet class="${o===0?"active":""}" data-index="${o}"></nine-table-sheet>`;return o===0?l:`<nine-splitter class="h" data-split-index="${o}"></nine-splitter>${l}`}).join(""),y=e.map((b,o)=>`
46
- <div class="nine-tab-item ${o===0?"active":""}" data-index="${o}">Sheet ${o+1}</div>
47
- `).join("");r.innerHTML=h,c.innerHTML=y,r.querySelectorAll("nine-table-sheet").forEach((b,o)=>{e[o]&&b.init(e[o])}),c.addEventListener("click",b=>{const o=b.target.closest(".nine-tab-item");if(!o)return;const l=b.ctrlKey||b.metaKey||b.shiftKey,f=parseInt(o.dataset.index,10);this.switchSheet(f,l)}),this.switchSheet(0,!1)}switchSheet(e,r=!1){const c=s(this,p).querySelector(".nine-tab-bar"),h=s(this,p).querySelector("nine-table-sheets-body"),y=c.querySelectorAll(".nine-tab-item"),w=h.querySelectorAll("nine-table-sheet");if(!y[e])return;if(!r)y.forEach((l,f)=>{l.classList.toggle("active",f===e);const S=h.querySelector(`nine-table-sheet[data-index="${f}"]`);S&&(S.style.flex="")}),w.forEach((l,f)=>{l.classList.toggle("active",f===e)});else{const l=y[e],f=c.querySelectorAll(".nine-tab-item.active");if(l.classList.contains("active")&&f.length<=1)return;l.classList.toggle("active");const S=h.querySelector(`nine-table-sheet[data-index="${e}"]`);S&&(S.classList.toggle("active"),S.classList.contains("active")||(S.style.flex=""))}const b=Array.from(h.querySelectorAll("nine-table-sheet.active"));if(b.length>1){const l=1/b.length;b.forEach(f=>{(!f.style.flex||f.style.flex==="1 1 100%")&&(f.style.flex=`${l} ${l} 0px`)})}else b.forEach(l=>{l.style.flex="1 1 100%"});v(this,C,P).call(this);const o=h.querySelector("nine-table-sheet.active");if(o&&typeof o.getRowCount=="function"){const l=s(this,p).querySelector("#row-count");l&&(l.textContent=o.getRowCount().toLocaleString())}this.dispatchEvent(new CustomEvent("sheet-switched",{detail:{rowCount:o?o.getRowCount():0},bubbles:!0,composed:!0}))}};p=new WeakMap,C=new WeakSet,P=d(function(){const e=s(this,p).querySelector("nine-table-sheets-body");e.querySelectorAll("nine-splitter").forEach(c=>{const h=parseInt(c.dataset.splitIndex,10),y=e.querySelector(`nine-table-sheet[data-index="${h-1}"]`),w=e.querySelector(`nine-table-sheet[data-index="${h}"]`);y&&w&&y.classList.contains("active")&&w.classList.contains("active")?c.classList.add("active"):c.classList.remove("active")})},"#updateSplitters"),Q=d(function(){s(this,p).innerHTML=`
45
+ `},"#render"),h(B,"NineTableSheet");let A=B;customElements.get("nine-table-sheet")||customElements.define("nine-table-sheet",A);const K=class K extends HTMLElement{constructor(){super();p(this,q)}connectedCallback(){w(this,q,P).call(this)}initSheets(e){const a=this.querySelector("nine-table-sheets-body"),c=this.querySelector(".nine-tab-bar"),d=e.map((b,s)=>{const o=`<nine-table-sheet class="${s===0?"active":""}" data-index="${s}"></nine-table-sheet>`;return s===0?o:`<nine-splitter class="h" data-split-index="${s}"></nine-splitter>${o}`}).join(""),u=e.map((b,s)=>`
46
+ <div class="nine-tab-item ${s===0?"active":""}" data-index="${s}">Sheet ${s+1}</div>
47
+ `).join("");a.innerHTML=d,c.innerHTML=u,a.querySelectorAll("nine-table-sheet").forEach((b,s)=>{e[s]&&b.init(e[s])}),c.addEventListener("click",b=>{const s=b.target.closest(".nine-tab-item");if(!s)return;const o=b.ctrlKey||b.metaKey||b.shiftKey,f=parseInt(s.dataset.index,10);this.switchSheet(f,o)}),this.switchSheet(0,!1)}switchSheet(e,a=!1){const c=this.querySelector(".nine-tab-bar"),d=this.querySelector("nine-table-sheets-body"),u=c.querySelectorAll(".nine-tab-item"),m=d.querySelectorAll("nine-table-sheet");if(!u[e])return;if(!a)u.forEach((o,f)=>{o.classList.toggle("active",f===e);const v=d.querySelector(`nine-table-sheet[data-index="${f}"]`);v&&(v.style.flex="")}),m.forEach((o,f)=>{o.classList.toggle("active",f===e)});else{const o=u[e],f=c.querySelectorAll(".nine-tab-item.active");if(o.classList.contains("active")&&f.length<=1)return;o.classList.toggle("active");const v=d.querySelector(`nine-table-sheet[data-index="${e}"]`);v&&(v.classList.toggle("active"),v.classList.contains("active")||(v.style.flex=""))}const b=Array.from(d.querySelectorAll("nine-table-sheet.active"));if(b.length>1){const o=1/b.length;b.forEach(f=>{(!f.style.flex||f.style.flex==="1 1 100%")&&(f.style.flex=`${o} ${o} 0px`)})}else b.forEach(o=>{o.style.flex="1 1 100%"});w(this,q,O).call(this);const s=d.querySelector("nine-table-sheet.active");if(s&&typeof s.getRowCount=="function"){const o=this.querySelector("#row-count");o&&(o.textContent=s.getRowCount().toLocaleString())}this.dispatchEvent(new CustomEvent("sheet-switched",{detail:{rowCount:s?s.getRowCount():0},bubbles:!0,composed:!0}))}};q=new WeakSet,O=h(function(){const e=this.querySelector("nine-table-sheets-body");e.querySelectorAll("nine-splitter").forEach(c=>{const d=parseInt(c.dataset.splitIndex,10),u=e.querySelector(`nine-table-sheet[data-index="${d-1}"]`),m=e.querySelector(`nine-table-sheet[data-index="${d}"]`);u&&m&&u.classList.contains("active")&&m.classList.contains("active")?c.classList.add("active"):c.classList.remove("active")})},"#updateSplitters"),P=h(function(){this.innerHTML=`
48
48
  <style>
49
- :host {
49
+ nine-table-sheets {
50
50
  flex: 1;
51
51
  display: flex;
52
52
  flex-direction: column;
@@ -89,7 +89,7 @@
89
89
  padding: 0 8px;
90
90
  flex-shrink: 0;
91
91
  }
92
- .nine-tab-bar {
92
+ nine-table-sheets .nine-tab-bar {
93
93
  display: flex;
94
94
  align-items: center;
95
95
  gap: 2px;
@@ -97,7 +97,7 @@
97
97
  flex: 1;
98
98
  height: 100%;
99
99
  }
100
- .nine-tab-item {
100
+ nine-table-sheets .nine-tab-item {
101
101
  padding: 4px 12px;
102
102
  cursor: pointer;
103
103
  font-size: 12px;
@@ -108,13 +108,13 @@
108
108
  border-radius: 0 0 3px 3px;
109
109
  user-select: none;
110
110
  }
111
- .nine-tab-item.active {
111
+ nine-table-sheets .nine-tab-item.active {
112
112
  background: #ffffff;
113
113
  color: #111827;
114
114
  font-weight: 600;
115
115
  border-bottom: 2px solid #2563eb;
116
116
  }
117
- .sheets-counter {
117
+ nine-table-sheets .sheets-counter {
118
118
  font-size: 12px;
119
119
  color: #6b7280;
120
120
  padding-left: 12px;
@@ -127,7 +127,7 @@
127
127
  <div class="nine-tab-bar"></div>
128
128
  <div class="sheets-counter">Total : <span id="row-count">0</span></div>
129
129
  </nine-table-sheets-footer>
130
- `},"#render"),d(W,"NineTableSheets");let z=W;customElements.get("nine-table-sheets")||customElements.define("nine-table-sheets",z);const U=class U{constructor(n){u(this,L);u(this,x);u(this,m,[]);E(this,x,n)}render(){s(this,x).host.querySelectorAll("table").forEach(e=>{s(this,m).push(e),e.style.display="none"}),v(this,L,V).call(this),v(this,L,X).call(this)}};x=new WeakMap,m=new WeakMap,L=new WeakSet,V=d(function(){s(this,m)[0]&&s(this,m)[0].querySelectorAll("tbody tr").length,s(this,x).innerHTML=`
130
+ `},"#render"),h(K,"NineTableSheets");let H=K;customElements.get("nine-table-sheets")||customElements.define("nine-table-sheets",H);const W=class W{constructor(n){p(this,k);p(this,g);p(this,x,[]);C(this,g,n)}render(){r(this,g).host.querySelectorAll("table").forEach(e=>{r(this,x).push(e),e.style.display="none"}),w(this,k,Q).call(this),w(this,k,V).call(this)}};g=new WeakMap,x=new WeakMap,k=new WeakSet,Q=h(function(){r(this,x)[0]&&r(this,x)[0].querySelectorAll("tbody tr").length,r(this,g).innerHTML=`
131
131
  <style>
132
132
  :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }
133
133
  nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }
@@ -141,10 +141,9 @@
141
141
  <nine-table-header></nine-table-header>
142
142
  <nine-table-body>
143
143
  <nine-table-summary></nine-table-summary>
144
- <nine-splitter></nine-splitter>
145
144
  <nine-table-sheets></nine-table-sheets>
146
145
  <nine-table-analysis></nine-table-analysis>
147
146
  </nine-table-body>
148
147
  <nine-table-footer></nine-table-footer>
149
- `},"#renderLayoutShell"),X=d(function(){const n=s(this,x).querySelector("nine-table-sheets");n&&s(this,m).length>0&&(n.initSheets(s(this,m)),n.addEventListener("sheet-switched",e=>{const r=s(this,x).querySelector("#row-count");r&&e.detail&&(r.textContent=e.detail.rowCount.toLocaleString())}))},"#initSheetsContainer"),d(U,"LayoutManager");let R=U;const D=class D extends HTMLElement{constructor(){super();u(this,$,!1);this.attachShadow({mode:"open"})}connectedCallback(){s(this,$)||(this.layoutManager=new R(this.shadowRoot),this.layoutManager.render(),E(this,$,!0),a.log("NineTable connected."),this.dispatchEvent(new CustomEvent("load",{bubbles:!0,detail:{target:this}})))}disconnectedCallback(){a.log("NineTable disconnected.")}};$=new WeakMap,d(D,"NineTable");let j=D;customElements.get("nine-table")||customElements.define("nine-table",j)});
148
+ `},"#renderLayoutShell"),V=h(function(){const n=r(this,g).querySelector("nine-table-sheets");n&&r(this,x).length>0&&(n.initSheets(r(this,x)),n.addEventListener("sheet-switched",e=>{const a=r(this,g).querySelector("#row-count");a&&e.detail&&(a.textContent=e.detail.rowCount.toLocaleString())}))},"#initSheetsContainer"),h(W,"LayoutManager");let z=W;const U=class U extends HTMLElement{constructor(){super();p(this,T,!1);this.attachShadow({mode:"open"})}connectedCallback(){r(this,T)||(this.layoutManager=new z(this.shadowRoot),this.layoutManager.render(),C(this,T,!0),l.log("NineTable connected."),this.dispatchEvent(new CustomEvent("load",{bubbles:!0,detail:{target:this}})))}disconnectedCallback(){l.log("NineTable disconnected.")}};T=new WeakMap,h(U,"NineTable");let R=U;customElements.get("nine-table")||customElements.define("nine-table",R)});
150
149
  //# sourceMappingURL=nine-table.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nine-table.umd.js","sources":["../src/external/NoPeer.js","../src/ui/TableInitializer.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();","export class TableInitializer {\n #container;\n\n constructor(container) {\n this.#container = container;\n }\n\n // [Public] 테이블 초기화 진입점 (필요한 최소한의 마크업 보정만 수행)\n initializeTable(tbl) {\n this.#ensureColgroup(tbl);\n this.#ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n }\n\n // [Private] colgroup 보정\n #ensureColgroup(tbl) {\n if (tbl.querySelector('colgroup')) return;\n\n const colCount = tbl.querySelector('tbody tr')?.querySelectorAll('th, td').length || 1;\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 // [Private] thead 보정\n #ensureThead(tbl) {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n }\n}","import { trace } from \"@nopeer\";\nimport { TableInitializer } from \"./TableInitializer.js\"; // 경로에 맞게 조정 필요\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n #initializer;\n\n constructor() {\n super();\n this.#initializer = new TableInitializer(this);\n }\n\n connectedCallback() {\n this.#render();\n }\n\n /**\n * 외부(LayoutManager 등)에서 원본 테이블 엘리먼트를 주입받아 초기화 및 보정 수행\n * @param {HTMLTableElement} tableEl\n */\n init(tableEl) {\n if (!tableEl) return;\n\n // 원본 테이블 복제 후 TableInitializer를 통한 구조 보정\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = this.#initializer.initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const container = this.querySelector('.sheet-content-container');\n if (container) {\n container.innerHTML = '';\n container.appendChild(this.#tableElement);\n }\n\n trace.log(`NineTableSheet initialized with table 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: block;\n width: 100%;\n height: 100%;\n overflow: auto;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n }\n\n nine-table-sheet .sheet-content-container {\n width: 100%;\n min-width: fit-content;\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=\"sheet-content-container\">\n <!-- 테이블이 동적으로 주입되는 영역 -->\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}\n","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n #shadowRoot;\n\n constructor() {\n super();\n this.#shadowRoot = this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n this.#render();\n }\n\n /**\n * 외부(LayoutManager 등)에서 테이블 목록을 받아 시트와 스플리터 마크업 구성\n * @param {HTMLTableElement[]} tables\n */\n initSheets(tables) {\n const body = this.#shadowRoot.querySelector('nine-table-sheets-body');\n const tabBar = this.#shadowRoot.querySelector('.nine-tab-bar');\n\n const sheetsHtml = tables.map((_, idx) => {\n const sheet = `<nine-table-sheet class=\"${idx === 0 ? 'active' : ''}\" data-index=\"${idx}\"></nine-table-sheet>`;\n if (idx === 0) return sheet;\n return `<nine-splitter class=\"h\" data-split-index=\"${idx}\"></nine-splitter>${sheet}`;\n }).join('');\n\n const tabsHtml = tables.map((_, idx) => `\n <div class=\"nine-tab-item ${idx === 0 ? 'active' : ''}\" data-index=\"${idx}\">Sheet ${idx + 1}</div>\n `).join('');\n\n body.innerHTML = sheetsHtml;\n tabBar.innerHTML = tabsHtml;\n\n // 각 시트에 원본 테이블 데이터 주입\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n sheetElements.forEach((sheetEl, idx) => {\n if (tables[idx]) {\n sheetEl.init(tables[idx]);\n }\n });\n\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 const tabBar = this.#shadowRoot.querySelector('.nine-tab-bar');\n const body = this.#shadowRoot.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 this.#updateSplitters();\n\n // 마지막으로 활성화된 시트 기준 행 카운트 갱신 전달\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.#shadowRoot.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n\n // 외부로 현재 선택된 행 개수 이벤트 디스패치 등 확장 가능\n this.dispatchEvent(new CustomEvent('sheet-switched', {\n detail: { rowCount: activeSheet ? activeSheet.getRowCount() : 0 },\n bubbles: true,\n composed: true\n }));\n }\n\n #updateSplitters() {\n const body = this.#shadowRoot.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 #render() {\n this.#shadowRoot.innerHTML = `\n <style>\n :host {\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 }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-body nine-splitter {\n width: 4px;\n background: #e5e7eb;\n cursor: col-resize;\n flex-shrink: 0;\n display: none !important;\n }\n nine-table-sheets-body nine-splitter.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-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-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-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-sheets-body></nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\"></div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n `;\n }\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","import './nine-table-sheets.js';\n\nexport class LayoutManager {\n #shadowRoot;\n #tables = [];\n\n constructor(shadowRoot) {\n this.#shadowRoot = shadowRoot;\n }\n\n render() {\n const rawTables = this.#shadowRoot.host.querySelectorAll('table');\n rawTables.forEach(tbl => {\n this.#tables.push(tbl);\n tbl.style.display = 'none';\n });\n\n this.#renderLayoutShell();\n this.#initSheetsContainer();\n }\n\n #renderLayoutShell() {\n const totalRowCount = this.#tables[0] ? this.#tables[0].querySelectorAll('tbody tr').length : 0;\n\n this.#shadowRoot.innerHTML = `\n <style>\n :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }\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 </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-splitter></nine-splitter>\n <nine-table-sheets></nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n }\n\n #initSheetsContainer() {\n const sheetsContainer = this.#shadowRoot.querySelector('nine-table-sheets');\n if (sheetsContainer && this.#tables.length > 0) {\n sheetsContainer.initSheets(this.#tables);\n\n // 시트 전환 이벤트 수신 시 상단 전역 카운터 동기화\n sheetsContainer.addEventListener('sheet-switched', (e) => {\n const rowCountEl = this.#shadowRoot.querySelector('#row-count');\n if (rowCountEl && e.detail) {\n rowCountEl.textContent = e.detail.rowCount.toLocaleString();\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","_TableInitializer","container","__privateAdd","_TableInitializer_instances","_container","__privateSet","tbl","__privateMethod","ensureColgroup_fn","ensureThead_fn","colCount","_a","colgroup","defaultWidth","i","col","thead","TableInitializer","_NineTableSheet","_NineTableSheet_instances","_tableElement","_initializer","render_fn","tableEl","clonedTable","__privateGet","NineTableSheet","_NineTableSheets","_NineTableSheets_instances","_shadowRoot","tables","body","tabBar","sheetsHtml","_","idx","sheet","tabsHtml","sheetEl","e","tabItem","isMultiSelect","index","tabItems","sheetElements","tab","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","updateSplitters_fn","activeSheet","rowCountEl","splitter","splitIndex","leftSheet","rightSheet","NineTableSheets","_LayoutManager","shadowRoot","_LayoutManager_instances","_tables","renderLayoutShell_fn","initSheetsContainer_fn","sheetsContainer","LayoutManager","_NineTable","_created","NineTable"],"mappings":"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"}
1
+ {"version":3,"file":"nine-table.umd.js","sources":["../src/external/NoPeer.js","../src/ui/TableInitializer.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();","export class TableInitializer {\n #container;\n\n constructor(container) {\n this.#container = container;\n }\n\n // [Public] 테이블 초기화 진입점 (필요한 최소한의 마크업 보정만 수행)\n initializeTable(tbl) {\n this.#ensureColgroup(tbl);\n this.#ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n }\n\n // [Private] colgroup 보정\n #ensureColgroup(tbl) {\n if (tbl.querySelector('colgroup')) return;\n\n const colCount = tbl.querySelector('tbody tr')?.querySelectorAll('th, td').length || 1;\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 // [Private] thead 보정\n #ensureThead(tbl) {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n }\n}","import { trace } from \"@nopeer\";\nimport { TableInitializer } from \"./TableInitializer.js\"; // 경로에 맞게 조정 필요\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n #initializer;\n\n constructor() {\n super();\n this.#initializer = new TableInitializer(this);\n }\n\n connectedCallback() {\n this.#render();\n }\n\n /**\n * 외부(LayoutManager 등)에서 원본 테이블 엘리먼트를 주입받아 초기화 및 보정 수행\n * @param {HTMLTableElement} tableEl\n */\n init(tableEl) {\n if (!tableEl) return;\n\n // 원본 테이블 복제 후 TableInitializer를 통한 구조 보정\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = this.#initializer.initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const container = this.querySelector('.sheet-content-container');\n if (container) {\n container.innerHTML = '';\n container.appendChild(this.#tableElement);\n }\n\n trace.log(`NineTableSheet initialized with table 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: block;\n width: 100%;\n height: 100%;\n overflow: auto;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n }\n\n nine-table-sheet .sheet-content-container {\n width: 100%;\n min-width: fit-content;\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=\"sheet-content-container\">\n <!-- 테이블이 동적으로 주입되는 영역 -->\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}\n","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#render();\n }\n\n /**\n * 외부(LayoutManager 등)에서 테이블 목록을 받아 시트와 스플리터 마크업 구성\n * @param {HTMLTableElement[]} tables\n */\n initSheets(tables) {\n const body = this.querySelector('nine-table-sheets-body');\n const tabBar = this.querySelector('.nine-tab-bar');\n\n const sheetsHtml = tables.map((_, idx) => {\n const sheet = `<nine-table-sheet class=\"${idx === 0 ? 'active' : ''}\" data-index=\"${idx}\"></nine-table-sheet>`;\n if (idx === 0) return sheet;\n return `<nine-splitter class=\"h\" data-split-index=\"${idx}\"></nine-splitter>${sheet}`;\n }).join('');\n\n const tabsHtml = tables.map((_, idx) => `\n <div class=\"nine-tab-item ${idx === 0 ? 'active' : ''}\" data-index=\"${idx}\">Sheet ${idx + 1}</div>\n `).join('');\n\n body.innerHTML = sheetsHtml;\n tabBar.innerHTML = tabsHtml;\n\n // 각 시트에 원본 테이블 데이터 주입\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n sheetElements.forEach((sheetEl, idx) => {\n if (tables[idx]) {\n sheetEl.init(tables[idx]);\n }\n });\n\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 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 this.#updateSplitters();\n\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 this.dispatchEvent(new CustomEvent('sheet-switched', {\n detail: { rowCount: activeSheet ? activeSheet.getRowCount() : 0 },\n bubbles: true,\n composed: true\n }));\n }\n\n #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 #render() {\n this.innerHTML = `\n <style>\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 }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-body nine-splitter {\n width: 4px;\n background: #e5e7eb;\n cursor: col-resize;\n flex-shrink: 0;\n display: none !important;\n }\n nine-table-sheets-body nine-splitter.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-sheets-body></nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\"></div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n `;\n }\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","import './nine-table-sheets.js';\n\nexport class LayoutManager {\n #shadowRoot;\n #tables = [];\n\n constructor(shadowRoot) {\n this.#shadowRoot = shadowRoot;\n }\n\n render() {\n const rawTables = this.#shadowRoot.host.querySelectorAll('table');\n rawTables.forEach(tbl => {\n this.#tables.push(tbl);\n tbl.style.display = 'none';\n });\n\n this.#renderLayoutShell();\n this.#initSheetsContainer();\n }\n\n #renderLayoutShell() {\n const totalRowCount = this.#tables[0] ? this.#tables[0].querySelectorAll('tbody tr').length : 0;\n\n this.#shadowRoot.innerHTML = `\n <style>\n :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }\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 </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-table-sheets></nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n }\n\n #initSheetsContainer() {\n const sheetsContainer = this.#shadowRoot.querySelector('nine-table-sheets');\n if (sheetsContainer && this.#tables.length > 0) {\n sheetsContainer.initSheets(this.#tables);\n\n // 시트 전환 이벤트 수신 시 상단 전역 카운터 동기화\n sheetsContainer.addEventListener('sheet-switched', (e) => {\n const rowCountEl = this.#shadowRoot.querySelector('#row-count');\n if (rowCountEl && e.detail) {\n rowCountEl.textContent = e.detail.rowCount.toLocaleString();\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","_TableInitializer","container","__privateAdd","_TableInitializer_instances","_container","__privateSet","tbl","__privateMethod","ensureColgroup_fn","ensureThead_fn","colCount","_a","colgroup","defaultWidth","i","col","thead","TableInitializer","_NineTableSheet","_NineTableSheet_instances","_tableElement","_initializer","render_fn","tableEl","clonedTable","__privateGet","NineTableSheet","_NineTableSheets","_NineTableSheets_instances","tables","body","tabBar","sheetsHtml","_","idx","sheet","tabsHtml","sheetEl","e","tabItem","isMultiSelect","index","tabItems","sheetElements","tab","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","updateSplitters_fn","activeSheet","rowCountEl","splitter","splitIndex","leftSheet","rightSheet","NineTableSheets","_LayoutManager","shadowRoot","_LayoutManager_instances","_shadowRoot","_tables","renderLayoutShell_fn","initSheetsContainer_fn","sheetsContainer","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.28",
3
+ "version": "0.0.30",
4
4
  "description": "Grid component for real-time collaboration (Vanilla JS based)",
5
5
  "type": "module",
6
6
  "main": "./dist/nine-table.umd.js",