@ninebone/table 0.0.70 → 0.0.71
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 +228 -228
- package/dist/nine-table.js.map +1 -1
- package/dist/nine-table.umd.js +10 -10
- package/dist/nine-table.umd.js.map +1 -1
- package/package.json +1 -1
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-vscrollbar.js","../src/ui/nine-table-hscrollbar.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 static SCROLLBAR_SIZE = 16;\n\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#render();\n };\n\n init = (tableEl) => {\n if (!tableEl) return;\n\n const initializeTable = (tbl) => {\n\n const ensureColgroup = (tbl) => {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n };\n\n const ensureThead = (tbl) => {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n };\n\n ensureColgroup(tbl);\n ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n };\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const leftContainer = this.querySelector('.ng-container-left');\n const bodyContainer = this.querySelector('.ng-container-body');\n const rightContainer = this.querySelector('.ng-container-right');\n\n const filterTableByFixed = (sourceTable, targetFixedType, isBody = false) => {\n const tbl = sourceTable.cloneNode(true);\n const cols = Array.from(tbl.querySelectorAll('colgroup col'));\n const targetIndices = [];\n\n cols.forEach((col, idx) => {\n const fixedAttr = col.getAttribute('fixed');\n const isMatch = isBody ? (!fixedAttr || fixedAttr === '') : (fixedAttr === targetFixedType);\n if (!isMatch) {\n targetIndices.push(idx);\n }\n });\n\n targetIndices.reverse().forEach(idx => {\n if (cols[idx]) cols[idx].remove();\n tbl.querySelectorAll('tr').forEach(tr => {\n const cells = tr.querySelectorAll('th, td');\n if (cells[idx]) cells[idx].remove();\n });\n });\n\n return tbl;\n };\n\n // 1. 메인 바디 영역\n if (bodyContainer) {\n const bodyTable = filterTableByFixed(this.#tableElement, null, true);\n bodyContainer.innerHTML = '';\n bodyContainer.appendChild(bodyTable);\n }\n\n // 2. 좌측 고정 영역\n if (leftContainer) {\n const leftTable = filterTableByFixed(this.#tableElement, 'left', false);\n\n let leftWidth = 0;\n leftTable.querySelectorAll('col').forEach(col => {\n const w = parseInt(col.getAttribute('width'), 10);\n if (!isNaN(w)) leftWidth += w;\n });\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n\n const activeLeftWidth = leftWidth > 0 ? leftWidth : 0;\n leftContainer.style.flex = `0 0 ${activeLeftWidth}px`;\n leftContainer.style.width = `${activeLeftWidth}px`;\n }\n\n // 3. 우측 고정 영역\n if (rightContainer) {\n const rightTable = filterTableByFixed(this.#tableElement, 'right', false);\n\n let rightWidth = 0;\n rightTable.querySelectorAll('col').forEach(col => {\n const w = parseInt(col.getAttribute('width'), 10);\n if (!isNaN(w)) rightWidth += w;\n });\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n\n const activeRightWidth = rightWidth > 0 ? rightWidth : 0;\n rightContainer.style.flex = `0 0 ${activeRightWidth}px`;\n rightContainer.style.width = `${activeRightWidth}px`;\n }\n\n // 데이터 건수 기반 세로 스크롤 제어 정책 반영\n if (bodyContainer) {\n const rowCount = this.getRowCount();\n bodyContainer.style.overflowY = rowCount > 10 ? 'auto' : 'hidden';\n\n bodyContainer.addEventListener('scroll', () => {\n const scrollLeft = bodyContainer.scrollLeft;\n\n // 좌우 고정 영역은 가로 스크롤 시 밀려나지 않도록 위치 보정 또는\n // 하단 스크롤바 썸(Thumb) 위치 동기화 호출\n const hScrollbar = this.querySelector('nine-table-hscrollbar');\n if (hScrollbar && typeof hScrollbar.syncThumb === 'function') {\n hScrollbar.syncThumb(scrollLeft);\n }\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 // 🎯 외부 스크롤바 및 컨트롤러 연동용 메서드\n scrollToX = (scrollLeft) => {\n const bodyContainer = this.querySelector('.ng-container-body');\n if (bodyContainer) bodyContainer.scrollLeft = scrollLeft;\n };\n\n scrollToY = (scrollTop) => {\n const bodyContainer = this.querySelector('.ng-container-body');\n if (bodyContainer) bodyContainer.scrollTop = scrollTop;\n };\n\n #render = () => {\n const sbSize = NineTableSheet.SCROLLBAR_SIZE;\n\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 1 auto;\n width: 100%;\n height: calc(100% - ${sbSize}px);\n overflow: hidden;\n position: relative;\n }\n \n nine-table-sheet .ng-container-left {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: #ffffff;\n border-right: 1px solid #e5e7eb;\n flex-shrink: 0;\n }\n \n nine-table-sheet .ng-container-body {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow-x: auto;\n overflow-y: auto;\n background: #ffffff;\n position: relative;\n }\n \n nine-table-sheet .ng-container-right {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\n flex-shrink: 0;\n }\n \n nine-table-sheet .ng-container-bottom {\n display: flex;\n flex-direction: row;\n height: ${sbSize}px;\n min-height: ${sbSize}px;\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 height: 100%;\n overflow: hidden;\n display: block;\n }\n \n nine-table-sheet .ng-scroll-edge {\n width: ${sbSize}px;\n min-width: ${sbSize}px;\n height: 100%;\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}","\nimport { trace } from \"@nopeer\";\n\nclass NineTableVScrollBar extends HTMLElement {\n #owner;\n #dragging;\n #elements;\n #interval1;\n #interval2;\n #firstThumbMove;\n #prevY = 0;\n\n constructor() {\n super();\n this.applyBaseStyle();\n }\n\n connectedCallback() {\n // 호스트 엘리먼트(nine-table-sheet) 참조\n this.#owner = this.getRootNode().host;\n if (!this.#owner) return;\n\n this.shadowRoot.innerHTML = `\n <button class='ng-scroll-top' disabled><div class='ng-scroll-icon'></div></button>\n <div class='ng-scroll-track'> <div class='ng-scroll-thumb'></div> </div>\n <button class='ng-scroll-bottom'><div class='ng-scroll-icon'></div></button>\n `;\n\n super.connectedCallback();\n\n this.#elements = {\n track : this.shadowRoot.querySelector(\".ng-scroll-track\"),\n thumb : this.shadowRoot.querySelector(\".ng-scroll-thumb\"),\n top : this.shadowRoot.querySelector(\".ng-scroll-top\"),\n bottom : this.shadowRoot.querySelector(\".ng-scroll-bottom\"),\n };\n\n this.#init();\n }\n\n refresh = () => {\n if (!this.#owner) return;\n\n const body = this.#owner.querySelector(\".ng-container-body\");\n if (!body) return;\n\n const thumb = $(this.#elements.thumb, this.shadowRoot);\n const thead = body.querySelector(\"table > thead\");\n\n const currRow = this.#owner.getRowCount ? 0 : 0; // 데이터 연동 시점 확장 포인트\n const trackHeight = $(this.#elements.track).height();\n const thumbHeight = $(this.#elements.thumb).height();\n\n // 높이 및 표시 여부 산출\n const totalRows = this.#owner.getRowCount ? this.#owner.getRowCount() : 0;\n if (totalRows <= 10) {\n $(this).hide();\n return;\n } else {\n $(this).show();\n }\n\n const theadHeight = thead ? thead.getBoundingClientRect().height : 0;\n const h = Math.max(Math.min(trackHeight * (body.clientHeight - theadHeight) / (32 * totalRows), trackHeight), 16);\n\n thumb[0].dataset.height = h;\n thumb.css({ \"height\": h });\n\n const totalHeight = trackHeight - this.#getThumbHeight();\n if (totalHeight <= 0) return;\n\n // 위치(Top) 산출\n let y = 0;\n const maxScrollTop = body.scrollHeight - body.clientHeight;\n if (maxScrollTop > 0) {\n y = parseInt((body.scrollTop / maxScrollTop) * totalHeight, 10);\n if (y > trackHeight - thumbHeight) y = trackHeight - thumbHeight;\n if (y < 0) y = 0;\n }\n\n this.#elements.thumb.style.top = y + 'px';\n\n // 버튼 활성/비활성 처리\n this.#elements.top.disabled = body.scrollTop <= 0;\n this.#elements.bottom.disabled = body.scrollTop >= maxScrollTop;\n };\n\n delayScroll = (pos, delay1, delay2, callback) => {\n clearInterval(this.#interval1);\n clearInterval(this.#interval2);\n\n const body = this.#owner.querySelector(\".ng-container-body\");\n if (body) body.scrollTop += pos * 32;\n\n this.#interval1 = setInterval(() => {\n clearInterval(this.#interval1);\n\n this.#interval2 = setInterval(() => {\n if (body) {\n body.scrollTop += pos * 32;\n if (callback) callback.call();\n }\n }, delay2);\n }, delay1);\n };\n\n stopScroll = () => {\n clearInterval(this.#interval1);\n clearInterval(this.#interval2);\n };\n\n #init = () => {\n const delayScrollAction = (pos) => {\n clearInterval(this.#interval1);\n clearInterval(this.#interval2);\n\n const body = this.#owner.querySelector(\".ng-container-body\");\n if (body) body.scrollTop += pos * 32;\n\n this.#interval1 = setInterval(() => {\n clearInterval(this.#interval1);\n\n this.#interval2 = setInterval(() => {\n if (body) body.scrollTop += pos * 32;\n }, 10);\n }, 500);\n };\n\n $(this.#elements.top).on(\"mousedown\", e => { if (e.buttons != 1 || e.altKey || e.ctrlKey || e.shiftKey) return; delayScrollAction(-1); });\n $(this.#elements.bottom).on(\"mousedown\", e => { if (e.buttons != 1 || e.altKey || e.ctrlKey || e.shiftKey) return; delayScrollAction(1); });\n\n $(this.#elements.top).on(\"touchstart\", e => { delayScrollAction(-1); });\n $(this.#elements.bottom).on(\"touchstart\", e => { delayScrollAction(1); });\n\n const clearTimer = () => {\n clearInterval(this.#interval1);\n clearInterval(this.#interval2);\n };\n\n this.#elements.top.ontouchend =\n this.#elements.bottom.ontouchend =\n this.#elements.track.ontouchend =\n this.#elements.top.onmouseup =\n this.#elements.top.onmouseleave =\n this.#elements.bottom.onmouseup =\n this.#elements.bottom.onmouseleave =\n this.#elements.track.onmouseup =\n this.#elements.track.onmouseleave = clearTimer;\n\n $(this.#elements.track).on(\"mousedown\", this.#track_onMouseDown);\n $(this.#elements.track).on(\"touchstart\", this.#track_onTouchStart);\n\n $(this.#elements.thumb).on(\"mousedown\", this.#thumb_onMouseDown);\n $(this.#elements.thumb).on(\"touchstart\", this.#thumb_onTouchStart);\n\n document.addEventListener('mouseup', e => {\n if (this.#dragging) {\n this.#dragging = false;\n }\n document.removeEventListener('mousemove', this.#thumb_onMouseMove);\n });\n\n document.addEventListener('touchend', e => {\n this.#dragging = false;\n document.removeEventListener('touchmove', this.#thumb_onTouchMove);\n });\n };\n\n #track_onTouchStart = e => {\n var rect = e.target.getBoundingClientRect();\n e.clientX = e.targetTouches[0].clientX;\n e.clientY = e.targetTouches[0].clientY;\n e.buttons = 1;\n this.#track_onMouseDown(e);\n }\n\n #track_onMouseDown = e => {\n if (this.#dragging) return;\n if (e.buttons != 1 || e.altKey || e.ctrlKey || e.shiftKey) return;\n e.preventDefault();\n\n var thumbBound = this.#elements.thumb.getBoundingClientRect();\n const body = this.#owner.querySelector(\".ng-container-body\");\n if (!body) return;\n\n const scrollStep = body.clientHeight;\n const pos = (e.clientY > thumbBound.y) ? scrollStep : -scrollStep;\n body.scrollTop += pos;\n\n clearInterval(this.#interval1);\n clearInterval(this.#interval2);\n\n this.#interval1 = setInterval(() => {\n clearInterval(this.#interval1);\n\n this.#interval2 = setInterval(() => {\n var thumbBound = this.#elements.thumb.getBoundingClientRect();\n if (e.clientY > thumbBound.y && e.clientY < thumbBound.y + thumbBound.height) {\n clearInterval(this.#interval2);\n } else {\n body.scrollTop += (e.clientY > thumbBound.y) ? scrollStep : -scrollStep;\n }\n }, 10);\n }, 500);\n };\n\n #thumb_onTouchStart = e => {\n e.clientX = e.targetTouches[0].clientX;\n e.clientY = e.targetTouches[0].clientY;\n e.buttons = 1;\n this.#thumb_onMouseDown(e);\n document.addEventListener('touchmove', this.#thumb_onTouchMove);\n };\n\n #thumb_onTouchMove = e => {\n e.clientX = e.targetTouches[0].clientX;\n e.clientY = e.targetTouches[0].clientY;\n e.buttons = 1;\n this.#thumb_onMouseMove(e);\n };\n\n #thumb_onMouseDown = e => {\n this.#prevY = e.clientY;\n this.#dragging = true;\n this.shiftY = e.offsetY + this.#elements.track.getBoundingClientRect().y;\n\n this.trackHeight = $(this.#elements.track).height();\n this.thumbHeight = $(this.#elements.thumb).height();\n\n this.#firstThumbMove = true;\n document.addEventListener('mousemove', this.#thumb_onMouseMove);\n };\n\n #thumb_onMouseMove = (e) => {\n if (!this.#dragging) return;\n e.preventDefault();\n\n const trackHeight = this.trackHeight;\n const thumbHeight = this.#getThumbHeight();\n\n var y = e.clientY - this.shiftY;\n if (y < 0) y = 0;\n if (y + thumbHeight > trackHeight) y = parseInt(trackHeight - thumbHeight);\n\n this.#elements.thumb.style.top = y + 'px';\n\n const body = this.#owner.querySelector(\".ng-container-body\");\n if (!body) return;\n\n const maxScrollTop = body.scrollHeight - body.clientHeight;\n const scrollableTrack = trackHeight - thumbHeight;\n\n if (scrollableTrack > 0 && maxScrollTop > 0) {\n body.scrollTop = (y / scrollableTrack) * maxScrollTop;\n }\n };\n\n #getThumbHeight = () => {\n return parseInt(this.#elements.thumb.dataset.height || 30, 10);\n };\n}\n\nif (!customElements.get('nine-table-vscrollbar')) {\n customElements.define(\"nine-table-vscrollbar\", NineTableVScrollBar);\n}","\nimport { trace } from \"@nopeer\";\n\nclass NineTableHScrollBar extends HTMLElement {\n #owner;\n #dragging;\n #elements;\n #interval1;\n #interval2;\n #firstThumbMove;\n #prevY = 0;\n\n constructor() {\n super();\n this.applyBaseStyle();\n }\n\n connectedCallback() {\n // 호스트 엘리먼트(nine-table-sheet) 참조\n this.#owner = this.getRootNode().host;\n if (!this.#owner) return;\n\n this.shadowRoot.innerHTML = `\n <button class='ng-scroll-top' disabled><div class='ng-scroll-icon'></div></button>\n <div class='ng-scroll-track'> <div class='ng-scroll-thumb'></div> </div>\n <button class='ng-scroll-bottom'><div class='ng-scroll-icon'></div></button>\n `;\n\n super.connectedCallback();\n\n this.#elements = {\n track : this.shadowRoot.querySelector(\".ng-scroll-track\"),\n thumb : this.shadowRoot.querySelector(\".ng-scroll-thumb\"),\n top : this.shadowRoot.querySelector(\".ng-scroll-top\"),\n bottom : this.shadowRoot.querySelector(\".ng-scroll-bottom\"),\n };\n\n this.#init();\n }\n\n refresh = () => {\n if (!this.#owner) return;\n\n const body = this.#owner.querySelector(\".ng-container-body\");\n if (!body) return;\n\n const thumb = $(this.#elements.thumb, this.shadowRoot);\n const thead = body.querySelector(\"table > thead\");\n\n const currRow = this.#owner.getRowCount ? 0 : 0; // 데이터 연동 시점 확장 포인트\n const trackHeight = $(this.#elements.track).height();\n const thumbHeight = $(this.#elements.thumb).height();\n\n // 높이 및 표시 여부 산출\n const totalRows = this.#owner.getRowCount ? this.#owner.getRowCount() : 0;\n if (totalRows <= 10) {\n $(this).hide();\n return;\n } else {\n $(this).show();\n }\n\n const theadHeight = thead ? thead.getBoundingClientRect().height : 0;\n const h = Math.max(Math.min(trackHeight * (body.clientHeight - theadHeight) / (32 * totalRows), trackHeight), 16);\n\n thumb[0].dataset.height = h;\n thumb.css({ \"height\": h });\n\n const totalHeight = trackHeight - this.#getThumbHeight();\n if (totalHeight <= 0) return;\n\n // 위치(Top) 산출\n let y = 0;\n const maxScrollTop = body.scrollHeight - body.clientHeight;\n if (maxScrollTop > 0) {\n y = parseInt((body.scrollTop / maxScrollTop) * totalHeight, 10);\n if (y > trackHeight - thumbHeight) y = trackHeight - thumbHeight;\n if (y < 0) y = 0;\n }\n\n this.#elements.thumb.style.top = y + 'px';\n\n // 버튼 활성/비활성 처리\n this.#elements.top.disabled = body.scrollTop <= 0;\n this.#elements.bottom.disabled = body.scrollTop >= maxScrollTop;\n };\n\n delayScroll = (pos, delay1, delay2, callback) => {\n clearInterval(this.#interval1);\n clearInterval(this.#interval2);\n\n const body = this.#owner.querySelector(\".ng-container-body\");\n if (body) body.scrollTop += pos * 32;\n\n this.#interval1 = setInterval(() => {\n clearInterval(this.#interval1);\n\n this.#interval2 = setInterval(() => {\n if (body) {\n body.scrollTop += pos * 32;\n if (callback) callback.call();\n }\n }, delay2);\n }, delay1);\n };\n\n stopScroll = () => {\n clearInterval(this.#interval1);\n clearInterval(this.#interval2);\n };\n\n #init = () => {\n const delayScrollAction = (pos) => {\n clearInterval(this.#interval1);\n clearInterval(this.#interval2);\n\n const body = this.#owner.querySelector(\".ng-container-body\");\n if (body) body.scrollTop += pos * 32;\n\n this.#interval1 = setInterval(() => {\n clearInterval(this.#interval1);\n\n this.#interval2 = setInterval(() => {\n if (body) body.scrollTop += pos * 32;\n }, 10);\n }, 500);\n };\n\n $(this.#elements.top).on(\"mousedown\", e => { if (e.buttons != 1 || e.altKey || e.ctrlKey || e.shiftKey) return; delayScrollAction(-1); });\n $(this.#elements.bottom).on(\"mousedown\", e => { if (e.buttons != 1 || e.altKey || e.ctrlKey || e.shiftKey) return; delayScrollAction(1); });\n\n $(this.#elements.top).on(\"touchstart\", e => { delayScrollAction(-1); });\n $(this.#elements.bottom).on(\"touchstart\", e => { delayScrollAction(1); });\n\n const clearTimer = () => {\n clearInterval(this.#interval1);\n clearInterval(this.#interval2);\n };\n\n this.#elements.top.ontouchend =\n this.#elements.bottom.ontouchend =\n this.#elements.track.ontouchend =\n this.#elements.top.onmouseup =\n this.#elements.top.onmouseleave =\n this.#elements.bottom.onmouseup =\n this.#elements.bottom.onmouseleave =\n this.#elements.track.onmouseup =\n this.#elements.track.onmouseleave = clearTimer;\n\n $(this.#elements.track).on(\"mousedown\", this.#track_onMouseDown);\n $(this.#elements.track).on(\"touchstart\", this.#track_onTouchStart);\n\n $(this.#elements.thumb).on(\"mousedown\", this.#thumb_onMouseDown);\n $(this.#elements.thumb).on(\"touchstart\", this.#thumb_onTouchStart);\n\n document.addEventListener('mouseup', e => {\n if (this.#dragging) {\n this.#dragging = false;\n }\n document.removeEventListener('mousemove', this.#thumb_onMouseMove);\n });\n\n document.addEventListener('touchend', e => {\n this.#dragging = false;\n document.removeEventListener('touchmove', this.#thumb_onTouchMove);\n });\n };\n\n #track_onTouchStart = e => {\n var rect = e.target.getBoundingClientRect();\n e.clientX = e.targetTouches[0].clientX;\n e.clientY = e.targetTouches[0].clientY;\n e.buttons = 1;\n this.#track_onMouseDown(e);\n }\n\n #track_onMouseDown = e => {\n if (this.#dragging) return;\n if (e.buttons != 1 || e.altKey || e.ctrlKey || e.shiftKey) return;\n e.preventDefault();\n\n var thumbBound = this.#elements.thumb.getBoundingClientRect();\n const body = this.#owner.querySelector(\".ng-container-body\");\n if (!body) return;\n\n const scrollStep = body.clientHeight;\n const pos = (e.clientY > thumbBound.y) ? scrollStep : -scrollStep;\n body.scrollTop += pos;\n\n clearInterval(this.#interval1);\n clearInterval(this.#interval2);\n\n this.#interval1 = setInterval(() => {\n clearInterval(this.#interval1);\n\n this.#interval2 = setInterval(() => {\n var thumbBound = this.#elements.thumb.getBoundingClientRect();\n if (e.clientY > thumbBound.y && e.clientY < thumbBound.y + thumbBound.height) {\n clearInterval(this.#interval2);\n } else {\n body.scrollTop += (e.clientY > thumbBound.y) ? scrollStep : -scrollStep;\n }\n }, 10);\n }, 500);\n };\n\n #thumb_onTouchStart = e => {\n e.clientX = e.targetTouches[0].clientX;\n e.clientY = e.targetTouches[0].clientY;\n e.buttons = 1;\n this.#thumb_onMouseDown(e);\n document.addEventListener('touchmove', this.#thumb_onTouchMove);\n };\n\n #thumb_onTouchMove = e => {\n e.clientX = e.targetTouches[0].clientX;\n e.clientY = e.targetTouches[0].clientY;\n e.buttons = 1;\n this.#thumb_onMouseMove(e);\n };\n\n #thumb_onMouseDown = e => {\n this.#prevY = e.clientY;\n this.#dragging = true;\n this.shiftY = e.offsetY + this.#elements.track.getBoundingClientRect().y;\n\n this.trackHeight = $(this.#elements.track).height();\n this.thumbHeight = $(this.#elements.thumb).height();\n\n this.#firstThumbMove = true;\n document.addEventListener('mousemove', this.#thumb_onMouseMove);\n };\n\n #thumb_onMouseMove = (e) => {\n if (!this.#dragging) return;\n e.preventDefault();\n\n const trackHeight = this.trackHeight;\n const thumbHeight = this.#getThumbHeight();\n\n var y = e.clientY - this.shiftY;\n if (y < 0) y = 0;\n if (y + thumbHeight > trackHeight) y = parseInt(trackHeight - thumbHeight);\n\n this.#elements.thumb.style.top = y + 'px';\n\n const body = this.#owner.querySelector(\".ng-container-body\");\n if (!body) return;\n\n const maxScrollTop = body.scrollHeight - body.clientHeight;\n const scrollableTrack = trackHeight - thumbHeight;\n\n if (scrollableTrack > 0 && maxScrollTop > 0) {\n body.scrollTop = (y / scrollableTrack) * maxScrollTop;\n }\n };\n\n #getThumbHeight = () => {\n return parseInt(this.#elements.thumb.dataset.height || 30, 10);\n };\n}\n\nif (!customElements.get('nine-table-hscrollbar')) {\n customElements.define(\"nine-table-hscrollbar\", NineTableHScrollBar);\n}","import './nine-table-sheet.js';\nimport './nine-table-vscrollbar.js';\nimport './nine-table-hscrollbar.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#init();\n };\n\n #init = () => {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.switchSheet(index, isMultiSelect);\n });\n\n this.switchSheet(0, false);\n };\n\n switchSheet = (index, isMultiSelect = false) => {\n\n const updateSplitters = () => {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n };\n\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n };\n\n\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","/**\n * [LayoutManager 높이 설정(Height Configuration) 사용 예제]\n *\n * 1. 부모 영역 채우기 (Fluid / 100% Fill) - 기본값\n * - 컴포넌트가 부모 컨테이너의 남은 공간을 가득 채우고 내부 영역에서 스크롤을 처리합니다.\n * - 사용법: <nine-table> 또는 호스트 엘리먼트에 별도 속성을 주지 않으면 적용됩니다.\n *\n * 2. 콘텐츠 밀착형 / 데이터 건수 기반 동적 높이 (Auto-Height)\n * - 데이터 행 개수에 맞춰 컴포넌트 전체 높이가 유연하게 늘어납니다.\n * - 사용법: <nine-table auto-height=\"true\"> 또는 호스트 엘리먼트에 auto-height=\"true\" 속성을 지정합니다.\n *\n * 3. 픽셀 고정 높이 (Fixed Pixel)\n * - 부모 크기에 상관없이 개발자가 지정한 고정 크기를 엄격하게 유지합니다.\n * - 사용법: <nine-table style=\"height: 400px;\"> 처럼 인라인 스타일로 높이를 직접 제어합니다.\n */\n\nimport './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n #resizeObserver = null;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n this.#observeResize();\n }\n\n #observeResize = () => {\n const hostEl = this.#root.host;\n if (!hostEl) return;\n\n this.#resizeObserver = new ResizeObserver((entries) => {\n for (let entry of entries) {\n const isAutoHeight = hostEl.getAttribute('auto-height') === 'true';\n if (isAutoHeight) {\n this.#applyAutoHeight(hostEl);\n }\n }\n });\n\n this.#resizeObserver.observe(hostEl);\n };\n\n #applyAutoHeight = (hostEl) => {\n const activeSheet = hostEl.shadowRoot?.querySelector('nine-table-sheet.active');\n if (!activeSheet) return;\n\n const rowCount = activeSheet.getRowCount?.() || 0;\n\n // 1. 속성으로 maxRows를 받되, 없으면 기본값 10 설정\n const maxRows = parseInt(hostEl.getAttribute('max-display-row'), 10) || 10;\n const targetRows = Math.min(rowCount, maxRows);\n\n // 2. 실제 렌더링된 행(tr) 높이를 동적으로 측정 (없으면 기본 32px 폴백)\n const sampleRow = activeSheet.querySelector('tbody tr') || activeSheet.querySelector('tr');\n const rowHeight = sampleRow ? sampleRow.getBoundingClientRect().height : 32;\n\n // 3. 헤더 및 푸터/탭 영역의 실제 높이를 DOM에서 동적 측정\n const headerEl = this.#root.querySelector('nine-table-header');\n const footerEl = this.#root.querySelector('nine-table-sheets-footer');\n const headerHeight = headerEl ? headerEl.getBoundingClientRect().height : 40;\n const footerHeight = footerEl ? footerEl.getBoundingClientRect().height : 32;\n const extraPadding = 16; // 미세 여백\n\n const headerFooterHeight = headerHeight + footerHeight + extraPadding;\n const calculatedHeight = (targetRows * rowHeight) + headerFooterHeight;\n\n hostEl.style.height = `${calculatedHeight}px`;\n hostEl.style.maxHeight = `${(maxRows * rowHeight) + headerFooterHeight}px`;\n\n const sheetsBody = this.#root.querySelector('nine-table-sheets-body');\n if (sheetsBody) {\n sheetsBody.style.overflowY = rowCount > maxRows ? 'auto' : 'hidden';\n }\n };\n\n #render = () => {\n const hostEl = this.#root.host;\n const rawElements = Array.from(hostEl.children);\n const rawTables = rawElements.filter(el => el.tagName === 'TABLE');\n const isAutoHeight = hostEl.getAttribute('auto-height') === 'true';\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 { \n display: flex; \n flex-direction: column; \n position: relative; \n overflow: hidden; \n height: ${isAutoHeight ? 'auto' : '100%'}; \n background: #fff; \n }\n nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }\n nine-table-body { display: flex; flex-direction: row; flex: 1; overflow: hidden; position: relative; }\n nine-table-summary { display: none; width: 250px; flex-shrink: 0; border-right: 1px solid #e5e7eb; }\n nine-splitter:not([data-split-index]) { width: 4px; background: #e5e7eb; cursor: col-resize; flex-shrink: 0; }\n nine-table-analysis { display: none; }\n nine-table-footer { display: none; }\n\n nine-table-sheets {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n background: #fff;\n }\n nine-table-sheets-body {\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n flex-direction: row;\n }\n nine-table-sheet {\n display: none !important;\n height: 100%;\n overflow: auto;\n flex: 1 1 100%;\n }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-footer {\n display: flex;\n height: 32px;\n background: #f3f4f6;\n border-top: 1px solid #e5e7eb;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n flex-shrink: 0;\n }\n nine-table-sheets .nine-tab-bar {\n display: flex;\n align-items: center;\n gap: 2px;\n overflow-x: auto;\n flex: 1;\n height: 100%;\n }\n nine-table-sheets .nine-tab-item {\n padding: 4px 12px;\n cursor: pointer;\n font-size: 12px;\n color: #4b5563;\n background: #e5e7eb;\n border: 1px solid #d1d5db;\n border-top: none;\n border-radius: 0 0 3px 3px;\n user-select: none;\n }\n nine-table-sheets .nine-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n nine-table-sheets .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-table-sheets>\n <nine-table-sheets-body>${sheetsHtml}</nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\">${tabsHtml}</div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n </nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n\n const $sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n $sheetElements?.forEach(($el, idx) => {\n if (rawTables[idx]) {\n setTimeout(() => {\n $el.init(rawTables[idx]);\n if (isAutoHeight) {\n this.#applyAutoHeight(hostEl);\n }\n });\n }\n });\n };\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot 하나만 넘겨서 내부에서 레이아웃 및 테이블 수집 처리\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_NineTableSheet","__privateAdd","_tableElement","__publicField","tableEl","initializeTable","tbl","ensureColgroup","firstRow","colCount","colgroup","defaultWidth","i","col","ensureThead","thead","clonedTable","__privateSet","__privateGet","leftContainer","bodyContainer","rightContainer","filterTableByFixed","sourceTable","targetFixedType","isBody","cols","targetIndices","idx","fixedAttr","tr","cells","bodyTable","leftTable","leftWidth","w","activeLeftWidth","rightTable","rightWidth","activeRightWidth","rowCount","scrollLeft","hScrollbar","scrollTop","_render","sbSize","NineTableSheet","_NineTableVScrollBar","_owner","_dragging","_elements","_interval1","_interval2","_firstThumbMove","_prevY","body","thumb","trackHeight","thumbHeight","totalRows","theadHeight","h","totalHeight","_getThumbHeight","y","maxScrollTop","pos","delay1","delay2","callback","_init","delayScrollAction","e","clearTimer","_track_onMouseDown","_track_onTouchStart","_thumb_onMouseDown","_thumb_onTouchStart","_thumb_onMouseMove","_thumb_onTouchMove","thumbBound","scrollStep","scrollableTrack","NineTableVScrollBar","_NineTableHScrollBar","NineTableHScrollBar","_NineTableSheets","tabBar","tabItem","isMultiSelect","index","updateSplitters","splitter","splitIndex","leftSheet","rightSheet","tabItems","sheetElements","tab","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","activeSheet","rowCountEl","NineTableSheets","_LayoutManager","shadowRoot","_root","_resizeObserver","_observeResize","hostEl","entries","entry","_applyAutoHeight","_a","_b","maxRows","targetRows","sampleRow","rowHeight","headerEl","footerEl","headerHeight","footerHeight","headerFooterHeight","calculatedHeight","sheetsBody","rawTables","el","isAutoHeight","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-vscrollbar.js","../src/ui/nine-table-hscrollbar.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();","\nimport { trace } from \"@nopeer\";\n\nclass NineTableVScrollBar extends HTMLElement {\n #owner;\n #dragging;\n #elements;\n #interval1;\n #interval2;\n #firstThumbMove;\n #prevY = 0;\n\n constructor() {\n super();\n this.applyBaseStyle();\n }\n\n connectedCallback() {\n // 호스트 엘리먼트(nine-table-sheet) 참조\n this.#owner = this.getRootNode().host;\n if (!this.#owner) return;\n\n this.shadowRoot.innerHTML = `\n <button class='ng-scroll-top' disabled><div class='ng-scroll-icon'></div></button>\n <div class='ng-scroll-track'> <div class='ng-scroll-thumb'></div> </div>\n <button class='ng-scroll-bottom'><div class='ng-scroll-icon'></div></button>\n `;\n\n super.connectedCallback();\n\n this.#elements = {\n track : this.shadowRoot.querySelector(\".ng-scroll-track\"),\n thumb : this.shadowRoot.querySelector(\".ng-scroll-thumb\"),\n top : this.shadowRoot.querySelector(\".ng-scroll-top\"),\n bottom : this.shadowRoot.querySelector(\".ng-scroll-bottom\"),\n };\n\n this.#init();\n }\n\n refresh = () => {\n if (!this.#owner) return;\n\n const body = this.#owner.querySelector(\".ng-container-body\");\n if (!body) return;\n\n const thumb = $(this.#elements.thumb, this.shadowRoot);\n const thead = body.querySelector(\"table > thead\");\n\n const currRow = this.#owner.getRowCount ? 0 : 0; // 데이터 연동 시점 확장 포인트\n const trackHeight = $(this.#elements.track).height();\n const thumbHeight = $(this.#elements.thumb).height();\n\n // 높이 및 표시 여부 산출\n const totalRows = this.#owner.getRowCount ? this.#owner.getRowCount() : 0;\n if (totalRows <= 10) {\n $(this).hide();\n return;\n } else {\n $(this).show();\n }\n\n const theadHeight = thead ? thead.getBoundingClientRect().height : 0;\n const h = Math.max(Math.min(trackHeight * (body.clientHeight - theadHeight) / (32 * totalRows), trackHeight), 16);\n\n thumb[0].dataset.height = h;\n thumb.css({ \"height\": h });\n\n const totalHeight = trackHeight - this.#getThumbHeight();\n if (totalHeight <= 0) return;\n\n // 위치(Top) 산출\n let y = 0;\n const maxScrollTop = body.scrollHeight - body.clientHeight;\n if (maxScrollTop > 0) {\n y = parseInt((body.scrollTop / maxScrollTop) * totalHeight, 10);\n if (y > trackHeight - thumbHeight) y = trackHeight - thumbHeight;\n if (y < 0) y = 0;\n }\n\n this.#elements.thumb.style.top = y + 'px';\n\n // 버튼 활성/비활성 처리\n this.#elements.top.disabled = body.scrollTop <= 0;\n this.#elements.bottom.disabled = body.scrollTop >= maxScrollTop;\n };\n\n delayScroll = (pos, delay1, delay2, callback) => {\n clearInterval(this.#interval1);\n clearInterval(this.#interval2);\n\n const body = this.#owner.querySelector(\".ng-container-body\");\n if (body) body.scrollTop += pos * 32;\n\n this.#interval1 = setInterval(() => {\n clearInterval(this.#interval1);\n\n this.#interval2 = setInterval(() => {\n if (body) {\n body.scrollTop += pos * 32;\n if (callback) callback.call();\n }\n }, delay2);\n }, delay1);\n };\n\n stopScroll = () => {\n clearInterval(this.#interval1);\n clearInterval(this.#interval2);\n };\n\n #init = () => {\n const delayScrollAction = (pos) => {\n clearInterval(this.#interval1);\n clearInterval(this.#interval2);\n\n const body = this.#owner.querySelector(\".ng-container-body\");\n if (body) body.scrollTop += pos * 32;\n\n this.#interval1 = setInterval(() => {\n clearInterval(this.#interval1);\n\n this.#interval2 = setInterval(() => {\n if (body) body.scrollTop += pos * 32;\n }, 10);\n }, 500);\n };\n\n $(this.#elements.top).on(\"mousedown\", e => { if (e.buttons != 1 || e.altKey || e.ctrlKey || e.shiftKey) return; delayScrollAction(-1); });\n $(this.#elements.bottom).on(\"mousedown\", e => { if (e.buttons != 1 || e.altKey || e.ctrlKey || e.shiftKey) return; delayScrollAction(1); });\n\n $(this.#elements.top).on(\"touchstart\", e => { delayScrollAction(-1); });\n $(this.#elements.bottom).on(\"touchstart\", e => { delayScrollAction(1); });\n\n const clearTimer = () => {\n clearInterval(this.#interval1);\n clearInterval(this.#interval2);\n };\n\n this.#elements.top.ontouchend =\n this.#elements.bottom.ontouchend =\n this.#elements.track.ontouchend =\n this.#elements.top.onmouseup =\n this.#elements.top.onmouseleave =\n this.#elements.bottom.onmouseup =\n this.#elements.bottom.onmouseleave =\n this.#elements.track.onmouseup =\n this.#elements.track.onmouseleave = clearTimer;\n\n $(this.#elements.track).on(\"mousedown\", this.#track_onMouseDown);\n $(this.#elements.track).on(\"touchstart\", this.#track_onTouchStart);\n\n $(this.#elements.thumb).on(\"mousedown\", this.#thumb_onMouseDown);\n $(this.#elements.thumb).on(\"touchstart\", this.#thumb_onTouchStart);\n\n document.addEventListener('mouseup', e => {\n if (this.#dragging) {\n this.#dragging = false;\n }\n document.removeEventListener('mousemove', this.#thumb_onMouseMove);\n });\n\n document.addEventListener('touchend', e => {\n this.#dragging = false;\n document.removeEventListener('touchmove', this.#thumb_onTouchMove);\n });\n };\n\n #track_onTouchStart = e => {\n var rect = e.target.getBoundingClientRect();\n e.clientX = e.targetTouches[0].clientX;\n e.clientY = e.targetTouches[0].clientY;\n e.buttons = 1;\n this.#track_onMouseDown(e);\n }\n\n #track_onMouseDown = e => {\n if (this.#dragging) return;\n if (e.buttons != 1 || e.altKey || e.ctrlKey || e.shiftKey) return;\n e.preventDefault();\n\n var thumbBound = this.#elements.thumb.getBoundingClientRect();\n const body = this.#owner.querySelector(\".ng-container-body\");\n if (!body) return;\n\n const scrollStep = body.clientHeight;\n const pos = (e.clientY > thumbBound.y) ? scrollStep : -scrollStep;\n body.scrollTop += pos;\n\n clearInterval(this.#interval1);\n clearInterval(this.#interval2);\n\n this.#interval1 = setInterval(() => {\n clearInterval(this.#interval1);\n\n this.#interval2 = setInterval(() => {\n var thumbBound = this.#elements.thumb.getBoundingClientRect();\n if (e.clientY > thumbBound.y && e.clientY < thumbBound.y + thumbBound.height) {\n clearInterval(this.#interval2);\n } else {\n body.scrollTop += (e.clientY > thumbBound.y) ? scrollStep : -scrollStep;\n }\n }, 10);\n }, 500);\n };\n\n #thumb_onTouchStart = e => {\n e.clientX = e.targetTouches[0].clientX;\n e.clientY = e.targetTouches[0].clientY;\n e.buttons = 1;\n this.#thumb_onMouseDown(e);\n document.addEventListener('touchmove', this.#thumb_onTouchMove);\n };\n\n #thumb_onTouchMove = e => {\n e.clientX = e.targetTouches[0].clientX;\n e.clientY = e.targetTouches[0].clientY;\n e.buttons = 1;\n this.#thumb_onMouseMove(e);\n };\n\n #thumb_onMouseDown = e => {\n this.#prevY = e.clientY;\n this.#dragging = true;\n this.shiftY = e.offsetY + this.#elements.track.getBoundingClientRect().y;\n\n this.trackHeight = $(this.#elements.track).height();\n this.thumbHeight = $(this.#elements.thumb).height();\n\n this.#firstThumbMove = true;\n document.addEventListener('mousemove', this.#thumb_onMouseMove);\n };\n\n #thumb_onMouseMove = (e) => {\n if (!this.#dragging) return;\n e.preventDefault();\n\n const trackHeight = this.trackHeight;\n const thumbHeight = this.#getThumbHeight();\n\n var y = e.clientY - this.shiftY;\n if (y < 0) y = 0;\n if (y + thumbHeight > trackHeight) y = parseInt(trackHeight - thumbHeight);\n\n this.#elements.thumb.style.top = y + 'px';\n\n const body = this.#owner.querySelector(\".ng-container-body\");\n if (!body) return;\n\n const maxScrollTop = body.scrollHeight - body.clientHeight;\n const scrollableTrack = trackHeight - thumbHeight;\n\n if (scrollableTrack > 0 && maxScrollTop > 0) {\n body.scrollTop = (y / scrollableTrack) * maxScrollTop;\n }\n };\n\n #getThumbHeight = () => {\n return parseInt(this.#elements.thumb.dataset.height || 30, 10);\n };\n}\n\nif (!customElements.get('nine-table-vscrollbar')) {\n customElements.define(\"nine-table-vscrollbar\", NineTableVScrollBar);\n}","\nimport { trace } from \"@nopeer\";\n\nclass NineTableHScrollBar extends HTMLElement {\n #owner;\n #dragging;\n #elements;\n #interval1;\n #interval2;\n #firstThumbMove;\n #prevY = 0;\n\n constructor() {\n super();\n this.applyBaseStyle();\n }\n\n connectedCallback() {\n // 호스트 엘리먼트(nine-table-sheet) 참조\n this.#owner = this.getRootNode().host;\n if (!this.#owner) return;\n\n this.shadowRoot.innerHTML = `\n <button class='ng-scroll-top' disabled><div class='ng-scroll-icon'></div></button>\n <div class='ng-scroll-track'> <div class='ng-scroll-thumb'></div> </div>\n <button class='ng-scroll-bottom'><div class='ng-scroll-icon'></div></button>\n `;\n\n super.connectedCallback();\n\n this.#elements = {\n track : this.shadowRoot.querySelector(\".ng-scroll-track\"),\n thumb : this.shadowRoot.querySelector(\".ng-scroll-thumb\"),\n top : this.shadowRoot.querySelector(\".ng-scroll-top\"),\n bottom : this.shadowRoot.querySelector(\".ng-scroll-bottom\"),\n };\n\n this.#init();\n }\n\n refresh = () => {\n if (!this.#owner) return;\n\n const body = this.#owner.querySelector(\".ng-container-body\");\n if (!body) return;\n\n const thumb = $(this.#elements.thumb, this.shadowRoot);\n const thead = body.querySelector(\"table > thead\");\n\n const currRow = this.#owner.getRowCount ? 0 : 0; // 데이터 연동 시점 확장 포인트\n const trackHeight = $(this.#elements.track).height();\n const thumbHeight = $(this.#elements.thumb).height();\n\n // 높이 및 표시 여부 산출\n const totalRows = this.#owner.getRowCount ? this.#owner.getRowCount() : 0;\n if (totalRows <= 10) {\n $(this).hide();\n return;\n } else {\n $(this).show();\n }\n\n const theadHeight = thead ? thead.getBoundingClientRect().height : 0;\n const h = Math.max(Math.min(trackHeight * (body.clientHeight - theadHeight) / (32 * totalRows), trackHeight), 16);\n\n thumb[0].dataset.height = h;\n thumb.css({ \"height\": h });\n\n const totalHeight = trackHeight - this.#getThumbHeight();\n if (totalHeight <= 0) return;\n\n // 위치(Top) 산출\n let y = 0;\n const maxScrollTop = body.scrollHeight - body.clientHeight;\n if (maxScrollTop > 0) {\n y = parseInt((body.scrollTop / maxScrollTop) * totalHeight, 10);\n if (y > trackHeight - thumbHeight) y = trackHeight - thumbHeight;\n if (y < 0) y = 0;\n }\n\n this.#elements.thumb.style.top = y + 'px';\n\n // 버튼 활성/비활성 처리\n this.#elements.top.disabled = body.scrollTop <= 0;\n this.#elements.bottom.disabled = body.scrollTop >= maxScrollTop;\n };\n\n delayScroll = (pos, delay1, delay2, callback) => {\n clearInterval(this.#interval1);\n clearInterval(this.#interval2);\n\n const body = this.#owner.querySelector(\".ng-container-body\");\n if (body) body.scrollTop += pos * 32;\n\n this.#interval1 = setInterval(() => {\n clearInterval(this.#interval1);\n\n this.#interval2 = setInterval(() => {\n if (body) {\n body.scrollTop += pos * 32;\n if (callback) callback.call();\n }\n }, delay2);\n }, delay1);\n };\n\n stopScroll = () => {\n clearInterval(this.#interval1);\n clearInterval(this.#interval2);\n };\n\n #init = () => {\n const delayScrollAction = (pos) => {\n clearInterval(this.#interval1);\n clearInterval(this.#interval2);\n\n const body = this.#owner.querySelector(\".ng-container-body\");\n if (body) body.scrollTop += pos * 32;\n\n this.#interval1 = setInterval(() => {\n clearInterval(this.#interval1);\n\n this.#interval2 = setInterval(() => {\n if (body) body.scrollTop += pos * 32;\n }, 10);\n }, 500);\n };\n\n $(this.#elements.top).on(\"mousedown\", e => { if (e.buttons != 1 || e.altKey || e.ctrlKey || e.shiftKey) return; delayScrollAction(-1); });\n $(this.#elements.bottom).on(\"mousedown\", e => { if (e.buttons != 1 || e.altKey || e.ctrlKey || e.shiftKey) return; delayScrollAction(1); });\n\n $(this.#elements.top).on(\"touchstart\", e => { delayScrollAction(-1); });\n $(this.#elements.bottom).on(\"touchstart\", e => { delayScrollAction(1); });\n\n const clearTimer = () => {\n clearInterval(this.#interval1);\n clearInterval(this.#interval2);\n };\n\n this.#elements.top.ontouchend =\n this.#elements.bottom.ontouchend =\n this.#elements.track.ontouchend =\n this.#elements.top.onmouseup =\n this.#elements.top.onmouseleave =\n this.#elements.bottom.onmouseup =\n this.#elements.bottom.onmouseleave =\n this.#elements.track.onmouseup =\n this.#elements.track.onmouseleave = clearTimer;\n\n $(this.#elements.track).on(\"mousedown\", this.#track_onMouseDown);\n $(this.#elements.track).on(\"touchstart\", this.#track_onTouchStart);\n\n $(this.#elements.thumb).on(\"mousedown\", this.#thumb_onMouseDown);\n $(this.#elements.thumb).on(\"touchstart\", this.#thumb_onTouchStart);\n\n document.addEventListener('mouseup', e => {\n if (this.#dragging) {\n this.#dragging = false;\n }\n document.removeEventListener('mousemove', this.#thumb_onMouseMove);\n });\n\n document.addEventListener('touchend', e => {\n this.#dragging = false;\n document.removeEventListener('touchmove', this.#thumb_onTouchMove);\n });\n };\n\n #track_onTouchStart = e => {\n var rect = e.target.getBoundingClientRect();\n e.clientX = e.targetTouches[0].clientX;\n e.clientY = e.targetTouches[0].clientY;\n e.buttons = 1;\n this.#track_onMouseDown(e);\n }\n\n #track_onMouseDown = e => {\n if (this.#dragging) return;\n if (e.buttons != 1 || e.altKey || e.ctrlKey || e.shiftKey) return;\n e.preventDefault();\n\n var thumbBound = this.#elements.thumb.getBoundingClientRect();\n const body = this.#owner.querySelector(\".ng-container-body\");\n if (!body) return;\n\n const scrollStep = body.clientHeight;\n const pos = (e.clientY > thumbBound.y) ? scrollStep : -scrollStep;\n body.scrollTop += pos;\n\n clearInterval(this.#interval1);\n clearInterval(this.#interval2);\n\n this.#interval1 = setInterval(() => {\n clearInterval(this.#interval1);\n\n this.#interval2 = setInterval(() => {\n var thumbBound = this.#elements.thumb.getBoundingClientRect();\n if (e.clientY > thumbBound.y && e.clientY < thumbBound.y + thumbBound.height) {\n clearInterval(this.#interval2);\n } else {\n body.scrollTop += (e.clientY > thumbBound.y) ? scrollStep : -scrollStep;\n }\n }, 10);\n }, 500);\n };\n\n #thumb_onTouchStart = e => {\n e.clientX = e.targetTouches[0].clientX;\n e.clientY = e.targetTouches[0].clientY;\n e.buttons = 1;\n this.#thumb_onMouseDown(e);\n document.addEventListener('touchmove', this.#thumb_onTouchMove);\n };\n\n #thumb_onTouchMove = e => {\n e.clientX = e.targetTouches[0].clientX;\n e.clientY = e.targetTouches[0].clientY;\n e.buttons = 1;\n this.#thumb_onMouseMove(e);\n };\n\n #thumb_onMouseDown = e => {\n this.#prevY = e.clientY;\n this.#dragging = true;\n this.shiftY = e.offsetY + this.#elements.track.getBoundingClientRect().y;\n\n this.trackHeight = $(this.#elements.track).height();\n this.thumbHeight = $(this.#elements.thumb).height();\n\n this.#firstThumbMove = true;\n document.addEventListener('mousemove', this.#thumb_onMouseMove);\n };\n\n #thumb_onMouseMove = (e) => {\n if (!this.#dragging) return;\n e.preventDefault();\n\n const trackHeight = this.trackHeight;\n const thumbHeight = this.#getThumbHeight();\n\n var y = e.clientY - this.shiftY;\n if (y < 0) y = 0;\n if (y + thumbHeight > trackHeight) y = parseInt(trackHeight - thumbHeight);\n\n this.#elements.thumb.style.top = y + 'px';\n\n const body = this.#owner.querySelector(\".ng-container-body\");\n if (!body) return;\n\n const maxScrollTop = body.scrollHeight - body.clientHeight;\n const scrollableTrack = trackHeight - thumbHeight;\n\n if (scrollableTrack > 0 && maxScrollTop > 0) {\n body.scrollTop = (y / scrollableTrack) * maxScrollTop;\n }\n };\n\n #getThumbHeight = () => {\n return parseInt(this.#elements.thumb.dataset.height || 30, 10);\n };\n}\n\nif (!customElements.get('nine-table-hscrollbar')) {\n customElements.define(\"nine-table-hscrollbar\", NineTableHScrollBar);\n}","import { trace } from \"@nopeer\";\nimport './nine-table-vscrollbar.js';\nimport './nine-table-hscrollbar.js';\n\nexport class NineTableSheet extends HTMLElement {\n #tableElement = null;\n static SCROLLBAR_SIZE = 16;\n\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#render();\n };\n\n init = (tableEl) => {\n if (!tableEl) return;\n\n const initializeTable = (tbl) => {\n\n const ensureColgroup = (tbl) => {\n if (tbl.querySelector('colgroup')) return;\n\n const firstRow = tbl.querySelector('tbody tr') || tbl.querySelector('tr');\n const colCount = firstRow ? firstRow.querySelectorAll('th, td').length : 1;\n\n const colgroup = document.createElement('colgroup');\n const defaultWidth = Math.max(Math.floor((tbl.clientWidth || 600) / colCount), 100);\n\n for (let i = 0; i < colCount; i++) {\n const col = document.createElement('col');\n col.setAttribute('width', defaultWidth);\n colgroup.appendChild(col);\n }\n tbl.prepend(colgroup);\n };\n\n const ensureThead = (tbl) => {\n if (tbl.querySelector('thead')) return;\n\n const thead = document.createElement('thead');\n const colgroup = tbl.querySelector('colgroup');\n\n if (colgroup) {\n colgroup.after(thead);\n } else {\n tbl.prepend(thead);\n }\n };\n\n ensureColgroup(tbl);\n ensureThead(tbl);\n\n tbl.classList.add('nine-table-element');\n return tbl;\n };\n\n const clonedTable = tableEl.cloneNode(true);\n this.#tableElement = initializeTable(clonedTable);\n this.#tableElement.style.display = 'table';\n\n const leftContainer = this.querySelector('.ng-container-left');\n const bodyContainer = this.querySelector('.ng-container-body');\n const rightContainer = this.querySelector('.ng-container-right');\n\n const filterTableByFixed = (sourceTable, targetFixedType, isBody = false) => {\n const tbl = sourceTable.cloneNode(true);\n const cols = Array.from(tbl.querySelectorAll('colgroup col'));\n const targetIndices = [];\n\n cols.forEach((col, idx) => {\n const fixedAttr = col.getAttribute('fixed');\n const isMatch = isBody ? (!fixedAttr || fixedAttr === '') : (fixedAttr === targetFixedType);\n if (!isMatch) {\n targetIndices.push(idx);\n }\n });\n\n targetIndices.reverse().forEach(idx => {\n if (cols[idx]) cols[idx].remove();\n tbl.querySelectorAll('tr').forEach(tr => {\n const cells = tr.querySelectorAll('th, td');\n if (cells[idx]) cells[idx].remove();\n });\n });\n\n return tbl;\n };\n\n // 1. 메인 바디 영역\n if (bodyContainer) {\n const bodyTable = filterTableByFixed(this.#tableElement, null, true);\n bodyContainer.innerHTML = '';\n bodyContainer.appendChild(bodyTable);\n }\n\n // 2. 좌측 고정 영역\n if (leftContainer) {\n const leftTable = filterTableByFixed(this.#tableElement, 'left', false);\n\n let leftWidth = 0;\n leftTable.querySelectorAll('col').forEach(col => {\n const w = parseInt(col.getAttribute('width'), 10);\n if (!isNaN(w)) leftWidth += w;\n });\n\n leftContainer.innerHTML = '';\n leftContainer.appendChild(leftTable);\n\n const activeLeftWidth = leftWidth > 0 ? leftWidth : 0;\n leftContainer.style.flex = `0 0 ${activeLeftWidth}px`;\n leftContainer.style.width = `${activeLeftWidth}px`;\n }\n\n // 3. 우측 고정 영역\n if (rightContainer) {\n const rightTable = filterTableByFixed(this.#tableElement, 'right', false);\n\n let rightWidth = 0;\n rightTable.querySelectorAll('col').forEach(col => {\n const w = parseInt(col.getAttribute('width'), 10);\n if (!isNaN(w)) rightWidth += w;\n });\n\n rightContainer.innerHTML = '';\n rightContainer.appendChild(rightTable);\n\n const activeRightWidth = rightWidth > 0 ? rightWidth : 0;\n rightContainer.style.flex = `0 0 ${activeRightWidth}px`;\n rightContainer.style.width = `${activeRightWidth}px`;\n }\n\n // 데이터 건수 기반 세로 스크롤 제어 정책 반영\n if (bodyContainer) {\n const rowCount = this.getRowCount();\n bodyContainer.style.overflowY = rowCount > 10 ? 'auto' : 'hidden';\n\n bodyContainer.addEventListener('scroll', () => {\n const scrollLeft = bodyContainer.scrollLeft;\n\n // 좌우 고정 영역은 가로 스크롤 시 밀려나지 않도록 위치 보정 또는\n // 하단 스크롤바 썸(Thumb) 위치 동기화 호출\n const hScrollbar = this.querySelector('nine-table-hscrollbar');\n if (hScrollbar && typeof hScrollbar.syncThumb === 'function') {\n hScrollbar.syncThumb(scrollLeft);\n }\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 // 🎯 외부 스크롤바 및 컨트롤러 연동용 메서드\n scrollToX = (scrollLeft) => {\n const bodyContainer = this.querySelector('.ng-container-body');\n if (bodyContainer) bodyContainer.scrollLeft = scrollLeft;\n };\n\n scrollToY = (scrollTop) => {\n const bodyContainer = this.querySelector('.ng-container-body');\n if (bodyContainer) bodyContainer.scrollTop = scrollTop;\n };\n\n #render = () => {\n const sbSize = NineTableSheet.SCROLLBAR_SIZE;\n\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 1 auto;\n width: 100%;\n height: calc(100% - ${sbSize}px);\n overflow: hidden;\n position: relative;\n }\n \n nine-table-sheet .ng-container-left {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: #ffffff;\n border-right: 1px solid #e5e7eb;\n flex-shrink: 0;\n }\n \n nine-table-sheet .ng-container-body {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow-x: auto;\n overflow-y: auto;\n background: #ffffff;\n position: relative;\n }\n \n nine-table-sheet .ng-container-right {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: #ffffff;\n border-left: 1px solid #e5e7eb;\n flex-shrink: 0;\n }\n \n nine-table-sheet .ng-container-bottom {\n display: flex;\n flex-direction: row;\n height: ${sbSize}px;\n min-height: ${sbSize}px;\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 height: 100%;\n overflow: hidden;\n display: block;\n }\n \n nine-table-sheet .ng-scroll-edge {\n width: ${sbSize}px;\n min-width: ${sbSize}px;\n height: 100%;\n flex-shrink: 0;\n background: #f3f4f6;\n }\n \n nine-table-sheet table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n \n nine-table-sheet th, nine-table-sheet td {\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 6px 8px;\n border: 1px solid #e5e7eb;\n font-size: 12px;\n color: #111827;\n }\n \n nine-table-sheet th {\n background-color: #f9fafb;\n font-weight: 600;\n text-align: left;\n }\n </style>\n \n <div class='ng-container-top'>\n <div class='ng-container-left'></div>\n <div class='ng-container-body'></div>\n <div class='ng-container-right'></div>\n <nine-table-vscrollbar></nine-table-vscrollbar>\n </div>\n <div class='ng-container-bottom'>\n <nine-table-hscrollbar></nine-table-hscrollbar>\n <div class='ng-scroll-edge'></div>\n </div>\n `;\n };\n\n disconnectedCallback() {\n this.innerHTML = '';\n trace.log('NineTableSheet destroyed.');\n };\n}\n\nif (!customElements.get('nine-table-sheet')) {\n customElements.define('nine-table-sheet', NineTableSheet);\n}","import './nine-table-sheet.js';\n\nexport class NineTableSheets extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n this.#init();\n };\n\n #init = () => {\n const tabBar = this.querySelector('.nine-tab-bar');\n if (!tabBar) return;\n\n tabBar.addEventListener('click', (e) => {\n const tabItem = e.target.closest('.nine-tab-item');\n if (!tabItem) return;\n\n const isMultiSelect = e.ctrlKey || e.metaKey || e.shiftKey;\n const index = parseInt(tabItem.dataset.index, 10);\n this.switchSheet(index, isMultiSelect);\n });\n\n this.switchSheet(0, false);\n };\n\n switchSheet = (index, isMultiSelect = false) => {\n\n const updateSplitters = () => {\n const body = this.querySelector('nine-table-sheets-body');\n const splitters = body.querySelectorAll('nine-splitter');\n splitters.forEach(splitter => {\n const splitIndex = parseInt(splitter.dataset.splitIndex, 10);\n const leftSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex - 1}\"]`);\n const rightSheet = body.querySelector(`nine-table-sheet[data-index=\"${splitIndex}\"]`);\n\n if (leftSheet && rightSheet && leftSheet.classList.contains('active') && rightSheet.classList.contains('active')) {\n splitter.classList.add('active');\n } else {\n splitter.classList.remove('active');\n }\n });\n };\n\n const tabBar = this.querySelector('.nine-tab-bar');\n const body = this.querySelector('nine-table-sheets-body');\n const tabItems = tabBar.querySelectorAll('.nine-tab-item');\n const sheetElements = body.querySelectorAll('nine-table-sheet');\n\n if (!tabItems[index]) return;\n\n if (!isMultiSelect) {\n tabItems.forEach((tab, idx) => {\n tab.classList.toggle('active', idx === index);\n const sheet = body.querySelector(`nine-table-sheet[data-index=\"${idx}\"]`);\n if (sheet) sheet.style.flex = '';\n });\n sheetElements.forEach((sheet, idx) => {\n sheet.classList.toggle('active', idx === index);\n });\n } else {\n const clickedTab = tabItems[index];\n const activeTabs = tabBar.querySelectorAll('.nine-tab-item.active');\n\n if (clickedTab.classList.contains('active') && activeTabs.length <= 1) {\n return;\n }\n\n clickedTab.classList.toggle('active');\n const targetSheet = body.querySelector(`nine-table-sheet[data-index=\"${index}\"]`);\n if (targetSheet) {\n targetSheet.classList.toggle('active');\n if (!targetSheet.classList.contains('active')) {\n targetSheet.style.flex = '';\n }\n }\n }\n\n const activeSheets = Array.from(body.querySelectorAll('nine-table-sheet.active'));\n if (activeSheets.length > 1) {\n const initialBasis = (1 / activeSheets.length);\n activeSheets.forEach(sheet => {\n if (!sheet.style.flex || sheet.style.flex === '1 1 100%') {\n sheet.style.flex = `${initialBasis} ${initialBasis} 0px`;\n }\n });\n } else {\n activeSheets.forEach(sheet => {\n sheet.style.flex = '1 1 100%';\n });\n }\n\n updateSplitters();\n\n const activeSheet = body.querySelector(`nine-table-sheet.active`);\n if (activeSheet && typeof activeSheet.getRowCount === 'function') {\n const rowCountEl = this.querySelector('#row-count');\n if (rowCountEl) {\n rowCountEl.textContent = activeSheet.getRowCount().toLocaleString();\n }\n }\n };\n\n\n}\n\nif (!customElements.get('nine-table-sheets')) {\n customElements.define('nine-table-sheets', NineTableSheets);\n}","/**\n * [LayoutManager 높이 설정(Height Configuration) 사용 예제]\n *\n * 1. 부모 영역 채우기 (Fluid / 100% Fill) - 기본값\n * - 컴포넌트가 부모 컨테이너의 남은 공간을 가득 채우고 내부 영역에서 스크롤을 처리합니다.\n * - 사용법: <nine-table> 또는 호스트 엘리먼트에 별도 속성을 주지 않으면 적용됩니다.\n *\n * 2. 콘텐츠 밀착형 / 데이터 건수 기반 동적 높이 (Auto-Height)\n * - 데이터 행 개수에 맞춰 컴포넌트 전체 높이가 유연하게 늘어납니다.\n * - 사용법: <nine-table auto-height=\"true\"> 또는 호스트 엘리먼트에 auto-height=\"true\" 속성을 지정합니다.\n *\n * 3. 픽셀 고정 높이 (Fixed Pixel)\n * - 부모 크기에 상관없이 개발자가 지정한 고정 크기를 엄격하게 유지합니다.\n * - 사용법: <nine-table style=\"height: 400px;\"> 처럼 인라인 스타일로 높이를 직접 제어합니다.\n */\n\nimport './nine-table-sheets.js';\n\nexport class LayoutManager {\n #root;\n #resizeObserver = null;\n\n constructor(shadowRoot) {\n this.#root = shadowRoot;\n this.#render();\n this.#observeResize();\n }\n\n #observeResize = () => {\n const hostEl = this.#root.host;\n if (!hostEl) return;\n\n this.#resizeObserver = new ResizeObserver((entries) => {\n for (let entry of entries) {\n const isAutoHeight = hostEl.getAttribute('auto-height') === 'true';\n if (isAutoHeight) {\n this.#applyAutoHeight(hostEl);\n }\n }\n });\n\n this.#resizeObserver.observe(hostEl);\n };\n\n #applyAutoHeight = (hostEl) => {\n const activeSheet = hostEl.shadowRoot?.querySelector('nine-table-sheet.active');\n if (!activeSheet) return;\n\n const rowCount = activeSheet.getRowCount?.() || 0;\n\n // 1. 속성으로 maxRows를 받되, 없으면 기본값 10 설정\n const maxRows = parseInt(hostEl.getAttribute('max-display-row'), 10) || 10;\n const targetRows = Math.min(rowCount, maxRows);\n\n // 2. 실제 렌더링된 행(tr) 높이를 동적으로 측정 (없으면 기본 32px 폴백)\n const sampleRow = activeSheet.querySelector('tbody tr') || activeSheet.querySelector('tr');\n const rowHeight = sampleRow ? sampleRow.getBoundingClientRect().height : 32;\n\n // 3. 헤더 및 푸터/탭 영역의 실제 높이를 DOM에서 동적 측정\n const headerEl = this.#root.querySelector('nine-table-header');\n const footerEl = this.#root.querySelector('nine-table-sheets-footer');\n const headerHeight = headerEl ? headerEl.getBoundingClientRect().height : 40;\n const footerHeight = footerEl ? footerEl.getBoundingClientRect().height : 32;\n const extraPadding = 16; // 미세 여백\n\n const headerFooterHeight = headerHeight + footerHeight + extraPadding;\n const calculatedHeight = (targetRows * rowHeight) + headerFooterHeight;\n\n hostEl.style.height = `${calculatedHeight}px`;\n hostEl.style.maxHeight = `${(maxRows * rowHeight) + headerFooterHeight}px`;\n\n const sheetsBody = this.#root.querySelector('nine-table-sheets-body');\n if (sheetsBody) {\n sheetsBody.style.overflowY = rowCount > maxRows ? 'auto' : 'hidden';\n }\n };\n\n #render = () => {\n const hostEl = this.#root.host;\n const rawElements = Array.from(hostEl.children);\n const rawTables = rawElements.filter(el => el.tagName === 'TABLE');\n const isAutoHeight = hostEl.getAttribute('auto-height') === 'true';\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 { \n display: flex; \n flex-direction: column; \n position: relative; \n overflow: hidden; \n height: ${isAutoHeight ? 'auto' : '100%'}; \n background: #fff; \n }\n nine-table-header { height: 40px; display: block; flex-shrink: 0; border-bottom: 1px solid #e5e7eb; background: #fff; }\n nine-table-body { display: flex; flex-direction: row; flex: 1; overflow: hidden; position: relative; }\n nine-table-summary { display: none; width: 250px; flex-shrink: 0; border-right: 1px solid #e5e7eb; }\n nine-splitter:not([data-split-index]) { width: 4px; background: #e5e7eb; cursor: col-resize; flex-shrink: 0; }\n nine-table-analysis { display: none; }\n nine-table-footer { display: none; }\n\n nine-table-sheets {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n background: #fff;\n }\n nine-table-sheets-body {\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n flex-direction: row;\n }\n nine-table-sheet {\n display: none !important;\n height: 100%;\n overflow: auto;\n flex: 1 1 100%;\n }\n nine-table-sheet.active {\n display: block !important;\n }\n nine-table-sheets-footer {\n display: flex;\n height: 32px;\n background: #f3f4f6;\n border-top: 1px solid #e5e7eb;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n flex-shrink: 0;\n }\n nine-table-sheets .nine-tab-bar {\n display: flex;\n align-items: center;\n gap: 2px;\n overflow-x: auto;\n flex: 1;\n height: 100%;\n }\n nine-table-sheets .nine-tab-item {\n padding: 4px 12px;\n cursor: pointer;\n font-size: 12px;\n color: #4b5563;\n background: #e5e7eb;\n border: 1px solid #d1d5db;\n border-top: none;\n border-radius: 0 0 3px 3px;\n user-select: none;\n }\n nine-table-sheets .nine-tab-item.active {\n background: #ffffff;\n color: #111827;\n font-weight: 600;\n border-bottom: 2px solid #2563eb;\n }\n nine-table-sheets .sheets-counter {\n font-size: 12px;\n color: #6b7280;\n padding-left: 12px;\n flex-shrink: 0;\n }\n </style>\n \n <nine-table-header></nine-table-header>\n <nine-table-body>\n <nine-table-summary></nine-table-summary>\n <nine-table-sheets>\n <nine-table-sheets-body>${sheetsHtml}</nine-table-sheets-body>\n <nine-table-sheets-footer>\n <div class=\"nine-tab-bar\">${tabsHtml}</div>\n <div class=\"sheets-counter\">Total : <span id=\"row-count\">0</span></div>\n </nine-table-sheets-footer>\n </nine-table-sheets>\n <nine-table-analysis></nine-table-analysis>\n </nine-table-body>\n <nine-table-footer></nine-table-footer>\n `;\n\n const $sheetElements = this.#root.querySelectorAll('nine-table-sheet');\n\n $sheetElements?.forEach(($el, idx) => {\n if (rawTables[idx]) {\n setTimeout(() => {\n $el.init(rawTables[idx]);\n if (isAutoHeight) {\n this.#applyAutoHeight(hostEl);\n }\n });\n }\n });\n };\n}","import {trace} from \"@nopeer\";\nimport { LayoutManager } from '../ui/LayoutManager.js';\n\nexport default class NineTable extends HTMLElement {\n #created = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n if (this.#created) return;\n\n // shadowRoot 하나만 넘겨서 내부에서 레이아웃 및 테이블 수집 처리\n this.layoutManager = new LayoutManager(this.shadowRoot);\n //this.layoutManager.render();\n\n this.#created = true;\n trace.log('NineTable connected.');\n\n this.dispatchEvent(new CustomEvent('load', { bubbles: true, detail: { target: this } }));\n }\n\n disconnectedCallback() {\n trace.log('NineTable disconnected.');\n }\n}\n\nif (!customElements.get('nine-table')) {\n customElements.define('nine-table', NineTable);\n}"],"names":["_Trace","traceOrigin","__name","Trace","trace","_NineTableVScrollBar","__privateAdd","_owner","_dragging","_elements","_interval1","_interval2","_firstThumbMove","_prevY","__publicField","__privateGet","body","thumb","thead","trackHeight","thumbHeight","totalRows","theadHeight","h","totalHeight","_getThumbHeight","y","maxScrollTop","pos","delay1","delay2","callback","__privateSet","_init","delayScrollAction","e","clearTimer","_track_onMouseDown","_track_onTouchStart","_thumb_onMouseDown","_thumb_onTouchStart","_thumb_onMouseMove","_thumb_onTouchMove","thumbBound","scrollStep","scrollableTrack","NineTableVScrollBar","_NineTableHScrollBar","NineTableHScrollBar","_NineTableSheet","_tableElement","tableEl","initializeTable","tbl","ensureColgroup","firstRow","colCount","colgroup","defaultWidth","i","col","ensureThead","clonedTable","leftContainer","bodyContainer","rightContainer","filterTableByFixed","sourceTable","targetFixedType","isBody","cols","targetIndices","idx","fixedAttr","tr","cells","bodyTable","leftTable","leftWidth","w","activeLeftWidth","rightTable","rightWidth","activeRightWidth","rowCount","scrollLeft","hScrollbar","scrollTop","_render","sbSize","NineTableSheet","_NineTableSheets","tabBar","tabItem","isMultiSelect","index","updateSplitters","splitter","splitIndex","leftSheet","rightSheet","tabItems","sheetElements","tab","sheet","clickedTab","activeTabs","targetSheet","activeSheets","initialBasis","activeSheet","rowCountEl","NineTableSheets","_LayoutManager","shadowRoot","_root","_resizeObserver","_observeResize","hostEl","entries","entry","_applyAutoHeight","_a","_b","maxRows","targetRows","sampleRow","rowHeight","headerEl","footerEl","headerHeight","footerHeight","headerFooterHeight","calculatedHeight","sheetsBody","rawTables","el","isAutoHeight","sheetsHtml","_","tabsHtml","$sheetElements","$el","LayoutManager","_NineTable","_created","NineTable"],"mappings":"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"}
|
package/dist/nine-table.umd.js
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
(function(p,g){typeof exports=="object"&&typeof module<"u"?g(require("@ninebone/util")):typeof define=="function"&&define.amd?define(["@ninebone/util"],g):(p=typeof globalThis<"u"?globalThis:p||self,g(p.NineboneUtil))})(this,function(p){"use strict";var qt=Object.defineProperty;var It=p=>{throw TypeError(p)};var $t=(p,g,x)=>g in p?qt(p,g,{enumerable:!0,configurable:!0,writable:!0,value:x}):p[g]=x;var l=(p,g)=>qt(p,"name",{value:g,configurable:!0});var R=(p,g,x)=>$t(p,typeof g!="symbol"?g+"":g,x),Ht=(p,g,x)=>g.has(p)||It("Cannot "+x);var t=(p,g,x)=>(Ht(p,g,"read from private field"),x?x.call(p):g.get(p)),a=(p,g,x)=>g.has(p)?It("Cannot add the same private member more than once"):g instanceof WeakSet?g.add(p):g.set(p,x),f=(p,g,x,X)=>(Ht(p,g,"write to private field"),X?X.call(p,x):g.set(p,x),x);var
|
|
1
|
+
(function(p,g){typeof exports=="object"&&typeof module<"u"?g(require("@ninebone/util")):typeof define=="function"&&define.amd?define(["@ninebone/util"],g):(p=typeof globalThis<"u"?globalThis:p||self,g(p.NineboneUtil))})(this,function(p){"use strict";var qt=Object.defineProperty;var It=p=>{throw TypeError(p)};var $t=(p,g,x)=>g in p?qt(p,g,{enumerable:!0,configurable:!0,writable:!0,value:x}):p[g]=x;var l=(p,g)=>qt(p,"name",{value:g,configurable:!0});var R=(p,g,x)=>$t(p,typeof g!="symbol"?g+"":g,x),Ht=(p,g,x)=>g.has(p)||It("Cannot "+x);var t=(p,g,x)=>(Ht(p,g,"read from private field"),x?x.call(p):g.get(p)),a=(p,g,x)=>g.has(p)?It("Cannot add the same private member more than once"):g instanceof WeakSet?g.add(p):g.set(p,x),f=(p,g,x,X)=>(Ht(p,g,"write to private field"),X?X.call(p,x):g.set(p,x),x);var T,B,d,k,C,V,tt,et,ot,N,nt,_,W,z,j,q,K,b,I,E,st,it,lt,rt,O,ct,F,P,D,Z,A,at,ht,Y,G,ut,J,dt,Q;const yt=class yt extends p.trace.constructor{constructor(){super(),this.init("nine-table","green")}};l(yt,"Trace");let g=yt;const x=new g,vt=class vt extends HTMLElement{constructor(){super();a(this,T);a(this,B);a(this,d);a(this,k);a(this,C);a(this,V);a(this,tt,0);R(this,"refresh",l(()=>{if(!t(this,T))return;const e=t(this,T).querySelector(".ng-container-body");if(!e)return;const i=$(t(this,d).thumb,this.shadowRoot),o=e.querySelector("table > thead");t(this,T).getRowCount;const n=$(t(this,d).track).height(),s=$(t(this,d).thumb).height(),h=t(this,T).getRowCount?t(this,T).getRowCount():0;if(h<=10){$(this).hide();return}else $(this).show();const v=o?o.getBoundingClientRect().height:0,c=Math.max(Math.min(n*(e.clientHeight-v)/(32*h),n),16);i[0].dataset.height=c,i.css({height:c});const y=n-t(this,j).call(this);if(y<=0)return;let r=0;const u=e.scrollHeight-e.clientHeight;u>0&&(r=parseInt(e.scrollTop/u*y,10),r>n-s&&(r=n-s),r<0&&(r=0)),t(this,d).thumb.style.top=r+"px",t(this,d).top.disabled=e.scrollTop<=0,t(this,d).bottom.disabled=e.scrollTop>=u},"refresh"));R(this,"delayScroll",l((e,i,o,n)=>{clearInterval(t(this,k)),clearInterval(t(this,C));const s=t(this,T).querySelector(".ng-container-body");s&&(s.scrollTop+=e*32),f(this,k,setInterval(()=>{clearInterval(t(this,k)),f(this,C,setInterval(()=>{s&&(s.scrollTop+=e*32,n&&n.call())},o))},i))},"delayScroll"));R(this,"stopScroll",l(()=>{clearInterval(t(this,k)),clearInterval(t(this,C))},"stopScroll"));a(this,et,l(()=>{const e=l(o=>{clearInterval(t(this,k)),clearInterval(t(this,C));const n=t(this,T).querySelector(".ng-container-body");n&&(n.scrollTop+=o*32),f(this,k,setInterval(()=>{clearInterval(t(this,k)),f(this,C,setInterval(()=>{n&&(n.scrollTop+=o*32)},10))},500))},"delayScrollAction");$(t(this,d).top).on("mousedown",o=>{o.buttons!=1||o.altKey||o.ctrlKey||o.shiftKey||e(-1)}),$(t(this,d).bottom).on("mousedown",o=>{o.buttons!=1||o.altKey||o.ctrlKey||o.shiftKey||e(1)}),$(t(this,d).top).on("touchstart",o=>{e(-1)}),$(t(this,d).bottom).on("touchstart",o=>{e(1)});const i=l(()=>{clearInterval(t(this,k)),clearInterval(t(this,C))},"clearTimer");t(this,d).top.ontouchend=t(this,d).bottom.ontouchend=t(this,d).track.ontouchend=t(this,d).top.onmouseup=t(this,d).top.onmouseleave=t(this,d).bottom.onmouseup=t(this,d).bottom.onmouseleave=t(this,d).track.onmouseup=t(this,d).track.onmouseleave=i,$(t(this,d).track).on("mousedown",t(this,N)),$(t(this,d).track).on("touchstart",t(this,ot)),$(t(this,d).thumb).on("mousedown",t(this,W)),$(t(this,d).thumb).on("touchstart",t(this,nt)),document.addEventListener("mouseup",o=>{t(this,B)&&f(this,B,!1),document.removeEventListener("mousemove",t(this,z))}),document.addEventListener("touchend",o=>{f(this,B,!1),document.removeEventListener("touchmove",t(this,_))})},"#init"));a(this,ot,l(e=>{e.target.getBoundingClientRect(),e.clientX=e.targetTouches[0].clientX,e.clientY=e.targetTouches[0].clientY,e.buttons=1,t(this,N).call(this,e)},"#track_onTouchStart"));a(this,N,l(e=>{if(t(this,B)||e.buttons!=1||e.altKey||e.ctrlKey||e.shiftKey)return;e.preventDefault();var i=t(this,d).thumb.getBoundingClientRect();const o=t(this,T).querySelector(".ng-container-body");if(!o)return;const n=o.clientHeight,s=e.clientY>i.y?n:-n;o.scrollTop+=s,clearInterval(t(this,k)),clearInterval(t(this,C)),f(this,k,setInterval(()=>{clearInterval(t(this,k)),f(this,C,setInterval(()=>{var h=t(this,d).thumb.getBoundingClientRect();e.clientY>h.y&&e.clientY<h.y+h.height?clearInterval(t(this,C)):o.scrollTop+=e.clientY>h.y?n:-n},10))},500))},"#track_onMouseDown"));a(this,nt,l(e=>{e.clientX=e.targetTouches[0].clientX,e.clientY=e.targetTouches[0].clientY,e.buttons=1,t(this,W).call(this,e),document.addEventListener("touchmove",t(this,_))},"#thumb_onTouchStart"));a(this,_,l(e=>{e.clientX=e.targetTouches[0].clientX,e.clientY=e.targetTouches[0].clientY,e.buttons=1,t(this,z).call(this,e)},"#thumb_onTouchMove"));a(this,W,l(e=>{f(this,tt,e.clientY),f(this,B,!0),this.shiftY=e.offsetY+t(this,d).track.getBoundingClientRect().y,this.trackHeight=$(t(this,d).track).height(),this.thumbHeight=$(t(this,d).thumb).height(),f(this,V,!0),document.addEventListener("mousemove",t(this,z))},"#thumb_onMouseDown"));a(this,z,l(e=>{if(!t(this,B))return;e.preventDefault();const i=this.trackHeight,o=t(this,j).call(this);var n=e.clientY-this.shiftY;n<0&&(n=0),n+o>i&&(n=parseInt(i-o)),t(this,d).thumb.style.top=n+"px";const s=t(this,T).querySelector(".ng-container-body");if(!s)return;const h=s.scrollHeight-s.clientHeight,v=i-o;v>0&&h>0&&(s.scrollTop=n/v*h)},"#thumb_onMouseMove"));a(this,j,l(()=>parseInt(t(this,d).thumb.dataset.height||30,10),"#getThumbHeight"));this.applyBaseStyle()}connectedCallback(){f(this,T,this.getRootNode().host),t(this,T)&&(this.shadowRoot.innerHTML=`
|
|
2
|
+
<button class='ng-scroll-top' disabled><div class='ng-scroll-icon'></div></button>
|
|
3
|
+
<div class='ng-scroll-track'> <div class='ng-scroll-thumb'></div> </div>
|
|
4
|
+
<button class='ng-scroll-bottom'><div class='ng-scroll-icon'></div></button>
|
|
5
|
+
`,super.connectedCallback(),f(this,d,{track:this.shadowRoot.querySelector(".ng-scroll-track"),thumb:this.shadowRoot.querySelector(".ng-scroll-thumb"),top:this.shadowRoot.querySelector(".ng-scroll-top"),bottom:this.shadowRoot.querySelector(".ng-scroll-bottom")}),t(this,et).call(this))}};T=new WeakMap,B=new WeakMap,d=new WeakMap,k=new WeakMap,C=new WeakMap,V=new WeakMap,tt=new WeakMap,et=new WeakMap,ot=new WeakMap,N=new WeakMap,nt=new WeakMap,_=new WeakMap,W=new WeakMap,z=new WeakMap,j=new WeakMap,l(vt,"NineTableVScrollBar");let X=vt;customElements.get("nine-table-vscrollbar")||customElements.define("nine-table-vscrollbar",X);const xt=class xt extends HTMLElement{constructor(){super();a(this,q);a(this,K);a(this,b);a(this,I);a(this,E);a(this,st);a(this,it,0);R(this,"refresh",l(()=>{if(!t(this,q))return;const e=t(this,q).querySelector(".ng-container-body");if(!e)return;const i=$(t(this,b).thumb,this.shadowRoot),o=e.querySelector("table > thead");t(this,q).getRowCount;const n=$(t(this,b).track).height(),s=$(t(this,b).thumb).height(),h=t(this,q).getRowCount?t(this,q).getRowCount():0;if(h<=10){$(this).hide();return}else $(this).show();const v=o?o.getBoundingClientRect().height:0,c=Math.max(Math.min(n*(e.clientHeight-v)/(32*h),n),16);i[0].dataset.height=c,i.css({height:c});const y=n-t(this,Z).call(this);if(y<=0)return;let r=0;const u=e.scrollHeight-e.clientHeight;u>0&&(r=parseInt(e.scrollTop/u*y,10),r>n-s&&(r=n-s),r<0&&(r=0)),t(this,b).thumb.style.top=r+"px",t(this,b).top.disabled=e.scrollTop<=0,t(this,b).bottom.disabled=e.scrollTop>=u},"refresh"));R(this,"delayScroll",l((e,i,o,n)=>{clearInterval(t(this,I)),clearInterval(t(this,E));const s=t(this,q).querySelector(".ng-container-body");s&&(s.scrollTop+=e*32),f(this,I,setInterval(()=>{clearInterval(t(this,I)),f(this,E,setInterval(()=>{s&&(s.scrollTop+=e*32,n&&n.call())},o))},i))},"delayScroll"));R(this,"stopScroll",l(()=>{clearInterval(t(this,I)),clearInterval(t(this,E))},"stopScroll"));a(this,lt,l(()=>{const e=l(o=>{clearInterval(t(this,I)),clearInterval(t(this,E));const n=t(this,q).querySelector(".ng-container-body");n&&(n.scrollTop+=o*32),f(this,I,setInterval(()=>{clearInterval(t(this,I)),f(this,E,setInterval(()=>{n&&(n.scrollTop+=o*32)},10))},500))},"delayScrollAction");$(t(this,b).top).on("mousedown",o=>{o.buttons!=1||o.altKey||o.ctrlKey||o.shiftKey||e(-1)}),$(t(this,b).bottom).on("mousedown",o=>{o.buttons!=1||o.altKey||o.ctrlKey||o.shiftKey||e(1)}),$(t(this,b).top).on("touchstart",o=>{e(-1)}),$(t(this,b).bottom).on("touchstart",o=>{e(1)});const i=l(()=>{clearInterval(t(this,I)),clearInterval(t(this,E))},"clearTimer");t(this,b).top.ontouchend=t(this,b).bottom.ontouchend=t(this,b).track.ontouchend=t(this,b).top.onmouseup=t(this,b).top.onmouseleave=t(this,b).bottom.onmouseup=t(this,b).bottom.onmouseleave=t(this,b).track.onmouseup=t(this,b).track.onmouseleave=i,$(t(this,b).track).on("mousedown",t(this,O)),$(t(this,b).track).on("touchstart",t(this,rt)),$(t(this,b).thumb).on("mousedown",t(this,P)),$(t(this,b).thumb).on("touchstart",t(this,ct)),document.addEventListener("mouseup",o=>{t(this,K)&&f(this,K,!1),document.removeEventListener("mousemove",t(this,D))}),document.addEventListener("touchend",o=>{f(this,K,!1),document.removeEventListener("touchmove",t(this,F))})},"#init"));a(this,rt,l(e=>{e.target.getBoundingClientRect(),e.clientX=e.targetTouches[0].clientX,e.clientY=e.targetTouches[0].clientY,e.buttons=1,t(this,O).call(this,e)},"#track_onTouchStart"));a(this,O,l(e=>{if(t(this,K)||e.buttons!=1||e.altKey||e.ctrlKey||e.shiftKey)return;e.preventDefault();var i=t(this,b).thumb.getBoundingClientRect();const o=t(this,q).querySelector(".ng-container-body");if(!o)return;const n=o.clientHeight,s=e.clientY>i.y?n:-n;o.scrollTop+=s,clearInterval(t(this,I)),clearInterval(t(this,E)),f(this,I,setInterval(()=>{clearInterval(t(this,I)),f(this,E,setInterval(()=>{var h=t(this,b).thumb.getBoundingClientRect();e.clientY>h.y&&e.clientY<h.y+h.height?clearInterval(t(this,E)):o.scrollTop+=e.clientY>h.y?n:-n},10))},500))},"#track_onMouseDown"));a(this,ct,l(e=>{e.clientX=e.targetTouches[0].clientX,e.clientY=e.targetTouches[0].clientY,e.buttons=1,t(this,P).call(this,e),document.addEventListener("touchmove",t(this,F))},"#thumb_onTouchStart"));a(this,F,l(e=>{e.clientX=e.targetTouches[0].clientX,e.clientY=e.targetTouches[0].clientY,e.buttons=1,t(this,D).call(this,e)},"#thumb_onTouchMove"));a(this,P,l(e=>{f(this,it,e.clientY),f(this,K,!0),this.shiftY=e.offsetY+t(this,b).track.getBoundingClientRect().y,this.trackHeight=$(t(this,b).track).height(),this.thumbHeight=$(t(this,b).thumb).height(),f(this,st,!0),document.addEventListener("mousemove",t(this,D))},"#thumb_onMouseDown"));a(this,D,l(e=>{if(!t(this,K))return;e.preventDefault();const i=this.trackHeight,o=t(this,Z).call(this);var n=e.clientY-this.shiftY;n<0&&(n=0),n+o>i&&(n=parseInt(i-o)),t(this,b).thumb.style.top=n+"px";const s=t(this,q).querySelector(".ng-container-body");if(!s)return;const h=s.scrollHeight-s.clientHeight,v=i-o;v>0&&h>0&&(s.scrollTop=n/v*h)},"#thumb_onMouseMove"));a(this,Z,l(()=>parseInt(t(this,b).thumb.dataset.height||30,10),"#getThumbHeight"));this.applyBaseStyle()}connectedCallback(){f(this,q,this.getRootNode().host),t(this,q)&&(this.shadowRoot.innerHTML=`
|
|
6
|
+
<button class='ng-scroll-top' disabled><div class='ng-scroll-icon'></div></button>
|
|
7
|
+
<div class='ng-scroll-track'> <div class='ng-scroll-thumb'></div> </div>
|
|
8
|
+
<button class='ng-scroll-bottom'><div class='ng-scroll-icon'></div></button>
|
|
9
|
+
`,super.connectedCallback(),f(this,b,{track:this.shadowRoot.querySelector(".ng-scroll-track"),thumb:this.shadowRoot.querySelector(".ng-scroll-thumb"),top:this.shadowRoot.querySelector(".ng-scroll-top"),bottom:this.shadowRoot.querySelector(".ng-scroll-bottom")}),t(this,lt).call(this))}};q=new WeakMap,K=new WeakMap,b=new WeakMap,I=new WeakMap,E=new WeakMap,st=new WeakMap,it=new WeakMap,lt=new WeakMap,rt=new WeakMap,O=new WeakMap,ct=new WeakMap,F=new WeakMap,P=new WeakMap,D=new WeakMap,Z=new WeakMap,l(xt,"NineTableHScrollBar");let bt=xt;customElements.get("nine-table-hscrollbar")||customElements.define("nine-table-hscrollbar",bt);const U=class U extends HTMLElement{constructor(){super();a(this,A,null);R(this,"init",l(e=>{if(!e)return;const i=l(c=>{const y=l(u=>{if(u.querySelector("colgroup"))return;const m=u.querySelector("tbody tr")||u.querySelector("tr"),H=m?m.querySelectorAll("th, td").length:1,S=document.createElement("colgroup"),M=Math.max(Math.floor((u.clientWidth||600)/H),100);for(let L=0;L<H;L++){const kt=document.createElement("col");kt.setAttribute("width",M),S.appendChild(kt)}u.prepend(S)},"ensureColgroup"),r=l(u=>{if(u.querySelector("thead"))return;const m=document.createElement("thead"),H=u.querySelector("colgroup");H?H.after(m):u.prepend(m)},"ensureThead");return y(c),r(c),c.classList.add("nine-table-element"),c},"initializeTable"),o=e.cloneNode(!0);f(this,A,i(o)),t(this,A).style.display="table";const n=this.querySelector(".ng-container-left"),s=this.querySelector(".ng-container-body"),h=this.querySelector(".ng-container-right"),v=l((c,y,r=!1)=>{const u=c.cloneNode(!0),m=Array.from(u.querySelectorAll("colgroup col")),H=[];return m.forEach((S,M)=>{const L=S.getAttribute("fixed");(r?!L||L==="":L===y)||H.push(M)}),H.reverse().forEach(S=>{m[S]&&m[S].remove(),u.querySelectorAll("tr").forEach(M=>{const L=M.querySelectorAll("th, td");L[S]&&L[S].remove()})}),u},"filterTableByFixed");if(s){const c=v(t(this,A),null,!0);s.innerHTML="",s.appendChild(c)}if(n){const c=v(t(this,A),"left",!1);let y=0;c.querySelectorAll("col").forEach(u=>{const m=parseInt(u.getAttribute("width"),10);isNaN(m)||(y+=m)}),n.innerHTML="",n.appendChild(c);const r=y>0?y:0;n.style.flex=`0 0 ${r}px`,n.style.width=`${r}px`}if(h){const c=v(t(this,A),"right",!1);let y=0;c.querySelectorAll("col").forEach(u=>{const m=parseInt(u.getAttribute("width"),10);isNaN(m)||(y+=m)}),h.innerHTML="",h.appendChild(c);const r=y>0?y:0;h.style.flex=`0 0 ${r}px`,h.style.width=`${r}px`}if(s){const c=this.getRowCount();s.style.overflowY=c>10?"auto":"hidden",s.addEventListener("scroll",()=>{const y=s.scrollLeft,r=this.querySelector("nine-table-hscrollbar");r&&typeof r.syncThumb=="function"&&r.syncThumb(y)})}x.log(`NineTableSheet 3-split initialized with rows: ${this.getRowCount()}`)},"init"));R(this,"getRowCount",l(()=>t(this,A)?t(this,A).querySelectorAll("tbody tr").length:0,"getRowCount"));R(this,"scrollToX",l(e=>{const i=this.querySelector(".ng-container-body");i&&(i.scrollLeft=e)},"scrollToX"));R(this,"scrollToY",l(e=>{const i=this.querySelector(".ng-container-body");i&&(i.scrollTop=e)},"scrollToY"));a(this,at,l(()=>{const e=U.SCROLLBAR_SIZE;this.innerHTML=`
|
|
2
10
|
<style>
|
|
3
11
|
nine-table-sheet {
|
|
4
12
|
display: flex;
|
|
@@ -108,15 +116,7 @@
|
|
|
108
116
|
<nine-table-hscrollbar></nine-table-hscrollbar>
|
|
109
117
|
<div class='ng-scroll-edge'></div>
|
|
110
118
|
</div>
|
|
111
|
-
`},"#render"))}connectedCallback(){t(this,
|
|
112
|
-
<button class='ng-scroll-top' disabled><div class='ng-scroll-icon'></div></button>
|
|
113
|
-
<div class='ng-scroll-track'> <div class='ng-scroll-thumb'></div> </div>
|
|
114
|
-
<button class='ng-scroll-bottom'><div class='ng-scroll-icon'></div></button>
|
|
115
|
-
`,super.connectedCallback(),f(this,d,{track:this.shadowRoot.querySelector(".ng-scroll-track"),thumb:this.shadowRoot.querySelector(".ng-scroll-thumb"),top:this.shadowRoot.querySelector(".ng-scroll-top"),bottom:this.shadowRoot.querySelector(".ng-scroll-bottom")}),t(this,ot).call(this))}};T=new WeakMap,B=new WeakMap,d=new WeakMap,k=new WeakMap,C=new WeakMap,tt=new WeakMap,et=new WeakMap,ot=new WeakMap,nt=new WeakMap,_=new WeakMap,st=new WeakMap,W=new WeakMap,j=new WeakMap,z=new WeakMap,O=new WeakMap,l(vt,"NineTableVScrollBar");let bt=vt;customElements.get("nine-table-vscrollbar")||customElements.define("nine-table-vscrollbar",bt);const xt=class xt extends HTMLElement{constructor(){super();a(this,q);a(this,K);a(this,b);a(this,I);a(this,E);a(this,it);a(this,lt,0);R(this,"refresh",l(()=>{if(!t(this,q))return;const e=t(this,q).querySelector(".ng-container-body");if(!e)return;const i=$(t(this,b).thumb,this.shadowRoot),o=e.querySelector("table > thead");t(this,q).getRowCount;const n=$(t(this,b).track).height(),s=$(t(this,b).thumb).height(),h=t(this,q).getRowCount?t(this,q).getRowCount():0;if(h<=10){$(this).hide();return}else $(this).show();const v=o?o.getBoundingClientRect().height:0,c=Math.max(Math.min(n*(e.clientHeight-v)/(32*h),n),16);i[0].dataset.height=c,i.css({height:c});const y=n-t(this,U).call(this);if(y<=0)return;let r=0;const u=e.scrollHeight-e.clientHeight;u>0&&(r=parseInt(e.scrollTop/u*y,10),r>n-s&&(r=n-s),r<0&&(r=0)),t(this,b).thumb.style.top=r+"px",t(this,b).top.disabled=e.scrollTop<=0,t(this,b).bottom.disabled=e.scrollTop>=u},"refresh"));R(this,"delayScroll",l((e,i,o,n)=>{clearInterval(t(this,I)),clearInterval(t(this,E));const s=t(this,q).querySelector(".ng-container-body");s&&(s.scrollTop+=e*32),f(this,I,setInterval(()=>{clearInterval(t(this,I)),f(this,E,setInterval(()=>{s&&(s.scrollTop+=e*32,n&&n.call())},o))},i))},"delayScroll"));R(this,"stopScroll",l(()=>{clearInterval(t(this,I)),clearInterval(t(this,E))},"stopScroll"));a(this,rt,l(()=>{const e=l(o=>{clearInterval(t(this,I)),clearInterval(t(this,E));const n=t(this,q).querySelector(".ng-container-body");n&&(n.scrollTop+=o*32),f(this,I,setInterval(()=>{clearInterval(t(this,I)),f(this,E,setInterval(()=>{n&&(n.scrollTop+=o*32)},10))},500))},"delayScrollAction");$(t(this,b).top).on("mousedown",o=>{o.buttons!=1||o.altKey||o.ctrlKey||o.shiftKey||e(-1)}),$(t(this,b).bottom).on("mousedown",o=>{o.buttons!=1||o.altKey||o.ctrlKey||o.shiftKey||e(1)}),$(t(this,b).top).on("touchstart",o=>{e(-1)}),$(t(this,b).bottom).on("touchstart",o=>{e(1)});const i=l(()=>{clearInterval(t(this,I)),clearInterval(t(this,E))},"clearTimer");t(this,b).top.ontouchend=t(this,b).bottom.ontouchend=t(this,b).track.ontouchend=t(this,b).top.onmouseup=t(this,b).top.onmouseleave=t(this,b).bottom.onmouseup=t(this,b).bottom.onmouseleave=t(this,b).track.onmouseup=t(this,b).track.onmouseleave=i,$(t(this,b).track).on("mousedown",t(this,F)),$(t(this,b).track).on("touchstart",t(this,ct)),$(t(this,b).thumb).on("mousedown",t(this,Z)),$(t(this,b).thumb).on("touchstart",t(this,at)),document.addEventListener("mouseup",o=>{t(this,K)&&f(this,K,!1),document.removeEventListener("mousemove",t(this,D))}),document.addEventListener("touchend",o=>{f(this,K,!1),document.removeEventListener("touchmove",t(this,P))})},"#init"));a(this,ct,l(e=>{e.target.getBoundingClientRect(),e.clientX=e.targetTouches[0].clientX,e.clientY=e.targetTouches[0].clientY,e.buttons=1,t(this,F).call(this,e)},"#track_onTouchStart"));a(this,F,l(e=>{if(t(this,K)||e.buttons!=1||e.altKey||e.ctrlKey||e.shiftKey)return;e.preventDefault();var i=t(this,b).thumb.getBoundingClientRect();const o=t(this,q).querySelector(".ng-container-body");if(!o)return;const n=o.clientHeight,s=e.clientY>i.y?n:-n;o.scrollTop+=s,clearInterval(t(this,I)),clearInterval(t(this,E)),f(this,I,setInterval(()=>{clearInterval(t(this,I)),f(this,E,setInterval(()=>{var h=t(this,b).thumb.getBoundingClientRect();e.clientY>h.y&&e.clientY<h.y+h.height?clearInterval(t(this,E)):o.scrollTop+=e.clientY>h.y?n:-n},10))},500))},"#track_onMouseDown"));a(this,at,l(e=>{e.clientX=e.targetTouches[0].clientX,e.clientY=e.targetTouches[0].clientY,e.buttons=1,t(this,Z).call(this,e),document.addEventListener("touchmove",t(this,P))},"#thumb_onTouchStart"));a(this,P,l(e=>{e.clientX=e.targetTouches[0].clientX,e.clientY=e.targetTouches[0].clientY,e.buttons=1,t(this,D).call(this,e)},"#thumb_onTouchMove"));a(this,Z,l(e=>{f(this,lt,e.clientY),f(this,K,!0),this.shiftY=e.offsetY+t(this,b).track.getBoundingClientRect().y,this.trackHeight=$(t(this,b).track).height(),this.thumbHeight=$(t(this,b).thumb).height(),f(this,it,!0),document.addEventListener("mousemove",t(this,D))},"#thumb_onMouseDown"));a(this,D,l(e=>{if(!t(this,K))return;e.preventDefault();const i=this.trackHeight,o=t(this,U).call(this);var n=e.clientY-this.shiftY;n<0&&(n=0),n+o>i&&(n=parseInt(i-o)),t(this,b).thumb.style.top=n+"px";const s=t(this,q).querySelector(".ng-container-body");if(!s)return;const h=s.scrollHeight-s.clientHeight,v=i-o;v>0&&h>0&&(s.scrollTop=n/v*h)},"#thumb_onMouseMove"));a(this,U,l(()=>parseInt(t(this,b).thumb.dataset.height||30,10),"#getThumbHeight"));this.applyBaseStyle()}connectedCallback(){f(this,q,this.getRootNode().host),t(this,q)&&(this.shadowRoot.innerHTML=`
|
|
116
|
-
<button class='ng-scroll-top' disabled><div class='ng-scroll-icon'></div></button>
|
|
117
|
-
<div class='ng-scroll-track'> <div class='ng-scroll-thumb'></div> </div>
|
|
118
|
-
<button class='ng-scroll-bottom'><div class='ng-scroll-icon'></div></button>
|
|
119
|
-
`,super.connectedCallback(),f(this,b,{track:this.shadowRoot.querySelector(".ng-scroll-track"),thumb:this.shadowRoot.querySelector(".ng-scroll-thumb"),top:this.shadowRoot.querySelector(".ng-scroll-top"),bottom:this.shadowRoot.querySelector(".ng-scroll-bottom")}),t(this,rt).call(this))}};q=new WeakMap,K=new WeakMap,b=new WeakMap,I=new WeakMap,E=new WeakMap,it=new WeakMap,lt=new WeakMap,rt=new WeakMap,ct=new WeakMap,F=new WeakMap,at=new WeakMap,P=new WeakMap,Z=new WeakMap,D=new WeakMap,U=new WeakMap,l(xt,"NineTableHScrollBar");let ft=xt;customElements.get("nine-table-hscrollbar")||customElements.define("nine-table-hscrollbar",ft);const wt=class wt extends HTMLElement{constructor(){super();a(this,ht,l(()=>{const e=this.querySelector(".nine-tab-bar");e&&(e.addEventListener("click",i=>{const o=i.target.closest(".nine-tab-item");if(!o)return;const n=i.ctrlKey||i.metaKey||i.shiftKey,s=parseInt(o.dataset.index,10);this.switchSheet(s,n)}),this.switchSheet(0,!1))},"#init"));R(this,"switchSheet",l((e,i=!1)=>{const o=l(()=>{const r=this.querySelector("nine-table-sheets-body");r.querySelectorAll("nine-splitter").forEach(m=>{const H=parseInt(m.dataset.splitIndex,10),S=r.querySelector(`nine-table-sheet[data-index="${H-1}"]`),M=r.querySelector(`nine-table-sheet[data-index="${H}"]`);S&&M&&S.classList.contains("active")&&M.classList.contains("active")?m.classList.add("active"):m.classList.remove("active")})},"updateSplitters"),n=this.querySelector(".nine-tab-bar"),s=this.querySelector("nine-table-sheets-body"),h=n.querySelectorAll(".nine-tab-item"),v=s.querySelectorAll("nine-table-sheet");if(!h[e])return;if(!i)h.forEach((r,u)=>{r.classList.toggle("active",u===e);const m=s.querySelector(`nine-table-sheet[data-index="${u}"]`);m&&(m.style.flex="")}),v.forEach((r,u)=>{r.classList.toggle("active",u===e)});else{const r=h[e],u=n.querySelectorAll(".nine-tab-item.active");if(r.classList.contains("active")&&u.length<=1)return;r.classList.toggle("active");const m=s.querySelector(`nine-table-sheet[data-index="${e}"]`);m&&(m.classList.toggle("active"),m.classList.contains("active")||(m.style.flex=""))}const c=Array.from(s.querySelectorAll("nine-table-sheet.active"));if(c.length>1){const r=1/c.length;c.forEach(u=>{(!u.style.flex||u.style.flex==="1 1 100%")&&(u.style.flex=`${r} ${r} 0px`)})}else c.forEach(r=>{r.style.flex="1 1 100%"});o();const y=s.querySelector("nine-table-sheet.active");if(y&&typeof y.getRowCount=="function"){const r=this.querySelector("#row-count");r&&(r.textContent=y.getRowCount().toLocaleString())}},"switchSheet"))}connectedCallback(){t(this,ht).call(this)}};ht=new WeakMap,l(wt,"NineTableSheets");let gt=wt;customElements.get("nine-table-sheets")||customElements.define("nine-table-sheets",gt);const St=class St{constructor(w){a(this,Y);a(this,G,null);a(this,ut,l(()=>{const w=t(this,Y).host;w&&(f(this,G,new ResizeObserver(e=>{for(let i of e)w.getAttribute("auto-height")==="true"&&t(this,J).call(this,w)})),t(this,G).observe(w))},"#observeResize"));a(this,J,l(w=>{var M,L;const e=(M=w.shadowRoot)==null?void 0:M.querySelector("nine-table-sheet.active");if(!e)return;const i=((L=e.getRowCount)==null?void 0:L.call(e))||0,o=parseInt(w.getAttribute("max-display-row"),10)||10,n=Math.min(i,o),s=e.querySelector("tbody tr")||e.querySelector("tr"),h=s?s.getBoundingClientRect().height:32,v=t(this,Y).querySelector("nine-table-header"),c=t(this,Y).querySelector("nine-table-sheets-footer"),y=v?v.getBoundingClientRect().height:40,r=c?c.getBoundingClientRect().height:32,m=y+r+16,H=n*h+m;w.style.height=`${H}px`,w.style.maxHeight=`${o*h+m}px`;const S=t(this,Y).querySelector("nine-table-sheets-body");S&&(S.style.overflowY=i>o?"auto":"hidden")},"#applyAutoHeight"));a(this,dt,l(()=>{const w=t(this,Y).host,i=Array.from(w.children).filter(v=>v.tagName==="TABLE"),o=w.getAttribute("auto-height")==="true",n=i.map((v,c)=>`<nine-table-sheet class="${c===0?"active":""}" data-index="${c}"></nine-table-sheet>`).join(""),s=i.map((v,c)=>`<div class="nine-tab-item ${c===0?"active":""}" data-index="${c}">Sheet ${c+1}</div>`).join("");t(this,Y).innerHTML=`
|
|
119
|
+
`},"#render"))}connectedCallback(){t(this,at).call(this)}disconnectedCallback(){this.innerHTML="",x.log("NineTableSheet destroyed.")}};A=new WeakMap,at=new WeakMap,l(U,"NineTableSheet"),R(U,"SCROLLBAR_SIZE",16);let ft=U;customElements.get("nine-table-sheet")||customElements.define("nine-table-sheet",ft);const wt=class wt extends HTMLElement{constructor(){super();a(this,ht,l(()=>{const e=this.querySelector(".nine-tab-bar");e&&(e.addEventListener("click",i=>{const o=i.target.closest(".nine-tab-item");if(!o)return;const n=i.ctrlKey||i.metaKey||i.shiftKey,s=parseInt(o.dataset.index,10);this.switchSheet(s,n)}),this.switchSheet(0,!1))},"#init"));R(this,"switchSheet",l((e,i=!1)=>{const o=l(()=>{const r=this.querySelector("nine-table-sheets-body");r.querySelectorAll("nine-splitter").forEach(m=>{const H=parseInt(m.dataset.splitIndex,10),S=r.querySelector(`nine-table-sheet[data-index="${H-1}"]`),M=r.querySelector(`nine-table-sheet[data-index="${H}"]`);S&&M&&S.classList.contains("active")&&M.classList.contains("active")?m.classList.add("active"):m.classList.remove("active")})},"updateSplitters"),n=this.querySelector(".nine-tab-bar"),s=this.querySelector("nine-table-sheets-body"),h=n.querySelectorAll(".nine-tab-item"),v=s.querySelectorAll("nine-table-sheet");if(!h[e])return;if(!i)h.forEach((r,u)=>{r.classList.toggle("active",u===e);const m=s.querySelector(`nine-table-sheet[data-index="${u}"]`);m&&(m.style.flex="")}),v.forEach((r,u)=>{r.classList.toggle("active",u===e)});else{const r=h[e],u=n.querySelectorAll(".nine-tab-item.active");if(r.classList.contains("active")&&u.length<=1)return;r.classList.toggle("active");const m=s.querySelector(`nine-table-sheet[data-index="${e}"]`);m&&(m.classList.toggle("active"),m.classList.contains("active")||(m.style.flex=""))}const c=Array.from(s.querySelectorAll("nine-table-sheet.active"));if(c.length>1){const r=1/c.length;c.forEach(u=>{(!u.style.flex||u.style.flex==="1 1 100%")&&(u.style.flex=`${r} ${r} 0px`)})}else c.forEach(r=>{r.style.flex="1 1 100%"});o();const y=s.querySelector("nine-table-sheet.active");if(y&&typeof y.getRowCount=="function"){const r=this.querySelector("#row-count");r&&(r.textContent=y.getRowCount().toLocaleString())}},"switchSheet"))}connectedCallback(){t(this,ht).call(this)}};ht=new WeakMap,l(wt,"NineTableSheets");let gt=wt;customElements.get("nine-table-sheets")||customElements.define("nine-table-sheets",gt);const St=class St{constructor(w){a(this,Y);a(this,G,null);a(this,ut,l(()=>{const w=t(this,Y).host;w&&(f(this,G,new ResizeObserver(e=>{for(let i of e)w.getAttribute("auto-height")==="true"&&t(this,J).call(this,w)})),t(this,G).observe(w))},"#observeResize"));a(this,J,l(w=>{var M,L;const e=(M=w.shadowRoot)==null?void 0:M.querySelector("nine-table-sheet.active");if(!e)return;const i=((L=e.getRowCount)==null?void 0:L.call(e))||0,o=parseInt(w.getAttribute("max-display-row"),10)||10,n=Math.min(i,o),s=e.querySelector("tbody tr")||e.querySelector("tr"),h=s?s.getBoundingClientRect().height:32,v=t(this,Y).querySelector("nine-table-header"),c=t(this,Y).querySelector("nine-table-sheets-footer"),y=v?v.getBoundingClientRect().height:40,r=c?c.getBoundingClientRect().height:32,m=y+r+16,H=n*h+m;w.style.height=`${H}px`,w.style.maxHeight=`${o*h+m}px`;const S=t(this,Y).querySelector("nine-table-sheets-body");S&&(S.style.overflowY=i>o?"auto":"hidden")},"#applyAutoHeight"));a(this,dt,l(()=>{const w=t(this,Y).host,i=Array.from(w.children).filter(v=>v.tagName==="TABLE"),o=w.getAttribute("auto-height")==="true",n=i.map((v,c)=>`<nine-table-sheet class="${c===0?"active":""}" data-index="${c}"></nine-table-sheet>`).join(""),s=i.map((v,c)=>`<div class="nine-tab-item ${c===0?"active":""}" data-index="${c}">Sheet ${c+1}</div>`).join("");t(this,Y).innerHTML=`
|
|
120
120
|
<style>
|
|
121
121
|
:host {
|
|
122
122
|
display: flex;
|