@ninebone/table 0.0.37 → 0.0.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,59 +1,59 @@
1
1
  var V = Object.defineProperty;
2
- var G = (s) => {
3
- throw TypeError(s);
2
+ var F = (i) => {
3
+ throw TypeError(i);
4
4
  };
5
- var c = (s, e) => V(s, "name", { value: e, configurable: !0 });
6
- var C = (s, e, t) => e.has(s) || G("Cannot " + t);
7
- var d = (s, e, t) => (C(s, e, "read from private field"), t ? t.call(s) : e.get(s)), b = (s, e, t) => e.has(s) ? G("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(s) : e.set(s, t), x = (s, e, t, o) => (C(s, e, "write to private field"), o ? o.call(s, t) : e.set(s, t), t), f = (s, e, t) => (C(s, e, "access private method"), t);
5
+ var r = (i, e) => V(i, "name", { value: e, configurable: !0 });
6
+ var $ = (i, e, t) => e.has(i) || F("Cannot " + t);
7
+ var c = (i, e, t) => ($(i, e, "read from private field"), t ? t.call(i) : e.get(i)), h = (i, e, t) => e.has(i) ? F("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(i) : e.set(i, t), x = (i, e, t, s) => ($(i, e, "write to private field"), s ? s.call(i, t) : e.set(i, t), t), f = (i, e, t) => ($(i, e, "access private method"), t);
8
8
  import { trace as X } from "@ninebone/util";
9
- const I = class I extends X.constructor {
9
+ const j = class j extends X.constructor {
10
10
  constructor() {
11
11
  super(), this.init("nine-table", "green");
12
12
  }
13
13
  };
14
- c(I, "Trace");
15
- let A = I;
16
- const E = new A();
17
- var k, m, J, O;
18
- const j = class j {
14
+ r(j, "Trace");
15
+ let A = j;
16
+ const k = new A();
17
+ var q, v, G, J;
18
+ const B = class B {
19
19
  constructor(e) {
20
- b(this, m);
21
- b(this, k);
22
- x(this, k, e);
20
+ h(this, v);
21
+ h(this, q);
22
+ x(this, q, e);
23
23
  }
24
24
  // [Public] 테이블 초기화 진입점 (필요한 최소한의 마크업 보정만 수행)
25
25
  initializeTable(e) {
26
- return f(this, m, J).call(this, e), f(this, m, O).call(this, e), e.classList.add("nine-table-element"), e;
26
+ return f(this, v, G).call(this, e), f(this, v, J).call(this, e), e.classList.add("nine-table-element"), e;
27
27
  }
28
28
  };
29
- k = new WeakMap(), m = new WeakSet(), // [Private] colgroup 보정
30
- J = /* @__PURE__ */ c(function(e) {
29
+ q = new WeakMap(), v = new WeakSet(), // [Private] colgroup 보정
30
+ G = /* @__PURE__ */ r(function(e) {
31
31
  var l;
32
32
  if (e.querySelector("colgroup")) return;
33
- const t = ((l = e.querySelector("tbody tr")) == null ? void 0 : l.querySelectorAll("th, td").length) || 1, o = document.createElement("colgroup"), n = Math.max(Math.floor((e.clientWidth || 600) / t), 100);
34
- for (let a = 0; a < t; a++) {
35
- const i = document.createElement("col");
36
- i.setAttribute("width", n), o.appendChild(i);
33
+ const t = ((l = e.querySelector("tbody tr")) == null ? void 0 : l.querySelectorAll("th, td").length) || 1, s = document.createElement("colgroup"), o = Math.max(Math.floor((e.clientWidth || 600) / t), 100);
34
+ for (let n = 0; n < t; n++) {
35
+ const b = document.createElement("col");
36
+ b.setAttribute("width", o), s.appendChild(b);
37
37
  }
38
- e.prepend(o);
38
+ e.prepend(s);
39
39
  }, "#ensureColgroup"), // [Private] thead 보정
40
- O = /* @__PURE__ */ c(function(e) {
40
+ J = /* @__PURE__ */ r(function(e) {
41
41
  if (e.querySelector("thead")) return;
42
- const t = document.createElement("thead"), o = e.querySelector("colgroup");
43
- o ? o.after(t) : e.prepend(t);
44
- }, "#ensureThead"), c(j, "TableInitializer");
45
- let H = j;
46
- var u, v, q, P;
42
+ const t = document.createElement("thead"), s = e.querySelector("colgroup");
43
+ s ? s.after(t) : e.prepend(t);
44
+ }, "#ensureThead"), r(B, "TableInitializer");
45
+ let z = B;
46
+ var p, w, E, O;
47
47
  const K = class K extends HTMLElement {
48
48
  constructor() {
49
49
  super();
50
- b(this, q);
51
- b(this, u, null);
52
- b(this, v);
53
- x(this, v, new H(this));
50
+ h(this, E);
51
+ h(this, p, null);
52
+ h(this, w);
53
+ x(this, w, new z(this));
54
54
  }
55
55
  connectedCallback() {
56
- f(this, q, P).call(this);
56
+ f(this, E, O).call(this);
57
57
  }
58
58
  /**
59
59
  * 외부(LayoutManager 등)에서 원본 테이블 엘리먼트를 주입받아 초기화 및 보정 수행
@@ -61,19 +61,19 @@ const K = class K extends HTMLElement {
61
61
  */
62
62
  init(t) {
63
63
  if (!t) return;
64
- const o = t.cloneNode(!0);
65
- x(this, u, d(this, v).initializeTable(o)), d(this, u).style.display = "table";
66
- const n = this.querySelector(".sheet-content-container");
67
- n && (n.innerHTML = "", n.appendChild(d(this, u))), E.log(`NineTableSheet initialized with table rows: ${this.getRowCount()}`);
64
+ const s = t.cloneNode(!0);
65
+ x(this, p, c(this, w).initializeTable(s)), c(this, p).style.display = "table";
66
+ const o = this.querySelector(".sheet-content-container");
67
+ o && (o.innerHTML = "", o.appendChild(c(this, p))), k.log(`NineTableSheet initialized with table rows: ${this.getRowCount()}`);
68
68
  }
69
69
  getRowCount() {
70
- return d(this, u) ? d(this, u).querySelectorAll("tbody tr").length : 0;
70
+ return c(this, p) ? c(this, p).querySelectorAll("tbody tr").length : 0;
71
71
  }
72
72
  disconnectedCallback() {
73
- this.innerHTML = "", E.log("NineTableSheet destroyed.");
73
+ this.innerHTML = "", k.log("NineTableSheet destroyed.");
74
74
  }
75
75
  };
76
- u = new WeakMap(), v = new WeakMap(), q = new WeakSet(), P = /* @__PURE__ */ c(function() {
76
+ p = new WeakMap(), w = new WeakMap(), E = new WeakSet(), O = /* @__PURE__ */ r(function() {
77
77
  this.innerHTML = `
78
78
  <style>
79
79
  nine-table-sheet {
@@ -119,86 +119,85 @@ u = new WeakMap(), v = new WeakMap(), q = new WeakSet(), P = /* @__PURE__ */ c(f
119
119
  <!-- 테이블이 동적으로 주입되는 영역 -->
120
120
  </div>
121
121
  `;
122
- }, "#render"), c(K, "NineTableSheet");
123
- let M = K;
124
- customElements.get("nine-table-sheet") || customElements.define("nine-table-sheet", M);
125
- var g, T, Q;
126
- const W = class W extends HTMLElement {
122
+ }, "#render"), r(K, "NineTableSheet");
123
+ let H = K;
124
+ customElements.get("nine-table-sheet") || customElements.define("nine-table-sheet", H);
125
+ var u, P, T, Q;
126
+ const N = class N extends HTMLElement {
127
127
  constructor() {
128
128
  super();
129
- b(this, g);
129
+ h(this, u);
130
130
  }
131
131
  connectedCallback() {
132
- }
133
- init(t) {
134
- if (!t || t.length === 0) return;
135
- this.querySelector(".nine-tab-bar").addEventListener("click", (n) => {
136
- const l = n.target.closest(".nine-tab-item");
137
- if (!l) return;
138
- const a = n.ctrlKey || n.metaKey || n.shiftKey, i = parseInt(l.dataset.index, 10);
139
- f(this, g, T).call(this, i, a);
140
- }), f(this, g, T).call(this, 0, !1);
132
+ f(this, u, P).call(this);
141
133
  }
142
134
  };
143
- g = new WeakSet(), T = /* @__PURE__ */ c(function(t, o = !1) {
144
- const n = this.querySelector(".nine-tab-bar"), l = this.querySelector("nine-table-sheets-body"), a = n.querySelectorAll(".nine-tab-item"), i = l.querySelectorAll("nine-table-sheet");
145
- if (!a[t]) return;
146
- if (!o)
147
- a.forEach((r, h) => {
148
- r.classList.toggle("active", h === t);
149
- const y = l.querySelector(`nine-table-sheet[data-index="${h}"]`);
150
- y && (y.style.flex = "");
151
- }), i.forEach((r, h) => {
152
- r.classList.toggle("active", h === t);
135
+ u = new WeakSet(), P = /* @__PURE__ */ r(function() {
136
+ const t = this.querySelector(".nine-tab-bar");
137
+ t && (t.addEventListener("click", (s) => {
138
+ const o = s.target.closest(".nine-tab-item");
139
+ if (!o) return;
140
+ const l = s.ctrlKey || s.metaKey || s.shiftKey, n = parseInt(o.dataset.index, 10);
141
+ f(this, u, T).call(this, n, l);
142
+ }), f(this, u, T).call(this, 0, !1));
143
+ }, "#init"), T = /* @__PURE__ */ r(function(t, s = !1) {
144
+ const o = this.querySelector(".nine-tab-bar"), l = this.querySelector("nine-table-sheets-body"), n = o.querySelectorAll(".nine-tab-item"), b = l.querySelectorAll("nine-table-sheet");
145
+ if (!n[t]) return;
146
+ if (!s)
147
+ n.forEach((a, d) => {
148
+ a.classList.toggle("active", d === t);
149
+ const g = l.querySelector(`nine-table-sheet[data-index="${d}"]`);
150
+ g && (g.style.flex = "");
151
+ }), b.forEach((a, d) => {
152
+ a.classList.toggle("active", d === t);
153
153
  });
154
154
  else {
155
- const r = a[t], h = n.querySelectorAll(".nine-tab-item.active");
156
- if (r.classList.contains("active") && h.length <= 1)
155
+ const a = n[t], d = o.querySelectorAll(".nine-tab-item.active");
156
+ if (a.classList.contains("active") && d.length <= 1)
157
157
  return;
158
- r.classList.toggle("active");
159
- const y = l.querySelector(`nine-table-sheet[data-index="${t}"]`);
160
- y && (y.classList.toggle("active"), y.classList.contains("active") || (y.style.flex = ""));
158
+ a.classList.toggle("active");
159
+ const g = l.querySelector(`nine-table-sheet[data-index="${t}"]`);
160
+ g && (g.classList.toggle("active"), g.classList.contains("active") || (g.style.flex = ""));
161
161
  }
162
- const S = Array.from(l.querySelectorAll("nine-table-sheet.active"));
163
- if (S.length > 1) {
164
- const r = 1 / S.length;
165
- S.forEach((h) => {
166
- (!h.style.flex || h.style.flex === "1 1 100%") && (h.style.flex = `${r} ${r} 0px`);
162
+ const m = Array.from(l.querySelectorAll("nine-table-sheet.active"));
163
+ if (m.length > 1) {
164
+ const a = 1 / m.length;
165
+ m.forEach((d) => {
166
+ (!d.style.flex || d.style.flex === "1 1 100%") && (d.style.flex = `${a} ${a} 0px`);
167
167
  });
168
168
  } else
169
- S.forEach((r) => {
170
- r.style.flex = "1 1 100%";
169
+ m.forEach((a) => {
170
+ a.style.flex = "1 1 100%";
171
171
  });
172
- f(this, g, Q).call(this);
173
- const $ = l.querySelector("nine-table-sheet.active");
174
- if ($ && typeof $.getRowCount == "function") {
175
- const r = this.querySelector("#row-count");
176
- r && (r.textContent = $.getRowCount().toLocaleString());
172
+ f(this, u, Q).call(this);
173
+ const C = l.querySelector("nine-table-sheet.active");
174
+ if (C && typeof C.getRowCount == "function") {
175
+ const a = this.querySelector("#row-count");
176
+ a && (a.textContent = C.getRowCount().toLocaleString());
177
177
  }
178
- }, "#switchSheet"), Q = /* @__PURE__ */ c(function() {
178
+ }, "#switchSheet"), Q = /* @__PURE__ */ r(function() {
179
179
  const t = this.querySelector("nine-table-sheets-body");
180
- t.querySelectorAll("nine-splitter").forEach((n) => {
181
- const l = parseInt(n.dataset.splitIndex, 10), a = t.querySelector(`nine-table-sheet[data-index="${l - 1}"]`), i = t.querySelector(`nine-table-sheet[data-index="${l}"]`);
182
- a && i && a.classList.contains("active") && i.classList.contains("active") ? n.classList.add("active") : n.classList.remove("active");
180
+ t.querySelectorAll("nine-splitter").forEach((o) => {
181
+ const l = parseInt(o.dataset.splitIndex, 10), n = t.querySelector(`nine-table-sheet[data-index="${l - 1}"]`), b = t.querySelector(`nine-table-sheet[data-index="${l}"]`);
182
+ n && b && n.classList.contains("active") && b.classList.contains("active") ? o.classList.add("active") : o.classList.remove("active");
183
183
  });
184
- }, "#updateSplitters"), c(W, "NineTableSheets");
185
- let z = W;
186
- customElements.get("nine-table-sheets") || customElements.define("nine-table-sheets", z);
187
- var p, L, U;
188
- const D = class D {
184
+ }, "#updateSplitters"), r(N, "NineTableSheets");
185
+ let M = N;
186
+ customElements.get("nine-table-sheets") || customElements.define("nine-table-sheets", M);
187
+ var y, L, U;
188
+ const W = class W {
189
189
  constructor(e) {
190
- b(this, L);
191
- b(this, p);
192
- x(this, p, e), f(this, L, U).call(this);
190
+ h(this, L);
191
+ h(this, y);
192
+ x(this, y, e), f(this, L, U).call(this);
193
193
  }
194
194
  };
195
- p = new WeakMap(), L = new WeakSet(), U = /* @__PURE__ */ c(function() {
196
- const e = Array.from(d(this, p).host.children), t = e.map((a, i) => `
197
- <nine-table-sheet class="${i === 0 ? "active" : ""}" data-index="${i}"></nine-table-sheet>
198
- `).join(""), o = e.map((a, i) => `
199
- <div class="nine-tab-item ${i === 0 ? "active" : ""}" data-index="${i}">Sheet ${i + 1}</div>
200
- `).join("");
201
- d(this, p).innerHTML = `
195
+ y = new WeakMap(), L = new WeakSet(), U = /* @__PURE__ */ r(function() {
196
+ const e = Array.from(c(this, y).host.children), t = e.map((l, n) => {
197
+ const m = `<nine-table-sheet class="${n === 0 ? "active" : ""}" data-index="${n}"></nine-table-sheet>`;
198
+ return n === 0 ? m : `<nine-splitter class="h" data-split-index="${n}"></nine-splitter>${m}`;
199
+ }).join(""), s = e.map((l, n) => `<div class="nine-tab-item ${n === 0 ? "active" : ""}" data-index="${n}">Sheet ${n + 1}</div>`).join("");
200
+ c(this, y).innerHTML = `
202
201
  <style>
203
202
  :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }
204
203
  nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }
@@ -227,11 +226,20 @@ p = new WeakMap(), L = new WeakSet(), U = /* @__PURE__ */ c(function() {
227
226
  display: none !important;
228
227
  height: 100%;
229
228
  overflow: auto;
230
- flex: 1 1 100%;
231
229
  }
232
230
  nine-table-sheet.active {
233
231
  display: block !important;
234
232
  }
233
+ nine-table-sheets-body nine-splitter {
234
+ width: 4px;
235
+ background: #e5e7eb;
236
+ cursor: col-resize;
237
+ flex-shrink: 0;
238
+ display: none !important;
239
+ }
240
+ nine-table-sheets-body nine-splitter.active {
241
+ display: block !important;
242
+ }
235
243
  nine-table-sheets-footer {
236
244
  display: flex;
237
245
  height: 32px;
@@ -282,35 +290,35 @@ p = new WeakMap(), L = new WeakSet(), U = /* @__PURE__ */ c(function() {
282
290
  <nine-table-sheets>
283
291
  <nine-table-sheets-body>${t}</nine-table-sheets-body>
284
292
  <nine-table-sheets-footer>
285
- <div class="nine-tab-bar">${o}</div>
293
+ <div class="nine-tab-bar">${s}</div>
286
294
  <div class="sheets-counter">Total : <span id="row-count">0</span></div>
287
295
  </nine-table-sheets-footer>
288
296
  </nine-table-sheets>
289
297
  <nine-table-analysis></nine-table-analysis>
290
298
  </nine-table-body>
291
299
  <nine-table-footer></nine-table-footer>
292
- `;
293
- const n = d(this, p).querySelector("nine-table-sheets");
294
- d(this, p).querySelectorAll("nine-table-sheet").forEach((a, i) => {
295
- e[i] && (e[i].style.display = "none", a.init(e[i]));
296
- }), n == null || n.init(e);
297
- }, "#render"), c(D, "LayoutManager");
298
- let R = D;
299
- var w;
300
- const F = class F extends HTMLElement {
300
+ `, c(this, y).querySelector("nine-table-sheets");
301
+ const o = c(this, y).querySelectorAll("nine-table-sheet");
302
+ o == null || o.forEach((l, n) => {
303
+ e[n] && (e[n].style.display = "none", l.init(e[n]));
304
+ });
305
+ }, "#render"), r(W, "LayoutManager");
306
+ let R = W;
307
+ var S;
308
+ const D = class D extends HTMLElement {
301
309
  constructor() {
302
310
  super();
303
- b(this, w, !1);
311
+ h(this, S, !1);
304
312
  this.attachShadow({ mode: "open" });
305
313
  }
306
314
  connectedCallback() {
307
- d(this, w) || (this.layoutManager = new R(this.shadowRoot), x(this, w, !0), E.log("NineTable connected."), this.dispatchEvent(new CustomEvent("load", { bubbles: !0, detail: { target: this } })));
315
+ c(this, S) || (this.layoutManager = new R(this.shadowRoot), x(this, S, !0), k.log("NineTable connected."), this.dispatchEvent(new CustomEvent("load", { bubbles: !0, detail: { target: this } })));
308
316
  }
309
317
  disconnectedCallback() {
310
- E.log("NineTable disconnected.");
318
+ k.log("NineTable disconnected.");
311
319
  }
312
320
  };
313
- w = new WeakMap(), c(F, "NineTable");
314
- let B = F;
315
- customElements.get("nine-table") || customElements.define("nine-table", B);
321
+ S = new WeakMap(), r(D, "NineTable");
322
+ let I = D;
323
+ customElements.get("nine-table") || customElements.define("nine-table", I);
316
324
  //# sourceMappingURL=nine-table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nine-table.js","sources":["../src/external/NoPeer.js","../src/ui/TableInitializer.js","../src/ui/nine-table-sheet.js","../src/ui/nine-table-sheets.js","../src/ui/LayoutManager.js","../src/core/nine-table.js"],"sourcesContent":["import { trace as traceOrigin } from '@ninebone/util';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-table\", \"green\");\n }\n}\n\nexport const trace = new Trace();","export class TableInitializer {\n #container;\n\n constructor(container) {\n this.#container = container;\n }\n\n // [Public] 테이블 초기화 진입점 (필요한 최소한의 마크업 보정만 수행)\n initializeTable(tbl) {\n this.#ensureColgroup(tbl);\n this.#ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n }\n\n // [Private] colgroup 보정\n #ensureColgroup(tbl) {\n if (tbl.querySelector('colgroup')) return;\n\n const colCount = tbl.querySelector('tbody tr')?.querySelectorAll('th, td').length || 1;\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n }\n\n // [Private] thead 보정\n #ensureThead(tbl) {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n }\n}","import { trace } from \"@nopeer\";\nimport { TableInitializer } from \"./TableInitializer.js\"; // 경로에 맞게 조정 필요\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n #initializer;\n\n constructor() {\n super();\n this.#initializer = new TableInitializer(this);\n }\n\n connectedCallback() {\n this.#render();\n }\n\n /**\n * 외부(LayoutManager 등)에서 원본 테이블 엘리먼트를 주입받아 초기화 및 보정 수행\n * @param {HTMLTableElement} tableEl\n */\n init(tableEl) {\n if (!tableEl) return;\n\n // 원본 테이블 복제 후 TableInitializer를 통한 구조 보정\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = this.#initializer.initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const container = this.querySelector('.sheet-content-container');\n if (container) {\n container.innerHTML = '';\n container.appendChild(this.#tableElement);\n }\n\n trace.log(`NineTableSheet initialized with table rows: ${this.getRowCount()}`);\n }\n\n getRowCount() {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n }\n\n #render() {\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: block;\n width: 100%;\n height: 100%;\n overflow: auto;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n }\n\n nine-table-sheet .sheet-content-container {\n width: 100%;\n min-width: fit-content;\n }\n\n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n\n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n\n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class=\"sheet-content-container\">\n <!-- 테이블이 동적으로 주입되는 영역 -->\n </div>\n `;\n }\n\n disconnectedCallback() {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n }\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}\n","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {}\n\n init(rawChildren) {\n if (!rawChildren || rawChildren.length === 0) return;\n\n const tabBar = this.querySelector('.nine-tab-bar');\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.#switchSheet(index, isMultiSelect);\n });\n\n this.#switchSheet(0, false);\n }\n\n #switchSheet(index, isMultiSelect = false) {\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n this.#updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n }\n\n #updateSplitters() {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n }\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","import './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n }\n\n #render() {\n const rawElements = Array.from(this.#root.host.children);\n\n const sheetsHtml = rawElements.map((_, idx) => `\n <nine-table-sheet class=\"${idx === 0 ? 'active' : ''}\" data-index=\"${idx}\"></nine-table-sheet>\n `).join('');\n\n const tabsHtml = rawElements.map((_, idx) => `\n <div class=\"nine-tab-item ${idx === 0 ? 'active' : ''}\" 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-splitter></nine-splitter>\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 // 매니저에서 직접 각 시트 엘리먼트에 원본 데이터 주입 처리\n const sheetsContainer = this.#root.querySelector('nine-table-sheets');\n const sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n sheetElements.forEach((sheetEl, idx) => {\n if (rawElements[idx]) {\n rawElements[idx].style.display = 'none';\n sheetEl.init(rawElements[idx]);\n }\n });\n\n sheetsContainer?.init(rawElements);\n }\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot 하나만 넘겨서 내부에서 레이아웃 및 테이블 수집 처리\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_TableInitializer","container","__privateAdd","_TableInitializer_instances","_container","__privateSet","tbl","__privateMethod","ensureColgroup_fn","ensureThead_fn","colCount","_a","colgroup","defaultWidth","i","col","thead","TableInitializer","_NineTableSheet","_NineTableSheet_instances","_tableElement","_initializer","render_fn","tableEl","clonedTable","__privateGet","NineTableSheet","_NineTableSheets","_NineTableSheets_instances","rawChildren","e","tabItem","isMultiSelect","index","switchSheet_fn","tabBar","body","tabItems","sheetElements","tab","idx","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","updateSplitters_fn","activeSheet","rowCountEl","splitter","splitIndex","leftSheet","rightSheet","NineTableSheets","_LayoutManager","shadowRoot","_LayoutManager_instances","_root","rawElements","sheetsHtml","_","tabsHtml","sheetsContainer","sheetEl","LayoutManager","_NineTable","_created","NineTable"],"mappings":"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"}
1
+ {"version":3,"file":"nine-table.js","sources":["../src/external/NoPeer.js","../src/ui/TableInitializer.js","../src/ui/nine-table-sheet.js","../src/ui/nine-table-sheets.js","../src/ui/LayoutManager.js","../src/core/nine-table.js"],"sourcesContent":["import { trace as traceOrigin } from '@ninebone/util';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-table\", \"green\");\n }\n}\n\nexport const trace = new Trace();","export class TableInitializer {\n #container;\n\n constructor(container) {\n this.#container = container;\n }\n\n // [Public] 테이블 초기화 진입점 (필요한 최소한의 마크업 보정만 수행)\n initializeTable(tbl) {\n this.#ensureColgroup(tbl);\n this.#ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n }\n\n // [Private] colgroup 보정\n #ensureColgroup(tbl) {\n if (tbl.querySelector('colgroup')) return;\n\n const colCount = tbl.querySelector('tbody tr')?.querySelectorAll('th, td').length || 1;\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n }\n\n // [Private] thead 보정\n #ensureThead(tbl) {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n }\n}","import { trace } from \"@nopeer\";\nimport { TableInitializer } from \"./TableInitializer.js\"; // 경로에 맞게 조정 필요\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n #initializer;\n\n constructor() {\n super();\n this.#initializer = new TableInitializer(this);\n }\n\n connectedCallback() {\n this.#render();\n }\n\n /**\n * 외부(LayoutManager 등)에서 원본 테이블 엘리먼트를 주입받아 초기화 및 보정 수행\n * @param {HTMLTableElement} tableEl\n */\n init(tableEl) {\n if (!tableEl) return;\n\n // 원본 테이블 복제 후 TableInitializer를 통한 구조 보정\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = this.#initializer.initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const container = this.querySelector('.sheet-content-container');\n if (container) {\n container.innerHTML = '';\n container.appendChild(this.#tableElement);\n }\n\n trace.log(`NineTableSheet initialized with table rows: ${this.getRowCount()}`);\n }\n\n getRowCount() {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n }\n\n #render() {\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: block;\n width: 100%;\n height: 100%;\n overflow: auto;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n }\n\n nine-table-sheet .sheet-content-container {\n width: 100%;\n min-width: fit-content;\n }\n\n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n\n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n\n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class=\"sheet-content-container\">\n <!-- 테이블이 동적으로 주입되는 영역 -->\n </div>\n `;\n }\n\n disconnectedCallback() {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n }\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}\n","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#init();\n }\n\n #init() {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.#switchSheet(index, isMultiSelect);\n });\n\n this.#switchSheet(0, false);\n }\n\n #switchSheet(index, isMultiSelect = false) {\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n this.#updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n }\n\n #updateSplitters() {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n }\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","import './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n }\n\n #render() {\n const rawElements = Array.from(this.#root.host.children);\n\n const sheetsHtml = rawElements.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n const sheetTag = `<nine-table-sheet class=\"${className}\" data-index=\"${idx}\"></nine-table-sheet>`;\n\n if (idx === 0) {\n return sheetTag;\n }\n return `<nine-splitter class=\"h\" data-split-index=\"${idx}\"></nine-splitter>${sheetTag}`;\n }).join('');\n\n const tabsHtml = rawElements.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 }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-body nine-splitter {\n width: 4px;\n background: #e5e7eb;\n cursor: col-resize;\n flex-shrink: 0;\n display: none !important;\n }\n nine-table-sheets-body nine-splitter.active {\n display: block !important;\n }\n nine-table-sheets-footer {\n display: flex;\n height: 32px;\n background: #f3f4f6;\n border-top: 1px solid #e5e7eb;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n flex-shrink: 0;\n }\n nine-table-sheets .nine-tab-bar {\n display: flex;\n align-items: center;\n gap: 2px;\n overflow-x: auto;\n flex: 1;\n height: 100%;\n }\n nine-table-sheets .nine-tab-item {\n padding: 4px 12px;\n cursor: pointer;\n font-size: 12px;\n color: #4b5563;\n background: #e5e7eb;\n border: 1px solid #d1d5db;\n border-top: none;\n border-radius: 0 0 3px 3px;\n user-select: none;\n }\n nine-table-sheets .nine-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n nine-table-sheets .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-splitter></nine-splitter>\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 $sheetsContainer = this.#root.querySelector('nine-table-sheets');\n const $sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n $sheetElements?.forEach(($el, idx) => {\n if (rawElements[idx]) {\n rawElements[idx].style.display = 'none';\n $el.init(rawElements[idx]);\n }\n });\n }\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot 하나만 넘겨서 내부에서 레이아웃 및 테이블 수집 처리\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_TableInitializer","container","__privateAdd","_TableInitializer_instances","_container","__privateSet","tbl","__privateMethod","ensureColgroup_fn","ensureThead_fn","colCount","_a","colgroup","defaultWidth","i","col","thead","TableInitializer","_NineTableSheet","_NineTableSheet_instances","_tableElement","_initializer","render_fn","tableEl","clonedTable","__privateGet","NineTableSheet","_NineTableSheets","_NineTableSheets_instances","init_fn","tabBar","e","tabItem","isMultiSelect","index","switchSheet_fn","body","tabItems","sheetElements","tab","idx","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","updateSplitters_fn","activeSheet","rowCountEl","splitter","splitIndex","leftSheet","rightSheet","NineTableSheets","_LayoutManager","shadowRoot","_LayoutManager_instances","_root","rawElements","sheetsHtml","_","sheetTag","tabsHtml","$sheetElements","$el","LayoutManager","_NineTable","_created","NineTable"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- (function(t,n){typeof exports=="object"&&typeof module<"u"?n(require("@ninebone/util")):typeof define=="function"&&define.amd?define(["@ninebone/util"],n):(t=typeof globalThis<"u"?globalThis:t||self,n(t.NineboneUtil))})(this,function(t){"use strict";var Q=Object.defineProperty;var F=t=>{throw TypeError(t)};var h=(t,n)=>Q(t,"name",{value:n,configurable:!0});var U=(t,n,l)=>n.has(t)||F("Cannot "+l);var b=(t,n,l)=>(U(t,n,"read from private field"),l?l.call(t):n.get(t)),u=(t,n,l)=>n.has(t)?F("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(t):n.set(t,l),S=(t,n,l,v)=>(U(t,n,"write to private field"),v?v.call(t,l):n.set(t,l),l),x=(t,n,l)=>(U(t,n,"access private method"),l);var k,w,G,J,p,E,L,N,g,D,O,y,C,P,q;const z=class z extends t.trace.constructor{constructor(){super(),this.init("nine-table","green")}};h(z,"Trace");let n=z;const l=new n,R=class R{constructor(e){u(this,w);u(this,k);S(this,k,e)}initializeTable(e){return x(this,w,G).call(this,e),x(this,w,J).call(this,e),e.classList.add("nine-table-element"),e}};k=new WeakMap,w=new WeakSet,G=h(function(e){var a;if(e.querySelector("colgroup"))return;const i=((a=e.querySelector("tbody tr"))==null?void 0:a.querySelectorAll("th, td").length)||1,d=document.createElement("colgroup"),s=Math.max(Math.floor((e.clientWidth||600)/i),100);for(let r=0;r<i;r++){const o=document.createElement("col");o.setAttribute("width",s),d.appendChild(o)}e.prepend(d)},"#ensureColgroup"),J=h(function(e){if(e.querySelector("thead"))return;const i=document.createElement("thead"),d=e.querySelector("colgroup");d?d.after(i):e.prepend(i)},"#ensureThead"),h(R,"TableInitializer");let v=R;const j=class j extends HTMLElement{constructor(){super();u(this,L);u(this,p,null);u(this,E);S(this,E,new v(this))}connectedCallback(){x(this,L,N).call(this)}init(i){if(!i)return;const d=i.cloneNode(!0);S(this,p,b(this,E).initializeTable(d)),b(this,p).style.display="table";const s=this.querySelector(".sheet-content-container");s&&(s.innerHTML="",s.appendChild(b(this,p))),l.log(`NineTableSheet initialized with table rows: ${this.getRowCount()}`)}getRowCount(){return b(this,p)?b(this,p).querySelectorAll("tbody tr").length:0}disconnectedCallback(){this.innerHTML="",l.log("NineTableSheet destroyed.")}};p=new WeakMap,E=new WeakMap,L=new WeakSet,N=h(function(){this.innerHTML=`
1
+ (function(t,n){typeof exports=="object"&&typeof module<"u"?n(require("@ninebone/util")):typeof define=="function"&&define.amd?define(["@ninebone/util"],n):(t=typeof globalThis<"u"?globalThis:t||self,n(t.NineboneUtil))})(this,function(t){"use strict";var V=Object.defineProperty;var D=t=>{throw TypeError(t)};var d=(t,n)=>V(t,"name",{value:n,configurable:!0});var W=(t,n,l)=>n.has(t)||D("Cannot "+l);var h=(t,n,l)=>(W(t,n,"read from private field"),l?l.call(t):n.get(t)),f=(t,n,l)=>n.has(t)?D("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(t):n.set(t,l),k=(t,n,l,w)=>(W(t,n,"write to private field"),w?w.call(t,l):n.set(t,l),l),y=(t,n,l)=>(W(t,n,"access private method"),l);var L,S,F,G,m,q,C,J,u,O,U,P,g,$,Q,E;const M=class M extends t.trace.constructor{constructor(){super(),this.init("nine-table","green")}};d(M,"Trace");let n=M;const l=new n,R=class R{constructor(e){f(this,S);f(this,L);k(this,L,e)}initializeTable(e){return y(this,S,F).call(this,e),y(this,S,G).call(this,e),e.classList.add("nine-table-element"),e}};L=new WeakMap,S=new WeakSet,F=d(function(e){var r;if(e.querySelector("colgroup"))return;const s=((r=e.querySelector("tbody tr"))==null?void 0:r.querySelectorAll("th, td").length)||1,a=document.createElement("colgroup"),o=Math.max(Math.floor((e.clientWidth||600)/s),100);for(let i=0;i<s;i++){const p=document.createElement("col");p.setAttribute("width",o),a.appendChild(p)}e.prepend(a)},"#ensureColgroup"),G=d(function(e){if(e.querySelector("thead"))return;const s=document.createElement("thead"),a=e.querySelector("colgroup");a?a.after(s):e.prepend(s)},"#ensureThead"),d(R,"TableInitializer");let w=R;const j=class j extends HTMLElement{constructor(){super();f(this,C);f(this,m,null);f(this,q);k(this,q,new w(this))}connectedCallback(){y(this,C,J).call(this)}init(s){if(!s)return;const a=s.cloneNode(!0);k(this,m,h(this,q).initializeTable(a)),h(this,m).style.display="table";const o=this.querySelector(".sheet-content-container");o&&(o.innerHTML="",o.appendChild(h(this,m))),l.log(`NineTableSheet initialized with table rows: ${this.getRowCount()}`)}getRowCount(){return h(this,m)?h(this,m).querySelectorAll("tbody tr").length:0}disconnectedCallback(){this.innerHTML="",l.log("NineTableSheet destroyed.")}};m=new WeakMap,q=new WeakMap,C=new WeakSet,J=d(function(){this.innerHTML=`
2
2
  <style>
3
3
  nine-table-sheet {
4
4
  display: block;
@@ -42,11 +42,7 @@
42
42
  <div class="sheet-content-container">
43
43
  <!-- 테이블이 동적으로 주입되는 영역 -->
44
44
  </div>
45
- `},"#render"),h(j,"NineTableSheet");let A=j;customElements.get("nine-table-sheet")||customElements.define("nine-table-sheet",A);const B=class B extends HTMLElement{constructor(){super();u(this,g)}connectedCallback(){}init(i){if(!i||i.length===0)return;this.querySelector(".nine-tab-bar").addEventListener("click",s=>{const a=s.target.closest(".nine-tab-item");if(!a)return;const r=s.ctrlKey||s.metaKey||s.shiftKey,o=parseInt(a.dataset.index,10);x(this,g,D).call(this,o,r)}),x(this,g,D).call(this,0,!1)}};g=new WeakSet,D=h(function(i,d=!1){const s=this.querySelector(".nine-tab-bar"),a=this.querySelector("nine-table-sheets-body"),r=s.querySelectorAll(".nine-tab-item"),o=a.querySelectorAll("nine-table-sheet");if(!r[i])return;if(!d)r.forEach((c,f)=>{c.classList.toggle("active",f===i);const m=a.querySelector(`nine-table-sheet[data-index="${f}"]`);m&&(m.style.flex="")}),o.forEach((c,f)=>{c.classList.toggle("active",f===i)});else{const c=r[i],f=s.querySelectorAll(".nine-tab-item.active");if(c.classList.contains("active")&&f.length<=1)return;c.classList.toggle("active");const m=a.querySelector(`nine-table-sheet[data-index="${i}"]`);m&&(m.classList.toggle("active"),m.classList.contains("active")||(m.style.flex=""))}const $=Array.from(a.querySelectorAll("nine-table-sheet.active"));if($.length>1){const c=1/$.length;$.forEach(f=>{(!f.style.flex||f.style.flex==="1 1 100%")&&(f.style.flex=`${c} ${c} 0px`)})}else $.forEach(c=>{c.style.flex="1 1 100%"});x(this,g,O).call(this);const W=a.querySelector("nine-table-sheet.active");if(W&&typeof W.getRowCount=="function"){const c=this.querySelector("#row-count");c&&(c.textContent=W.getRowCount().toLocaleString())}},"#switchSheet"),O=h(function(){const i=this.querySelector("nine-table-sheets-body");i.querySelectorAll("nine-splitter").forEach(s=>{const a=parseInt(s.dataset.splitIndex,10),r=i.querySelector(`nine-table-sheet[data-index="${a-1}"]`),o=i.querySelector(`nine-table-sheet[data-index="${a}"]`);r&&o&&r.classList.contains("active")&&o.classList.contains("active")?s.classList.add("active"):s.classList.remove("active")})},"#updateSplitters"),h(B,"NineTableSheets");let T=B;customElements.get("nine-table-sheets")||customElements.define("nine-table-sheets",T);const I=class I{constructor(e){u(this,C);u(this,y);S(this,y,e),x(this,C,P).call(this)}};y=new WeakMap,C=new WeakSet,P=h(function(){const e=Array.from(b(this,y).host.children),i=e.map((r,o)=>`
46
- <nine-table-sheet class="${o===0?"active":""}" data-index="${o}"></nine-table-sheet>
47
- `).join(""),d=e.map((r,o)=>`
48
- <div class="nine-tab-item ${o===0?"active":""}" data-index="${o}">Sheet ${o+1}</div>
49
- `).join("");b(this,y).innerHTML=`
45
+ `},"#render"),d(j,"NineTableSheet");let A=j;customElements.get("nine-table-sheet")||customElements.define("nine-table-sheet",A);const I=class I extends HTMLElement{constructor(){super();f(this,u)}connectedCallback(){y(this,u,O).call(this)}};u=new WeakSet,O=d(function(){const s=this.querySelector(".nine-tab-bar");s&&(s.addEventListener("click",a=>{const o=a.target.closest(".nine-tab-item");if(!o)return;const r=a.ctrlKey||a.metaKey||a.shiftKey,i=parseInt(o.dataset.index,10);y(this,u,U).call(this,i,r)}),y(this,u,U).call(this,0,!1))},"#init"),U=d(function(s,a=!1){const o=this.querySelector(".nine-tab-bar"),r=this.querySelector("nine-table-sheets-body"),i=o.querySelectorAll(".nine-tab-item"),p=r.querySelectorAll("nine-table-sheet");if(!i[s])return;if(!a)i.forEach((c,b)=>{c.classList.toggle("active",b===s);const v=r.querySelector(`nine-table-sheet[data-index="${b}"]`);v&&(v.style.flex="")}),p.forEach((c,b)=>{c.classList.toggle("active",b===s)});else{const c=i[s],b=o.querySelectorAll(".nine-tab-item.active");if(c.classList.contains("active")&&b.length<=1)return;c.classList.toggle("active");const v=r.querySelector(`nine-table-sheet[data-index="${s}"]`);v&&(v.classList.toggle("active"),v.classList.contains("active")||(v.style.flex=""))}const x=Array.from(r.querySelectorAll("nine-table-sheet.active"));if(x.length>1){const c=1/x.length;x.forEach(b=>{(!b.style.flex||b.style.flex==="1 1 100%")&&(b.style.flex=`${c} ${c} 0px`)})}else x.forEach(c=>{c.style.flex="1 1 100%"});y(this,u,P).call(this);const K=r.querySelector("nine-table-sheet.active");if(K&&typeof K.getRowCount=="function"){const c=this.querySelector("#row-count");c&&(c.textContent=K.getRowCount().toLocaleString())}},"#switchSheet"),P=d(function(){const s=this.querySelector("nine-table-sheets-body");s.querySelectorAll("nine-splitter").forEach(o=>{const r=parseInt(o.dataset.splitIndex,10),i=s.querySelector(`nine-table-sheet[data-index="${r-1}"]`),p=s.querySelector(`nine-table-sheet[data-index="${r}"]`);i&&p&&i.classList.contains("active")&&p.classList.contains("active")?o.classList.add("active"):o.classList.remove("active")})},"#updateSplitters"),d(I,"NineTableSheets");let T=I;customElements.get("nine-table-sheets")||customElements.define("nine-table-sheets",T);const N=class N{constructor(e){f(this,$);f(this,g);k(this,g,e),y(this,$,Q).call(this)}};g=new WeakMap,$=new WeakSet,Q=d(function(){const e=Array.from(h(this,g).host.children),s=e.map((r,i)=>{const x=`<nine-table-sheet class="${i===0?"active":""}" data-index="${i}"></nine-table-sheet>`;return i===0?x:`<nine-splitter class="h" data-split-index="${i}"></nine-splitter>${x}`}).join(""),a=e.map((r,i)=>`<div class="nine-tab-item ${i===0?"active":""}" data-index="${i}">Sheet ${i+1}</div>`).join("");h(this,g).innerHTML=`
50
46
  <style>
51
47
  :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }
52
48
  nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }
@@ -75,11 +71,20 @@
75
71
  display: none !important;
76
72
  height: 100%;
77
73
  overflow: auto;
78
- flex: 1 1 100%;
79
74
  }
80
75
  nine-table-sheet.active {
81
76
  display: block !important;
82
77
  }
78
+ nine-table-sheets-body nine-splitter {
79
+ width: 4px;
80
+ background: #e5e7eb;
81
+ cursor: col-resize;
82
+ flex-shrink: 0;
83
+ display: none !important;
84
+ }
85
+ nine-table-sheets-body nine-splitter.active {
86
+ display: block !important;
87
+ }
83
88
  nine-table-sheets-footer {
84
89
  display: flex;
85
90
  height: 32px;
@@ -128,14 +133,14 @@
128
133
  <nine-table-summary></nine-table-summary>
129
134
  <nine-splitter></nine-splitter>
130
135
  <nine-table-sheets>
131
- <nine-table-sheets-body>${i}</nine-table-sheets-body>
136
+ <nine-table-sheets-body>${s}</nine-table-sheets-body>
132
137
  <nine-table-sheets-footer>
133
- <div class="nine-tab-bar">${d}</div>
138
+ <div class="nine-tab-bar">${a}</div>
134
139
  <div class="sheets-counter">Total : <span id="row-count">0</span></div>
135
140
  </nine-table-sheets-footer>
136
141
  </nine-table-sheets>
137
142
  <nine-table-analysis></nine-table-analysis>
138
143
  </nine-table-body>
139
144
  <nine-table-footer></nine-table-footer>
140
- `;const s=b(this,y).querySelector("nine-table-sheets");b(this,y).querySelectorAll("nine-table-sheet").forEach((r,o)=>{e[o]&&(e[o].style.display="none",r.init(e[o]))}),s==null||s.init(e)},"#render"),h(I,"LayoutManager");let H=I;const K=class K extends HTMLElement{constructor(){super();u(this,q,!1);this.attachShadow({mode:"open"})}connectedCallback(){b(this,q)||(this.layoutManager=new H(this.shadowRoot),S(this,q,!0),l.log("NineTable connected."),this.dispatchEvent(new CustomEvent("load",{bubbles:!0,detail:{target:this}})))}disconnectedCallback(){l.log("NineTable disconnected.")}};q=new WeakMap,h(K,"NineTable");let M=K;customElements.get("nine-table")||customElements.define("nine-table",M)});
145
+ `,h(this,g).querySelector("nine-table-sheets");const o=h(this,g).querySelectorAll("nine-table-sheet");o==null||o.forEach((r,i)=>{e[i]&&(e[i].style.display="none",r.init(e[i]))})},"#render"),d(N,"LayoutManager");let z=N;const B=class B extends HTMLElement{constructor(){super();f(this,E,!1);this.attachShadow({mode:"open"})}connectedCallback(){h(this,E)||(this.layoutManager=new z(this.shadowRoot),k(this,E,!0),l.log("NineTable connected."),this.dispatchEvent(new CustomEvent("load",{bubbles:!0,detail:{target:this}})))}disconnectedCallback(){l.log("NineTable disconnected.")}};E=new WeakMap,d(B,"NineTable");let H=B;customElements.get("nine-table")||customElements.define("nine-table",H)});
141
146
  //# sourceMappingURL=nine-table.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nine-table.umd.js","sources":["../src/external/NoPeer.js","../src/ui/TableInitializer.js","../src/ui/nine-table-sheet.js","../src/ui/nine-table-sheets.js","../src/ui/LayoutManager.js","../src/core/nine-table.js"],"sourcesContent":["import { trace as traceOrigin } from '@ninebone/util';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-table\", \"green\");\n }\n}\n\nexport const trace = new Trace();","export class TableInitializer {\n #container;\n\n constructor(container) {\n this.#container = container;\n }\n\n // [Public] 테이블 초기화 진입점 (필요한 최소한의 마크업 보정만 수행)\n initializeTable(tbl) {\n this.#ensureColgroup(tbl);\n this.#ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n }\n\n // [Private] colgroup 보정\n #ensureColgroup(tbl) {\n if (tbl.querySelector('colgroup')) return;\n\n const colCount = tbl.querySelector('tbody tr')?.querySelectorAll('th, td').length || 1;\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n }\n\n // [Private] thead 보정\n #ensureThead(tbl) {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n }\n}","import { trace } from \"@nopeer\";\nimport { TableInitializer } from \"./TableInitializer.js\"; // 경로에 맞게 조정 필요\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n #initializer;\n\n constructor() {\n super();\n this.#initializer = new TableInitializer(this);\n }\n\n connectedCallback() {\n this.#render();\n }\n\n /**\n * 외부(LayoutManager 등)에서 원본 테이블 엘리먼트를 주입받아 초기화 및 보정 수행\n * @param {HTMLTableElement} tableEl\n */\n init(tableEl) {\n if (!tableEl) return;\n\n // 원본 테이블 복제 후 TableInitializer를 통한 구조 보정\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = this.#initializer.initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const container = this.querySelector('.sheet-content-container');\n if (container) {\n container.innerHTML = '';\n container.appendChild(this.#tableElement);\n }\n\n trace.log(`NineTableSheet initialized with table rows: ${this.getRowCount()}`);\n }\n\n getRowCount() {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n }\n\n #render() {\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: block;\n width: 100%;\n height: 100%;\n overflow: auto;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n }\n\n nine-table-sheet .sheet-content-container {\n width: 100%;\n min-width: fit-content;\n }\n\n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n\n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n\n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class=\"sheet-content-container\">\n <!-- 테이블이 동적으로 주입되는 영역 -->\n </div>\n `;\n }\n\n disconnectedCallback() {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n }\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}\n","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {}\n\n init(rawChildren) {\n if (!rawChildren || rawChildren.length === 0) return;\n\n const tabBar = this.querySelector('.nine-tab-bar');\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.#switchSheet(index, isMultiSelect);\n });\n\n this.#switchSheet(0, false);\n }\n\n #switchSheet(index, isMultiSelect = false) {\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n this.#updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n }\n\n #updateSplitters() {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n }\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","import './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n }\n\n #render() {\n const rawElements = Array.from(this.#root.host.children);\n\n const sheetsHtml = rawElements.map((_, idx) => `\n <nine-table-sheet class=\"${idx === 0 ? 'active' : ''}\" data-index=\"${idx}\"></nine-table-sheet>\n `).join('');\n\n const tabsHtml = rawElements.map((_, idx) => `\n <div class=\"nine-tab-item ${idx === 0 ? 'active' : ''}\" 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-splitter></nine-splitter>\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 // 매니저에서 직접 각 시트 엘리먼트에 원본 데이터 주입 처리\n const sheetsContainer = this.#root.querySelector('nine-table-sheets');\n const sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n sheetElements.forEach((sheetEl, idx) => {\n if (rawElements[idx]) {\n rawElements[idx].style.display = 'none';\n sheetEl.init(rawElements[idx]);\n }\n });\n\n sheetsContainer?.init(rawElements);\n }\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot 하나만 넘겨서 내부에서 레이아웃 및 테이블 수집 처리\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_TableInitializer","container","__privateAdd","_TableInitializer_instances","_container","__privateSet","tbl","__privateMethod","ensureColgroup_fn","ensureThead_fn","colCount","_a","colgroup","defaultWidth","i","col","thead","TableInitializer","_NineTableSheet","_NineTableSheet_instances","_tableElement","_initializer","render_fn","tableEl","clonedTable","__privateGet","NineTableSheet","_NineTableSheets","_NineTableSheets_instances","rawChildren","e","tabItem","isMultiSelect","index","switchSheet_fn","tabBar","body","tabItems","sheetElements","tab","idx","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","updateSplitters_fn","activeSheet","rowCountEl","splitter","splitIndex","leftSheet","rightSheet","NineTableSheets","_LayoutManager","shadowRoot","_LayoutManager_instances","_root","rawElements","sheetsHtml","_","tabsHtml","sheetsContainer","sheetEl","LayoutManager","_NineTable","_created","NineTable"],"mappings":"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"}
1
+ {"version":3,"file":"nine-table.umd.js","sources":["../src/external/NoPeer.js","../src/ui/TableInitializer.js","../src/ui/nine-table-sheet.js","../src/ui/nine-table-sheets.js","../src/ui/LayoutManager.js","../src/core/nine-table.js"],"sourcesContent":["import { trace as traceOrigin } from '@ninebone/util';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-table\", \"green\");\n }\n}\n\nexport const trace = new Trace();","export class TableInitializer {\n #container;\n\n constructor(container) {\n this.#container = container;\n }\n\n // [Public] 테이블 초기화 진입점 (필요한 최소한의 마크업 보정만 수행)\n initializeTable(tbl) {\n this.#ensureColgroup(tbl);\n this.#ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n }\n\n // [Private] colgroup 보정\n #ensureColgroup(tbl) {\n if (tbl.querySelector('colgroup')) return;\n\n const colCount = tbl.querySelector('tbody tr')?.querySelectorAll('th, td').length || 1;\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n }\n\n // [Private] thead 보정\n #ensureThead(tbl) {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n }\n}","import { trace } from \"@nopeer\";\nimport { TableInitializer } from \"./TableInitializer.js\"; // 경로에 맞게 조정 필요\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n #initializer;\n\n constructor() {\n super();\n this.#initializer = new TableInitializer(this);\n }\n\n connectedCallback() {\n this.#render();\n }\n\n /**\n * 외부(LayoutManager 등)에서 원본 테이블 엘리먼트를 주입받아 초기화 및 보정 수행\n * @param {HTMLTableElement} tableEl\n */\n init(tableEl) {\n if (!tableEl) return;\n\n // 원본 테이블 복제 후 TableInitializer를 통한 구조 보정\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = this.#initializer.initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const container = this.querySelector('.sheet-content-container');\n if (container) {\n container.innerHTML = '';\n container.appendChild(this.#tableElement);\n }\n\n trace.log(`NineTableSheet initialized with table rows: ${this.getRowCount()}`);\n }\n\n getRowCount() {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n }\n\n #render() {\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: block;\n width: 100%;\n height: 100%;\n overflow: auto;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n }\n\n nine-table-sheet .sheet-content-container {\n width: 100%;\n min-width: fit-content;\n }\n\n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n\n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n\n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class=\"sheet-content-container\">\n <!-- 테이블이 동적으로 주입되는 영역 -->\n </div>\n `;\n }\n\n disconnectedCallback() {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n }\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}\n","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#init();\n }\n\n #init() {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.#switchSheet(index, isMultiSelect);\n });\n\n this.#switchSheet(0, false);\n }\n\n #switchSheet(index, isMultiSelect = false) {\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n this.#updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n }\n\n #updateSplitters() {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n }\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","import './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n }\n\n #render() {\n const rawElements = Array.from(this.#root.host.children);\n\n const sheetsHtml = rawElements.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n const sheetTag = `<nine-table-sheet class=\"${className}\" data-index=\"${idx}\"></nine-table-sheet>`;\n\n if (idx === 0) {\n return sheetTag;\n }\n return `<nine-splitter class=\"h\" data-split-index=\"${idx}\"></nine-splitter>${sheetTag}`;\n }).join('');\n\n const tabsHtml = rawElements.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 }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-body nine-splitter {\n width: 4px;\n background: #e5e7eb;\n cursor: col-resize;\n flex-shrink: 0;\n display: none !important;\n }\n nine-table-sheets-body nine-splitter.active {\n display: block !important;\n }\n nine-table-sheets-footer {\n display: flex;\n height: 32px;\n background: #f3f4f6;\n border-top: 1px solid #e5e7eb;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n flex-shrink: 0;\n }\n nine-table-sheets .nine-tab-bar {\n display: flex;\n align-items: center;\n gap: 2px;\n overflow-x: auto;\n flex: 1;\n height: 100%;\n }\n nine-table-sheets .nine-tab-item {\n padding: 4px 12px;\n cursor: pointer;\n font-size: 12px;\n color: #4b5563;\n background: #e5e7eb;\n border: 1px solid #d1d5db;\n border-top: none;\n border-radius: 0 0 3px 3px;\n user-select: none;\n }\n nine-table-sheets .nine-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n nine-table-sheets .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-splitter></nine-splitter>\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 $sheetsContainer = this.#root.querySelector('nine-table-sheets');\n const $sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n $sheetElements?.forEach(($el, idx) => {\n if (rawElements[idx]) {\n rawElements[idx].style.display = 'none';\n $el.init(rawElements[idx]);\n }\n });\n }\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot 하나만 넘겨서 내부에서 레이아웃 및 테이블 수집 처리\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_TableInitializer","container","__privateAdd","_TableInitializer_instances","_container","__privateSet","tbl","__privateMethod","ensureColgroup_fn","ensureThead_fn","colCount","_a","colgroup","defaultWidth","col","thead","TableInitializer","_NineTableSheet","_NineTableSheet_instances","_tableElement","_initializer","render_fn","tableEl","clonedTable","__privateGet","NineTableSheet","_NineTableSheets","_NineTableSheets_instances","init_fn","tabBar","e","tabItem","isMultiSelect","index","switchSheet_fn","body","tabItems","sheetElements","tab","idx","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","updateSplitters_fn","activeSheet","rowCountEl","splitter","splitIndex","leftSheet","rightSheet","NineTableSheets","_LayoutManager","shadowRoot","_LayoutManager_instances","_root","rawElements","sheetsHtml","_","sheetTag","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.37",
3
+ "version": "0.0.39",
4
4
  "description": "Grid component for real-time collaboration (Vanilla JS based)",
5
5
  "type": "module",
6
6
  "main": "./dist/nine-table.umd.js",