@ninebone/table 0.0.50 → 0.0.51
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.
- package/dist/nine-table.js +40 -40
- package/dist/nine-table.js.map +1 -1
- package/dist/nine-table.umd.js +3 -3
- package/dist/nine-table.umd.js.map +1 -1
- package/package.json +1 -1
package/dist/nine-table.js
CHANGED
|
@@ -2,10 +2,10 @@ var K = Object.defineProperty;
|
|
|
2
2
|
var D = (i) => {
|
|
3
3
|
throw TypeError(i);
|
|
4
4
|
};
|
|
5
|
-
var G = (i,
|
|
6
|
-
var d = (i,
|
|
7
|
-
var x = (i,
|
|
8
|
-
var a = (i,
|
|
5
|
+
var G = (i, n, e) => n in i ? K(i, n, { enumerable: !0, configurable: !0, writable: !0, value: e }) : i[n] = e;
|
|
6
|
+
var d = (i, n) => K(i, "name", { value: n, configurable: !0 });
|
|
7
|
+
var x = (i, n, e) => G(i, typeof n != "symbol" ? n + "" : n, e), F = (i, n, e) => n.has(i) || D("Cannot " + e);
|
|
8
|
+
var a = (i, n, e) => (F(i, n, "read from private field"), e ? e.call(i) : n.get(i)), b = (i, n, e) => n.has(i) ? D("Cannot add the same private member more than once") : n instanceof WeakSet ? n.add(i) : n.set(i, e), w = (i, n, e, c) => (F(i, n, "write to private field"), c ? c.call(i, e) : n.set(i, e), e);
|
|
9
9
|
import { trace as J } from "@ninebone/util";
|
|
10
10
|
const N = class N extends J.constructor {
|
|
11
11
|
constructor() {
|
|
@@ -27,30 +27,30 @@ const R = class R extends HTMLElement {
|
|
|
27
27
|
if (!e) return;
|
|
28
28
|
const c = e.cloneNode(!0);
|
|
29
29
|
w(this, u, a(this, k).call(this, c)), a(this, u).style.display = "table", console.log(a(this, u));
|
|
30
|
-
const o = this.querySelector(".ng-container-left"),
|
|
31
|
-
if (
|
|
32
|
-
const
|
|
33
|
-
|
|
30
|
+
const o = this.querySelector(".ng-container-left"), l = this.querySelector(".ng-container-body"), s = this.querySelector(".ng-container-right");
|
|
31
|
+
if (l) {
|
|
32
|
+
const t = a(this, u).cloneNode(!0);
|
|
33
|
+
console.log(t), t.querySelectorAll('[fixed="left"], [fixed="right"]').forEach((r) => r.remove()), l.innerHTML = "", l.appendChild(t), console.log(l);
|
|
34
34
|
}
|
|
35
35
|
if (o) {
|
|
36
|
-
const
|
|
37
|
-
|
|
36
|
+
const t = a(this, u).cloneNode(!0);
|
|
37
|
+
t.querySelectorAll("col, th, td").forEach((f) => {
|
|
38
38
|
f.getAttribute("fixed") !== "left" && f.remove();
|
|
39
39
|
});
|
|
40
40
|
let r = 0;
|
|
41
|
-
|
|
41
|
+
t.querySelectorAll("col").forEach((f) => {
|
|
42
42
|
r += parseInt(f.getAttribute("width") || 0, 10);
|
|
43
|
-
}), o.innerHTML = "", o.appendChild(
|
|
43
|
+
}), o.innerHTML = "", o.appendChild(t), r > 0 && (o.style.width = `${r}px`, o.style.minWidth = `${r}px`);
|
|
44
44
|
}
|
|
45
|
-
if (
|
|
46
|
-
const
|
|
47
|
-
|
|
45
|
+
if (s) {
|
|
46
|
+
const t = a(this, u).cloneNode(!0);
|
|
47
|
+
t.querySelectorAll("col, th, td").forEach((f) => {
|
|
48
48
|
f.getAttribute("fixed") !== "right" && f.remove();
|
|
49
49
|
});
|
|
50
50
|
let r = 0;
|
|
51
|
-
|
|
51
|
+
t.querySelectorAll("col").forEach((f) => {
|
|
52
52
|
r += parseInt(f.getAttribute("width") || 0, 10);
|
|
53
|
-
}),
|
|
53
|
+
}), s.innerHTML = "", s.appendChild(t), r > 0 && (s.style.width = `${r}px`, s.style.minWidth = `${r}px`);
|
|
54
54
|
}
|
|
55
55
|
S.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);
|
|
56
56
|
}, "init"));
|
|
@@ -58,12 +58,12 @@ const R = class R extends HTMLElement {
|
|
|
58
58
|
b(this, k, /* @__PURE__ */ d((e) => (a(this, q).call(this, e), a(this, E).call(this, e), e.classList.add("nine-table-element"), e), "#initializeTable"));
|
|
59
59
|
b(this, q, /* @__PURE__ */ d((e) => {
|
|
60
60
|
if (e.querySelector("colgroup")) return;
|
|
61
|
-
const c = e.querySelector("tbody tr") || e.querySelector("tr"), o = c ? c.querySelectorAll("th, td").length : 1,
|
|
62
|
-
for (let
|
|
61
|
+
const c = e.querySelector("tbody tr") || e.querySelector("tr"), o = c ? c.querySelectorAll("th, td").length : 1, l = document.createElement("colgroup"), s = Math.max(Math.floor((e.clientWidth || 600) / o), 100);
|
|
62
|
+
for (let t = 0; t < o; t++) {
|
|
63
63
|
const r = document.createElement("col");
|
|
64
|
-
r.setAttribute("width",
|
|
64
|
+
r.setAttribute("width", s), l.appendChild(r);
|
|
65
65
|
}
|
|
66
|
-
e.prepend(
|
|
66
|
+
e.prepend(l);
|
|
67
67
|
}, "#ensureColgroup"));
|
|
68
68
|
b(this, E, /* @__PURE__ */ d((e) => {
|
|
69
69
|
if (e.querySelector("thead")) return;
|
|
@@ -191,30 +191,30 @@ const W = class W extends HTMLElement {
|
|
|
191
191
|
e && (e.addEventListener("click", (c) => {
|
|
192
192
|
const o = c.target.closest(".nine-tab-item");
|
|
193
193
|
if (!o) return;
|
|
194
|
-
const
|
|
195
|
-
a(this, m).call(this,
|
|
194
|
+
const l = c.ctrlKey || c.metaKey || c.shiftKey, s = parseInt(o.dataset.index, 10);
|
|
195
|
+
a(this, m).call(this, s, l);
|
|
196
196
|
}), a(this, m).call(this, 0, !1));
|
|
197
197
|
}, "#init"));
|
|
198
198
|
b(this, m, /* @__PURE__ */ d((e, c = !1) => {
|
|
199
|
-
const o = this.querySelector(".nine-tab-bar"),
|
|
200
|
-
if (!
|
|
199
|
+
const o = this.querySelector(".nine-tab-bar"), l = this.querySelector("nine-table-sheets-body"), s = o.querySelectorAll(".nine-tab-item"), t = l.querySelectorAll("nine-table-sheet");
|
|
200
|
+
if (!s[e]) return;
|
|
201
201
|
if (!c)
|
|
202
|
-
|
|
202
|
+
s.forEach((h, p) => {
|
|
203
203
|
h.classList.toggle("active", p === e);
|
|
204
|
-
const g =
|
|
204
|
+
const g = l.querySelector(`nine-table-sheet[data-index="${p}"]`);
|
|
205
205
|
g && (g.style.flex = "");
|
|
206
|
-
}),
|
|
206
|
+
}), t.forEach((h, p) => {
|
|
207
207
|
h.classList.toggle("active", p === e);
|
|
208
208
|
});
|
|
209
209
|
else {
|
|
210
|
-
const h =
|
|
210
|
+
const h = s[e], p = o.querySelectorAll(".nine-tab-item.active");
|
|
211
211
|
if (h.classList.contains("active") && p.length <= 1)
|
|
212
212
|
return;
|
|
213
213
|
h.classList.toggle("active");
|
|
214
|
-
const g =
|
|
214
|
+
const g = l.querySelector(`nine-table-sheet[data-index="${e}"]`);
|
|
215
215
|
g && (g.classList.toggle("active"), g.classList.contains("active") || (g.style.flex = ""));
|
|
216
216
|
}
|
|
217
|
-
const r = Array.from(
|
|
217
|
+
const r = Array.from(l.querySelectorAll("nine-table-sheet.active"));
|
|
218
218
|
if (r.length > 1) {
|
|
219
219
|
const h = 1 / r.length;
|
|
220
220
|
r.forEach((p) => {
|
|
@@ -225,7 +225,7 @@ const W = class W extends HTMLElement {
|
|
|
225
225
|
h.style.flex = "1 1 100%";
|
|
226
226
|
});
|
|
227
227
|
a(this, L).call(this);
|
|
228
|
-
const f =
|
|
228
|
+
const f = l.querySelector("nine-table-sheet.active");
|
|
229
229
|
if (f && typeof f.getRowCount == "function") {
|
|
230
230
|
const h = this.querySelector("#row-count");
|
|
231
231
|
h && (h.textContent = f.getRowCount().toLocaleString());
|
|
@@ -234,8 +234,8 @@ const W = class W extends HTMLElement {
|
|
|
234
234
|
b(this, L, /* @__PURE__ */ d(() => {
|
|
235
235
|
const e = this.querySelector("nine-table-sheets-body");
|
|
236
236
|
e.querySelectorAll("nine-splitter").forEach((o) => {
|
|
237
|
-
const
|
|
238
|
-
|
|
237
|
+
const l = parseInt(o.dataset.splitIndex, 10), s = e.querySelector(`nine-table-sheet[data-index="${l - 1}"]`), t = e.querySelector(`nine-table-sheet[data-index="${l}"]`);
|
|
238
|
+
s && t && s.classList.contains("active") && t.classList.contains("active") ? o.classList.add("active") : o.classList.remove("active");
|
|
239
239
|
});
|
|
240
240
|
}, "#updateSplitters"));
|
|
241
241
|
}
|
|
@@ -245,10 +245,10 @@ let M = W;
|
|
|
245
245
|
customElements.get("nine-table-sheets") || customElements.define("nine-table-sheets", M);
|
|
246
246
|
var y, $;
|
|
247
247
|
const B = class B {
|
|
248
|
-
constructor(
|
|
248
|
+
constructor(n) {
|
|
249
249
|
b(this, y);
|
|
250
250
|
b(this, $, /* @__PURE__ */ d(() => {
|
|
251
|
-
const e = Array.from(a(this, y).host.children).filter((
|
|
251
|
+
const e = Array.from(a(this, y).host.children).filter((s) => s.tagName === "TABLE"), c = e.map((s, t) => `<nine-table-sheet class="${t === 0 ? "active" : ""}" data-index="${t}"></nine-table-sheet>`).join(""), o = e.map((s, t) => `<div class="nine-tab-item ${t === 0 ? "active" : ""}" data-index="${t}">Sheet ${t + 1}</div>`).join("");
|
|
252
252
|
a(this, y).innerHTML = `
|
|
253
253
|
<style>
|
|
254
254
|
:host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }
|
|
@@ -340,12 +340,12 @@ const B = class B {
|
|
|
340
340
|
</nine-table-body>
|
|
341
341
|
<nine-table-footer></nine-table-footer>
|
|
342
342
|
`;
|
|
343
|
-
const
|
|
344
|
-
|
|
345
|
-
e[
|
|
343
|
+
const l = a(this, y).querySelectorAll("nine-table-sheet");
|
|
344
|
+
l == null || l.forEach((s, t) => {
|
|
345
|
+
e[t] && s.init(e[t]);
|
|
346
346
|
});
|
|
347
347
|
}, "#render"));
|
|
348
|
-
w(this, y,
|
|
348
|
+
w(this, y, n), a(this, $).call(this);
|
|
349
349
|
}
|
|
350
350
|
};
|
|
351
351
|
y = new WeakMap(), $ = new WeakMap(), d(B, "LayoutManager");
|
package/dist/nine-table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nine-table.js","sources":["../src/external/NoPeer.js","../src/ui/nine-table-sheet.js","../src/ui/nine-table-sheets.js","../src/ui/LayoutManager.js","../src/core/nine-table.js"],"sourcesContent":["import { trace as traceOrigin } from '@ninebone/util';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-table\", \"green\");\n }\n}\n\nexport const trace = new Trace();","import { trace } from \"@nopeer\";\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n\n constructor() {\n super();\n }\n\n connectedCallback = () => {\n this.#render();\n };\n\n init = (tableEl) => {\n if (!tableEl) return;\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = this.#initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n console.log(this.#tableElement);\n\n const leftContainer = this.querySelector('.ng-container-left');\n const bodyContainer = this.querySelector('.ng-container-body');\n const rightContainer = this.querySelector('.ng-container-right');\n\n // 1. 메인 바디 영역 (좌우 고정 컬럼 제외)\n if (bodyContainer) {\n const bodyTable = this.#tableElement.cloneNode(true);\n bodyTable.querySelectorAll('[fixed=\"left\"], [fixed=\"right\"]').forEach(el => el.remove());\n bodyContainer.innerHTML = '';\n bodyContainer.appendChild(bodyTable);\n }\n\n // 2. 좌측 고정 영역 처리\n if (leftContainer) {\n const leftTable = this.#tableElement.cloneNode(true);\n leftTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'left') el.remove();\n });\n // tr.remove() 제거하여 데이터 행 구조 유지\n\n let leftWidth = 0;\n leftTable.querySelectorAll('col').forEach(col => {\n leftWidth += parseInt(col.getAttribute('width') || 0, 10);\n });\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n\n if (leftWidth > 0) {\n leftContainer.style.width = `${leftWidth}px`;\n leftContainer.style.minWidth = `${leftWidth}px`;\n }\n }\n\n // 3. 우측 고정 영역 처리\n if (rightContainer) {\n const rightTable = this.#tableElement.cloneNode(true);\n rightTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'right') el.remove();\n });\n // tr.remove() 제거하여 데이터 행 구조 유지\n\n let rightWidth = 0;\n rightTable.querySelectorAll('col').forEach(col => {\n rightWidth += parseInt(col.getAttribute('width') || 0, 10);\n });\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n\n if (rightWidth > 0) {\n rightContainer.style.width = `${rightWidth}px`;\n rightContainer.style.minWidth = `${rightWidth}px`;\n }\n }\n\n trace.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);\n };\n\n getRowCount = () => {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n };\n\n #initializeTable = (tbl) => {\n this.#ensureColgroup(tbl);\n this.#ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n };\n\n #ensureColgroup = (tbl) => {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n };\n\n #ensureThead = (tbl) => {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n };\n\n #render = () => {\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n overflow: hidden;\n }\n\n nine-table-sheet .ng-container-top {\n display: flex;\n flex-direction: row;\n flex: 1;\n width: 100%;\n overflow: hidden;\n position: relative;\n }\n\n nine-table-sheet .ng-container-left {\n flex-shrink: 0;\n overflow: hidden;\n background: #ffffff;\n border-right: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .ng-container-body {\n flex: 1;\n overflow: auto;\n background: #ffffff;\n position: relative;\n }\n\n nine-table-sheet .ng-container-right {\n flex-shrink: 0;\n overflow: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .ng-container-bottom {\n display: flex;\n flex-direction: row;\n height: 16px;\n flex-shrink: 0;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n }\n\n nine-table-sheet nine-table-hscrollbar {\n flex: 1;\n overflow: hidden;\n display: block;\n }\n\n nine-table-sheet .ng-scroll-edge {\n width: 16px;\n flex-shrink: 0;\n background: #f3f4f6;\n }\n\n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n\n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n\n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class='ng-container-top'>\n <div class='ng-container-left'></div>\n <div class='ng-container-body'></div>\n <div class='ng-container-right'></div>\n <nine-table-vscrollbar></nine-table-vscrollbar>\n </div>\n <div class='ng-container-bottom'>\n <nine-table-hscrollbar></nine-table-hscrollbar>\n <div class='ng-scroll-edge'></div>\n </div>\n `;\n };\n\n disconnectedCallback = () => {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n };\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback = () => {\n this.#init();\n };\n\n #init = () => {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.#switchSheet(index, isMultiSelect);\n });\n\n this.#switchSheet(0, false);\n };\n\n #switchSheet = (index, isMultiSelect = false) => {\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n this.#updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n };\n\n #updateSplitters = () => {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n };\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","import './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n }\n\n #render = () => {\n const rawElements = Array.from(this.#root.host.children);\n const rawTables = rawElements.filter(el => el.tagName === 'TABLE');\n\n const sheetsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<nine-table-sheet class=\"${className}\" data-index=\"${idx}\"></nine-table-sheet>`;\n }).join('');\n\n const tabsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<div class=\"nine-tab-item ${className}\" data-index=\"${idx}\">Sheet ${idx + 1}</div>`;\n }).join('');\n\n this.#root.innerHTML = `\n <style>\n :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }\n nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }\n nine-table-body { display: flex; flex-direction: row; flex: 1; overflow: hidden; position: relative; }\n nine-table-summary { display: none; width: 250px; flex-shrink: 0; border-right: 1px solid #e5e7eb; }\n nine-splitter:not([data-split-index]) { width: 4px; background: #e5e7eb; cursor: col-resize; flex-shrink: 0; }\n nine-table-analysis { display: none; }\n nine-table-footer { display: none; }\n\n nine-table-sheets {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n background: #fff;\n }\n nine-table-sheets-body {\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n flex-direction: row;\n }\n nine-table-sheet {\n display: none !important;\n height: 100%;\n overflow: auto;\n flex: 1 1 100%;\n }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-footer {\n display: flex;\n height: 32px;\n background: #f3f4f6;\n border-top: 1px solid #e5e7eb;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n flex-shrink: 0;\n }\n nine-table-sheets .nine-tab-bar {\n display: flex;\n align-items: center;\n gap: 2px;\n overflow-x: auto;\n flex: 1;\n height: 100%;\n }\n nine-table-sheets .nine-tab-item {\n padding: 4px 12px;\n cursor: pointer;\n font-size: 12px;\n color: #4b5563;\n background: #e5e7eb;\n border: 1px solid #d1d5db;\n border-top: none;\n border-radius: 0 0 3px 3px;\n user-select: none;\n }\n nine-table-sheets .nine-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n nine-table-sheets .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-table-sheets>\n <nine-table-sheets-body>${sheetsHtml}</nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\">${tabsHtml}</div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n </nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n\n const $sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n $sheetElements?.forEach(($el, idx) => {\n if (rawTables[idx]) {\n $el.init(rawTables[idx]);\n }\n });\n };\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot 하나만 넘겨서 내부에서 레이아웃 및 테이블 수집 처리\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_NineTableSheet","__privateAdd","_tableElement","__publicField","__privateGet","_render","tableEl","clonedTable","__privateSet","_initializeTable","leftContainer","bodyContainer","rightContainer","bodyTable","el","leftTable","leftWidth","col","rightTable","rightWidth","tbl","_ensureColgroup","_ensureThead","firstRow","colCount","colgroup","defaultWidth","i","thead","NineTableSheet","_NineTableSheets","_init","tabBar","e","tabItem","isMultiSelect","index","_switchSheet","body","tabItems","sheetElements","tab","idx","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","_updateSplitters","activeSheet","rowCountEl","splitter","splitIndex","leftSheet","rightSheet","NineTableSheets","_LayoutManager","shadowRoot","_root","rawTables","sheetsHtml","_","tabsHtml","$sheetElements","$el","LayoutManager","_NineTable","_created","NineTable"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nine-table.js","sources":["../src/external/NoPeer.js","../src/ui/nine-table-sheet.js","../src/ui/nine-table-sheets.js","../src/ui/LayoutManager.js","../src/core/nine-table.js"],"sourcesContent":["import { trace as traceOrigin } from '@ninebone/util';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-table\", \"green\");\n }\n}\n\nexport const trace = new Trace();","import { trace } from \"@nopeer\";\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n\n constructor() {\n super();\n }\n\n connectedCallback = () => {\n this.#render();\n };\n\n init = (tableEl) => {\n if (!tableEl) return;\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = this.#initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n console.log(this.#tableElement);\n\n const leftContainer = this.querySelector('.ng-container-left');\n const bodyContainer = this.querySelector('.ng-container-body');\n const rightContainer = this.querySelector('.ng-container-right');\n\n // 1. 메인 바디 영역 (좌우 고정 컬럼 제외)\n if (bodyContainer) {\n\n const bodyTable = this.#tableElement.cloneNode(true);\n\n console.log(bodyTable);\n\n bodyTable.querySelectorAll('[fixed=\"left\"], [fixed=\"right\"]').forEach(el => el.remove());\n bodyContainer.innerHTML = '';\n bodyContainer.appendChild(bodyTable);\n\n console.log(bodyContainer);\n }\n\n // 2. 좌측 고정 영역 처리\n if (leftContainer) {\n const leftTable = this.#tableElement.cloneNode(true);\n leftTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'left') el.remove();\n });\n // tr.remove() 제거하여 데이터 행 구조 유지\n\n let leftWidth = 0;\n leftTable.querySelectorAll('col').forEach(col => {\n leftWidth += parseInt(col.getAttribute('width') || 0, 10);\n });\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n\n if (leftWidth > 0) {\n leftContainer.style.width = `${leftWidth}px`;\n leftContainer.style.minWidth = `${leftWidth}px`;\n }\n }\n\n // 3. 우측 고정 영역 처리\n if (rightContainer) {\n const rightTable = this.#tableElement.cloneNode(true);\n rightTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'right') el.remove();\n });\n // tr.remove() 제거하여 데이터 행 구조 유지\n\n let rightWidth = 0;\n rightTable.querySelectorAll('col').forEach(col => {\n rightWidth += parseInt(col.getAttribute('width') || 0, 10);\n });\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n\n if (rightWidth > 0) {\n rightContainer.style.width = `${rightWidth}px`;\n rightContainer.style.minWidth = `${rightWidth}px`;\n }\n }\n\n trace.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);\n };\n\n getRowCount = () => {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n };\n\n #initializeTable = (tbl) => {\n this.#ensureColgroup(tbl);\n this.#ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n };\n\n #ensureColgroup = (tbl) => {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n };\n\n #ensureThead = (tbl) => {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n };\n\n #render = () => {\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n overflow: hidden;\n }\n\n nine-table-sheet .ng-container-top {\n display: flex;\n flex-direction: row;\n flex: 1;\n width: 100%;\n overflow: hidden;\n position: relative;\n }\n\n nine-table-sheet .ng-container-left {\n flex-shrink: 0;\n overflow: hidden;\n background: #ffffff;\n border-right: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .ng-container-body {\n flex: 1;\n overflow: auto;\n background: #ffffff;\n position: relative;\n }\n\n nine-table-sheet .ng-container-right {\n flex-shrink: 0;\n overflow: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .ng-container-bottom {\n display: flex;\n flex-direction: row;\n height: 16px;\n flex-shrink: 0;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n }\n\n nine-table-sheet nine-table-hscrollbar {\n flex: 1;\n overflow: hidden;\n display: block;\n }\n\n nine-table-sheet .ng-scroll-edge {\n width: 16px;\n flex-shrink: 0;\n background: #f3f4f6;\n }\n\n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n\n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n\n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class='ng-container-top'>\n <div class='ng-container-left'></div>\n <div class='ng-container-body'></div>\n <div class='ng-container-right'></div>\n <nine-table-vscrollbar></nine-table-vscrollbar>\n </div>\n <div class='ng-container-bottom'>\n <nine-table-hscrollbar></nine-table-hscrollbar>\n <div class='ng-scroll-edge'></div>\n </div>\n `;\n };\n\n disconnectedCallback = () => {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n };\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback = () => {\n this.#init();\n };\n\n #init = () => {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.#switchSheet(index, isMultiSelect);\n });\n\n this.#switchSheet(0, false);\n };\n\n #switchSheet = (index, isMultiSelect = false) => {\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n this.#updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n };\n\n #updateSplitters = () => {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n };\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","import './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n }\n\n #render = () => {\n const rawElements = Array.from(this.#root.host.children);\n const rawTables = rawElements.filter(el => el.tagName === 'TABLE');\n\n const sheetsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<nine-table-sheet class=\"${className}\" data-index=\"${idx}\"></nine-table-sheet>`;\n }).join('');\n\n const tabsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<div class=\"nine-tab-item ${className}\" data-index=\"${idx}\">Sheet ${idx + 1}</div>`;\n }).join('');\n\n this.#root.innerHTML = `\n <style>\n :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }\n nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }\n nine-table-body { display: flex; flex-direction: row; flex: 1; overflow: hidden; position: relative; }\n nine-table-summary { display: none; width: 250px; flex-shrink: 0; border-right: 1px solid #e5e7eb; }\n nine-splitter:not([data-split-index]) { width: 4px; background: #e5e7eb; cursor: col-resize; flex-shrink: 0; }\n nine-table-analysis { display: none; }\n nine-table-footer { display: none; }\n\n nine-table-sheets {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n background: #fff;\n }\n nine-table-sheets-body {\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n flex-direction: row;\n }\n nine-table-sheet {\n display: none !important;\n height: 100%;\n overflow: auto;\n flex: 1 1 100%;\n }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-footer {\n display: flex;\n height: 32px;\n background: #f3f4f6;\n border-top: 1px solid #e5e7eb;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n flex-shrink: 0;\n }\n nine-table-sheets .nine-tab-bar {\n display: flex;\n align-items: center;\n gap: 2px;\n overflow-x: auto;\n flex: 1;\n height: 100%;\n }\n nine-table-sheets .nine-tab-item {\n padding: 4px 12px;\n cursor: pointer;\n font-size: 12px;\n color: #4b5563;\n background: #e5e7eb;\n border: 1px solid #d1d5db;\n border-top: none;\n border-radius: 0 0 3px 3px;\n user-select: none;\n }\n nine-table-sheets .nine-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n nine-table-sheets .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-table-sheets>\n <nine-table-sheets-body>${sheetsHtml}</nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\">${tabsHtml}</div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n </nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n\n const $sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n $sheetElements?.forEach(($el, idx) => {\n if (rawTables[idx]) {\n $el.init(rawTables[idx]);\n }\n });\n };\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot 하나만 넘겨서 내부에서 레이아웃 및 테이블 수집 처리\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_NineTableSheet","__privateAdd","_tableElement","__publicField","__privateGet","_render","tableEl","clonedTable","__privateSet","_initializeTable","leftContainer","bodyContainer","rightContainer","bodyTable","el","leftTable","leftWidth","col","rightTable","rightWidth","tbl","_ensureColgroup","_ensureThead","firstRow","colCount","colgroup","defaultWidth","i","thead","NineTableSheet","_NineTableSheets","_init","tabBar","e","tabItem","isMultiSelect","index","_switchSheet","body","tabItems","sheetElements","tab","idx","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","_updateSplitters","activeSheet","rowCountEl","splitter","splitIndex","leftSheet","rightSheet","NineTableSheets","_LayoutManager","shadowRoot","_root","rawTables","sheetsHtml","_","tabsHtml","$sheetElements","$el","LayoutManager","_NineTable","_created","NineTable"],"mappings":"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"}
|
package/dist/nine-table.umd.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(n,t){typeof exports=="object"&&typeof module<"u"?t(require("@ninebone/util")):typeof define=="function"&&define.amd?define(["@ninebone/util"],t):(n=typeof globalThis<"u"?globalThis:n||self,t(n.NineboneUtil))})(this,function(n){"use strict";var K=Object.defineProperty;var U=n=>{throw TypeError(n)};var F=(n,t,c)=>t in n?K(n,t,{enumerable:!0,configurable:!0,writable:!0,value:c}):n[t]=c;var d=(n,t)=>K(n,"name",{value:t,configurable:!0});var v=(n,t,c)=>F(n,typeof t!="symbol"?t+"":t,c),D=(n,t,c)=>t.has(n)||U("Cannot "+c);var a=(n,t,c)=>(D(n,t,"read from private field"),c?c.call(n):t.get(n)),u=(n,t,c)=>t.has(n)?U("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(n):t.set(n,c),H=(n,t,c,m)=>(D(n,t,"write to private field"),m?m.call(n,c):t.set(n,c),c);var p,q,E,A,C,L,w,T,y,$,S;const N=class N extends n.trace.constructor{constructor(){super(),this.init("nine-table","green")}};d(N,"Trace");let t=N;const c=new t,R=class R extends HTMLElement{constructor(){super();u(this,p,null);v(this,"connectedCallback",d(()=>{a(this,C).call(this)},"connectedCallback"));v(this,"init",d(e=>{if(!e)return;const h=e.cloneNode(!0);H(this,p,a(this,q).call(this,h)),a(this,p).style.display="table",console.log(a(this,p));const o=this.querySelector(".ng-container-left"),
|
|
1
|
+
(function(n,t){typeof exports=="object"&&typeof module<"u"?t(require("@ninebone/util")):typeof define=="function"&&define.amd?define(["@ninebone/util"],t):(n=typeof globalThis<"u"?globalThis:n||self,t(n.NineboneUtil))})(this,function(n){"use strict";var K=Object.defineProperty;var U=n=>{throw TypeError(n)};var F=(n,t,c)=>t in n?K(n,t,{enumerable:!0,configurable:!0,writable:!0,value:c}):n[t]=c;var d=(n,t)=>K(n,"name",{value:t,configurable:!0});var v=(n,t,c)=>F(n,typeof t!="symbol"?t+"":t,c),D=(n,t,c)=>t.has(n)||U("Cannot "+c);var a=(n,t,c)=>(D(n,t,"read from private field"),c?c.call(n):t.get(n)),u=(n,t,c)=>t.has(n)?U("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(n):t.set(n,c),H=(n,t,c,m)=>(D(n,t,"write to private field"),m?m.call(n,c):t.set(n,c),c);var p,q,E,A,C,L,w,T,y,$,S;const N=class N extends n.trace.constructor{constructor(){super(),this.init("nine-table","green")}};d(N,"Trace");let t=N;const c=new t,R=class R extends HTMLElement{constructor(){super();u(this,p,null);v(this,"connectedCallback",d(()=>{a(this,C).call(this)},"connectedCallback"));v(this,"init",d(e=>{if(!e)return;const h=e.cloneNode(!0);H(this,p,a(this,q).call(this,h)),a(this,p).style.display="table",console.log(a(this,p));const o=this.querySelector(".ng-container-left"),l=this.querySelector(".ng-container-body"),s=this.querySelector(".ng-container-right");if(l){const i=a(this,p).cloneNode(!0);console.log(i),i.querySelectorAll('[fixed="left"], [fixed="right"]').forEach(r=>r.remove()),l.innerHTML="",l.appendChild(i),console.log(l)}if(o){const i=a(this,p).cloneNode(!0);i.querySelectorAll("col, th, td").forEach(b=>{b.getAttribute("fixed")!=="left"&&b.remove()});let r=0;i.querySelectorAll("col").forEach(b=>{r+=parseInt(b.getAttribute("width")||0,10)}),o.innerHTML="",o.appendChild(i),r>0&&(o.style.width=`${r}px`,o.style.minWidth=`${r}px`)}if(s){const i=a(this,p).cloneNode(!0);i.querySelectorAll("col, th, td").forEach(b=>{b.getAttribute("fixed")!=="right"&&b.remove()});let r=0;i.querySelectorAll("col").forEach(b=>{r+=parseInt(b.getAttribute("width")||0,10)}),s.innerHTML="",s.appendChild(i),r>0&&(s.style.width=`${r}px`,s.style.minWidth=`${r}px`)}c.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`)},"init"));v(this,"getRowCount",d(()=>a(this,p)?a(this,p).querySelectorAll("tbody tr").length:0,"getRowCount"));u(this,q,d(e=>(a(this,E).call(this,e),a(this,A).call(this,e),e.classList.add("nine-table-element"),e),"#initializeTable"));u(this,E,d(e=>{if(e.querySelector("colgroup"))return;const h=e.querySelector("tbody tr")||e.querySelector("tr"),o=h?h.querySelectorAll("th, td").length:1,l=document.createElement("colgroup"),s=Math.max(Math.floor((e.clientWidth||600)/o),100);for(let i=0;i<o;i++){const r=document.createElement("col");r.setAttribute("width",s),l.appendChild(r)}e.prepend(l)},"#ensureColgroup"));u(this,A,d(e=>{if(e.querySelector("thead"))return;const h=document.createElement("thead"),o=e.querySelector("colgroup");o?o.after(h):e.prepend(h)},"#ensureThead"));u(this,C,d(()=>{this.innerHTML=`
|
|
2
2
|
<style>
|
|
3
3
|
nine-table-sheet {
|
|
4
4
|
display: flex;
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
<nine-table-hscrollbar></nine-table-hscrollbar>
|
|
97
97
|
<div class='ng-scroll-edge'></div>
|
|
98
98
|
</div>
|
|
99
|
-
`},"#render"));v(this,"disconnectedCallback",d(()=>{this.innerHTML="",c.log("NineTableSheet destroyed.")},"disconnectedCallback"))}};p=new WeakMap,q=new WeakMap,E=new WeakMap,A=new WeakMap,C=new WeakMap,d(R,"NineTableSheet");let m=R;customElements.get("nine-table-sheet")||customElements.define("nine-table-sheet",m);const W=class W extends HTMLElement{constructor(){super();v(this,"connectedCallback",d(()=>{a(this,L).call(this)},"connectedCallback"));u(this,L,d(()=>{const e=this.querySelector(".nine-tab-bar");e&&(e.addEventListener("click",h=>{const o=h.target.closest(".nine-tab-item");if(!o)return;const
|
|
99
|
+
`},"#render"));v(this,"disconnectedCallback",d(()=>{this.innerHTML="",c.log("NineTableSheet destroyed.")},"disconnectedCallback"))}};p=new WeakMap,q=new WeakMap,E=new WeakMap,A=new WeakMap,C=new WeakMap,d(R,"NineTableSheet");let m=R;customElements.get("nine-table-sheet")||customElements.define("nine-table-sheet",m);const W=class W extends HTMLElement{constructor(){super();v(this,"connectedCallback",d(()=>{a(this,L).call(this)},"connectedCallback"));u(this,L,d(()=>{const e=this.querySelector(".nine-tab-bar");e&&(e.addEventListener("click",h=>{const o=h.target.closest(".nine-tab-item");if(!o)return;const l=h.ctrlKey||h.metaKey||h.shiftKey,s=parseInt(o.dataset.index,10);a(this,w).call(this,s,l)}),a(this,w).call(this,0,!1))},"#init"));u(this,w,d((e,h=!1)=>{const o=this.querySelector(".nine-tab-bar"),l=this.querySelector("nine-table-sheets-body"),s=o.querySelectorAll(".nine-tab-item"),i=l.querySelectorAll("nine-table-sheet");if(!s[e])return;if(!h)s.forEach((f,g)=>{f.classList.toggle("active",g===e);const x=l.querySelector(`nine-table-sheet[data-index="${g}"]`);x&&(x.style.flex="")}),i.forEach((f,g)=>{f.classList.toggle("active",g===e)});else{const f=s[e],g=o.querySelectorAll(".nine-tab-item.active");if(f.classList.contains("active")&&g.length<=1)return;f.classList.toggle("active");const x=l.querySelector(`nine-table-sheet[data-index="${e}"]`);x&&(x.classList.toggle("active"),x.classList.contains("active")||(x.style.flex=""))}const r=Array.from(l.querySelectorAll("nine-table-sheet.active"));if(r.length>1){const f=1/r.length;r.forEach(g=>{(!g.style.flex||g.style.flex==="1 1 100%")&&(g.style.flex=`${f} ${f} 0px`)})}else r.forEach(f=>{f.style.flex="1 1 100%"});a(this,T).call(this);const b=l.querySelector("nine-table-sheet.active");if(b&&typeof b.getRowCount=="function"){const f=this.querySelector("#row-count");f&&(f.textContent=b.getRowCount().toLocaleString())}},"#switchSheet"));u(this,T,d(()=>{const e=this.querySelector("nine-table-sheets-body");e.querySelectorAll("nine-splitter").forEach(o=>{const l=parseInt(o.dataset.splitIndex,10),s=e.querySelector(`nine-table-sheet[data-index="${l-1}"]`),i=e.querySelector(`nine-table-sheet[data-index="${l}"]`);s&&i&&s.classList.contains("active")&&i.classList.contains("active")?o.classList.add("active"):o.classList.remove("active")})},"#updateSplitters"))}};L=new WeakMap,w=new WeakMap,T=new WeakMap,d(W,"NineTableSheets");let M=W;customElements.get("nine-table-sheets")||customElements.define("nine-table-sheets",M);const j=class j{constructor(k){u(this,y);u(this,$,d(()=>{const e=Array.from(a(this,y).host.children).filter(s=>s.tagName==="TABLE"),h=e.map((s,i)=>`<nine-table-sheet class="${i===0?"active":""}" data-index="${i}"></nine-table-sheet>`).join(""),o=e.map((s,i)=>`<div class="nine-tab-item ${i===0?"active":""}" data-index="${i}">Sheet ${i+1}</div>`).join("");a(this,y).innerHTML=`
|
|
100
100
|
<style>
|
|
101
101
|
:host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }
|
|
102
102
|
nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }
|
|
@@ -186,5 +186,5 @@
|
|
|
186
186
|
<nine-table-analysis></nine-table-analysis>
|
|
187
187
|
</nine-table-body>
|
|
188
188
|
<nine-table-footer></nine-table-footer>
|
|
189
|
-
`;const
|
|
189
|
+
`;const l=a(this,y).querySelectorAll("nine-table-sheet");l==null||l.forEach((s,i)=>{e[i]&&s.init(e[i])})},"#render"));H(this,y,k),a(this,$).call(this)}};y=new WeakMap,$=new WeakMap,d(j,"LayoutManager");let z=j;const B=class B extends HTMLElement{constructor(){super();u(this,S,!1);this.attachShadow({mode:"open"})}connectedCallback(){a(this,S)||(this.layoutManager=new z(this.shadowRoot),H(this,S,!0),c.log("NineTable connected."),this.dispatchEvent(new CustomEvent("load",{bubbles:!0,detail:{target:this}})))}disconnectedCallback(){c.log("NineTable disconnected.")}};S=new WeakMap,d(B,"NineTable");let I=B;customElements.get("nine-table")||customElements.define("nine-table",I)});
|
|
190
190
|
//# sourceMappingURL=nine-table.umd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nine-table.umd.js","sources":["../src/external/NoPeer.js","../src/ui/nine-table-sheet.js","../src/ui/nine-table-sheets.js","../src/ui/LayoutManager.js","../src/core/nine-table.js"],"sourcesContent":["import { trace as traceOrigin } from '@ninebone/util';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-table\", \"green\");\n }\n}\n\nexport const trace = new Trace();","import { trace } from \"@nopeer\";\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n\n constructor() {\n super();\n }\n\n connectedCallback = () => {\n this.#render();\n };\n\n init = (tableEl) => {\n if (!tableEl) return;\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = this.#initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n console.log(this.#tableElement);\n\n const leftContainer = this.querySelector('.ng-container-left');\n const bodyContainer = this.querySelector('.ng-container-body');\n const rightContainer = this.querySelector('.ng-container-right');\n\n // 1. 메인 바디 영역 (좌우 고정 컬럼 제외)\n if (bodyContainer) {\n const bodyTable = this.#tableElement.cloneNode(true);\n bodyTable.querySelectorAll('[fixed=\"left\"], [fixed=\"right\"]').forEach(el => el.remove());\n bodyContainer.innerHTML = '';\n bodyContainer.appendChild(bodyTable);\n }\n\n // 2. 좌측 고정 영역 처리\n if (leftContainer) {\n const leftTable = this.#tableElement.cloneNode(true);\n leftTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'left') el.remove();\n });\n // tr.remove() 제거하여 데이터 행 구조 유지\n\n let leftWidth = 0;\n leftTable.querySelectorAll('col').forEach(col => {\n leftWidth += parseInt(col.getAttribute('width') || 0, 10);\n });\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n\n if (leftWidth > 0) {\n leftContainer.style.width = `${leftWidth}px`;\n leftContainer.style.minWidth = `${leftWidth}px`;\n }\n }\n\n // 3. 우측 고정 영역 처리\n if (rightContainer) {\n const rightTable = this.#tableElement.cloneNode(true);\n rightTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'right') el.remove();\n });\n // tr.remove() 제거하여 데이터 행 구조 유지\n\n let rightWidth = 0;\n rightTable.querySelectorAll('col').forEach(col => {\n rightWidth += parseInt(col.getAttribute('width') || 0, 10);\n });\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n\n if (rightWidth > 0) {\n rightContainer.style.width = `${rightWidth}px`;\n rightContainer.style.minWidth = `${rightWidth}px`;\n }\n }\n\n trace.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);\n };\n\n getRowCount = () => {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n };\n\n #initializeTable = (tbl) => {\n this.#ensureColgroup(tbl);\n this.#ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n };\n\n #ensureColgroup = (tbl) => {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n };\n\n #ensureThead = (tbl) => {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n };\n\n #render = () => {\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n overflow: hidden;\n }\n\n nine-table-sheet .ng-container-top {\n display: flex;\n flex-direction: row;\n flex: 1;\n width: 100%;\n overflow: hidden;\n position: relative;\n }\n\n nine-table-sheet .ng-container-left {\n flex-shrink: 0;\n overflow: hidden;\n background: #ffffff;\n border-right: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .ng-container-body {\n flex: 1;\n overflow: auto;\n background: #ffffff;\n position: relative;\n }\n\n nine-table-sheet .ng-container-right {\n flex-shrink: 0;\n overflow: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .ng-container-bottom {\n display: flex;\n flex-direction: row;\n height: 16px;\n flex-shrink: 0;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n }\n\n nine-table-sheet nine-table-hscrollbar {\n flex: 1;\n overflow: hidden;\n display: block;\n }\n\n nine-table-sheet .ng-scroll-edge {\n width: 16px;\n flex-shrink: 0;\n background: #f3f4f6;\n }\n\n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n\n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n\n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class='ng-container-top'>\n <div class='ng-container-left'></div>\n <div class='ng-container-body'></div>\n <div class='ng-container-right'></div>\n <nine-table-vscrollbar></nine-table-vscrollbar>\n </div>\n <div class='ng-container-bottom'>\n <nine-table-hscrollbar></nine-table-hscrollbar>\n <div class='ng-scroll-edge'></div>\n </div>\n `;\n };\n\n disconnectedCallback = () => {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n };\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback = () => {\n this.#init();\n };\n\n #init = () => {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.#switchSheet(index, isMultiSelect);\n });\n\n this.#switchSheet(0, false);\n };\n\n #switchSheet = (index, isMultiSelect = false) => {\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n this.#updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n };\n\n #updateSplitters = () => {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n };\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","import './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n }\n\n #render = () => {\n const rawElements = Array.from(this.#root.host.children);\n const rawTables = rawElements.filter(el => el.tagName === 'TABLE');\n\n const sheetsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<nine-table-sheet class=\"${className}\" data-index=\"${idx}\"></nine-table-sheet>`;\n }).join('');\n\n const tabsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<div class=\"nine-tab-item ${className}\" data-index=\"${idx}\">Sheet ${idx + 1}</div>`;\n }).join('');\n\n this.#root.innerHTML = `\n <style>\n :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }\n nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }\n nine-table-body { display: flex; flex-direction: row; flex: 1; overflow: hidden; position: relative; }\n nine-table-summary { display: none; width: 250px; flex-shrink: 0; border-right: 1px solid #e5e7eb; }\n nine-splitter:not([data-split-index]) { width: 4px; background: #e5e7eb; cursor: col-resize; flex-shrink: 0; }\n nine-table-analysis { display: none; }\n nine-table-footer { display: none; }\n\n nine-table-sheets {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n background: #fff;\n }\n nine-table-sheets-body {\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n flex-direction: row;\n }\n nine-table-sheet {\n display: none !important;\n height: 100%;\n overflow: auto;\n flex: 1 1 100%;\n }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-footer {\n display: flex;\n height: 32px;\n background: #f3f4f6;\n border-top: 1px solid #e5e7eb;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n flex-shrink: 0;\n }\n nine-table-sheets .nine-tab-bar {\n display: flex;\n align-items: center;\n gap: 2px;\n overflow-x: auto;\n flex: 1;\n height: 100%;\n }\n nine-table-sheets .nine-tab-item {\n padding: 4px 12px;\n cursor: pointer;\n font-size: 12px;\n color: #4b5563;\n background: #e5e7eb;\n border: 1px solid #d1d5db;\n border-top: none;\n border-radius: 0 0 3px 3px;\n user-select: none;\n }\n nine-table-sheets .nine-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n nine-table-sheets .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-table-sheets>\n <nine-table-sheets-body>${sheetsHtml}</nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\">${tabsHtml}</div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n </nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n\n const $sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n $sheetElements?.forEach(($el, idx) => {\n if (rawTables[idx]) {\n $el.init(rawTables[idx]);\n }\n });\n };\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot 하나만 넘겨서 내부에서 레이아웃 및 테이블 수집 처리\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_NineTableSheet","__privateAdd","_tableElement","__publicField","__privateGet","_render","tableEl","clonedTable","__privateSet","_initializeTable","leftContainer","bodyContainer","rightContainer","bodyTable","el","leftTable","leftWidth","col","rightTable","rightWidth","tbl","_ensureColgroup","_ensureThead","firstRow","colCount","colgroup","defaultWidth","thead","NineTableSheet","_NineTableSheets","_init","tabBar","e","tabItem","isMultiSelect","index","_switchSheet","body","tabItems","sheetElements","tab","idx","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","_updateSplitters","activeSheet","rowCountEl","splitter","splitIndex","leftSheet","rightSheet","NineTableSheets","_LayoutManager","shadowRoot","_root","rawTables","sheetsHtml","_","tabsHtml","$sheetElements","$el","LayoutManager","_NineTable","_created","NineTable"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nine-table.umd.js","sources":["../src/external/NoPeer.js","../src/ui/nine-table-sheet.js","../src/ui/nine-table-sheets.js","../src/ui/LayoutManager.js","../src/core/nine-table.js"],"sourcesContent":["import { trace as traceOrigin } from '@ninebone/util';\n\nexport class Trace extends traceOrigin.constructor {\n constructor() {\n super();\n this.init(\"nine-table\", \"green\");\n }\n}\n\nexport const trace = new Trace();","import { trace } from \"@nopeer\";\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n\n constructor() {\n super();\n }\n\n connectedCallback = () => {\n this.#render();\n };\n\n init = (tableEl) => {\n if (!tableEl) return;\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = this.#initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n console.log(this.#tableElement);\n\n const leftContainer = this.querySelector('.ng-container-left');\n const bodyContainer = this.querySelector('.ng-container-body');\n const rightContainer = this.querySelector('.ng-container-right');\n\n // 1. 메인 바디 영역 (좌우 고정 컬럼 제외)\n if (bodyContainer) {\n\n const bodyTable = this.#tableElement.cloneNode(true);\n\n console.log(bodyTable);\n\n bodyTable.querySelectorAll('[fixed=\"left\"], [fixed=\"right\"]').forEach(el => el.remove());\n bodyContainer.innerHTML = '';\n bodyContainer.appendChild(bodyTable);\n\n console.log(bodyContainer);\n }\n\n // 2. 좌측 고정 영역 처리\n if (leftContainer) {\n const leftTable = this.#tableElement.cloneNode(true);\n leftTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'left') el.remove();\n });\n // tr.remove() 제거하여 데이터 행 구조 유지\n\n let leftWidth = 0;\n leftTable.querySelectorAll('col').forEach(col => {\n leftWidth += parseInt(col.getAttribute('width') || 0, 10);\n });\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n\n if (leftWidth > 0) {\n leftContainer.style.width = `${leftWidth}px`;\n leftContainer.style.minWidth = `${leftWidth}px`;\n }\n }\n\n // 3. 우측 고정 영역 처리\n if (rightContainer) {\n const rightTable = this.#tableElement.cloneNode(true);\n rightTable.querySelectorAll('col, th, td').forEach(el => {\n if (el.getAttribute('fixed') !== 'right') el.remove();\n });\n // tr.remove() 제거하여 데이터 행 구조 유지\n\n let rightWidth = 0;\n rightTable.querySelectorAll('col').forEach(col => {\n rightWidth += parseInt(col.getAttribute('width') || 0, 10);\n });\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n\n if (rightWidth > 0) {\n rightContainer.style.width = `${rightWidth}px`;\n rightContainer.style.minWidth = `${rightWidth}px`;\n }\n }\n\n trace.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`);\n };\n\n getRowCount = () => {\n if (!this.#tableElement) return 0;\n return this.#tableElement.querySelectorAll('tbody tr').length;\n };\n\n #initializeTable = (tbl) => {\n this.#ensureColgroup(tbl);\n this.#ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n };\n\n #ensureColgroup = (tbl) => {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n };\n\n #ensureThead = (tbl) => {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n };\n\n #render = () => {\n this.innerHTML = `\n <style>\n nine-table-sheet {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n position: relative;\n box-sizing: border-box;\n background: #ffffff;\n overflow: hidden;\n }\n\n nine-table-sheet .ng-container-top {\n display: flex;\n flex-direction: row;\n flex: 1;\n width: 100%;\n overflow: hidden;\n position: relative;\n }\n\n nine-table-sheet .ng-container-left {\n flex-shrink: 0;\n overflow: hidden;\n background: #ffffff;\n border-right: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .ng-container-body {\n flex: 1;\n overflow: auto;\n background: #ffffff;\n position: relative;\n }\n\n nine-table-sheet .ng-container-right {\n flex-shrink: 0;\n overflow: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\n }\n\n nine-table-sheet .ng-container-bottom {\n display: flex;\n flex-direction: row;\n height: 16px;\n flex-shrink: 0;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n }\n\n nine-table-sheet nine-table-hscrollbar {\n flex: 1;\n overflow: hidden;\n display: block;\n }\n\n nine-table-sheet .ng-scroll-edge {\n width: 16px;\n flex-shrink: 0;\n background: #f3f4f6;\n }\n\n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n\n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n\n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class='ng-container-top'>\n <div class='ng-container-left'></div>\n <div class='ng-container-body'></div>\n <div class='ng-container-right'></div>\n <nine-table-vscrollbar></nine-table-vscrollbar>\n </div>\n <div class='ng-container-bottom'>\n <nine-table-hscrollbar></nine-table-hscrollbar>\n <div class='ng-scroll-edge'></div>\n </div>\n `;\n };\n\n disconnectedCallback = () => {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n };\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback = () => {\n this.#init();\n };\n\n #init = () => {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.#switchSheet(index, isMultiSelect);\n });\n\n this.#switchSheet(0, false);\n };\n\n #switchSheet = (index, isMultiSelect = false) => {\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n this.#updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n };\n\n #updateSplitters = () => {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n };\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","import './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n }\n\n #render = () => {\n const rawElements = Array.from(this.#root.host.children);\n const rawTables = rawElements.filter(el => el.tagName === 'TABLE');\n\n const sheetsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<nine-table-sheet class=\"${className}\" data-index=\"${idx}\"></nine-table-sheet>`;\n }).join('');\n\n const tabsHtml = rawTables.map((_, idx) => {\n const className = idx === 0 ? 'active' : '';\n return `<div class=\"nine-tab-item ${className}\" data-index=\"${idx}\">Sheet ${idx + 1}</div>`;\n }).join('');\n\n this.#root.innerHTML = `\n <style>\n :host { display: flex; flex-direction: column; position: relative; overflow: hidden; height: 100%; background: #fff; }\n nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }\n nine-table-body { display: flex; flex-direction: row; flex: 1; overflow: hidden; position: relative; }\n nine-table-summary { display: none; width: 250px; flex-shrink: 0; border-right: 1px solid #e5e7eb; }\n nine-splitter:not([data-split-index]) { width: 4px; background: #e5e7eb; cursor: col-resize; flex-shrink: 0; }\n nine-table-analysis { display: none; }\n nine-table-footer { display: none; }\n\n nine-table-sheets {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n background: #fff;\n }\n nine-table-sheets-body {\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n flex-direction: row;\n }\n nine-table-sheet {\n display: none !important;\n height: 100%;\n overflow: auto;\n flex: 1 1 100%;\n }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-footer {\n display: flex;\n height: 32px;\n background: #f3f4f6;\n border-top: 1px solid #e5e7eb;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n flex-shrink: 0;\n }\n nine-table-sheets .nine-tab-bar {\n display: flex;\n align-items: center;\n gap: 2px;\n overflow-x: auto;\n flex: 1;\n height: 100%;\n }\n nine-table-sheets .nine-tab-item {\n padding: 4px 12px;\n cursor: pointer;\n font-size: 12px;\n color: #4b5563;\n background: #e5e7eb;\n border: 1px solid #d1d5db;\n border-top: none;\n border-radius: 0 0 3px 3px;\n user-select: none;\n }\n nine-table-sheets .nine-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n nine-table-sheets .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-table-sheets>\n <nine-table-sheets-body>${sheetsHtml}</nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\">${tabsHtml}</div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n </nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n\n const $sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n $sheetElements?.forEach(($el, idx) => {\n if (rawTables[idx]) {\n $el.init(rawTables[idx]);\n }\n });\n };\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot 하나만 넘겨서 내부에서 레이아웃 및 테이블 수집 처리\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_NineTableSheet","__privateAdd","_tableElement","__publicField","__privateGet","_render","tableEl","clonedTable","__privateSet","_initializeTable","leftContainer","bodyContainer","rightContainer","bodyTable","el","leftTable","leftWidth","col","rightTable","rightWidth","tbl","_ensureColgroup","_ensureThead","firstRow","colCount","colgroup","defaultWidth","thead","NineTableSheet","_NineTableSheets","_init","tabBar","e","tabItem","isMultiSelect","index","_switchSheet","body","tabItems","sheetElements","tab","idx","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","_updateSplitters","activeSheet","rowCountEl","splitter","splitIndex","leftSheet","rightSheet","NineTableSheets","_LayoutManager","shadowRoot","_root","rawTables","sheetsHtml","_","tabsHtml","$sheetElements","$el","LayoutManager","_NineTable","_created","NineTable"],"mappings":"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"}
|