@ninebone/table 0.0.47 → 0.0.49

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,107 +1,77 @@
1
- var V = Object.defineProperty;
2
- var F = (r) => {
3
- throw TypeError(r);
1
+ var K = Object.defineProperty;
2
+ var D = (i) => {
3
+ throw TypeError(i);
4
4
  };
5
- var h = (r, e) => V(r, "name", { value: e, configurable: !0 });
6
- var L = (r, e, t) => e.has(r) || F("Cannot " + t);
7
- var f = (r, e, t) => (L(r, e, "read from private field"), t ? t.call(r) : e.get(r)), u = (r, e, t) => e.has(r) ? F("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(r) : e.set(r, t), v = (r, e, t, o) => (L(r, e, "write to private field"), o ? o.call(r, t) : e.set(r, t), t), g = (r, e, t) => (L(r, e, "access private method"), t);
8
- import { trace as X } from "@ninebone/util";
9
- const R = class R extends X.constructor {
5
+ var G = (i, n, e) => n in i ? K(i, n, { enumerable: !0, configurable: !0, writable: !0, value: e }) : i[n] = e;
6
+ var d = (i, n) => K(i, "name", { value: n, configurable: !0 });
7
+ var x = (i, n, e) => G(i, typeof n != "symbol" ? n + "" : n, e), F = (i, n, e) => n.has(i) || D("Cannot " + e);
8
+ var c = (i, n, e) => (F(i, n, "read from private field"), e ? e.call(i) : n.get(i)), b = (i, n, e) => n.has(i) ? D("Cannot add the same private member more than once") : n instanceof WeakSet ? n.add(i) : n.set(i, e), w = (i, n, e, a) => (F(i, n, "write to private field"), a ? a.call(i, e) : n.set(i, e), e);
9
+ import { trace as J } from "@ninebone/util";
10
+ const N = class N extends J.constructor {
10
11
  constructor() {
11
12
  super(), this.init("nine-table", "green");
12
13
  }
13
14
  };
14
- h(R, "Trace");
15
- let $ = R;
16
- const q = new $();
17
- var E, w, G, J;
18
- const W = class W {
19
- constructor(e) {
20
- u(this, w);
21
- u(this, E);
22
- v(this, E, e);
23
- }
24
- /**
25
- * [Public] 테이블 초기화 진입점
26
- * @param {HTMLTableElement} tbl
27
- * @returns {HTMLTableElement}
28
- */
29
- initializeTable(e) {
30
- return g(this, w, G).call(this, e), g(this, w, J).call(this, e), e.classList.add("nine-table-element"), e;
31
- }
32
- };
33
- E = new WeakMap(), w = new WeakSet(), /**
34
- * [Private] colgroup 및 col 태그 유무 확인 후 보정
35
- */
36
- G = /* @__PURE__ */ h(function(e) {
37
- if (e.querySelector("colgroup")) return;
38
- const t = e.querySelector("tbody tr") || e.querySelector("tr"), o = t ? t.querySelectorAll("th, td").length : 1, l = document.createElement("colgroup"), s = Math.max(Math.floor((e.clientWidth || 600) / o), 100);
39
- for (let i = 0; i < o; i++) {
40
- const n = document.createElement("col");
41
- n.setAttribute("width", s), l.appendChild(n);
42
- }
43
- e.prepend(l);
44
- }, "#ensureColgroup"), /**
45
- * [Private] thead 태그 유무 확인 후 보정
46
- */
47
- J = /* @__PURE__ */ h(function(e) {
48
- if (e.querySelector("thead")) return;
49
- const t = document.createElement("thead"), o = e.querySelector("colgroup");
50
- o ? o.after(t) : e.prepend(t);
51
- }, "#ensureThead"), h(W, "TableInitializer");
52
- let T = W;
53
- var p, S, A, O;
54
- const B = class B extends HTMLElement {
15
+ d(N, "Trace");
16
+ let T = N;
17
+ const S = new T();
18
+ var p, k, q, E, A;
19
+ const R = class R extends HTMLElement {
55
20
  constructor() {
56
21
  super();
57
- u(this, A);
58
- u(this, p, null);
59
- u(this, S);
60
- v(this, S, new T(this));
61
- }
62
- connectedCallback() {
63
- g(this, A, O).call(this);
64
- }
65
- init(t) {
66
- if (!t) return;
67
- const o = t.cloneNode(!0);
68
- v(this, p, f(this, S).initializeTable(o)), f(this, p).style.display = "table";
69
- const l = this.querySelector(".ng-container-left"), s = this.querySelector(".ng-container-body"), i = this.querySelector(".ng-container-right");
70
- if (s) {
71
- const n = f(this, p).cloneNode(!0);
72
- n.querySelectorAll('[fixed="left"], [fixed="right"]').forEach((a) => a.remove()), s.innerHTML = "", s.appendChild(n);
73
- }
74
- if (l) {
75
- const n = f(this, p).cloneNode(!0);
76
- n.querySelectorAll("col, th, td").forEach((c) => {
77
- c.getAttribute("fixed") !== "left" && c.remove();
78
- }), n.querySelectorAll("tbody tr").forEach((c) => c.remove());
79
- let a = 0;
80
- n.querySelectorAll("col").forEach((c) => {
81
- a += parseInt(c.getAttribute("width") || 0, 10);
82
- }), l.innerHTML = "", l.appendChild(n), a > 0 && (l.style.width = `${a}px`, l.style.minWidth = `${a}px`);
83
- }
84
- if (i) {
85
- const n = f(this, p).cloneNode(!0);
86
- n.querySelectorAll("col, th, td").forEach((c) => {
87
- c.getAttribute("fixed") !== "right" && c.remove();
88
- }), n.querySelectorAll("tbody tr").forEach((c) => c.remove());
89
- let a = 0;
90
- n.querySelectorAll("col").forEach((c) => {
91
- a += parseInt(c.getAttribute("width") || 0, 10);
92
- }), i.innerHTML = "", i.appendChild(n), a > 0 && (i.style.width = `${a}px`, i.style.minWidth = `${a}px`);
93
- }
94
- q.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);
95
- }
96
- getRowCount() {
97
- return f(this, p) ? f(this, p).querySelectorAll("tbody tr").length : 0;
98
- }
99
- disconnectedCallback() {
100
- this.innerHTML = "", q.log("NineTableSheet destroyed.");
101
- }
102
- };
103
- p = new WeakMap(), S = new WeakMap(), A = new WeakSet(), O = /* @__PURE__ */ h(function() {
104
- this.innerHTML = `
22
+ b(this, p, null);
23
+ x(this, "connectedCallback", /* @__PURE__ */ d(() => {
24
+ c(this, A).call(this);
25
+ }, "connectedCallback"));
26
+ x(this, "init", /* @__PURE__ */ d((e) => {
27
+ if (!e) return;
28
+ const a = e.cloneNode(!0);
29
+ w(this, p, c(this, k).call(this, a)), c(this, p).style.display = "table";
30
+ const o = this.querySelector(".ng-container-left"), s = this.querySelector(".ng-container-body"), l = this.querySelector(".ng-container-right");
31
+ if (s) {
32
+ const t = c(this, p).cloneNode(!0);
33
+ t.querySelectorAll('[fixed="left"], [fixed="right"]').forEach((r) => r.remove()), s.innerHTML = "", s.appendChild(t);
34
+ }
35
+ if (o) {
36
+ const t = c(this, p).cloneNode(!0);
37
+ t.querySelectorAll("col, th, td").forEach((h) => {
38
+ h.getAttribute("fixed") !== "left" && h.remove();
39
+ }), t.querySelectorAll("tbody tr").forEach((h) => h.remove());
40
+ let r = 0;
41
+ t.querySelectorAll("col").forEach((h) => {
42
+ r += parseInt(h.getAttribute("width") || 0, 10);
43
+ }), o.innerHTML = "", o.appendChild(t), r > 0 && (o.style.width = `${r}px`, o.style.minWidth = `${r}px`);
44
+ }
45
+ if (l) {
46
+ const t = c(this, p).cloneNode(!0);
47
+ t.querySelectorAll("col, th, td").forEach((h) => {
48
+ h.getAttribute("fixed") !== "right" && h.remove();
49
+ }), t.querySelectorAll("tbody tr").forEach((h) => h.remove());
50
+ let r = 0;
51
+ t.querySelectorAll("col").forEach((h) => {
52
+ r += parseInt(h.getAttribute("width") || 0, 10);
53
+ }), l.innerHTML = "", l.appendChild(t), r > 0 && (l.style.width = `${r}px`, l.style.minWidth = `${r}px`);
54
+ }
55
+ S.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);
56
+ }, "init"));
57
+ x(this, "getRowCount", /* @__PURE__ */ d(() => c(this, p) ? c(this, p).querySelectorAll("tbody tr").length : 0, "getRowCount"));
58
+ b(this, k, /* @__PURE__ */ d((e) => (c(this, q).call(this, e), c(this, E).call(this, e), e.classList.add("nine-table-element"), e), "#initializeTable"));
59
+ b(this, q, /* @__PURE__ */ d((e) => {
60
+ if (e.querySelector("colgroup")) return;
61
+ const a = e.querySelector("tbody tr") || e.querySelector("tr"), o = a ? a.querySelectorAll("th, td").length : 1, s = document.createElement("colgroup"), l = Math.max(Math.floor((e.clientWidth || 600) / o), 100);
62
+ for (let t = 0; t < o; t++) {
63
+ const r = document.createElement("col");
64
+ r.setAttribute("width", l), s.appendChild(r);
65
+ }
66
+ e.prepend(s);
67
+ }, "#ensureColgroup"));
68
+ b(this, E, /* @__PURE__ */ d((e) => {
69
+ if (e.querySelector("thead")) return;
70
+ const a = document.createElement("thead"), o = e.querySelector("colgroup");
71
+ o ? o.after(a) : e.prepend(a);
72
+ }, "#ensureThead"));
73
+ b(this, A, /* @__PURE__ */ d(() => {
74
+ this.innerHTML = `
105
75
  <style>
106
76
  nine-table-sheet {
107
77
  display: flex;
@@ -200,82 +170,86 @@ p = new WeakMap(), S = new WeakMap(), A = new WeakSet(), O = /* @__PURE__ */ h(f
200
170
  <div class='ng-scroll-edge'></div>
201
171
  </div>
202
172
  `;
203
- }, "#render"), h(B, "NineTableSheet");
204
- let H = B;
173
+ }, "#render"));
174
+ x(this, "disconnectedCallback", /* @__PURE__ */ d(() => {
175
+ this.innerHTML = "", S.log("NineTableSheet destroyed.");
176
+ }, "disconnectedCallback"));
177
+ }
178
+ };
179
+ p = new WeakMap(), k = new WeakMap(), q = new WeakMap(), E = new WeakMap(), A = new WeakMap(), d(R, "NineTableSheet");
180
+ let H = R;
205
181
  customElements.get("nine-table-sheet") || customElements.define("nine-table-sheet", H);
206
- var y, P, z, Q;
207
- const j = class j extends HTMLElement {
182
+ var C, m, L;
183
+ const W = class W extends HTMLElement {
208
184
  constructor() {
209
185
  super();
210
- u(this, y);
211
- }
212
- connectedCallback() {
213
- g(this, y, P).call(this);
186
+ x(this, "connectedCallback", /* @__PURE__ */ d(() => {
187
+ c(this, C).call(this);
188
+ }, "connectedCallback"));
189
+ b(this, C, /* @__PURE__ */ d(() => {
190
+ const e = this.querySelector(".nine-tab-bar");
191
+ e && (e.addEventListener("click", (a) => {
192
+ const o = a.target.closest(".nine-tab-item");
193
+ if (!o) return;
194
+ const s = a.ctrlKey || a.metaKey || a.shiftKey, l = parseInt(o.dataset.index, 10);
195
+ c(this, m).call(this, l, s);
196
+ }), c(this, m).call(this, 0, !1));
197
+ }, "#init"));
198
+ b(this, m, /* @__PURE__ */ d((e, a = !1) => {
199
+ const o = this.querySelector(".nine-tab-bar"), s = this.querySelector("nine-table-sheets-body"), l = o.querySelectorAll(".nine-tab-item"), t = s.querySelectorAll("nine-table-sheet");
200
+ if (!l[e]) return;
201
+ if (!a)
202
+ l.forEach((f, u) => {
203
+ f.classList.toggle("active", u === e);
204
+ const g = s.querySelector(`nine-table-sheet[data-index="${u}"]`);
205
+ g && (g.style.flex = "");
206
+ }), t.forEach((f, u) => {
207
+ f.classList.toggle("active", u === e);
208
+ });
209
+ else {
210
+ const f = l[e], u = o.querySelectorAll(".nine-tab-item.active");
211
+ if (f.classList.contains("active") && u.length <= 1)
212
+ return;
213
+ f.classList.toggle("active");
214
+ const g = s.querySelector(`nine-table-sheet[data-index="${e}"]`);
215
+ g && (g.classList.toggle("active"), g.classList.contains("active") || (g.style.flex = ""));
216
+ }
217
+ const r = Array.from(s.querySelectorAll("nine-table-sheet.active"));
218
+ if (r.length > 1) {
219
+ const f = 1 / r.length;
220
+ r.forEach((u) => {
221
+ (!u.style.flex || u.style.flex === "1 1 100%") && (u.style.flex = `${f} ${f} 0px`);
222
+ });
223
+ } else
224
+ r.forEach((f) => {
225
+ f.style.flex = "1 1 100%";
226
+ });
227
+ c(this, L).call(this);
228
+ const h = s.querySelector("nine-table-sheet.active");
229
+ if (h && typeof h.getRowCount == "function") {
230
+ const f = this.querySelector("#row-count");
231
+ f && (f.textContent = h.getRowCount().toLocaleString());
232
+ }
233
+ }, "#switchSheet"));
234
+ b(this, L, /* @__PURE__ */ d(() => {
235
+ const e = this.querySelector("nine-table-sheets-body");
236
+ e.querySelectorAll("nine-splitter").forEach((o) => {
237
+ const s = parseInt(o.dataset.splitIndex, 10), l = e.querySelector(`nine-table-sheet[data-index="${s - 1}"]`), t = e.querySelector(`nine-table-sheet[data-index="${s}"]`);
238
+ l && t && l.classList.contains("active") && t.classList.contains("active") ? o.classList.add("active") : o.classList.remove("active");
239
+ });
240
+ }, "#updateSplitters"));
214
241
  }
215
242
  };
216
- y = new WeakSet(), P = /* @__PURE__ */ h(function() {
217
- const t = this.querySelector(".nine-tab-bar");
218
- t && (t.addEventListener("click", (o) => {
219
- const l = o.target.closest(".nine-tab-item");
220
- if (!l) return;
221
- const s = o.ctrlKey || o.metaKey || o.shiftKey, i = parseInt(l.dataset.index, 10);
222
- g(this, y, z).call(this, i, s);
223
- }), g(this, y, z).call(this, 0, !1));
224
- }, "#init"), z = /* @__PURE__ */ h(function(t, o = !1) {
225
- const l = this.querySelector(".nine-tab-bar"), s = this.querySelector("nine-table-sheets-body"), i = l.querySelectorAll(".nine-tab-item"), n = s.querySelectorAll("nine-table-sheet");
226
- if (!i[t]) return;
227
- if (!o)
228
- i.forEach((d, b) => {
229
- d.classList.toggle("active", b === t);
230
- const x = s.querySelector(`nine-table-sheet[data-index="${b}"]`);
231
- x && (x.style.flex = "");
232
- }), n.forEach((d, b) => {
233
- d.classList.toggle("active", b === t);
234
- });
235
- else {
236
- const d = i[t], b = l.querySelectorAll(".nine-tab-item.active");
237
- if (d.classList.contains("active") && b.length <= 1)
238
- return;
239
- d.classList.toggle("active");
240
- const x = s.querySelector(`nine-table-sheet[data-index="${t}"]`);
241
- x && (x.classList.toggle("active"), x.classList.contains("active") || (x.style.flex = ""));
242
- }
243
- const a = Array.from(s.querySelectorAll("nine-table-sheet.active"));
244
- if (a.length > 1) {
245
- const d = 1 / a.length;
246
- a.forEach((b) => {
247
- (!b.style.flex || b.style.flex === "1 1 100%") && (b.style.flex = `${d} ${d} 0px`);
248
- });
249
- } else
250
- a.forEach((d) => {
251
- d.style.flex = "1 1 100%";
252
- });
253
- g(this, y, Q).call(this);
254
- const c = s.querySelector("nine-table-sheet.active");
255
- if (c && typeof c.getRowCount == "function") {
256
- const d = this.querySelector("#row-count");
257
- d && (d.textContent = c.getRowCount().toLocaleString());
258
- }
259
- }, "#switchSheet"), Q = /* @__PURE__ */ h(function() {
260
- const t = this.querySelector("nine-table-sheets-body");
261
- t.querySelectorAll("nine-splitter").forEach((l) => {
262
- const s = parseInt(l.dataset.splitIndex, 10), i = t.querySelector(`nine-table-sheet[data-index="${s - 1}"]`), n = t.querySelector(`nine-table-sheet[data-index="${s}"]`);
263
- i && n && i.classList.contains("active") && n.classList.contains("active") ? l.classList.add("active") : l.classList.remove("active");
264
- });
265
- }, "#updateSplitters"), h(j, "NineTableSheets");
266
- let M = j;
243
+ C = new WeakMap(), m = new WeakMap(), L = new WeakMap(), d(W, "NineTableSheets");
244
+ let M = W;
267
245
  customElements.get("nine-table-sheets") || customElements.define("nine-table-sheets", M);
268
- var m, C, U;
269
- const K = class K {
270
- constructor(e) {
271
- u(this, C);
272
- u(this, m);
273
- v(this, m, e), g(this, C, U).call(this);
274
- }
275
- };
276
- m = new WeakMap(), C = new WeakSet(), U = /* @__PURE__ */ h(function() {
277
- const t = Array.from(f(this, m).host.children).filter((i) => i.tagName === "TABLE"), o = t.map((i, n) => `<nine-table-sheet class="${n === 0 ? "active" : ""}" data-index="${n}"></nine-table-sheet>`).join(""), l = t.map((i, n) => `<div class="nine-tab-item ${n === 0 ? "active" : ""}" data-index="${n}">Sheet ${n + 1}</div>`).join("");
278
- f(this, m).innerHTML = `
246
+ var y, $;
247
+ const B = class B {
248
+ constructor(n) {
249
+ b(this, y);
250
+ b(this, $, /* @__PURE__ */ d(() => {
251
+ const e = Array.from(c(this, y).host.children).filter((l) => l.tagName === "TABLE"), a = e.map((l, t) => `<nine-table-sheet class="${t === 0 ? "active" : ""}" data-index="${t}"></nine-table-sheet>`).join(""), o = e.map((l, t) => `<div class="nine-tab-item ${t === 0 ? "active" : ""}" data-index="${t}">Sheet ${t + 1}</div>`).join("");
252
+ c(this, y).innerHTML = `
279
253
  <style>
280
254
  :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }
281
255
  nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }
@@ -356,9 +330,9 @@ m = new WeakMap(), C = new WeakSet(), U = /* @__PURE__ */ h(function() {
356
330
  <nine-table-body>
357
331
  <nine-table-summary></nine-table-summary>
358
332
  <nine-table-sheets>
359
- <nine-table-sheets-body>${o}</nine-table-sheets-body>
333
+ <nine-table-sheets-body>${a}</nine-table-sheets-body>
360
334
  <nine-table-sheets-footer>
361
- <div class="nine-tab-bar">${l}</div>
335
+ <div class="nine-tab-bar">${o}</div>
362
336
  <div class="sheets-counter">Total : <span id="row-count">0</span></div>
363
337
  </nine-table-sheets-footer>
364
338
  </nine-table-sheets>
@@ -366,27 +340,31 @@ m = new WeakMap(), C = new WeakSet(), U = /* @__PURE__ */ h(function() {
366
340
  </nine-table-body>
367
341
  <nine-table-footer></nine-table-footer>
368
342
  `;
369
- const s = f(this, m).querySelectorAll("nine-table-sheet");
370
- s == null || s.forEach((i, n) => {
371
- t[n] && i.init(t[n]);
372
- });
373
- }, "#render"), h(K, "LayoutManager");
374
- let N = K;
375
- var k;
376
- const D = class D extends HTMLElement {
343
+ const s = c(this, y).querySelectorAll("nine-table-sheet");
344
+ s == null || s.forEach((l, t) => {
345
+ e[t] && l.init(e[t]);
346
+ });
347
+ }, "#render"));
348
+ w(this, y, n), c(this, $).call(this);
349
+ }
350
+ };
351
+ y = new WeakMap(), $ = new WeakMap(), d(B, "LayoutManager");
352
+ let z = B;
353
+ var v;
354
+ const j = class j extends HTMLElement {
377
355
  constructor() {
378
356
  super();
379
- u(this, k, !1);
357
+ b(this, v, !1);
380
358
  this.attachShadow({ mode: "open" });
381
359
  }
382
360
  connectedCallback() {
383
- f(this, k) || (this.layoutManager = new N(this.shadowRoot), v(this, k, !0), q.log("NineTable connected."), this.dispatchEvent(new CustomEvent("load", { bubbles: !0, detail: { target: this } })));
361
+ c(this, v) || (this.layoutManager = new z(this.shadowRoot), w(this, v, !0), S.log("NineTable connected."), this.dispatchEvent(new CustomEvent("load", { bubbles: !0, detail: { target: this } })));
384
362
  }
385
363
  disconnectedCallback() {
386
- q.log("NineTable disconnected.");
364
+ S.log("NineTable disconnected.");
387
365
  }
388
366
  };
389
- k = new WeakMap(), h(D, "NineTable");
390
- let I = D;
367
+ v = new WeakMap(), d(j, "NineTable");
368
+ let I = j;
391
369
  customElements.get("nine-table") || customElements.define("nine-table", I);
392
370
  //# 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 /**\n * [Public] 테이블 초기화 진입점\n * @param {HTMLTableElement} tbl\n * @returns {HTMLTableElement}\n */\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 /**\n * [Private] colgroup 및 col 태그 유무 확인 후 보정\n */\n #ensureColgroup(tbl) {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n }\n\n /**\n * [Private] thead 태그 유무 확인 후 보정\n */\n #ensureThead(tbl) {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n }\n}","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 init(tableEl) {\n if (!tableEl) return;\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = this.#initializer.initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const leftContainer = this.querySelector('.ng-container-left');\n const bodyContainer = this.querySelector('.ng-container-body');\n const rightContainer = this.querySelector('.ng-container-right');\n\n // 1. 메인 바디 영역 (좌우 고정 컬럼 제외)\n if (bodyContainer) {\n const bodyTable = this.#tableElement.cloneNode(true);\n bodyTable.querySelectorAll('[fixed=\"left\"], [fixed=\"right\"]').forEach(el => el.remove());\n bodyContainer.innerHTML = '';\n bodyContainer.appendChild(bodyTable);\n }\n\n // 2. 좌측 고정 영역 및 너비 계산\n if (leftContainer) {\n const leftTable = this.#tableElement.cloneNode(true);\n leftTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'left') el.remove();\n });\n leftTable.querySelectorAll('tbody tr').forEach(tr => tr.remove());\n\n let leftWidth = 0;\n leftTable.querySelectorAll('col').forEach(col => {\n leftWidth += parseInt(col.getAttribute('width') || 0, 10);\n });\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n\n if (leftWidth > 0) {\n leftContainer.style.width = `${leftWidth}px`;\n leftContainer.style.minWidth = `${leftWidth}px`;\n }\n }\n\n // 3. 우측 고정 영역 및 너비 계산\n if (rightContainer) {\n const rightTable = this.#tableElement.cloneNode(true);\n rightTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'right') el.remove();\n });\n rightTable.querySelectorAll('tbody tr').forEach(tr => tr.remove());\n\n let rightWidth = 0;\n rightTable.querySelectorAll('col').forEach(col => {\n rightWidth += parseInt(col.getAttribute('width') || 0, 10);\n });\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n\n if (rightWidth > 0) {\n rightContainer.style.width = `${rightWidth}px`;\n rightContainer.style.minWidth = `${rightWidth}px`;\n }\n }\n\n trace.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);\n }\n\n getRowCount() {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n }\n\n #render() {\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n overflow: hidden;\n }\n\n nine-table-sheet .ng-container-top {\n display: flex;\n flex-direction: row;\n flex: 1;\n width: 100%;\n overflow: hidden;\n position: relative;\n }\n\n nine-table-sheet .ng-container-left {\n flex-shrink: 0;\n overflow: hidden;\n background: #ffffff;\n border-right: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .ng-container-body {\n flex: 1;\n overflow: auto;\n background: #ffffff;\n position: relative;\n }\n\n nine-table-sheet .ng-container-right {\n flex-shrink: 0;\n overflow: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .ng-container-bottom {\n display: flex;\n flex-direction: row;\n height: 16px;\n flex-shrink: 0;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n }\n\n nine-table-sheet nine-table-hscrollbar {\n flex: 1;\n overflow: hidden;\n display: block;\n }\n\n nine-table-sheet .ng-scroll-edge {\n width: 16px;\n flex-shrink: 0;\n background: #f3f4f6;\n }\n\n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n\n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n\n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class='ng-container-top'>\n <div class='ng-container-left'></div>\n <div class='ng-container-body'></div>\n <div class='ng-container-right'></div>\n <nine-table-vscrollbar></nine-table-vscrollbar>\n </div>\n <div class='ng-container-bottom'>\n <nine-table-hscrollbar></nine-table-hscrollbar>\n <div class='ng-scroll-edge'></div>\n </div>\n `;\n }\n\n disconnectedCallback() {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n }\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#init();\n }\n\n #init() {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.#switchSheet(index, isMultiSelect);\n });\n\n this.#switchSheet(0, false);\n }\n\n #switchSheet(index, isMultiSelect = false) {\n 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 const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n }\n\n #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\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","import './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n }\n\n #render() {\n const rawElements = Array.from(this.#root.host.children);\n const rawTables = rawElements.filter(el => el.tagName === 'TABLE');\n\n const sheetsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<nine-table-sheet class=\"${className}\" data-index=\"${idx}\"></nine-table-sheet>`;\n }).join('');\n\n const tabsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<div class=\"nine-tab-item ${className}\" data-index=\"${idx}\">Sheet ${idx + 1}</div>`;\n }).join('');\n\n this.#root.innerHTML = `\n <style>\n :host { 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\n nine-table-sheets {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n background: #fff;\n }\n nine-table-sheets-body {\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n flex-direction: row;\n }\n nine-table-sheet {\n display: none !important;\n height: 100%;\n overflow: auto;\n flex: 1 1 100%;\n }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-footer {\n display: flex;\n height: 32px;\n background: #f3f4f6;\n border-top: 1px solid #e5e7eb;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n flex-shrink: 0;\n }\n nine-table-sheets .nine-tab-bar {\n display: flex;\n align-items: center;\n gap: 2px;\n overflow-x: auto;\n flex: 1;\n height: 100%;\n }\n nine-table-sheets .nine-tab-item {\n padding: 4px 12px;\n cursor: pointer;\n font-size: 12px;\n color: #4b5563;\n background: #e5e7eb;\n border: 1px solid #d1d5db;\n border-top: none;\n border-radius: 0 0 3px 3px;\n user-select: none;\n }\n nine-table-sheets .nine-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n nine-table-sheets .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-table-sheets>\n <nine-table-sheets-body>${sheetsHtml}</nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\">${tabsHtml}</div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n </nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n\n const $sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n $sheetElements?.forEach(($el, idx) => {\n if (rawTables[idx]) {\n $el.init(rawTables[idx]);\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","firstRow","colCount","colgroup","defaultWidth","col","thead","TableInitializer","_NineTableSheet","_NineTableSheet_instances","_tableElement","_initializer","render_fn","tableEl","clonedTable","__privateGet","leftContainer","bodyContainer","rightContainer","bodyTable","el","leftTable","tr","leftWidth","rightTable","rightWidth","NineTableSheet","_NineTableSheets","_NineTableSheets_instances","init_fn","tabBar","e","tabItem","isMultiSelect","index","switchSheet_fn","body","tabItems","sheetElements","tab","idx","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","updateSplitters_fn","activeSheet","rowCountEl","splitter","splitIndex","leftSheet","rightSheet","NineTableSheets","_LayoutManager","shadowRoot","_LayoutManager_instances","_root","rawTables","sheetsHtml","_","tabsHtml","$sheetElements","$el","LayoutManager","_NineTable","_created","NineTable"],"mappings":"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"}
1
+ {"version":3,"file":"nine-table.js","sources":["../src/external/NoPeer.js","../src/ui/nine-table-sheet.js","../src/ui/nine-table-sheets.js","../src/ui/LayoutManager.js","../src/core/nine-table.js"],"sourcesContent":["import { trace as traceOrigin } from '@ninebone/util';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-table\", \"green\");\n }\n}\n\nexport const trace = new Trace();","import { trace } from \"@nopeer\";\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n\n constructor() {\n super();\n }\n\n connectedCallback = () => {\n this.#render();\n };\n\n init = (tableEl) => {\n if (!tableEl) return;\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = this.#initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const leftContainer = this.querySelector('.ng-container-left');\n const bodyContainer = this.querySelector('.ng-container-body');\n const rightContainer = this.querySelector('.ng-container-right');\n\n // 1. 메인 바디 영역 (좌우 고정 컬럼 제외)\n if (bodyContainer) {\n const bodyTable = this.#tableElement.cloneNode(true);\n bodyTable.querySelectorAll('[fixed=\"left\"], [fixed=\"right\"]').forEach(el => el.remove());\n bodyContainer.innerHTML = '';\n bodyContainer.appendChild(bodyTable);\n }\n\n // 2. 좌측 고정 영역 및 너비 계산\n if (leftContainer) {\n const leftTable = this.#tableElement.cloneNode(true);\n leftTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'left') el.remove();\n });\n leftTable.querySelectorAll('tbody tr').forEach(tr => tr.remove());\n\n let leftWidth = 0;\n leftTable.querySelectorAll('col').forEach(col => {\n leftWidth += parseInt(col.getAttribute('width') || 0, 10);\n });\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n\n if (leftWidth > 0) {\n leftContainer.style.width = `${leftWidth}px`;\n leftContainer.style.minWidth = `${leftWidth}px`;\n }\n }\n\n // 3. 우측 고정 영역 및 너비 계산\n if (rightContainer) {\n const rightTable = this.#tableElement.cloneNode(true);\n rightTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'right') el.remove();\n });\n rightTable.querySelectorAll('tbody tr').forEach(tr => tr.remove());\n\n let rightWidth = 0;\n rightTable.querySelectorAll('col').forEach(col => {\n rightWidth += parseInt(col.getAttribute('width') || 0, 10);\n });\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n\n if (rightWidth > 0) {\n rightContainer.style.width = `${rightWidth}px`;\n rightContainer.style.minWidth = `${rightWidth}px`;\n }\n }\n\n trace.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);\n };\n\n getRowCount = () => {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n };\n\n #initializeTable = (tbl) => {\n this.#ensureColgroup(tbl);\n this.#ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n };\n\n #ensureColgroup = (tbl) => {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n };\n\n #ensureThead = (tbl) => {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n };\n\n #render = () => {\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n overflow: hidden;\n }\n\n nine-table-sheet .ng-container-top {\n display: flex;\n flex-direction: row;\n flex: 1;\n width: 100%;\n overflow: hidden;\n position: relative;\n }\n\n nine-table-sheet .ng-container-left {\n flex-shrink: 0;\n overflow: hidden;\n background: #ffffff;\n border-right: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .ng-container-body {\n flex: 1;\n overflow: auto;\n background: #ffffff;\n position: relative;\n }\n\n nine-table-sheet .ng-container-right {\n flex-shrink: 0;\n overflow: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .ng-container-bottom {\n display: flex;\n flex-direction: row;\n height: 16px;\n flex-shrink: 0;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n }\n\n nine-table-sheet nine-table-hscrollbar {\n flex: 1;\n overflow: hidden;\n display: block;\n }\n\n nine-table-sheet .ng-scroll-edge {\n width: 16px;\n flex-shrink: 0;\n background: #f3f4f6;\n }\n\n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n\n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n\n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class='ng-container-top'>\n <div class='ng-container-left'></div>\n <div class='ng-container-body'></div>\n <div class='ng-container-right'></div>\n <nine-table-vscrollbar></nine-table-vscrollbar>\n </div>\n <div class='ng-container-bottom'>\n <nine-table-hscrollbar></nine-table-hscrollbar>\n <div class='ng-scroll-edge'></div>\n </div>\n `;\n };\n\n disconnectedCallback = () => {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n };\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback = () => {\n this.#init();\n };\n\n #init = () => {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.#switchSheet(index, isMultiSelect);\n });\n\n this.#switchSheet(0, false);\n };\n\n #switchSheet = (index, isMultiSelect = false) => {\n 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 const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n };\n\n #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\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","import './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n }\n\n #render = () => {\n const rawElements = Array.from(this.#root.host.children);\n const rawTables = rawElements.filter(el => el.tagName === 'TABLE');\n\n const sheetsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<nine-table-sheet class=\"${className}\" data-index=\"${idx}\"></nine-table-sheet>`;\n }).join('');\n\n const tabsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<div class=\"nine-tab-item ${className}\" data-index=\"${idx}\">Sheet ${idx + 1}</div>`;\n }).join('');\n\n this.#root.innerHTML = `\n <style>\n :host { 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\n nine-table-sheets {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n background: #fff;\n }\n nine-table-sheets-body {\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n flex-direction: row;\n }\n nine-table-sheet {\n display: none !important;\n height: 100%;\n overflow: auto;\n flex: 1 1 100%;\n }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-footer {\n display: flex;\n height: 32px;\n background: #f3f4f6;\n border-top: 1px solid #e5e7eb;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n flex-shrink: 0;\n }\n nine-table-sheets .nine-tab-bar {\n display: flex;\n align-items: center;\n gap: 2px;\n overflow-x: auto;\n flex: 1;\n height: 100%;\n }\n nine-table-sheets .nine-tab-item {\n padding: 4px 12px;\n cursor: pointer;\n font-size: 12px;\n color: #4b5563;\n background: #e5e7eb;\n border: 1px solid #d1d5db;\n border-top: none;\n border-radius: 0 0 3px 3px;\n user-select: none;\n }\n nine-table-sheets .nine-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n nine-table-sheets .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-table-sheets>\n <nine-table-sheets-body>${sheetsHtml}</nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\">${tabsHtml}</div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n </nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n\n const $sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n $sheetElements?.forEach(($el, idx) => {\n if (rawTables[idx]) {\n $el.init(rawTables[idx]);\n }\n });\n };\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot 하나만 넘겨서 내부에서 레이아웃 및 테이블 수집 처리\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_NineTableSheet","__privateAdd","_tableElement","__publicField","__privateGet","_render","tableEl","clonedTable","__privateSet","_initializeTable","leftContainer","bodyContainer","rightContainer","bodyTable","el","leftTable","tr","leftWidth","col","rightTable","rightWidth","tbl","_ensureColgroup","_ensureThead","firstRow","colCount","colgroup","defaultWidth","i","thead","NineTableSheet","_NineTableSheets","_init","tabBar","e","tabItem","isMultiSelect","index","_switchSheet","body","tabItems","sheetElements","tab","idx","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","_updateSplitters","activeSheet","rowCountEl","splitter","splitIndex","leftSheet","rightSheet","NineTableSheets","_LayoutManager","shadowRoot","_root","rawTables","sheetsHtml","_","tabsHtml","$sheetElements","$el","LayoutManager","_NineTable","_created","NineTable"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- (function(n,i){typeof exports=="object"&&typeof module<"u"?i(require("@ninebone/util")):typeof define=="function"&&define.amd?define(["@ninebone/util"],i):(n=typeof globalThis<"u"?globalThis:n||self,i(n.NineboneUtil))})(this,function(n){"use strict";var V=Object.defineProperty;var D=n=>{throw TypeError(n)};var b=(n,i)=>V(n,"name",{value:i,configurable:!0});var K=(n,i,c)=>i.has(n)||D("Cannot "+c);var u=(n,i,c)=>(K(n,i,"read from private field"),c?c.call(n):i.get(n)),y=(n,i,c)=>i.has(n)?D("Cannot add the same private member more than once"):i instanceof WeakSet?i.add(n):i.set(n,c),k=(n,i,c,S)=>(K(n,i,"write to private field"),S?S.call(n,c):i.set(n,c),c),m=(n,i,c)=>(K(n,i,"access private method"),c);var C,q,F,G,p,E,L,J,x,O,U,P,v,T,Q,A;const N=class N extends n.trace.constructor{constructor(){super(),this.init("nine-table","green")}};b(N,"Trace");let i=N;const c=new i,I=class I{constructor(l){y(this,q);y(this,C);k(this,C,l)}initializeTable(l){return m(this,q,F).call(this,l),m(this,q,G).call(this,l),l.classList.add("nine-table-element"),l}};C=new WeakMap,q=new WeakSet,F=b(function(l){if(l.querySelector("colgroup"))return;const t=l.querySelector("tbody tr")||l.querySelector("tr"),d=t?t.querySelectorAll("th, td").length:1,s=document.createElement("colgroup"),r=Math.max(Math.floor((l.clientWidth||600)/d),100);for(let o=0;o<d;o++){const e=document.createElement("col");e.setAttribute("width",r),s.appendChild(e)}l.prepend(s)},"#ensureColgroup"),G=b(function(l){if(l.querySelector("thead"))return;const t=document.createElement("thead"),d=l.querySelector("colgroup");d?d.after(t):l.prepend(t)},"#ensureThead"),b(I,"TableInitializer");let S=I;const R=class R extends HTMLElement{constructor(){super();y(this,L);y(this,p,null);y(this,E);k(this,E,new S(this))}connectedCallback(){m(this,L,J).call(this)}init(t){if(!t)return;const d=t.cloneNode(!0);k(this,p,u(this,E).initializeTable(d)),u(this,p).style.display="table";const s=this.querySelector(".ng-container-left"),r=this.querySelector(".ng-container-body"),o=this.querySelector(".ng-container-right");if(r){const e=u(this,p).cloneNode(!0);e.querySelectorAll('[fixed="left"], [fixed="right"]').forEach(a=>a.remove()),r.innerHTML="",r.appendChild(e)}if(s){const e=u(this,p).cloneNode(!0);e.querySelectorAll("col, th, td").forEach(h=>{h.getAttribute("fixed")!=="left"&&h.remove()}),e.querySelectorAll("tbody tr").forEach(h=>h.remove());let a=0;e.querySelectorAll("col").forEach(h=>{a+=parseInt(h.getAttribute("width")||0,10)}),s.innerHTML="",s.appendChild(e),a>0&&(s.style.width=`${a}px`,s.style.minWidth=`${a}px`)}if(o){const e=u(this,p).cloneNode(!0);e.querySelectorAll("col, th, td").forEach(h=>{h.getAttribute("fixed")!=="right"&&h.remove()}),e.querySelectorAll("tbody tr").forEach(h=>h.remove());let a=0;e.querySelectorAll("col").forEach(h=>{a+=parseInt(h.getAttribute("width")||0,10)}),o.innerHTML="",o.appendChild(e),a>0&&(o.style.width=`${a}px`,o.style.minWidth=`${a}px`)}c.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`)}getRowCount(){return u(this,p)?u(this,p).querySelectorAll("tbody tr").length:0}disconnectedCallback(){this.innerHTML="",c.log("NineTableSheet destroyed.")}};p=new WeakMap,E=new WeakMap,L=new WeakSet,J=b(function(){this.innerHTML=`
1
+ (function(i,t){typeof exports=="object"&&typeof module<"u"?t(require("@ninebone/util")):typeof define=="function"&&define.amd?define(["@ninebone/util"],t):(i=typeof globalThis<"u"?globalThis:i||self,t(i.NineboneUtil))})(this,function(i){"use strict";var K=Object.defineProperty;var U=i=>{throw TypeError(i)};var F=(i,t,a)=>t in i?K(i,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[t]=a;var d=(i,t)=>K(i,"name",{value:t,configurable:!0});var v=(i,t,a)=>F(i,typeof t!="symbol"?t+"":t,a),D=(i,t,a)=>t.has(i)||U("Cannot "+a);var c=(i,t,a)=>(D(i,t,"read from private field"),a?a.call(i):t.get(i)),u=(i,t,a)=>t.has(i)?U("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,a),H=(i,t,a,m)=>(D(i,t,"write to private field"),m?m.call(i,a):t.set(i,a),a);var p,k,E,A,C,L,w,T,y,$,S;const N=class N extends i.trace.constructor{constructor(){super(),this.init("nine-table","green")}};d(N,"Trace");let t=N;const a=new t,R=class R extends HTMLElement{constructor(){super();u(this,p,null);v(this,"connectedCallback",d(()=>{c(this,C).call(this)},"connectedCallback"));v(this,"init",d(e=>{if(!e)return;const f=e.cloneNode(!0);H(this,p,c(this,k).call(this,f)),c(this,p).style.display="table";const o=this.querySelector(".ng-container-left"),s=this.querySelector(".ng-container-body"),l=this.querySelector(".ng-container-right");if(s){const n=c(this,p).cloneNode(!0);n.querySelectorAll('[fixed="left"], [fixed="right"]').forEach(r=>r.remove()),s.innerHTML="",s.appendChild(n)}if(o){const n=c(this,p).cloneNode(!0);n.querySelectorAll("col, th, td").forEach(h=>{h.getAttribute("fixed")!=="left"&&h.remove()}),n.querySelectorAll("tbody tr").forEach(h=>h.remove());let r=0;n.querySelectorAll("col").forEach(h=>{r+=parseInt(h.getAttribute("width")||0,10)}),o.innerHTML="",o.appendChild(n),r>0&&(o.style.width=`${r}px`,o.style.minWidth=`${r}px`)}if(l){const n=c(this,p).cloneNode(!0);n.querySelectorAll("col, th, td").forEach(h=>{h.getAttribute("fixed")!=="right"&&h.remove()}),n.querySelectorAll("tbody tr").forEach(h=>h.remove());let r=0;n.querySelectorAll("col").forEach(h=>{r+=parseInt(h.getAttribute("width")||0,10)}),l.innerHTML="",l.appendChild(n),r>0&&(l.style.width=`${r}px`,l.style.minWidth=`${r}px`)}a.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`)},"init"));v(this,"getRowCount",d(()=>c(this,p)?c(this,p).querySelectorAll("tbody tr").length:0,"getRowCount"));u(this,k,d(e=>(c(this,E).call(this,e),c(this,A).call(this,e),e.classList.add("nine-table-element"),e),"#initializeTable"));u(this,E,d(e=>{if(e.querySelector("colgroup"))return;const f=e.querySelector("tbody tr")||e.querySelector("tr"),o=f?f.querySelectorAll("th, td").length:1,s=document.createElement("colgroup"),l=Math.max(Math.floor((e.clientWidth||600)/o),100);for(let n=0;n<o;n++){const r=document.createElement("col");r.setAttribute("width",l),s.appendChild(r)}e.prepend(s)},"#ensureColgroup"));u(this,A,d(e=>{if(e.querySelector("thead"))return;const f=document.createElement("thead"),o=e.querySelector("colgroup");o?o.after(f):e.prepend(f)},"#ensureThead"));u(this,C,d(()=>{this.innerHTML=`
2
2
  <style>
3
3
  nine-table-sheet {
4
4
  display: flex;
@@ -96,7 +96,7 @@
96
96
  <nine-table-hscrollbar></nine-table-hscrollbar>
97
97
  <div class='ng-scroll-edge'></div>
98
98
  </div>
99
- `},"#render"),b(R,"NineTableSheet");let $=R;customElements.get("nine-table-sheet")||customElements.define("nine-table-sheet",$);const W=class W extends HTMLElement{constructor(){super();y(this,x)}connectedCallback(){m(this,x,O).call(this)}};x=new WeakSet,O=b(function(){const t=this.querySelector(".nine-tab-bar");t&&(t.addEventListener("click",d=>{const s=d.target.closest(".nine-tab-item");if(!s)return;const r=d.ctrlKey||d.metaKey||d.shiftKey,o=parseInt(s.dataset.index,10);m(this,x,U).call(this,o,r)}),m(this,x,U).call(this,0,!1))},"#init"),U=b(function(t,d=!1){const s=this.querySelector(".nine-tab-bar"),r=this.querySelector("nine-table-sheets-body"),o=s.querySelectorAll(".nine-tab-item"),e=r.querySelectorAll("nine-table-sheet");if(!o[t])return;if(!d)o.forEach((f,g)=>{f.classList.toggle("active",g===t);const w=r.querySelector(`nine-table-sheet[data-index="${g}"]`);w&&(w.style.flex="")}),e.forEach((f,g)=>{f.classList.toggle("active",g===t)});else{const f=o[t],g=s.querySelectorAll(".nine-tab-item.active");if(f.classList.contains("active")&&g.length<=1)return;f.classList.toggle("active");const w=r.querySelector(`nine-table-sheet[data-index="${t}"]`);w&&(w.classList.toggle("active"),w.classList.contains("active")||(w.style.flex=""))}const a=Array.from(r.querySelectorAll("nine-table-sheet.active"));if(a.length>1){const f=1/a.length;a.forEach(g=>{(!g.style.flex||g.style.flex==="1 1 100%")&&(g.style.flex=`${f} ${f} 0px`)})}else a.forEach(f=>{f.style.flex="1 1 100%"});m(this,x,P).call(this);const h=r.querySelector("nine-table-sheet.active");if(h&&typeof h.getRowCount=="function"){const f=this.querySelector("#row-count");f&&(f.textContent=h.getRowCount().toLocaleString())}},"#switchSheet"),P=b(function(){const t=this.querySelector("nine-table-sheets-body");t.querySelectorAll("nine-splitter").forEach(s=>{const r=parseInt(s.dataset.splitIndex,10),o=t.querySelector(`nine-table-sheet[data-index="${r-1}"]`),e=t.querySelector(`nine-table-sheet[data-index="${r}"]`);o&&e&&o.classList.contains("active")&&e.classList.contains("active")?s.classList.add("active"):s.classList.remove("active")})},"#updateSplitters"),b(W,"NineTableSheets");let H=W;customElements.get("nine-table-sheets")||customElements.define("nine-table-sheets",H);const j=class j{constructor(l){y(this,T);y(this,v);k(this,v,l),m(this,T,Q).call(this)}};v=new WeakMap,T=new WeakSet,Q=b(function(){const t=Array.from(u(this,v).host.children).filter(o=>o.tagName==="TABLE"),d=t.map((o,e)=>`<nine-table-sheet class="${e===0?"active":""}" data-index="${e}"></nine-table-sheet>`).join(""),s=t.map((o,e)=>`<div class="nine-tab-item ${e===0?"active":""}" data-index="${e}">Sheet ${e+1}</div>`).join("");u(this,v).innerHTML=`
99
+ `},"#render"));v(this,"disconnectedCallback",d(()=>{this.innerHTML="",a.log("NineTableSheet destroyed.")},"disconnectedCallback"))}};p=new WeakMap,k=new WeakMap,E=new WeakMap,A=new WeakMap,C=new WeakMap,d(R,"NineTableSheet");let m=R;customElements.get("nine-table-sheet")||customElements.define("nine-table-sheet",m);const W=class W extends HTMLElement{constructor(){super();v(this,"connectedCallback",d(()=>{c(this,L).call(this)},"connectedCallback"));u(this,L,d(()=>{const e=this.querySelector(".nine-tab-bar");e&&(e.addEventListener("click",f=>{const o=f.target.closest(".nine-tab-item");if(!o)return;const s=f.ctrlKey||f.metaKey||f.shiftKey,l=parseInt(o.dataset.index,10);c(this,w).call(this,l,s)}),c(this,w).call(this,0,!1))},"#init"));u(this,w,d((e,f=!1)=>{const o=this.querySelector(".nine-tab-bar"),s=this.querySelector("nine-table-sheets-body"),l=o.querySelectorAll(".nine-tab-item"),n=s.querySelectorAll("nine-table-sheet");if(!l[e])return;if(!f)l.forEach((b,g)=>{b.classList.toggle("active",g===e);const x=s.querySelector(`nine-table-sheet[data-index="${g}"]`);x&&(x.style.flex="")}),n.forEach((b,g)=>{b.classList.toggle("active",g===e)});else{const b=l[e],g=o.querySelectorAll(".nine-tab-item.active");if(b.classList.contains("active")&&g.length<=1)return;b.classList.toggle("active");const x=s.querySelector(`nine-table-sheet[data-index="${e}"]`);x&&(x.classList.toggle("active"),x.classList.contains("active")||(x.style.flex=""))}const r=Array.from(s.querySelectorAll("nine-table-sheet.active"));if(r.length>1){const b=1/r.length;r.forEach(g=>{(!g.style.flex||g.style.flex==="1 1 100%")&&(g.style.flex=`${b} ${b} 0px`)})}else r.forEach(b=>{b.style.flex="1 1 100%"});c(this,T).call(this);const h=s.querySelector("nine-table-sheet.active");if(h&&typeof h.getRowCount=="function"){const b=this.querySelector("#row-count");b&&(b.textContent=h.getRowCount().toLocaleString())}},"#switchSheet"));u(this,T,d(()=>{const e=this.querySelector("nine-table-sheets-body");e.querySelectorAll("nine-splitter").forEach(o=>{const s=parseInt(o.dataset.splitIndex,10),l=e.querySelector(`nine-table-sheet[data-index="${s-1}"]`),n=e.querySelector(`nine-table-sheet[data-index="${s}"]`);l&&n&&l.classList.contains("active")&&n.classList.contains("active")?o.classList.add("active"):o.classList.remove("active")})},"#updateSplitters"))}};L=new WeakMap,w=new WeakMap,T=new WeakMap,d(W,"NineTableSheets");let M=W;customElements.get("nine-table-sheets")||customElements.define("nine-table-sheets",M);const j=class j{constructor(q){u(this,y);u(this,$,d(()=>{const e=Array.from(c(this,y).host.children).filter(l=>l.tagName==="TABLE"),f=e.map((l,n)=>`<nine-table-sheet class="${n===0?"active":""}" data-index="${n}"></nine-table-sheet>`).join(""),o=e.map((l,n)=>`<div class="nine-tab-item ${n===0?"active":""}" data-index="${n}">Sheet ${n+1}</div>`).join("");c(this,y).innerHTML=`
100
100
  <style>
101
101
  :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }
102
102
  nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }
@@ -177,14 +177,14 @@
177
177
  <nine-table-body>
178
178
  <nine-table-summary></nine-table-summary>
179
179
  <nine-table-sheets>
180
- <nine-table-sheets-body>${d}</nine-table-sheets-body>
180
+ <nine-table-sheets-body>${f}</nine-table-sheets-body>
181
181
  <nine-table-sheets-footer>
182
- <div class="nine-tab-bar">${s}</div>
182
+ <div class="nine-tab-bar">${o}</div>
183
183
  <div class="sheets-counter">Total : <span id="row-count">0</span></div>
184
184
  </nine-table-sheets-footer>
185
185
  </nine-table-sheets>
186
186
  <nine-table-analysis></nine-table-analysis>
187
187
  </nine-table-body>
188
188
  <nine-table-footer></nine-table-footer>
189
- `;const r=u(this,v).querySelectorAll("nine-table-sheet");r==null||r.forEach((o,e)=>{t[e]&&o.init(t[e])})},"#render"),b(j,"LayoutManager");let M=j;const B=class B extends HTMLElement{constructor(){super();y(this,A,!1);this.attachShadow({mode:"open"})}connectedCallback(){u(this,A)||(this.layoutManager=new M(this.shadowRoot),k(this,A,!0),c.log("NineTable connected."),this.dispatchEvent(new CustomEvent("load",{bubbles:!0,detail:{target:this}})))}disconnectedCallback(){c.log("NineTable disconnected.")}};A=new WeakMap,b(B,"NineTable");let z=B;customElements.get("nine-table")||customElements.define("nine-table",z)});
189
+ `;const s=c(this,y).querySelectorAll("nine-table-sheet");s==null||s.forEach((l,n)=>{e[n]&&l.init(e[n])})},"#render"));H(this,y,q),c(this,$).call(this)}};y=new WeakMap,$=new WeakMap,d(j,"LayoutManager");let z=j;const B=class B extends HTMLElement{constructor(){super();u(this,S,!1);this.attachShadow({mode:"open"})}connectedCallback(){c(this,S)||(this.layoutManager=new z(this.shadowRoot),H(this,S,!0),a.log("NineTable connected."),this.dispatchEvent(new CustomEvent("load",{bubbles:!0,detail:{target:this}})))}disconnectedCallback(){a.log("NineTable disconnected.")}};S=new WeakMap,d(B,"NineTable");let I=B;customElements.get("nine-table")||customElements.define("nine-table",I)});
190
190
  //# 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 /**\n * [Public] 테이블 초기화 진입점\n * @param {HTMLTableElement} tbl\n * @returns {HTMLTableElement}\n */\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 /**\n * [Private] colgroup 및 col 태그 유무 확인 후 보정\n */\n #ensureColgroup(tbl) {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n }\n\n /**\n * [Private] thead 태그 유무 확인 후 보정\n */\n #ensureThead(tbl) {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n }\n}","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 init(tableEl) {\n if (!tableEl) return;\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = this.#initializer.initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const leftContainer = this.querySelector('.ng-container-left');\n const bodyContainer = this.querySelector('.ng-container-body');\n const rightContainer = this.querySelector('.ng-container-right');\n\n // 1. 메인 바디 영역 (좌우 고정 컬럼 제외)\n if (bodyContainer) {\n const bodyTable = this.#tableElement.cloneNode(true);\n bodyTable.querySelectorAll('[fixed=\"left\"], [fixed=\"right\"]').forEach(el => el.remove());\n bodyContainer.innerHTML = '';\n bodyContainer.appendChild(bodyTable);\n }\n\n // 2. 좌측 고정 영역 및 너비 계산\n if (leftContainer) {\n const leftTable = this.#tableElement.cloneNode(true);\n leftTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'left') el.remove();\n });\n leftTable.querySelectorAll('tbody tr').forEach(tr => tr.remove());\n\n let leftWidth = 0;\n leftTable.querySelectorAll('col').forEach(col => {\n leftWidth += parseInt(col.getAttribute('width') || 0, 10);\n });\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n\n if (leftWidth > 0) {\n leftContainer.style.width = `${leftWidth}px`;\n leftContainer.style.minWidth = `${leftWidth}px`;\n }\n }\n\n // 3. 우측 고정 영역 및 너비 계산\n if (rightContainer) {\n const rightTable = this.#tableElement.cloneNode(true);\n rightTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'right') el.remove();\n });\n rightTable.querySelectorAll('tbody tr').forEach(tr => tr.remove());\n\n let rightWidth = 0;\n rightTable.querySelectorAll('col').forEach(col => {\n rightWidth += parseInt(col.getAttribute('width') || 0, 10);\n });\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n\n if (rightWidth > 0) {\n rightContainer.style.width = `${rightWidth}px`;\n rightContainer.style.minWidth = `${rightWidth}px`;\n }\n }\n\n trace.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);\n }\n\n getRowCount() {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n }\n\n #render() {\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n overflow: hidden;\n }\n\n nine-table-sheet .ng-container-top {\n display: flex;\n flex-direction: row;\n flex: 1;\n width: 100%;\n overflow: hidden;\n position: relative;\n }\n\n nine-table-sheet .ng-container-left {\n flex-shrink: 0;\n overflow: hidden;\n background: #ffffff;\n border-right: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .ng-container-body {\n flex: 1;\n overflow: auto;\n background: #ffffff;\n position: relative;\n }\n\n nine-table-sheet .ng-container-right {\n flex-shrink: 0;\n overflow: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .ng-container-bottom {\n display: flex;\n flex-direction: row;\n height: 16px;\n flex-shrink: 0;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n }\n\n nine-table-sheet nine-table-hscrollbar {\n flex: 1;\n overflow: hidden;\n display: block;\n }\n\n nine-table-sheet .ng-scroll-edge {\n width: 16px;\n flex-shrink: 0;\n background: #f3f4f6;\n }\n\n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n\n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n\n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class='ng-container-top'>\n <div class='ng-container-left'></div>\n <div class='ng-container-body'></div>\n <div class='ng-container-right'></div>\n <nine-table-vscrollbar></nine-table-vscrollbar>\n </div>\n <div class='ng-container-bottom'>\n <nine-table-hscrollbar></nine-table-hscrollbar>\n <div class='ng-scroll-edge'></div>\n </div>\n `;\n }\n\n disconnectedCallback() {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n }\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#init();\n }\n\n #init() {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.#switchSheet(index, isMultiSelect);\n });\n\n this.#switchSheet(0, false);\n }\n\n #switchSheet(index, isMultiSelect = false) {\n 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 const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n }\n\n #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\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","import './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n }\n\n #render() {\n const rawElements = Array.from(this.#root.host.children);\n const rawTables = rawElements.filter(el => el.tagName === 'TABLE');\n\n const sheetsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<nine-table-sheet class=\"${className}\" data-index=\"${idx}\"></nine-table-sheet>`;\n }).join('');\n\n const tabsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<div class=\"nine-tab-item ${className}\" data-index=\"${idx}\">Sheet ${idx + 1}</div>`;\n }).join('');\n\n this.#root.innerHTML = `\n <style>\n :host { 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\n nine-table-sheets {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n background: #fff;\n }\n nine-table-sheets-body {\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n flex-direction: row;\n }\n nine-table-sheet {\n display: none !important;\n height: 100%;\n overflow: auto;\n flex: 1 1 100%;\n }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-footer {\n display: flex;\n height: 32px;\n background: #f3f4f6;\n border-top: 1px solid #e5e7eb;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n flex-shrink: 0;\n }\n nine-table-sheets .nine-tab-bar {\n display: flex;\n align-items: center;\n gap: 2px;\n overflow-x: auto;\n flex: 1;\n height: 100%;\n }\n nine-table-sheets .nine-tab-item {\n padding: 4px 12px;\n cursor: pointer;\n font-size: 12px;\n color: #4b5563;\n background: #e5e7eb;\n border: 1px solid #d1d5db;\n border-top: none;\n border-radius: 0 0 3px 3px;\n user-select: none;\n }\n nine-table-sheets .nine-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n nine-table-sheets .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-table-sheets>\n <nine-table-sheets-body>${sheetsHtml}</nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\">${tabsHtml}</div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n </nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n\n const $sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n $sheetElements?.forEach(($el, idx) => {\n if (rawTables[idx]) {\n $el.init(rawTables[idx]);\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","firstRow","colCount","colgroup","defaultWidth","i","col","thead","TableInitializer","_NineTableSheet","_NineTableSheet_instances","_tableElement","_initializer","render_fn","tableEl","clonedTable","__privateGet","leftContainer","bodyContainer","rightContainer","bodyTable","el","leftTable","tr","leftWidth","rightTable","rightWidth","NineTableSheet","_NineTableSheets","_NineTableSheets_instances","init_fn","tabBar","e","tabItem","isMultiSelect","index","switchSheet_fn","body","tabItems","sheetElements","tab","idx","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","updateSplitters_fn","activeSheet","rowCountEl","splitter","splitIndex","leftSheet","rightSheet","NineTableSheets","_LayoutManager","shadowRoot","_LayoutManager_instances","_root","rawTables","sheetsHtml","_","tabsHtml","$sheetElements","$el","LayoutManager","_NineTable","_created","NineTable"],"mappings":"suBAEO,MAAMA,EAAN,MAAMA,UAAcC,EAAAA,MAAY,WAAY,CAC/C,aAAc,CACV,MAAK,EACL,KAAK,KAAK,aAAc,OAAO,CACnC,CACJ,EALmDC,EAAAF,EAAA,SAA5C,IAAMG,EAANH,EAOA,MAAMI,EAAQ,IAAID,ECTZE,EAAN,MAAMA,CAAiB,CAG1B,YAAYC,EAAW,CAHpBC,EAAA,KAAAC,GACHD,EAAA,KAAAE,GAGIC,EAAA,KAAKD,EAAaH,EACtB,CAOA,gBAAgBK,EAAK,CACjB,OAAAC,EAAA,KAAKJ,EAAAK,GAAL,UAAqBF,GACrBC,EAAA,KAAKJ,EAAAM,GAAL,UAAkBH,GAElBA,EAAI,UAAU,IAAI,oBAAoB,EAC/BA,CACX,CAqCJ,EAtDIF,EAAA,YADGD,EAAA,YAuBHK,EAAeX,EAAA,SAACS,EAAK,CACjB,GAAIA,EAAI,cAAc,UAAU,EAAG,OAEnC,MAAMI,EAAWJ,EAAI,cAAc,UAAU,GAAKA,EAAI,cAAc,IAAI,EAClEK,EAAWD,EAAWA,EAAS,iBAAiB,QAAQ,EAAE,OAAS,EAEnEE,EAAW,SAAS,cAAc,UAAU,EAC5CC,EAAe,KAAK,IAAI,KAAK,OAAOP,EAAI,aAAe,KAAOK,CAAQ,EAAG,GAAG,EAElF,QAASG,EAAI,EAAGA,EAAIH,EAAUG,IAAK,CAC/B,MAAMC,EAAM,SAAS,cAAc,KAAK,EACxCA,EAAI,aAAa,QAASF,CAAY,EACtCD,EAAS,YAAYG,CAAG,CAC5B,CACAT,EAAI,QAAQM,CAAQ,CACxB,EAfe,mBAoBfH,EAAYZ,EAAA,SAACS,EAAK,CACd,GAAIA,EAAI,cAAc,OAAO,EAAG,OAEhC,MAAMU,EAAQ,SAAS,cAAc,OAAO,EACtCJ,EAAWN,EAAI,cAAc,UAAU,EAEzCM,EACAA,EAAS,MAAMI,CAAK,EAEpBV,EAAI,QAAQU,CAAK,CAEzB,EAXY,gBA3CcnB,EAAAG,EAAA,oBAAvB,IAAMiB,EAANjB,ECGA,MAAMkB,EAAN,MAAMA,UAAuB,WAAY,CAI5C,aAAc,CACV,MAAK,EALNhB,EAAA,KAAAiB,GACHjB,EAAA,KAAAkB,EAAgB,MAChBlB,EAAA,KAAAmB,GAIIhB,EAAA,KAAKgB,EAAe,IAAIJ,EAAiB,IAAI,EACjD,CAEA,mBAAoB,CAChBV,EAAA,KAAKY,EAAAG,GAAL,UACJ,CAEA,KAAKC,EAAS,CACV,GAAI,CAACA,EAAS,OAEd,MAAMC,EAAcD,EAAQ,UAAU,EAAI,EAC1ClB,EAAA,KAAKe,EAAgBK,EAAA,KAAKJ,GAAa,gBAAgBG,CAAW,GAClEC,EAAA,KAAKL,GAAc,MAAM,QAAU,QAEnC,MAAMM,EAAgB,KAAK,cAAc,oBAAoB,EACvDC,EAAgB,KAAK,cAAc,oBAAoB,EACvDC,EAAiB,KAAK,cAAc,qBAAqB,EAG/D,GAAID,EAAe,CACf,MAAME,EAAYJ,EAAA,KAAKL,GAAc,UAAU,EAAI,EACnDS,EAAU,iBAAiB,iCAAiC,EAAE,QAAQC,GAAMA,EAAG,QAAQ,EACvFH,EAAc,UAAY,GAC1BA,EAAc,YAAYE,CAAS,CACvC,CAGA,GAAIH,EAAe,CACf,MAAMK,EAAYN,EAAA,KAAKL,GAAc,UAAU,EAAI,EACnDW,EAAU,iBAAiB,aAAa,EAAE,QAAQD,GAAM,CAChDA,EAAG,aAAa,OAAO,IAAM,QAAQA,EAAG,OAAM,CACtD,CAAC,EACDC,EAAU,iBAAiB,UAAU,EAAE,QAAQC,GAAMA,EAAG,QAAQ,EAEhE,IAAIC,EAAY,EAChBF,EAAU,iBAAiB,KAAK,EAAE,QAAQhB,GAAO,CAC7CkB,GAAa,SAASlB,EAAI,aAAa,OAAO,GAAK,EAAG,EAAE,CAC5D,CAAC,EAEDW,EAAc,UAAY,GAC1BA,EAAc,YAAYK,CAAS,EAE/BE,EAAY,IACZP,EAAc,MAAM,MAAQ,GAAGO,CAAS,KACxCP,EAAc,MAAM,SAAW,GAAGO,CAAS,KAEnD,CAGA,GAAIL,EAAgB,CAChB,MAAMM,EAAaT,EAAA,KAAKL,GAAc,UAAU,EAAI,EACpDc,EAAW,iBAAiB,aAAa,EAAE,QAAQJ,GAAM,CACjDA,EAAG,aAAa,OAAO,IAAM,SAASA,EAAG,OAAM,CACvD,CAAC,EACDI,EAAW,iBAAiB,UAAU,EAAE,QAAQF,GAAMA,EAAG,QAAQ,EAEjE,IAAIG,EAAa,EACjBD,EAAW,iBAAiB,KAAK,EAAE,QAAQnB,GAAO,CAC9CoB,GAAc,SAASpB,EAAI,aAAa,OAAO,GAAK,EAAG,EAAE,CAC7D,CAAC,EAEDa,EAAe,UAAY,GAC3BA,EAAe,YAAYM,CAAU,EAEjCC,EAAa,IACbP,EAAe,MAAM,MAAQ,GAAGO,CAAU,KAC1CP,EAAe,MAAM,SAAW,GAAGO,CAAU,KAErD,CAEApC,EAAM,IAAI,iDAAiD,KAAK,YAAW,CAAE,EAAE,CACnF,CAEA,aAAc,CACV,OAAK0B,EAAA,KAAKL,GACHK,EAAA,KAAKL,GAAc,iBAAiB,UAAU,EAAE,OADvB,CAEpC,CAwGA,sBAAuB,CACnB,KAAK,UAAY,GACjBrB,EAAM,IAAI,2BAA2B,CACzC,CACJ,EA7LIqB,EAAA,YACAC,EAAA,YAFGF,EAAA,YAoFHG,EAAOzB,EAAA,UAAG,CACN,KAAK,UAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAmGrB,EApGO,WApFqCA,EAAAqB,EAAA,kBAAzC,IAAMkB,EAANlB,EAgMF,eAAe,IAAI,kBAAkB,GACtC,eAAe,OAAO,mBAAoBkB,CAAc,EClMrD,MAAMC,EAAN,MAAMA,UAAwB,WAAY,CAC7C,aAAc,CACV,MAAK,EAFNnC,EAAA,KAAAoC,EAGH,CAEA,mBAAoB,CAChB/B,EAAA,KAAK+B,EAAAC,GAAL,UACJ,CA6FJ,EApGOD,EAAA,YASHC,EAAK1C,EAAA,UAAG,CACJ,MAAM2C,EAAS,KAAK,cAAc,eAAe,EAC5CA,IAELA,EAAO,iBAAiB,QAAUC,GAAM,CACpC,MAAMC,EAAUD,EAAE,OAAO,QAAQ,gBAAgB,EACjD,GAAI,CAACC,EAAS,OAEd,MAAMC,EAAgBF,EAAE,SAAWA,EAAE,SAAWA,EAAE,SAC5CG,EAAQ,SAASF,EAAQ,QAAQ,MAAO,EAAE,EAChDnC,EAAA,KAAK+B,EAAAO,GAAL,UAAkBD,EAAOD,EAC7B,CAAC,EAEDpC,EAAA,KAAK+B,EAAAO,GAAL,UAAkB,EAAG,IACzB,EAdK,SAgBLA,EAAYhD,EAAA,SAAC+C,EAAOD,EAAgB,GAAO,CACvC,MAAMH,EAAS,KAAK,cAAc,eAAe,EAC3CM,EAAO,KAAK,cAAc,wBAAwB,EAClDC,EAAWP,EAAO,iBAAiB,gBAAgB,EACnDQ,EAAgBF,EAAK,iBAAiB,kBAAkB,EAE9D,GAAI,CAACC,EAASH,CAAK,EAAG,OAEtB,GAAI,CAACD,EACDI,EAAS,QAAQ,CAACE,EAAKC,IAAQ,CAC3BD,EAAI,UAAU,OAAO,SAAUC,IAAQN,CAAK,EAC5C,MAAMO,EAAQL,EAAK,cAAc,gCAAgCI,CAAG,IAAI,EACpEC,IAAOA,EAAM,MAAM,KAAO,GAClC,CAAC,EACDH,EAAc,QAAQ,CAACG,EAAOD,IAAQ,CAClCC,EAAM,UAAU,OAAO,SAAUD,IAAQN,CAAK,CAClD,CAAC,MACE,CACH,MAAMQ,EAAaL,EAASH,CAAK,EAC3BS,EAAab,EAAO,iBAAiB,uBAAuB,EAElE,GAAIY,EAAW,UAAU,SAAS,QAAQ,GAAKC,EAAW,QAAU,EAChE,OAGJD,EAAW,UAAU,OAAO,QAAQ,EACpC,MAAME,EAAcR,EAAK,cAAc,gCAAgCF,CAAK,IAAI,EAC5EU,IACAA,EAAY,UAAU,OAAO,QAAQ,EAChCA,EAAY,UAAU,SAAS,QAAQ,IACxCA,EAAY,MAAM,KAAO,IAGrC,CAEA,MAAMC,EAAe,MAAM,KAAKT,EAAK,iBAAiB,yBAAyB,CAAC,EAChF,GAAIS,EAAa,OAAS,EAAG,CACzB,MAAMC,EAAgB,EAAID,EAAa,OACvCA,EAAa,QAAQJ,GAAS,EACtB,CAACA,EAAM,MAAM,MAAQA,EAAM,MAAM,OAAS,cAC1CA,EAAM,MAAM,KAAO,GAAGK,CAAY,IAAIA,CAAY,OAE1D,CAAC,CACL,MACID,EAAa,QAAQJ,GAAS,CAC1BA,EAAM,MAAM,KAAO,UACvB,CAAC,EAGL5C,EAAA,KAAK+B,EAAAmB,GAAL,WAEA,MAAMC,EAAcZ,EAAK,cAAc,yBAAyB,EAChE,GAAIY,GAAe,OAAOA,EAAY,aAAgB,WAAY,CAC9D,MAAMC,EAAa,KAAK,cAAc,YAAY,EAC9CA,IACAA,EAAW,YAAcD,EAAY,YAAW,EAAG,eAAc,EAEzE,CACJ,EA1DY,gBA4DZD,EAAgB5D,EAAA,UAAG,CACf,MAAMiD,EAAO,KAAK,cAAc,wBAAwB,EACtCA,EAAK,iBAAiB,eAAe,EAC7C,QAAQc,GAAY,CAC1B,MAAMC,EAAa,SAASD,EAAS,QAAQ,WAAY,EAAE,EACrDE,EAAYhB,EAAK,cAAc,gCAAgCe,EAAa,CAAC,IAAI,EACjFE,EAAajB,EAAK,cAAc,gCAAgCe,CAAU,IAAI,EAEhFC,GAAaC,GAAcD,EAAU,UAAU,SAAS,QAAQ,GAAKC,EAAW,UAAU,SAAS,QAAQ,EAC3GH,EAAS,UAAU,IAAI,QAAQ,EAE/BA,EAAS,UAAU,OAAO,QAAQ,CAE1C,CAAC,CACL,EAdgB,oBArF6B/D,EAAAwC,EAAA,mBAA1C,IAAM2B,EAAN3B,EAsGF,eAAe,IAAI,mBAAmB,GACvC,eAAe,OAAO,oBAAqB2B,CAAe,ECvGvD,MAAMC,EAAN,MAAMA,CAAc,CAGvB,YAAYC,EAAY,CAHrBhE,EAAA,KAAAiE,GACHjE,EAAA,KAAAkE,GAGI/D,EAAA,KAAK+D,EAAQF,GACb3D,EAAA,KAAK4D,EAAA7C,GAAL,UACJ,CAoHJ,EAzHI8C,EAAA,YADGD,EAAA,YAQH7C,EAAOzB,EAAA,UAAG,CAEN,MAAMwE,EADc,MAAM,KAAK5C,EAAA,KAAK2C,GAAM,KAAK,QAAQ,EACzB,OAAOtC,GAAMA,EAAG,UAAY,OAAO,EAE3DwC,EAAaD,EAAU,IAAI,CAACE,EAAGrB,IAE1B,4BADWA,IAAQ,EAAI,SAAW,EACG,iBAAiBA,CAAG,uBACnE,EAAE,KAAK,EAAE,EAEJsB,EAAWH,EAAU,IAAI,CAACE,EAAGrB,IAExB,6BADWA,IAAQ,EAAI,SAAW,EACI,iBAAiBA,CAAG,WAAWA,EAAM,CAAC,QACtF,EAAE,KAAK,EAAE,EAEVzB,EAAA,KAAK2C,GAAM,UAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CAiFeE,CAAU;AAAA;AAAA,oDAEJE,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UASpD,MAAMC,EAAiBhD,EAAA,KAAK2C,GAAM,iBAAiB,kBAAkB,EAErEK,GAAA,MAAAA,EAAgB,QAAQ,CAACC,EAAKxB,IAAQ,CAC9BmB,EAAUnB,CAAG,GACbwB,EAAI,KAAKL,EAAUnB,CAAG,CAAC,CAE/B,EACJ,EAjHO,WARgBrD,EAAAoE,EAAA,iBAApB,IAAMU,EAANV,ECCQ,MAAMW,EAAN,MAAMA,UAAkB,WAAY,CAG/C,aAAc,CACV,MAAK,EAHT1E,EAAA,KAAA2E,EAAW,IAIP,KAAK,aAAa,CAAE,KAAM,MAAM,CAAE,CACtC,CAEA,mBAAoB,CACZpD,EAAA,KAAKoD,KAGT,KAAK,cAAgB,IAAIF,EAAc,KAAK,UAAU,EAGtDtE,EAAA,KAAKwE,EAAW,IAChB9E,EAAM,IAAI,sBAAsB,EAEhC,KAAK,cAAc,IAAI,YAAY,OAAQ,CAAE,QAAS,GAAM,OAAQ,CAAE,OAAQ,IAAI,CAAE,CAAE,CAAC,EAC3F,CAEA,sBAAuB,CACnBA,EAAM,IAAI,yBAAyB,CACvC,CACJ,EAvBI8E,EAAA,YAD+ChF,EAAA+E,EAAA,aAApC,IAAME,EAANF,EA0BV,eAAe,IAAI,YAAY,GAChC,eAAe,OAAO,aAAcE,CAAS"}
1
+ {"version":3,"file":"nine-table.umd.js","sources":["../src/external/NoPeer.js","../src/ui/nine-table-sheet.js","../src/ui/nine-table-sheets.js","../src/ui/LayoutManager.js","../src/core/nine-table.js"],"sourcesContent":["import { trace as traceOrigin } from '@ninebone/util';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-table\", \"green\");\n }\n}\n\nexport const trace = new Trace();","import { trace } from \"@nopeer\";\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n\n constructor() {\n super();\n }\n\n connectedCallback = () => {\n this.#render();\n };\n\n init = (tableEl) => {\n if (!tableEl) return;\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = this.#initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const leftContainer = this.querySelector('.ng-container-left');\n const bodyContainer = this.querySelector('.ng-container-body');\n const rightContainer = this.querySelector('.ng-container-right');\n\n // 1. 메인 바디 영역 (좌우 고정 컬럼 제외)\n if (bodyContainer) {\n const bodyTable = this.#tableElement.cloneNode(true);\n bodyTable.querySelectorAll('[fixed=\"left\"], [fixed=\"right\"]').forEach(el => el.remove());\n bodyContainer.innerHTML = '';\n bodyContainer.appendChild(bodyTable);\n }\n\n // 2. 좌측 고정 영역 및 너비 계산\n if (leftContainer) {\n const leftTable = this.#tableElement.cloneNode(true);\n leftTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'left') el.remove();\n });\n leftTable.querySelectorAll('tbody tr').forEach(tr => tr.remove());\n\n let leftWidth = 0;\n leftTable.querySelectorAll('col').forEach(col => {\n leftWidth += parseInt(col.getAttribute('width') || 0, 10);\n });\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n\n if (leftWidth > 0) {\n leftContainer.style.width = `${leftWidth}px`;\n leftContainer.style.minWidth = `${leftWidth}px`;\n }\n }\n\n // 3. 우측 고정 영역 및 너비 계산\n if (rightContainer) {\n const rightTable = this.#tableElement.cloneNode(true);\n rightTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'right') el.remove();\n });\n rightTable.querySelectorAll('tbody tr').forEach(tr => tr.remove());\n\n let rightWidth = 0;\n rightTable.querySelectorAll('col').forEach(col => {\n rightWidth += parseInt(col.getAttribute('width') || 0, 10);\n });\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n\n if (rightWidth > 0) {\n rightContainer.style.width = `${rightWidth}px`;\n rightContainer.style.minWidth = `${rightWidth}px`;\n }\n }\n\n trace.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);\n };\n\n getRowCount = () => {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n };\n\n #initializeTable = (tbl) => {\n this.#ensureColgroup(tbl);\n this.#ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n };\n\n #ensureColgroup = (tbl) => {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n };\n\n #ensureThead = (tbl) => {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n };\n\n #render = () => {\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n overflow: hidden;\n }\n\n nine-table-sheet .ng-container-top {\n display: flex;\n flex-direction: row;\n flex: 1;\n width: 100%;\n overflow: hidden;\n position: relative;\n }\n\n nine-table-sheet .ng-container-left {\n flex-shrink: 0;\n overflow: hidden;\n background: #ffffff;\n border-right: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .ng-container-body {\n flex: 1;\n overflow: auto;\n background: #ffffff;\n position: relative;\n }\n\n nine-table-sheet .ng-container-right {\n flex-shrink: 0;\n overflow: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .ng-container-bottom {\n display: flex;\n flex-direction: row;\n height: 16px;\n flex-shrink: 0;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n }\n\n nine-table-sheet nine-table-hscrollbar {\n flex: 1;\n overflow: hidden;\n display: block;\n }\n\n nine-table-sheet .ng-scroll-edge {\n width: 16px;\n flex-shrink: 0;\n background: #f3f4f6;\n }\n\n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n\n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n\n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class='ng-container-top'>\n <div class='ng-container-left'></div>\n <div class='ng-container-body'></div>\n <div class='ng-container-right'></div>\n <nine-table-vscrollbar></nine-table-vscrollbar>\n </div>\n <div class='ng-container-bottom'>\n <nine-table-hscrollbar></nine-table-hscrollbar>\n <div class='ng-scroll-edge'></div>\n </div>\n `;\n };\n\n disconnectedCallback = () => {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n };\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback = () => {\n this.#init();\n };\n\n #init = () => {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.#switchSheet(index, isMultiSelect);\n });\n\n this.#switchSheet(0, false);\n };\n\n #switchSheet = (index, isMultiSelect = false) => {\n 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 const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n };\n\n #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\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","import './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n }\n\n #render = () => {\n const rawElements = Array.from(this.#root.host.children);\n const rawTables = rawElements.filter(el => el.tagName === 'TABLE');\n\n const sheetsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<nine-table-sheet class=\"${className}\" data-index=\"${idx}\"></nine-table-sheet>`;\n }).join('');\n\n const tabsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<div class=\"nine-tab-item ${className}\" data-index=\"${idx}\">Sheet ${idx + 1}</div>`;\n }).join('');\n\n this.#root.innerHTML = `\n <style>\n :host { 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\n nine-table-sheets {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n background: #fff;\n }\n nine-table-sheets-body {\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n flex-direction: row;\n }\n nine-table-sheet {\n display: none !important;\n height: 100%;\n overflow: auto;\n flex: 1 1 100%;\n }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-footer {\n display: flex;\n height: 32px;\n background: #f3f4f6;\n border-top: 1px solid #e5e7eb;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n flex-shrink: 0;\n }\n nine-table-sheets .nine-tab-bar {\n display: flex;\n align-items: center;\n gap: 2px;\n overflow-x: auto;\n flex: 1;\n height: 100%;\n }\n nine-table-sheets .nine-tab-item {\n padding: 4px 12px;\n cursor: pointer;\n font-size: 12px;\n color: #4b5563;\n background: #e5e7eb;\n border: 1px solid #d1d5db;\n border-top: none;\n border-radius: 0 0 3px 3px;\n user-select: none;\n }\n nine-table-sheets .nine-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n nine-table-sheets .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-table-sheets>\n <nine-table-sheets-body>${sheetsHtml}</nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\">${tabsHtml}</div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n </nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n\n const $sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n $sheetElements?.forEach(($el, idx) => {\n if (rawTables[idx]) {\n $el.init(rawTables[idx]);\n }\n });\n };\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot 하나만 넘겨서 내부에서 레이아웃 및 테이블 수집 처리\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_NineTableSheet","__privateAdd","_tableElement","__publicField","__privateGet","_render","tableEl","clonedTable","__privateSet","_initializeTable","leftContainer","bodyContainer","rightContainer","bodyTable","el","leftTable","tr","leftWidth","col","rightTable","rightWidth","tbl","_ensureColgroup","_ensureThead","firstRow","colCount","colgroup","defaultWidth","i","thead","NineTableSheet","_NineTableSheets","_init","tabBar","e","tabItem","isMultiSelect","index","_switchSheet","body","tabItems","sheetElements","tab","idx","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","_updateSplitters","activeSheet","rowCountEl","splitter","splitIndex","leftSheet","rightSheet","NineTableSheets","_LayoutManager","shadowRoot","_root","rawTables","sheetsHtml","_","tabsHtml","$sheetElements","$el","LayoutManager","_NineTable","_created","NineTable"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ninebone/table",
3
- "version": "0.0.47",
3
+ "version": "0.0.49",
4
4
  "description": "Grid component for real-time collaboration (Vanilla JS based)",
5
5
  "type": "module",
6
6
  "main": "./dist/nine-table.umd.js",