diff --git a/README.md b/README.md index c8a5dd0..c9cbc72 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Make any HTML table **responsive**: low-priority columns automatically **collaps * โž•/โž– Per-row toggle (keyboard: **Enter** / **Space**) * โ™ฟ Accessible by default (`aria-expanded`, `aria-controls`, `role="region"`, `aria-live="polite"`) * ๐Ÿงฉ Zero dependencies, tiny footprint -* โš™๏ธ Production-ready: Resize/Mutation/Intersection observers, hidden-container deferral, stable row IDs, multi-`` support +* โš™๏ธ Production-ready: Resize/Mutation/Intersection observers, hidden-container deferral, stable row IDs, multi-row `` and multi-`` support * ๐ŸŽ›๏ธ Flexible: `tableLayout`, `detailsRender` hook, custom icons/strings/classes * ๐Ÿงผ Minimal CSS: only scoped utility classes are injected; your design system controls look & feel @@ -121,7 +121,7 @@ ct.set('#orders'); ## Markup requirements -* A `` with **one header row** (``) is required. +* A `` is required. Multi-row headers are supported when all header/body cells are simple (no `colspan`/`rowspan`). * At least one `` is required (multi-`` is supported). * **No `colspan`/`rowspan`** in header or body for responsive collapsing. If spans are detected, collapsing is **disabled** (base styles still apply and a console warning is emitted). * The control (+/โˆ’) column is automatically inserted as the **first** column if not present. diff --git a/dist/collapsetable.js b/dist/collapsetable.js index 644ed9b..9009ffd 100644 --- a/dist/collapsetable.js +++ b/dist/collapsetable.js @@ -221,6 +221,38 @@ return parts.every(c => el.classList.contains(c)); } + function isStructuralOptionsChange(prev, next) { + const pa = prev && prev.attrs ? prev.attrs : {}; + const na = next && next.attrs ? next.attrs : {}; + const pc = prev && prev.classNames ? prev.classNames : {}; + const nc = next && next.classNames ? next.classNames : {}; + + return ( + pa.priority !== na.priority || + pa.min !== na.min || + pa.label !== na.label || + pc.control !== nc.control || + pc.details !== nc.details || + pc.detailsInner !== nc.detailsInner || + pc.detail !== nc.detail || + pc.name !== nc.name || + pc.value !== nc.value || + pc.hide !== nc.hide || + pc.toggle !== nc.toggle || + prev.controlWidth !== next.controlWidth || + prev.minWidthDefault !== next.minWidthDefault || + prev.detailsRender !== next.detailsRender + ); + } + + function swapClassTokens(el, prevClassString, nextClassString) { + if (!el) return; + const prev = String(prevClassString || "").trim().split(/\s+/).filter(Boolean); + const next = String(nextClassString || "").trim().split(/\s+/).filter(Boolean); + prev.forEach(c => el.classList.remove(c)); + next.forEach(c => el.classList.add(c)); + } + /** ======================================================================== * Column Fit Algorithm (pure) * ======================================================================= */ @@ -301,6 +333,7 @@ this._destroyed = false; this._insertedControl = false; // whether we injected the control column + this._insertedHeaderControls = new WeakSet(); // track THEAD rows that received injected control TH this._uid = ++__CTBL_TABLE_SEQ; // unique prefix if table has no id this._initOnce(); @@ -327,6 +360,7 @@ throw new Error("CollapseTable: table with at least one is required."); } this.headerRow = this.thead.rows[0]; + this.headerRows = Array.from(this.thead.rows); this.tbodies = Array.from(this.table.tBodies || []); if (!this.tbodies.length) throw new Error("CollapseTable: table is required."); @@ -355,7 +389,9 @@ } _checkSpans() { - const hasSpanInHead = Array.from(this.headerRow.cells).some(th => th.colSpan !== 1 || th.rowSpan !== 1); + const hasSpanInHead = this.headerRows.some(tr => + Array.from(tr.cells).some(th => th.colSpan !== 1 || th.rowSpan !== 1) + ); const hasSpanInBody = this.tbodies.some(tb => Array.from(tb.rows).some(tr => Array.from(tr.cells).some(td => td.colSpan !== 1 || td.rowSpan !== 1) @@ -377,26 +413,34 @@ } _ensureControlColumn() { - const firstCell = this.headerRow.cells[0]; - const firstIsControl = firstCell && hasAllClasses(firstCell, this.options.classNames.control); - if (!firstIsControl) { - const th = createEl("th", this.options.classNames.control); - th.setAttribute("aria-hidden", "true"); - th.setAttribute("scope", "col"); - this.headerRow.insertBefore(th, this.headerRow.firstChild); - this._insertedControl = true; - - // Insert control TD for each row in each TBODY - for (const tb of this.tbodies) { - for (const row of Array.from(tb.rows)) { + for (const tr of this.headerRows) { + const firstCell = tr.cells[0]; + const firstIsControl = firstCell && hasAllClasses(firstCell, this.options.classNames.control); + if (!firstIsControl) { + const th = createEl("th", this.options.classNames.control); + th.setAttribute("aria-hidden", "true"); + th.setAttribute("scope", "col"); + tr.insertBefore(th, tr.firstChild); + this._insertedControl = true; + this._insertedHeaderControls.add(tr); + } else { + const th = tr.cells[0]; + th.setAttribute("aria-hidden", "true"); + th.setAttribute("scope", "col"); + } + } + + // Insert control TD for each row in each TBODY + for (const tb of this.tbodies) { + for (const row of Array.from(tb.rows)) { + if (row.classList.contains(this.options.classNames.details)) continue; + const first = row.cells[0]; + const firstIsControl = first && hasAllClasses(first, this.options.classNames.control); + if (!firstIsControl) { const td = createEl("td", this.options.classNames.control); row.insertBefore(td, row.firstChild); } } - } else { - const th = this.headerRow.cells[0]; - th.setAttribute("aria-hidden", "true"); - th.setAttribute("scope", "col"); } } @@ -448,28 +492,33 @@ for (const tb of this.tbodies) this._mountRowsInBody(tb); // Event delegation (click + keyboard) - this._clickHandler = (e) => { - const target = /** @type {Element} */ (e.target); - const btn = target && target.closest && target.closest(this._toggleSelector); - if (!btn || !this.table.contains(btn)) return; - e.preventDefault(); - const row = btn.closest("tr"); - if (!row) return; - this.toggle(row); - }; - this._keyHandler = (e) => { - const target = /** @type {Element} */ (e.target); - const btn = target && target.closest && target.closest(this._toggleSelector); - if (!btn || !this.table.contains(btn)) return; - if (e.key === "Enter" || e.key === " ") { + if (!this._clickHandler) { + this._clickHandler = (e) => { + const target = /** @type {Element} */ (e.target); + const btn = target && target.closest && target.closest(this._toggleSelector); + if (!btn || !this.table.contains(btn)) return; e.preventDefault(); const row = btn.closest("tr"); if (!row) return; this.toggle(row); - } - }; - this.table.addEventListener("click", this._clickHandler); - this.table.addEventListener("keydown", this._keyHandler); + }; + this.table.addEventListener("click", this._clickHandler); + } + + if (!this._keyHandler) { + this._keyHandler = (e) => { + const target = /** @type {Element} */ (e.target); + const btn = target && target.closest && target.closest(this._toggleSelector); + if (!btn || !this.table.contains(btn)) return; + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + const row = btn.closest("tr"); + if (!row) return; + this.toggle(row); + } + }; + this.table.addEventListener("keydown", this._keyHandler); + } } _mountRowsInBody(tbody) { @@ -595,6 +644,8 @@ } if (mustRebuild) { this.headerRow = this.thead.rows[0]; + this.headerRows = Array.from(this.thead.rows); + this._ensureControlColumn(); this.headers = Array.from(this.headerRow.cells); this._buildColumns(); this._mountAllBodies(); @@ -674,10 +725,12 @@ } _applyVisibility(hiddenSet) { - // Header - for (const col of this.columnsMeta) { - const hide = hiddenSet.has(col.index); - col.th.classList.toggle(this.options.classNames.hide, hide); + // Header (apply to all rows in THEAD so multi-row headers stay aligned) + for (const tr of this.headerRows) { + for (const col of this.columnsMeta) { + const th = tr.cells[col.index]; + if (th) th.classList.toggle(this.options.classNames.hide, hiddenSet.has(col.index)); + } } // Bodies for (const tb of this.tbodies) { @@ -902,6 +955,76 @@ this._refit(); } + _migrateStructureClasses(prevOptions, nextOptions) { + if (!prevOptions || !nextOptions) return; + + const prevDetails = prevOptions.classNames && prevOptions.classNames.details; + const nextDetails = nextOptions.classNames && nextOptions.classNames.details; + const prevDetailsInner = prevOptions.classNames && prevOptions.classNames.detailsInner; + const nextDetailsInner = nextOptions.classNames && nextOptions.classNames.detailsInner; + + const prevControl = prevOptions.classNames && prevOptions.classNames.control; + const nextControl = nextOptions.classNames && nextOptions.classNames.control; + const prevToggle = prevOptions.classNames && prevOptions.classNames.toggle; + const nextToggle = nextOptions.classNames && nextOptions.classNames.toggle; + + for (const tr of this.headerRows || []) { + if (tr && tr.cells && tr.cells[0]) { + swapClassTokens(tr.cells[0], prevControl, nextControl); + } + } + + for (const tb of this.tbodies) { + for (const row of Array.from(tb.rows)) { + if (row.classList.contains(prevDetails)) { + row.classList.remove(prevDetails); + row.classList.add(nextDetails); + } + + if (row.classList.contains(nextDetails)) { + const wraps = Array.from(row.querySelectorAll("." + prevDetailsInner)); + wraps.forEach(w => swapClassTokens(w, prevDetailsInner, nextDetailsInner)); + continue; + } + + if (row.cells && row.cells[0]) { + swapClassTokens(row.cells[0], prevControl, nextControl); + } + + const ctrlCell = row.cells && row.cells[0]; + if (!ctrlCell) continue; + const buttons = Array.from(ctrlCell.querySelectorAll("button")); + if (buttons.length > 1) { + buttons.slice(1).forEach(btn => btn.remove()); + } + if (buttons[0]) { + swapClassTokens(buttons[0], prevToggle, nextToggle); + } + } + } + } + + _reconfigure(nextOptions, structural = false) { + const prevOptions = this.options; + this.options = nextOptions; + this._toggleSelector = buildButtonClassSelector(this.options.classNames.toggle); + if (!this.table.style.tableLayout || this.table.style.tableLayout !== this.options.tableLayout) { + this.table.style.tableLayout = this.options.tableLayout; + } + + if (structural) { + this.headerRow = this.thead && this.thead.rows ? this.thead.rows[0] : this.headerRow; + this.headerRows = this.thead && this.thead.rows ? Array.from(this.thead.rows) : this.headerRows; + this._migrateStructureClasses(prevOptions, nextOptions); + this._ensureControlColumn(); + this.headers = Array.from(this.headerRow.cells); + this._buildColumns(); + for (const tb of this.tbodies) this._mountRowsInBody(tb); + } + + this.refresh(); + } + destroy() { this._destroyed = true; @@ -917,7 +1040,11 @@ if (this._onWinResize) window.removeEventListener("resize", this._onWinResize); // Unhide all cells - for (const col of this.columnsMeta) col.th.classList.remove(this.options.classNames.hide); + for (const tr of this.headerRows) { + for (const cell of Array.from(tr.cells)) { + cell.classList.remove(this.options.classNames.hide); + } + } for (const tb of this.tbodies) { for (const row of Array.from(tb.rows)) { if (row.classList.contains(this.options.classNames.details)) continue; @@ -941,9 +1068,10 @@ // If we injected the control column, remove it (restore original structure) if (this._insertedControl) { - // Remove header control th - if (this.headerRow && this.headerRow.cells && this.headerRow.cells[0]) { - this.headerRow.deleteCell(0); + // Remove header control th only from rows we modified + for (const tr of this.headerRows) { + if (!this._insertedHeaderControls.has(tr)) continue; + if (tr && tr.cells && tr.cells[0]) tr.deleteCell(0); } // Remove first cell from each data row in each tbody for (const tb of this.tbodies) { @@ -1070,15 +1198,10 @@ if (this._tables.has(el)) { const ctrl = this._tables.get(el); - ctrl.options = merge(this.options, perTableOptions); - // Recompute selector if toggle classes were changed - ctrl._toggleSelector = buildButtonClassSelector(ctrl.options.classNames.toggle); - // apply tableLayout inline if changed - if (!ctrl.table.style.tableLayout || ctrl.table.style.tableLayout !== ctrl.options.tableLayout) { - ctrl.table.style.tableLayout = ctrl.options.tableLayout; - } + const nextOptions = merge(this.options, perTableOptions); + const structural = isStructuralOptionsChange(ctrl.options, nextOptions); ctrl._setMode(this._mode); - ctrl.refresh(); + ctrl._reconfigure(nextOptions, structural); return ctrl; } @@ -1235,15 +1358,9 @@ } this.options = merge(this.options, partial); this._tables.forEach((ctrl) => { - ctrl.options = merge(ctrl.options, partial); - // Recompute selector if toggle classes changed globally - if (partial && partial.classNames && typeof partial.classNames.toggle === 'string') { - ctrl._toggleSelector = buildButtonClassSelector(ctrl.options.classNames.toggle); - } - if (partial && typeof partial.tableLayout !== 'undefined') { - ctrl.table.style.tableLayout = ctrl.options.tableLayout; - } - ctrl.refresh(); + const nextOptions = merge(ctrl.options, partial); + const structural = isStructuralOptionsChange(ctrl.options, nextOptions); + ctrl._reconfigure(nextOptions, structural); }); } diff --git a/dist/collapsetable.min.js b/dist/collapsetable.min.js index 5f594b5..b632f87 100644 --- a/dist/collapsetable.min.js +++ b/dist/collapsetable.min.js @@ -39,5 +39,5 @@ * accessibility improvements, attribute-aware updates, stable row IDs, setAll/unsetAll, * per-row controls, detailsRender hook, dynamic TBODY tracking, and more. */ -!function(t,e){"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():t.CollapseTable=e()}("undefined"!=typeof self?self:this,function(){"use strict";const t="development",e="production";function s(s){return s===t?t:e}const i=t=>"undefined"!=typeof window&&window.requestAnimationFrame?window.requestAnimationFrame(t):setTimeout(t,16);function o(t){return t?"string"==typeof t?t.startsWith("#")?document.getElementById(t.slice(1)):document.getElementById(t)||document.querySelector(t):t&&1===t.nodeType?t:null:null}function n(t){return t?"string"==typeof t?Array.from(document.querySelectorAll(t)):t instanceof Element?[t]:t instanceof NodeList||t instanceof HTMLCollection?Array.from(t):Array.isArray(t)?t.filter(t=>t instanceof Element):[]:[]}function r(t,e){const s=document.createElement(t);return e&&(s.className=e),s}function l(t,e,s){const i=l._store||(l._store=new WeakMap);let o=i.get(t);o||(o=new Set,i.set(t,o)),o.has(e)||(o.add(e),s())}function a(t,e){const s=Object.assign({},t);if(!e)return s;for(const i in e){if(!Object.prototype.hasOwnProperty.call(e,i))continue;const o=e[i];o&&"object"==typeof o&&!Array.isArray(o)?s[i]=a(t[i]||{},o):s[i]=o}return s}function h(t){if(!t)return!1;const e=window.getComputedStyle(t);return e&&"none"!==e.display&&"hidden"!==e.visibility}function c(t){const e=String(t||"").trim().split(/\s+/).filter(Boolean);return"button"+(e.length?"."+e.join("."):"")}function d(t,e){if(!t)return!1;return String(e||"").trim().split(/\s+/).filter(Boolean).every(e=>t.classList.contains(e))}let p=0;class f{constructor(t,e,i,o){if(!(t instanceof HTMLTableElement))throw new Error("CollapseTable: target is not a element.");this.table=t,this.options=e,this.emit=i,this._mode=s(o),this._rowKeyMap=new WeakMap,this._rowKeySeq=0,this._unsupportedSpan=!1,this._destroyed=!1,this._insertedControl=!1,this._uid=++p,this._initOnce()}_setMode(t){this._mode=s(t)}_initOnce(){if(function(){if(document.getElementById("ctbl-core-styles"))return;const t=document.createElement("style");t.id="ctbl-core-styles",t.type="text/css",t.appendChild(document.createTextNode("\n .ctbl-hide { display: none; }\n .ctbl-vh { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }\n .ctbl-details-row[hidden] { display: none; }\n .ctbl-control .ctbl-toggle { cursor: pointer; }\n ")),document.head.appendChild(t)}(),this.table.classList.contains(this.options.classNames.root)||this.table.classList.add(this.options.classNames.root),this.table.style.width||(this.table.style.width="100%"),this.table.style.tableLayout||(this.table.style.tableLayout=this.options.tableLayout),this.thead=this.table.tHead,!this.thead||!this.thead.rows.length)throw new Error("CollapseTable: table with at least one is required.");if(this.headerRow=this.thead.rows[0],this.tbodies=Array.from(this.table.tBodies||[]),!this.tbodies.length)throw new Error("CollapseTable: table is required.");this._checkSpans(),this._toggleSelector=c(this.options.classNames.toggle),this._ensureControlColumn(),this.headers=Array.from(this.headerRow.cells),this.ctrlIndex=0,this._buildColumns(),this._mountAllBodies(),this._refit(!0),this._observe()}_checkSpans(){const e=Array.from(this.headerRow.cells).some(t=>1!==t.colSpan||1!==t.rowSpan),s=this.tbodies.some(t=>Array.from(t.rows).some(t=>Array.from(t.cells).some(t=>1!==t.colSpan||1!==t.rowSpan)));(e||s)&&(this._unsupportedSpan=!0,l(this.table,"span-warning",()=>{this._mode===t&&console.warn("CollapseTable: / detected. Responsive collapsing is disabled for this table; base styles still applied.")}))}_getWrapper(){return this.table.parentElement||this.table}_ensureControlColumn(){const t=this.headerRow.cells[0];if(t&&d(t,this.options.classNames.control)){const t=this.headerRow.cells[0];t.setAttribute("aria-hidden","true"),t.setAttribute("scope","col")}else{const t=r("th",this.options.classNames.control);t.setAttribute("aria-hidden","true"),t.setAttribute("scope","col"),this.headerRow.insertBefore(t,this.headerRow.firstChild),this._insertedControl=!0;for(const t of this.tbodies)for(const e of Array.from(t.rows)){const t=r("td",this.options.classNames.control);e.insertBefore(t,e.firstChild)}}}_buildColumns(){const e=Array.from(this.headerRow.cells);e.forEach(t=>t.classList.remove(this.options.classNames.hide));const s=t=>{const e=Number(t.getAttribute(this.options.attrs.min))||0,s=Math.ceil(t.clientWidth||t.offsetWidth||0);return e>0?e:s>0?s:this.options.minWidthDefault},i=[],o=[];for(let t=0;t{if(this._mode!==t)return;const e=o.filter(t=>1===t).length;e>1&&console.warn(`CollapseTable: ${e} columns use data-priority="1" (never hidden). Consider lowering some to 2+ so columns can collapse on smaller widths.`);o.some(t=>Number.isNaN(t)||t<1)&&console.warn("CollapseTable: Some columns have invalid/missing data-priority; default ordering will be used.")}),this.columnsMeta=i,i}_mountAllBodies(){for(const t of this.tbodies)this._mountRowsInBody(t);this._clickHandler=t=>{const e=t.target,s=e&&e.closest&&e.closest(this._toggleSelector);if(!s||!this.table.contains(s))return;t.preventDefault();const i=s.closest("tr");i&&this.toggle(i)},this._keyHandler=t=>{const e=t.target,s=e&&e.closest&&e.closest(this._toggleSelector);if(s&&this.table.contains(s)&&("Enter"===t.key||" "===t.key)){t.preventDefault();const e=s.closest("tr");if(!e)return;this.toggle(e)}},this.table.addEventListener("click",this._clickHandler),this.table.addEventListener("keydown",this._keyHandler)}_mountRowsInBody(t){const e=Array.from(t.rows).filter(t=>!t.classList.contains(this.options.classNames.details));for(const t of e){const e=t.cells[0];if(!e||!d(e,this.options.classNames.control)){const e=r("td",this.options.classNames.control);t.insertBefore(e,t.firstChild)}if(!this._rowKeyMap.has(t)){const e=t.getAttribute("data-ctbl-key")||String(++this._rowKeySeq);this._rowKeyMap.set(t,e)}const s=t.cells[0];if(!s.querySelector(this._toggleSelector)){const e=this._detailsIdForRow(t),i=r("button",this.options.classNames.toggle);i.type="button",i.setAttribute("aria-expanded","false"),i.setAttribute("aria-controls",e),i.setAttribute("title",this.options.strings.toggleTitle),i.setAttribute("aria-label",this.options.strings.toggleTitle),i.innerHTML=this.options.icons.expand+`${this.options.strings.toggleTitle}`,s.appendChild(i)}const i=t.nextElementSibling;if(i&&i.classList&&i.classList.contains(this.options.classNames.details)){const t=i.cells&&i.cells[0];t&&t.colSpan!==this.headerRow.cells.length&&(t.colSpan=this.headerRow.cells.length)}else{const e=r("tr",this.options.classNames.details);e.classList.add("ctbl-details-row"),e.setAttribute("hidden","");const s=document.createElement("td");s.colSpan=this.headerRow.cells.length;const i=r("div",this.options.classNames.detailsInner);i.setAttribute("role","region"),i.setAttribute("aria-live","polite"),s.appendChild(i),e.appendChild(s),e.id=this._detailsIdForRow(t),t.insertAdjacentElement("afterend",e)}}}_observe(){this.wrapper=this._getWrapper();const t="undefined"!=typeof window&&window.ResizeObserver?window.ResizeObserver:null;if(t?(this._resizeObserver=new t(()=>{this._destroyed||i(()=>this._refit())}),this._resizeObserver.observe(this.wrapper),this.wrapper!==this.table&&this._resizeObserver.observe(this.table),this._headerResizeObserver=new t(()=>{this._destroyed||i(()=>this.refresh())}),this._headerResizeObserver.observe(this.headerRow)):(this._onWinResize=function(t,e){let s,i,o,n=0;return function(){const r=Date.now();i=this,o=arguments;const l=e-(r-n);l<=0||l>e?(s&&(clearTimeout(s),s=null),n=r,t.apply(i,o)):s||(s=setTimeout(()=>{n=Date.now(),s=null,t.apply(i,o)},l))}}(()=>{this._destroyed||this._refit()},100),window.addEventListener("resize",this._onWinResize)),this.options.deferWhenHidden&&"undefined"!=typeof window&&"IntersectionObserver"in window){const t=window.IntersectionObserver;this._intersectObserver=new t(t=>{for(const e of t)e.isIntersecting&&this._refit()},{root:null,threshold:.01}),this._intersectObserver.observe(this.table)}const e="undefined"!=typeof window&&(window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver);e&&(this._tbodyObservers=this.tbodies.map(t=>{const s=new e(()=>{this._mountRowsInBody(t),this._refit()});return s.observe(t,{childList:!0,subtree:!1}),s}),this._theadObserver=new e(t=>{let e=!1;for(const s of t)if("childList"===s.type||"attributes"===s.type&&("TH"===s.target.tagName||s.target===this.headerRow)){e=!0;break}e&&(this.headerRow=this.thead.rows[0],this.headers=Array.from(this.headerRow.cells),this._buildColumns(),this._mountAllBodies(),this._refit())}),this._theadObserver.observe(this.thead,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[this.options.attrs.priority,this.options.attrs.min,this.options.attrs.label]}),this._tableObserver=new e(t=>{let s=!1;for(const e of t)if("childList"===e.type){const t=Array.from(e.addedNodes||[]).some(t=>"TBODY"===t.nodeName),i=Array.from(e.removedNodes||[]).some(t=>"TBODY"===t.nodeName);if(t||i){s=!0;break}}s&&(this._tbodyObservers&&this._tbodyObservers.forEach(t=>t.disconnect&&t.disconnect()),this.tbodies=Array.from(this.table.tBodies||[]),this._tbodyObservers=this.tbodies.map(t=>{const s=new e(()=>{this._mountRowsInBody(t),this._refit()});return s.observe(t,{childList:!0,subtree:!1}),s}),this.tbodies.forEach(t=>this._mountRowsInBody(t)),this._refit())}),this._tableObserver.observe(this.table,{childList:!0,subtree:!1}))}_detailsIdForRow(t){const e=this._rowKeyMap.get(t)||"x";return`${this.table.id?this.table.id:`ctbl-${this._uid}`}-row-${e}-details`}_availableWidth(){const t=this.wrapper&&this.wrapper.clientWidth?this.wrapper.clientWidth:this.table&&this.table.clientWidth?this.table.clientWidth:"undefined"!=typeof window?window.innerWidth:0;return!(h(this.wrapper)&&h(this.table))&&this.options.deferWhenHidden?("undefined"!=typeof window?window.innerWidth:1024)||1024:t>0?t:("undefined"!=typeof window?window.innerWidth:1024)||1024}_syncDetailsColspan(){const t=this.headerRow.cells.length;for(const e of this.tbodies)for(const s of Array.from(e.rows)){if(!s.classList.contains(this.options.classNames.details))continue;const e=s.cells&&s.cells[0];e&&e.colSpan!==t&&(e.colSpan=t)}}_applyVisibility(t){for(const e of this.columnsMeta){const s=t.has(e.index);e.th.classList.toggle(this.options.classNames.hide,s)}for(const e of this.tbodies)for(const s of Array.from(e.rows))if(!s.classList.contains(this.options.classNames.details))for(const e of this.columnsMeta){const i=s.cells[e.index];i&&i.classList.toggle(this.options.classNames.hide,t.has(e.index))}this._syncDetailsColspan()}_firstVisibleCellText(t,e){for(const s of this.columnsMeta)if(0!==s.index&&!e.has(s.index)){const e=t.cells[s.index];if(e){const t=(e.textContent||"").trim();if(t)return t}}return""}_renderDetailsForRow(t,e,s){const i=e.querySelector("."+this.options.classNames.detailsInner);if(!i)return;i.innerHTML="";const o=this._firstVisibleCellText(t,s);o?i.setAttribute("aria-label",`Details for ${o}`):i.setAttribute("aria-label","Row details");const n=Array.from(t.cells);if("function"==typeof this.options.detailsRender){const e=this.columnsMeta.filter(t=>s.has(t.index)&&0!==t.index),o=this.options.detailsRender(t,e,n);if(o instanceof Node)return void i.appendChild(o);if("string"==typeof o)return void(i.innerHTML=o)}for(const t of this.columnsMeta){if(0===t.index)continue;if(!s.has(t.index))continue;const e=(t.th.getAttribute(this.options.attrs.label)||t.th.textContent||"").trim(),o=r("div",this.options.classNames.detail),l=r("span",this.options.classNames.name),a=r("span",this.options.classNames.value);l.textContent=e?e+": ":"",a.innerHTML=n[t.index]?.innerHTML??"",o.appendChild(l),o.appendChild(a),i.appendChild(o)}}_updateTogglesVisibility(t,e){const s=!t,i=this.headerRow&&this.headerRow.cells&&this.headerRow.cells[0];i&&i.classList.toggle(this.options.classNames.hide,s);for(const i of this.tbodies){const o=Array.from(i.rows).filter(t=>!t.classList.contains(this.options.classNames.details));for(const i of o){const o=i.cells&&i.cells[0];o&&o.classList.toggle(this.options.classNames.hide,s);const n=i.querySelector(this._toggleSelector);if(!n)continue;n.style.visibility=t?"visible":"hidden";const r=this.columnsMeta.filter(t=>e.has(t.index)&&0!==t.index).length,l=this.options.strings.toggleTitle;n.setAttribute("aria-label",t?`${l} (${r} hidden)`:l);const a=i.nextElementSibling,h="true"===n.getAttribute("aria-expanded");a&&a.classList.contains(this.options.classNames.details)&&!a.hidden&&h&&this._renderDetailsForRow(i,a,e)}}}_refit(t=!1){if(this._unsupportedSpan)return;const e=this._availableWidth(),s=function(t,e){const s=t.map(t=>({index:t.index,min:t.min,priority:t.priority,lock:!!t.lock,hidden:!1})),i=()=>s.filter(t=>!t.hidden).reduce((t,e)=>t+e.min,0);let o=200;for(;i()>e&&o-- >0;){const t=s.filter(t=>!t.hidden&&!t.lock&&0!==t.index).sort((t,e)=>e.priority-t.priority||e.min-t.min)[0];if(!t)break;t.hidden=!0}o=200;let n=!0;for(;n&&o-- >0;){n=!1;const t=s.filter(t=>t.hidden).sort((t,e)=>t.priority-e.priority||t.min-e.min);for(const s of t)s.hidden=!1,i()<=e?n=!0:s.hidden=!0}return new Set(s.filter(t=>t.hidden).map(t=>t.index))}(this.columnsMeta.map(t=>({index:t.index,min:t.min,priority:t.priority,lock:0===t.index||1===t.priority})),e);this._applyVisibility(s);const i=Array.from(s).some(t=>0!==t);this._updateTogglesVisibility(i,s),this.emit("refit",{table:this.table,initial:t,anyHidden:i})}toggle(t){if(!t||t.classList.contains(this.options.classNames.details))return;const e=t.querySelector(this._toggleSelector),s=t.nextElementSibling;if(!e||!s||!s.classList.contains(this.options.classNames.details))return;const i="true"===e.getAttribute("aria-expanded");if(i)e.setAttribute("aria-expanded","false"),e.innerHTML=this.options.icons.expand+`${this.options.strings.show}`,s.hidden=!0,this.emit("collapse",{table:this.table,row:t});else{e.setAttribute("aria-expanded","true"),e.innerHTML=this.options.icons.collapse+`${this.options.strings.hide}`;const i=new Set(this.columnsMeta.filter(t=>t.th.classList.contains(this.options.classNames.hide)).map(t=>t.index));this._renderDetailsForRow(t,s,i),s.hidden=!1,this.emit("expand",{table:this.table,row:t})}this.emit("toggle",{table:this.table,row:t,expanded:!i})}expandAll(){if(this.columnsMeta.some(t=>0!==t.index&&t.th.classList.contains(this.options.classNames.hide)))for(const t of this.tbodies){const e=Array.from(t.rows).filter(t=>!t.classList.contains(this.options.classNames.details));for(const t of e){const e=t.querySelector(this._toggleSelector);e&&("true"!==e.getAttribute("aria-expanded")&&this.toggle(t))}}}collapseAll(){for(const t of this.tbodies){const e=Array.from(t.rows).filter(t=>!t.classList.contains(this.options.classNames.details));for(const t of e){const e=t.querySelector(this._toggleSelector);e&&("true"===e.getAttribute("aria-expanded")&&this.toggle(t))}}}expandRow(t){const e=this._resolveDataRow(t);if(!e)return;const s=e.querySelector(this._toggleSelector);s&&"true"!==s.getAttribute("aria-expanded")&&this.toggle(e)}collapseRow(t){const e=this._resolveDataRow(t);if(!e)return;const s=e.querySelector(this._toggleSelector);s&&"true"===s.getAttribute("aria-expanded")&&this.toggle(e)}_resolveDataRow(t){if(t instanceof HTMLTableRowElement)return t;const e=Number(t);if(!Number.isFinite(e))return null;return this.tbodies.flatMap(t=>Array.from(t.rows).filter(t=>!t.classList.contains(this.options.classNames.details)))[e]||null}refresh(){this.columnsMeta.forEach((t,e)=>{if(0===e)return void(t.min=this.options.controlWidth);const s=Number(t.th.getAttribute(this.options.attrs.min))||0,i=Math.ceil(t.th.clientWidth||t.th.offsetWidth||0);t.min=s>0?s:i>0?i:this.options.minWidthDefault}),this._syncDetailsColspan(),this._refit()}destroy(){this._destroyed=!0,this._resizeObserver&&this._resizeObserver.disconnect&&this._resizeObserver.disconnect(),this._headerResizeObserver&&this._headerResizeObserver.disconnect&&this._headerResizeObserver.disconnect(),this._intersectObserver&&this._intersectObserver.disconnect&&this._intersectObserver.disconnect(),this._tbodyObservers&&this._tbodyObservers.forEach(t=>t.disconnect&&t.disconnect()),this._theadObserver&&this._theadObserver.disconnect&&this._theadObserver.disconnect(),this._tableObserver&&this._tableObserver.disconnect&&this._tableObserver.disconnect(),this._clickHandler&&this.table.removeEventListener("click",this._clickHandler),this._keyHandler&&this.table.removeEventListener("keydown",this._keyHandler),this._onWinResize&&window.removeEventListener("resize",this._onWinResize);for(const t of this.columnsMeta)t.th.classList.remove(this.options.classNames.hide);for(const t of this.tbodies)for(const e of Array.from(t.rows))if(!e.classList.contains(this.options.classNames.details))for(const t of this.columnsMeta){const s=e.cells[t.index];s&&s.classList.remove(this.options.classNames.hide)}for(const t of this.tbodies)for(const e of Array.from(t.rows))e.classList.contains(this.options.classNames.details)&&e.remove();if(this.table.querySelectorAll(this._toggleSelector).forEach(t=>t.remove()),this._insertedControl){this.headerRow&&this.headerRow.cells&&this.headerRow.cells[0]&&this.headerRow.deleteCell(0);for(const t of this.tbodies)for(const e of Array.from(t.rows))e.classList.contains(this.options.classNames.details)||e.cells&&e.cells.length&&e.deleteCell(0)}this.emit("destroy",{table:this.table})}}return class{constructor(t={}){this.defaults={controlWidth:46,minWidthDefault:140,tableLayout:"auto",deferWhenHidden:!0,attrs:{priority:"data-priority",min:"data-min",label:"data-label"},classNames:{root:"ctbl",control:"ctbl-control",toggle:"ctbl-toggle",details:"ctbl-details",detailsInner:"ctbl-details-inner",detail:"ctbl-detail",name:"ctbl-name",value:"ctbl-value",hide:"ctbl-hide"},icons:{expand:"+",collapse:"โˆ’"},strings:{toggleTitle:"Show more",show:"Show details",hide:"Hide details"},detailsRender:void 0,mode:e},this.options=a(this.defaults,t),this._mode=s(this.options.mode),this._tables=new Map,this._events={}}getMode(){return this._mode}setMode(t){const e=s(t);return this._mode=e,this.options.mode=e,this._tables.forEach(t=>t._setMode(e)),e}set(t,e={}){const s=o(t);if(!s)throw new Error("CollapseTable.set: target not found.");if(!(s instanceof HTMLTableElement))throw new Error("CollapseTable.set: target must be a
element or its id.");if(this._tables.has(s)){const t=this._tables.get(s);return t.options=a(this.options,e),t._toggleSelector=c(t.options.classNames.toggle),t.table.style.tableLayout&&t.table.style.tableLayout===t.options.tableLayout||(t.table.style.tableLayout=t.options.tableLayout),t._setMode(this._mode),t.refresh(),t}const i=a(this.options,e),n=new f(s,i,this._emit.bind(this),this._mode);return this._tables.set(s,n),n}setAll(t,e={}){return n(t).filter(t=>t instanceof HTMLTableElement).map(t=>this.set(t,e))}unset(t){const e=o(t);if(!e)return;const s=this._tables.get(e);s&&(s.destroy(),this._tables.delete(e))}unsetAll(t){const e=n(t).filter(t=>t instanceof HTMLTableElement);for(const t of e)this.unset(t)}refresh(t){if(!t)return void this._tables.forEach(t=>t.refresh());const e=o(t);if(!e)return;const s=this._tables.get(e);s&&s.refresh()}expandAll(t){if(t){const e=o(t),s=this._tables.get(e);s&&s.expandAll()}else this._tables.forEach(t=>t.expandAll())}collapseAll(t){if(t){const e=o(t),s=this._tables.get(e);s&&s.collapseAll()}else this._tables.forEach(t=>t.collapseAll())}expandRow(t,e){const s=o(t),i=s&&this._tables.get(s);i&&i.expandRow(e)}collapseRow(t,e){const s=o(t),i=s&&this._tables.get(s);i&&i.collapseRow(e)}getOptions(){return a({},this.options)}updateOptions(t){if(t&&void 0!==t.mode){this.setMode(t.mode);const{mode:e,...s}=t;t=s}this.options=a(this.options,t),this._tables.forEach(e=>{e.options=a(e.options,t),t&&t.classNames&&"string"==typeof t.classNames.toggle&&(e._toggleSelector=c(e.options.classNames.toggle)),t&&void 0!==t.tableLayout&&(e.table.style.tableLayout=e.options.tableLayout),e.refresh()})}on(t,e){this._events[t]||(this._events[t]=new Set),this._events[t].add(e)}off(t,e){this._events[t]&&this._events[t].delete(e)}_emit(t,e){if(this._events[t])for(const s of this._events[t])try{s(e)}catch(t){}}static get version(){return"1.2.0"}}}); +!function(t,e){"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():t.CollapseTable=e()}("undefined"!=typeof self?self:this,function(){"use strict";const t="development",e="production";function s(s){return s===t?t:e}const i=t=>"undefined"!=typeof window&&window.requestAnimationFrame?window.requestAnimationFrame(t):setTimeout(t,16);function o(t){return t?"string"==typeof t?t.startsWith("#")?document.getElementById(t.slice(1)):document.getElementById(t)||document.querySelector(t):t&&1===t.nodeType?t:null:null}function n(t){return t?"string"==typeof t?Array.from(document.querySelectorAll(t)):t instanceof Element?[t]:t instanceof NodeList||t instanceof HTMLCollection?Array.from(t):Array.isArray(t)?t.filter(t=>t instanceof Element):[]:[]}function r(t,e){const s=document.createElement(t);return e&&(s.className=e),s}function l(t,e,s){const i=l._store||(l._store=new WeakMap);let o=i.get(t);o||(o=new Set,i.set(t,o)),o.has(e)||(o.add(e),s())}function a(t,e){const s=Object.assign({},t);if(!e)return s;for(const i in e){if(!Object.prototype.hasOwnProperty.call(e,i))continue;const o=e[i];o&&"object"==typeof o&&!Array.isArray(o)?s[i]=a(t[i]||{},o):s[i]=o}return s}function c(t){if(!t)return!1;const e=window.getComputedStyle(t);return e&&"none"!==e.display&&"hidden"!==e.visibility}function h(t){const e=String(t||"").trim().split(/\s+/).filter(Boolean);return"button"+(e.length?"."+e.join("."):"")}function d(t,e){if(!t)return!1;return String(e||"").trim().split(/\s+/).filter(Boolean).every(e=>t.classList.contains(e))}function f(t,e){const s=t&&t.attrs?t.attrs:{},i=e&&e.attrs?e.attrs:{},o=t&&t.classNames?t.classNames:{},n=e&&e.classNames?e.classNames:{};return s.priority!==i.priority||s.min!==i.min||s.label!==i.label||o.control!==n.control||o.details!==n.details||o.detailsInner!==n.detailsInner||o.detail!==n.detail||o.name!==n.name||o.value!==n.value||o.hide!==n.hide||o.toggle!==n.toggle||t.controlWidth!==e.controlWidth||t.minWidthDefault!==e.minWidthDefault||t.detailsRender!==e.detailsRender}function p(t,e,s){if(!t)return;const i=String(e||"").trim().split(/\s+/).filter(Boolean),o=String(s||"").trim().split(/\s+/).filter(Boolean);i.forEach(e=>t.classList.remove(e)),o.forEach(e=>t.classList.add(e))}let u=0;class b{constructor(t,e,i,o){if(!(t instanceof HTMLTableElement))throw new Error("CollapseTable: target is not a
element.");this.table=t,this.options=e,this.emit=i,this._mode=s(o),this._rowKeyMap=new WeakMap,this._rowKeySeq=0,this._unsupportedSpan=!1,this._destroyed=!1,this._insertedControl=!1,this._insertedHeaderControls=new WeakSet,this._uid=++u,this._initOnce()}_setMode(t){this._mode=s(t)}_initOnce(){if(function(){if(document.getElementById("ctbl-core-styles"))return;const t=document.createElement("style");t.id="ctbl-core-styles",t.type="text/css",t.appendChild(document.createTextNode("\n .ctbl-hide { display: none; }\n .ctbl-vh { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }\n .ctbl-details-row[hidden] { display: none; }\n .ctbl-control .ctbl-toggle { cursor: pointer; }\n ")),document.head.appendChild(t)}(),this.table.classList.contains(this.options.classNames.root)||this.table.classList.add(this.options.classNames.root),this.table.style.width||(this.table.style.width="100%"),this.table.style.tableLayout||(this.table.style.tableLayout=this.options.tableLayout),this.thead=this.table.tHead,!this.thead||!this.thead.rows.length)throw new Error("CollapseTable: table with at least one is required.");if(this.headerRow=this.thead.rows[0],this.headerRows=Array.from(this.thead.rows),this.tbodies=Array.from(this.table.tBodies||[]),!this.tbodies.length)throw new Error("CollapseTable: table is required.");this._checkSpans(),this._toggleSelector=h(this.options.classNames.toggle),this._ensureControlColumn(),this.headers=Array.from(this.headerRow.cells),this.ctrlIndex=0,this._buildColumns(),this._mountAllBodies(),this._refit(!0),this._observe()}_checkSpans(){const e=this.headerRows.some(t=>Array.from(t.cells).some(t=>1!==t.colSpan||1!==t.rowSpan)),s=this.tbodies.some(t=>Array.from(t.rows).some(t=>Array.from(t.cells).some(t=>1!==t.colSpan||1!==t.rowSpan)));(e||s)&&(this._unsupportedSpan=!0,l(this.table,"span-warning",()=>{this._mode===t&&console.warn("CollapseTable: / detected. Responsive collapsing is disabled for this table; base styles still applied.")}))}_getWrapper(){return this.table.parentElement||this.table}_ensureControlColumn(){for(const t of this.headerRows){const e=t.cells[0];if(e&&d(e,this.options.classNames.control)){const e=t.cells[0];e.setAttribute("aria-hidden","true"),e.setAttribute("scope","col")}else{const e=r("th",this.options.classNames.control);e.setAttribute("aria-hidden","true"),e.setAttribute("scope","col"),t.insertBefore(e,t.firstChild),this._insertedControl=!0,this._insertedHeaderControls.add(t)}}for(const t of this.tbodies)for(const e of Array.from(t.rows)){if(e.classList.contains(this.options.classNames.details))continue;const t=e.cells[0];if(!(t&&d(t,this.options.classNames.control))){const t=r("td",this.options.classNames.control);e.insertBefore(t,e.firstChild)}}}_buildColumns(){const e=Array.from(this.headerRow.cells);e.forEach(t=>t.classList.remove(this.options.classNames.hide));const s=t=>{const e=Number(t.getAttribute(this.options.attrs.min))||0,s=Math.ceil(t.clientWidth||t.offsetWidth||0);return e>0?e:s>0?s:this.options.minWidthDefault},i=[],o=[];for(let t=0;t{if(this._mode!==t)return;const e=o.filter(t=>1===t).length;e>1&&console.warn(`CollapseTable: ${e} columns use data-priority="1" (never hidden). Consider lowering some to 2+ so columns can collapse on smaller widths.`);o.some(t=>Number.isNaN(t)||t<1)&&console.warn("CollapseTable: Some columns have invalid/missing data-priority; default ordering will be used.")}),this.columnsMeta=i,i}_mountAllBodies(){for(const t of this.tbodies)this._mountRowsInBody(t);this._clickHandler||(this._clickHandler=t=>{const e=t.target,s=e&&e.closest&&e.closest(this._toggleSelector);if(!s||!this.table.contains(s))return;t.preventDefault();const i=s.closest("tr");i&&this.toggle(i)},this.table.addEventListener("click",this._clickHandler)),this._keyHandler||(this._keyHandler=t=>{const e=t.target,s=e&&e.closest&&e.closest(this._toggleSelector);if(s&&this.table.contains(s)&&("Enter"===t.key||" "===t.key)){t.preventDefault();const e=s.closest("tr");if(!e)return;this.toggle(e)}},this.table.addEventListener("keydown",this._keyHandler))}_mountRowsInBody(t){const e=Array.from(t.rows).filter(t=>!t.classList.contains(this.options.classNames.details));for(const t of e){const e=t.cells[0];if(!e||!d(e,this.options.classNames.control)){const e=r("td",this.options.classNames.control);t.insertBefore(e,t.firstChild)}if(!this._rowKeyMap.has(t)){const e=t.getAttribute("data-ctbl-key")||String(++this._rowKeySeq);this._rowKeyMap.set(t,e)}const s=t.cells[0];if(!s.querySelector(this._toggleSelector)){const e=this._detailsIdForRow(t),i=r("button",this.options.classNames.toggle);i.type="button",i.setAttribute("aria-expanded","false"),i.setAttribute("aria-controls",e),i.setAttribute("title",this.options.strings.toggleTitle),i.setAttribute("aria-label",this.options.strings.toggleTitle),i.innerHTML=this.options.icons.expand+`${this.options.strings.toggleTitle}`,s.appendChild(i)}const i=t.nextElementSibling;if(i&&i.classList&&i.classList.contains(this.options.classNames.details)){const t=i.cells&&i.cells[0];t&&t.colSpan!==this.headerRow.cells.length&&(t.colSpan=this.headerRow.cells.length)}else{const e=r("tr",this.options.classNames.details);e.classList.add("ctbl-details-row"),e.setAttribute("hidden","");const s=document.createElement("td");s.colSpan=this.headerRow.cells.length;const i=r("div",this.options.classNames.detailsInner);i.setAttribute("role","region"),i.setAttribute("aria-live","polite"),s.appendChild(i),e.appendChild(s),e.id=this._detailsIdForRow(t),t.insertAdjacentElement("afterend",e)}}}_observe(){this.wrapper=this._getWrapper();const t="undefined"!=typeof window&&window.ResizeObserver?window.ResizeObserver:null;if(t?(this._resizeObserver=new t(()=>{this._destroyed||i(()=>this._refit())}),this._resizeObserver.observe(this.wrapper),this.wrapper!==this.table&&this._resizeObserver.observe(this.table),this._headerResizeObserver=new t(()=>{this._destroyed||i(()=>this.refresh())}),this._headerResizeObserver.observe(this.headerRow)):(this._onWinResize=function(t,e){let s,i,o,n=0;return function(){const r=Date.now();i=this,o=arguments;const l=e-(r-n);l<=0||l>e?(s&&(clearTimeout(s),s=null),n=r,t.apply(i,o)):s||(s=setTimeout(()=>{n=Date.now(),s=null,t.apply(i,o)},l))}}(()=>{this._destroyed||this._refit()},100),window.addEventListener("resize",this._onWinResize)),this.options.deferWhenHidden&&"undefined"!=typeof window&&"IntersectionObserver"in window){const t=window.IntersectionObserver;this._intersectObserver=new t(t=>{for(const e of t)e.isIntersecting&&this._refit()},{root:null,threshold:.01}),this._intersectObserver.observe(this.table)}const e="undefined"!=typeof window&&(window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver);e&&(this._tbodyObservers=this.tbodies.map(t=>{const s=new e(()=>{this._mountRowsInBody(t),this._refit()});return s.observe(t,{childList:!0,subtree:!1}),s}),this._theadObserver=new e(t=>{let e=!1;for(const s of t)if("childList"===s.type||"attributes"===s.type&&("TH"===s.target.tagName||s.target===this.headerRow)){e=!0;break}e&&(this.headerRow=this.thead.rows[0],this.headerRows=Array.from(this.thead.rows),this._ensureControlColumn(),this.headers=Array.from(this.headerRow.cells),this._buildColumns(),this._mountAllBodies(),this._refit())}),this._theadObserver.observe(this.thead,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[this.options.attrs.priority,this.options.attrs.min,this.options.attrs.label]}),this._tableObserver=new e(t=>{let s=!1;for(const e of t)if("childList"===e.type){const t=Array.from(e.addedNodes||[]).some(t=>"TBODY"===t.nodeName),i=Array.from(e.removedNodes||[]).some(t=>"TBODY"===t.nodeName);if(t||i){s=!0;break}}s&&(this._tbodyObservers&&this._tbodyObservers.forEach(t=>t.disconnect&&t.disconnect()),this.tbodies=Array.from(this.table.tBodies||[]),this._tbodyObservers=this.tbodies.map(t=>{const s=new e(()=>{this._mountRowsInBody(t),this._refit()});return s.observe(t,{childList:!0,subtree:!1}),s}),this.tbodies.forEach(t=>this._mountRowsInBody(t)),this._refit())}),this._tableObserver.observe(this.table,{childList:!0,subtree:!1}))}_detailsIdForRow(t){const e=this._rowKeyMap.get(t)||"x";return`${this.table.id?this.table.id:`ctbl-${this._uid}`}-row-${e}-details`}_availableWidth(){const t=this.wrapper&&this.wrapper.clientWidth?this.wrapper.clientWidth:this.table&&this.table.clientWidth?this.table.clientWidth:"undefined"!=typeof window?window.innerWidth:0;return!(c(this.wrapper)&&c(this.table))&&this.options.deferWhenHidden?("undefined"!=typeof window?window.innerWidth:1024)||1024:t>0?t:("undefined"!=typeof window?window.innerWidth:1024)||1024}_syncDetailsColspan(){const t=this.headerRow.cells.length;for(const e of this.tbodies)for(const s of Array.from(e.rows)){if(!s.classList.contains(this.options.classNames.details))continue;const e=s.cells&&s.cells[0];e&&e.colSpan!==t&&(e.colSpan=t)}}_applyVisibility(t){for(const e of this.headerRows)for(const s of this.columnsMeta){const i=e.cells[s.index];i&&i.classList.toggle(this.options.classNames.hide,t.has(s.index))}for(const e of this.tbodies)for(const s of Array.from(e.rows))if(!s.classList.contains(this.options.classNames.details))for(const e of this.columnsMeta){const i=s.cells[e.index];i&&i.classList.toggle(this.options.classNames.hide,t.has(e.index))}this._syncDetailsColspan()}_firstVisibleCellText(t,e){for(const s of this.columnsMeta)if(0!==s.index&&!e.has(s.index)){const e=t.cells[s.index];if(e){const t=(e.textContent||"").trim();if(t)return t}}return""}_renderDetailsForRow(t,e,s){const i=e.querySelector("."+this.options.classNames.detailsInner);if(!i)return;i.innerHTML="";const o=this._firstVisibleCellText(t,s);o?i.setAttribute("aria-label",`Details for ${o}`):i.setAttribute("aria-label","Row details");const n=Array.from(t.cells);if("function"==typeof this.options.detailsRender){const e=this.columnsMeta.filter(t=>s.has(t.index)&&0!==t.index),o=this.options.detailsRender(t,e,n);if(o instanceof Node)return void i.appendChild(o);if("string"==typeof o)return void(i.innerHTML=o)}for(const t of this.columnsMeta){if(0===t.index)continue;if(!s.has(t.index))continue;const e=(t.th.getAttribute(this.options.attrs.label)||t.th.textContent||"").trim(),o=r("div",this.options.classNames.detail),l=r("span",this.options.classNames.name),a=r("span",this.options.classNames.value);l.textContent=e?e+": ":"",a.innerHTML=n[t.index]?.innerHTML??"",o.appendChild(l),o.appendChild(a),i.appendChild(o)}}_updateTogglesVisibility(t,e){const s=!t,i=this.headerRow&&this.headerRow.cells&&this.headerRow.cells[0];i&&i.classList.toggle(this.options.classNames.hide,s);for(const i of this.tbodies){const o=Array.from(i.rows).filter(t=>!t.classList.contains(this.options.classNames.details));for(const i of o){const o=i.cells&&i.cells[0];o&&o.classList.toggle(this.options.classNames.hide,s);const n=i.querySelector(this._toggleSelector);if(!n)continue;n.style.visibility=t?"visible":"hidden";const r=this.columnsMeta.filter(t=>e.has(t.index)&&0!==t.index).length,l=this.options.strings.toggleTitle;n.setAttribute("aria-label",t?`${l} (${r} hidden)`:l);const a=i.nextElementSibling,c="true"===n.getAttribute("aria-expanded");a&&a.classList.contains(this.options.classNames.details)&&!a.hidden&&c&&this._renderDetailsForRow(i,a,e)}}}_refit(t=!1){if(this._unsupportedSpan)return;const e=this._availableWidth(),s=function(t,e){const s=t.map(t=>({index:t.index,min:t.min,priority:t.priority,lock:!!t.lock,hidden:!1})),i=()=>s.filter(t=>!t.hidden).reduce((t,e)=>t+e.min,0);let o=200;for(;i()>e&&o-- >0;){const t=s.filter(t=>!t.hidden&&!t.lock&&0!==t.index).sort((t,e)=>e.priority-t.priority||e.min-t.min)[0];if(!t)break;t.hidden=!0}o=200;let n=!0;for(;n&&o-- >0;){n=!1;const t=s.filter(t=>t.hidden).sort((t,e)=>t.priority-e.priority||t.min-e.min);for(const s of t)s.hidden=!1,i()<=e?n=!0:s.hidden=!0}return new Set(s.filter(t=>t.hidden).map(t=>t.index))}(this.columnsMeta.map(t=>({index:t.index,min:t.min,priority:t.priority,lock:0===t.index||1===t.priority})),e);this._applyVisibility(s);const i=Array.from(s).some(t=>0!==t);this._updateTogglesVisibility(i,s),this.emit("refit",{table:this.table,initial:t,anyHidden:i})}toggle(t){if(!t||t.classList.contains(this.options.classNames.details))return;const e=t.querySelector(this._toggleSelector),s=t.nextElementSibling;if(!e||!s||!s.classList.contains(this.options.classNames.details))return;const i="true"===e.getAttribute("aria-expanded");if(i)e.setAttribute("aria-expanded","false"),e.innerHTML=this.options.icons.expand+`${this.options.strings.show}`,s.hidden=!0,this.emit("collapse",{table:this.table,row:t});else{e.setAttribute("aria-expanded","true"),e.innerHTML=this.options.icons.collapse+`${this.options.strings.hide}`;const i=new Set(this.columnsMeta.filter(t=>t.th.classList.contains(this.options.classNames.hide)).map(t=>t.index));this._renderDetailsForRow(t,s,i),s.hidden=!1,this.emit("expand",{table:this.table,row:t})}this.emit("toggle",{table:this.table,row:t,expanded:!i})}expandAll(){if(this.columnsMeta.some(t=>0!==t.index&&t.th.classList.contains(this.options.classNames.hide)))for(const t of this.tbodies){const e=Array.from(t.rows).filter(t=>!t.classList.contains(this.options.classNames.details));for(const t of e){const e=t.querySelector(this._toggleSelector);e&&("true"!==e.getAttribute("aria-expanded")&&this.toggle(t))}}}collapseAll(){for(const t of this.tbodies){const e=Array.from(t.rows).filter(t=>!t.classList.contains(this.options.classNames.details));for(const t of e){const e=t.querySelector(this._toggleSelector);e&&("true"===e.getAttribute("aria-expanded")&&this.toggle(t))}}}expandRow(t){const e=this._resolveDataRow(t);if(!e)return;const s=e.querySelector(this._toggleSelector);s&&"true"!==s.getAttribute("aria-expanded")&&this.toggle(e)}collapseRow(t){const e=this._resolveDataRow(t);if(!e)return;const s=e.querySelector(this._toggleSelector);s&&"true"===s.getAttribute("aria-expanded")&&this.toggle(e)}_resolveDataRow(t){if(t instanceof HTMLTableRowElement)return t;const e=Number(t);if(!Number.isFinite(e))return null;return this.tbodies.flatMap(t=>Array.from(t.rows).filter(t=>!t.classList.contains(this.options.classNames.details)))[e]||null}refresh(){this.columnsMeta.forEach((t,e)=>{if(0===e)return void(t.min=this.options.controlWidth);const s=Number(t.th.getAttribute(this.options.attrs.min))||0,i=Math.ceil(t.th.clientWidth||t.th.offsetWidth||0);t.min=s>0?s:i>0?i:this.options.minWidthDefault}),this._syncDetailsColspan(),this._refit()}_migrateStructureClasses(t,e){if(!t||!e)return;const s=t.classNames&&t.classNames.details,i=e.classNames&&e.classNames.details,o=t.classNames&&t.classNames.detailsInner,n=e.classNames&&e.classNames.detailsInner,r=t.classNames&&t.classNames.control,l=e.classNames&&e.classNames.control,a=t.classNames&&t.classNames.toggle,c=e.classNames&&e.classNames.toggle;for(const t of this.headerRows||[])t&&t.cells&&t.cells[0]&&p(t.cells[0],r,l);for(const t of this.tbodies)for(const e of Array.from(t.rows)){if(e.classList.contains(s)&&(e.classList.remove(s),e.classList.add(i)),e.classList.contains(i)){Array.from(e.querySelectorAll("."+o)).forEach(t=>p(t,o,n));continue}e.cells&&e.cells[0]&&p(e.cells[0],r,l);const t=e.cells&&e.cells[0];if(!t)continue;const h=Array.from(t.querySelectorAll("button"));h.length>1&&h.slice(1).forEach(t=>t.remove()),h[0]&&p(h[0],a,c)}}_reconfigure(t,e=!1){const s=this.options;if(this.options=t,this._toggleSelector=h(this.options.classNames.toggle),this.table.style.tableLayout&&this.table.style.tableLayout===this.options.tableLayout||(this.table.style.tableLayout=this.options.tableLayout),e){this.headerRow=this.thead&&this.thead.rows?this.thead.rows[0]:this.headerRow,this.headerRows=this.thead&&this.thead.rows?Array.from(this.thead.rows):this.headerRows,this._migrateStructureClasses(s,t),this._ensureControlColumn(),this.headers=Array.from(this.headerRow.cells),this._buildColumns();for(const t of this.tbodies)this._mountRowsInBody(t)}this.refresh()}destroy(){this._destroyed=!0,this._resizeObserver&&this._resizeObserver.disconnect&&this._resizeObserver.disconnect(),this._headerResizeObserver&&this._headerResizeObserver.disconnect&&this._headerResizeObserver.disconnect(),this._intersectObserver&&this._intersectObserver.disconnect&&this._intersectObserver.disconnect(),this._tbodyObservers&&this._tbodyObservers.forEach(t=>t.disconnect&&t.disconnect()),this._theadObserver&&this._theadObserver.disconnect&&this._theadObserver.disconnect(),this._tableObserver&&this._tableObserver.disconnect&&this._tableObserver.disconnect(),this._clickHandler&&this.table.removeEventListener("click",this._clickHandler),this._keyHandler&&this.table.removeEventListener("keydown",this._keyHandler),this._onWinResize&&window.removeEventListener("resize",this._onWinResize);for(const t of this.headerRows)for(const e of Array.from(t.cells))e.classList.remove(this.options.classNames.hide);for(const t of this.tbodies)for(const e of Array.from(t.rows))if(!e.classList.contains(this.options.classNames.details))for(const t of this.columnsMeta){const s=e.cells[t.index];s&&s.classList.remove(this.options.classNames.hide)}for(const t of this.tbodies)for(const e of Array.from(t.rows))e.classList.contains(this.options.classNames.details)&&e.remove();if(this.table.querySelectorAll(this._toggleSelector).forEach(t=>t.remove()),this._insertedControl){for(const t of this.headerRows)this._insertedHeaderControls.has(t)&&t&&t.cells&&t.cells[0]&&t.deleteCell(0);for(const t of this.tbodies)for(const e of Array.from(t.rows))e.classList.contains(this.options.classNames.details)||e.cells&&e.cells.length&&e.deleteCell(0)}this.emit("destroy",{table:this.table})}}return class{constructor(t={}){this.defaults={controlWidth:46,minWidthDefault:140,tableLayout:"auto",deferWhenHidden:!0,attrs:{priority:"data-priority",min:"data-min",label:"data-label"},classNames:{root:"ctbl",control:"ctbl-control",toggle:"ctbl-toggle",details:"ctbl-details",detailsInner:"ctbl-details-inner",detail:"ctbl-detail",name:"ctbl-name",value:"ctbl-value",hide:"ctbl-hide"},icons:{expand:"+",collapse:"โˆ’"},strings:{toggleTitle:"Show more",show:"Show details",hide:"Hide details"},detailsRender:void 0,mode:e},this.options=a(this.defaults,t),this._mode=s(this.options.mode),this._tables=new Map,this._events={}}getMode(){return this._mode}setMode(t){const e=s(t);return this._mode=e,this.options.mode=e,this._tables.forEach(t=>t._setMode(e)),e}set(t,e={}){const s=o(t);if(!s)throw new Error("CollapseTable.set: target not found.");if(!(s instanceof HTMLTableElement))throw new Error("CollapseTable.set: target must be a
element or its id.");if(this._tables.has(s)){const t=this._tables.get(s),i=a(this.options,e),o=f(t.options,i);return t._setMode(this._mode),t._reconfigure(i,o),t}const i=a(this.options,e),n=new b(s,i,this._emit.bind(this),this._mode);return this._tables.set(s,n),n}setAll(t,e={}){return n(t).filter(t=>t instanceof HTMLTableElement).map(t=>this.set(t,e))}unset(t){const e=o(t);if(!e)return;const s=this._tables.get(e);s&&(s.destroy(),this._tables.delete(e))}unsetAll(t){const e=n(t).filter(t=>t instanceof HTMLTableElement);for(const t of e)this.unset(t)}refresh(t){if(!t)return void this._tables.forEach(t=>t.refresh());const e=o(t);if(!e)return;const s=this._tables.get(e);s&&s.refresh()}expandAll(t){if(t){const e=o(t),s=this._tables.get(e);s&&s.expandAll()}else this._tables.forEach(t=>t.expandAll())}collapseAll(t){if(t){const e=o(t),s=this._tables.get(e);s&&s.collapseAll()}else this._tables.forEach(t=>t.collapseAll())}expandRow(t,e){const s=o(t),i=s&&this._tables.get(s);i&&i.expandRow(e)}collapseRow(t,e){const s=o(t),i=s&&this._tables.get(s);i&&i.collapseRow(e)}getOptions(){return a({},this.options)}updateOptions(t){if(t&&void 0!==t.mode){this.setMode(t.mode);const{mode:e,...s}=t;t=s}this.options=a(this.options,t),this._tables.forEach(e=>{const s=a(e.options,t),i=f(e.options,s);e._reconfigure(s,i)})}on(t,e){this._events[t]||(this._events[t]=new Set),this._events[t].add(e)}off(t,e){this._events[t]&&this._events[t].delete(e)}_emit(t,e){if(this._events[t])for(const s of this._events[t])try{s(e)}catch(t){}}static get version(){return"1.2.0"}}}); //# sourceMappingURL=collapsetable.min.js.map \ No newline at end of file diff --git a/dist/collapsetable.min.js.map b/dist/collapsetable.min.js.map index 97fdf6a..9b455e4 100644 --- a/dist/collapsetable.min.js.map +++ b/dist/collapsetable.min.js.map @@ -1 +1 @@ -{"version":3,"names":["root","factory","define","amd","module","exports","CollapseTable","self","this","CTBL_MODE_DEV","CTBL_MODE_PROD","normalizeMode","mode","raf","fn","window","requestAnimationFrame","setTimeout","toElement","target","startsWith","document","getElementById","slice","querySelector","nodeType","normalizeElements","input","Array","from","querySelectorAll","Element","NodeList","HTMLCollection","isArray","filter","n","createEl","tag","cls","el","createElement","className","oncePerTable","table","key","s","_store","WeakMap","set","get","Set","has","add","merge","base","extra","out","Object","assign","k","prototype","hasOwnProperty","call","v","isVisible","style","getComputedStyle","display","visibility","buildButtonClassSelector","classString","parts","String","trim","split","Boolean","length","join","hasAllClasses","every","c","classList","contains","__CTBL_TABLE_SEQ","TableController","constructor","options","emit","HTMLTableElement","Error","_mode","_rowKeyMap","_rowKeySeq","_unsupportedSpan","_destroyed","_insertedControl","_uid","_initOnce","_setMode","id","type","appendChild","createTextNode","head","injectCoreStylesOnce","classNames","width","tableLayout","thead","tHead","rows","headerRow","tbodies","tBodies","_checkSpans","_toggleSelector","toggle","_ensureControlColumn","headers","cells","ctrlIndex","_buildColumns","_mountAllBodies","_refit","_observe","hasSpanInHead","some","th","colSpan","rowSpan","hasSpanInBody","tb","tr","td","console","warn","_getWrapper","parentElement","firstCell","control","setAttribute","insertBefore","firstChild","row","ths","forEach","remove","hide","measure","hinted","Number","getAttribute","attrs","min","w","Math","ceil","clientWidth","offsetWidth","minWidthDefault","cols","priorities","i","isControl","priorityAttr","priority","controlWidth","lock","push","index","ones","p","isNaN","columnsMeta","_mountRowsInBody","_clickHandler","e","btn","closest","preventDefault","_keyHandler","addEventListener","tbody","dataRows","r","details","first","ctrlCell","_detailsIdForRow","strings","toggleTitle","innerHTML","icons","expand","next","nextElementSibling","cell","detailsRow","wrap","detailsInner","insertAdjacentElement","wrapper","RO","ResizeObserver","_resizeObserver","observe","_headerResizeObserver","refresh","_onWinResize","wait","t","ctx","args","last","now","Date","arguments","remaining","clearTimeout","apply","throttle","deferWhenHidden","IO","IntersectionObserver","_intersectObserver","entries","entry","isIntersecting","threshold","MO","MutationObserver","WebKitMutationObserver","MozMutationObserver","_tbodyObservers","map","m","childList","subtree","_theadObserver","mutations","mustRebuild","tagName","attributes","attributeFilter","label","_tableObserver","tbodiesChanged","added","addedNodes","nodeName","removed","removedNodes","o","disconnect","_availableWidth","innerWidth","_syncDetailsColspan","span","cell0","_applyVisibility","hiddenSet","col","_firstVisibleCellText","txt","textContent","_renderDetailsForRow","primary","detailsRender","hiddenCols","result","Node","item","detail","name","value","_updateTogglesVisibility","anyHidden","hideControlCol","ctrlTh","ctrlTd","hiddenCount","expanded","hidden","initial","available","sumMin","reduce","guard","candidate","sort","a","b","changed","computeHiddenColumns","show","collapse","expandAll","collapseAll","expandRow","rowOrIndex","_resolveDataRow","collapseRow","HTMLTableRowElement","idx","isFinite","flatMap","destroy","removeEventListener","deleteCell","globalOptions","defaults","undefined","_tables","Map","_events","getMode","setMode","ctrl","perTableOptions","merged","controller","_emit","bind","setAll","targets","unset","delete","unsetAll","list","getOptions","updateOptions","partial","rest","on","event","handler","off","_","version"],"sources":["dist/collapsetable.js"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"names":["root","factory","define","amd","module","exports","CollapseTable","self","this","CTBL_MODE_DEV","CTBL_MODE_PROD","normalizeMode","mode","raf","fn","window","requestAnimationFrame","setTimeout","toElement","target","startsWith","document","getElementById","slice","querySelector","nodeType","normalizeElements","input","Array","from","querySelectorAll","Element","NodeList","HTMLCollection","isArray","filter","n","createEl","tag","cls","el","createElement","className","oncePerTable","table","key","s","_store","WeakMap","set","get","Set","has","add","merge","base","extra","out","Object","assign","k","prototype","hasOwnProperty","call","v","isVisible","style","getComputedStyle","display","visibility","buildButtonClassSelector","classString","parts","String","trim","split","Boolean","length","join","hasAllClasses","every","c","classList","contains","isStructuralOptionsChange","prev","next","pa","attrs","na","pc","classNames","nc","priority","min","label","control","details","detailsInner","detail","name","value","hide","toggle","controlWidth","minWidthDefault","detailsRender","swapClassTokens","prevClassString","nextClassString","forEach","remove","__CTBL_TABLE_SEQ","TableController","constructor","options","emit","HTMLTableElement","Error","_mode","_rowKeyMap","_rowKeySeq","_unsupportedSpan","_destroyed","_insertedControl","_insertedHeaderControls","WeakSet","_uid","_initOnce","_setMode","id","type","appendChild","createTextNode","head","injectCoreStylesOnce","width","tableLayout","thead","tHead","rows","headerRow","headerRows","tbodies","tBodies","_checkSpans","_toggleSelector","_ensureControlColumn","headers","cells","ctrlIndex","_buildColumns","_mountAllBodies","_refit","_observe","hasSpanInHead","some","tr","th","colSpan","rowSpan","hasSpanInBody","tb","td","console","warn","_getWrapper","parentElement","firstCell","setAttribute","insertBefore","firstChild","row","first","ths","measure","hinted","Number","getAttribute","w","Math","ceil","clientWidth","offsetWidth","cols","priorities","i","isControl","priorityAttr","lock","push","index","ones","p","isNaN","columnsMeta","_mountRowsInBody","_clickHandler","e","btn","closest","preventDefault","addEventListener","_keyHandler","tbody","dataRows","r","ctrlCell","_detailsIdForRow","strings","toggleTitle","innerHTML","icons","expand","nextElementSibling","cell","detailsRow","wrap","insertAdjacentElement","wrapper","RO","ResizeObserver","_resizeObserver","observe","_headerResizeObserver","refresh","_onWinResize","wait","t","ctx","args","last","now","Date","arguments","remaining","clearTimeout","apply","throttle","deferWhenHidden","IO","IntersectionObserver","_intersectObserver","entries","entry","isIntersecting","threshold","MO","MutationObserver","WebKitMutationObserver","MozMutationObserver","_tbodyObservers","map","m","childList","subtree","_theadObserver","mutations","mustRebuild","tagName","attributes","attributeFilter","_tableObserver","tbodiesChanged","added","addedNodes","nodeName","removed","removedNodes","o","disconnect","_availableWidth","innerWidth","_syncDetailsColspan","span","cell0","_applyVisibility","hiddenSet","col","_firstVisibleCellText","txt","textContent","_renderDetailsForRow","primary","hiddenCols","result","Node","item","_updateTogglesVisibility","anyHidden","hideControlCol","ctrlTh","ctrlTd","hiddenCount","expanded","hidden","initial","available","sumMin","reduce","guard","candidate","sort","a","b","changed","computeHiddenColumns","show","collapse","expandAll","collapseAll","expandRow","rowOrIndex","_resolveDataRow","collapseRow","HTMLTableRowElement","idx","isFinite","flatMap","_migrateStructureClasses","prevOptions","nextOptions","prevDetails","nextDetails","prevDetailsInner","nextDetailsInner","prevControl","nextControl","prevToggle","nextToggle","buttons","_reconfigure","structural","destroy","removeEventListener","deleteCell","globalOptions","defaults","undefined","_tables","Map","_events","getMode","setMode","ctrl","perTableOptions","merged","controller","_emit","bind","setAll","targets","unset","delete","unsetAll","list","getOptions","updateOptions","partial","rest","on","event","handler","off","_","version"],"sources":["dist/collapsetable.js"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 62c7838..800564d 100644 --- a/docs/index.html +++ b/docs/index.html @@ -340,7 +340,7 @@

Why CollapseTable?

  • ๐Ÿงฉ Zero dependencies, tiny footprint
  • โš™๏ธ Production-ready: Resize/Mutation/Intersection observers, hidden-container deferral, stable row IDs, - multi-<tbody> support + multi-row <thead> and multi-<tbody> support
  • ๐ŸŽ›๏ธ Flexible: tableLayout, detailsRender hook, custom icons/strings/classes
  • @@ -455,8 +455,8 @@

    More (TypeScript, bundlers, frameworks)

    Markup requirements

    with at least one is required."); } this.headerRow = this.thead.rows[0]; + this.headerRows = Array.from(this.thead.rows); this.tbodies = Array.from(this.table.tBodies || []); if (!this.tbodies.length) throw new Error("CollapseTable: table is required."); @@ -355,7 +389,9 @@ } _checkSpans() { - const hasSpanInHead = Array.from(this.headerRow.cells).some(th => th.colSpan !== 1 || th.rowSpan !== 1); + const hasSpanInHead = this.headerRows.some(tr => + Array.from(tr.cells).some(th => th.colSpan !== 1 || th.rowSpan !== 1) + ); const hasSpanInBody = this.tbodies.some(tb => Array.from(tb.rows).some(tr => Array.from(tr.cells).some(td => td.colSpan !== 1 || td.rowSpan !== 1) @@ -377,26 +413,34 @@ } _ensureControlColumn() { - const firstCell = this.headerRow.cells[0]; - const firstIsControl = firstCell && hasAllClasses(firstCell, this.options.classNames.control); - if (!firstIsControl) { - const th = createEl("th", this.options.classNames.control); - th.setAttribute("aria-hidden", "true"); - th.setAttribute("scope", "col"); - this.headerRow.insertBefore(th, this.headerRow.firstChild); - this._insertedControl = true; - - // Insert control TD for each row in each TBODY - for (const tb of this.tbodies) { - for (const row of Array.from(tb.rows)) { + for (const tr of this.headerRows) { + const firstCell = tr.cells[0]; + const firstIsControl = firstCell && hasAllClasses(firstCell, this.options.classNames.control); + if (!firstIsControl) { + const th = createEl("th", this.options.classNames.control); + th.setAttribute("aria-hidden", "true"); + th.setAttribute("scope", "col"); + tr.insertBefore(th, tr.firstChild); + this._insertedControl = true; + this._insertedHeaderControls.add(tr); + } else { + const th = tr.cells[0]; + th.setAttribute("aria-hidden", "true"); + th.setAttribute("scope", "col"); + } + } + + // Insert control TD for each row in each TBODY + for (const tb of this.tbodies) { + for (const row of Array.from(tb.rows)) { + if (row.classList.contains(this.options.classNames.details)) continue; + const first = row.cells[0]; + const firstIsControl = first && hasAllClasses(first, this.options.classNames.control); + if (!firstIsControl) { const td = createEl("td", this.options.classNames.control); row.insertBefore(td, row.firstChild); } } - } else { - const th = this.headerRow.cells[0]; - th.setAttribute("aria-hidden", "true"); - th.setAttribute("scope", "col"); } } @@ -448,28 +492,33 @@ for (const tb of this.tbodies) this._mountRowsInBody(tb); // Event delegation (click + keyboard) - this._clickHandler = (e) => { - const target = /** @type {Element} */ (e.target); - const btn = target && target.closest && target.closest(this._toggleSelector); - if (!btn || !this.table.contains(btn)) return; - e.preventDefault(); - const row = btn.closest("tr"); - if (!row) return; - this.toggle(row); - }; - this._keyHandler = (e) => { - const target = /** @type {Element} */ (e.target); - const btn = target && target.closest && target.closest(this._toggleSelector); - if (!btn || !this.table.contains(btn)) return; - if (e.key === "Enter" || e.key === " ") { + if (!this._clickHandler) { + this._clickHandler = (e) => { + const target = /** @type {Element} */ (e.target); + const btn = target && target.closest && target.closest(this._toggleSelector); + if (!btn || !this.table.contains(btn)) return; e.preventDefault(); const row = btn.closest("tr"); if (!row) return; this.toggle(row); - } - }; - this.table.addEventListener("click", this._clickHandler); - this.table.addEventListener("keydown", this._keyHandler); + }; + this.table.addEventListener("click", this._clickHandler); + } + + if (!this._keyHandler) { + this._keyHandler = (e) => { + const target = /** @type {Element} */ (e.target); + const btn = target && target.closest && target.closest(this._toggleSelector); + if (!btn || !this.table.contains(btn)) return; + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + const row = btn.closest("tr"); + if (!row) return; + this.toggle(row); + } + }; + this.table.addEventListener("keydown", this._keyHandler); + } } _mountRowsInBody(tbody) { @@ -595,6 +644,8 @@ } if (mustRebuild) { this.headerRow = this.thead.rows[0]; + this.headerRows = Array.from(this.thead.rows); + this._ensureControlColumn(); this.headers = Array.from(this.headerRow.cells); this._buildColumns(); this._mountAllBodies(); @@ -674,10 +725,12 @@ } _applyVisibility(hiddenSet) { - // Header - for (const col of this.columnsMeta) { - const hide = hiddenSet.has(col.index); - col.th.classList.toggle(this.options.classNames.hide, hide); + // Header (apply to all rows in THEAD so multi-row headers stay aligned) + for (const tr of this.headerRows) { + for (const col of this.columnsMeta) { + const th = tr.cells[col.index]; + if (th) th.classList.toggle(this.options.classNames.hide, hiddenSet.has(col.index)); + } } // Bodies for (const tb of this.tbodies) { @@ -902,6 +955,76 @@ this._refit(); } + _migrateStructureClasses(prevOptions, nextOptions) { + if (!prevOptions || !nextOptions) return; + + const prevDetails = prevOptions.classNames && prevOptions.classNames.details; + const nextDetails = nextOptions.classNames && nextOptions.classNames.details; + const prevDetailsInner = prevOptions.classNames && prevOptions.classNames.detailsInner; + const nextDetailsInner = nextOptions.classNames && nextOptions.classNames.detailsInner; + + const prevControl = prevOptions.classNames && prevOptions.classNames.control; + const nextControl = nextOptions.classNames && nextOptions.classNames.control; + const prevToggle = prevOptions.classNames && prevOptions.classNames.toggle; + const nextToggle = nextOptions.classNames && nextOptions.classNames.toggle; + + for (const tr of this.headerRows || []) { + if (tr && tr.cells && tr.cells[0]) { + swapClassTokens(tr.cells[0], prevControl, nextControl); + } + } + + for (const tb of this.tbodies) { + for (const row of Array.from(tb.rows)) { + if (row.classList.contains(prevDetails)) { + row.classList.remove(prevDetails); + row.classList.add(nextDetails); + } + + if (row.classList.contains(nextDetails)) { + const wraps = Array.from(row.querySelectorAll("." + prevDetailsInner)); + wraps.forEach(w => swapClassTokens(w, prevDetailsInner, nextDetailsInner)); + continue; + } + + if (row.cells && row.cells[0]) { + swapClassTokens(row.cells[0], prevControl, nextControl); + } + + const ctrlCell = row.cells && row.cells[0]; + if (!ctrlCell) continue; + const buttons = Array.from(ctrlCell.querySelectorAll("button")); + if (buttons.length > 1) { + buttons.slice(1).forEach(btn => btn.remove()); + } + if (buttons[0]) { + swapClassTokens(buttons[0], prevToggle, nextToggle); + } + } + } + } + + _reconfigure(nextOptions, structural = false) { + const prevOptions = this.options; + this.options = nextOptions; + this._toggleSelector = buildButtonClassSelector(this.options.classNames.toggle); + if (!this.table.style.tableLayout || this.table.style.tableLayout !== this.options.tableLayout) { + this.table.style.tableLayout = this.options.tableLayout; + } + + if (structural) { + this.headerRow = this.thead && this.thead.rows ? this.thead.rows[0] : this.headerRow; + this.headerRows = this.thead && this.thead.rows ? Array.from(this.thead.rows) : this.headerRows; + this._migrateStructureClasses(prevOptions, nextOptions); + this._ensureControlColumn(); + this.headers = Array.from(this.headerRow.cells); + this._buildColumns(); + for (const tb of this.tbodies) this._mountRowsInBody(tb); + } + + this.refresh(); + } + destroy() { this._destroyed = true; @@ -917,7 +1040,11 @@ if (this._onWinResize) window.removeEventListener("resize", this._onWinResize); // Unhide all cells - for (const col of this.columnsMeta) col.th.classList.remove(this.options.classNames.hide); + for (const tr of this.headerRows) { + for (const cell of Array.from(tr.cells)) { + cell.classList.remove(this.options.classNames.hide); + } + } for (const tb of this.tbodies) { for (const row of Array.from(tb.rows)) { if (row.classList.contains(this.options.classNames.details)) continue; @@ -941,9 +1068,10 @@ // If we injected the control column, remove it (restore original structure) if (this._insertedControl) { - // Remove header control th - if (this.headerRow && this.headerRow.cells && this.headerRow.cells[0]) { - this.headerRow.deleteCell(0); + // Remove header control th only from rows we modified + for (const tr of this.headerRows) { + if (!this._insertedHeaderControls.has(tr)) continue; + if (tr && tr.cells && tr.cells[0]) tr.deleteCell(0); } // Remove first cell from each data row in each tbody for (const tb of this.tbodies) { @@ -1070,15 +1198,10 @@ if (this._tables.has(el)) { const ctrl = this._tables.get(el); - ctrl.options = merge(this.options, perTableOptions); - // Recompute selector if toggle classes were changed - ctrl._toggleSelector = buildButtonClassSelector(ctrl.options.classNames.toggle); - // apply tableLayout inline if changed - if (!ctrl.table.style.tableLayout || ctrl.table.style.tableLayout !== ctrl.options.tableLayout) { - ctrl.table.style.tableLayout = ctrl.options.tableLayout; - } + const nextOptions = merge(this.options, perTableOptions); + const structural = isStructuralOptionsChange(ctrl.options, nextOptions); ctrl._setMode(this._mode); - ctrl.refresh(); + ctrl._reconfigure(nextOptions, structural); return ctrl; } @@ -1235,15 +1358,9 @@ } this.options = merge(this.options, partial); this._tables.forEach((ctrl) => { - ctrl.options = merge(ctrl.options, partial); - // Recompute selector if toggle classes changed globally - if (partial && partial.classNames && typeof partial.classNames.toggle === 'string') { - ctrl._toggleSelector = buildButtonClassSelector(ctrl.options.classNames.toggle); - } - if (partial && typeof partial.tableLayout !== 'undefined') { - ctrl.table.style.tableLayout = ctrl.options.tableLayout; - } - ctrl.refresh(); + const nextOptions = merge(ctrl.options, partial); + const structural = isStructuralOptionsChange(ctrl.options, nextOptions); + ctrl._reconfigure(nextOptions, structural); }); }