@ninebone/table 0.0.43 → 0.0.45

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.
@@ -4,7 +4,7 @@ var F = (l) => {
4
4
  };
5
5
  var d = (l, e) => V(l, "name", { value: e, configurable: !0 });
6
6
  var A = (l, e, t) => e.has(l) || F("Cannot " + t);
7
- var h = (l, e, t) => (A(l, e, "read from private field"), t ? t.call(l) : e.get(l)), b = (l, e, t) => e.has(l) ? F("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(l) : e.set(l, t), m = (l, e, t, s) => (A(l, e, "write to private field"), s ? s.call(l, t) : e.set(l, t), t), p = (l, e, t) => (A(l, e, "access private method"), t);
7
+ var h = (l, e, t) => (A(l, e, "read from private field"), t ? t.call(l) : e.get(l)), b = (l, e, t) => e.has(l) ? F("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(l) : e.set(l, t), v = (l, e, t, o) => (A(l, e, "write to private field"), o ? o.call(l, t) : e.set(l, t), t), p = (l, e, t) => (A(l, e, "access private method"), t);
8
8
  import { trace as X } from "@ninebone/util";
9
9
  const B = class B extends X.constructor {
10
10
  constructor() {
@@ -13,13 +13,13 @@ const B = class B extends X.constructor {
13
13
  };
14
14
  d(B, "Trace");
15
15
  let T = B;
16
- const q = new T();
17
- var E, v, G, J;
16
+ const k = new T();
17
+ var q, m, G, J;
18
18
  const I = class I {
19
19
  constructor(e) {
20
- b(this, v);
21
- b(this, E);
22
- m(this, E, e);
20
+ b(this, m);
21
+ b(this, q);
22
+ v(this, q, e);
23
23
  }
24
24
  /**
25
25
  * [Public] 테이블 초기화 진입점
@@ -27,18 +27,18 @@ const I = class I {
27
27
  * @returns {HTMLTableElement}
28
28
  */
29
29
  initializeTable(e) {
30
- return p(this, v, G).call(this, e), p(this, v, J).call(this, e), e.classList.add("nine-table-element"), e;
30
+ return p(this, m, G).call(this, e), p(this, m, J).call(this, e), e.classList.add("nine-table-element"), e;
31
31
  }
32
32
  };
33
- E = new WeakMap(), v = new WeakSet(), /**
33
+ q = new WeakMap(), m = new WeakSet(), /**
34
34
  * [Private] colgroup 및 col 태그 유무 확인 후 보정
35
35
  */
36
36
  G = /* @__PURE__ */ d(function(e) {
37
37
  if (e.querySelector("colgroup")) return;
38
- const t = e.querySelector("tbody tr") || e.querySelector("tr"), s = t ? t.querySelectorAll("th, td").length : 1, r = document.createElement("colgroup"), o = Math.max(Math.floor((e.clientWidth || 600) / s), 100);
39
- for (let i = 0; i < s; i++) {
38
+ const t = e.querySelector("tbody tr") || e.querySelector("tr"), o = t ? t.querySelectorAll("th, td").length : 1, r = document.createElement("colgroup"), s = Math.max(Math.floor((e.clientWidth || 600) / o), 100);
39
+ for (let i = 0; i < o; i++) {
40
40
  const n = document.createElement("col");
41
- n.setAttribute("width", o), r.appendChild(n);
41
+ n.setAttribute("width", s), r.appendChild(n);
42
42
  }
43
43
  e.prepend(r);
44
44
  }, "#ensureColgroup"), /**
@@ -46,33 +46,33 @@ G = /* @__PURE__ */ d(function(e) {
46
46
  */
47
47
  J = /* @__PURE__ */ d(function(e) {
48
48
  if (e.querySelector("thead")) return;
49
- const t = document.createElement("thead"), s = e.querySelector("colgroup");
50
- s ? s.after(t) : e.prepend(t);
49
+ const t = document.createElement("thead"), o = e.querySelector("colgroup");
50
+ o ? o.after(t) : e.prepend(t);
51
51
  }, "#ensureThead"), d(I, "TableInitializer");
52
52
  let $ = I;
53
- var u, w, k, O;
53
+ var u, w, E, O;
54
54
  const j = class j extends HTMLElement {
55
55
  constructor() {
56
56
  super();
57
- b(this, k);
57
+ b(this, E);
58
58
  b(this, u, null);
59
59
  b(this, w);
60
- m(this, w, new $(this));
60
+ v(this, w, new $(this));
61
61
  }
62
62
  connectedCallback() {
63
- p(this, k, O).call(this);
63
+ p(this, E, O).call(this);
64
64
  }
65
65
  /**
66
66
  * @param {HTMLTableElement} tableEl
67
67
  */
68
68
  init(t) {
69
69
  if (!t) return;
70
- const s = t.cloneNode(!0);
71
- m(this, u, h(this, w).initializeTable(s)), h(this, u).style.display = "table";
72
- const r = this.querySelector(".sheet-container-left"), o = this.querySelector(".sheet-container-body"), i = this.querySelector(".sheet-container-right");
73
- if (o) {
70
+ const o = t.cloneNode(!0);
71
+ v(this, u, h(this, w).initializeTable(o)), h(this, u).style.display = "table";
72
+ const r = this.querySelector(".sheet-container-left"), s = this.querySelector(".sheet-container-body"), i = this.querySelector(".sheet-container-right");
73
+ if (s) {
74
74
  const n = h(this, u).cloneNode(!0);
75
- n.querySelectorAll('[fixed="left"], [fixed="right"]').forEach((a) => a.remove()), o.innerHTML = "", o.appendChild(n);
75
+ n.querySelectorAll('[fixed="left"], [fixed="right"]').forEach((a) => a.remove()), s.innerHTML = "", s.appendChild(n);
76
76
  }
77
77
  if (r) {
78
78
  const n = h(this, u).cloneNode(!0);
@@ -86,85 +86,129 @@ const j = class j extends HTMLElement {
86
86
  a.getAttribute("fixed") !== "right" && a.remove();
87
87
  }), n.querySelectorAll("tbody tr").forEach((a) => a.remove()), i.innerHTML = "", i.appendChild(n);
88
88
  }
89
- q.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);
89
+ k.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);
90
90
  }
91
91
  getRowCount() {
92
92
  return h(this, u) ? h(this, u).querySelectorAll("tbody tr").length : 0;
93
93
  }
94
94
  disconnectedCallback() {
95
- this.innerHTML = "", q.log("NineTableSheet destroyed.");
95
+ this.innerHTML = "", k.log("NineTableSheet destroyed.");
96
96
  }
97
97
  };
98
- u = new WeakMap(), w = new WeakMap(), k = new WeakSet(), O = /* @__PURE__ */ d(function() {
98
+ u = new WeakMap(), w = new WeakMap(), E = new WeakSet(), O = /* @__PURE__ */ d(function() {
99
99
  this.innerHTML = `
100
- <style>
101
- nine-table-sheet {
102
- display: block;
103
- width: 100%;
104
- height: 100%;
105
- position: relative;
106
- box-sizing: border-box;
107
- background: #ffffff;
108
- overflow: hidden;
109
- }
100
+ <style>
101
+ nine-table-sheet {
102
+ display: flex;
103
+ flex-direction: column;
104
+ width: 100%;
105
+ height: 100%;
106
+ position: relative;
107
+ box-sizing: border-box;
108
+ background: #ffffff;
109
+ overflow: hidden;
110
+ }
110
111
 
111
- nine-table-sheet .sheet-layout {
112
- display: flex;
113
- flex-direction: row;
114
- width: 100%;
115
- height: 100%;
116
- }
112
+ nine-table-sheet .sheet-layout {
113
+ display: flex;
114
+ flex-direction: column;
115
+ width: 100%;
116
+ height: 100%;
117
+ flex: 1;
118
+ overflow: hidden;
119
+ }
117
120
 
118
- nine-table-sheet .sheet-container-left {
119
- flex-shrink: 0;
120
- overflow: hidden;
121
- background: #ffffff;
122
- border-right: 1px solid #e5e7eb;
123
- }
121
+ /* 상단 영역 (3분할 테이블 본문 및 좌우 고정 영역) */
122
+ nine-table-sheet .sheet-container-top {
123
+ display: flex;
124
+ flex-direction: row;
125
+ flex: 1;
126
+ width: 100%;
127
+ overflow: hidden;
128
+ position: relative;
129
+ }
124
130
 
125
- nine-table-sheet .sheet-container-body {
126
- flex: 1;
127
- overflow: auto;
128
- background: #ffffff;
129
- }
131
+ nine-table-sheet .sheet-container-left {
132
+ flex-shrink: 0;
133
+ width: auto;
134
+ overflow-x: hidden;
135
+ overflow-y: hidden;
136
+ background: #ffffff;
137
+ border-right: 1px solid #e5e7eb;
138
+ }
130
139
 
131
- nine-table-sheet .sheet-container-right {
132
- flex-shrink: 0;
133
- overflow: hidden;
134
- background: #ffffff;
135
- border-left: 1px solid #e5e7eb;
136
- }
140
+ nine-table-sheet .sheet-container-body {
141
+ flex: 1;
142
+ overflow: auto; /* 추후 가로/세로 스크롤바와 연동될 메인 바디 뷰포트 */
143
+ background: #ffffff;
144
+ position: relative;
145
+ }
137
146
 
138
- nine-table-sheet table {
139
- border-collapse: collapse;
140
- width: 100%;
141
- table-layout: fixed;
142
- }
147
+ nine-table-sheet .sheet-container-right {
148
+ flex-shrink: 0;
149
+ width: auto;
150
+ overflow-x: hidden;
151
+ overflow-y: hidden;
152
+ background: #ffffff;
153
+ border-left: 1px solid #e5e7eb;
154
+ }
143
155
 
144
- nine-table-sheet th, nine-table-sheet td {
145
- box-sizing: border-box;
146
- overflow: hidden;
147
- white-space: nowrap;
148
- text-overflow: ellipsis;
149
- padding: 6px 8px;
150
- border: 1px solid #e5e7eb;
151
- font-size: 12px;
152
- color: #111827;
153
- }
156
+ /* 하단 영역 (가로 스크롤바 및 코너 엣지 공간) */
157
+ nine-table-sheet .sheet-container-bottom {
158
+ display: flex;
159
+ flex-direction: row;
160
+ height: 0px; /* 추후 스크롤바 컴포넌트 장착 시 높이 확보 */
161
+ flex-shrink: 0;
162
+ background: #f9fafb;
163
+ border-top: 1px solid #e5e7eb;
164
+ }
154
165
 
155
- nine-table-sheet th {
156
- background-color: #f9fafb;
157
- font-weight: 600;
158
- text-align: left;
159
- }
160
- </style>
161
-
162
- <div class="sheet-layout">
166
+ nine-table-sheet .sheet-hscrollbar {
167
+ flex: 1;
168
+ overflow: hidden;
169
+ }
170
+
171
+ nine-table-sheet .sheet-scroll-edge {
172
+ width: 17px; /* 스크롤바 두께에 맞춘 코너 여백 공간 */
173
+ flex-shrink: 0;
174
+ }
175
+
176
+ nine-table-sheet table {
177
+ border-collapse: collapse;
178
+ width: 100%;
179
+ table-layout: fixed;
180
+ }
181
+
182
+ nine-table-sheet th, nine-table-sheet td {
183
+ box-sizing: border-box;
184
+ overflow: hidden;
185
+ white-space: nowrap;
186
+ text-overflow: ellipsis;
187
+ padding: 6px 8px;
188
+ border: 1px solid #e5e7eb;
189
+ font-size: 12px;
190
+ color: #111827;
191
+ }
192
+
193
+ nine-table-sheet th {
194
+ background-color: #f9fafb;
195
+ font-weight: 600;
196
+ text-align: left;
197
+ }
198
+ </style>
199
+
200
+ <div class="sheet-layout">
201
+ <div class="sheet-container-top">
163
202
  <div class="sheet-container-left"></div>
164
203
  <div class="sheet-container-body"></div>
165
204
  <div class="sheet-container-right"></div>
166
205
  </div>
167
- `;
206
+ <div class="sheet-container-bottom">
207
+ <div class="sheet-hscrollbar"></div>
208
+ <div class="sheet-scroll-edge"></div>
209
+ </div>
210
+ </div>
211
+ `;
168
212
  }, "#render"), d(j, "NineTableSheet");
169
213
  let H = j;
170
214
  customElements.get("nine-table-sheet") || customElements.define("nine-table-sheet", H);
@@ -180,20 +224,20 @@ const K = class K extends HTMLElement {
180
224
  };
181
225
  y = new WeakSet(), P = /* @__PURE__ */ d(function() {
182
226
  const t = this.querySelector(".nine-tab-bar");
183
- t && (t.addEventListener("click", (s) => {
184
- const r = s.target.closest(".nine-tab-item");
227
+ t && (t.addEventListener("click", (o) => {
228
+ const r = o.target.closest(".nine-tab-item");
185
229
  if (!r) return;
186
- const o = s.ctrlKey || s.metaKey || s.shiftKey, i = parseInt(r.dataset.index, 10);
187
- p(this, y, z).call(this, i, o);
230
+ const s = o.ctrlKey || o.metaKey || o.shiftKey, i = parseInt(r.dataset.index, 10);
231
+ p(this, y, z).call(this, i, s);
188
232
  }), p(this, y, z).call(this, 0, !1));
189
- }, "#init"), z = /* @__PURE__ */ d(function(t, s = !1) {
190
- const r = this.querySelector(".nine-tab-bar"), o = this.querySelector("nine-table-sheets-body"), i = r.querySelectorAll(".nine-tab-item"), n = o.querySelectorAll("nine-table-sheet");
233
+ }, "#init"), z = /* @__PURE__ */ d(function(t, o = !1) {
234
+ const r = this.querySelector(".nine-tab-bar"), s = this.querySelector("nine-table-sheets-body"), i = r.querySelectorAll(".nine-tab-item"), n = s.querySelectorAll("nine-table-sheet");
191
235
  if (!i[t]) return;
192
- if (!s)
236
+ if (!o)
193
237
  i.forEach((c, f) => {
194
238
  c.classList.toggle("active", f === t);
195
- const g = o.querySelector(`nine-table-sheet[data-index="${f}"]`);
196
- g && (g.style.flex = "");
239
+ const x = s.querySelector(`nine-table-sheet[data-index="${f}"]`);
240
+ x && (x.style.flex = "");
197
241
  }), n.forEach((c, f) => {
198
242
  c.classList.toggle("active", f === t);
199
243
  });
@@ -202,10 +246,10 @@ y = new WeakSet(), P = /* @__PURE__ */ d(function() {
202
246
  if (c.classList.contains("active") && f.length <= 1)
203
247
  return;
204
248
  c.classList.toggle("active");
205
- const g = o.querySelector(`nine-table-sheet[data-index="${t}"]`);
206
- g && (g.classList.toggle("active"), g.classList.contains("active") || (g.style.flex = ""));
249
+ const x = s.querySelector(`nine-table-sheet[data-index="${t}"]`);
250
+ x && (x.classList.toggle("active"), x.classList.contains("active") || (x.style.flex = ""));
207
251
  }
208
- const a = Array.from(o.querySelectorAll("nine-table-sheet.active"));
252
+ const a = Array.from(s.querySelectorAll("nine-table-sheet.active"));
209
253
  if (a.length > 1) {
210
254
  const c = 1 / a.length;
211
255
  a.forEach((f) => {
@@ -216,7 +260,7 @@ y = new WeakSet(), P = /* @__PURE__ */ d(function() {
216
260
  c.style.flex = "1 1 100%";
217
261
  });
218
262
  p(this, y, Q).call(this);
219
- const L = o.querySelector("nine-table-sheet.active");
263
+ const L = s.querySelector("nine-table-sheet.active");
220
264
  if (L && typeof L.getRowCount == "function") {
221
265
  const c = this.querySelector("#row-count");
222
266
  c && (c.textContent = L.getRowCount().toLocaleString());
@@ -224,23 +268,23 @@ y = new WeakSet(), P = /* @__PURE__ */ d(function() {
224
268
  }, "#switchSheet"), Q = /* @__PURE__ */ d(function() {
225
269
  const t = this.querySelector("nine-table-sheets-body");
226
270
  t.querySelectorAll("nine-splitter").forEach((r) => {
227
- const o = parseInt(r.dataset.splitIndex, 10), i = t.querySelector(`nine-table-sheet[data-index="${o - 1}"]`), n = t.querySelector(`nine-table-sheet[data-index="${o}"]`);
271
+ const s = parseInt(r.dataset.splitIndex, 10), i = t.querySelector(`nine-table-sheet[data-index="${s - 1}"]`), n = t.querySelector(`nine-table-sheet[data-index="${s}"]`);
228
272
  i && n && i.classList.contains("active") && n.classList.contains("active") ? r.classList.add("active") : r.classList.remove("active");
229
273
  });
230
274
  }, "#updateSplitters"), d(K, "NineTableSheets");
231
275
  let M = K;
232
276
  customElements.get("nine-table-sheets") || customElements.define("nine-table-sheets", M);
233
- var x, C, U;
277
+ var g, C, U;
234
278
  const W = class W {
235
279
  constructor(e) {
236
280
  b(this, C);
237
- b(this, x);
238
- m(this, x, e), p(this, C, U).call(this);
281
+ b(this, g);
282
+ v(this, g, e), p(this, C, U).call(this);
239
283
  }
240
284
  };
241
- x = new WeakMap(), C = new WeakSet(), U = /* @__PURE__ */ d(function() {
242
- const t = Array.from(h(this, x).host.children).filter((i) => i.tagName === "TABLE"), s = t.map((i, n) => `<nine-table-sheet class="${n === 0 ? "active" : ""}" data-index="${n}"></nine-table-sheet>`).join(""), r = t.map((i, n) => `<div class="nine-tab-item ${n === 0 ? "active" : ""}" data-index="${n}">Sheet ${n + 1}</div>`).join("");
243
- h(this, x).innerHTML = `
285
+ g = new WeakMap(), C = new WeakSet(), U = /* @__PURE__ */ d(function() {
286
+ const t = Array.from(h(this, g).host.children).filter((i) => i.tagName === "TABLE"), o = t.map((i, n) => `<nine-table-sheet class="${n === 0 ? "active" : ""}" data-index="${n}"></nine-table-sheet>`).join(""), r = t.map((i, n) => `<div class="nine-tab-item ${n === 0 ? "active" : ""}" data-index="${n}">Sheet ${n + 1}</div>`).join("");
287
+ h(this, g).innerHTML = `
244
288
  <style>
245
289
  :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }
246
290
  nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }
@@ -321,7 +365,7 @@ x = new WeakMap(), C = new WeakSet(), U = /* @__PURE__ */ d(function() {
321
365
  <nine-table-body>
322
366
  <nine-table-summary></nine-table-summary>
323
367
  <nine-table-sheets>
324
- <nine-table-sheets-body>${s}</nine-table-sheets-body>
368
+ <nine-table-sheets-body>${o}</nine-table-sheets-body>
325
369
  <nine-table-sheets-footer>
326
370
  <div class="nine-tab-bar">${r}</div>
327
371
  <div class="sheets-counter">Total : <span id="row-count">0</span></div>
@@ -331,8 +375,8 @@ x = new WeakMap(), C = new WeakSet(), U = /* @__PURE__ */ d(function() {
331
375
  </nine-table-body>
332
376
  <nine-table-footer></nine-table-footer>
333
377
  `;
334
- const o = h(this, x).querySelectorAll("nine-table-sheet");
335
- o == null || o.forEach((i, n) => {
378
+ const s = h(this, g).querySelectorAll("nine-table-sheet");
379
+ s == null || s.forEach((i, n) => {
336
380
  t[n] && i.init(t[n]);
337
381
  });
338
382
  }, "#render"), d(W, "LayoutManager");
@@ -345,10 +389,10 @@ const D = class D extends HTMLElement {
345
389
  this.attachShadow({ mode: "open" });
346
390
  }
347
391
  connectedCallback() {
348
- h(this, S) || (this.layoutManager = new N(this.shadowRoot), m(this, S, !0), q.log("NineTable connected."), this.dispatchEvent(new CustomEvent("load", { bubbles: !0, detail: { target: this } })));
392
+ h(this, S) || (this.layoutManager = new N(this.shadowRoot), v(this, S, !0), k.log("NineTable connected."), this.dispatchEvent(new CustomEvent("load", { bubbles: !0, detail: { target: this } })));
349
393
  }
350
394
  disconnectedCallback() {
351
- q.log("NineTable disconnected.");
395
+ k.log("NineTable disconnected.");
352
396
  }
353
397
  };
354
398
  S = new WeakMap(), d(D, "NineTable");
@@ -1 +1 @@
1
- {"version":3,"file":"nine-table.js","sources":["../src/external/NoPeer.js","../src/ui/TableInitializer.js","../src/ui/nine-table-sheet.js","../src/ui/nine-table-sheets.js","../src/ui/LayoutManager.js","../src/core/nine-table.js"],"sourcesContent":["import { trace as traceOrigin } from '@ninebone/util';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-table\", \"green\");\n }\n}\n\nexport const trace = new Trace();","export class TableInitializer {\n #container;\n\n constructor(container) {\n this.#container = container;\n }\n\n /**\n * [Public] 테이블 초기화 진입점\n * @param {HTMLTableElement} tbl\n * @returns {HTMLTableElement}\n */\n initializeTable(tbl) {\n this.#ensureColgroup(tbl);\n this.#ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n }\n\n /**\n * [Private] colgroup 및 col 태그 유무 확인 후 보정\n */\n #ensureColgroup(tbl) {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n }\n\n /**\n * [Private] thead 태그 유무 확인 후 보정\n */\n #ensureThead(tbl) {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n }\n}","import { trace } from \"@nopeer\";\nimport { TableInitializer } from \"./TableInitializer.js\";\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n #initializer;\n\n constructor() {\n super();\n this.#initializer = new TableInitializer(this);\n }\n\n connectedCallback() {\n this.#render();\n }\n\n /**\n * @param {HTMLTableElement} tableEl\n */\n init(tableEl) {\n if (!tableEl) return;\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = this.#initializer.initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n // 3분할 영역 컨테이너 참조 확보\n const leftContainer = this.querySelector('.sheet-container-left');\n const bodyContainer = this.querySelector('.sheet-container-body');\n const rightContainer = this.querySelector('.sheet-container-right');\n\n if (bodyContainer) {\n // 1. 메인 바디 영역: 좌우 고정 컬럼 제외\n const bodyTable = this.#tableElement.cloneNode(true);\n bodyTable.querySelectorAll('[fixed=\"left\"], [fixed=\"right\"]').forEach(el => el.remove());\n bodyContainer.innerHTML = '';\n bodyContainer.appendChild(bodyTable);\n }\n\n if (leftContainer) {\n // 2. 좌측 고정 영역: fixed=\"left\"가 아닌 컬럼/셀 제거\n const leftTable = this.#tableElement.cloneNode(true);\n leftTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'left') el.remove();\n });\n\n // 데이터 행 비우기 (헤더/푸터 구조만 유지하거나 필요 시 전체 유지)\n leftTable.querySelectorAll('tbody tr').forEach(tr => tr.remove());\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n }\n\n if (rightContainer) {\n // 3. 우측 고정 영역: fixed=\"right\"가 아닌 컬럼/셀 제거\n const rightTable = this.#tableElement.cloneNode(true);\n rightTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'right') el.remove();\n });\n\n rightTable.querySelectorAll('tbody tr').forEach(tr => tr.remove());\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n }\n\n trace.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);\n }\n\n getRowCount() {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n }\n\n #render() {\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: block;\n width: 100%;\n height: 100%;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n overflow: hidden;\n }\n\n nine-table-sheet .sheet-layout {\n display: flex;\n flex-direction: row;\n width: 100%;\n height: 100%;\n }\n\n nine-table-sheet .sheet-container-left {\n flex-shrink: 0;\n overflow: hidden;\n background: #ffffff;\n border-right: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .sheet-container-body {\n flex: 1;\n overflow: auto;\n background: #ffffff;\n }\n\n nine-table-sheet .sheet-container-right {\n flex-shrink: 0;\n overflow: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\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-layout\">\n <div class=\"sheet-container-left\"></div>\n <div class=\"sheet-container-body\"></div>\n <div class=\"sheet-container-right\"></div>\n </div>\n `;\n }\n\n disconnectedCallback() {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n }\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#init();\n }\n\n #init() {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.#switchSheet(index, isMultiSelect);\n });\n\n this.#switchSheet(0, false);\n }\n\n #switchSheet(index, isMultiSelect = false) {\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n this.#updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n }\n\n #updateSplitters() {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n }\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","import './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n }\n\n #render() {\n const rawElements = Array.from(this.#root.host.children);\n const rawTables = rawElements.filter(el => el.tagName === 'TABLE');\n\n const sheetsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<nine-table-sheet class=\"${className}\" data-index=\"${idx}\"></nine-table-sheet>`;\n }).join('');\n\n const tabsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<div class=\"nine-tab-item ${className}\" data-index=\"${idx}\">Sheet ${idx + 1}</div>`;\n }).join('');\n\n this.#root.innerHTML = `\n <style>\n :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }\n nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }\n nine-table-body { display: flex; flex-direction: row; flex: 1; overflow: hidden; position: relative; }\n nine-table-summary { display: none; width: 250px; flex-shrink: 0; border-right: 1px solid #e5e7eb; }\n nine-splitter:not([data-split-index]) { width: 4px; background: #e5e7eb; cursor: col-resize; flex-shrink: 0; }\n nine-table-analysis { display: none; }\n nine-table-footer { display: none; }\n\n nine-table-sheets {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n background: #fff;\n }\n nine-table-sheets-body {\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n flex-direction: row;\n }\n nine-table-sheet {\n display: none !important;\n height: 100%;\n overflow: auto;\n flex: 1 1 100%;\n }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-footer {\n display: flex;\n height: 32px;\n background: #f3f4f6;\n border-top: 1px solid #e5e7eb;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n flex-shrink: 0;\n }\n nine-table-sheets .nine-tab-bar {\n display: flex;\n align-items: center;\n gap: 2px;\n overflow-x: auto;\n flex: 1;\n height: 100%;\n }\n nine-table-sheets .nine-tab-item {\n padding: 4px 12px;\n cursor: pointer;\n font-size: 12px;\n color: #4b5563;\n background: #e5e7eb;\n border: 1px solid #d1d5db;\n border-top: none;\n border-radius: 0 0 3px 3px;\n user-select: none;\n }\n nine-table-sheets .nine-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n nine-table-sheets .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-table-sheets>\n <nine-table-sheets-body>${sheetsHtml}</nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\">${tabsHtml}</div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n </nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n\n const $sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n $sheetElements?.forEach(($el, idx) => {\n if (rawTables[idx]) {\n $el.init(rawTables[idx]);\n }\n });\n }\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot 하나만 넘겨서 내부에서 레이아웃 및 테이블 수집 처리\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_TableInitializer","container","__privateAdd","_TableInitializer_instances","_container","__privateSet","tbl","__privateMethod","ensureColgroup_fn","ensureThead_fn","firstRow","colCount","colgroup","defaultWidth","col","thead","TableInitializer","_NineTableSheet","_NineTableSheet_instances","_tableElement","_initializer","render_fn","tableEl","clonedTable","__privateGet","leftContainer","bodyContainer","rightContainer","bodyTable","el","leftTable","tr","rightTable","NineTableSheet","_NineTableSheets","_NineTableSheets_instances","init_fn","tabBar","e","tabItem","isMultiSelect","index","switchSheet_fn","body","tabItems","sheetElements","tab","idx","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","updateSplitters_fn","activeSheet","rowCountEl","splitter","splitIndex","leftSheet","rightSheet","NineTableSheets","_LayoutManager","shadowRoot","_LayoutManager_instances","_root","rawTables","sheetsHtml","_","tabsHtml","$sheetElements","$el","LayoutManager","_NineTable","_created","NineTable"],"mappings":"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"}
1
+ {"version":3,"file":"nine-table.js","sources":["../src/external/NoPeer.js","../src/ui/TableInitializer.js","../src/ui/nine-table-sheet.js","../src/ui/nine-table-sheets.js","../src/ui/LayoutManager.js","../src/core/nine-table.js"],"sourcesContent":["import { trace as traceOrigin } from '@ninebone/util';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-table\", \"green\");\n }\n}\n\nexport const trace = new Trace();","export class TableInitializer {\n #container;\n\n constructor(container) {\n this.#container = container;\n }\n\n /**\n * [Public] 테이블 초기화 진입점\n * @param {HTMLTableElement} tbl\n * @returns {HTMLTableElement}\n */\n initializeTable(tbl) {\n this.#ensureColgroup(tbl);\n this.#ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n }\n\n /**\n * [Private] colgroup 및 col 태그 유무 확인 후 보정\n */\n #ensureColgroup(tbl) {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n }\n\n /**\n * [Private] thead 태그 유무 확인 후 보정\n */\n #ensureThead(tbl) {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n }\n}","import { trace } from \"@nopeer\";\nimport { TableInitializer } from \"./TableInitializer.js\";\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n #initializer;\n\n constructor() {\n super();\n this.#initializer = new TableInitializer(this);\n }\n\n connectedCallback() {\n this.#render();\n }\n\n /**\n * @param {HTMLTableElement} tableEl\n */\n init(tableEl) {\n if (!tableEl) return;\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = this.#initializer.initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const leftContainer = this.querySelector('.sheet-container-left');\n const bodyContainer = this.querySelector('.sheet-container-body');\n const rightContainer = this.querySelector('.sheet-container-right');\n\n if (bodyContainer) {\n const bodyTable = this.#tableElement.cloneNode(true);\n bodyTable.querySelectorAll('[fixed=\"left\"], [fixed=\"right\"]').forEach(el => el.remove());\n bodyContainer.innerHTML = '';\n bodyContainer.appendChild(bodyTable);\n }\n\n if (leftContainer) {\n const leftTable = this.#tableElement.cloneNode(true);\n leftTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'left') el.remove();\n });\n leftTable.querySelectorAll('tbody tr').forEach(tr => tr.remove());\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n }\n\n if (rightContainer) {\n const rightTable = this.#tableElement.cloneNode(true);\n rightTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'right') el.remove();\n });\n rightTable.querySelectorAll('tbody tr').forEach(tr => tr.remove());\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n }\n\n trace.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);\n }\n\n getRowCount() {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n }\n\n #render() {\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n overflow: hidden;\n }\n\n nine-table-sheet .sheet-layout {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n flex: 1;\n overflow: hidden;\n }\n\n /* 상단 영역 (3분할 테이블 본문 및 좌우 고정 영역) */\n nine-table-sheet .sheet-container-top {\n display: flex;\n flex-direction: row;\n flex: 1;\n width: 100%;\n overflow: hidden;\n position: relative;\n }\n\n nine-table-sheet .sheet-container-left {\n flex-shrink: 0;\n width: auto;\n overflow-x: hidden;\n overflow-y: hidden;\n background: #ffffff;\n border-right: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .sheet-container-body {\n flex: 1;\n overflow: auto; /* 추후 가로/세로 스크롤바와 연동될 메인 바디 뷰포트 */\n background: #ffffff;\n position: relative;\n }\n\n nine-table-sheet .sheet-container-right {\n flex-shrink: 0;\n width: auto;\n overflow-x: hidden;\n overflow-y: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\n }\n\n /* 하단 영역 (가로 스크롤바 및 코너 엣지 공간) */\n nine-table-sheet .sheet-container-bottom {\n display: flex;\n flex-direction: row;\n height: 0px; /* 추후 스크롤바 컴포넌트 장착 시 높이 확보 */\n flex-shrink: 0;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .sheet-hscrollbar {\n flex: 1;\n overflow: hidden;\n }\n\n nine-table-sheet .sheet-scroll-edge {\n width: 17px; /* 스크롤바 두께에 맞춘 코너 여백 공간 */\n flex-shrink: 0;\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-layout\">\n <div class=\"sheet-container-top\">\n <div class=\"sheet-container-left\"></div>\n <div class=\"sheet-container-body\"></div>\n <div class=\"sheet-container-right\"></div>\n </div>\n <div class=\"sheet-container-bottom\">\n <div class=\"sheet-hscrollbar\"></div>\n <div class=\"sheet-scroll-edge\"></div>\n </div>\n </div>\n `;\n }\n\n disconnectedCallback() {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n }\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#init();\n }\n\n #init() {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.#switchSheet(index, isMultiSelect);\n });\n\n this.#switchSheet(0, false);\n }\n\n #switchSheet(index, isMultiSelect = false) {\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n this.#updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n }\n\n #updateSplitters() {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n }\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","import './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n }\n\n #render() {\n const rawElements = Array.from(this.#root.host.children);\n const rawTables = rawElements.filter(el => el.tagName === 'TABLE');\n\n const sheetsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<nine-table-sheet class=\"${className}\" data-index=\"${idx}\"></nine-table-sheet>`;\n }).join('');\n\n const tabsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<div class=\"nine-tab-item ${className}\" data-index=\"${idx}\">Sheet ${idx + 1}</div>`;\n }).join('');\n\n this.#root.innerHTML = `\n <style>\n :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }\n nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }\n nine-table-body { display: flex; flex-direction: row; flex: 1; overflow: hidden; position: relative; }\n nine-table-summary { display: none; width: 250px; flex-shrink: 0; border-right: 1px solid #e5e7eb; }\n nine-splitter:not([data-split-index]) { width: 4px; background: #e5e7eb; cursor: col-resize; flex-shrink: 0; }\n nine-table-analysis { display: none; }\n nine-table-footer { display: none; }\n\n nine-table-sheets {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n background: #fff;\n }\n nine-table-sheets-body {\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n flex-direction: row;\n }\n nine-table-sheet {\n display: none !important;\n height: 100%;\n overflow: auto;\n flex: 1 1 100%;\n }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-footer {\n display: flex;\n height: 32px;\n background: #f3f4f6;\n border-top: 1px solid #e5e7eb;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n flex-shrink: 0;\n }\n nine-table-sheets .nine-tab-bar {\n display: flex;\n align-items: center;\n gap: 2px;\n overflow-x: auto;\n flex: 1;\n height: 100%;\n }\n nine-table-sheets .nine-tab-item {\n padding: 4px 12px;\n cursor: pointer;\n font-size: 12px;\n color: #4b5563;\n background: #e5e7eb;\n border: 1px solid #d1d5db;\n border-top: none;\n border-radius: 0 0 3px 3px;\n user-select: none;\n }\n nine-table-sheets .nine-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n nine-table-sheets .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-table-sheets>\n <nine-table-sheets-body>${sheetsHtml}</nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\">${tabsHtml}</div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n </nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n\n const $sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n $sheetElements?.forEach(($el, idx) => {\n if (rawTables[idx]) {\n $el.init(rawTables[idx]);\n }\n });\n }\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot 하나만 넘겨서 내부에서 레이아웃 및 테이블 수집 처리\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_TableInitializer","container","__privateAdd","_TableInitializer_instances","_container","__privateSet","tbl","__privateMethod","ensureColgroup_fn","ensureThead_fn","firstRow","colCount","colgroup","defaultWidth","col","thead","TableInitializer","_NineTableSheet","_NineTableSheet_instances","_tableElement","_initializer","render_fn","tableEl","clonedTable","__privateGet","leftContainer","bodyContainer","rightContainer","bodyTable","el","leftTable","tr","rightTable","NineTableSheet","_NineTableSheets","_NineTableSheets_instances","init_fn","tabBar","e","tabItem","isMultiSelect","index","switchSheet_fn","body","tabItems","sheetElements","tab","idx","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","updateSplitters_fn","activeSheet","rowCountEl","splitter","splitIndex","leftSheet","rightSheet","NineTableSheets","_LayoutManager","shadowRoot","_LayoutManager_instances","_root","rawTables","sheetsHtml","_","tabsHtml","$sheetElements","$el","LayoutManager","_NineTable","_created","NineTable"],"mappings":"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"}
@@ -1,72 +1,116 @@
1
- (function(n,i){typeof exports=="object"&&typeof module<"u"?i(require("@ninebone/util")):typeof define=="function"&&define.amd?define(["@ninebone/util"],i):(n=typeof globalThis<"u"?globalThis:n||self,i(n.NineboneUtil))})(this,function(n){"use strict";var V=Object.defineProperty;var D=n=>{throw TypeError(n)};var f=(n,i)=>V(n,"name",{value:i,configurable:!0});var W=(n,i,c)=>i.has(n)||D("Cannot "+c);var b=(n,i,c)=>(W(n,i,"read from private field"),c?c.call(n):i.get(n)),y=(n,i,c)=>i.has(n)?D("Cannot add the same private member more than once"):i instanceof WeakSet?i.add(n):i.set(n,c),q=(n,i,c,w)=>(W(n,i,"write to private field"),w?w.call(n,c):i.set(n,c),c),x=(n,i,c)=>(W(n,i,"access private method"),c);var C,S,F,G,u,E,L,J,g,O,U,P,m,A,Q,k;const z=class z extends n.trace.constructor{constructor(){super(),this.init("nine-table","green")}};f(z,"Trace");let i=z;const c=new i,N=class N{constructor(s){y(this,S);y(this,C);q(this,C,s)}initializeTable(s){return x(this,S,F).call(this,s),x(this,S,G).call(this,s),s.classList.add("nine-table-element"),s}};C=new WeakMap,S=new WeakSet,F=f(function(s){if(s.querySelector("colgroup"))return;const t=s.querySelector("tbody tr")||s.querySelector("tr"),d=t?t.querySelectorAll("th, td").length:1,r=document.createElement("colgroup"),l=Math.max(Math.floor((s.clientWidth||600)/d),100);for(let o=0;o<d;o++){const e=document.createElement("col");e.setAttribute("width",l),r.appendChild(e)}s.prepend(r)},"#ensureColgroup"),G=f(function(s){if(s.querySelector("thead"))return;const t=document.createElement("thead"),d=s.querySelector("colgroup");d?d.after(t):s.prepend(t)},"#ensureThead"),f(N,"TableInitializer");let w=N;const R=class R extends HTMLElement{constructor(){super();y(this,L);y(this,u,null);y(this,E);q(this,E,new w(this))}connectedCallback(){x(this,L,J).call(this)}init(t){if(!t)return;const d=t.cloneNode(!0);q(this,u,b(this,E).initializeTable(d)),b(this,u).style.display="table";const r=this.querySelector(".sheet-container-left"),l=this.querySelector(".sheet-container-body"),o=this.querySelector(".sheet-container-right");if(l){const e=b(this,u).cloneNode(!0);e.querySelectorAll('[fixed="left"], [fixed="right"]').forEach(a=>a.remove()),l.innerHTML="",l.appendChild(e)}if(r){const e=b(this,u).cloneNode(!0);e.querySelectorAll("col, th, td").forEach(a=>{a.getAttribute("fixed")!=="left"&&a.remove()}),e.querySelectorAll("tbody tr").forEach(a=>a.remove()),r.innerHTML="",r.appendChild(e)}if(o){const e=b(this,u).cloneNode(!0);e.querySelectorAll("col, th, td").forEach(a=>{a.getAttribute("fixed")!=="right"&&a.remove()}),e.querySelectorAll("tbody tr").forEach(a=>a.remove()),o.innerHTML="",o.appendChild(e)}c.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`)}getRowCount(){return b(this,u)?b(this,u).querySelectorAll("tbody tr").length:0}disconnectedCallback(){this.innerHTML="",c.log("NineTableSheet destroyed.")}};u=new WeakMap,E=new WeakMap,L=new WeakSet,J=f(function(){this.innerHTML=`
2
- <style>
3
- nine-table-sheet {
4
- display: block;
5
- width: 100%;
6
- height: 100%;
7
- position: relative;
8
- box-sizing: border-box;
9
- background: #ffffff;
10
- overflow: hidden;
11
- }
1
+ (function(n,i){typeof exports=="object"&&typeof module<"u"?i(require("@ninebone/util")):typeof define=="function"&&define.amd?define(["@ninebone/util"],i):(n=typeof globalThis<"u"?globalThis:n||self,i(n.NineboneUtil))})(this,function(n){"use strict";var V=Object.defineProperty;var D=n=>{throw TypeError(n)};var f=(n,i)=>V(n,"name",{value:i,configurable:!0});var W=(n,i,c)=>i.has(n)||D("Cannot "+c);var b=(n,i,c)=>(W(n,i,"read from private field"),c?c.call(n):i.get(n)),y=(n,i,c)=>i.has(n)?D("Cannot add the same private member more than once"):i instanceof WeakSet?i.add(n):i.set(n,c),q=(n,i,c,w)=>(W(n,i,"write to private field"),w?w.call(n,c):i.set(n,c),c),g=(n,i,c)=>(W(n,i,"access private method"),c);var C,S,F,G,u,k,L,J,x,O,U,P,v,A,Q,E;const z=class z extends n.trace.constructor{constructor(){super(),this.init("nine-table","green")}};f(z,"Trace");let i=z;const c=new i,N=class N{constructor(o){y(this,S);y(this,C);q(this,C,o)}initializeTable(o){return g(this,S,F).call(this,o),g(this,S,G).call(this,o),o.classList.add("nine-table-element"),o}};C=new WeakMap,S=new WeakSet,F=f(function(o){if(o.querySelector("colgroup"))return;const t=o.querySelector("tbody tr")||o.querySelector("tr"),d=t?t.querySelectorAll("th, td").length:1,r=document.createElement("colgroup"),l=Math.max(Math.floor((o.clientWidth||600)/d),100);for(let s=0;s<d;s++){const e=document.createElement("col");e.setAttribute("width",l),r.appendChild(e)}o.prepend(r)},"#ensureColgroup"),G=f(function(o){if(o.querySelector("thead"))return;const t=document.createElement("thead"),d=o.querySelector("colgroup");d?d.after(t):o.prepend(t)},"#ensureThead"),f(N,"TableInitializer");let w=N;const R=class R extends HTMLElement{constructor(){super();y(this,L);y(this,u,null);y(this,k);q(this,k,new w(this))}connectedCallback(){g(this,L,J).call(this)}init(t){if(!t)return;const d=t.cloneNode(!0);q(this,u,b(this,k).initializeTable(d)),b(this,u).style.display="table";const r=this.querySelector(".sheet-container-left"),l=this.querySelector(".sheet-container-body"),s=this.querySelector(".sheet-container-right");if(l){const e=b(this,u).cloneNode(!0);e.querySelectorAll('[fixed="left"], [fixed="right"]').forEach(a=>a.remove()),l.innerHTML="",l.appendChild(e)}if(r){const e=b(this,u).cloneNode(!0);e.querySelectorAll("col, th, td").forEach(a=>{a.getAttribute("fixed")!=="left"&&a.remove()}),e.querySelectorAll("tbody tr").forEach(a=>a.remove()),r.innerHTML="",r.appendChild(e)}if(s){const e=b(this,u).cloneNode(!0);e.querySelectorAll("col, th, td").forEach(a=>{a.getAttribute("fixed")!=="right"&&a.remove()}),e.querySelectorAll("tbody tr").forEach(a=>a.remove()),s.innerHTML="",s.appendChild(e)}c.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`)}getRowCount(){return b(this,u)?b(this,u).querySelectorAll("tbody tr").length:0}disconnectedCallback(){this.innerHTML="",c.log("NineTableSheet destroyed.")}};u=new WeakMap,k=new WeakMap,L=new WeakSet,J=f(function(){this.innerHTML=`
2
+ <style>
3
+ nine-table-sheet {
4
+ display: flex;
5
+ flex-direction: column;
6
+ width: 100%;
7
+ height: 100%;
8
+ position: relative;
9
+ box-sizing: border-box;
10
+ background: #ffffff;
11
+ overflow: hidden;
12
+ }
12
13
 
13
- nine-table-sheet .sheet-layout {
14
- display: flex;
15
- flex-direction: row;
16
- width: 100%;
17
- height: 100%;
18
- }
14
+ nine-table-sheet .sheet-layout {
15
+ display: flex;
16
+ flex-direction: column;
17
+ width: 100%;
18
+ height: 100%;
19
+ flex: 1;
20
+ overflow: hidden;
21
+ }
19
22
 
20
- nine-table-sheet .sheet-container-left {
21
- flex-shrink: 0;
22
- overflow: hidden;
23
- background: #ffffff;
24
- border-right: 1px solid #e5e7eb;
25
- }
23
+ /* 상단 영역 (3분할 테이블 본문 및 좌우 고정 영역) */
24
+ nine-table-sheet .sheet-container-top {
25
+ display: flex;
26
+ flex-direction: row;
27
+ flex: 1;
28
+ width: 100%;
29
+ overflow: hidden;
30
+ position: relative;
31
+ }
26
32
 
27
- nine-table-sheet .sheet-container-body {
28
- flex: 1;
29
- overflow: auto;
30
- background: #ffffff;
31
- }
33
+ nine-table-sheet .sheet-container-left {
34
+ flex-shrink: 0;
35
+ width: auto;
36
+ overflow-x: hidden;
37
+ overflow-y: hidden;
38
+ background: #ffffff;
39
+ border-right: 1px solid #e5e7eb;
40
+ }
32
41
 
33
- nine-table-sheet .sheet-container-right {
34
- flex-shrink: 0;
35
- overflow: hidden;
36
- background: #ffffff;
37
- border-left: 1px solid #e5e7eb;
38
- }
42
+ nine-table-sheet .sheet-container-body {
43
+ flex: 1;
44
+ overflow: auto; /* 추후 가로/세로 스크롤바와 연동될 메인 바디 뷰포트 */
45
+ background: #ffffff;
46
+ position: relative;
47
+ }
39
48
 
40
- nine-table-sheet table {
41
- border-collapse: collapse;
42
- width: 100%;
43
- table-layout: fixed;
44
- }
49
+ nine-table-sheet .sheet-container-right {
50
+ flex-shrink: 0;
51
+ width: auto;
52
+ overflow-x: hidden;
53
+ overflow-y: hidden;
54
+ background: #ffffff;
55
+ border-left: 1px solid #e5e7eb;
56
+ }
45
57
 
46
- nine-table-sheet th, nine-table-sheet td {
47
- box-sizing: border-box;
48
- overflow: hidden;
49
- white-space: nowrap;
50
- text-overflow: ellipsis;
51
- padding: 6px 8px;
52
- border: 1px solid #e5e7eb;
53
- font-size: 12px;
54
- color: #111827;
55
- }
58
+ /* 하단 영역 (가로 스크롤바 및 코너 엣지 공간) */
59
+ nine-table-sheet .sheet-container-bottom {
60
+ display: flex;
61
+ flex-direction: row;
62
+ height: 0px; /* 추후 스크롤바 컴포넌트 장착 시 높이 확보 */
63
+ flex-shrink: 0;
64
+ background: #f9fafb;
65
+ border-top: 1px solid #e5e7eb;
66
+ }
56
67
 
57
- nine-table-sheet th {
58
- background-color: #f9fafb;
59
- font-weight: 600;
60
- text-align: left;
61
- }
62
- </style>
63
-
64
- <div class="sheet-layout">
68
+ nine-table-sheet .sheet-hscrollbar {
69
+ flex: 1;
70
+ overflow: hidden;
71
+ }
72
+
73
+ nine-table-sheet .sheet-scroll-edge {
74
+ width: 17px; /* 스크롤바 두께에 맞춘 코너 여백 공간 */
75
+ flex-shrink: 0;
76
+ }
77
+
78
+ nine-table-sheet table {
79
+ border-collapse: collapse;
80
+ width: 100%;
81
+ table-layout: fixed;
82
+ }
83
+
84
+ nine-table-sheet th, nine-table-sheet td {
85
+ box-sizing: border-box;
86
+ overflow: hidden;
87
+ white-space: nowrap;
88
+ text-overflow: ellipsis;
89
+ padding: 6px 8px;
90
+ border: 1px solid #e5e7eb;
91
+ font-size: 12px;
92
+ color: #111827;
93
+ }
94
+
95
+ nine-table-sheet th {
96
+ background-color: #f9fafb;
97
+ font-weight: 600;
98
+ text-align: left;
99
+ }
100
+ </style>
101
+
102
+ <div class="sheet-layout">
103
+ <div class="sheet-container-top">
65
104
  <div class="sheet-container-left"></div>
66
105
  <div class="sheet-container-body"></div>
67
106
  <div class="sheet-container-right"></div>
68
107
  </div>
69
- `},"#render"),f(R,"NineTableSheet");let T=R;customElements.get("nine-table-sheet")||customElements.define("nine-table-sheet",T);const j=class j extends HTMLElement{constructor(){super();y(this,g)}connectedCallback(){x(this,g,O).call(this)}};g=new WeakSet,O=f(function(){const t=this.querySelector(".nine-tab-bar");t&&(t.addEventListener("click",d=>{const r=d.target.closest(".nine-tab-item");if(!r)return;const l=d.ctrlKey||d.metaKey||d.shiftKey,o=parseInt(r.dataset.index,10);x(this,g,U).call(this,o,l)}),x(this,g,U).call(this,0,!1))},"#init"),U=f(function(t,d=!1){const r=this.querySelector(".nine-tab-bar"),l=this.querySelector("nine-table-sheets-body"),o=r.querySelectorAll(".nine-tab-item"),e=l.querySelectorAll("nine-table-sheet");if(!o[t])return;if(!d)o.forEach((h,p)=>{h.classList.toggle("active",p===t);const v=l.querySelector(`nine-table-sheet[data-index="${p}"]`);v&&(v.style.flex="")}),e.forEach((h,p)=>{h.classList.toggle("active",p===t)});else{const h=o[t],p=r.querySelectorAll(".nine-tab-item.active");if(h.classList.contains("active")&&p.length<=1)return;h.classList.toggle("active");const v=l.querySelector(`nine-table-sheet[data-index="${t}"]`);v&&(v.classList.toggle("active"),v.classList.contains("active")||(v.style.flex=""))}const a=Array.from(l.querySelectorAll("nine-table-sheet.active"));if(a.length>1){const h=1/a.length;a.forEach(p=>{(!p.style.flex||p.style.flex==="1 1 100%")&&(p.style.flex=`${h} ${h} 0px`)})}else a.forEach(h=>{h.style.flex="1 1 100%"});x(this,g,P).call(this);const K=l.querySelector("nine-table-sheet.active");if(K&&typeof K.getRowCount=="function"){const h=this.querySelector("#row-count");h&&(h.textContent=K.getRowCount().toLocaleString())}},"#switchSheet"),P=f(function(){const t=this.querySelector("nine-table-sheets-body");t.querySelectorAll("nine-splitter").forEach(r=>{const l=parseInt(r.dataset.splitIndex,10),o=t.querySelector(`nine-table-sheet[data-index="${l-1}"]`),e=t.querySelector(`nine-table-sheet[data-index="${l}"]`);o&&e&&o.classList.contains("active")&&e.classList.contains("active")?r.classList.add("active"):r.classList.remove("active")})},"#updateSplitters"),f(j,"NineTableSheets");let $=j;customElements.get("nine-table-sheets")||customElements.define("nine-table-sheets",$);const B=class B{constructor(s){y(this,A);y(this,m);q(this,m,s),x(this,A,Q).call(this)}};m=new WeakMap,A=new WeakSet,Q=f(function(){const t=Array.from(b(this,m).host.children).filter(o=>o.tagName==="TABLE"),d=t.map((o,e)=>`<nine-table-sheet class="${e===0?"active":""}" data-index="${e}"></nine-table-sheet>`).join(""),r=t.map((o,e)=>`<div class="nine-tab-item ${e===0?"active":""}" data-index="${e}">Sheet ${e+1}</div>`).join("");b(this,m).innerHTML=`
108
+ <div class="sheet-container-bottom">
109
+ <div class="sheet-hscrollbar"></div>
110
+ <div class="sheet-scroll-edge"></div>
111
+ </div>
112
+ </div>
113
+ `},"#render"),f(R,"NineTableSheet");let T=R;customElements.get("nine-table-sheet")||customElements.define("nine-table-sheet",T);const j=class j extends HTMLElement{constructor(){super();y(this,x)}connectedCallback(){g(this,x,O).call(this)}};x=new WeakSet,O=f(function(){const t=this.querySelector(".nine-tab-bar");t&&(t.addEventListener("click",d=>{const r=d.target.closest(".nine-tab-item");if(!r)return;const l=d.ctrlKey||d.metaKey||d.shiftKey,s=parseInt(r.dataset.index,10);g(this,x,U).call(this,s,l)}),g(this,x,U).call(this,0,!1))},"#init"),U=f(function(t,d=!1){const r=this.querySelector(".nine-tab-bar"),l=this.querySelector("nine-table-sheets-body"),s=r.querySelectorAll(".nine-tab-item"),e=l.querySelectorAll("nine-table-sheet");if(!s[t])return;if(!d)s.forEach((h,p)=>{h.classList.toggle("active",p===t);const m=l.querySelector(`nine-table-sheet[data-index="${p}"]`);m&&(m.style.flex="")}),e.forEach((h,p)=>{h.classList.toggle("active",p===t)});else{const h=s[t],p=r.querySelectorAll(".nine-tab-item.active");if(h.classList.contains("active")&&p.length<=1)return;h.classList.toggle("active");const m=l.querySelector(`nine-table-sheet[data-index="${t}"]`);m&&(m.classList.toggle("active"),m.classList.contains("active")||(m.style.flex=""))}const a=Array.from(l.querySelectorAll("nine-table-sheet.active"));if(a.length>1){const h=1/a.length;a.forEach(p=>{(!p.style.flex||p.style.flex==="1 1 100%")&&(p.style.flex=`${h} ${h} 0px`)})}else a.forEach(h=>{h.style.flex="1 1 100%"});g(this,x,P).call(this);const K=l.querySelector("nine-table-sheet.active");if(K&&typeof K.getRowCount=="function"){const h=this.querySelector("#row-count");h&&(h.textContent=K.getRowCount().toLocaleString())}},"#switchSheet"),P=f(function(){const t=this.querySelector("nine-table-sheets-body");t.querySelectorAll("nine-splitter").forEach(r=>{const l=parseInt(r.dataset.splitIndex,10),s=t.querySelector(`nine-table-sheet[data-index="${l-1}"]`),e=t.querySelector(`nine-table-sheet[data-index="${l}"]`);s&&e&&s.classList.contains("active")&&e.classList.contains("active")?r.classList.add("active"):r.classList.remove("active")})},"#updateSplitters"),f(j,"NineTableSheets");let $=j;customElements.get("nine-table-sheets")||customElements.define("nine-table-sheets",$);const B=class B{constructor(o){y(this,A);y(this,v);q(this,v,o),g(this,A,Q).call(this)}};v=new WeakMap,A=new WeakSet,Q=f(function(){const t=Array.from(b(this,v).host.children).filter(s=>s.tagName==="TABLE"),d=t.map((s,e)=>`<nine-table-sheet class="${e===0?"active":""}" data-index="${e}"></nine-table-sheet>`).join(""),r=t.map((s,e)=>`<div class="nine-tab-item ${e===0?"active":""}" data-index="${e}">Sheet ${e+1}</div>`).join("");b(this,v).innerHTML=`
70
114
  <style>
71
115
  :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }
72
116
  nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }
@@ -156,5 +200,5 @@
156
200
  <nine-table-analysis></nine-table-analysis>
157
201
  </nine-table-body>
158
202
  <nine-table-footer></nine-table-footer>
159
- `;const l=b(this,m).querySelectorAll("nine-table-sheet");l==null||l.forEach((o,e)=>{t[e]&&o.init(t[e])})},"#render"),f(B,"LayoutManager");let H=B;const I=class I extends HTMLElement{constructor(){super();y(this,k,!1);this.attachShadow({mode:"open"})}connectedCallback(){b(this,k)||(this.layoutManager=new H(this.shadowRoot),q(this,k,!0),c.log("NineTable connected."),this.dispatchEvent(new CustomEvent("load",{bubbles:!0,detail:{target:this}})))}disconnectedCallback(){c.log("NineTable disconnected.")}};k=new WeakMap,f(I,"NineTable");let M=I;customElements.get("nine-table")||customElements.define("nine-table",M)});
203
+ `;const l=b(this,v).querySelectorAll("nine-table-sheet");l==null||l.forEach((s,e)=>{t[e]&&s.init(t[e])})},"#render"),f(B,"LayoutManager");let H=B;const I=class I extends HTMLElement{constructor(){super();y(this,E,!1);this.attachShadow({mode:"open"})}connectedCallback(){b(this,E)||(this.layoutManager=new H(this.shadowRoot),q(this,E,!0),c.log("NineTable connected."),this.dispatchEvent(new CustomEvent("load",{bubbles:!0,detail:{target:this}})))}disconnectedCallback(){c.log("NineTable disconnected.")}};E=new WeakMap,f(I,"NineTable");let M=I;customElements.get("nine-table")||customElements.define("nine-table",M)});
160
204
  //# sourceMappingURL=nine-table.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nine-table.umd.js","sources":["../src/external/NoPeer.js","../src/ui/TableInitializer.js","../src/ui/nine-table-sheet.js","../src/ui/nine-table-sheets.js","../src/ui/LayoutManager.js","../src/core/nine-table.js"],"sourcesContent":["import { trace as traceOrigin } from '@ninebone/util';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-table\", \"green\");\n }\n}\n\nexport const trace = new Trace();","export class TableInitializer {\n #container;\n\n constructor(container) {\n this.#container = container;\n }\n\n /**\n * [Public] 테이블 초기화 진입점\n * @param {HTMLTableElement} tbl\n * @returns {HTMLTableElement}\n */\n initializeTable(tbl) {\n this.#ensureColgroup(tbl);\n this.#ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n }\n\n /**\n * [Private] colgroup 및 col 태그 유무 확인 후 보정\n */\n #ensureColgroup(tbl) {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n }\n\n /**\n * [Private] thead 태그 유무 확인 후 보정\n */\n #ensureThead(tbl) {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n }\n}","import { trace } from \"@nopeer\";\nimport { TableInitializer } from \"./TableInitializer.js\";\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n #initializer;\n\n constructor() {\n super();\n this.#initializer = new TableInitializer(this);\n }\n\n connectedCallback() {\n this.#render();\n }\n\n /**\n * @param {HTMLTableElement} tableEl\n */\n init(tableEl) {\n if (!tableEl) return;\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = this.#initializer.initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n // 3분할 영역 컨테이너 참조 확보\n const leftContainer = this.querySelector('.sheet-container-left');\n const bodyContainer = this.querySelector('.sheet-container-body');\n const rightContainer = this.querySelector('.sheet-container-right');\n\n if (bodyContainer) {\n // 1. 메인 바디 영역: 좌우 고정 컬럼 제외\n const bodyTable = this.#tableElement.cloneNode(true);\n bodyTable.querySelectorAll('[fixed=\"left\"], [fixed=\"right\"]').forEach(el => el.remove());\n bodyContainer.innerHTML = '';\n bodyContainer.appendChild(bodyTable);\n }\n\n if (leftContainer) {\n // 2. 좌측 고정 영역: fixed=\"left\"가 아닌 컬럼/셀 제거\n const leftTable = this.#tableElement.cloneNode(true);\n leftTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'left') el.remove();\n });\n\n // 데이터 행 비우기 (헤더/푸터 구조만 유지하거나 필요 시 전체 유지)\n leftTable.querySelectorAll('tbody tr').forEach(tr => tr.remove());\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n }\n\n if (rightContainer) {\n // 3. 우측 고정 영역: fixed=\"right\"가 아닌 컬럼/셀 제거\n const rightTable = this.#tableElement.cloneNode(true);\n rightTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'right') el.remove();\n });\n\n rightTable.querySelectorAll('tbody tr').forEach(tr => tr.remove());\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n }\n\n trace.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);\n }\n\n getRowCount() {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n }\n\n #render() {\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: block;\n width: 100%;\n height: 100%;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n overflow: hidden;\n }\n\n nine-table-sheet .sheet-layout {\n display: flex;\n flex-direction: row;\n width: 100%;\n height: 100%;\n }\n\n nine-table-sheet .sheet-container-left {\n flex-shrink: 0;\n overflow: hidden;\n background: #ffffff;\n border-right: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .sheet-container-body {\n flex: 1;\n overflow: auto;\n background: #ffffff;\n }\n\n nine-table-sheet .sheet-container-right {\n flex-shrink: 0;\n overflow: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\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-layout\">\n <div class=\"sheet-container-left\"></div>\n <div class=\"sheet-container-body\"></div>\n <div class=\"sheet-container-right\"></div>\n </div>\n `;\n }\n\n disconnectedCallback() {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n }\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#init();\n }\n\n #init() {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.#switchSheet(index, isMultiSelect);\n });\n\n this.#switchSheet(0, false);\n }\n\n #switchSheet(index, isMultiSelect = false) {\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n this.#updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n }\n\n #updateSplitters() {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n }\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","import './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n }\n\n #render() {\n const rawElements = Array.from(this.#root.host.children);\n const rawTables = rawElements.filter(el => el.tagName === 'TABLE');\n\n const sheetsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<nine-table-sheet class=\"${className}\" data-index=\"${idx}\"></nine-table-sheet>`;\n }).join('');\n\n const tabsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<div class=\"nine-tab-item ${className}\" data-index=\"${idx}\">Sheet ${idx + 1}</div>`;\n }).join('');\n\n this.#root.innerHTML = `\n <style>\n :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }\n nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }\n nine-table-body { display: flex; flex-direction: row; flex: 1; overflow: hidden; position: relative; }\n nine-table-summary { display: none; width: 250px; flex-shrink: 0; border-right: 1px solid #e5e7eb; }\n nine-splitter:not([data-split-index]) { width: 4px; background: #e5e7eb; cursor: col-resize; flex-shrink: 0; }\n nine-table-analysis { display: none; }\n nine-table-footer { display: none; }\n\n nine-table-sheets {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n background: #fff;\n }\n nine-table-sheets-body {\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n flex-direction: row;\n }\n nine-table-sheet {\n display: none !important;\n height: 100%;\n overflow: auto;\n flex: 1 1 100%;\n }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-footer {\n display: flex;\n height: 32px;\n background: #f3f4f6;\n border-top: 1px solid #e5e7eb;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n flex-shrink: 0;\n }\n nine-table-sheets .nine-tab-bar {\n display: flex;\n align-items: center;\n gap: 2px;\n overflow-x: auto;\n flex: 1;\n height: 100%;\n }\n nine-table-sheets .nine-tab-item {\n padding: 4px 12px;\n cursor: pointer;\n font-size: 12px;\n color: #4b5563;\n background: #e5e7eb;\n border: 1px solid #d1d5db;\n border-top: none;\n border-radius: 0 0 3px 3px;\n user-select: none;\n }\n nine-table-sheets .nine-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n nine-table-sheets .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-table-sheets>\n <nine-table-sheets-body>${sheetsHtml}</nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\">${tabsHtml}</div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n </nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n\n const $sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n $sheetElements?.forEach(($el, idx) => {\n if (rawTables[idx]) {\n $el.init(rawTables[idx]);\n }\n });\n }\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot 하나만 넘겨서 내부에서 레이아웃 및 테이블 수집 처리\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_TableInitializer","container","__privateAdd","_TableInitializer_instances","_container","__privateSet","tbl","__privateMethod","ensureColgroup_fn","ensureThead_fn","firstRow","colCount","colgroup","defaultWidth","i","col","thead","TableInitializer","_NineTableSheet","_NineTableSheet_instances","_tableElement","_initializer","render_fn","tableEl","clonedTable","__privateGet","leftContainer","bodyContainer","rightContainer","bodyTable","el","leftTable","tr","rightTable","NineTableSheet","_NineTableSheets","_NineTableSheets_instances","init_fn","tabBar","e","tabItem","isMultiSelect","index","switchSheet_fn","body","tabItems","sheetElements","tab","idx","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","updateSplitters_fn","activeSheet","rowCountEl","splitter","splitIndex","leftSheet","rightSheet","NineTableSheets","_LayoutManager","shadowRoot","_LayoutManager_instances","_root","rawTables","sheetsHtml","_","tabsHtml","$sheetElements","$el","LayoutManager","_NineTable","_created","NineTable"],"mappings":"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"}
1
+ {"version":3,"file":"nine-table.umd.js","sources":["../src/external/NoPeer.js","../src/ui/TableInitializer.js","../src/ui/nine-table-sheet.js","../src/ui/nine-table-sheets.js","../src/ui/LayoutManager.js","../src/core/nine-table.js"],"sourcesContent":["import { trace as traceOrigin } from '@ninebone/util';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-table\", \"green\");\n }\n}\n\nexport const trace = new Trace();","export class TableInitializer {\n #container;\n\n constructor(container) {\n this.#container = container;\n }\n\n /**\n * [Public] 테이블 초기화 진입점\n * @param {HTMLTableElement} tbl\n * @returns {HTMLTableElement}\n */\n initializeTable(tbl) {\n this.#ensureColgroup(tbl);\n this.#ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n }\n\n /**\n * [Private] colgroup 및 col 태그 유무 확인 후 보정\n */\n #ensureColgroup(tbl) {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n }\n\n /**\n * [Private] thead 태그 유무 확인 후 보정\n */\n #ensureThead(tbl) {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n }\n}","import { trace } from \"@nopeer\";\nimport { TableInitializer } from \"./TableInitializer.js\";\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n #initializer;\n\n constructor() {\n super();\n this.#initializer = new TableInitializer(this);\n }\n\n connectedCallback() {\n this.#render();\n }\n\n /**\n * @param {HTMLTableElement} tableEl\n */\n init(tableEl) {\n if (!tableEl) return;\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = this.#initializer.initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const leftContainer = this.querySelector('.sheet-container-left');\n const bodyContainer = this.querySelector('.sheet-container-body');\n const rightContainer = this.querySelector('.sheet-container-right');\n\n if (bodyContainer) {\n const bodyTable = this.#tableElement.cloneNode(true);\n bodyTable.querySelectorAll('[fixed=\"left\"], [fixed=\"right\"]').forEach(el => el.remove());\n bodyContainer.innerHTML = '';\n bodyContainer.appendChild(bodyTable);\n }\n\n if (leftContainer) {\n const leftTable = this.#tableElement.cloneNode(true);\n leftTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'left') el.remove();\n });\n leftTable.querySelectorAll('tbody tr').forEach(tr => tr.remove());\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n }\n\n if (rightContainer) {\n const rightTable = this.#tableElement.cloneNode(true);\n rightTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'right') el.remove();\n });\n rightTable.querySelectorAll('tbody tr').forEach(tr => tr.remove());\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n }\n\n trace.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);\n }\n\n getRowCount() {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n }\n\n #render() {\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n overflow: hidden;\n }\n\n nine-table-sheet .sheet-layout {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n flex: 1;\n overflow: hidden;\n }\n\n /* 상단 영역 (3분할 테이블 본문 및 좌우 고정 영역) */\n nine-table-sheet .sheet-container-top {\n display: flex;\n flex-direction: row;\n flex: 1;\n width: 100%;\n overflow: hidden;\n position: relative;\n }\n\n nine-table-sheet .sheet-container-left {\n flex-shrink: 0;\n width: auto;\n overflow-x: hidden;\n overflow-y: hidden;\n background: #ffffff;\n border-right: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .sheet-container-body {\n flex: 1;\n overflow: auto; /* 추후 가로/세로 스크롤바와 연동될 메인 바디 뷰포트 */\n background: #ffffff;\n position: relative;\n }\n\n nine-table-sheet .sheet-container-right {\n flex-shrink: 0;\n width: auto;\n overflow-x: hidden;\n overflow-y: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\n }\n\n /* 하단 영역 (가로 스크롤바 및 코너 엣지 공간) */\n nine-table-sheet .sheet-container-bottom {\n display: flex;\n flex-direction: row;\n height: 0px; /* 추후 스크롤바 컴포넌트 장착 시 높이 확보 */\n flex-shrink: 0;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .sheet-hscrollbar {\n flex: 1;\n overflow: hidden;\n }\n\n nine-table-sheet .sheet-scroll-edge {\n width: 17px; /* 스크롤바 두께에 맞춘 코너 여백 공간 */\n flex-shrink: 0;\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-layout\">\n <div class=\"sheet-container-top\">\n <div class=\"sheet-container-left\"></div>\n <div class=\"sheet-container-body\"></div>\n <div class=\"sheet-container-right\"></div>\n </div>\n <div class=\"sheet-container-bottom\">\n <div class=\"sheet-hscrollbar\"></div>\n <div class=\"sheet-scroll-edge\"></div>\n </div>\n </div>\n `;\n }\n\n disconnectedCallback() {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n }\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#init();\n }\n\n #init() {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.#switchSheet(index, isMultiSelect);\n });\n\n this.#switchSheet(0, false);\n }\n\n #switchSheet(index, isMultiSelect = false) {\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n this.#updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n }\n\n #updateSplitters() {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n }\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","import './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n }\n\n #render() {\n const rawElements = Array.from(this.#root.host.children);\n const rawTables = rawElements.filter(el => el.tagName === 'TABLE');\n\n const sheetsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<nine-table-sheet class=\"${className}\" data-index=\"${idx}\"></nine-table-sheet>`;\n }).join('');\n\n const tabsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<div class=\"nine-tab-item ${className}\" data-index=\"${idx}\">Sheet ${idx + 1}</div>`;\n }).join('');\n\n this.#root.innerHTML = `\n <style>\n :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }\n nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }\n nine-table-body { display: flex; flex-direction: row; flex: 1; overflow: hidden; position: relative; }\n nine-table-summary { display: none; width: 250px; flex-shrink: 0; border-right: 1px solid #e5e7eb; }\n nine-splitter:not([data-split-index]) { width: 4px; background: #e5e7eb; cursor: col-resize; flex-shrink: 0; }\n nine-table-analysis { display: none; }\n nine-table-footer { display: none; }\n\n nine-table-sheets {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n background: #fff;\n }\n nine-table-sheets-body {\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n flex-direction: row;\n }\n nine-table-sheet {\n display: none !important;\n height: 100%;\n overflow: auto;\n flex: 1 1 100%;\n }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-footer {\n display: flex;\n height: 32px;\n background: #f3f4f6;\n border-top: 1px solid #e5e7eb;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n flex-shrink: 0;\n }\n nine-table-sheets .nine-tab-bar {\n display: flex;\n align-items: center;\n gap: 2px;\n overflow-x: auto;\n flex: 1;\n height: 100%;\n }\n nine-table-sheets .nine-tab-item {\n padding: 4px 12px;\n cursor: pointer;\n font-size: 12px;\n color: #4b5563;\n background: #e5e7eb;\n border: 1px solid #d1d5db;\n border-top: none;\n border-radius: 0 0 3px 3px;\n user-select: none;\n }\n nine-table-sheets .nine-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n nine-table-sheets .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-table-sheets>\n <nine-table-sheets-body>${sheetsHtml}</nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\">${tabsHtml}</div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n </nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n\n const $sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n $sheetElements?.forEach(($el, idx) => {\n if (rawTables[idx]) {\n $el.init(rawTables[idx]);\n }\n });\n }\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot 하나만 넘겨서 내부에서 레이아웃 및 테이블 수집 처리\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_TableInitializer","container","__privateAdd","_TableInitializer_instances","_container","__privateSet","tbl","__privateMethod","ensureColgroup_fn","ensureThead_fn","firstRow","colCount","colgroup","defaultWidth","i","col","thead","TableInitializer","_NineTableSheet","_NineTableSheet_instances","_tableElement","_initializer","render_fn","tableEl","clonedTable","__privateGet","leftContainer","bodyContainer","rightContainer","bodyTable","el","leftTable","tr","rightTable","NineTableSheet","_NineTableSheets","_NineTableSheets_instances","init_fn","tabBar","e","tabItem","isMultiSelect","index","switchSheet_fn","body","tabItems","sheetElements","tab","idx","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","updateSplitters_fn","activeSheet","rowCountEl","splitter","splitIndex","leftSheet","rightSheet","NineTableSheets","_LayoutManager","shadowRoot","_LayoutManager_instances","_root","rawTables","sheetsHtml","_","tabsHtml","$sheetElements","$el","LayoutManager","_NineTable","_created","NineTable"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ninebone/table",
3
- "version": "0.0.43",
3
+ "version": "0.0.45",
4
4
  "description": "Grid component for real-time collaboration (Vanilla JS based)",
5
5
  "type": "module",
6
6
  "main": "./dist/nine-table.umd.js",