@ninebone/table 0.0.59 → 0.0.61

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.
@@ -3,73 +3,77 @@ var D = (i) => {
3
3
  throw TypeError(i);
4
4
  };
5
5
  var G = (i, n, t) => n in i ? K(i, n, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[n] = t;
6
- var h = (i, n) => K(i, "name", { value: n, configurable: !0 });
6
+ var d = (i, n) => K(i, "name", { value: n, configurable: !0 });
7
7
  var k = (i, n, t) => G(i, typeof n != "symbol" ? n + "" : n, t), F = (i, n, t) => n.has(i) || D("Cannot " + t);
8
- var b = (i, n, t) => (F(i, n, "read from private field"), t ? t.call(i) : n.get(i)), g = (i, n, t) => n.has(i) ? D("Cannot add the same private member more than once") : n instanceof WeakSet ? n.add(i) : n.set(i, t), q = (i, n, t, u) => (F(i, n, "write to private field"), u ? u.call(i, t) : n.set(i, t), t);
8
+ var f = (i, n, t) => (F(i, n, "read from private field"), t ? t.call(i) : n.get(i)), y = (i, n, t) => n.has(i) ? D("Cannot add the same private member more than once") : n instanceof WeakSet ? n.add(i) : n.set(i, t), q = (i, n, t, b) => (F(i, n, "write to private field"), b ? b.call(i, t) : n.set(i, t), t);
9
9
  import { trace as J } from "@ninebone/util";
10
10
  const z = class z extends J.constructor {
11
11
  constructor() {
12
12
  super(), this.init("nine-table", "green");
13
13
  }
14
14
  };
15
- h(z, "Trace");
16
- let L = z;
17
- const E = new L();
18
- var p, $;
15
+ d(z, "Trace");
16
+ let $ = z;
17
+ const E = new $();
18
+ var p, L;
19
19
  const I = class I extends HTMLElement {
20
20
  constructor() {
21
21
  super();
22
- g(this, p, null);
23
- k(this, "init", /* @__PURE__ */ h((t) => {
22
+ y(this, p, null);
23
+ k(this, "init", /* @__PURE__ */ d((t) => {
24
24
  if (!t) return;
25
- const u = /* @__PURE__ */ h((s) => {
26
- const o = /* @__PURE__ */ h((e) => {
25
+ const b = /* @__PURE__ */ d((s) => {
26
+ const c = /* @__PURE__ */ d((e) => {
27
27
  if (e.querySelector("colgroup")) return;
28
- const c = e.querySelector("tbody tr") || e.querySelector("tr"), d = c ? c.querySelectorAll("th, td").length : 1, m = document.createElement("colgroup"), S = Math.max(Math.floor((e.clientWidth || 600) / d), 100);
29
- for (let v = 0; v < d; v++) {
28
+ const o = e.querySelector("tbody tr") || e.querySelector("tr"), a = o ? o.querySelectorAll("th, td").length : 1, m = document.createElement("colgroup"), S = Math.max(Math.floor((e.clientWidth || 600) / a), 100);
29
+ for (let v = 0; v < a; v++) {
30
30
  const j = document.createElement("col");
31
31
  j.setAttribute("width", S), m.appendChild(j);
32
32
  }
33
33
  e.prepend(m);
34
- }, "ensureColgroup"), f = /* @__PURE__ */ h((e) => {
34
+ }, "ensureColgroup"), u = /* @__PURE__ */ d((e) => {
35
35
  if (e.querySelector("thead")) return;
36
- const c = document.createElement("thead"), d = e.querySelector("colgroup");
37
- d ? d.after(c) : e.prepend(c);
36
+ const o = document.createElement("thead"), a = e.querySelector("colgroup");
37
+ a ? a.after(o) : e.prepend(o);
38
38
  }, "ensureThead");
39
- return o(s), f(s), s.classList.add("nine-table-element"), s;
40
- }, "initializeTable"), y = t.cloneNode(!0);
41
- q(this, p, u(y)), b(this, p).style.display = "table";
42
- const r = this.querySelector(".ng-container-left"), a = this.querySelector(".ng-container-body"), l = this.querySelector(".ng-container-right");
43
- if (a) {
44
- const s = b(this, p).cloneNode(!0);
45
- s.querySelectorAll('[fixed="left"], [fixed="right"]').forEach((o) => o.remove()), a.innerHTML = "", a.appendChild(s);
46
- }
39
+ return c(s), u(s), s.classList.add("nine-table-element"), s;
40
+ }, "initializeTable"), g = t.cloneNode(!0);
41
+ q(this, p, b(g)), f(this, p).style.display = "table";
42
+ const h = this.querySelector(".ng-container-left"), r = this.querySelector(".ng-container-body"), l = this.querySelector(".ng-container-right");
47
43
  if (r) {
48
- const s = b(this, p).cloneNode(!0);
49
- s.querySelectorAll("col, th, td").forEach((f) => {
50
- f.getAttribute("fixed") !== "left" && f.remove();
44
+ const s = f(this, p).cloneNode(!0);
45
+ s.querySelectorAll('[fixed="left"], [fixed="right"]').forEach((c) => c.remove()), r.innerHTML = "", r.appendChild(s);
46
+ }
47
+ if (h) {
48
+ const s = f(this, p).cloneNode(!0);
49
+ s.querySelectorAll("col, th, td").forEach((e) => {
50
+ e.getAttribute("fixed") !== "left" && e.remove();
51
51
  });
52
- let o = 0;
53
- s.querySelectorAll("col").forEach((f) => {
54
- const e = parseInt(f.getAttribute("width"), 10);
55
- isNaN(e) || (o += e);
56
- }), r.innerHTML = "", r.appendChild(s), o > 0 ? (r.style.display = "block", r.style.flex = `0 0 ${o}px`, r.style.width = `${o}px`, r.style.minWidth = `${o}px`, r.style.maxWidth = `${o}px`) : r.style.display = "none";
52
+ let c = 0;
53
+ s.querySelectorAll("col").forEach((e) => {
54
+ const o = parseInt(e.getAttribute("width"), 10);
55
+ isNaN(o) || (c += o);
56
+ }), h.innerHTML = "", h.appendChild(s);
57
+ const u = c > 0 ? c : 0;
58
+ h.style.flex = `0 0 ${u}px`, h.style.width = `${u}px`;
57
59
  }
58
60
  if (l) {
59
- const s = b(this, p).cloneNode(!0);
60
- s.querySelectorAll("col, th, td").forEach((f) => {
61
- f.getAttribute("fixed") !== "right" && f.remove();
61
+ const s = f(this, p).cloneNode(!0);
62
+ s.querySelectorAll("col, th, td").forEach((e) => {
63
+ e.getAttribute("fixed") !== "right" && e.remove();
62
64
  });
63
- let o = 0;
64
- s.querySelectorAll("col").forEach((f) => {
65
- const e = parseInt(f.getAttribute("width"), 10);
66
- isNaN(e) || (o += e);
67
- }), l.innerHTML = "", l.appendChild(s), o > 0 ? (l.style.display = "block", l.style.flex = `0 0 ${o}px`, l.style.width = `${o}px`, l.style.minWidth = `${o}px`, l.style.maxWidth = `${o}px`) : l.style.display = "none";
65
+ let c = 0;
66
+ s.querySelectorAll("col").forEach((e) => {
67
+ const o = parseInt(e.getAttribute("width"), 10);
68
+ isNaN(o) || (c += o);
69
+ }), l.innerHTML = "", l.appendChild(s);
70
+ const u = c > 0 ? c : 0;
71
+ l.style.flex = `0 0 ${u}px`, l.style.width = `${u}px`;
68
72
  }
69
73
  E.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);
70
74
  }, "init"));
71
- k(this, "getRowCount", /* @__PURE__ */ h(() => b(this, p) ? b(this, p).querySelectorAll("tbody tr").length : 0, "getRowCount"));
72
- g(this, $, /* @__PURE__ */ h(() => {
75
+ k(this, "getRowCount", /* @__PURE__ */ d(() => f(this, p) ? f(this, p).querySelectorAll("tbody tr").length : 0, "getRowCount"));
76
+ y(this, L, /* @__PURE__ */ d(() => {
73
77
  this.innerHTML = `
74
78
  <style>
75
79
  nine-table-sheet {
@@ -170,85 +174,85 @@ const I = class I extends HTMLElement {
170
174
  }, "#render"));
171
175
  }
172
176
  connectedCallback() {
173
- b(this, $).call(this);
177
+ f(this, L).call(this);
174
178
  }
175
179
  disconnectedCallback() {
176
180
  this.innerHTML = "", E.log("NineTableSheet destroyed.");
177
181
  }
178
182
  };
179
- p = new WeakMap(), $ = new WeakMap(), h(I, "NineTableSheet");
183
+ p = new WeakMap(), L = new WeakMap(), d(I, "NineTableSheet");
180
184
  let T = I;
181
185
  customElements.get("nine-table-sheet") || customElements.define("nine-table-sheet", T);
182
186
  var A;
183
- const W = class W extends HTMLElement {
187
+ const R = class R extends HTMLElement {
184
188
  constructor() {
185
189
  super();
186
- g(this, A, /* @__PURE__ */ h(() => {
190
+ y(this, A, /* @__PURE__ */ d(() => {
187
191
  const t = this.querySelector(".nine-tab-bar");
188
- t && (t.addEventListener("click", (u) => {
189
- const y = u.target.closest(".nine-tab-item");
190
- if (!y) return;
191
- const r = u.ctrlKey || u.metaKey || u.shiftKey, a = parseInt(y.dataset.index, 10);
192
- this.switchSheet(a, r);
192
+ t && (t.addEventListener("click", (b) => {
193
+ const g = b.target.closest(".nine-tab-item");
194
+ if (!g) return;
195
+ const h = b.ctrlKey || b.metaKey || b.shiftKey, r = parseInt(g.dataset.index, 10);
196
+ this.switchSheet(r, h);
193
197
  }), this.switchSheet(0, !1));
194
198
  }, "#init"));
195
- k(this, "switchSheet", /* @__PURE__ */ h((t, u = !1) => {
196
- const y = /* @__PURE__ */ h(() => {
199
+ k(this, "switchSheet", /* @__PURE__ */ d((t, b = !1) => {
200
+ const g = /* @__PURE__ */ d(() => {
197
201
  const e = this.querySelector("nine-table-sheets-body");
198
- e.querySelectorAll("nine-splitter").forEach((d) => {
199
- const m = parseInt(d.dataset.splitIndex, 10), S = e.querySelector(`nine-table-sheet[data-index="${m - 1}"]`), v = e.querySelector(`nine-table-sheet[data-index="${m}"]`);
200
- S && v && S.classList.contains("active") && v.classList.contains("active") ? d.classList.add("active") : d.classList.remove("active");
202
+ e.querySelectorAll("nine-splitter").forEach((a) => {
203
+ const m = parseInt(a.dataset.splitIndex, 10), S = e.querySelector(`nine-table-sheet[data-index="${m - 1}"]`), v = e.querySelector(`nine-table-sheet[data-index="${m}"]`);
204
+ S && v && S.classList.contains("active") && v.classList.contains("active") ? a.classList.add("active") : a.classList.remove("active");
201
205
  });
202
- }, "updateSplitters"), r = this.querySelector(".nine-tab-bar"), a = this.querySelector("nine-table-sheets-body"), l = r.querySelectorAll(".nine-tab-item"), s = a.querySelectorAll("nine-table-sheet");
206
+ }, "updateSplitters"), h = this.querySelector(".nine-tab-bar"), r = this.querySelector("nine-table-sheets-body"), l = h.querySelectorAll(".nine-tab-item"), s = r.querySelectorAll("nine-table-sheet");
203
207
  if (!l[t]) return;
204
- if (!u)
205
- l.forEach((e, c) => {
206
- e.classList.toggle("active", c === t);
207
- const d = a.querySelector(`nine-table-sheet[data-index="${c}"]`);
208
- d && (d.style.flex = "");
209
- }), s.forEach((e, c) => {
210
- e.classList.toggle("active", c === t);
208
+ if (!b)
209
+ l.forEach((e, o) => {
210
+ e.classList.toggle("active", o === t);
211
+ const a = r.querySelector(`nine-table-sheet[data-index="${o}"]`);
212
+ a && (a.style.flex = "");
213
+ }), s.forEach((e, o) => {
214
+ e.classList.toggle("active", o === t);
211
215
  });
212
216
  else {
213
- const e = l[t], c = r.querySelectorAll(".nine-tab-item.active");
214
- if (e.classList.contains("active") && c.length <= 1)
217
+ const e = l[t], o = h.querySelectorAll(".nine-tab-item.active");
218
+ if (e.classList.contains("active") && o.length <= 1)
215
219
  return;
216
220
  e.classList.toggle("active");
217
- const d = a.querySelector(`nine-table-sheet[data-index="${t}"]`);
218
- d && (d.classList.toggle("active"), d.classList.contains("active") || (d.style.flex = ""));
221
+ const a = r.querySelector(`nine-table-sheet[data-index="${t}"]`);
222
+ a && (a.classList.toggle("active"), a.classList.contains("active") || (a.style.flex = ""));
219
223
  }
220
- const o = Array.from(a.querySelectorAll("nine-table-sheet.active"));
221
- if (o.length > 1) {
222
- const e = 1 / o.length;
223
- o.forEach((c) => {
224
- (!c.style.flex || c.style.flex === "1 1 100%") && (c.style.flex = `${e} ${e} 0px`);
224
+ const c = Array.from(r.querySelectorAll("nine-table-sheet.active"));
225
+ if (c.length > 1) {
226
+ const e = 1 / c.length;
227
+ c.forEach((o) => {
228
+ (!o.style.flex || o.style.flex === "1 1 100%") && (o.style.flex = `${e} ${e} 0px`);
225
229
  });
226
230
  } else
227
- o.forEach((e) => {
231
+ c.forEach((e) => {
228
232
  e.style.flex = "1 1 100%";
229
233
  });
230
- y();
231
- const f = a.querySelector("nine-table-sheet.active");
232
- if (f && typeof f.getRowCount == "function") {
234
+ g();
235
+ const u = r.querySelector("nine-table-sheet.active");
236
+ if (u && typeof u.getRowCount == "function") {
233
237
  const e = this.querySelector("#row-count");
234
- e && (e.textContent = f.getRowCount().toLocaleString());
238
+ e && (e.textContent = u.getRowCount().toLocaleString());
235
239
  }
236
240
  }, "switchSheet"));
237
241
  }
238
242
  connectedCallback() {
239
- b(this, A).call(this);
243
+ f(this, A).call(this);
240
244
  }
241
245
  };
242
- A = new WeakMap(), h(W, "NineTableSheets");
243
- let H = W;
246
+ A = new WeakMap(), d(R, "NineTableSheets");
247
+ let H = R;
244
248
  customElements.get("nine-table-sheets") || customElements.define("nine-table-sheets", H);
245
249
  var x, C;
246
- const R = class R {
250
+ const W = class W {
247
251
  constructor(n) {
248
- g(this, x);
249
- g(this, C, /* @__PURE__ */ h(() => {
250
- const t = Array.from(b(this, x).host.children).filter((a) => a.tagName === "TABLE"), u = t.map((a, l) => `<nine-table-sheet class="${l === 0 ? "active" : ""}" data-index="${l}"></nine-table-sheet>`).join(""), y = t.map((a, l) => `<div class="nine-tab-item ${l === 0 ? "active" : ""}" data-index="${l}">Sheet ${l + 1}</div>`).join("");
251
- b(this, x).innerHTML = `
252
+ y(this, x);
253
+ y(this, C, /* @__PURE__ */ d(() => {
254
+ const t = Array.from(f(this, x).host.children).filter((r) => r.tagName === "TABLE"), b = t.map((r, l) => `<nine-table-sheet class="${l === 0 ? "active" : ""}" data-index="${l}"></nine-table-sheet>`).join(""), g = t.map((r, l) => `<div class="nine-tab-item ${l === 0 ? "active" : ""}" data-index="${l}">Sheet ${l + 1}</div>`).join("");
255
+ f(this, x).innerHTML = `
252
256
  <style>
253
257
  :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }
254
258
  nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }
@@ -329,9 +333,9 @@ const R = class R {
329
333
  <nine-table-body>
330
334
  <nine-table-summary></nine-table-summary>
331
335
  <nine-table-sheets>
332
- <nine-table-sheets-body>${u}</nine-table-sheets-body>
336
+ <nine-table-sheets-body>${b}</nine-table-sheets-body>
333
337
  <nine-table-sheets-footer>
334
- <div class="nine-tab-bar">${y}</div>
338
+ <div class="nine-tab-bar">${g}</div>
335
339
  <div class="sheets-counter">Total : <span id="row-count">0</span></div>
336
340
  </nine-table-sheets-footer>
337
341
  </nine-table-sheets>
@@ -339,33 +343,33 @@ const R = class R {
339
343
  </nine-table-body>
340
344
  <nine-table-footer></nine-table-footer>
341
345
  `;
342
- const r = b(this, x).querySelectorAll("nine-table-sheet");
343
- r == null || r.forEach((a, l) => {
346
+ const h = f(this, x).querySelectorAll("nine-table-sheet");
347
+ h == null || h.forEach((r, l) => {
344
348
  t[l] && setTimeout(() => {
345
- a.init(t[l]);
349
+ r.init(t[l]);
346
350
  });
347
351
  });
348
352
  }, "#render"));
349
- q(this, x, n), b(this, C).call(this);
353
+ q(this, x, n), f(this, C).call(this);
350
354
  }
351
355
  };
352
- x = new WeakMap(), C = new WeakMap(), h(R, "LayoutManager");
353
- let M = R;
356
+ x = new WeakMap(), C = new WeakMap(), d(W, "LayoutManager");
357
+ let M = W;
354
358
  var w;
355
359
  const B = class B extends HTMLElement {
356
360
  constructor() {
357
361
  super();
358
- g(this, w, !1);
362
+ y(this, w, !1);
359
363
  this.attachShadow({ mode: "open" });
360
364
  }
361
365
  connectedCallback() {
362
- b(this, w) || (this.layoutManager = new M(this.shadowRoot), q(this, w, !0), E.log("NineTable connected."), this.dispatchEvent(new CustomEvent("load", { bubbles: !0, detail: { target: this } })));
366
+ f(this, w) || (this.layoutManager = new M(this.shadowRoot), q(this, w, !0), E.log("NineTable connected."), this.dispatchEvent(new CustomEvent("load", { bubbles: !0, detail: { target: this } })));
363
367
  }
364
368
  disconnectedCallback() {
365
369
  E.log("NineTable disconnected.");
366
370
  }
367
371
  };
368
- w = new WeakMap(), h(B, "NineTable");
372
+ w = new WeakMap(), d(B, "NineTable");
369
373
  let N = B;
370
374
  customElements.get("nine-table") || customElements.define("nine-table", N);
371
375
  //# sourceMappingURL=nine-table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nine-table.js","sources":["../src/external/NoPeer.js","../src/ui/nine-table-sheet.js","../src/ui/nine-table-sheets.js","../src/ui/LayoutManager.js","../src/core/nine-table.js"],"sourcesContent":["import { trace as traceOrigin } from '@ninebone/util';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-table\", \"green\");\n }\n}\n\nexport const trace = new Trace();","import { trace } from \"@nopeer\";\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#render();\n };\n\n init = (tableEl) => {\n if (!tableEl) return;\n\n const initializeTable = (tbl) => {\n\n const ensureColgroup = (tbl) => {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n };\n\n const ensureThead = (tbl) => {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n };\n\n ensureColgroup(tbl);\n ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n };\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const leftContainer = this.querySelector('.ng-container-left');\n const bodyContainer = this.querySelector('.ng-container-body');\n const rightContainer = this.querySelector('.ng-container-right');\n\n // 1. 메인 바디 영역 (좌우 고정 컬럼 제외)\n if (bodyContainer) {\n const bodyTable = this.#tableElement.cloneNode(true);\n\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\n let leftWidth = 0;\n leftTable.querySelectorAll('col').forEach(col => {\n const w = parseInt(col.getAttribute('width'), 10);\n if (!isNaN(w)) leftWidth += w;\n });\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n\n if (leftWidth > 0) {\n leftContainer.style.display = 'block';\n leftContainer.style.flex = `0 0 ${leftWidth}px`;\n leftContainer.style.width = `${leftWidth}px`;\n leftContainer.style.minWidth = `${leftWidth}px`;\n leftContainer.style.maxWidth = `${leftWidth}px`;\n } else {\n leftContainer.style.display = 'none'; // 좌측 고정 컬럼이 없으면 숨김\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\n let rightWidth = 0;\n rightTable.querySelectorAll('col').forEach(col => {\n const w = parseInt(col.getAttribute('width'), 10);\n if (!isNaN(w)) rightWidth += w;\n });\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n\n if (rightWidth > 0) {\n rightContainer.style.display = 'block';\n rightContainer.style.flex = `0 0 ${rightWidth}px`;\n rightContainer.style.width = `${rightWidth}px`;\n rightContainer.style.minWidth = `${rightWidth}px`;\n rightContainer.style.maxWidth = `${rightWidth}px`;\n } else {\n rightContainer.style.display = 'none'; // 우측 고정 컬럼이 없으면 공간을 차지하지 않도록 숨김\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 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 overflow: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\n }\n \n nine-table-sheet .ng-container-bottom {\n display: flex;\n flex-direction: row;\n height: 16px;\n flex-shrink: 0;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n }\n \n nine-table-sheet nine-table-hscrollbar {\n flex: 1;\n overflow: hidden;\n display: block;\n }\n \n nine-table-sheet .ng-scroll-edge {\n width: 16px;\n flex-shrink: 0;\n background: #f3f4f6;\n }\n \n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n \n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n \n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class='ng-container-top'>\n <div class='ng-container-left'></div>\n <div class='ng-container-body'></div>\n <div class='ng-container-right'></div>\n <nine-table-vscrollbar></nine-table-vscrollbar>\n </div>\n <div class='ng-container-bottom'>\n <nine-table-hscrollbar></nine-table-hscrollbar>\n <div class='ng-scroll-edge'></div>\n </div>\n `;\n };\n\n disconnectedCallback() {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n };\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#init();\n };\n\n #init = () => {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.switchSheet(index, isMultiSelect);\n });\n\n this.switchSheet(0, false);\n };\n\n switchSheet = (index, isMultiSelect = false) => {\n\n const updateSplitters = () => {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n };\n\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n };\n\n\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","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 setTimeout( () => {\n $el.init(rawTables[idx]);\n })\n }\n });\n };\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot 하나만 넘겨서 내부에서 레이아웃 및 테이블 수집 처리\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_NineTableSheet","__privateAdd","_tableElement","__publicField","tableEl","initializeTable","tbl","ensureColgroup","firstRow","colCount","colgroup","defaultWidth","i","col","ensureThead","thead","clonedTable","__privateSet","__privateGet","leftContainer","bodyContainer","rightContainer","bodyTable","el","leftTable","leftWidth","w","rightTable","rightWidth","_render","NineTableSheet","_NineTableSheets","_init","tabBar","e","tabItem","isMultiSelect","index","updateSplitters","body","splitter","splitIndex","leftSheet","rightSheet","tabItems","sheetElements","tab","idx","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","activeSheet","rowCountEl","NineTableSheets","_LayoutManager","shadowRoot","_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 initializeTable = (tbl) => {\n\n const ensureColgroup = (tbl) => {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n };\n\n const ensureThead = (tbl) => {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n };\n\n ensureColgroup(tbl);\n ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n };\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const leftContainer = this.querySelector('.ng-container-left');\n const bodyContainer = this.querySelector('.ng-container-body');\n const rightContainer = this.querySelector('.ng-container-right');\n\n // 1. 메인 바디 영역 (좌우 고정 컬럼 제외)\n if (bodyContainer) {\n const bodyTable = this.#tableElement.cloneNode(true);\n\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\n let leftWidth = 0;\n leftTable.querySelectorAll('col').forEach(col => {\n const w = parseInt(col.getAttribute('width'), 10);\n if (!isNaN(w)) leftWidth += w;\n });\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n\n const activeLeftWidth = leftWidth > 0 ? leftWidth : 0;\n leftContainer.style.flex = `0 0 ${activeLeftWidth}px`;\n leftContainer.style.width = `${activeLeftWidth}px`;\n }\n\n // 3. 우측 고정 영역 처리\n if (rightContainer) {\n const rightTable = this.#tableElement.cloneNode(true);\n rightTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'right') el.remove();\n });\n\n let rightWidth = 0;\n rightTable.querySelectorAll('col').forEach(col => {\n const w = parseInt(col.getAttribute('width'), 10);\n if (!isNaN(w)) rightWidth += w;\n });\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n\n const activeRightWidth = rightWidth > 0 ? rightWidth : 0;\n rightContainer.style.flex = `0 0 ${activeRightWidth}px`;\n rightContainer.style.width = `${activeRightWidth}px`;\n }\n\n trace.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);\n };\n\n getRowCount = () => {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n };\n\n #render = () => {\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n overflow: hidden;\n }\n \n nine-table-sheet .ng-container-top {\n display: flex;\n flex-direction: row;\n flex: 1;\n width: 100%;\n overflow: hidden;\n position: relative;\n }\n \n nine-table-sheet .ng-container-left {\n overflow: hidden;\n background: #ffffff;\n border-right: 1px solid #e5e7eb;\n }\n \n 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 overflow: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\n }\n \n nine-table-sheet .ng-container-bottom {\n display: flex;\n flex-direction: row;\n height: 16px;\n flex-shrink: 0;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n }\n \n nine-table-sheet nine-table-hscrollbar {\n flex: 1;\n overflow: hidden;\n display: block;\n }\n \n nine-table-sheet .ng-scroll-edge {\n width: 16px;\n flex-shrink: 0;\n background: #f3f4f6;\n }\n \n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n \n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n \n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class='ng-container-top'>\n <div class='ng-container-left'></div>\n <div class='ng-container-body'></div>\n <div class='ng-container-right'></div>\n <nine-table-vscrollbar></nine-table-vscrollbar>\n </div>\n <div class='ng-container-bottom'>\n <nine-table-hscrollbar></nine-table-hscrollbar>\n <div class='ng-scroll-edge'></div>\n </div>\n `;\n };\n\n disconnectedCallback() {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n };\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#init();\n };\n\n #init = () => {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.switchSheet(index, isMultiSelect);\n });\n\n this.switchSheet(0, false);\n };\n\n switchSheet = (index, isMultiSelect = false) => {\n\n const updateSplitters = () => {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n };\n\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n };\n\n\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","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 setTimeout( () => {\n $el.init(rawTables[idx]);\n })\n }\n });\n };\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot 하나만 넘겨서 내부에서 레이아웃 및 테이블 수집 처리\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_NineTableSheet","__privateAdd","_tableElement","__publicField","tableEl","initializeTable","tbl","ensureColgroup","firstRow","colCount","colgroup","defaultWidth","i","col","ensureThead","thead","clonedTable","__privateSet","__privateGet","leftContainer","bodyContainer","rightContainer","bodyTable","el","leftTable","leftWidth","w","activeLeftWidth","rightTable","rightWidth","activeRightWidth","_render","NineTableSheet","_NineTableSheets","_init","tabBar","e","tabItem","isMultiSelect","index","updateSplitters","body","splitter","splitIndex","leftSheet","rightSheet","tabItems","sheetElements","tab","idx","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","activeSheet","rowCountEl","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,t){typeof exports=="object"&&typeof module<"u"?t(require("@ninebone/util")):typeof define=="function"&&define.amd?define(["@ninebone/util"],t):(n=typeof globalThis<"u"?globalThis:n||self,t(n.NineboneUtil))})(this,function(n){"use strict";var K=Object.defineProperty;var U=n=>{throw TypeError(n)};var F=(n,t,o)=>t in n?K(n,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):n[t]=o;var h=(n,t)=>K(n,"name",{value:t,configurable:!0});var $=(n,t,o)=>F(n,typeof t!="symbol"?t+"":t,o),D=(n,t,o)=>t.has(n)||U("Cannot "+o);var u=(n,t,o)=>(D(n,t,"read from private field"),o?o.call(n):t.get(n)),m=(n,t,o)=>t.has(n)?U("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(n):t.set(n,o),T=(n,t,o,v)=>(D(n,t,"write to private field"),v?v.call(n,o):t.set(n,o),o);var p,E,A,x,C,w;const z=class z extends n.trace.constructor{constructor(){super(),this.init("nine-table","green")}};h(z,"Trace");let t=z;const o=new t,I=class I extends HTMLElement{constructor(){super();m(this,p,null);$(this,"init",h(f=>{if(!f)return;const y=h(s=>{const l=h(e=>{if(e.querySelector("colgroup"))return;const c=e.querySelector("tbody tr")||e.querySelector("tr"),d=c?c.querySelectorAll("th, td").length:1,k=document.createElement("colgroup"),L=Math.max(Math.floor((e.clientWidth||600)/d),100);for(let q=0;q<d;q++){const B=document.createElement("col");B.setAttribute("width",L),k.appendChild(B)}e.prepend(k)},"ensureColgroup"),b=h(e=>{if(e.querySelector("thead"))return;const c=document.createElement("thead"),d=e.querySelector("colgroup");d?d.after(c):e.prepend(c)},"ensureThead");return l(s),b(s),s.classList.add("nine-table-element"),s},"initializeTable"),g=f.cloneNode(!0);T(this,p,y(g)),u(this,p).style.display="table";const r=this.querySelector(".ng-container-left"),a=this.querySelector(".ng-container-body"),i=this.querySelector(".ng-container-right");if(a){const s=u(this,p).cloneNode(!0);s.querySelectorAll('[fixed="left"], [fixed="right"]').forEach(l=>l.remove()),a.innerHTML="",a.appendChild(s)}if(r){const s=u(this,p).cloneNode(!0);s.querySelectorAll("col, th, td").forEach(b=>{b.getAttribute("fixed")!=="left"&&b.remove()});let l=0;s.querySelectorAll("col").forEach(b=>{const e=parseInt(b.getAttribute("width"),10);isNaN(e)||(l+=e)}),r.innerHTML="",r.appendChild(s),l>0?(r.style.display="block",r.style.flex=`0 0 ${l}px`,r.style.width=`${l}px`,r.style.minWidth=`${l}px`,r.style.maxWidth=`${l}px`):r.style.display="none"}if(i){const s=u(this,p).cloneNode(!0);s.querySelectorAll("col, th, td").forEach(b=>{b.getAttribute("fixed")!=="right"&&b.remove()});let l=0;s.querySelectorAll("col").forEach(b=>{const e=parseInt(b.getAttribute("width"),10);isNaN(e)||(l+=e)}),i.innerHTML="",i.appendChild(s),l>0?(i.style.display="block",i.style.flex=`0 0 ${l}px`,i.style.width=`${l}px`,i.style.minWidth=`${l}px`,i.style.maxWidth=`${l}px`):i.style.display="none"}o.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`)},"init"));$(this,"getRowCount",h(()=>u(this,p)?u(this,p).querySelectorAll("tbody tr").length:0,"getRowCount"));m(this,E,h(()=>{this.innerHTML=`
1
+ (function(n,t){typeof exports=="object"&&typeof module<"u"?t(require("@ninebone/util")):typeof define=="function"&&define.amd?define(["@ninebone/util"],t):(n=typeof globalThis<"u"?globalThis:n||self,t(n.NineboneUtil))})(this,function(n){"use strict";var K=Object.defineProperty;var U=n=>{throw TypeError(n)};var F=(n,t,o)=>t in n?K(n,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):n[t]=o;var f=(n,t)=>K(n,"name",{value:t,configurable:!0});var T=(n,t,o)=>F(n,typeof t!="symbol"?t+"":t,o),D=(n,t,o)=>t.has(n)||U("Cannot "+o);var b=(n,t,o)=>(D(n,t,"read from private field"),o?o.call(n):t.get(n)),m=(n,t,o)=>t.has(n)?U("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(n):t.set(n,o),$=(n,t,o,v)=>(D(n,t,"write to private field"),v?v.call(n,o):t.set(n,o),o);var p,E,L,x,A,w;const z=class z extends n.trace.constructor{constructor(){super(),this.init("nine-table","green")}};f(z,"Trace");let t=z;const o=new t,I=class I extends HTMLElement{constructor(){super();m(this,p,null);T(this,"init",f(c=>{if(!c)return;const g=f(s=>{const d=f(e=>{if(e.querySelector("colgroup"))return;const i=e.querySelector("tbody tr")||e.querySelector("tr"),a=i?i.querySelectorAll("th, td").length:1,q=document.createElement("colgroup"),C=Math.max(Math.floor((e.clientWidth||600)/a),100);for(let k=0;k<a;k++){const B=document.createElement("col");B.setAttribute("width",C),q.appendChild(B)}e.prepend(q)},"ensureColgroup"),u=f(e=>{if(e.querySelector("thead"))return;const i=document.createElement("thead"),a=e.querySelector("colgroup");a?a.after(i):e.prepend(i)},"ensureThead");return d(s),u(s),s.classList.add("nine-table-element"),s},"initializeTable"),y=c.cloneNode(!0);$(this,p,g(y)),b(this,p).style.display="table";const h=this.querySelector(".ng-container-left"),r=this.querySelector(".ng-container-body"),l=this.querySelector(".ng-container-right");if(r){const s=b(this,p).cloneNode(!0);s.querySelectorAll('[fixed="left"], [fixed="right"]').forEach(d=>d.remove()),r.innerHTML="",r.appendChild(s)}if(h){const s=b(this,p).cloneNode(!0);s.querySelectorAll("col, th, td").forEach(e=>{e.getAttribute("fixed")!=="left"&&e.remove()});let d=0;s.querySelectorAll("col").forEach(e=>{const i=parseInt(e.getAttribute("width"),10);isNaN(i)||(d+=i)}),h.innerHTML="",h.appendChild(s);const u=d>0?d:0;h.style.flex=`0 0 ${u}px`,h.style.width=`${u}px`}if(l){const s=b(this,p).cloneNode(!0);s.querySelectorAll("col, th, td").forEach(e=>{e.getAttribute("fixed")!=="right"&&e.remove()});let d=0;s.querySelectorAll("col").forEach(e=>{const i=parseInt(e.getAttribute("width"),10);isNaN(i)||(d+=i)}),l.innerHTML="",l.appendChild(s);const u=d>0?d:0;l.style.flex=`0 0 ${u}px`,l.style.width=`${u}px`}o.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`)},"init"));T(this,"getRowCount",f(()=>b(this,p)?b(this,p).querySelectorAll("tbody tr").length:0,"getRowCount"));m(this,E,f(()=>{this.innerHTML=`
2
2
  <style>
3
3
  nine-table-sheet {
4
4
  display: flex;
@@ -94,7 +94,7 @@
94
94
  <nine-table-hscrollbar></nine-table-hscrollbar>
95
95
  <div class='ng-scroll-edge'></div>
96
96
  </div>
97
- `},"#render"))}connectedCallback(){u(this,E).call(this)}disconnectedCallback(){this.innerHTML="",o.log("NineTableSheet destroyed.")}};p=new WeakMap,E=new WeakMap,h(I,"NineTableSheet");let v=I;customElements.get("nine-table-sheet")||customElements.define("nine-table-sheet",v);const W=class W extends HTMLElement{constructor(){super();m(this,A,h(()=>{const f=this.querySelector(".nine-tab-bar");f&&(f.addEventListener("click",y=>{const g=y.target.closest(".nine-tab-item");if(!g)return;const r=y.ctrlKey||y.metaKey||y.shiftKey,a=parseInt(g.dataset.index,10);this.switchSheet(a,r)}),this.switchSheet(0,!1))},"#init"));$(this,"switchSheet",h((f,y=!1)=>{const g=h(()=>{const e=this.querySelector("nine-table-sheets-body");e.querySelectorAll("nine-splitter").forEach(d=>{const k=parseInt(d.dataset.splitIndex,10),L=e.querySelector(`nine-table-sheet[data-index="${k-1}"]`),q=e.querySelector(`nine-table-sheet[data-index="${k}"]`);L&&q&&L.classList.contains("active")&&q.classList.contains("active")?d.classList.add("active"):d.classList.remove("active")})},"updateSplitters"),r=this.querySelector(".nine-tab-bar"),a=this.querySelector("nine-table-sheets-body"),i=r.querySelectorAll(".nine-tab-item"),s=a.querySelectorAll("nine-table-sheet");if(!i[f])return;if(!y)i.forEach((e,c)=>{e.classList.toggle("active",c===f);const d=a.querySelector(`nine-table-sheet[data-index="${c}"]`);d&&(d.style.flex="")}),s.forEach((e,c)=>{e.classList.toggle("active",c===f)});else{const e=i[f],c=r.querySelectorAll(".nine-tab-item.active");if(e.classList.contains("active")&&c.length<=1)return;e.classList.toggle("active");const d=a.querySelector(`nine-table-sheet[data-index="${f}"]`);d&&(d.classList.toggle("active"),d.classList.contains("active")||(d.style.flex=""))}const l=Array.from(a.querySelectorAll("nine-table-sheet.active"));if(l.length>1){const e=1/l.length;l.forEach(c=>{(!c.style.flex||c.style.flex==="1 1 100%")&&(c.style.flex=`${e} ${e} 0px`)})}else l.forEach(e=>{e.style.flex="1 1 100%"});g();const b=a.querySelector("nine-table-sheet.active");if(b&&typeof b.getRowCount=="function"){const e=this.querySelector("#row-count");e&&(e.textContent=b.getRowCount().toLocaleString())}},"switchSheet"))}connectedCallback(){u(this,A).call(this)}};A=new WeakMap,h(W,"NineTableSheets");let N=W;customElements.get("nine-table-sheets")||customElements.define("nine-table-sheets",N);const R=class R{constructor(S){m(this,x);m(this,C,h(()=>{const f=Array.from(u(this,x).host.children).filter(a=>a.tagName==="TABLE"),y=f.map((a,i)=>`<nine-table-sheet class="${i===0?"active":""}" data-index="${i}"></nine-table-sheet>`).join(""),g=f.map((a,i)=>`<div class="nine-tab-item ${i===0?"active":""}" data-index="${i}">Sheet ${i+1}</div>`).join("");u(this,x).innerHTML=`
97
+ `},"#render"))}connectedCallback(){b(this,E).call(this)}disconnectedCallback(){this.innerHTML="",o.log("NineTableSheet destroyed.")}};p=new WeakMap,E=new WeakMap,f(I,"NineTableSheet");let v=I;customElements.get("nine-table-sheet")||customElements.define("nine-table-sheet",v);const R=class R extends HTMLElement{constructor(){super();m(this,L,f(()=>{const c=this.querySelector(".nine-tab-bar");c&&(c.addEventListener("click",g=>{const y=g.target.closest(".nine-tab-item");if(!y)return;const h=g.ctrlKey||g.metaKey||g.shiftKey,r=parseInt(y.dataset.index,10);this.switchSheet(r,h)}),this.switchSheet(0,!1))},"#init"));T(this,"switchSheet",f((c,g=!1)=>{const y=f(()=>{const e=this.querySelector("nine-table-sheets-body");e.querySelectorAll("nine-splitter").forEach(a=>{const q=parseInt(a.dataset.splitIndex,10),C=e.querySelector(`nine-table-sheet[data-index="${q-1}"]`),k=e.querySelector(`nine-table-sheet[data-index="${q}"]`);C&&k&&C.classList.contains("active")&&k.classList.contains("active")?a.classList.add("active"):a.classList.remove("active")})},"updateSplitters"),h=this.querySelector(".nine-tab-bar"),r=this.querySelector("nine-table-sheets-body"),l=h.querySelectorAll(".nine-tab-item"),s=r.querySelectorAll("nine-table-sheet");if(!l[c])return;if(!g)l.forEach((e,i)=>{e.classList.toggle("active",i===c);const a=r.querySelector(`nine-table-sheet[data-index="${i}"]`);a&&(a.style.flex="")}),s.forEach((e,i)=>{e.classList.toggle("active",i===c)});else{const e=l[c],i=h.querySelectorAll(".nine-tab-item.active");if(e.classList.contains("active")&&i.length<=1)return;e.classList.toggle("active");const a=r.querySelector(`nine-table-sheet[data-index="${c}"]`);a&&(a.classList.toggle("active"),a.classList.contains("active")||(a.style.flex=""))}const d=Array.from(r.querySelectorAll("nine-table-sheet.active"));if(d.length>1){const e=1/d.length;d.forEach(i=>{(!i.style.flex||i.style.flex==="1 1 100%")&&(i.style.flex=`${e} ${e} 0px`)})}else d.forEach(e=>{e.style.flex="1 1 100%"});y();const u=r.querySelector("nine-table-sheet.active");if(u&&typeof u.getRowCount=="function"){const e=this.querySelector("#row-count");e&&(e.textContent=u.getRowCount().toLocaleString())}},"switchSheet"))}connectedCallback(){b(this,L).call(this)}};L=new WeakMap,f(R,"NineTableSheets");let N=R;customElements.get("nine-table-sheets")||customElements.define("nine-table-sheets",N);const W=class W{constructor(S){m(this,x);m(this,A,f(()=>{const c=Array.from(b(this,x).host.children).filter(r=>r.tagName==="TABLE"),g=c.map((r,l)=>`<nine-table-sheet class="${l===0?"active":""}" data-index="${l}"></nine-table-sheet>`).join(""),y=c.map((r,l)=>`<div class="nine-tab-item ${l===0?"active":""}" data-index="${l}">Sheet ${l+1}</div>`).join("");b(this,x).innerHTML=`
98
98
  <style>
99
99
  :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }
100
100
  nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }
@@ -175,14 +175,14 @@
175
175
  <nine-table-body>
176
176
  <nine-table-summary></nine-table-summary>
177
177
  <nine-table-sheets>
178
- <nine-table-sheets-body>${y}</nine-table-sheets-body>
178
+ <nine-table-sheets-body>${g}</nine-table-sheets-body>
179
179
  <nine-table-sheets-footer>
180
- <div class="nine-tab-bar">${g}</div>
180
+ <div class="nine-tab-bar">${y}</div>
181
181
  <div class="sheets-counter">Total : <span id="row-count">0</span></div>
182
182
  </nine-table-sheets-footer>
183
183
  </nine-table-sheets>
184
184
  <nine-table-analysis></nine-table-analysis>
185
185
  </nine-table-body>
186
186
  <nine-table-footer></nine-table-footer>
187
- `;const r=u(this,x).querySelectorAll("nine-table-sheet");r==null||r.forEach((a,i)=>{f[i]&&setTimeout(()=>{a.init(f[i])})})},"#render"));T(this,x,S),u(this,C).call(this)}};x=new WeakMap,C=new WeakMap,h(R,"LayoutManager");let H=R;const j=class j extends HTMLElement{constructor(){super();m(this,w,!1);this.attachShadow({mode:"open"})}connectedCallback(){u(this,w)||(this.layoutManager=new H(this.shadowRoot),T(this,w,!0),o.log("NineTable connected."),this.dispatchEvent(new CustomEvent("load",{bubbles:!0,detail:{target:this}})))}disconnectedCallback(){o.log("NineTable disconnected.")}};w=new WeakMap,h(j,"NineTable");let M=j;customElements.get("nine-table")||customElements.define("nine-table",M)});
187
+ `;const h=b(this,x).querySelectorAll("nine-table-sheet");h==null||h.forEach((r,l)=>{c[l]&&setTimeout(()=>{r.init(c[l])})})},"#render"));$(this,x,S),b(this,A).call(this)}};x=new WeakMap,A=new WeakMap,f(W,"LayoutManager");let H=W;const j=class j extends HTMLElement{constructor(){super();m(this,w,!1);this.attachShadow({mode:"open"})}connectedCallback(){b(this,w)||(this.layoutManager=new H(this.shadowRoot),$(this,w,!0),o.log("NineTable connected."),this.dispatchEvent(new CustomEvent("load",{bubbles:!0,detail:{target:this}})))}disconnectedCallback(){o.log("NineTable disconnected.")}};w=new WeakMap,f(j,"NineTable");let M=j;customElements.get("nine-table")||customElements.define("nine-table",M)});
188
188
  //# sourceMappingURL=nine-table.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nine-table.umd.js","sources":["../src/external/NoPeer.js","../src/ui/nine-table-sheet.js","../src/ui/nine-table-sheets.js","../src/ui/LayoutManager.js","../src/core/nine-table.js"],"sourcesContent":["import { trace as traceOrigin } from '@ninebone/util';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-table\", \"green\");\n }\n}\n\nexport const trace = new Trace();","import { trace } from \"@nopeer\";\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#render();\n };\n\n init = (tableEl) => {\n if (!tableEl) return;\n\n const initializeTable = (tbl) => {\n\n const ensureColgroup = (tbl) => {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n };\n\n const ensureThead = (tbl) => {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n };\n\n ensureColgroup(tbl);\n ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n };\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const leftContainer = this.querySelector('.ng-container-left');\n const bodyContainer = this.querySelector('.ng-container-body');\n const rightContainer = this.querySelector('.ng-container-right');\n\n // 1. 메인 바디 영역 (좌우 고정 컬럼 제외)\n if (bodyContainer) {\n const bodyTable = this.#tableElement.cloneNode(true);\n\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\n let leftWidth = 0;\n leftTable.querySelectorAll('col').forEach(col => {\n const w = parseInt(col.getAttribute('width'), 10);\n if (!isNaN(w)) leftWidth += w;\n });\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n\n if (leftWidth > 0) {\n leftContainer.style.display = 'block';\n leftContainer.style.flex = `0 0 ${leftWidth}px`;\n leftContainer.style.width = `${leftWidth}px`;\n leftContainer.style.minWidth = `${leftWidth}px`;\n leftContainer.style.maxWidth = `${leftWidth}px`;\n } else {\n leftContainer.style.display = 'none'; // 좌측 고정 컬럼이 없으면 숨김\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\n let rightWidth = 0;\n rightTable.querySelectorAll('col').forEach(col => {\n const w = parseInt(col.getAttribute('width'), 10);\n if (!isNaN(w)) rightWidth += w;\n });\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n\n if (rightWidth > 0) {\n rightContainer.style.display = 'block';\n rightContainer.style.flex = `0 0 ${rightWidth}px`;\n rightContainer.style.width = `${rightWidth}px`;\n rightContainer.style.minWidth = `${rightWidth}px`;\n rightContainer.style.maxWidth = `${rightWidth}px`;\n } else {\n rightContainer.style.display = 'none'; // 우측 고정 컬럼이 없으면 공간을 차지하지 않도록 숨김\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 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 overflow: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\n }\n \n nine-table-sheet .ng-container-bottom {\n display: flex;\n flex-direction: row;\n height: 16px;\n flex-shrink: 0;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n }\n \n nine-table-sheet nine-table-hscrollbar {\n flex: 1;\n overflow: hidden;\n display: block;\n }\n \n nine-table-sheet .ng-scroll-edge {\n width: 16px;\n flex-shrink: 0;\n background: #f3f4f6;\n }\n \n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n \n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n \n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class='ng-container-top'>\n <div class='ng-container-left'></div>\n <div class='ng-container-body'></div>\n <div class='ng-container-right'></div>\n <nine-table-vscrollbar></nine-table-vscrollbar>\n </div>\n <div class='ng-container-bottom'>\n <nine-table-hscrollbar></nine-table-hscrollbar>\n <div class='ng-scroll-edge'></div>\n </div>\n `;\n };\n\n disconnectedCallback() {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n };\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#init();\n };\n\n #init = () => {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.switchSheet(index, isMultiSelect);\n });\n\n this.switchSheet(0, false);\n };\n\n switchSheet = (index, isMultiSelect = false) => {\n\n const updateSplitters = () => {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n };\n\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n };\n\n\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","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 setTimeout( () => {\n $el.init(rawTables[idx]);\n })\n }\n });\n };\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot 하나만 넘겨서 내부에서 레이아웃 및 테이블 수집 처리\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_NineTableSheet","__privateAdd","_tableElement","__publicField","tableEl","initializeTable","tbl","ensureColgroup","firstRow","colCount","colgroup","defaultWidth","i","col","ensureThead","thead","clonedTable","__privateSet","__privateGet","leftContainer","bodyContainer","rightContainer","bodyTable","el","leftTable","leftWidth","w","rightTable","rightWidth","_render","NineTableSheet","_NineTableSheets","_init","tabBar","e","tabItem","isMultiSelect","index","updateSplitters","body","splitter","splitIndex","leftSheet","rightSheet","tabItems","sheetElements","tab","idx","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","activeSheet","rowCountEl","NineTableSheets","_LayoutManager","shadowRoot","_root","rawTables","sheetsHtml","_","tabsHtml","$sheetElements","$el","LayoutManager","_NineTable","_created","NineTable"],"mappings":"wyBAEO,MAAMA,EAAN,MAAMA,UAAcC,EAAAA,MAAY,WAAY,CAC/C,aAAc,CACV,MAAK,EACL,KAAK,KAAK,aAAc,OAAO,CACnC,CACJ,EALmDC,EAAAF,EAAA,SAA5C,IAAMG,EAANH,EAOA,MAAMI,EAAQ,IAAID,ECPZE,EAAN,MAAMA,UAAuB,WAAY,CAG5C,aAAc,CACV,MAAK,EAHTC,EAAA,KAAAC,EAAgB,MAUhBC,EAAA,YAAON,EAACO,GAAY,CAChB,GAAI,CAACA,EAAS,OAEd,MAAMC,EAAkBR,EAACS,GAAQ,CAE7B,MAAMC,EAAiBV,EAACS,GAAQ,CAC5B,GAAIA,EAAI,cAAc,UAAU,EAAG,OAEnC,MAAME,EAAWF,EAAI,cAAc,UAAU,GAAKA,EAAI,cAAc,IAAI,EAClEG,EAAWD,EAAWA,EAAS,iBAAiB,QAAQ,EAAE,OAAS,EAEnEE,EAAW,SAAS,cAAc,UAAU,EAC5CC,EAAe,KAAK,IAAI,KAAK,OAAOL,EAAI,aAAe,KAAOG,CAAQ,EAAG,GAAG,EAElF,QAASG,EAAI,EAAGA,EAAIH,EAAUG,IAAK,CAC/B,MAAMC,EAAM,SAAS,cAAc,KAAK,EACxCA,EAAI,aAAa,QAASF,CAAY,EACtCD,EAAS,YAAYG,CAAG,CAC5B,CACAP,EAAI,QAAQI,CAAQ,CACxB,EAfuB,kBAiBjBI,EAAcjB,EAACS,GAAQ,CACzB,GAAIA,EAAI,cAAc,OAAO,EAAG,OAEhC,MAAMS,EAAQ,SAAS,cAAc,OAAO,EACtCL,EAAWJ,EAAI,cAAc,UAAU,EAEzCI,EACAA,EAAS,MAAMK,CAAK,EAEpBT,EAAI,QAAQS,CAAK,CAEzB,EAXoB,eAapB,OAAAR,EAAeD,CAAG,EAClBQ,EAAYR,CAAG,EAEfA,EAAI,UAAU,IAAI,oBAAoB,EAC/BA,CACX,EArCwB,mBAuClBU,EAAcZ,EAAQ,UAAU,EAAI,EAC1Ca,EAAA,KAAKf,EAAgBG,EAAgBW,CAAW,GAChDE,EAAA,KAAKhB,GAAc,MAAM,QAAU,QAEnC,MAAMiB,EAAgB,KAAK,cAAc,oBAAoB,EACvDC,EAAgB,KAAK,cAAc,oBAAoB,EACvDC,EAAiB,KAAK,cAAc,qBAAqB,EAG/D,GAAID,EAAe,CACf,MAAME,EAAYJ,EAAA,KAAKhB,GAAc,UAAU,EAAI,EAEnDoB,EAAU,iBAAiB,iCAAiC,EAAE,QAAQC,GAAMA,EAAG,QAAQ,EACvFH,EAAc,UAAY,GAC1BA,EAAc,YAAYE,CAAS,CACvC,CAGA,GAAIH,EAAe,CACf,MAAMK,EAAYN,EAAA,KAAKhB,GAAc,UAAU,EAAI,EACnDsB,EAAU,iBAAiB,aAAa,EAAE,QAAQD,GAAM,CAChDA,EAAG,aAAa,OAAO,IAAM,QAAQA,EAAG,OAAM,CACtD,CAAC,EAED,IAAIE,EAAY,EAChBD,EAAU,iBAAiB,KAAK,EAAE,QAAQX,GAAO,CAC7C,MAAMa,EAAI,SAASb,EAAI,aAAa,OAAO,EAAG,EAAE,EAC3C,MAAMa,CAAC,IAAGD,GAAaC,EAChC,CAAC,EAEDP,EAAc,UAAY,GAC1BA,EAAc,YAAYK,CAAS,EAE/BC,EAAY,GACZN,EAAc,MAAM,QAAU,QAC9BA,EAAc,MAAM,KAAO,OAAOM,CAAS,KAC3CN,EAAc,MAAM,MAAQ,GAAGM,CAAS,KACxCN,EAAc,MAAM,SAAW,GAAGM,CAAS,KAC3CN,EAAc,MAAM,SAAW,GAAGM,CAAS,MAE3CN,EAAc,MAAM,QAAU,MAEtC,CAGA,GAAIE,EAAgB,CAChB,MAAMM,EAAaT,EAAA,KAAKhB,GAAc,UAAU,EAAI,EACpDyB,EAAW,iBAAiB,aAAa,EAAE,QAAQJ,GAAM,CACjDA,EAAG,aAAa,OAAO,IAAM,SAASA,EAAG,OAAM,CACvD,CAAC,EAED,IAAIK,EAAa,EACjBD,EAAW,iBAAiB,KAAK,EAAE,QAAQd,GAAO,CAC9C,MAAMa,EAAI,SAASb,EAAI,aAAa,OAAO,EAAG,EAAE,EAC3C,MAAMa,CAAC,IAAGE,GAAcF,EACjC,CAAC,EAEDL,EAAe,UAAY,GAC3BA,EAAe,YAAYM,CAAU,EAEjCC,EAAa,GACbP,EAAe,MAAM,QAAU,QAC/BA,EAAe,MAAM,KAAO,OAAOO,CAAU,KAC7CP,EAAe,MAAM,MAAQ,GAAGO,CAAU,KAC1CP,EAAe,MAAM,SAAW,GAAGO,CAAU,KAC7CP,EAAe,MAAM,SAAW,GAAGO,CAAU,MAE7CP,EAAe,MAAM,QAAU,MAEvC,CAEAtB,EAAM,IAAI,iDAAiD,KAAK,YAAW,CAAE,EAAE,CACnF,EAlHO,SAoHPI,EAAA,mBAAcN,EAAA,IACLqB,EAAA,KAAKhB,GACHgB,EAAA,KAAKhB,GAAc,iBAAiB,UAAU,EAAE,OADvB,EADtB,gBAKdD,EAAA,KAAA4B,EAAUhC,EAAA,IAAM,CACZ,KAAK,UAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAiGrB,EAlGU,WA/HV,CAEA,mBAAoB,CAChBqB,EAAA,KAAKW,GAAL,UACJ,CA+NA,sBAAuB,CACnB,KAAK,UAAY,GACjB9B,EAAM,IAAI,2BAA2B,CACzC,CACJ,EA3OIG,EAAA,YAmIA2B,EAAA,YApI4ChC,EAAAG,EAAA,kBAAzC,IAAM8B,EAAN9B,EA8OF,eAAe,IAAI,kBAAkB,GACtC,eAAe,OAAO,mBAAoB8B,CAAc,EC/OrD,MAAMC,EAAN,MAAMA,UAAwB,WAAY,CAC7C,aAAc,CACV,MAAK,EAOT9B,EAAA,KAAA+B,EAAQnC,EAAA,IAAM,CACV,MAAMoC,EAAS,KAAK,cAAc,eAAe,EAC5CA,IAELA,EAAO,iBAAiB,QAAUC,GAAM,CACpC,MAAMC,EAAUD,EAAE,OAAO,QAAQ,gBAAgB,EACjD,GAAI,CAACC,EAAS,OAEd,MAAMC,EAAgBF,EAAE,SAAWA,EAAE,SAAWA,EAAE,SAC5CG,EAAQ,SAASF,EAAQ,QAAQ,MAAO,EAAE,EAChD,KAAK,YAAYE,EAAOD,CAAa,CACzC,CAAC,EAED,KAAK,YAAY,EAAG,EAAK,EAC7B,EAdQ,UAgBRjC,EAAA,mBAAcN,EAAA,CAACwC,EAAOD,EAAgB,KAAU,CAE5C,MAAME,EAAkBzC,EAAA,IAAM,CAC1B,MAAM0C,EAAO,KAAK,cAAc,wBAAwB,EACtCA,EAAK,iBAAiB,eAAe,EAC7C,QAAQC,GAAY,CAC1B,MAAMC,EAAa,SAASD,EAAS,QAAQ,WAAY,EAAE,EACrDE,EAAYH,EAAK,cAAc,gCAAgCE,EAAa,CAAC,IAAI,EACjFE,EAAaJ,EAAK,cAAc,gCAAgCE,CAAU,IAAI,EAEhFC,GAAaC,GAAcD,EAAU,UAAU,SAAS,QAAQ,GAAKC,EAAW,UAAU,SAAS,QAAQ,EAC3GH,EAAS,UAAU,IAAI,QAAQ,EAE/BA,EAAS,UAAU,OAAO,QAAQ,CAE1C,CAAC,CACL,EAdwB,mBAgBlBP,EAAS,KAAK,cAAc,eAAe,EAC3CM,EAAO,KAAK,cAAc,wBAAwB,EAClDK,EAAWX,EAAO,iBAAiB,gBAAgB,EACnDY,EAAgBN,EAAK,iBAAiB,kBAAkB,EAE9D,GAAI,CAACK,EAASP,CAAK,EAAG,OAEtB,GAAI,CAACD,EACDQ,EAAS,QAAQ,CAACE,EAAKC,IAAQ,CAC3BD,EAAI,UAAU,OAAO,SAAUC,IAAQV,CAAK,EAC5C,MAAMW,EAAQT,EAAK,cAAc,gCAAgCQ,CAAG,IAAI,EACpEC,IAAOA,EAAM,MAAM,KAAO,GAClC,CAAC,EACDH,EAAc,QAAQ,CAACG,EAAOD,IAAQ,CAClCC,EAAM,UAAU,OAAO,SAAUD,IAAQV,CAAK,CAClD,CAAC,MACE,CACH,MAAMY,EAAaL,EAASP,CAAK,EAC3Ba,EAAajB,EAAO,iBAAiB,uBAAuB,EAElE,GAAIgB,EAAW,UAAU,SAAS,QAAQ,GAAKC,EAAW,QAAU,EAChE,OAGJD,EAAW,UAAU,OAAO,QAAQ,EACpC,MAAME,EAAcZ,EAAK,cAAc,gCAAgCF,CAAK,IAAI,EAC5Ec,IACAA,EAAY,UAAU,OAAO,QAAQ,EAChCA,EAAY,UAAU,SAAS,QAAQ,IACxCA,EAAY,MAAM,KAAO,IAGrC,CAEA,MAAMC,EAAe,MAAM,KAAKb,EAAK,iBAAiB,yBAAyB,CAAC,EAChF,GAAIa,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,EAGLV,EAAe,EAEf,MAAMgB,EAAcf,EAAK,cAAc,yBAAyB,EAChE,GAAIe,GAAe,OAAOA,EAAY,aAAgB,WAAY,CAC9D,MAAMC,EAAa,KAAK,cAAc,YAAY,EAC9CA,IACAA,EAAW,YAAcD,EAAY,YAAW,EAAG,eAAc,EAEzE,CACJ,EA3Ec,eAtBd,CAEA,mBAAoB,CAChBpC,EAAA,KAAKc,GAAL,UACJ,CAgGJ,EA9FIA,EAAA,YAT6CnC,EAAAkC,EAAA,mBAA1C,IAAMyB,EAANzB,EAyGF,eAAe,IAAI,mBAAmB,GACvC,eAAe,OAAO,oBAAqByB,CAAe,EC1GvD,MAAMC,EAAN,MAAMA,CAAc,CAGvB,YAAYC,EAAY,CAFxBzD,EAAA,KAAA0D,GAOA1D,EAAA,KAAA4B,EAAUhC,EAAA,IAAM,CAEZ,MAAM+D,EADc,MAAM,KAAK1C,EAAA,KAAKyC,GAAM,KAAK,QAAQ,EACzB,OAAOpC,GAAMA,EAAG,UAAY,OAAO,EAE3DsC,EAAaD,EAAU,IAAI,CAACE,EAAGf,IAE1B,4BADWA,IAAQ,EAAI,SAAW,EACG,iBAAiBA,CAAG,uBACnE,EAAE,KAAK,EAAE,EAEJgB,EAAWH,EAAU,IAAI,CAACE,EAAGf,IAExB,6BADWA,IAAQ,EAAI,SAAW,EACI,iBAAiBA,CAAG,WAAWA,EAAM,CAAC,QACtF,EAAE,KAAK,EAAE,EAEV7B,EAAA,KAAKyC,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,EAAiB9C,EAAA,KAAKyC,GAAM,iBAAiB,kBAAkB,EAErEK,GAAA,MAAAA,EAAgB,QAAQ,CAACC,EAAKlB,IAAQ,CAC9Ba,EAAUb,CAAG,GACb,WAAY,IAAM,CACdkB,EAAI,KAAKL,EAAUb,CAAG,CAAC,CAC3B,CAAC,CAET,EACJ,EAnHU,YAJN9B,EAAA,KAAK0C,EAAQD,GACbxC,EAAA,KAAKW,GAAL,UACJ,CAsHJ,EA3HI8B,EAAA,YAOA9B,EAAA,YARuBhC,EAAA4D,EAAA,iBAApB,IAAMS,EAANT,ECCQ,MAAMU,EAAN,MAAMA,UAAkB,WAAY,CAG/C,aAAc,CACV,MAAK,EAHTlE,EAAA,KAAAmE,EAAW,IAIP,KAAK,aAAa,CAAE,KAAM,MAAM,CAAE,CACtC,CAEA,mBAAoB,CACZlD,EAAA,KAAKkD,KAGT,KAAK,cAAgB,IAAIF,EAAc,KAAK,UAAU,EAGtDjD,EAAA,KAAKmD,EAAW,IAChBrE,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,EAvBIqE,EAAA,YAD+CvE,EAAAsE,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 initializeTable = (tbl) => {\n\n const ensureColgroup = (tbl) => {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n };\n\n const ensureThead = (tbl) => {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n };\n\n ensureColgroup(tbl);\n ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n };\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const leftContainer = this.querySelector('.ng-container-left');\n const bodyContainer = this.querySelector('.ng-container-body');\n const rightContainer = this.querySelector('.ng-container-right');\n\n // 1. 메인 바디 영역 (좌우 고정 컬럼 제외)\n if (bodyContainer) {\n const bodyTable = this.#tableElement.cloneNode(true);\n\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\n let leftWidth = 0;\n leftTable.querySelectorAll('col').forEach(col => {\n const w = parseInt(col.getAttribute('width'), 10);\n if (!isNaN(w)) leftWidth += w;\n });\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n\n const activeLeftWidth = leftWidth > 0 ? leftWidth : 0;\n leftContainer.style.flex = `0 0 ${activeLeftWidth}px`;\n leftContainer.style.width = `${activeLeftWidth}px`;\n }\n\n // 3. 우측 고정 영역 처리\n if (rightContainer) {\n const rightTable = this.#tableElement.cloneNode(true);\n rightTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'right') el.remove();\n });\n\n let rightWidth = 0;\n rightTable.querySelectorAll('col').forEach(col => {\n const w = parseInt(col.getAttribute('width'), 10);\n if (!isNaN(w)) rightWidth += w;\n });\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n\n const activeRightWidth = rightWidth > 0 ? rightWidth : 0;\n rightContainer.style.flex = `0 0 ${activeRightWidth}px`;\n rightContainer.style.width = `${activeRightWidth}px`;\n }\n\n trace.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);\n };\n\n getRowCount = () => {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n };\n\n #render = () => {\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n overflow: hidden;\n }\n \n nine-table-sheet .ng-container-top {\n display: flex;\n flex-direction: row;\n flex: 1;\n width: 100%;\n overflow: hidden;\n position: relative;\n }\n \n nine-table-sheet .ng-container-left {\n overflow: hidden;\n background: #ffffff;\n border-right: 1px solid #e5e7eb;\n }\n \n 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 overflow: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\n }\n \n nine-table-sheet .ng-container-bottom {\n display: flex;\n flex-direction: row;\n height: 16px;\n flex-shrink: 0;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n }\n \n nine-table-sheet nine-table-hscrollbar {\n flex: 1;\n overflow: hidden;\n display: block;\n }\n \n nine-table-sheet .ng-scroll-edge {\n width: 16px;\n flex-shrink: 0;\n background: #f3f4f6;\n }\n \n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n \n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n \n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class='ng-container-top'>\n <div class='ng-container-left'></div>\n <div class='ng-container-body'></div>\n <div class='ng-container-right'></div>\n <nine-table-vscrollbar></nine-table-vscrollbar>\n </div>\n <div class='ng-container-bottom'>\n <nine-table-hscrollbar></nine-table-hscrollbar>\n <div class='ng-scroll-edge'></div>\n </div>\n `;\n };\n\n disconnectedCallback() {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n };\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#init();\n };\n\n #init = () => {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.switchSheet(index, isMultiSelect);\n });\n\n this.switchSheet(0, false);\n };\n\n switchSheet = (index, isMultiSelect = false) => {\n\n const updateSplitters = () => {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n };\n\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n };\n\n\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","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 setTimeout( () => {\n $el.init(rawTables[idx]);\n })\n }\n });\n };\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot 하나만 넘겨서 내부에서 레이아웃 및 테이블 수집 처리\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_NineTableSheet","__privateAdd","_tableElement","__publicField","tableEl","initializeTable","tbl","ensureColgroup","firstRow","colCount","colgroup","defaultWidth","i","col","ensureThead","thead","clonedTable","__privateSet","__privateGet","leftContainer","bodyContainer","rightContainer","bodyTable","el","leftTable","leftWidth","w","activeLeftWidth","rightTable","rightWidth","activeRightWidth","_render","NineTableSheet","_NineTableSheets","_init","tabBar","e","tabItem","isMultiSelect","index","updateSplitters","body","splitter","splitIndex","leftSheet","rightSheet","tabItems","sheetElements","tab","idx","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","activeSheet","rowCountEl","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.59",
3
+ "version": "0.0.61",
4
4
  "description": "Grid component for real-time collaboration (Vanilla JS based)",
5
5
  "type": "module",
6
6
  "main": "./dist/nine-table.umd.js",