@ninebone/table 0.0.33 → 0.0.35

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