(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.simpleDatatables = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i=n?t:""+Array(n+1-r.length).join(e)+t},d={s:c,z:function(t){var n=-t.utcOffset(),e=Math.abs(n),r=Math.floor(e/60),i=e%60;return(n<=0?"+":"-")+c(r,2,"0")+":"+c(i,2,"0")},m:function(t,n){var e=12*(n.year()-t.year())+(n.month()-t.month()),r=t.clone().add(e,o),i=n-r<0,s=t.clone().add(e+(i?-1:1),o);return Number(-(e+(n-r)/(i?r-s:s-r))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(h){return{M:o,y:u,w:s,d:i,h:r,m:e,s:n,ms:t,Q:a}[h]||String(h||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},l={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},m="en",$={};$[m]=l;var M=function(t){return t instanceof v},D=function(t,n,e){var r;if(!t)return m;if("string"==typeof t)$[t]&&(r=t),n&&($[t]=n,r=t);else{var i=t.name;$[i]=t,r=i}return e||(m=r),r},y=function(t,n,e){if(M(t))return t.clone();var r=n?"string"==typeof n?{format:n,pl:e}:n:{};return r.date=t,new v(r)},g=d;g.l=D,g.i=M,g.w=function(t,n){return y(t,{locale:n.$L,utc:n.$u})};var v=function(){function c(t){this.$L=this.$L||D(t.locale,null,!0),this.parse(t)}var d=c.prototype;return d.parse=function(t){this.$d=function(t){var n=t.date,e=t.utc;if(null===n)return new Date(NaN);if(g.u(n))return new Date;if(n instanceof Date)return new Date(n);if("string"==typeof n&&!/Z$/i.test(n)){var r=n.match(h);if(r)return e?new Date(Date.UTC(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)):new Date(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)}return new Date(n)}(t),this.init()},d.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},d.$utils=function(){return g},d.isValid=function(){return!("Invalid Date"===this.$d.toString())},d.isSame=function(t,n){var e=y(t);return this.startOf(n)<=e&&e<=this.endOf(n)},d.isAfter=function(t,n){return y(t)68?1900:2e3)}],YYYY:[/\d{4}/,a("year")],Z:u,ZZ:u},f=function(t,n,e){try{var i=function(t){for(var n=t.match(r),e=n.length,i=0;i0?o-1:m.getMonth(),D=a||m.getDate(),y=u||0,g=f||0,v=c||0,p=d||0;return e?new Date(Date.UTC($,M,D,y,g,v,p)):new Date($,M,D,y,g,v,p)}catch(t){return new Date("")}},function(t,n,r){var i=n.prototype,s=i.parse;i.parse=function(t){var n=t.date,i=t.format,o=t.pl,a=t.utc;this.$u=a,i?(e=o?r.Ls[o]:this.$locale(),this.$d=f(n,i,a),this.init(t)):s.call(this,t)}})});dayjs_min.extend(customParseFormat);const parseDate=(t,n)=>{let e=!1;if(n)switch(n){case"ISO_8601":e=t;break;case"RFC_2822":e=dayjs_min(t,"ddd, MM MMM YYYY HH:mm:ss ZZ").format("YYYYMMDD");break;case"MYSQL":e=dayjs_min(t,"YYYY-MM-DD hh:mm:ss").format("YYYYMMDD");break;case"UNIX":e=dayjs_min(t).unix();break;default:e=dayjs_min(t,n).format("YYYYMMDD")}return e};exports.parseDate=parseDate; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{}],2:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: !0 }); const isObject = t => "[object Object]" === Object.prototype.toString.call(t), isJson = t => { let e = !1; try { e = JSON.parse(t) } catch (t) { return !1 } return !(null === e || !Array.isArray(e) && !isObject(e)) && e }, createElement = (t, e) => { const s = document.createElement(t); if (e && "object" == typeof e) for (const t in e) "html" === t ? s.innerHTML = e[t] : s.setAttribute(t, e[t]); return s }, flush = t => { t instanceof NodeList ? t.forEach(t => flush(t)) : t.innerHTML = "" }, button = (t, e, s) => createElement("li", { class: "page-item " + t, html: `${s}` }), sortItems = (t, e) => { let s, a; 1 === e ? (s = 0, a = t.length) : -1 === e && (s = t.length - 1, a = -1); for (let i = !0; i;) { i = !1; for (let n = s; n != a; n += e)if (t[n + e] && t[n].value > t[n + e].value) { const s = t[n], a = t[n + e], l = s; t[n] = a, t[n + e] = l, i = !0 } } return t }, truncate = (t, e, s, a, i) => { let n; const l = 2 * (a = a || 2); let r = e - a, h = e + a; const o = [], d = []; e < 4 - a + l ? h = 3 + l : e > s - (3 - a + l) && (r = s - (2 + l)); for (let e = 1; e <= s; e++)if (1 == e || e == s || e >= r && e <= h) { const s = t[e - 1]; s.classList.remove("active"), o.push(s) } return o.forEach(e => { const s = e.children[0].getAttribute("data-page"); if (n) { const e = n.children[0].getAttribute("data-page"); if (s - e == 2) d.push(t[e]); else if (s - e != 1) { const t = createElement("li", { class: "ellipsis", html: `${i}` }); d.push(t) } } d.push(e), n = e }), d }; class Rows { constructor(t, e) { return this.dt = t, this.rows = e, this } build(t) { const e = createElement("tr"); let s = this.dt.headings; return s.length || (s = t.map(() => "")), s.forEach((s, a) => { const i = createElement("td"); t[a] && t[a].length || (t[a] = ""), i.innerHTML = t[a], i.data = t[a], e.appendChild(i) }), e } render(t) { return t } add(t) { if (Array.isArray(t)) { const e = this.dt; Array.isArray(t[0]) ? t.forEach(t => { e.data.push(this.build(t)) }) : e.data.push(this.build(t)), e.data.length && (e.hasRows = !0), this.update(), e.columns().rebuild() } } remove(t) { const e = this.dt; Array.isArray(t) ? (t.sort((t, e) => e - t), t.forEach(t => { e.data.splice(t, 1) })) : "all" == t ? e.data = [] : e.data.splice(t, 1), e.data.length || (e.hasRows = !1), this.update(), e.columns().rebuild() } update() { this.dt.data.forEach((t, e) => { t.dataIndex = e }) } } class Columns { constructor(t) { return this.dt = t, this } swap(t) { if (t.length && 2 === t.length) { const e = []; this.dt.headings.forEach((t, s) => { e.push(s) }); const s = t[0], a = t[1], i = e[a]; e[a] = e[s], e[s] = i, this.order(e) } } order(t) { let e, s, a, i, n, l, r; const h = [[], [], [], []], o = this.dt; t.forEach((t, a) => { n = o.headings[t], l = "false" !== n.getAttribute("data-sortable"), (e = n.cloneNode(!0)).originalCellIndex = a, e.sortable = l, h[0].push(e), o.hiddenColumns.includes(t) || ((s = n.cloneNode(!0)).originalCellIndex = a, s.sortable = l, h[1].push(s)) }), o.data.forEach((e, s) => { a = e.cloneNode(!1), i = e.cloneNode(!1), a.dataIndex = i.dataIndex = s, null !== e.searchIndex && void 0 !== e.searchIndex && (a.searchIndex = i.searchIndex = e.searchIndex), t.forEach(t => { (r = e.cells[t].cloneNode(!0)).data = e.cells[t].data, a.appendChild(r), o.hiddenColumns.includes(t) || ((r = e.cells[t].cloneNode(!0)).data = e.cells[t].data, i.appendChild(r)) }), h[2].push(a), h[3].push(i) }), o.headings = h[0], o.activeHeadings = h[1], o.data = h[2], o.activeRows = h[3], o.update() } hide(t) { if (t.length) { const e = this.dt; t.forEach(t => { e.hiddenColumns.includes(t) || e.hiddenColumns.push(t) }), this.rebuild() } } show(t) { if (t.length) { let e; const s = this.dt; t.forEach(t => { (e = s.hiddenColumns.indexOf(t)) > -1 && s.hiddenColumns.splice(e, 1) }), this.rebuild() } } visible(t) { let e; const s = this.dt; return t = t || s.headings.map(t => t.originalCellIndex), isNaN(t) ? Array.isArray(t) && (e = [], t.forEach(t => { e.push(!s.hiddenColumns.includes(t)) })) : e = !s.hiddenColumns.includes(t), e } add(t) { let e; const s = document.createElement("th"); if (!this.dt.headings.length) return this.dt.insert({ headings: [t.heading], data: t.data.map(t => [t]) }), void this.rebuild(); this.dt.hiddenHeader ? s.innerHTML = "" : t.heading.nodeName ? s.appendChild(t.heading) : s.innerHTML = t.heading, this.dt.headings.push(s), this.dt.data.forEach((s, a) => { t.data[a] && (e = document.createElement("td"), t.data[a].nodeName ? e.appendChild(t.data[a]) : e.innerHTML = t.data[a], e.data = e.innerHTML, t.render && (e.innerHTML = t.render.call(this, e.data, e, s)), s.appendChild(e)) }), t.type && s.setAttribute("data-type", t.type), t.format && s.setAttribute("data-format", t.format), t.hasOwnProperty("sortable") && (s.sortable = t.sortable, s.setAttribute("data-sortable", !0 === t.sortable ? "true" : "false")), this.rebuild(), this.dt.renderHeader() } remove(t) { Array.isArray(t) ? (t.sort((t, e) => e - t), t.forEach(t => this.remove(t))) : (this.dt.headings.splice(t, 1), this.dt.data.forEach(e => { e.removeChild(e.cells[t]) })), this.rebuild() } filter(t, e, s, a) { const i = this.dt; if (i.filterState || (i.filterState = { originalData: i.data }), !i.filterState[t]) { const e = [...a, () => !0]; i.filterState[t] = function () { let t = 0; return () => e[t++ % e.length] }() } const n = i.filterState[t](), l = Array.from(i.filterState.originalData).filter(e => { const s = e.cells[t], a = s.hasAttribute("data-content") ? s.getAttribute("data-content") : s.innerText; return "function" == typeof n ? n(a) : a === n }); i.data = l, this.rebuild(), i.update(), s || i.emit("datatable.sort", t, e) } sort(t, e, s) { const a = this.dt; if (a.hasHeadings && (t < 0 || t > a.headings.length)) return !1; const i = a.options.filters && a.options.filters[a.headings[t].textContent]; if (i && 0 !== i.length) return void this.filter(t, e, s, i); a.sorting = !0, s || a.emit("datatable.sorting", t, e); let n = a.data; const l = [], r = []; let h = 0, o = 0; const d = a.headings[t], c = []; if ("date" === d.getAttribute("data-type")) { let t = !1; d.hasAttribute("data-format") && (t = d.getAttribute("data-format")), c.push(new Promise(function (t) { t(require("./date-4abbfef1.js")) }).then(({ parseDate: e }) => s => e(s, t))) } Promise.all(c).then(i => { const c = i[0]; let p, u; Array.from(n).forEach(e => { const s = e.cells[t], a = s.hasAttribute("data-content") ? s.getAttribute("data-content") : s.innerText; let i; i = c ? c(a) : "string" == typeof a ? a.replace(/(\$|,|\s|%)/g, "") : a, parseFloat(i) == i ? r[o++] = { value: Number(i), row: e } : l[h++] = { value: "string" == typeof a ? a.toLowerCase() : a, row: e } }), e || (e = d.classList.contains("asc") ? "desc" : "asc"), "desc" == e ? (p = sortItems(l, -1), u = sortItems(r, -1), d.classList.remove("asc"), d.classList.add("desc")) : (p = sortItems(r, 1), u = sortItems(l, 1), d.classList.remove("desc"), d.classList.add("asc")), a.lastTh && d != a.lastTh && (a.lastTh.classList.remove("desc"), a.lastTh.classList.remove("asc")), a.lastTh = d, n = p.concat(u), a.data = []; const g = []; n.forEach((t, e) => { a.data.push(t.row), null !== t.row.searchIndex && void 0 !== t.row.searchIndex && g.push(e) }), a.searchData = g, this.rebuild(), a.update(), s || a.emit("datatable.sort", t, e) }) } rebuild() { let t, e, s, a; const i = this.dt, n = []; i.activeRows = [], i.activeHeadings = [], i.headings.forEach((t, e) => { t.originalCellIndex = e, t.sortable = "false" !== t.getAttribute("data-sortable"), i.hiddenColumns.includes(e) || i.activeHeadings.push(t) }), i.data.forEach((l, r) => { t = l.cloneNode(!1), e = l.cloneNode(!1), t.dataIndex = e.dataIndex = r, null !== l.searchIndex && void 0 !== l.searchIndex && (t.searchIndex = e.searchIndex = l.searchIndex), Array.from(l.cells).forEach(n => { (s = n.cloneNode(!0)).data = n.data, t.appendChild(s), i.hiddenColumns.includes(s.cellIndex) || ((a = s.cloneNode(!0)).data = s.data, e.appendChild(a)) }), n.push(t), i.activeRows.push(e) }), i.data = n, i.update() } } const dataToTable = function (t) { let e = !1, s = !1; if ((t = t || this.options.data).headings) { e = createElement("thead"); const s = createElement("tr"); t.headings.forEach(t => { const e = createElement("th", { html: t }); s.appendChild(e) }), e.appendChild(s) } t.data && t.data.length && (s = createElement("tbody"), t.data.forEach(e => { if (t.headings && t.headings.length !== e.length) throw new Error("The number of rows do not match the number of headings."); const a = createElement("tr"); e.forEach(t => { const e = createElement("td", { html: t }); a.appendChild(e) }), s.appendChild(a) })), e && (null !== this.table.tHead && this.table.removeChild(this.table.tHead), this.table.appendChild(e)), s && (this.table.tBodies.length && this.table.removeChild(this.table.tBodies[0]), this.table.appendChild(s)) }, defaultConfig = { sortable: !0, searchable: !0, paging: !0, perPage: 10, perPageSelect: [5, 10, 15, 20, 25], nextPrev: !0, firstLast: !1, prevText: "‹", nextText: "›", firstText: "«", lastText: "»", ellipsisText: "…", ascText: "▴", descText: "▾", truncatePager: !0, pagerDelta: 2, scrollY: "", fixedColumns: !0, fixedHeight: !1, header: !0, footer: !1, labels: { placeholder: "Search...", perPage: "{select}", noRows: "No entries found", info: "Showing {start} to {end} of {rows} entries" }, layout: { top: "{select}{search}", bottom: "{info}{pager}" } }; class DataTable { constructor(t, e = {}) { if (this.initialized = !1, this.options = { ...defaultConfig, ...e, layout: { ...defaultConfig.layout, ...e.layout }, labels: { ...defaultConfig.labels, ...e.labels } }, "string" == typeof t && (t = document.querySelector(t)), this.initialLayout = t.innerHTML, this.initialSortable = this.options.sortable, this.options.header || (this.options.sortable = !1), null === t.tHead && (!this.options.data || this.options.data && !this.options.data.headings) && (this.options.sortable = !1), t.tBodies.length && !t.tBodies[0].rows.length && this.options.data && !this.options.data.data) throw new Error("You seem to be using the data option, but you've not defined any rows."); this.table = t, this.init() } static extend(t, e) { "function" == typeof e ? DataTable.prototype[t] = e : DataTable[t] = e } init(t) { if (this.initialized || this.table.classList.contains("dataTable-table")) return !1; Object.assign(this.options, t || {}), this.currentPage = 1, this.onFirstPage = !0, this.hiddenColumns = [], this.columnRenderers = [], this.selectedColumns = [], this.render(), setTimeout(() => { this.emit("datatable.init"), this.initialized = !0, this.options.plugins && Object.entries(this.options.plugins).forEach(([t, e]) => { this[t] && "function" == typeof this[t] && (this[t] = this[t](e, { createElement: createElement }), e.enabled && this[t].init && "function" == typeof this[t].init && this[t].init()) }) }, 10) } render(t) { if (t) { switch (t) { case "page": this.renderPage(); break; case "pager": this.renderPager(); break; case "header": this.renderHeader() }return !1 } const e = this.options; let s = ""; if (e.data && dataToTable.call(this), e.ajax) { const t = e.ajax, s = new XMLHttpRequest, a = t => { this.emit("datatable.ajax.progress", t, s) }, i = e => { if (4 === s.readyState) if (this.emit("datatable.ajax.loaded", e, s), 200 === s.status) { const a = {}; a.data = t.load ? t.load.call(this, s) : s.responseText, a.type = "json", t.content && t.content.type && (a.type = t.content.type, Object.assign(a, t.content)), this.import(a), this.setColumns(!0), this.emit("datatable.ajax.success", e, s) } else this.emit("datatable.ajax.error", e, s) }, n = t => { this.emit("datatable.ajax.error", t, s) }, l = t => { this.emit("datatable.ajax.abort", t, s) }; s.addEventListener("progress", a, !1), s.addEventListener("load", i, !1), s.addEventListener("error", n, !1), s.addEventListener("abort", l, !1), this.emit("datatable.ajax.loading", s), s.open("GET", "string" == typeof t ? e.ajax : e.ajax.url), s.send() } if (this.body = this.table.tBodies[0], this.head = this.table.tHead, this.foot = this.table.tFoot, this.body || (this.body = createElement("tbody"), this.table.appendChild(this.body)), this.hasRows = this.body.rows.length > 0, !this.head) { const t = createElement("thead"), s = createElement("tr"); this.hasRows && (Array.from(this.body.rows[0].cells).forEach(() => { s.appendChild(createElement("th")) }), t.appendChild(s)), this.head = t, this.table.insertBefore(this.head, this.body), this.hiddenHeader = !e.ajax } if (this.headings = [], this.hasHeadings = this.head.rows.length > 0, this.hasHeadings && (this.header = this.head.rows[0], this.headings = [].slice.call(this.header.cells)), e.header || this.head && this.table.removeChild(this.table.tHead), e.footer ? this.head && !this.foot && (this.foot = createElement("tfoot", { html: this.head.innerHTML }), this.table.appendChild(this.foot)) : this.foot && this.table.removeChild(this.table.tFoot), this.wrapper = createElement("div", { class: "dataTable-wrapper dataTable-loading" }), s += "
", s += e.layout.top, s += "
", e.scrollY.length ? s += `
` : s += "
", s += "
", s += e.layout.bottom, s = (s += "
").replace("{info}", e.paging ? "
" : ""), e.paging && e.perPageSelect) { let t = "
"; t += e.labels.perPage, t += "
"; const a = createElement("select", { class: "dataTable-selector form-select" }); e.perPageSelect.forEach(t => { const s = t === e.perPage, i = new Option(t, t, s, s); a.add(i) }), t = t.replace("{select}", a.outerHTML), s = s.replace("{select}", t) } else s = s.replace("{select}", ""); if (e.searchable) { const t = ``; s = s.replace("{search}", t) } else s = s.replace("{search}", ""); this.hasHeadings && this.render("header"), this.table.classList.add("dataTable-table"); const a = createElement("ul", { class:"pagination pagination-primary float-end dataTable-pagination"}),i=createElement("ul");a.appendChild(i),s=s.replace(/\{pager\}/g,a.outerHTML),this.wrapper.innerHTML=s,this.container=this.wrapper.querySelector(".dataTable-container"),this.pagers=this.wrapper.querySelectorAll(".dataTable-pagination"),this.label=this.wrapper.querySelector(".dataTable-info"),this.table.parentNode.replaceChild(this.wrapper,this.table),this.container.appendChild(this.table),this.rect=this.table.getBoundingClientRect(),this.data=Array.from(this.body.rows),this.activeRows=this.data.slice(),this.activeHeadings=this.headings.slice(),this.update(),e.ajax||this.setColumns(),this.fixHeight(),this.fixColumns(),e.header||this.wrapper.classList.add("no-header"),e.footer||this.wrapper.classList.add("no-footer"),e.sortable&&this.wrapper.classList.add("sortable"),e.searchable&&this.wrapper.classList.add("searchable"),e.fixedHeight&&this.wrapper.classList.add("fixed-height"),e.fixedColumns&&this.wrapper.classList.add("fixed-columns"),this.bindEvents()}renderPage(){if(this.hasHeadings&&(flush(this.header),this.activeHeadings.forEach(t=>this.header.appendChild(t))),this.hasRows&&this.totalPages){this.currentPage>this.totalPages&&(this.currentPage=1);const t=this.currentPage-1,e=document.createDocumentFragment();this.pages[t].forEach(t=>e.appendChild(this.rows().render(t))),this.clear(e),this.onFirstPage=1===this.currentPage,this.onLastPage=this.currentPage===this.lastPage}else this.setMessage(this.options.labels.noRows);let t,e=0,s=0,a=0;if(this.totalPages&&(a=(s=(e=this.currentPage-1)*this.options.perPage)+this.pages[e].length,s+=1,t=this.searching?this.searchData.length:this.data.length),this.label&&this.options.labels.info.length){const e=this.options.labels.info.replace("{start}",s).replace("{end}",a).replace("{page}",this.currentPage).replace("{pages}",this.totalPages).replace("{rows}",t);this.label.innerHTML=t?e:""}1==this.currentPage&&this.fixHeight()}renderPager(){if(flush(this.pagers),this.totalPages>1){const t="pager",e=document.createDocumentFragment(),s=this.onFirstPage?1:this.currentPage-1,a=this.onLastPage?this.totalPages:this.currentPage+1;this.options.firstLast&&e.appendChild(button(t,1,this.options.firstText)),this.options.nextPrev&&e.appendChild(button(t,s,this.options.prevText));let i=this.links;this.options.truncatePager&&(i=truncate(this.links,this.currentPage,this.pages.length,this.options.pagerDelta,this.options.ellipsisText)),this.links[this.currentPage-1].classList.add("active"),i.forEach(t=>{t.classList.remove("active"),e.appendChild(t)}),this.links[this.currentPage-1].classList.add("active"),this.options.nextPrev&&e.appendChild(button(t,a,this.options.nextText)),this.options.firstLast&&e.appendChild(button(t,this.totalPages,this.options.lastText)),this.pagers.forEach(t=>{t.appendChild(e.cloneNode(!0))})}}renderHeader(){this.labels=[],this.headings&&this.headings.length&&this.headings.forEach((t,e)=>{if(this.labels[e]=t.textContent,t.firstElementChild&&t.firstElementChild.classList.contains("dataTable-sorter")&&(t.innerHTML=t.firstElementChild.innerHTML),t.sortable="false"!==t.getAttribute("data-sortable"),t.originalCellIndex=e,this.options.sortable&&t.sortable){const e=createElement("a",{href:"#",class:"dataTable-sorter",html:t.innerHTML});t.innerHTML="",t.setAttribute("data-sortable",""),t.appendChild(e)}}),this.fixColumns()}bindEvents(){const t=this.options;if(t.perPageSelect){const e=this.wrapper.querySelector(".dataTable-selector");e&&e.addEventListener("change",()=>{t.perPage=parseInt(e.value,10),this.update(),this.fixHeight(),this.emit("datatable.perpage",t.perPage)},!1)}t.searchable&&(this.input=this.wrapper.querySelector(".dataTable-input"),this.input&&this.input.addEventListener("keyup",()=>this.search(this.input.value),!1)),this.wrapper.addEventListener("click",e=>{const s=e.target;"a"===s.nodeName.toLowerCase()&&(s.hasAttribute("data-page")?(this.page(s.getAttribute("data-page")),e.preventDefault()):t.sortable&&s.classList.contains("dataTable-sorter")&&"false"!=s.parentNode.getAttribute("data-sortable")&&(this.columns().sort(this.headings.indexOf(s.parentNode)),e.preventDefault()))},!1),window.addEventListener("resize",()=>{this.rect=this.container.getBoundingClientRect(),this.fixColumns()})}setColumns(t){t||this.data.forEach(t=>{Array.from(t.cells).forEach(t=>{t.data=t.innerHTML})}),this.options.columns&&this.headings.length&&this.options.columns.forEach(t=>{Array.isArray(t.select)||(t.select=[t.select]),t.hasOwnProperty("render")&&"function"==typeof t.render&&(this.selectedColumns=this.selectedColumns.concat(t.select),this.columnRenderers.push({columns:t.select,renderer:t.render})),t.select.forEach(e=>{const s=this.headings[e];t.type&&s.setAttribute("data-type",t.type),t.format&&s.setAttribute("data-format",t.format),t.hasOwnProperty("sortable")&&s.setAttribute("data-sortable",t.sortable),t.hasOwnProperty("hidden")&&!1!==t.hidden&&this.columns().hide([e]),t.hasOwnProperty("sort")&&1===t.select.length&&this.columns().sort(t.select[0],t.sort,!0)})}),this.hasRows&&(this.data.forEach((t,e)=>{t.dataIndex=e,Array.from(t.cells).forEach(t=>{t.data=t.innerHTML})}),this.selectedColumns.length&&this.data.forEach(t=>{Array.from(t.cells).forEach((e,s)=>{this.selectedColumns.includes(s)&&this.columnRenderers.forEach(a=>{a.columns.includes(s)&&(e.innerHTML=a.renderer.call(this,e.data,e,t))})})}),this.columns().rebuild()),this.render("header")}destroy(){this.table.innerHTML=this.initialLayout,this.table.classList.remove("dataTable-table"),this.wrapper.parentNode.replaceChild(this.table,this.wrapper),this.initialized=!1}update(){this.wrapper.classList.remove("dataTable-empty"),this.paginate(this),this.render("page"),this.links=[];let t=this.pages.length;for(;t--;){const e=t+1;this.links[t]=button(0===t?"active":"",e,e)}this.sorting=!1,this.render("pager"),this.rows().update(),this.emit("datatable.update")}paginate(){const t=this.options.perPage;let e=this.activeRows;return this.searching&&(e=[],this.searchData.forEach(t=>e.push(this.activeRows[t]))),this.options.paging?this.pages=e.map((s,a)=>a%t==0?e.slice(a,a+t):null).filter(t=>t):this.pages=[e],this.totalPages=this.lastPage=this.pages.length,this.totalPages}fixColumns(){if((this.options.scrollY.length||this.options.fixedColumns)&&this.activeHeadings&&this.activeHeadings.length){let t,e=!1;if(this.columnWidths=[],this.table.tHead){if(this.options.scrollY.length&&((e=createElement("thead")).appendChild(createElement("tr")),e.style.height="0px",this.headerTable&&(this.table.tHead=this.headerTable.tHead)),this.activeHeadings.forEach(t=>{t.style.width=""}),this.activeHeadings.forEach((t,s)=>{const a=t.offsetWidth,i=a/this.rect.width*100;if(t.style.width=`${i}%`,this.columnWidths[s]=a,this.options.scrollY.length){const t=createElement("th");e.firstElementChild.appendChild(t),t.style.width=`${i}%`,t.style.paddingTop="0",t.style.paddingBottom="0",t.style.border="0"}}),this.options.scrollY.length){const t=this.table.parentElement;if(!this.headerTable){this.headerTable=createElement("table",{class:"dataTable-table"});const e=createElement("div",{class:"dataTable-headercontainer"});e.appendChild(this.headerTable),t.parentElement.insertBefore(e,t)}const s=this.table.tHead;this.table.replaceChild(e,s),this.headerTable.tHead=s,this.headerTable.parentElement.style.paddingRight=`${this.headerTable.clientWidth-this.table.clientWidth+parseInt(this.headerTable.parentElement.style.paddingRight||"0",10)}px`,t.scrollHeight>t.clientHeight&&(t.style.overflowY="scroll")}}else{t=[],e=createElement("thead");const s=createElement("tr");Array.from(this.table.tBodies[0].rows[0].cells).forEach(()=>{const e=createElement("th");s.appendChild(e),t.push(e)}),e.appendChild(s),this.table.insertBefore(e,this.body);const a=[];t.forEach((t,e)=>{const s=t.offsetWidth,i=s/this.rect.width*100;a.push(i),this.columnWidths[e]=s}),this.data.forEach(t=>{Array.from(t.cells).forEach((t,e)=>{this.columns(t.cellIndex).visible()&&(t.style.width=`${a[e]}%`)})}),this.table.removeChild(e)}}}fixHeight(){this.options.fixedHeight&&(this.container.style.height=null,this.rect=this.container.getBoundingClientRect(),this.container.style.height=`${this.rect.height}px`)}search(t){return!!this.hasRows&&(t=t.toLowerCase(),this.currentPage=1,this.searching=!0,this.searchData=[],t.length?(this.clear(),this.data.forEach((e,s)=>{const a=this.searchData.includes(e);t.split(" ").reduce((t,s)=>{let a=!1,i=null,n=null;for(let t=0;tthis.pages.length||t<0)&&(this.render("page"),this.render("pager"),void this.emit("datatable.page",t)))}sortColumn(t,e){this.columns().sort(t,e)}insert(t){let e=[];if(isObject(t)){if(t.headings&&!this.hasHeadings&&!this.hasRows){const e=createElement("tr");t.headings.forEach(t=>{const s=createElement("th",{html:t});e.appendChild(s)}),this.head.appendChild(e),this.header=e,this.headings=[].slice.call(e.cells),this.hasHeadings=!0,this.options.sortable=this.initialSortable,this.render("header"),this.activeHeadings=this.headings.slice()}t.data&&Array.isArray(t.data)&&(e=t.data)}else Array.isArray(t)&&t.forEach(t=>{const s=[];Object.entries(t).forEach(([t,e])=>{const a=this.labels.indexOf(t);a>-1&&(s[a]=e)}),e.push(s)});e.length&&(this.rows().add(e),this.hasRows=!0),this.update(),this.setColumns(),this.fixColumns()}refresh(){this.options.searchable&&(this.input.value="",this.searching=!1),this.currentPage=1,this.onFirstPage=!0,this.update(),this.emit("datatable.refresh")}clear(t){this.body&&flush(this.body);let e=this.body;if(this.body||(e=this.table),t){if("string"==typeof t){document.createDocumentFragment().innerHTML=t}e.appendChild(t)}}export(t){if(!this.hasHeadings&&!this.hasRows)return!1;const e=this.activeHeadings;let s=[];const a=[];let i,n,l,r;if(!isObject(t))return!1;const h={download:!0,skipColumn:[],lineDelimiter:"\n",columnDelimiter:",",tableName:"myTable",replacer:null,space:4,...t};if(h.type){if("txt"!==h.type&&"csv"!==h.type||(s[0]=this.header),h.selection)if(isNaN(h.selection)){if(Array.isArray(h.selection))for(i=0;i{e.data[a]=[];const i=t.split(s.columnDelimiter);i.length&&i.forEach(t=>{e.data[a].push(t)})}))}else if("json"===s.type){const t=isJson(s.data);t&&(e={headings:[],data:[]},t.forEach((t,s)=>{e.data[s]=[],Object.entries(t).forEach(([t,a])=>{e.headings.includes(t)||e.headings.push(t),e.data[s].push(a)})}))}isObject(s.data)&&(e=s.data),e&&this.insert(e)}return!1}print(){const t=this.activeHeadings,e=this.activeRows,s=createElement("table"),a=createElement("thead"),i=createElement("tbody"),n=createElement("tr");t.forEach(t=>{n.appendChild(createElement("th",{html:t.textContent}))}),a.appendChild(n),e.forEach(t=>{const e=createElement("tr");Array.from(t.cells).forEach(t=>{e.appendChild(createElement("td",{html:t.textContent}))}),i.appendChild(e)}),s.appendChild(a),s.appendChild(i);const l=window.open();l.document.body.appendChild(s),l.print()}setMessage(t){let e=1;this.hasRows?e=this.data[0].cells.length:this.activeHeadings.length&&(e=this.activeHeadings.length),this.wrapper.classList.add("dataTable-empty"),this.label&&(this.label.innerHTML=""),this.totalPages=0,this.render("pager"),this.clear(createElement("tr",{html:`${t}`}))}columns(t){return new Columns(this,t)}rows(t){return new Rows(this,t)}on(t,e){this.events=this.events||{},this.events[t]=this.events[t]||[],this.events[t].push(e)}off(t,e){this.events=this.events||{},t in this.events!=!1&&this.events[t].splice(this.events[t].indexOf(e),1)}emit(t){if(this.events=this.events||{},t in this.events!=!1)for(let e=0;e