@iamproperty/components 5.0.0 → 5.1.0-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/assets/css/components/accordion.css +1 -1
  2. package/assets/css/components/accordion.css.map +1 -1
  3. package/assets/css/components/accordion.global.css +1 -0
  4. package/assets/css/components/accordion.global.css.map +1 -0
  5. package/assets/css/components/actionbar.css +1 -1
  6. package/assets/css/components/actionbar.css.map +1 -1
  7. package/assets/css/components/actionbar.global.css +1 -0
  8. package/assets/css/components/actionbar.global.css.map +1 -0
  9. package/assets/css/components/card.css +1 -1
  10. package/assets/css/components/card.css.map +1 -1
  11. package/assets/css/components/card.global.css +1 -0
  12. package/assets/css/components/card.global.css.map +1 -0
  13. package/assets/css/components/component.native.css +1 -0
  14. package/assets/css/components/component.native.css.map +1 -0
  15. package/assets/css/components/component.reset.css +1 -1
  16. package/assets/css/components/component.reset.css.map +1 -1
  17. package/assets/css/components/header.css +1 -1
  18. package/assets/css/components/header.css.map +1 -1
  19. package/assets/css/components/{nav-global.css → nav.global.css} +1 -1
  20. package/assets/css/components/{nav-global.css.map → nav.global.css.map} +1 -1
  21. package/assets/css/components/notification.global.css +1 -0
  22. package/assets/css/components/notification.global.css.map +1 -0
  23. package/assets/css/components/slider.css +1 -0
  24. package/assets/css/components/slider.css.map +1 -0
  25. package/assets/css/components/table.css +1 -1
  26. package/assets/css/components/table.css.map +1 -1
  27. package/assets/css/components/{table.extras.css → table.global.css} +1 -1
  28. package/assets/css/components/{table.extras.css.map → table.global.css.map} +1 -1
  29. package/assets/css/components/tabs.css +1 -1
  30. package/assets/css/components/tabs.css.map +1 -1
  31. package/assets/css/core.min.css +1 -1
  32. package/assets/css/core.min.css.map +1 -1
  33. package/assets/css/style.min.css +1 -1
  34. package/assets/css/style.min.css.map +1 -1
  35. package/assets/img/illustrations/add-new-property.png +0 -0
  36. package/assets/img/illustrations/auctioneer.png +0 -0
  37. package/assets/img/illustrations/branch.png +0 -0
  38. package/assets/img/illustrations/company-level.png +0 -0
  39. package/assets/img/illustrations/contractors.png +0 -0
  40. package/assets/img/illustrations/find-existing-property.png +0 -0
  41. package/assets/img/illustrations/green/add-new-property.png +0 -0
  42. package/assets/img/illustrations/green/auctioneer.png +0 -0
  43. package/assets/img/illustrations/green/branch.png +0 -0
  44. package/assets/img/illustrations/green/buyer.png +0 -0
  45. package/assets/img/illustrations/green/company-level.png +0 -0
  46. package/assets/img/illustrations/green/contractors.png +0 -0
  47. package/assets/img/illustrations/green/estate-agents.png +0 -0
  48. package/assets/img/illustrations/green/find-existing-property.png +0 -0
  49. package/assets/img/illustrations/green/landlords.png +0 -0
  50. package/assets/img/illustrations/green/seller.png +0 -0
  51. package/assets/img/illustrations/green/whats-new-2.png +0 -0
  52. package/assets/img/illustrations/green/whats-new.png +0 -0
  53. package/assets/img/illustrations/information-works.png +0 -0
  54. package/assets/img/illustrations/landlords.png +0 -0
  55. package/assets/img/illustrations/whats-new-2.png +0 -0
  56. package/assets/img/illustrations/whats-new.png +0 -0
  57. package/assets/js/components/accordion/accordion.component.js +4 -0
  58. package/assets/js/components/accordion/accordion.component.min.js +6 -5
  59. package/assets/js/components/accordion/accordion.component.min.js.map +1 -1
  60. package/assets/js/components/actionbar/actionbar.component.js +4 -0
  61. package/assets/js/components/actionbar/actionbar.component.min.js +5 -4
  62. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
  63. package/assets/js/components/address-lookup/address-lookup.component.js +1 -1
  64. package/assets/js/components/address-lookup/address-lookup.component.min.js +2 -2
  65. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  66. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  67. package/assets/js/components/card/card.component.js +4 -0
  68. package/assets/js/components/card/card.component.min.js +4 -3
  69. package/assets/js/components/card/card.component.min.js.map +1 -1
  70. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
  71. package/assets/js/components/fileupload/fileupload.component.min.js +1 -1
  72. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  73. package/assets/js/components/header/header.component.min.js +2 -2
  74. package/assets/js/components/nav/nav.component.js +4 -0
  75. package/assets/js/components/nav/nav.component.min.js +4 -3
  76. package/assets/js/components/nav/nav.component.min.js.map +1 -1
  77. package/assets/js/components/notification/notification.component.js +4 -0
  78. package/assets/js/components/notification/notification.component.min.js +4 -3
  79. package/assets/js/components/notification/notification.component.min.js.map +1 -1
  80. package/assets/js/components/pagination/pagination.component.min.js +1 -1
  81. package/assets/js/components/slider/slider.component.js +143 -0
  82. package/assets/js/components/table/table.component.js +1 -1
  83. package/assets/js/components/table/table.component.min.js +3 -3
  84. package/assets/js/components/table/table.component.min.js.map +1 -1
  85. package/assets/js/components/tabs/tabs.component.js +2 -0
  86. package/assets/js/components/tabs/tabs.component.min.js +5 -3
  87. package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
  88. package/assets/js/dynamic.min.js +5 -5
  89. package/assets/js/dynamic.min.js.map +1 -1
  90. package/assets/js/modules/helpers.js +1 -1
  91. package/assets/js/modules/inputs.js +44 -3
  92. package/assets/js/modules/tabs.js +29 -31
  93. package/assets/js/scripts.bundle.js +24 -23
  94. package/assets/js/scripts.bundle.js.map +1 -1
  95. package/assets/js/scripts.bundle.min.js +2 -2
  96. package/assets/js/scripts.bundle.min.js.map +1 -1
  97. package/assets/js/tests/slider.spec.js +20 -0
  98. package/assets/sass/_components.scss +0 -6
  99. package/assets/sass/_corefiles.scss +8 -88
  100. package/assets/sass/_elements.scss +0 -1
  101. package/assets/sass/components/accordion.global.scss +135 -0
  102. package/assets/sass/components/accordion.scss +6 -192
  103. package/assets/sass/components/{actionbar-global.scss → actionbar.global.scss} +3 -1
  104. package/assets/sass/components/actionbar.scss +2 -2
  105. package/assets/sass/components/{card-global.scss → card.global.scss} +2 -23
  106. package/assets/sass/components/card.scss +21 -0
  107. package/assets/sass/components/component.native.scss +37 -0
  108. package/assets/sass/components/component.reset.scss +1 -3
  109. package/assets/sass/components/header.scss +6 -1
  110. package/assets/sass/components/notification.global.scss +41 -0
  111. package/assets/sass/components/slider.scss +121 -0
  112. package/assets/sass/components/{table.extras.scss → table.global.scss} +5 -1
  113. package/assets/sass/components/table.scss +1 -1
  114. package/assets/sass/components/tabs.scss +2 -5
  115. package/assets/sass/core.scss +1 -2
  116. package/assets/sass/elements/container.scss +17 -0
  117. package/assets/sass/elements/forms.scss +138 -10
  118. package/assets/sass/elements/table.element.scss +1 -2
  119. package/assets/sass/error.scss +1 -1
  120. package/assets/sass/foundations/reboot.scss +48 -0
  121. package/assets/sass/main.scss +0 -1
  122. package/assets/sass/templates/form.scss +1 -0
  123. package/assets/ts/components/accordion/accordion.component.ts +5 -0
  124. package/assets/ts/components/actionbar/actionbar.component.ts +5 -0
  125. package/assets/ts/components/address-lookup/address-lookup.component.ts +1 -1
  126. package/assets/ts/components/card/card.component.ts +5 -0
  127. package/assets/ts/components/nav/nav.component.ts +5 -0
  128. package/assets/ts/components/notification/notification.component.ts +4 -0
  129. package/assets/ts/components/slider/README.md +26 -0
  130. package/assets/ts/components/slider/slider.component.ts +189 -0
  131. package/assets/ts/components/table/table.component.ts +1 -1
  132. package/assets/ts/components/tabs/tabs.component.ts +2 -0
  133. package/assets/ts/modules/helpers.ts +1 -1
  134. package/assets/ts/modules/inputs.ts +61 -4
  135. package/assets/ts/modules/tabs.ts +38 -41
  136. package/assets/ts/tests/slider.spec.ts +33 -0
  137. package/dist/components.es.js +1002 -1446
  138. package/dist/components.umd.js +292 -131
  139. package/dist/style.css +1 -1
  140. package/package.json +5 -4
  141. package/src/components/Accordion/Accordion.vue +12 -5
  142. package/src/components/Actionbar/Actionbar.vue +12 -5
  143. package/src/components/Card/Card.vue +1 -1
  144. package/src/components/Header/Header.vue +9 -3
  145. package/src/components/Nav/Nav.vue +1 -1
  146. package/src/components/Slider/README.md +11 -0
  147. package/src/components/Slider/Slider.vue +25 -0
  148. package/src/components/Tabs/Tabs.vue +14 -5
  149. package/assets/css/components/actionbar-global.css +0 -1
  150. package/assets/css/components/actionbar-global.css.map +0 -1
  151. package/assets/css/components/card-global.css +0 -1
  152. package/assets/css/components/card-global.css.map +0 -1
  153. /package/assets/sass/components/{nav-global.scss → nav.global.scss} +0 -0
@@ -1,11 +1,11 @@
1
1
  /*!
2
- * iamKey v5.0.0
2
+ * iamKey v5.1.0-beta
3
3
  * Copyright 2022-2023 iamproperty
4
4
  */const B=function(a){return typeof a!="string"?!1:!isNaN(a)&&!isNaN(parseFloat(a))},Q=(a,e)=>String(a).padStart(e,"0"),X=a=>a.charAt(0).toUpperCase()+a.slice(1);var Y=function(a,e,o,r){function b(c){return c instanceof o?c:new o(function(i){i(c)})}return new(o||(o=Promise))(function(c,i){function n(u){try{t(r.next(u))}catch(s){i(s)}}function d(u){try{t(r.throw(u))}catch(s){i(s)}}function t(u){u.done?c(u.value):b(u.value).then(n,d)}t((r=r.apply(a,e||[])).next())})};const R=a=>{const e=Array.from(a.querySelectorAll("thead th"));Array.from(a.querySelectorAll("tbody tr")).forEach((r,b)=>{const c=Array.from(r.querySelectorAll("th, td")),i=["0","low","medium","high","unknown","n/a","pending","verified","due","overdue","incomplete","complete","completed","approval required","upcoming","requires approval","to do","on track","not started","warning","error"];c.forEach((n,d)=>{const t=e[d];if(typeof t<"u"){let u=document.createElement("div");u.innerHTML=t.innerHTML;let s=u.textContent||u.innerText||"";n.setAttribute("data-label",s),t.hasAttribute("data-td-class")&&n.setAttribute("class",t.getAttribute("data-td-class")),t.hasAttribute("data-format")&&(n.setAttribute("data-format",t.getAttribute("data-format")),n.innerHTML=M(t.getAttribute("data-format"),n.textContent.trim())),i.includes(n.textContent.trim().toLowerCase())&&n.setAttribute("data-content",n.textContent.trim().toLowerCase())}})})},J=a=>{let e=0;return Array.from(a.querySelectorAll("tbody tr")).forEach((o,r)=>{let b=window.getComputedStyle(document.querySelector("html")),c=o.querySelector(":scope > *:last-child > *:first-child");if(c){c.classList.add("text-nowrap");let i=c.offsetWidth/parseFloat(b.fontSize);i+=1.7,e=e>i?e:i}}),e},G=(a,e)=>{if(e.classList.contains(".table--fullwidth")&&!e.hasAttribute("data-expandable")||a.querySelectorAll("thead tr th").length<4&&!e.hasAttribute("data-expandable"))return!1;Array.from(a.querySelectorAll("thead tr")).forEach((o,r)=>{o.insertAdjacentHTML("afterbegin",'<th class="th--fixed expand-button-heading"></th>')}),Array.from(a.querySelectorAll("tbody tr")).forEach((o,r)=>{const b=o.getAttribute("data-view")==="full"?"aria-expanded":"";o.insertAdjacentHTML("afterbegin",`<td class="td--fixed td--expand"><button class="btn btn-compact btn-secondary" data-expand-button ${b}>Expand</button></td>`)})},K=a=>{a.addEventListener("click",e=>{if(e&&e.target instanceof HTMLElement&&e.target.closest("[data-expand-button]")){let o=e.target.closest("[data-expand-button]"),r=o.closest("tr");o.toggleAttribute("aria-expanded"),r.getAttribute("data-view")=="full"?r.setAttribute("data-view","default"):r.setAttribute("data-view","full"),o.blur()}})},N=(a,e)=>{let o=e.querySelector("[data-search]");if(!o)return!1;const r=o.getAttribute("id"),b=o.getAttribute("data-search").split(",");let c=o.parentNode,i={};b.forEach((n,d)=>{Array.from(a.querySelectorAll('td[data-label="'+n.trim()+'"]')).forEach((t,u)=>{t.querySelector(".td__content")?i[t.querySelector(".td__content").textContent]=t.querySelector(".td__content").textContent:i[t.textContent]=t.textContent})}),o.setAttribute("list",`${r}_list`),o.setAttribute("autocomplete","off"),c.querySelector("datalist")||(c.innerHTML+=`<datalist id="${r}_list"></datalist>`),c.querySelector("datalist").innerHTML=`${Object.keys(i).map(n=>`<option value="${n}"></option>`).join("")}`},V=(a,e,o,r,b)=>{var c;let i=function(t,u=!1){if(e.classList.contains("processing"))return!1;if(t.type=="submit"&&(e.classList.add("processing"),Array.from(e.querySelectorAll("[data-duplicate]")).forEach((s,m)=>{const h=s.getAttribute("data-duplicate"),l=document.getElementById(h),g=document.querySelector(`[for="${h}"] iam-card`);if(l.checked!=s.checked)if(g){let y=new Event("click");g.dispatchEvent(y)}else l.checked=s.checked}),e.classList.remove("processing")),e.hasAttribute("data-ajax")){if(!u){let s=e.querySelector("[data-pagination]");s.value=1,r.setAttribute("data-page",1)}z(a,e,o,r)}else e.hasAttribute("data-submit")?e.submit():(C(a,e,r),E(a,e));if(e.hasAttribute("data-ajax-post")){let s=new FormData(e),m=new URLSearchParams(s).toString();const h=new XMLHttpRequest;h.open("GET",`${window.location.href}?ajax=true&${m}`),h.send()}};e.addEventListener("keyup",t=>{clearTimeout(c),t&&t.target instanceof HTMLElement&&t.target.closest("[data-search]")&&(c=setTimeout(function(){i(t)},500))}),e.addEventListener("change",t=>{clearTimeout(c),t&&t.target instanceof HTMLElement&&t.target.closest("[data-sort]")&&(e.hasAttribute("data-submit")||O(a,e,b),i(t)),t&&t.target instanceof HTMLElement&&t.target.closest("[data-search]")&&i(t),t&&t.target instanceof HTMLElement&&t.target.closest("[data-filter][data-no-ajax]")?(C(a,e,r),E(a,e)):(t&&t.target instanceof HTMLElement&&t.target.closest("[data-filter]")&&t.target.closest("form .dialog__wrapper > dialog")||t&&t.target instanceof HTMLElement&&t.target.closest("[data-filter]")&&!t.target.closest("form dialog"))&&i(t),t&&t.target instanceof HTMLElement&&t.target.closest("[data-show]")&&i(t),t&&t.target instanceof HTMLElement&&t.target.closest("[data-mimic]")&&i(t)}),e.addEventListener("click",t=>{if(clearTimeout(c),t&&t.target instanceof HTMLElement&&t.target.closest('dialog button:not([type="button"])')&&t.target.closest('dialog button:not([type="button"])').closest("dialog").close(),t&&t.target instanceof HTMLElement&&t.target.closest(".dialog__close")&&(t.preventDefault(),t.stopPropagation()),t&&t.target instanceof HTMLElement&&t.target.closest("[data-clear]")){e.classList.add("processing"),Array.from(e.querySelectorAll(".applied-filters")).forEach((s,m)=>{s.innerHTML=""});let u=e.elements;for(let s=0;s<u.length;s++)switch(u[s].type.toLowerCase()?u[s].type.toLowerCase():"text"){case"text":case"password":case"textarea":u[s].value="";break;case"radio":case"checkbox":if(u[s].checked){let h=u[s],l=h.getAttribute("id"),g=document.querySelector(`[for="${l}"`);if(g.querySelector("iam-card")){let y=g.querySelector("iam-card"),v=new Event("click");y.dispatchEvent(v)}h.checked=!1}break;case"select-one":case"select-multi":u[s].selectedIndex=-1;break}e.classList.remove("processing"),e.hasAttribute("data-submit")||O(a,e,b),i(t)}}),e.addEventListener("submit",t=>{clearTimeout(c),e.hasAttribute("data-submit")||t.preventDefault(),i(t)}),e.addEventListener("force",t=>{i(t)}),e.addEventListener("paginate",t=>{i(t,!0)});let n=[],d=[];Array.from(e.querySelectorAll("[data-mimic]")).forEach((t,u)=>{let s=t.getAttribute("data-mimic");Array.from(document.querySelectorAll(`[name="${s}"]`)).forEach((m,h)=>{let l=m.closest("form");n.includes(l)||n.push(l),d.includes(s)||d.push(s)})}),n.forEach((t,u)=>{const s=function(){let m=[],h=new FormData(t);for(const[l,g]of h)document.querySelector(`[data-mimic="${l}"]`)&&!m.includes(l)?(m.push(l),document.querySelector(`[data-mimic="${l}"]`).value=g):document.querySelector(`[data-mimic="${l}"]`)&&(document.querySelector(`[data-mimic="${l}"]`).value+=","+g);for(const l of m){const g=new Event("force");e.dispatchEvent(g)}for(const l of d)if(!h.has(l)&&t.querySelector(`[name="${l}"]`)){document.querySelector(`[data-mimic="${l}"]`).value="";const g=new Event("force");e.dispatchEvent(g)}};t.addEventListener("force",m=>{s()}),t.addEventListener("change",m=>{s()})})},O=(a,e,o)=>{if(e.getAttribute("data-ajax"))return!1;let r=a.querySelector("tbody"),b=e.querySelector("[data-sort]"),c=b.querySelector(`option:nth-child(${b.selectedIndex+1})`),i=c.getAttribute("data-sort"),n=c.getAttribute("data-order"),d=c.getAttribute("data-format");if(!i)return r.innerHTML=o.innerHTML,R(a),!1;let t=[];["asc","desc","descending"].includes(n)||(t=n.split(","));let u=[];Array.from(r.querySelectorAll("tr")).forEach((m,h)=>{let l=m.querySelector('td[data-label="'+i+'"], th[data-label="'+i+'"]').textContent.trim();m.querySelector('[data-label="'+i+'"] .td__content')&&(l=m.querySelector('[data-label="'+i+'"] .td__content').textContent.trim()),t.length&&t.includes(l)&&(l=t.indexOf(l)),B(l)&&(l=Q(l,10)),d&&d=="date"&&(l=new Date(l));const g={index:l,row:m};u.push(g)}),u.sort((m,h)=>m.index>h.index?1:-1),(n=="descending"||n=="desc")&&(u=u.reverse());let s="";u.forEach((m,h)=>{s+=m.row.outerHTML}),r.innerHTML=s},C=(a,e,o)=>{a.classList.remove("table--filtered");let r=P(e),b=[],c=0,i=e.querySelector("[data-pagination]")?parseInt(e.querySelector("[data-pagination]").value):1,n=e.querySelector("[data-show]")?parseInt(e.querySelector("[data-show]").value):15;if(Array.from(a.querySelectorAll("tbody tr")).forEach((t,u)=>{t.classList.remove("filtered"),t.classList.remove("filtered--matched"),t.classList.remove("filtered--show"),t.removeAttribute("data-filtered-by")}),e.querySelector("[data-search]")){let t=e.querySelector("[data-search]");e.querySelector("[data-search]").getAttribute("data-search").split(",").forEach((s,m)=>{b.push({column:`${s.trim()}`,value:`${t.value}`})})}Array.from(e.querySelectorAll("[data-filter-count]")).forEach((t,u)=>{t.innerHTML="",t.parentNode.classList.remove("hover")});let d=0;Object.values(r).forEach((t,u)=>{typeof t=="object"&&Object.values(t).length?d+=Object.values(t).length:d++}),d&&Array.from(e.querySelectorAll("[data-filter-count]")).forEach((t,u)=>{t.innerHTML+=`(${d})`,t.parentNode.classList.add("hover")}),a.classList.add("table--filtered");for(const[t,u]of Object.entries(r))Array.from(a.querySelectorAll("tbody tr:not(.filtered)")).forEach((s,m)=>{let h=!1;u.forEach((l,g)=>{let y=s.querySelector(`[data-label="${t}"]`);if(l&&l=="$today")l=M("date",new Date);else if(l&&l=="$yesterday"){let f=new Date;f.setDate(f.getDate()-1),l=M("date",f)}else if(l&&(l=="$thisWeek"||l=="$lastWeek")){let f=new Date,x=new Date(f.setDate(f.getDate()-(f.getDay()-1))),w=new Date(f.setDate(f.getDate()-f.getDay()+7)),p=new Date(y.textContent.toLowerCase());if(f.setHours(0,0,0,0),x.setHours(0,0,0,0),w.setHours(0,0,0,0),p.setHours(0,0,0,0),l=="$thisWeek")h=p>=x&&p<=w;else{let T=new Date(x.setDate(x.getDate()-7)),A=new Date(w.setDate(w.getDate()-7));T.setHours(0,0,0,0),A.setHours(0,0,0,0),h=p>=T&&p<=A}}else if(l&&l=="$thisMonth"){let f=new Date,x=f.getFullYear(),w=f.getMonth();var v=new Date(x,w,1),S=new Date(x,w+1,0);let p=new Date(y.textContent.toLowerCase());v.setHours(0,0,0,0),S.setHours(0,0,0,0),p.setHours(0,0,0,0),h=p>=v&&p<=S}else if(l&&l=="$lastMonth"){let f=new Date,x=f.getFullYear(),w=f.getMonth();var k=new Date(x,w-1,1),L=new Date(x,w,0);let p=new Date(y.textContent.toLowerCase());k.setHours(0,0,0,0),L.setHours(0,0,0,0),p.setHours(0,0,0,0),h=p>=k&&p<=L}y&&y.textContent.toLowerCase().includes(l.toLowerCase())&&(h=!0)}),h||(s.classList.add("filtered"),s.setAttribute("data-filtered-by",t))});Array.from(a.querySelectorAll("tbody tr:not(.filtered)")).forEach((t,u)=>{let s=!(b.length>0&&b[0].value.length>=3);b.forEach((m,h)=>{let l=t.querySelector(`[data-label="${m.column}"]`);l&&m.value.length>=3&&l.textContent.toLowerCase().includes(m.value.toLowerCase())&&(s=!0)}),s||t.classList.add("filtered")}),Array.from(a.querySelectorAll("tbody tr:not(.filtered")).forEach((t,u)=>{c++,t.classList.add("filtered--matched"),Math.ceil(c/n)==parseInt(i)&&t.classList.add("filtered--show")}),o&&(o.setAttribute("data-total",c),o.setAttribute("data-show",n),o.setAttribute("data-page",i))},E=(a,e,o)=>{Array.from(e.querySelectorAll("[data-query]")).forEach((b,c)=>{let i=b.getAttribute("data-query"),n;if(i=="total")o.hasAttribute("data-total")?n=o.getAttribute("data-total"):n=(a.classList.contains("table--filtered"),a.querySelectorAll("tbody tr").length);else if(!i.includes(" == ")&&i.includes(" & ")){let d=i.split(" & "),t="";d.forEach(u=>{t+=`:not([data-filtered-by="${u}"])`}),n=Array.from(a.querySelectorAll(`tbody tr${t}`)).length}else if(!i.includes(" == "))n=Array.from(a.querySelectorAll(`tbody tr:not([data-filtered-by="${i}"])`)).length;else if(i.includes(" && ")){let d=i.split(" && ");n=Array.from(a.querySelectorAll("tbody tr:not(.filtered)")).filter(function(t){let u=!0;for(const[s,m]of Object.entries(d)){let h=m.split(" == ");(!t.querySelector(`td[data-label="${h[0]}"]`)||t.querySelector(`td[data-label="${h[0]}"]`).textContent!=`${h[1]}`)&&(u=!1)}return u}).length}else{let d=i.split(" == ");n=Array.from(a.querySelectorAll(`tbody tr.filtered--matched td[data-label="${d[0]}"], tbody tr[data-filtered-by="${d[0]}"] td[data-label="${d[0]}"]`)).filter(function(t){return t.textContent===d[1]}).length}b.hasAttribute("data-total")?b.setAttribute("data-total",n):b.innerHTML=n})},Z=function(a,e,o,r){o.addEventListener("update-page",b=>{let c=e.querySelector("[data-pagination]"),i=b.detail.page;if(c.value=i,e.dispatchEvent(new Event("paginate")),r.setAttribute("data-page",i),a.hasAttribute("data-show-history")){const n=new URL(location);n.searchParams.set("page",i),history.pushState({type:"pagination",form:e.getAttribute("id"),page:i},"",n)}if(!r.hasAttribute("data-no-scroll")){const d=a.getBoundingClientRect().top+window.pageYOffset+-250;window.scrollTo({top:d,behavior:"smooth"})}}),o.addEventListener("update-show",b=>{let c=e.querySelector("[data-show]"),i=b.detail.show;c.value=i,r.setAttribute("data-show",i),e.dispatchEvent(new Event("submit"))})},tt=(a,e)=>{if(!a)return!1;a.addEventListener("click",o=>{et(e)})},et=function(a){for(var e=[],o=a.getElementsByTagName("tr"),r=0;r<o.length;r++){for(var b=o[r].querySelectorAll("td,th"),c=[],i=0;i<b.length;i++)c.push(`"${b[i].textContent}"`);e.push(c.join(","))}e=e.join(`
5
5
  `);let n=new Blob([e],{type:"text/csv"});var d=document.createElement("a");d.download="export.csv";var t=window.URL.createObjectURL(n);d.href=t,d.style.display="none",document.body.appendChild(d),d.click(),document.body.removeChild(d)},I=function(a,e,o,r){if(R(a),G(a,r),E(a,e,r),r&&r.classList.contains("table--cta")){let c=function(){Array.from(a.querySelectorAll("tr")).forEach((i,n)=>{let d=i.offsetHeight;i.style.setProperty("--row-height",`${d}px`)})};const b=J(a);r.style.setProperty("--cta-width",`${b}rem`),new ResizeObserver(c).observe(a)}},P=function(a){let e=new Object;return Array.from(a.querySelectorAll("[data-filter]")).forEach((r,b)=>{if(!(r.type=="radio"&&!r.checked)&&!(r.type=="checkbox"&&!r.checked)&&r&&r.value){let c=r.getAttribute("data-filter");e[c]||(e[c]=new Array),e[c].push(r.value)}}),e},z=function(a,e,o,r){return Y(this,void 0,void 0,function*(){const b=(h,l,g)=>l.split(/[\.\[\]\'\"]/).filter(y=>y).reduce((y,v)=>y?y[v]:g,h);let c=new FormData(e),i=new URLSearchParams(c).toString(),n=a.querySelectorAll("thead tr th"),d=a.querySelector("tbody"),t=e.getAttribute("data-ajax");r.classList.add("table--loading");let u=P(e);Array.from(e.querySelectorAll("[data-filter-count]")).forEach((h,l)=>{h.innerHTML="",h.parentNode.classList.remove("hover")});let s=0;Object.values(u).forEach((h,l)=>{typeof h=="object"&&Object.values(h).length?s+=Object.values(h).length:s++}),s&&Array.from(e.querySelectorAll("[data-filter-count]")).forEach((h,l)=>{h.innerHTML+=`(${s})`,h.parentNode.classList.add("hover")}),window.controller||(window.controller=[]),window.controller[t]&&window.controller[t].abort(),window.controller[t]=new AbortController;const{signal:m}=controller[t];o.setAttribute("data-loading","true"),e.classList.add("processing");try{yield fetch(t+"?"+i,{signal:m,method:"get",credentials:"same-origin",headers:new Headers({"Content-Type":"application/json",Accept:"application/json","X-Requested-With":"XMLHttpRequest"})}).then(h=>h.json()).then(h=>{let l=e.hasAttribute("data-schema")?e.getAttribute("data-schema"):"data",g=e.hasAttribute("data-schema-total")?e.getAttribute("data-schema-total"):"meta.total",y=e.hasAttribute("data-schema-page")?e.getAttribute("data-schema-page"):"meta.current_page",v=b(h,g,15),S=b(h,y,1),k=b(h,l),L=r.hasAttribute("data-empty-msg")?r.getAttribute("data-empty-msg"):"No results found";k?(d.innerHTML="",k.forEach((f,x)=>{var w=document.createElement("tr");n.forEach((p,T)=>{let A="";var _=document.createElement("td");if(_.setAttribute("data-label",p.innerText),p.getAttribute("data-output")){var $=p.getAttribute("data-output");A=$.replace(new RegExp(/{(.*?)}/,"gm"),function(D){return b(f,D.replace("{","").replace("}",""))})}if(p.hasAttribute("data-output-array")){var $=p.getAttribute("data-output");let F=b(f,$.replace("{","").replace("}",""));A="",F.forEach((j,it)=>{let W=p.getAttribute("data-output-array"),q="";if(p.hasAttribute("data-output-array-property")&&p.hasAttribute("data-output-array-transform")){const H=b(j,p.getAttribute("data-output-array-property")),U=JSON.parse(p.getAttribute("data-output-array-transform"))[H];q=W.replace(`{${p.getAttribute("data-output-array-property")}}`,U)}q=q.replace(new RegExp(/{(.*?)}/,"gm"),function(H){return b(j,H.replace("{","").replace("}",""))}),A+=q})}p.hasAttribute("data-transform")&&(A=JSON.parse(p.getAttribute("data-transform"))[A],!A&&p.hasAttribute("data-default")&&(A=p.getAttribute("data-default"))),_.innerHTML=A,w.appendChild(_)}),d.appendChild(w)}),N(a,e),r.setAttribute("data-total",parseInt(v)),r.setAttribute("data-page",parseInt(S)),I(a,e,o,r),Array.from(e.querySelectorAll("[data-ajax-query]")).forEach((f,x)=>{let w=b(h,f.getAttribute("data-ajax-query"),"");f.hasAttribute("data-total")?f.setAttribute("data-total",w):f.innerHTML=w}),parseInt(v)==0&&(d.innerHTML=`<tr><td colspan="100%"><span>${L}</span></td></tr>`),r.classList.remove("table--loading"),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"Ajax table loaded",url:t,formData:i})):d.innerHTML='<tr><td colspan="100%"><span>Error loading table</span></td></tr>',o.removeAttribute("data-loading"),e.classList.remove("processing")})}catch(h){console.log(h)}})},M=(a,e)=>{switch(a){case"datetime":return new Date(e).toLocaleDateString("en-gb",{weekday:"short",year:"2-digit",month:"long",day:"numeric"})+" "+new Date(e).toLocaleTimeString("en-gb",{hour:"2-digit",minute:"2-digit"});case"date":return new Date(e).toLocaleDateString("en-gb",{year:"2-digit",month:"long",day:"numeric"});case"capitalise":return e=X(e)}};class at extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"});const e=document.body.hasAttribute("data-assets-location")?document.body.getAttribute("data-assets-location"):"/assets",o=document.body.hasAttribute("data-core-css")?document.body.getAttribute("data-core-css"):`${e}/css/core.min.css`,r=document.createElement("template");r.innerHTML=`
6
6
  <style>
7
7
  @import "${o}";
8
- :host{--wrapper-padding: 2rem;--bg-colour: #ffffff;display:block;background:#fff;padding:var(--wrapper-padding);box-shadow:0px 6px 12px rgba(0,0,0,.11);border-radius:0.5rem;margin-bottom:2rem;overflow:hidden}:host:before{display:none !important}@media screen and (prefers-color-scheme: dark){:host{background:var(--colour-canvas-2)}}@media(forced-colors: active){:host{--wrapper-padding: 0;background:var(--colour-canvas-2)}}::slotted(table){margin-bottom:0 !important}.table__wrapper{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}@container (width < 23.4375em){:host(:not(.table--fullwidth)){margin-left:-1.5rem;margin-right:-1.5rem;margin-bottom:0;background:var(--colour-canvas-2);border-radius:0;background:none;padding:0;box-shadow:none;overflow:visible}:host(:not(.table--fullwidth)) .table__wrapper:not(.table--fullwidth){overflow:hidden;max-height:none !important}:host(:not(.table--fullwidth)) ::slotted(table){overflow:visible !important;margin-inline:1.5rem;margin-bottom:1.5rem !important;width:calc(100% - 3rem) !important;display:block}:host(:not(.table--fullwidth)) .table--cta{border-bottom:0}:host(:not(.table--fullwidth)) .table--cta:after{content:none;display:none !important}}@container (width > 23.4375em){:host{--cta-width: 8rem}:host(.table--loading){--cta-width: 1.5rem!important}.table--cta{position:relative}.table--cta .table__wrapper{overflow-y:hidden;margin-bottom:0}}.table__wrapper:is(.mh-sm,.mh-md,.mh-lg){position:relative}.table__wrapper:is(.mh-sm,.mh-md,.mh-lg)::before{top:calc(100% - 1.2rem);bottom:2px;height:1.2rem;border-bottom:2px solid var(--colour-border);margin-bottom:-1.2rem}.table--cta>.table__wrapper:is(.mh-sm,.mh-md,.mh-lg){max-height:none;position:static}.table--cta>.table__wrapper:is(.mh-sm,.mh-md,.mh-lg)::before{display:none}@container (width < 23.4375em){.table__wrapper.has-actionbar{margin-top:calc(-100vh + 6.75rem) !important}}:host(.table--loading){pointer-events:none;position:relative}:host(.table--loading) ::slotted(table){min-height:20rem;opacity:.5}:host(.table--loading)::after{content:"Loading...";position:absolute;top:6.25rem;left:50%;transform:translate(-50%, 0);font-weight:bold;color:var(--colour-heading);font-size:1.5rem;text-shadow:0px 0px 10px var(--colour-canvas-2);padding-inline:2rem;text-shadow:0px 0px 10px var(--colour-canvas-2);background:radial-gradient(var(--colour-canvas-2), transparent)}@container (width < 23.4375em){.pagination--table{margin-inline:1.5rem;width:auto}:host(.table--fullwidth) .pagination--table{margin-inline:0}}/*# sourceMappingURL=assets/css/components/table.css.map */
8
+ :host{--wrapper-padding: 2rem;--bg-colour: #ffffff;display:block;background:#fff;padding:var(--wrapper-padding);box-shadow:0px 6px 12px rgba(0,0,0,.11);border-radius:0.625rem;margin-bottom:2rem;overflow:hidden}:host:before{display:none !important}@media screen and (prefers-color-scheme: dark){:host{background:var(--colour-canvas-2)}}@media(forced-colors: active){:host{--wrapper-padding: 0;background:var(--colour-canvas-2)}}::slotted(table){margin-bottom:0 !important}.table__wrapper{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}@container (width < 23.4375em){:host(:not(.table--fullwidth)){margin-left:-1.5rem;margin-right:-1.5rem;margin-bottom:0;background:var(--colour-canvas-2);border-radius:0;background:none;padding:0;box-shadow:none;overflow:visible}:host(:not(.table--fullwidth)) .table__wrapper:not(.table--fullwidth){overflow:hidden;max-height:none !important}:host(:not(.table--fullwidth)) ::slotted(table){overflow:visible !important;margin-inline:1.5rem;margin-bottom:1.5rem !important;width:calc(100% - 3rem) !important;display:block}:host(:not(.table--fullwidth)) .table--cta{border-bottom:0}:host(:not(.table--fullwidth)) .table--cta:after{content:none;display:none !important}}@container (width > 23.4375em){:host{--cta-width: 8rem}:host(.table--loading){--cta-width: 1.5rem!important}.table--cta{position:relative}.table--cta .table__wrapper{overflow-y:hidden;margin-bottom:0}}.table__wrapper:is(.mh-sm,.mh-md,.mh-lg){position:relative}.table__wrapper:is(.mh-sm,.mh-md,.mh-lg)::before{top:calc(100% - 1.2rem);bottom:2px;height:1.2rem;border-bottom:2px solid var(--colour-border);margin-bottom:-1.2rem}.table--cta>.table__wrapper:is(.mh-sm,.mh-md,.mh-lg){max-height:none;position:static}.table--cta>.table__wrapper:is(.mh-sm,.mh-md,.mh-lg)::before{display:none}@container (width < 23.4375em){.table__wrapper.has-actionbar{margin-top:calc(-100vh + 6.75rem) !important}}:host(.table--loading){pointer-events:none;position:relative}:host(.table--loading) ::slotted(table){min-height:20rem;opacity:.5}:host(.table--loading)::after{content:"Loading...";position:absolute;top:6.25rem;left:50%;transform:translate(-50%, 0);font-weight:bold;color:var(--colour-heading);font-size:1.5rem;text-shadow:0px 0px 10px var(--colour-canvas-2);padding-inline:2rem;text-shadow:0px 0px 10px var(--colour-canvas-2);background:radial-gradient(var(--colour-canvas-2), transparent)}@container (width < 23.4375em){.pagination--table{margin-inline:1.5rem;width:auto}:host(.table--fullwidth) .pagination--table{margin-inline:0}}/*# sourceMappingURL=assets/css/components/table.css.map */
9
9
 
10
10
 
11
11
  :host(.mh-sm){
@@ -27,6 +27,6 @@
27
27
  </div>
28
28
  </div>
29
29
  <iam-pagination class="pagination--table" ${this.hasAttribute("data-page")?`data-page="${this.getAttribute("data-page")}"`:""} ></iam-pagination>
30
- `,this.shadowRoot.appendChild(r.content.cloneNode(!0)),document.getElementById("tableExtras")||document.head.insertAdjacentHTML("beforeend",`<style id="tableExtras">*:has(>iam-table){container-type:inline-size}iam-table{--hover-background: var(--colour-light);--row-bg: var(--colour-canvas-2)}iam-table thead tr{background:var(--row-bg)}iam-table tbody tr{background:var(--row-bg)}iam-table tbody tr:is(:hover,:focus-within,.hover){--bg-colour-rgb: 238,238,238;--row-bg: var(--hover-background);background:var(--row-bg)}@media screen and (prefers-color-scheme: dark){iam-table tbody tr{--hover-background: var(--colour-canvas)}iam-table tbody tr:is(:hover,:focus-within,.hover){background:var(--row-bg)}}iam-table[data-expandable] [data-expand-button][aria-expanded]{background-color:rgba(0,0,0,0)}@container (width < 23.4375em){iam-table:not(.table--fullwidth) thead{display:none}iam-table:not(.table--fullwidth) tbody{display:block;overflow:visible}iam-table:not(.table--fullwidth) tbody tr td:first-child{padding-top:0}iam-table:not(.table--fullwidth) tr{display:block;position:relative;border:none;background:var(--row-bg);padding:var(--wrapper-padding);box-shadow:0px 6px 12px rgba(0,0,0,.11);border-radius:0.5rem}iam-table:not(.table--fullwidth) tr+tr{margin-top:2rem}iam-table:not(.table--fullwidth) tr:is(:hover,:focus,.hover){--row-bg: var(--colour-canvas-2)}iam-table:not(.table--fullwidth) :is(td,th){display:block;border-color:var(--colour-border);padding-right:0}iam-table:not(.table--fullwidth) :is(td,th):nth-child(1){border-top:none}iam-table:not(.table--fullwidth) :is(td,th)[data-label]:not([data-label=""]):before{content:attr(data-label);color:var(--colour-heading);padding:0 0 0.375rem 0;margin-bottom:0;display:block;font-weight:bold}iam-table:not(.table--fullwidth) td:first-child::after{top:1.75rem !important}iam-table:not(.table--fullwidth) td::after{top:2.5rem}iam-table:not(.table--fullwidth) .td--fixed{padding-right:50%}iam-table:not(.table--fullwidth) tbody tr td:not(:first-child){border-top:var(--border-width) solid currentColor;border-color:var(--colour-border) !important}iam-table:not(.table--fullwidth) tr:not([data-view=full]) td p{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}iam-table:not(.table--fullwidth) td:has([data-expand-button]){height:0;padding:0;position:relative}iam-table:not(.table--fullwidth) td:has([data-expand-button])+td{border-top:none !important;padding-top:0 !important}iam-table:not(.table--fullwidth) [data-expand-button]{top:0;right:0;background:rgba(0,0,0,0) !important;border:none;position:absolute;overflow:hidden;--compact-size: 2rem}iam-table:not(.table--fullwidth) [data-expand-button]:before{font-family:"Font Awesome 6 Pro";content:"\uF055";font-weight:300 !important;font-size:1.75rem;line-height:var(--compact-size) !important}iam-table:not(.table--fullwidth) [data-expand-button][aria-expanded]:before{content:"\uF056";font-weight:900 !important}iam-table:not(.table--fullwidth) .dialog__wrapper{margin-top:-0.5rem;margin-left:-1rem;z-index:10}iam-table:not(.table--fullwidth) tbody tr:not([data-view=full]) td:not(.td--fixed)+td:not(.td--fixed)+td+td{display:none}iam-table.table--cta:not(.table--fullwidth) tr td:not(:first-child):last-child{display:block !important;position:static;width:100%;min-width:100%;margin-left:0;padding-left:0;text-align:left;min-height:0}iam-table.table--cta:not(.table--fullwidth) tr td:not(:first-child):last-child:after{display:none}}@container (width > 23.4375em){iam-table.table--cta:not(.table--loading):has(tr:first-child td:first-child:last-child){padding-right:calc(var(--wrapper-padding) + 1.5rem)}iam-table.table--cta:not(.table--loading):not(:has(tr:first-child td:first-child:last-child)) tr>th:nth-last-child(2),iam-table.table--cta:not(.table--loading):not(:has(tr:first-child td:first-child:last-child)) tr>td:nth-last-child(2){padding-right:var(--cta-width)}iam-table.table--cta:not(.table--loading):not(:has(tr:first-child td:first-child:last-child)) tr>*:not(:first-child):last-child{position:absolute;left:calc(100% - var(--cta-width));top:auto;background:rgba(0,0,0,0);width:var(--cta-width);min-height:calc(var(--row-height) - 2px);text-align:right;background:linear-gradient(90deg, transparent 0%, var(--row-bg) 1.25rem);cursor:default}@media screen and (prefers-color-scheme: dark){iam-table.table--cta:not(.table--loading):not(:has(tr:first-child td:first-child:last-child)) tr>*:not(:first-child):last-child{background:linear-gradient(90deg, transparent 0%, var(--row-bg) 1.25rem)}}iam-table.table--cta:not(.table--loading):not(:has(tr:first-child td:first-child:last-child)) tr>*:not(:first-child):last-child a{white-space:nowrap;padding-right:.2rem}iam-table.table--cta:not(.table--loading):not(:has(tr:first-child td:first-child:last-child)) tbody tr:hover>*:not(:first-child):last-child{background:linear-gradient(90deg, transparent 0%, var(--row-bg) 1.25rem)}}iam-table:is(.mh-sm,.mh-md,.mh-lg):not(.table--cta){position:relative}iam-table:is(.mh-sm,.mh-md,.mh-lg):not(.table--cta) thead{position:sticky;top:0;left:0;z-index:1;background-color:var(--row-bg)}iam-table:is(.mh-sm,.mh-md,.mh-lg):not(.table--cta) thead:before{content:"";position:absolute;bottom:0;left:0;width:100%;height:2px;background:var(--colour-primary)}iam-table:is(.mh-sm,.mh-md,.mh-lg):not(.table--cta) tbody{position:relative}iam-table:is(.mh-sm,.mh-md,.mh-lg):not(.table--cta) tbody tr:first-child td{border-top:0}iam-table:is(.mh-sm,.mh-md,.mh-lg):not(.table--cta) tbody tr:last-child td{border-bottom:0}table :is([data-content=low],[data-content=medium],[data-content=high],[data-content=unknown],[data-content=due],[data-content=overdue],[data-content=incomplete],[data-content="requires approval"],[data-content=upcoming],[data-content="approval required"],[data-content=warning],[data-content=verified],[data-content="not started"],[data-content="to do"],[data-content="on track"],[data-content=completed],[data-content=complete],.alert-status:not([data-content="0"]):not([data-content=""]):not(:empty)){position:relative;padding-left:1.5rem}table :is([data-content=low],[data-content=medium],[data-content=high],[data-content=unknown],[data-content=due],[data-content=overdue],[data-content=incomplete],[data-content="requires approval"],[data-content=upcoming],[data-content="approval required"],[data-content=warning],[data-content=verified],[data-content="not started"],[data-content="to do"],[data-content="on track"],[data-content=completed],[data-content=complete],.alert-status:not([data-content="0"]):not([data-content=""]):not(:empty))::before{margin-left:-1.5rem !important}table :is([data-content=low],[data-content=medium],[data-content=high],[data-content=unknown],[data-content=due],[data-content=overdue],[data-content=incomplete],[data-content="requires approval"],[data-content=upcoming],[data-content="approval required"],[data-content=warning],[data-content=verified],[data-content="not started"],[data-content="to do"],[data-content="on track"],[data-content=completed],[data-content=complete],.alert-status:not([data-content="0"]):not([data-content=""]):not(:empty)):after{font-family:"Font Awesome 6 Pro";position:absolute;top:1rem;left:0;font-size:1rem;line-height:1;height:1rem;width:1rem;display:inline-block}table [data-content=high]:after{content:"\uF325";font-weight:normal;color:var(--colour-danger)}table [data-content=medium]:after{content:"\uF7A4";font-weight:normal;color:var(--colour-warning)}table [data-content=low]:after{content:"\uE404";font-weight:normal;color:var(--colour-complete)}table [data-content=unknown]:after{content:"\uE404";font-weight:normal;color:var(--colour-muted)}table :is([data-content=overdue],[data-content=due],[data-content=incomplete]):after{content:"\uF024";color:var(--colour-danger)}table :is([data-content="not started"],[data-content="to do"],[data-content="on track"]):after{content:"\uF024";color:var(--colour-muted)}table :is([data-content="requires approval"],[data-content="approval required"],[data-content=upcoming]):after{content:"\uF024";color:var(--colour-warning)}table :is([data-content=warning]):after{content:"\uF071";color:var(--colour-warning)}table :is([data-content=verified],[data-content=completed],[data-content=complete]):after{content:"\uF00C";font-weight:normal;color:var(--colour-complete)}table .alert-status:not([data-content="0"]):not([data-content=""]):not(:empty):after{content:"\uF0F3";color:var(--colour-primary)}iam-table .table--filtered tbody tr:not(.filtered--show){display:none !important}iam-table table:not(.table--filtered):not(.table--ajax) tbody tr:nth-child(15)~tr{display:none}iam-table input:is([type=radio],[type=checkbox])+label:not(.radio--tick){padding-left:0 !important;margin:0 !important}iam-table input:is([type=radio],[type=checkbox])+label:not(.radio--tick):before,iam-table input:is([type=radio],[type=checkbox])+label:not(.radio--tick):after{top:.75rem !important;left:.25rem !important}iam-table:has([type=checkbox]:checked) tr:has([type=checkbox]) [type=checkbox]{width:100vw;height:100%;max-height:var(--row-height);max-width:100vw;cursor:pointer;pointer-events:all;top:auto;margin:0;margin-top:0rem}iam-table tr:has([type=checkbox]:checked){--row-bg: #E0E0E0}@media screen and (prefers-color-scheme: dark){iam-table tr:has([type=checkbox]:checked){--row-bg: #000000}}@container (width < 23.4375em){@media screen and (prefers-color-scheme: light){iam-table:has([slot=before]) iam-actionbar{background-color:#e6eaec}}iam-table:has([slot=before]) .actionbar__sticky+*{margin-top:0 !important}iam-table input:is([type=radio],[type=checkbox])+label:not(.radio--tick){padding-left:0 !important;margin:0 !important;min-height:2rem}iam-table input:is([type=radio],[type=checkbox])+label:not(.radio--tick):before,iam-table input:is([type=radio],[type=checkbox])+label:not(.radio--tick):after{top:.25rem !important;left:0 !important}iam-table:has([type=checkbox]:checked) tr:has([type=checkbox]) [type=checkbox]{width:100%;height:100%;max-height:100%;max-width:100%;margin-top:-2rem}}iam-table.table--fullwidth:not([data-expandable]) th.expand-button-heading{display:none}iam-table.table--fullwidth:not([data-expandable]) td:has([data-expand-button]){display:none}@container (width > 23.4375em){iam-table:not([data-expandable]) th.expand-button-heading{display:none}iam-table:not([data-expandable]) td.td--expand{display:none}iam-table[data-expandable] [data-expand-button]{margin:0}iam-table[data-expandable] [data-expand-button]:before{font-family:"Font Awesome 6 Pro";content:"\uF078";font-weight:500}iam-table[data-expandable] [data-expand-button][aria-expanded]:before{content:"\uF077"}iam-table[data-expandable] tr:not([data-view=full]) td p{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}}@container (width < 23.4375em){iam-table:not(.table--fullwidth) .td--fixed+td:not(.td--fixed){border-top:none}}@container (width > 23.4375em){iam-table{--width-adjust: 0px}iam-table:has([type=checkbox]){--width-adjust: -1rem}iam-table .th--fixed{min-width:calc(4.5rem + var(--width-adjust));position:absolute;padding:0}iam-table .th--fixed:after{top:auto;left:0;content:"";position:absolute;width:100%;height:calc(var(--row-height) - 2px);background:linear-gradient(90deg, var(--row-bg) calc(100% - 1.5rem), transparent 100%)}iam-table .td--fixed{position:absolute;position:absolute;left:auto;top:auto;z-index:3;padding:0;min-width:4.5rem;height:calc(var(--row-height) - 2px);text-align:left;background:linear-gradient(90deg, var(--row-bg) calc(100% - 1.5rem), transparent 100%)}iam-table .td--fixed:has([open]){z-index:4}iam-table tr:is(:hover,:focus) .td--fixed{background:linear-gradient(90deg, var(--row-bg) calc(100% - 1.5rem), transparent 100%)}iam-table tr:has([data-expand-button]){height:calc(4.625rem - 2px)}iam-table .th--fixed+th:not(.th--fixed),iam-table .td--fixed+td:not(.td--fixed){padding-left:calc(4.5rem + var(--width-adjust))}iam-table .th--fixed:not(.expand-button-heading)+.th--fixed+th:not(.th--fixed),iam-table .td--fixed:not(.td--expand)+.td--fixed+td:not(.td--fixed){padding-left:calc(7.75rem + var(--width-adjust))}iam-table[data-expandable] .th--fixed+.th--fixed+th:not(.th--fixed),iam-table[data-expandable] .td--fixed+.td--fixed+td:not(.td--fixed){padding-left:calc(7.75rem + var(--width-adjust))}iam-table .th--fixed+.th--fixed,iam-table .td--fixed+.td--fixed{padding-left:calc(3.25rem + var(--width-adjust));min-width:calc(7.75rem + var(--width-adjust))}iam-table .th--fixed:has(+.th--fixed),iam-table .td--fixed:has(+.td--fixed){min-width:calc(3.25rem + var(--width-adjust));z-index:5}iam-table .dialog__wrapper{z-index:10}iam-table .dialog__wrapper:has([open]){z-index:20}iam-table[data-expandable] input:is([type=radio],[type=checkbox])+label:before,iam-table[data-expandable] input:is([type=radio],[type=checkbox])+label:after{left:1.25rem !important}iam-table:not([data-expandable]) th.expand-button-heading+th{padding-left:0 !important}iam-table:not([data-expandable]) td.td--expand+td{padding-left:0 !important}iam-table:not([data-expandable]) th.expand-button-heading+.th--fixed{min-width:calc(4.5rem + var(--width-adjust)) !important}iam-table:not([data-expandable]) td.td--expand+.td--fixed{min-width:calc(4.5rem + var(--width-adjust)) !important}}/*# sourceMappingURL=assets/css/components/table.extras.css.map */
30
+ `,this.shadowRoot.appendChild(r.content.cloneNode(!0)),document.getElementById("tableExtras")||document.head.insertAdjacentHTML("beforeend",`<style id="tableExtras">*:has(>iam-table){container-type:inline-size}iam-table{--hover-background: var(--colour-light);--row-bg: var(--colour-canvas-2)}iam-table thead tr{background:var(--row-bg)}iam-table tbody tr{background:var(--row-bg)}iam-table tbody tr:is(:hover,:focus-within,.hover){--bg-colour-rgb: 238,238,238;--row-bg: var(--hover-background);background:var(--row-bg)}@media screen and (prefers-color-scheme: dark){iam-table tbody tr{--hover-background: var(--colour-canvas)}iam-table tbody tr:is(:hover,:focus-within,.hover){background:var(--row-bg)}}iam-table[data-expandable] [data-expand-button][aria-expanded]{background-color:rgba(0,0,0,0)}@container (width < 23.4375em){iam-table:not(.table--fullwidth) thead{display:none}iam-table:not(.table--fullwidth) tbody{display:block;overflow:visible}iam-table:not(.table--fullwidth) tbody tr td:first-child{padding-top:0}iam-table:not(.table--fullwidth) tr{display:block;position:relative;border:none;background:var(--row-bg);padding:var(--wrapper-padding);box-shadow:0px 6px 12px rgba(0,0,0,.11);border-radius:0.5rem}iam-table:not(.table--fullwidth) tr+tr{margin-top:2rem}iam-table:not(.table--fullwidth) tr:is(:hover,:focus,.hover){--row-bg: var(--colour-canvas-2)}iam-table:not(.table--fullwidth) :is(td,th){display:block;border-color:var(--colour-border);padding-right:0}iam-table:not(.table--fullwidth) :is(td,th):nth-child(1){border-top:none}iam-table:not(.table--fullwidth) :is(td,th)[data-label]:not([data-label=""]):before{content:attr(data-label);color:var(--colour-heading);padding:0 0 0.375rem 0;margin-bottom:0;display:block;font-weight:bold}iam-table:not(.table--fullwidth) td:first-child::after{top:1.75rem !important}iam-table:not(.table--fullwidth) td::after{top:2.5rem}iam-table:not(.table--fullwidth) .td--fixed{padding-right:50%}iam-table:not(.table--fullwidth) tbody tr td:not(:first-child){border-top:var(--border-width) solid currentColor;border-color:var(--colour-border) !important}iam-table:not(.table--fullwidth) tr:not([data-view=full]) td p{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}iam-table:not(.table--fullwidth) td:has([data-expand-button]){height:0;padding:0;position:relative}iam-table:not(.table--fullwidth) td:has([data-expand-button])+td{border-top:none !important;padding-top:0 !important}iam-table:not(.table--fullwidth) [data-expand-button]{top:0;right:0;background:rgba(0,0,0,0) !important;border:none;position:absolute;overflow:hidden;--compact-size: 2rem}iam-table:not(.table--fullwidth) [data-expand-button]:before{font-family:"Font Awesome 6 Pro";content:"\uF055";font-weight:300 !important;font-size:1.75rem;line-height:var(--compact-size) !important}iam-table:not(.table--fullwidth) [data-expand-button][aria-expanded]:before{content:"\uF056";font-weight:900 !important}iam-table:not(.table--fullwidth) .dialog__wrapper{margin-top:-0.5rem;margin-left:-1rem;z-index:10}iam-table:not(.table--fullwidth) tbody tr:not([data-view=full]) td:not(.td--fixed)+td:not(.td--fixed)+td+td{display:none}iam-table.table--cta:not(.table--fullwidth) tr td:not(:first-child):last-child{display:block !important;position:static;width:100%;min-width:100%;margin-left:0;padding-left:0;text-align:left;min-height:0}iam-table.table--cta:not(.table--fullwidth) tr td:not(:first-child):last-child:after{display:none}}@container (width > 23.4375em){iam-table.table--cta:not(.table--loading):has(tr:first-child td:first-child:last-child){padding-right:calc(var(--wrapper-padding) + 1.5rem)}iam-table.table--cta:not(.table--loading):not(:has(tr:first-child td:first-child:last-child)) tr>th:nth-last-child(2),iam-table.table--cta:not(.table--loading):not(:has(tr:first-child td:first-child:last-child)) tr>td:nth-last-child(2){padding-right:var(--cta-width)}iam-table.table--cta:not(.table--loading):not(:has(tr:first-child td:first-child:last-child)) tr>*:not(:first-child):last-child{position:absolute;left:calc(100% - var(--cta-width));top:auto;background:rgba(0,0,0,0);width:var(--cta-width);min-height:calc(var(--row-height) - 2px);text-align:right;background:linear-gradient(90deg, transparent 0%, var(--row-bg) 1.25rem);cursor:default}@media screen and (prefers-color-scheme: dark){iam-table.table--cta:not(.table--loading):not(:has(tr:first-child td:first-child:last-child)) tr>*:not(:first-child):last-child{background:linear-gradient(90deg, transparent 0%, var(--row-bg) 1.25rem)}}iam-table.table--cta:not(.table--loading):not(:has(tr:first-child td:first-child:last-child)) tr>*:not(:first-child):last-child a{white-space:nowrap;padding-right:.2rem}iam-table.table--cta:not(.table--loading):not(:has(tr:first-child td:first-child:last-child)) tbody tr:hover>*:not(:first-child):last-child{background:linear-gradient(90deg, transparent 0%, var(--row-bg) 1.25rem)}}iam-table:is(.mh-sm,.mh-md,.mh-lg):not(.table--cta){position:relative}iam-table:is(.mh-sm,.mh-md,.mh-lg):not(.table--cta) thead{position:sticky;top:0;left:0;z-index:1;background-color:var(--row-bg)}iam-table:is(.mh-sm,.mh-md,.mh-lg):not(.table--cta) thead:before{content:"";position:absolute;bottom:0;left:0;width:100%;height:2px;background:var(--colour-primary)}iam-table:is(.mh-sm,.mh-md,.mh-lg):not(.table--cta) tbody{position:relative}iam-table:is(.mh-sm,.mh-md,.mh-lg):not(.table--cta) tbody tr:first-child td{border-top:0}iam-table:is(.mh-sm,.mh-md,.mh-lg):not(.table--cta) tbody tr:last-child td{border-bottom:0}table :is([data-content=low],[data-content=medium],[data-content=high],[data-content=unknown],[data-content=due],[data-content=overdue],[data-content=incomplete],[data-content="requires approval"],[data-content=upcoming],[data-content="approval required"],[data-content=warning],[data-content=verified],[data-content="not started"],[data-content="to do"],[data-content="on track"],[data-content=completed],[data-content=complete],.alert-status:not([data-content="0"]):not([data-content=""]):not(:empty)){position:relative;padding-left:1.5rem}table :is([data-content=low],[data-content=medium],[data-content=high],[data-content=unknown],[data-content=due],[data-content=overdue],[data-content=incomplete],[data-content="requires approval"],[data-content=upcoming],[data-content="approval required"],[data-content=warning],[data-content=verified],[data-content="not started"],[data-content="to do"],[data-content="on track"],[data-content=completed],[data-content=complete],.alert-status:not([data-content="0"]):not([data-content=""]):not(:empty))::before{margin-left:-1.5rem !important}table :is([data-content=low],[data-content=medium],[data-content=high],[data-content=unknown],[data-content=due],[data-content=overdue],[data-content=incomplete],[data-content="requires approval"],[data-content=upcoming],[data-content="approval required"],[data-content=warning],[data-content=verified],[data-content="not started"],[data-content="to do"],[data-content="on track"],[data-content=completed],[data-content=complete],.alert-status:not([data-content="0"]):not([data-content=""]):not(:empty)):after{font-family:"Font Awesome 6 Pro";position:absolute;top:1rem;left:0;font-size:1rem;line-height:1;height:1rem;width:1rem;display:inline-block}table [data-content=high]:after{content:"\uF325";font-weight:normal;color:var(--colour-danger)}table [data-content=medium]:after{content:"\uF7A4";font-weight:normal;color:var(--colour-warning)}table [data-content=low]:after{content:"\uE404";font-weight:normal;color:var(--colour-complete)}table [data-content=unknown]:after{content:"\uE404";font-weight:normal;color:var(--colour-muted)}table :is([data-content=overdue],[data-content=due],[data-content=incomplete]):after{content:"\uF024";color:var(--colour-danger)}table :is([data-content="not started"],[data-content="to do"],[data-content="on track"]):after{content:"\uF024";color:var(--colour-muted)}table :is([data-content="requires approval"],[data-content="approval required"],[data-content=upcoming]):after{content:"\uF024";color:var(--colour-warning)}table :is([data-content=warning]):after{content:"\uF071";color:var(--colour-warning)}table :is([data-content=verified],[data-content=completed],[data-content=complete]):after{content:"\uF00C";font-weight:normal;color:var(--colour-complete)}table .alert-status:not([data-content="0"]):not([data-content=""]):not(:empty):after{content:"\uF0F3";color:var(--colour-primary)}iam-table .table--filtered tbody tr:not(.filtered--show){display:none !important}iam-table table:not(.table--filtered):not(.table--ajax) tbody tr:nth-child(15)~tr{display:none}iam-table input:is([type=radio],[type=checkbox])+label:not(.radio--tick){padding-left:0 !important;margin:0 !important}iam-table input:is([type=radio],[type=checkbox])+label:not(.radio--tick):before,iam-table input:is([type=radio],[type=checkbox])+label:not(.radio--tick):after{top:.75rem !important;left:.25rem !important}iam-table:has([type=checkbox]:checked) tr:has([type=checkbox]) [type=checkbox]{width:100vw;height:100%;max-height:var(--row-height);max-width:100vw;cursor:pointer;pointer-events:all;top:auto;margin:0;margin-top:0rem}iam-table tr:has([type=checkbox]:checked){--row-bg: #E0E0E0}@media screen and (prefers-color-scheme: dark){iam-table tr:has([type=checkbox]:checked){--row-bg: #000000}}@container (width < 23.4375em){@media screen and (prefers-color-scheme: light){iam-table:has([slot=before]) iam-actionbar{background-color:#e6eaec}}iam-table:has([slot=before]) .actionbar__sticky+*{margin-top:0 !important}iam-table input:is([type=radio],[type=checkbox])+label:not(.radio--tick){padding-left:0 !important;margin:0 !important;min-height:2rem}iam-table input:is([type=radio],[type=checkbox])+label:not(.radio--tick):before,iam-table input:is([type=radio],[type=checkbox])+label:not(.radio--tick):after{top:.25rem !important;left:0 !important}iam-table:has([type=checkbox]:checked) tr:has([type=checkbox]) [type=checkbox]{width:100%;height:100%;max-height:100%;max-width:100%;margin-top:-2rem}}iam-table.table--fullwidth:not([data-expandable]) th.expand-button-heading{display:none}iam-table.table--fullwidth:not([data-expandable]) td:has([data-expand-button]){display:none}@container (width > 23.4375em){iam-table:not([data-expandable]) th.expand-button-heading{display:none}iam-table:not([data-expandable]) td.td--expand{display:none}iam-table[data-expandable] [data-expand-button]{margin:0}iam-table[data-expandable] [data-expand-button]:before{font-family:"Font Awesome 6 Pro";content:"\uF078";font-weight:500}iam-table[data-expandable] [data-expand-button][aria-expanded]:before{content:"\uF077"}iam-table[data-expandable] tr:not(:has(p)) [data-expand-button]{display:none}iam-table[data-expandable] tr:not([data-view=full]) td p{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}}@container (width < 23.4375em){iam-table:not(.table--fullwidth) .td--fixed+td:not(.td--fixed){border-top:none}}@container (width > 23.4375em){iam-table{--width-adjust: 0px}iam-table:has([type=checkbox]){--width-adjust: -1rem}iam-table .th--fixed{min-width:calc(4.5rem + var(--width-adjust));position:absolute;padding:0}iam-table .th--fixed:after{top:auto;left:0;content:"";position:absolute;width:100%;height:calc(var(--row-height) - 2px);background:linear-gradient(90deg, var(--row-bg) calc(100% - 1.5rem), transparent 100%)}iam-table .td--fixed{position:absolute;position:absolute;left:auto;top:auto;z-index:3;padding:0.25rem 0 0 0;min-width:4.5rem;height:calc(var(--row-height) - 2px);text-align:left;background:linear-gradient(90deg, var(--row-bg) calc(100% - 1.5rem), transparent 100%)}iam-table .td--fixed:has([open]){z-index:4}iam-table tr:is(:hover,:focus) .td--fixed{background:linear-gradient(90deg, var(--row-bg) calc(100% - 1.5rem), transparent 100%)}iam-table tr:has([data-expand-button]){height:calc(4.625rem - 2px)}iam-table .th--fixed+th:not(.th--fixed),iam-table .td--fixed+td:not(.td--fixed){padding-left:calc(4.5rem + var(--width-adjust))}iam-table .th--fixed:not(.expand-button-heading)+.th--fixed+th:not(.th--fixed),iam-table .td--fixed:not(.td--expand)+.td--fixed+td:not(.td--fixed){padding-left:calc(7.75rem + var(--width-adjust))}iam-table[data-expandable] .th--fixed+.th--fixed+th:not(.th--fixed),iam-table[data-expandable] .td--fixed+.td--fixed+td:not(.td--fixed){padding-left:calc(7.75rem + var(--width-adjust))}iam-table .th--fixed+.th--fixed,iam-table .td--fixed+.td--fixed{padding-left:calc(3.25rem + var(--width-adjust));min-width:calc(7.75rem + var(--width-adjust))}iam-table .th--fixed:has(+.th--fixed),iam-table .td--fixed:has(+.td--fixed){min-width:calc(3.25rem + var(--width-adjust));z-index:5}iam-table .dialog__wrapper{z-index:10}iam-table .dialog__wrapper:has([open]){z-index:20}iam-table[data-expandable] input:is([type=radio],[type=checkbox])+label:before,iam-table[data-expandable] input:is([type=radio],[type=checkbox])+label:after{left:1.25rem !important}iam-table:not([data-expandable]) th.expand-button-heading+th{padding-left:0 !important}iam-table:not([data-expandable]) td.td--expand+td{padding-left:0 !important}iam-table:not([data-expandable]) th.expand-button-heading+.th--fixed{min-width:calc(4.5rem + var(--width-adjust)) !important}iam-table:not([data-expandable]) td.td--expand+.td--fixed{min-width:calc(4.5rem + var(--width-adjust)) !important}}/*# sourceMappingURL=assets/css/components/table.global.css.map */
31
31
  </style>`)}connectedCallback(){const e=new URLSearchParams(window.location.search);this.hasAttribute("data-total")||this.setAttribute("data-total",this.querySelectorAll("table tbody tr").length),this.hasAttribute("data-page")||this.setAttribute("data-page",e.has("page")?e.get("page"):1),this.hasAttribute("data-show")||this.setAttribute("data-show",e.has("show")?e.get("show"):15),this.hasAttribute("data-increment")||this.setAttribute("data-increment",this.getAttribute("data-show"));let o=this.classList.toString();if(o=o.replace("table--cta",""),o=o.replace("table--loading",""),this.shadowRoot.querySelector(".table__wrapper").className+=` ${o}`,this.querySelector(".actionbar__sticky")&&this.shadowRoot.querySelector(".table__wrapper").classList.add("has-actionbar"),this.table=this.querySelector("table"),this.savedTableBody=this.table.querySelector("tbody").cloneNode(!0),this.pagination=this.shadowRoot.querySelector("iam-pagination"),this.pagination.setAttribute("data-total",this.getAttribute("data-total")),this.pagination.setAttribute("data-page",this.getAttribute("data-page")),this.pagination.setAttribute("data-show",this.getAttribute("data-show")),this.pagination.setAttribute("data-increment",this.getAttribute("data-show")),this.hasAttribute("data-page-jump")&&this.pagination.setAttribute("data-page-jump","true"),this.hasAttribute("data-per-page")&&this.pagination.setAttribute("data-per-page","true"),this.hasAttribute("data-item-count")&&this.pagination.setAttribute("data-item-count","true"),this.hasAttribute("data-loading")&&this.pagination.setAttribute("data-loading","true"),this.classList.contains("table--fullwidth")&&this.pagination.setAttribute("data-minimal","true"),this.classList.contains("table--cta")||this.shadowRoot.querySelector(".table--cta").classList.remove("table--cta"),this.form=document.createElement("form"),this.hasAttribute("data-filterby")?this.form=document.querySelector(`#${this.getAttribute("data-filterby")}`):this.table.parentNode.insertBefore(this.form,this.table.nextSibling),this.form.hasAttribute("data-ajax")&&this.table.classList.add("table--ajax"),N(this.table,this.form),this.form.querySelector("[data-pagination]")||(this.form.innerHTML+=`<input name="page" type="hidden" value="${this.getAttribute("data-page")}" data-pagination="true" />`),this.form.querySelector("[data-show]")||(this.form.innerHTML+=`<input name="show" type="hidden" value="${this.getAttribute("data-show")}" data-show="true" />`),K(this.table),V(this.table,this.form,this.pagination,this,this.savedTableBody),Z(this.table,this.form,this.pagination,this),tt(this.shadowRoot.querySelector("[data-export]"),this.table),this.form.getAttribute("data-ajax"))z(this.table,this.form,this.pagination,this);else{let b=function(i=1){return Math.floor(Math.random()*Date.now()*(i+1))};if(this.querySelector("iam-actionbar[data-selectall]")){const i=this.querySelector("iam-actionbar[data-selectall]");Array.from(this.table.querySelectorAll("thead tr")).forEach((n,d)=>{n.insertAdjacentHTML("afterbegin",'<th class="th--fixed"></th>')}),Array.from(this.table.querySelectorAll("tbody tr")).forEach((n,d)=>{let t=`row${b(d)}`;n.insertAdjacentHTML("afterbegin",`<td class="td--fixed selectrow"><input type="checkbox" name="row" id="${t}"/><label for="${t}"><span class="visually-hidden">Select row</span></label></td>`)}),this.table.addEventListener("change",n=>{if(n&&n.target instanceof HTMLElement&&n.target.closest(".selectrow input")){let d=this.table.querySelectorAll('.selectrow input[type="checkbox"]').length,t=this.table.querySelectorAll('.selectrow input[type="checkbox"]:checked').length;i.setAttribute("data-selected",d==t?"all":t)}}),i.addEventListener("selected",n=>{n.detail.selected=="0"?Array.from(this.table.querySelectorAll('.selectrow input[type="checkbox"]')).forEach((d,t)=>{d.checked=!1}):n.detail.selected=="all"&&Array.from(this.table.querySelectorAll('.selectrow input[type="checkbox"]')).forEach((d,t)=>{d.checked=!0})})}let c=-1;Array.from(this.table.querySelectorAll("tbody tr")).forEach((i,n)=>{if(i.querySelector(":scope > td > .dialog__wrapper")){let d=i.querySelector(":scope > td > .dialog__wrapper").parentNode;d.classList.add("td--fixed"),c=Array.from(d.parentNode.children).indexOf(d)}}),c!=-1&&(this.table.querySelector(`thead tr th:nth-child(${c+1})`).classList.add("th--fixed"),Array.from(this.table.querySelectorAll(`tbody tr td:nth-child(${c+1})`)).forEach((i,n)=>{i.classList.add("td--fixed")})),I(this.table,this.form,this.pagination,this),C(this.table,this.form,this),E(this.table,this.form)}this.shadowRoot.querySelector(".table__wrapper").addEventListener("scroll",b=>{this.table.querySelector("dialog[open]")&&(this.table.querySelector("dialog[open]").close(),this.table.querySelector(".dialog__wrapper > button.active").classList.remove("active"))})}static get observedAttributes(){return["data-total","data-page","data-show"]}attributeChangedCallback(e,o,r){switch(this.pagination=this.shadowRoot.querySelector("iam-pagination"),e){case"data-total":{o!=r&&this.pagination.setAttribute("data-total",r);break}case"data-show":{o!=r&&this.pagination.setAttribute("data-show",r);break}case"data-page":{o!=r&&this.pagination.setAttribute("data-page",r);break}}}}export{at as default};
32
32
  //# sourceMappingURL=table.component.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.component.min.js","sources":["../../modules/helpers.js","../../modules/table.js","table.component.js"],"sourcesContent":["// @ts-nocheck\n/**\n * Global helper functions to help maintain and enhance framework elements.\n * @module Helpers\n */\n/**\n * Add global classes used by the CSS and later JavaScript.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addBodyClasses = (body) => {\n body.classList.add(\"js-enabled\");\n if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {\n body.classList.add(\"ie\");\n }\n return null;\n};\n/**\n * Add global events.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addGlobalEvents = (body) => {\n const checkElements = function (hash) {\n const label = document.querySelector(`label[for=\"${hash.replace('#', '')}\"]`);\n const summary = document.querySelector(hash + ' summary');\n const dialog = document.querySelector(`dialog${hash}`);\n if (label instanceof HTMLElement)\n label.click();\n else if (summary instanceof HTMLElement)\n summary.click();\n else if (dialog instanceof HTMLElement)\n dialog.showModal();\n };\n if (location.hash)\n checkElements(location.hash);\n window.addEventListener('hashchange', function () { checkElements(location.hash); }, false);\n addEventListener(\"popstate\", (event) => {\n if (event && event.state.type && event.state.type == \"pagination\") {\n let form = document.querySelector(`#${event.state.form}`);\n let pageInput = document.querySelector(`#${event.state.form} [data-pagination]`);\n if (pageInput)\n pageInput.value = event.state.page;\n else\n form.innerHTML += `<input name=\"page\" type=\"hidden\" data-pagination=\"true\" value=\"${event.state.page}\" />`;\n form.dispatchEvent(new Event(\"submit\"));\n }\n });\n document.addEventListener(\"submit\", (event) => {\n if (event && event.target instanceof HTMLElement && event.target.matches('form')) {\n let form = event.target;\n if (form.querySelector(':invalid')) {\n form.classList.add('was-validated');\n event.preventDefault();\n }\n }\n });\n return null;\n};\nexport const isNumeric = function (str) {\n if (typeof str != \"string\")\n return false; // we only process strings! \n return !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...\n !isNaN(parseFloat(str)); // ...and ensure strings of whitespace fail\n};\nexport const zeroPad = (num, places) => String(num).padStart(places, '0');\nexport const ucfirst = (str) => str.charAt(0).toUpperCase() + str.slice(1);\nexport const ucwords = (str) => str.split(' ').map(s => ucfirst(s)).join(' ');\nexport const unsnake = (str) => str.replace(/_/g, ' ');\nexport const snake = (str) => str.replace(/ /g, '_');\nexport const safeID = function (str) {\n str = str.toLowerCase();\n str = snake(str);\n str = str.replace(/\\W/g, '');\n return str;\n};\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n// @ts-nocheck\nimport { zeroPad, isNumeric, ucfirst } from \"./helpers.js\";\n// Basic functionality needed\nexport const addDataAttributes = (table) => {\n const colHeadings = Array.from(table.querySelectorAll('thead th'));\n const colRows = Array.from(table.querySelectorAll('tbody tr'));\n colRows.forEach((row, index) => {\n const cells = Array.from(row.querySelectorAll('th, td'));\n const statuses = ['0', 'low', 'medium', 'high', 'unknown', 'n/a', 'pending', 'verified', 'due', 'overdue', 'incomplete', 'complete', 'completed', 'approval required', 'upcoming', 'requires approval', 'to do', 'on track', 'not started', 'warning', 'error'];\n cells.forEach((cell, cellIndex) => {\n const heading = colHeadings[cellIndex];\n if (typeof heading != \"undefined\") {\n let tempDiv = document.createElement(\"div\");\n tempDiv.innerHTML = heading.innerHTML;\n let headingText = tempDiv.textContent || tempDiv.innerText || \"\";\n cell.setAttribute('data-label', headingText);\n if (heading.hasAttribute('data-td-class'))\n cell.setAttribute('class', heading.getAttribute('data-td-class'));\n if (heading.hasAttribute('data-format')) {\n cell.setAttribute('data-format', heading.getAttribute('data-format'));\n cell.innerHTML = formatCell(heading.getAttribute('data-format'), cell.textContent.trim()); //Make sure date format is consistent\n }\n if (statuses.includes(cell.textContent.trim().toLowerCase())) {\n cell.setAttribute('data-content', cell.textContent.trim().toLowerCase());\n }\n }\n });\n });\n};\nexport const getLargestLastColWidth = (table) => {\n let largestWidth = 0;\n Array.from(table.querySelectorAll('tbody tr')).forEach((row, index) => {\n let htmlStyles = window.getComputedStyle(document.querySelector('html'));\n let lastColChild = row.querySelector(':scope > *:last-child > *:first-child');\n if (lastColChild) {\n lastColChild.classList.add('text-nowrap');\n let responsiveWidth = lastColChild.offsetWidth / parseFloat(htmlStyles.fontSize);\n responsiveWidth += 1.7;\n largestWidth = largestWidth > responsiveWidth ? largestWidth : responsiveWidth;\n }\n });\n return largestWidth;\n};\nexport const createMobileButton = (table, wrapper) => {\n if (wrapper.classList.contains('.table--fullwidth') && !wrapper.hasAttribute('data-expandable'))\n return false;\n if (table.querySelectorAll('thead tr th').length < 4 && !wrapper.hasAttribute('data-expandable'))\n return false;\n Array.from(table.querySelectorAll('thead tr')).forEach((row, index) => {\n row.insertAdjacentHTML('afterbegin', `<th class=\"th--fixed expand-button-heading\"></th>`);\n });\n Array.from(table.querySelectorAll('tbody tr')).forEach((row, index) => {\n const preExpanded = row.getAttribute('data-view') === 'full' ? 'aria-expanded' : '';\n row.insertAdjacentHTML('afterbegin', `<td class=\"td--fixed td--expand\"><button class=\"btn btn-compact btn-secondary\" data-expand-button ${preExpanded}>Expand</button></td>`);\n });\n};\nexport const addTableEventListeners = (table) => {\n table.addEventListener('click', (event) => {\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-expand-button]')) {\n let button = event.target.closest('[data-expand-button]');\n let tableRow = button.closest('tr');\n button.toggleAttribute('aria-expanded');\n if (tableRow.getAttribute('data-view') == \"full\")\n tableRow.setAttribute('data-view', 'default');\n else\n tableRow.setAttribute('data-view', 'full');\n button.blur();\n }\n ;\n });\n};\n// Filters\nexport const createSearchDataList = (table, form) => {\n let searchInput = form.querySelector('[data-search]');\n if (!searchInput)\n return false;\n const searchID = searchInput.getAttribute('id');\n const searchableColumns = searchInput.getAttribute('data-search').split(',');\n let inputWrapper = searchInput.parentNode;\n let searchableTerms = {};\n searchableColumns.forEach((columnHeading, index) => {\n Array.from(table.querySelectorAll('td[data-label=\"' + columnHeading.trim() + '\"]')).forEach((td, index) => {\n if (td.querySelector('.td__content'))\n searchableTerms[td.querySelector('.td__content').textContent] = td.querySelector('.td__content').textContent;\n else\n searchableTerms[td.textContent] = td.textContent;\n });\n });\n searchInput.setAttribute('list', `${searchID}_list`);\n searchInput.setAttribute('autocomplete', 'off');\n if (!inputWrapper.querySelector('datalist'))\n inputWrapper.innerHTML += `<datalist id=\"${searchID}_list\"></datalist>`;\n inputWrapper.querySelector('datalist').innerHTML = `${Object.keys(searchableTerms).map(term => `<option value=\"${term}\"></option>`).join(\"\")}`;\n};\nexport const addFilterEventListeners = (table, form, pagination, wrapper, savedTableBody) => {\n var timer;\n // Check what conditions are set on the table to see what the form actions are\n let formSubmit = function (event, paginate = false) {\n if (form.classList.contains('processing'))\n return false;\n // Before submitting check if any duplicate checkboxes within the filters dialog needs to upset the original input\n if (event.type == \"submit\") {\n form.classList.add('processing');\n Array.from(form.querySelectorAll('[data-duplicate]')).forEach((element, index) => {\n const id = element.getAttribute('data-duplicate');\n const input = document.getElementById(id);\n const card = document.querySelector(`[for=\"${id}\"] iam-card`);\n if (input.checked != element.checked) {\n if (card) {\n let clickEvent = new Event('click');\n card.dispatchEvent(clickEvent);\n }\n else {\n input.checked = element.checked;\n }\n }\n });\n form.classList.remove('processing');\n }\n if (form.hasAttribute('data-ajax')) {\n // Default back to page 1\n if (!paginate) {\n let paginationInput = form.querySelector('[data-pagination]');\n paginationInput.value = 1;\n wrapper.setAttribute('data-page', 1);\n }\n loadAjaxTable(table, form, pagination, wrapper);\n }\n else if (form.hasAttribute('data-submit'))\n form.submit();\n else {\n filterTable(table, form, wrapper);\n populateDataQueries(table, form);\n }\n // Pass post data back to the page\n if (form.hasAttribute('data-ajax-post')) {\n let formData = new FormData(form);\n let queryString = new URLSearchParams(formData).toString();\n const http = new XMLHttpRequest();\n http.open('GET', `${window.location.href}?ajax=true&${queryString}`);\n http.send();\n }\n };\n form.addEventListener('keyup', (event) => {\n clearTimeout(timer);\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-search]')) {\n timer = setTimeout(function () {\n formSubmit(event);\n }, 500);\n }\n ;\n });\n form.addEventListener('change', (event) => {\n clearTimeout(timer);\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-sort]')) {\n if (!form.hasAttribute('data-submit'))\n sortTable(table, form, savedTableBody);\n formSubmit(event);\n }\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-search]')) {\n formSubmit(event);\n }\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-filter][data-no-ajax]')) { // Allow for input fields to filter the current results without a new ajax call\n filterTable(table, form, wrapper);\n populateDataQueries(table, form);\n }\n else if (event && event.target instanceof HTMLElement && event.target.closest('[data-filter]') && event.target.closest('form .dialog__wrapper > dialog')) {\n formSubmit(event);\n }\n else if (event && event.target instanceof HTMLElement && event.target.closest('[data-filter]') && !event.target.closest('form dialog')) {\n formSubmit(event);\n }\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-show]')) {\n formSubmit(event);\n }\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-mimic]')) {\n formSubmit(event);\n }\n });\n form.addEventListener('click', (event) => {\n clearTimeout(timer);\n if (event && event.target instanceof HTMLElement && event.target.closest('dialog button:not([type=\"button\"])')) {\n let button = event.target.closest('dialog button:not([type=\"button\"])');\n let modal = button.closest('dialog');\n modal.close();\n }\n // Prevent the form from submitting\n if (event && event.target instanceof HTMLElement && event.target.closest('.dialog__close')) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-clear]')) {\n form.classList.add('processing');\n // Make sure any applied filters have been removed\n Array.from(form.querySelectorAll('.applied-filters')).forEach((filters, index) => {\n filters.innerHTML = \"\";\n });\n // Make sure cards are unlicked\n let frm_elements = form.elements;\n for (let i = 0; i < frm_elements.length; i++) {\n let field_type = frm_elements[i].type.toLowerCase() ? frm_elements[i].type.toLowerCase() : \"text\";\n switch (field_type) {\n case \"text\":\n case \"password\":\n case \"textarea\":\n frm_elements[i].value = \"\";\n break;\n case \"radio\":\n case \"checkbox\":\n if (frm_elements[i].checked) {\n let input = frm_elements[i];\n let id = input.getAttribute('id');\n let label = document.querySelector(`[for=\"${id}\"`);\n if (label.querySelector('iam-card')) {\n let card = label.querySelector('iam-card');\n let clickEvent = new Event('click');\n card.dispatchEvent(clickEvent);\n }\n input.checked = false;\n }\n break;\n case \"select-one\":\n case \"select-multi\":\n frm_elements[i].selectedIndex = -1;\n break;\n case \"hidden\":\n default:\n break;\n }\n }\n form.classList.remove('processing');\n if (!form.hasAttribute('data-submit'))\n sortTable(table, form, savedTableBody);\n formSubmit(event);\n }\n });\n form.addEventListener('submit', (event) => {\n clearTimeout(timer);\n if (!form.hasAttribute('data-submit'))\n event.preventDefault();\n formSubmit(event);\n });\n form.addEventListener('force', (event) => {\n formSubmit(event);\n });\n form.addEventListener('paginate', (event) => {\n formSubmit(event, true);\n });\n // Mmimic fields\n let forms = [];\n let fields = [];\n // Collect the forms that we need to add an event listener for.\n Array.from(form.querySelectorAll('[data-mimic]')).forEach((input, index) => {\n let mimicField = input.getAttribute('data-mimic');\n Array.from(document.querySelectorAll(`[name=\"${mimicField}\"]`)).forEach((mimicInput, index) => {\n let parentForm = mimicInput.closest('form');\n if (!forms.includes(parentForm))\n forms.push(parentForm);\n if (!fields.includes(mimicField))\n fields.push(mimicField);\n });\n });\n // For each form add change listener\n forms.forEach((parentForm, index) => {\n const updateMimicInput = function () {\n let mimickedAlready = [];\n let formData = new FormData(parentForm);\n let i = 1;\n for (const [key, value] of formData) {\n if (document.querySelector(`[data-mimic=\"${key}\"]`) && !mimickedAlready.includes(key)) {\n mimickedAlready.push(key);\n document.querySelector(`[data-mimic=\"${key}\"]`).value = value;\n }\n else if (document.querySelector(`[data-mimic=\"${key}\"]`))\n document.querySelector(`[data-mimic=\"${key}\"]`).value += \",\" + value;\n i++;\n }\n for (const value of mimickedAlready) {\n const event = new Event(\"force\");\n form.dispatchEvent(event);\n }\n // Check for empties\n for (const field of fields) {\n if (!formData.has(field) && parentForm.querySelector(`[name=\"${field}\"]`)) {\n document.querySelector(`[data-mimic=\"${field}\"]`).value = \"\";\n const event = new Event(\"force\");\n form.dispatchEvent(event);\n }\n }\n };\n parentForm.addEventListener('force', (event) => {\n updateMimicInput();\n });\n parentForm.addEventListener('change', (event) => {\n updateMimicInput();\n });\n });\n};\nexport const sortTable = (table, form, savedTableBody) => {\n if (form.getAttribute('data-ajax')) {\n return false;\n }\n let tbody = table.querySelector('tbody');\n let select = form.querySelector('[data-sort]');\n let selectedOption = select.querySelector(`option:nth-child(${select.selectedIndex + 1})`);\n let sortBy = selectedOption.getAttribute('data-sort');\n let order = selectedOption.getAttribute('data-order');\n let format = selectedOption.getAttribute('data-format');\n if (!sortBy) {\n tbody.innerHTML = savedTableBody.innerHTML;\n addDataAttributes(table);\n return false;\n }\n let orderArray = [];\n if (!['asc', 'desc', 'descending'].includes(order)) {\n orderArray = order.split(',');\n }\n // Create an array from the table rows, the index created is then used to sort the array\n let tableArr = [];\n Array.from(tbody.querySelectorAll('tr')).forEach((tableRow, index) => {\n let rowIndex = tableRow.querySelector('td[data-label=\"' + sortBy + '\"], th[data-label=\"' + sortBy + '\"]').textContent.trim();\n if (tableRow.querySelector('[data-label=\"' + sortBy + '\"] .td__content'))\n rowIndex = tableRow.querySelector('[data-label=\"' + sortBy + '\"] .td__content').textContent.trim();\n // If a predefined order set replace the search term with an ordered numeric value so it can be sorted\n if (orderArray.length && orderArray.includes(rowIndex)) {\n rowIndex = orderArray.indexOf(rowIndex);\n }\n if (isNumeric(rowIndex))\n rowIndex = zeroPad(rowIndex, 10);\n // If the sort format is date then lets transform the index to a sortable date (this is never displayed)\n if (format && format == \"date\")\n rowIndex = new Date(rowIndex);\n const dataRow = {\n index: rowIndex,\n row: tableRow\n };\n tableArr.push(dataRow);\n });\n // Sort array alphabetically\n tableArr.sort((a, b) => (a.index > b.index) ? 1 : -1);\n // Reverse if descending\n if (order == \"descending\" || order == \"desc\")\n tableArr = tableArr.reverse();\n // Create a string to return and populate the tbody\n let strTbody = '';\n tableArr.forEach((tableRow, index) => {\n strTbody += tableRow.row.outerHTML;\n });\n tbody.innerHTML = strTbody;\n};\nexport const filterTable = (table, form, wrapper) => {\n table.classList.remove('table--filtered');\n let filters = filterFilters(form);\n let searches = [];\n let matched = 0;\n let page = form.querySelector('[data-pagination]') ? parseInt(form.querySelector('[data-pagination]').value) : 1;\n let showRows = form.querySelector('[data-show]') ? parseInt(form.querySelector('[data-show]').value) : 15;\n // Reset\n Array.from(table.querySelectorAll('tbody tr')).forEach((row, index) => {\n row.classList.remove('filtered');\n row.classList.remove('filtered--matched');\n row.classList.remove('filtered--show');\n row.removeAttribute('data-filtered-by');\n });\n // Add search columns too\n if (form.querySelector('[data-search]')) {\n let searchInput = form.querySelector('[data-search]');\n let searchColumns = form.querySelector('[data-search]').getAttribute('data-search').split(',');\n searchColumns.forEach((column, index) => {\n searches.push({ 'column': `${column.trim()}`, 'value': `${searchInput.value}` });\n });\n }\n //Display the filter count\n Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element, index) => {\n element.innerHTML = '';\n element.parentNode.classList.remove('hover');\n });\n let filterCount = 0;\n Object.values(filters).forEach((filter, index) => {\n if (typeof filter == \"object\" && Object.values(filter).length)\n filterCount += Object.values(filter).length;\n else\n filterCount++;\n });\n if (filterCount) {\n Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element, index) => {\n element.innerHTML += `(${filterCount})`;\n element.parentNode.classList.add('hover');\n });\n }\n // Filter the table\n table.classList.add('table--filtered');\n for (const [key, filterValue] of Object.entries(filters)) {\n Array.from(table.querySelectorAll('tbody tr:not(.filtered)')).forEach((row, index) => {\n let isMatched = false;\n filterValue.forEach((filter, index) => {\n let filterTd = row.querySelector(`[data-label=\"${key}\"]`);\n // Dynamic values\n if (filter && filter == \"$today\")\n filter = formatCell('date', new Date());\n else if (filter && filter == \"$yesterday\") {\n let yesterday = new Date();\n yesterday.setDate(yesterday.getDate() - 1);\n filter = formatCell('date', yesterday);\n }\n else if (filter && (filter == \"$thisWeek\" || filter == \"$lastWeek\")) {\n let today = new Date();\n let mondayThisWeek = new Date(today.setDate(today.getDate() - (today.getDay() - 1)));\n let sundayThisWeek = new Date(today.setDate(today.getDate() - today.getDay() + 7));\n let checkDate = new Date(filterTd.textContent.toLowerCase());\n today.setHours(0, 0, 0, 0);\n mondayThisWeek.setHours(0, 0, 0, 0);\n sundayThisWeek.setHours(0, 0, 0, 0);\n checkDate.setHours(0, 0, 0, 0);\n if (filter == \"$thisWeek\") {\n isMatched = (checkDate >= mondayThisWeek && checkDate <= sundayThisWeek);\n }\n else {\n let mondayLastWeek = new Date(mondayThisWeek.setDate(mondayThisWeek.getDate() - 7));\n let sundayLastWeek = new Date(sundayThisWeek.setDate(sundayThisWeek.getDate() - 7));\n mondayLastWeek.setHours(0, 0, 0, 0);\n sundayLastWeek.setHours(0, 0, 0, 0);\n isMatched = (checkDate >= mondayLastWeek && checkDate <= sundayLastWeek);\n }\n }\n else if (filter && filter == \"$thisMonth\") {\n let today = new Date(), year = today.getFullYear(), month = today.getMonth();\n var firstDayMonth = new Date(year, month, 1);\n var lastDayMonth = new Date(year, month + 1, 0);\n let checkDate = new Date(filterTd.textContent.toLowerCase());\n firstDayMonth.setHours(0, 0, 0, 0);\n lastDayMonth.setHours(0, 0, 0, 0);\n checkDate.setHours(0, 0, 0, 0);\n isMatched = (checkDate >= firstDayMonth && checkDate <= lastDayMonth);\n }\n else if (filter && filter == \"$lastMonth\") {\n let today = new Date(), year = today.getFullYear(), month = today.getMonth();\n var firstDayLastMonth = new Date(year, month - 1, 1);\n var lastDayLastMonth = new Date(year, month, 0);\n let checkDate = new Date(filterTd.textContent.toLowerCase());\n firstDayLastMonth.setHours(0, 0, 0, 0);\n lastDayLastMonth.setHours(0, 0, 0, 0);\n checkDate.setHours(0, 0, 0, 0);\n isMatched = (checkDate >= firstDayLastMonth && checkDate <= lastDayLastMonth);\n }\n if (filterTd && filterTd.textContent.toLowerCase().includes(filter.toLowerCase())) {\n isMatched = true;\n }\n });\n if (!isMatched) {\n row.classList.add('filtered');\n row.setAttribute('data-filtered-by', key);\n }\n });\n }\n // Search whats left of the table after filtering\n Array.from(table.querySelectorAll('tbody tr:not(.filtered)')).forEach((row, index) => {\n let isSearched = searches.length > 0 && searches[0].value.length >= 3 ? false : true;\n searches.forEach((search, index) => {\n let searchTd = row.querySelector(`[data-label=\"${search.column}\"]`);\n if (searchTd && search.value.length >= 3 && searchTd.textContent.toLowerCase().includes(search.value.toLowerCase())) {\n isSearched = true;\n }\n });\n if (!isSearched)\n row.classList.add('filtered');\n });\n // Work out what to display after pagination\n Array.from(table.querySelectorAll('tbody tr:not(.filtered')).forEach((row, index) => {\n matched++;\n row.classList.add('filtered--matched');\n // pagination bit \n let matchesPage = Math.ceil(matched / showRows);\n if (matchesPage == parseInt(page))\n row.classList.add('filtered--show');\n });\n if (wrapper) {\n wrapper.setAttribute('data-total', matched);\n wrapper.setAttribute('data-show', showRows);\n wrapper.setAttribute('data-page', page);\n }\n};\nexport const populateDataQueries = (table, form, wrapper) => {\n const dataQueries = Array.from(form.querySelectorAll('[data-query]'));\n dataQueries.forEach((queryElement, index) => {\n let query = queryElement.getAttribute('data-query');\n let numberOfMatchedRows;\n if (query == 'total') {\n if (wrapper.hasAttribute('data-total'))\n numberOfMatchedRows = wrapper.getAttribute('data-total');\n else\n numberOfMatchedRows = table.classList.contains('table--filtered') ? table.querySelectorAll('tbody tr').length : table.querySelectorAll('tbody tr').length;\n }\n else if (!query.includes(' == ') && query.includes(' & ')) {\n let queries = query.split(' & ');\n let selector = '';\n queries.forEach(element => {\n selector += `:not([data-filtered-by=\"${element}\"])`;\n });\n numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr${selector}`)).length;\n }\n else if (!query.includes(' == ')) {\n numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr:not([data-filtered-by=\"${query}\"])`)).length;\n }\n else if (query.includes(' && ')) {\n let queries = query.split(' && ');\n numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr:not(.filtered)`)).filter(function (row) {\n let matched = true;\n for (const [index, value] of Object.entries(queries)) {\n let queryParts = value.split(' == ');\n if (!row.querySelector(`td[data-label=\"${queryParts[0]}\"]`) || row.querySelector(`td[data-label=\"${queryParts[0]}\"]`).textContent != `${queryParts[1]}`)\n matched = false;\n }\n return matched;\n }).length;\n }\n else {\n let queryParts = query.split(' == ');\n numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr.filtered--matched td[data-label=\"${queryParts[0]}\"], tbody tr[data-filtered-by=\"${queryParts[0]}\"] td[data-label=\"${queryParts[0]}\"]`)).filter(function (element) {\n return element.textContent === queryParts[1];\n }).length;\n }\n if (queryElement.hasAttribute('data-total'))\n queryElement.setAttribute('data-total', numberOfMatchedRows);\n else\n queryElement.innerHTML = numberOfMatchedRows;\n });\n};\n// Pagination\nexport const addPaginationEventListeners = function (table, form, pagination, wrapper) {\n pagination.addEventListener('update-page', (event) => {\n let paginationInput = form.querySelector('[data-pagination]');\n let newPage = event.detail.page;\n // Set the filter value\n paginationInput.value = newPage;\n form.dispatchEvent(new Event(\"paginate\"));\n // Reset the data attribute\n wrapper.setAttribute('data-page', newPage);\n if (table.hasAttribute('data-show-history')) {\n const url = new URL(location);\n url.searchParams.set(\"page\", newPage);\n history.pushState({ 'type': 'pagination', 'form': form.getAttribute('id'), 'page': newPage }, \"\", url);\n }\n // scroll back to the top of the table\n if (!wrapper.hasAttribute('data-no-scroll')) {\n const yOffset = -250;\n const y = table.getBoundingClientRect().top + window.pageYOffset + yOffset;\n window.scrollTo({ top: y, behavior: 'smooth' });\n }\n });\n pagination.addEventListener('update-show', (event) => {\n let showInput = form.querySelector('[data-show]');\n let showRows = event.detail.show;\n showInput.value = showRows;\n wrapper.setAttribute('data-show', showRows);\n form.dispatchEvent(new Event(\"submit\"));\n });\n};\n// Export CSV Data\nexport const addExportEventListeners = (button, table) => {\n if (!button)\n return false;\n button.addEventListener('click', (event) => {\n exportAsCSV(table);\n });\n};\nexport const exportAsCSV = function (table) {\n var csvData = [];\n // Get each row data\n var rows = table.getElementsByTagName('tr');\n for (var i = 0; i < rows.length; i++) {\n // Get each column data\n var cols = rows[i].querySelectorAll('td,th');\n // Stores each csv row data\n var csvRow = [];\n for (var j = 0; j < cols.length; j++) {\n // Get the text data of each cell of a row and push it to csvrow\n csvRow.push(`\"${cols[j].textContent}\"`);\n }\n // Combine each column value with comma\n csvData.push(csvRow.join(\",\"));\n }\n // Combine each row data with new line character\n csvData = csvData.join('\\n');\n // Create CSV file object and feed our csvData into it\n let CSVFile = new Blob([csvData], {\n type: \"text/csv\"\n });\n // Create to temporary link to initiate download process\n var tempLink = document.createElement('a');\n tempLink.download = \"export.csv\";\n var url = window.URL.createObjectURL(CSVFile);\n tempLink.href = url;\n // This link should not be displayed\n tempLink.style.display = \"none\";\n document.body.appendChild(tempLink);\n // Automatically click the link to trigger download\n tempLink.click();\n document.body.removeChild(tempLink);\n};\n// After table is loaded\nexport const makeTableFunctional = function (table, form, pagination, wrapper) {\n addDataAttributes(table);\n createMobileButton(table, wrapper);\n populateDataQueries(table, form, wrapper);\n // Work out the largest width of the CTA's in the last column\n if (wrapper && wrapper.classList.contains('table--cta')) {\n const largestWidth = getLargestLastColWidth(table);\n wrapper.style.setProperty(\"--cta-width\", `${largestWidth}rem`);\n function outputsize() {\n Array.from(table.querySelectorAll('tr')).forEach((row, index) => {\n let rowHeight = row.offsetHeight;\n row.style.setProperty(\"--row-height\", `${rowHeight}px`);\n });\n }\n new ResizeObserver(outputsize).observe(table);\n }\n};\nconst filterFilters = function (form) {\n let filters = new Object();\n // Filter\n let filterInputs = Array.from(form.querySelectorAll('[data-filter]'));\n filterInputs.forEach((filterInput, index) => {\n // Ignore uncked radio inputs\n if (filterInput.type == 'radio' && !filterInput.checked) {\n return;\n }\n if (filterInput.type == 'checkbox' && !filterInput.checked) {\n return;\n }\n if (filterInput && filterInput.value) {\n let dataFilter = filterInput.getAttribute('data-filter');\n if (!filters[dataFilter])\n filters[dataFilter] = new Array();\n filters[dataFilter].push(filterInput.value);\n }\n });\n return filters;\n};\nexport const loadAjaxTable = function (table, form, pagination, wrapper) {\n return __awaiter(this, void 0, void 0, function* () {\n const resolvePath = (object, path, defaultValue) => path.split(/[\\.\\[\\]\\'\\\"]/).filter(p => p).reduce((o, p) => o ? o[p] : defaultValue, object);\n let formData = new FormData(form);\n let queryString = new URLSearchParams(formData).toString();\n let columns = table.querySelectorAll('thead tr th');\n let tbody = table.querySelector('tbody');\n let ajaxURL = form.getAttribute('data-ajax');\n wrapper.classList.add('table--loading');\n // Display the filter count\n let filters = filterFilters(form);\n Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element, index) => {\n element.innerHTML = '';\n element.parentNode.classList.remove('hover');\n });\n let filterCount = 0;\n Object.values(filters).forEach((filter, index) => {\n if (typeof filter == \"object\" && Object.values(filter).length)\n filterCount += Object.values(filter).length;\n else\n filterCount++;\n });\n if (filterCount) {\n Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element, index) => {\n element.innerHTML += `(${filterCount})`;\n element.parentNode.classList.add('hover');\n });\n }\n // Setup controller vars if not already set\n if (!window.controller)\n window.controller = [];\n // Abort if controller already present for this url\n if (window.controller[ajaxURL])\n window.controller[ajaxURL].abort();\n // Create a new controller so it can be aborted if new fetch made\n window.controller[ajaxURL] = new AbortController();\n const { signal } = controller[ajaxURL];\n // Set loading on the pagination\n pagination.setAttribute('data-loading', 'true');\n form.classList.add('processing');\n try {\n yield fetch(ajaxURL + '?' + queryString, {\n signal: signal,\n method: 'get',\n credentials: 'same-origin',\n headers: new Headers({\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'X-Requested-With': 'XMLHttpRequest'\n })\n })\n .then((response) => response.json()).then((response) => {\n let schema = form.hasAttribute('data-schema') ? form.getAttribute('data-schema') : 'data';\n let totalNumberSchema = form.hasAttribute('data-schema-total') ? form.getAttribute('data-schema-total') : 'meta.total';\n let currentPageSchema = form.hasAttribute('data-schema-page') ? form.getAttribute('data-schema-page') : 'meta.current_page';\n let totalNumber = resolvePath(response, totalNumberSchema, 15);\n let currentPage = resolvePath(response, currentPageSchema, 1);\n let data = resolvePath(response, schema);\n let emptyMsg = wrapper.hasAttribute('data-empty-msg') ? wrapper.getAttribute('data-empty-msg') : \"No results found\";\n if (data) {\n tbody.innerHTML = '';\n data.forEach((row, index) => {\n var table_row = document.createElement('tr');\n columns.forEach((col, index) => {\n let cellOutput = '';\n var table_cell = document.createElement('td');\n // Add some data to help with the mobile layout design\n table_cell.setAttribute('data-label', col.innerText);\n if (col.getAttribute('data-output')) {\n var cellTemplate = col.getAttribute('data-output');\n // Use a regex to replace {var} with actual values from the json data\n cellOutput = cellTemplate.replace(new RegExp(/{(.*?)}/, \"gm\"), function (matched) { return resolvePath(row, matched.replace('{', '').replace('}', '')); });\n }\n // If an output array is defined then the content is going to made of of multiple values from an array\n if (col.hasAttribute('data-output-array')) {\n var cellTemplate = col.getAttribute('data-output');\n let arrValue = resolvePath(row, cellTemplate.replace('{', '').replace('}', ''));\n cellOutput = \"\";\n arrValue.forEach((rowValue, i) => {\n let cellTemplateValue = col.getAttribute('data-output-array');\n let cellOutputValue = \"\";\n // If we need to transform some of the data\n if (col.hasAttribute('data-output-array-property') && col.hasAttribute('data-output-array-transform')) {\n const propertyValue = resolvePath(rowValue, col.getAttribute('data-output-array-property'));\n const transforms = JSON.parse(col.getAttribute('data-output-array-transform'));\n const transformValue = transforms[propertyValue];\n cellOutputValue = cellTemplateValue.replace(`{${col.getAttribute('data-output-array-property')}}`, transformValue);\n }\n cellOutputValue = cellOutputValue.replace(new RegExp(/{(.*?)}/, \"gm\"), function (matched) { return resolvePath(rowValue, matched.replace('{', '').replace('}', '')); });\n cellOutput += cellOutputValue;\n });\n }\n if (col.hasAttribute('data-transform')) {\n const transforms = JSON.parse(col.getAttribute('data-transform'));\n cellOutput = transforms[cellOutput];\n if (!cellOutput && col.hasAttribute('data-default'))\n cellOutput = col.getAttribute('data-default');\n }\n table_cell.innerHTML = cellOutput;\n table_row.appendChild(table_cell);\n });\n tbody.appendChild(table_row);\n });\n createSearchDataList(table, form);\n // Add data to the pagination \n wrapper.setAttribute('data-total', parseInt(totalNumber));\n wrapper.setAttribute('data-page', parseInt(currentPage));\n makeTableFunctional(table, form, pagination, wrapper);\n Array.from(form.querySelectorAll('[data-ajax-query]')).forEach((queryElement, index) => {\n let totalNumber = resolvePath(response, queryElement.getAttribute('data-ajax-query'), '');\n if (queryElement.hasAttribute('data-total'))\n queryElement.setAttribute('data-total', totalNumber);\n else\n queryElement.innerHTML = totalNumber;\n });\n if (parseInt(totalNumber) == 0) {\n tbody.innerHTML = `<tr><td colspan=\"100%\"><span>${emptyMsg}</span></td></tr>`;\n }\n wrapper.classList.remove('table--loading');\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n \"event\": \"Ajax table loaded\",\n \"url\": ajaxURL,\n \"formData\": queryString\n });\n }\n else {\n tbody.innerHTML = '<tr><td colspan=\"100%\"><span>Error loading table</span></td></tr>';\n }\n // Remove loading on the pagination\n pagination.removeAttribute('data-loading');\n form.classList.remove('processing');\n });\n }\n catch (error) {\n console.log(error);\n }\n });\n};\nexport const formatCell = (format, cellOutput) => {\n switch (format) {\n case 'datetime':\n return new Date(cellOutput).toLocaleDateString('en-gb', { weekday: 'short', year: \"2-digit\", month: \"long\", day: \"numeric\", }) + \" \" + new Date(cellOutput).toLocaleTimeString(\"en-gb\", { hour: \"2-digit\", minute: \"2-digit\" });\n case 'date':\n return new Date(cellOutput).toLocaleDateString('en-gb', { year: \"2-digit\", month: \"long\", day: \"numeric\" });\n case 'capitalise':\n return cellOutput = ucfirst(cellOutput);\n }\n};\n","// @ts-nocheck\nimport * as tableModule from \"../../modules/table.js\";\nclass iamTable extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';\n const coreCSS = document.body.hasAttribute('data-core-css') ? document.body.getAttribute('data-core-css') : `${assetLocation}/css/core.min.css`;\n const loadCSS = `@import \"${assetLocation}/css/components/table.css\";`;\n const loadExtraCSS = `@import \"${assetLocation}/css/components/table.extras.css\";`;\n const template = document.createElement('template');\n template.innerHTML = `\n <style>\n @import \"${coreCSS}\";\n ${loadCSS}\n\n :host(.mh-sm){\n max-height: none!important;\n }\n :host(.mh-md){\n max-height: none!important;\n }\n :host(.mh-lg){\n max-height: none!important;\n }\n \n ${this.hasAttribute('css') ? `@import \"${this.getAttribute('css')}\";` : ``}\n </style>\n <slot name=\"before\"></slot>\n <div class=\"table--cta\">\n <div class=\"table__wrapper\">\n <slot></slot>\n </div>\n </div>\n <iam-pagination class=\"pagination--table\" ${this.hasAttribute('data-page') ? `data-page=\"${this.getAttribute('data-page')}\"` : ''} ></iam-pagination>\n `;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n // insert extra CSS\n if (!document.getElementById('tableExtras'))\n document.head.insertAdjacentHTML('beforeend', `<style id=\"tableExtras\">${loadExtraCSS}</style>`);\n }\n connectedCallback() {\n const params = new URLSearchParams(window.location.search);\n // Set default attributes\n if (!this.hasAttribute('data-total'))\n this.setAttribute('data-total', this.querySelectorAll('table tbody tr').length);\n if (!this.hasAttribute('data-page'))\n this.setAttribute('data-page', (params.has('page') ? params.get('page') : 1));\n if (!this.hasAttribute('data-show'))\n this.setAttribute('data-show', (params.has('show') ? params.get('show') : 15));\n if (!this.hasAttribute('data-increment'))\n this.setAttribute('data-increment', this.getAttribute('data-show'));\n // Update table__wrapper class\n let classList = this.classList.toString();\n classList = classList.replace('table--cta', '');\n classList = classList.replace('table--loading', '');\n this.shadowRoot.querySelector('.table__wrapper').className += ` ${classList}`;\n // set actionbar class if needed\n if (this.querySelector('.actionbar__sticky'))\n this.shadowRoot.querySelector('.table__wrapper').classList.add('has-actionbar');\n this.table = this.querySelector('table');\n this.savedTableBody = this.table.querySelector('tbody').cloneNode(true);\n this.pagination = this.shadowRoot.querySelector('iam-pagination');\n this.pagination.setAttribute('data-total', this.getAttribute('data-total'));\n this.pagination.setAttribute('data-page', this.getAttribute('data-page'));\n this.pagination.setAttribute('data-show', this.getAttribute('data-show'));\n this.pagination.setAttribute('data-increment', this.getAttribute('data-show'));\n if (this.hasAttribute('data-page-jump'))\n this.pagination.setAttribute('data-page-jump', 'true');\n if (this.hasAttribute('data-per-page'))\n this.pagination.setAttribute('data-per-page', 'true');\n if (this.hasAttribute('data-item-count'))\n this.pagination.setAttribute('data-item-count', 'true');\n if (this.hasAttribute('data-loading'))\n this.pagination.setAttribute('data-loading', 'true');\n if (this.classList.contains('table--fullwidth'))\n this.pagination.setAttribute('data-minimal', 'true');\n // Remove table CTA\n const isCTA = this.classList.contains('table--cta');\n if (!isCTA)\n this.shadowRoot.querySelector('.table--cta').classList.remove('table--cta');\n // Set events on the filter table\n this.form = document.createElement('form');\n if (this.hasAttribute('data-filterby')) {\n this.form = document.querySelector(`#${this.getAttribute('data-filterby')}`);\n }\n else {\n this.table.parentNode.insertBefore(this.form, this.table.nextSibling);\n }\n // Set ajax class\n if (this.form.hasAttribute('data-ajax'))\n this.table.classList.add('table--ajax');\n // Create a data list if a search input is present\n tableModule.createSearchDataList(this.table, this.form);\n if (!this.form.querySelector('[data-pagination]')) {\n this.form.innerHTML += `<input name=\"page\" type=\"hidden\" value=\"${this.getAttribute('data-page')}\" data-pagination=\"true\" />`;\n }\n if (!this.form.querySelector('[data-show]')) {\n this.form.innerHTML += `<input name=\"show\" type=\"hidden\" value=\"${this.getAttribute('data-show')}\" data-show=\"true\" />`;\n }\n // Event listeners\n tableModule.addTableEventListeners(this.table);\n tableModule.addFilterEventListeners(this.table, this.form, this.pagination, this, this.savedTableBody);\n tableModule.addPaginationEventListeners(this.table, this.form, this.pagination, this);\n tableModule.addExportEventListeners(this.shadowRoot.querySelector('[data-export]'), this.table);\n if (this.form.getAttribute('data-ajax')) {\n tableModule.loadAjaxTable(this.table, this.form, this.pagination, this);\n }\n else {\n function uniqueID(index = 1) {\n let ID = Math.floor(Math.random() * Date.now() * (index + 1));\n return ID;\n }\n // Add in the checkboxes\n if (this.querySelector('iam-actionbar[data-selectall]')) {\n const actionbar = this.querySelector('iam-actionbar[data-selectall]');\n Array.from(this.table.querySelectorAll('thead tr')).forEach((row, index) => {\n row.insertAdjacentHTML('afterbegin', `<th class=\"th--fixed\"></th>`);\n });\n Array.from(this.table.querySelectorAll('tbody tr')).forEach((row, index) => {\n let rowID = `row${uniqueID(index)}`;\n row.insertAdjacentHTML('afterbegin', `<td class=\"td--fixed selectrow\"><input type=\"checkbox\" name=\"row\" id=\"${rowID}\"/><label for=\"${rowID}\"><span class=\"visually-hidden\">Select row</span></label></td>`);\n });\n this.table.addEventListener('change', (event) => {\n if (event && event.target instanceof HTMLElement && event.target.closest('.selectrow input')) {\n let count = this.table.querySelectorAll('.selectrow input[type=\"checkbox\"]').length;\n let countChecked = this.table.querySelectorAll('.selectrow input[type=\"checkbox\"]:checked').length;\n actionbar.setAttribute('data-selected', count == countChecked ? \"all\" : countChecked);\n }\n ;\n });\n actionbar.addEventListener('selected', (event) => {\n if (event.detail.selected == '0') {\n Array.from(this.table.querySelectorAll('.selectrow input[type=\"checkbox\"]')).forEach((input, index) => {\n input.checked = false;\n });\n }\n else if (event.detail.selected == 'all') {\n Array.from(this.table.querySelectorAll('.selectrow input[type=\"checkbox\"]')).forEach((input, index) => {\n input.checked = true;\n });\n }\n });\n }\n // Make the dialog menus columns fixed \n let colIndex = -1;\n Array.from(this.table.querySelectorAll('tbody tr')).forEach((row, index) => {\n if (row.querySelector(':scope > td > .dialog__wrapper')) {\n let columnn = row.querySelector(':scope > td > .dialog__wrapper').parentNode;\n columnn.classList.add('td--fixed');\n colIndex = Array.from(columnn.parentNode.children).indexOf(columnn);\n }\n });\n if (colIndex != -1) {\n this.table.querySelector(`thead tr th:nth-child(${colIndex + 1})`).classList.add('th--fixed');\n Array.from(this.table.querySelectorAll(`tbody tr td:nth-child(${colIndex + 1})`)).forEach((col, index) => {\n col.classList.add('td--fixed');\n });\n }\n tableModule.makeTableFunctional(this.table, this.form, this.pagination, this);\n tableModule.filterTable(this.table, this.form, this);\n tableModule.populateDataQueries(this.table, this.form);\n }\n this.shadowRoot.querySelector('.table__wrapper').addEventListener(\"scroll\", (event) => {\n if (this.table.querySelector('dialog[open]')) {\n this.table.querySelector('dialog[open]').close();\n this.table.querySelector('.dialog__wrapper > button.active').classList.remove('active');\n }\n });\n }\n static get observedAttributes() {\n return [\"data-total\", \"data-page\", \"data-show\"];\n }\n attributeChangedCallback(attrName, oldVal, newVal) {\n this.pagination = this.shadowRoot.querySelector('iam-pagination');\n switch (attrName) {\n case \"data-total\": {\n if (oldVal != newVal) {\n this.pagination.setAttribute('data-total', newVal);\n }\n break;\n }\n case \"data-show\": {\n if (oldVal != newVal) {\n this.pagination.setAttribute('data-show', newVal);\n }\n break;\n }\n case \"data-page\": {\n if (oldVal != newVal) {\n this.pagination.setAttribute('data-page', newVal);\n }\n break;\n }\n }\n }\n}\nexport default iamTable;\n"],"names":["isNumeric","str","zeroPad","num","places","ucfirst","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","e","rejected","result","addDataAttributes","table","colHeadings","row","index","cells","statuses","cell","cellIndex","heading","tempDiv","headingText","formatCell","getLargestLastColWidth","largestWidth","htmlStyles","lastColChild","responsiveWidth","createMobileButton","wrapper","preExpanded","addTableEventListeners","event","button","tableRow","createSearchDataList","form","searchInput","searchID","searchableColumns","inputWrapper","searchableTerms","columnHeading","td","term","addFilterEventListeners","pagination","savedTableBody","timer","formSubmit","paginate","element","id","input","card","clickEvent","paginationInput","loadAjaxTable","filterTable","populateDataQueries","formData","queryString","http","sortTable","filters","frm_elements","i","label","forms","fields","mimicField","mimicInput","parentForm","updateMimicInput","mimickedAlready","key","field","tbody","select","selectedOption","sortBy","order","format","orderArray","tableArr","rowIndex","dataRow","a","b","strTbody","filterFilters","searches","matched","page","showRows","column","filterCount","filter","filterValue","isMatched","filterTd","yesterday","today","mondayThisWeek","sundayThisWeek","checkDate","mondayLastWeek","sundayLastWeek","year","month","firstDayMonth","lastDayMonth","firstDayLastMonth","lastDayLastMonth","isSearched","search","searchTd","queryElement","query","numberOfMatchedRows","queries","selector","queryParts","addPaginationEventListeners","newPage","url","y","showInput","addExportEventListeners","exportAsCSV","csvData","rows","cols","csvRow","j","CSVFile","tempLink","makeTableFunctional","outputsize","rowHeight","filterInput","dataFilter","resolvePath","object","path","defaultValue","p","o","columns","ajaxURL","signal","response","schema","totalNumberSchema","currentPageSchema","totalNumber","currentPage","data","emptyMsg","table_row","col","cellOutput","table_cell","cellTemplate","arrValue","rowValue","cellTemplateValue","cellOutputValue","propertyValue","transformValue","error","iamTable","assetLocation","coreCSS","template","params","classList","tableModule.createSearchDataList","tableModule.addTableEventListeners","tableModule.addFilterEventListeners","tableModule.addPaginationEventListeners","tableModule.addExportEventListeners","tableModule.loadAjaxTable","uniqueID","actionbar","rowID","count","countChecked","colIndex","columnn","tableModule.makeTableFunctional","tableModule.filterTable","tableModule.populateDataQueries","attrName","oldVal","newVal"],"mappings":"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"}
1
+ {"version":3,"file":"table.component.min.js","sources":["../../modules/helpers.js","../../modules/table.js","table.component.js"],"sourcesContent":["// @ts-nocheck\n/**\n * Global helper functions to help maintain and enhance framework elements.\n * @module Helpers\n */\n/**\n * Add global classes used by the CSS and later JavaScript.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addBodyClasses = (body) => {\n body.classList.add(\"js-enabled\");\n if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {\n body.classList.add(\"ie\");\n }\n return null;\n};\n/**\n * Add global events.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addGlobalEvents = (body) => {\n const checkElements = function (hash) {\n const label = document.querySelector(`label[for=\"${hash.replace('#', '')}\"]`);\n const summary = document.querySelector(hash + ' summary');\n const dialog = document.querySelector(`dialog${hash}`);\n if (label instanceof HTMLElement)\n label.click();\n else if (summary instanceof HTMLElement)\n summary.click();\n else if (dialog instanceof HTMLElement)\n dialog.showModal();\n };\n if (location.hash)\n checkElements(location.hash);\n window.addEventListener('hashchange', function () { checkElements(location.hash); }, false);\n addEventListener(\"popstate\", (event) => {\n if (event && event.state && event.state.type && event.state.type == \"pagination\") {\n let form = document.querySelector(`#${event.state.form}`);\n let pageInput = document.querySelector(`#${event.state.form} [data-pagination]`);\n if (pageInput)\n pageInput.value = event.state.page;\n else\n form.innerHTML += `<input name=\"page\" type=\"hidden\" data-pagination=\"true\" value=\"${event.state.page}\" />`;\n form.dispatchEvent(new Event(\"submit\"));\n }\n });\n document.addEventListener(\"submit\", (event) => {\n if (event && event.target instanceof HTMLElement && event.target.matches('form')) {\n let form = event.target;\n if (form.querySelector(':invalid')) {\n form.classList.add('was-validated');\n event.preventDefault();\n }\n }\n });\n return null;\n};\nexport const isNumeric = function (str) {\n if (typeof str != \"string\")\n return false; // we only process strings! \n return !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...\n !isNaN(parseFloat(str)); // ...and ensure strings of whitespace fail\n};\nexport const zeroPad = (num, places) => String(num).padStart(places, '0');\nexport const ucfirst = (str) => str.charAt(0).toUpperCase() + str.slice(1);\nexport const ucwords = (str) => str.split(' ').map(s => ucfirst(s)).join(' ');\nexport const unsnake = (str) => str.replace(/_/g, ' ');\nexport const snake = (str) => str.replace(/ /g, '_');\nexport const safeID = function (str) {\n str = str.toLowerCase();\n str = snake(str);\n str = str.replace(/\\W/g, '');\n return str;\n};\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n// @ts-nocheck\nimport { zeroPad, isNumeric, ucfirst } from \"./helpers.js\";\n// Basic functionality needed\nexport const addDataAttributes = (table) => {\n const colHeadings = Array.from(table.querySelectorAll('thead th'));\n const colRows = Array.from(table.querySelectorAll('tbody tr'));\n colRows.forEach((row, index) => {\n const cells = Array.from(row.querySelectorAll('th, td'));\n const statuses = ['0', 'low', 'medium', 'high', 'unknown', 'n/a', 'pending', 'verified', 'due', 'overdue', 'incomplete', 'complete', 'completed', 'approval required', 'upcoming', 'requires approval', 'to do', 'on track', 'not started', 'warning', 'error'];\n cells.forEach((cell, cellIndex) => {\n const heading = colHeadings[cellIndex];\n if (typeof heading != \"undefined\") {\n let tempDiv = document.createElement(\"div\");\n tempDiv.innerHTML = heading.innerHTML;\n let headingText = tempDiv.textContent || tempDiv.innerText || \"\";\n cell.setAttribute('data-label', headingText);\n if (heading.hasAttribute('data-td-class'))\n cell.setAttribute('class', heading.getAttribute('data-td-class'));\n if (heading.hasAttribute('data-format')) {\n cell.setAttribute('data-format', heading.getAttribute('data-format'));\n cell.innerHTML = formatCell(heading.getAttribute('data-format'), cell.textContent.trim()); //Make sure date format is consistent\n }\n if (statuses.includes(cell.textContent.trim().toLowerCase())) {\n cell.setAttribute('data-content', cell.textContent.trim().toLowerCase());\n }\n }\n });\n });\n};\nexport const getLargestLastColWidth = (table) => {\n let largestWidth = 0;\n Array.from(table.querySelectorAll('tbody tr')).forEach((row, index) => {\n let htmlStyles = window.getComputedStyle(document.querySelector('html'));\n let lastColChild = row.querySelector(':scope > *:last-child > *:first-child');\n if (lastColChild) {\n lastColChild.classList.add('text-nowrap');\n let responsiveWidth = lastColChild.offsetWidth / parseFloat(htmlStyles.fontSize);\n responsiveWidth += 1.7;\n largestWidth = largestWidth > responsiveWidth ? largestWidth : responsiveWidth;\n }\n });\n return largestWidth;\n};\nexport const createMobileButton = (table, wrapper) => {\n if (wrapper.classList.contains('.table--fullwidth') && !wrapper.hasAttribute('data-expandable'))\n return false;\n if (table.querySelectorAll('thead tr th').length < 4 && !wrapper.hasAttribute('data-expandable'))\n return false;\n Array.from(table.querySelectorAll('thead tr')).forEach((row, index) => {\n row.insertAdjacentHTML('afterbegin', `<th class=\"th--fixed expand-button-heading\"></th>`);\n });\n Array.from(table.querySelectorAll('tbody tr')).forEach((row, index) => {\n const preExpanded = row.getAttribute('data-view') === 'full' ? 'aria-expanded' : '';\n row.insertAdjacentHTML('afterbegin', `<td class=\"td--fixed td--expand\"><button class=\"btn btn-compact btn-secondary\" data-expand-button ${preExpanded}>Expand</button></td>`);\n });\n};\nexport const addTableEventListeners = (table) => {\n table.addEventListener('click', (event) => {\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-expand-button]')) {\n let button = event.target.closest('[data-expand-button]');\n let tableRow = button.closest('tr');\n button.toggleAttribute('aria-expanded');\n if (tableRow.getAttribute('data-view') == \"full\")\n tableRow.setAttribute('data-view', 'default');\n else\n tableRow.setAttribute('data-view', 'full');\n button.blur();\n }\n ;\n });\n};\n// Filters\nexport const createSearchDataList = (table, form) => {\n let searchInput = form.querySelector('[data-search]');\n if (!searchInput)\n return false;\n const searchID = searchInput.getAttribute('id');\n const searchableColumns = searchInput.getAttribute('data-search').split(',');\n let inputWrapper = searchInput.parentNode;\n let searchableTerms = {};\n searchableColumns.forEach((columnHeading, index) => {\n Array.from(table.querySelectorAll('td[data-label=\"' + columnHeading.trim() + '\"]')).forEach((td, index) => {\n if (td.querySelector('.td__content'))\n searchableTerms[td.querySelector('.td__content').textContent] = td.querySelector('.td__content').textContent;\n else\n searchableTerms[td.textContent] = td.textContent;\n });\n });\n searchInput.setAttribute('list', `${searchID}_list`);\n searchInput.setAttribute('autocomplete', 'off');\n if (!inputWrapper.querySelector('datalist'))\n inputWrapper.innerHTML += `<datalist id=\"${searchID}_list\"></datalist>`;\n inputWrapper.querySelector('datalist').innerHTML = `${Object.keys(searchableTerms).map(term => `<option value=\"${term}\"></option>`).join(\"\")}`;\n};\nexport const addFilterEventListeners = (table, form, pagination, wrapper, savedTableBody) => {\n var timer;\n // Check what conditions are set on the table to see what the form actions are\n let formSubmit = function (event, paginate = false) {\n if (form.classList.contains('processing'))\n return false;\n // Before submitting check if any duplicate checkboxes within the filters dialog needs to upset the original input\n if (event.type == \"submit\") {\n form.classList.add('processing');\n Array.from(form.querySelectorAll('[data-duplicate]')).forEach((element, index) => {\n const id = element.getAttribute('data-duplicate');\n const input = document.getElementById(id);\n const card = document.querySelector(`[for=\"${id}\"] iam-card`);\n if (input.checked != element.checked) {\n if (card) {\n let clickEvent = new Event('click');\n card.dispatchEvent(clickEvent);\n }\n else {\n input.checked = element.checked;\n }\n }\n });\n form.classList.remove('processing');\n }\n if (form.hasAttribute('data-ajax')) {\n // Default back to page 1\n if (!paginate) {\n let paginationInput = form.querySelector('[data-pagination]');\n paginationInput.value = 1;\n wrapper.setAttribute('data-page', 1);\n }\n loadAjaxTable(table, form, pagination, wrapper);\n }\n else if (form.hasAttribute('data-submit'))\n form.submit();\n else {\n filterTable(table, form, wrapper);\n populateDataQueries(table, form);\n }\n // Pass post data back to the page\n if (form.hasAttribute('data-ajax-post')) {\n let formData = new FormData(form);\n let queryString = new URLSearchParams(formData).toString();\n const http = new XMLHttpRequest();\n http.open('GET', `${window.location.href}?ajax=true&${queryString}`);\n http.send();\n }\n };\n form.addEventListener('keyup', (event) => {\n clearTimeout(timer);\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-search]')) {\n timer = setTimeout(function () {\n formSubmit(event);\n }, 500);\n }\n ;\n });\n form.addEventListener('change', (event) => {\n clearTimeout(timer);\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-sort]')) {\n if (!form.hasAttribute('data-submit'))\n sortTable(table, form, savedTableBody);\n formSubmit(event);\n }\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-search]')) {\n formSubmit(event);\n }\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-filter][data-no-ajax]')) { // Allow for input fields to filter the current results without a new ajax call\n filterTable(table, form, wrapper);\n populateDataQueries(table, form);\n }\n else if (event && event.target instanceof HTMLElement && event.target.closest('[data-filter]') && event.target.closest('form .dialog__wrapper > dialog')) {\n formSubmit(event);\n }\n else if (event && event.target instanceof HTMLElement && event.target.closest('[data-filter]') && !event.target.closest('form dialog')) {\n formSubmit(event);\n }\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-show]')) {\n formSubmit(event);\n }\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-mimic]')) {\n formSubmit(event);\n }\n });\n form.addEventListener('click', (event) => {\n clearTimeout(timer);\n if (event && event.target instanceof HTMLElement && event.target.closest('dialog button:not([type=\"button\"])')) {\n let button = event.target.closest('dialog button:not([type=\"button\"])');\n let modal = button.closest('dialog');\n modal.close();\n }\n // Prevent the form from submitting\n if (event && event.target instanceof HTMLElement && event.target.closest('.dialog__close')) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-clear]')) {\n form.classList.add('processing');\n // Make sure any applied filters have been removed\n Array.from(form.querySelectorAll('.applied-filters')).forEach((filters, index) => {\n filters.innerHTML = \"\";\n });\n // Make sure cards are unlicked\n let frm_elements = form.elements;\n for (let i = 0; i < frm_elements.length; i++) {\n let field_type = frm_elements[i].type.toLowerCase() ? frm_elements[i].type.toLowerCase() : \"text\";\n switch (field_type) {\n case \"text\":\n case \"password\":\n case \"textarea\":\n frm_elements[i].value = \"\";\n break;\n case \"radio\":\n case \"checkbox\":\n if (frm_elements[i].checked) {\n let input = frm_elements[i];\n let id = input.getAttribute('id');\n let label = document.querySelector(`[for=\"${id}\"`);\n if (label.querySelector('iam-card')) {\n let card = label.querySelector('iam-card');\n let clickEvent = new Event('click');\n card.dispatchEvent(clickEvent);\n }\n input.checked = false;\n }\n break;\n case \"select-one\":\n case \"select-multi\":\n frm_elements[i].selectedIndex = -1;\n break;\n case \"hidden\":\n default:\n break;\n }\n }\n form.classList.remove('processing');\n if (!form.hasAttribute('data-submit'))\n sortTable(table, form, savedTableBody);\n formSubmit(event);\n }\n });\n form.addEventListener('submit', (event) => {\n clearTimeout(timer);\n if (!form.hasAttribute('data-submit'))\n event.preventDefault();\n formSubmit(event);\n });\n form.addEventListener('force', (event) => {\n formSubmit(event);\n });\n form.addEventListener('paginate', (event) => {\n formSubmit(event, true);\n });\n // Mmimic fields\n let forms = [];\n let fields = [];\n // Collect the forms that we need to add an event listener for.\n Array.from(form.querySelectorAll('[data-mimic]')).forEach((input, index) => {\n let mimicField = input.getAttribute('data-mimic');\n Array.from(document.querySelectorAll(`[name=\"${mimicField}\"]`)).forEach((mimicInput, index) => {\n let parentForm = mimicInput.closest('form');\n if (!forms.includes(parentForm))\n forms.push(parentForm);\n if (!fields.includes(mimicField))\n fields.push(mimicField);\n });\n });\n // For each form add change listener\n forms.forEach((parentForm, index) => {\n const updateMimicInput = function () {\n let mimickedAlready = [];\n let formData = new FormData(parentForm);\n let i = 1;\n for (const [key, value] of formData) {\n if (document.querySelector(`[data-mimic=\"${key}\"]`) && !mimickedAlready.includes(key)) {\n mimickedAlready.push(key);\n document.querySelector(`[data-mimic=\"${key}\"]`).value = value;\n }\n else if (document.querySelector(`[data-mimic=\"${key}\"]`))\n document.querySelector(`[data-mimic=\"${key}\"]`).value += \",\" + value;\n i++;\n }\n for (const value of mimickedAlready) {\n const event = new Event(\"force\");\n form.dispatchEvent(event);\n }\n // Check for empties\n for (const field of fields) {\n if (!formData.has(field) && parentForm.querySelector(`[name=\"${field}\"]`)) {\n document.querySelector(`[data-mimic=\"${field}\"]`).value = \"\";\n const event = new Event(\"force\");\n form.dispatchEvent(event);\n }\n }\n };\n parentForm.addEventListener('force', (event) => {\n updateMimicInput();\n });\n parentForm.addEventListener('change', (event) => {\n updateMimicInput();\n });\n });\n};\nexport const sortTable = (table, form, savedTableBody) => {\n if (form.getAttribute('data-ajax')) {\n return false;\n }\n let tbody = table.querySelector('tbody');\n let select = form.querySelector('[data-sort]');\n let selectedOption = select.querySelector(`option:nth-child(${select.selectedIndex + 1})`);\n let sortBy = selectedOption.getAttribute('data-sort');\n let order = selectedOption.getAttribute('data-order');\n let format = selectedOption.getAttribute('data-format');\n if (!sortBy) {\n tbody.innerHTML = savedTableBody.innerHTML;\n addDataAttributes(table);\n return false;\n }\n let orderArray = [];\n if (!['asc', 'desc', 'descending'].includes(order)) {\n orderArray = order.split(',');\n }\n // Create an array from the table rows, the index created is then used to sort the array\n let tableArr = [];\n Array.from(tbody.querySelectorAll('tr')).forEach((tableRow, index) => {\n let rowIndex = tableRow.querySelector('td[data-label=\"' + sortBy + '\"], th[data-label=\"' + sortBy + '\"]').textContent.trim();\n if (tableRow.querySelector('[data-label=\"' + sortBy + '\"] .td__content'))\n rowIndex = tableRow.querySelector('[data-label=\"' + sortBy + '\"] .td__content').textContent.trim();\n // If a predefined order set replace the search term with an ordered numeric value so it can be sorted\n if (orderArray.length && orderArray.includes(rowIndex)) {\n rowIndex = orderArray.indexOf(rowIndex);\n }\n if (isNumeric(rowIndex))\n rowIndex = zeroPad(rowIndex, 10);\n // If the sort format is date then lets transform the index to a sortable date (this is never displayed)\n if (format && format == \"date\")\n rowIndex = new Date(rowIndex);\n const dataRow = {\n index: rowIndex,\n row: tableRow\n };\n tableArr.push(dataRow);\n });\n // Sort array alphabetically\n tableArr.sort((a, b) => (a.index > b.index) ? 1 : -1);\n // Reverse if descending\n if (order == \"descending\" || order == \"desc\")\n tableArr = tableArr.reverse();\n // Create a string to return and populate the tbody\n let strTbody = '';\n tableArr.forEach((tableRow, index) => {\n strTbody += tableRow.row.outerHTML;\n });\n tbody.innerHTML = strTbody;\n};\nexport const filterTable = (table, form, wrapper) => {\n table.classList.remove('table--filtered');\n let filters = filterFilters(form);\n let searches = [];\n let matched = 0;\n let page = form.querySelector('[data-pagination]') ? parseInt(form.querySelector('[data-pagination]').value) : 1;\n let showRows = form.querySelector('[data-show]') ? parseInt(form.querySelector('[data-show]').value) : 15;\n // Reset\n Array.from(table.querySelectorAll('tbody tr')).forEach((row, index) => {\n row.classList.remove('filtered');\n row.classList.remove('filtered--matched');\n row.classList.remove('filtered--show');\n row.removeAttribute('data-filtered-by');\n });\n // Add search columns too\n if (form.querySelector('[data-search]')) {\n let searchInput = form.querySelector('[data-search]');\n let searchColumns = form.querySelector('[data-search]').getAttribute('data-search').split(',');\n searchColumns.forEach((column, index) => {\n searches.push({ 'column': `${column.trim()}`, 'value': `${searchInput.value}` });\n });\n }\n //Display the filter count\n Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element, index) => {\n element.innerHTML = '';\n element.parentNode.classList.remove('hover');\n });\n let filterCount = 0;\n Object.values(filters).forEach((filter, index) => {\n if (typeof filter == \"object\" && Object.values(filter).length)\n filterCount += Object.values(filter).length;\n else\n filterCount++;\n });\n if (filterCount) {\n Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element, index) => {\n element.innerHTML += `(${filterCount})`;\n element.parentNode.classList.add('hover');\n });\n }\n // Filter the table\n table.classList.add('table--filtered');\n for (const [key, filterValue] of Object.entries(filters)) {\n Array.from(table.querySelectorAll('tbody tr:not(.filtered)')).forEach((row, index) => {\n let isMatched = false;\n filterValue.forEach((filter, index) => {\n let filterTd = row.querySelector(`[data-label=\"${key}\"]`);\n // Dynamic values\n if (filter && filter == \"$today\")\n filter = formatCell('date', new Date());\n else if (filter && filter == \"$yesterday\") {\n let yesterday = new Date();\n yesterday.setDate(yesterday.getDate() - 1);\n filter = formatCell('date', yesterday);\n }\n else if (filter && (filter == \"$thisWeek\" || filter == \"$lastWeek\")) {\n let today = new Date();\n let mondayThisWeek = new Date(today.setDate(today.getDate() - (today.getDay() - 1)));\n let sundayThisWeek = new Date(today.setDate(today.getDate() - today.getDay() + 7));\n let checkDate = new Date(filterTd.textContent.toLowerCase());\n today.setHours(0, 0, 0, 0);\n mondayThisWeek.setHours(0, 0, 0, 0);\n sundayThisWeek.setHours(0, 0, 0, 0);\n checkDate.setHours(0, 0, 0, 0);\n if (filter == \"$thisWeek\") {\n isMatched = (checkDate >= mondayThisWeek && checkDate <= sundayThisWeek);\n }\n else {\n let mondayLastWeek = new Date(mondayThisWeek.setDate(mondayThisWeek.getDate() - 7));\n let sundayLastWeek = new Date(sundayThisWeek.setDate(sundayThisWeek.getDate() - 7));\n mondayLastWeek.setHours(0, 0, 0, 0);\n sundayLastWeek.setHours(0, 0, 0, 0);\n isMatched = (checkDate >= mondayLastWeek && checkDate <= sundayLastWeek);\n }\n }\n else if (filter && filter == \"$thisMonth\") {\n let today = new Date(), year = today.getFullYear(), month = today.getMonth();\n var firstDayMonth = new Date(year, month, 1);\n var lastDayMonth = new Date(year, month + 1, 0);\n let checkDate = new Date(filterTd.textContent.toLowerCase());\n firstDayMonth.setHours(0, 0, 0, 0);\n lastDayMonth.setHours(0, 0, 0, 0);\n checkDate.setHours(0, 0, 0, 0);\n isMatched = (checkDate >= firstDayMonth && checkDate <= lastDayMonth);\n }\n else if (filter && filter == \"$lastMonth\") {\n let today = new Date(), year = today.getFullYear(), month = today.getMonth();\n var firstDayLastMonth = new Date(year, month - 1, 1);\n var lastDayLastMonth = new Date(year, month, 0);\n let checkDate = new Date(filterTd.textContent.toLowerCase());\n firstDayLastMonth.setHours(0, 0, 0, 0);\n lastDayLastMonth.setHours(0, 0, 0, 0);\n checkDate.setHours(0, 0, 0, 0);\n isMatched = (checkDate >= firstDayLastMonth && checkDate <= lastDayLastMonth);\n }\n if (filterTd && filterTd.textContent.toLowerCase().includes(filter.toLowerCase())) {\n isMatched = true;\n }\n });\n if (!isMatched) {\n row.classList.add('filtered');\n row.setAttribute('data-filtered-by', key);\n }\n });\n }\n // Search whats left of the table after filtering\n Array.from(table.querySelectorAll('tbody tr:not(.filtered)')).forEach((row, index) => {\n let isSearched = searches.length > 0 && searches[0].value.length >= 3 ? false : true;\n searches.forEach((search, index) => {\n let searchTd = row.querySelector(`[data-label=\"${search.column}\"]`);\n if (searchTd && search.value.length >= 3 && searchTd.textContent.toLowerCase().includes(search.value.toLowerCase())) {\n isSearched = true;\n }\n });\n if (!isSearched)\n row.classList.add('filtered');\n });\n // Work out what to display after pagination\n Array.from(table.querySelectorAll('tbody tr:not(.filtered')).forEach((row, index) => {\n matched++;\n row.classList.add('filtered--matched');\n // pagination bit \n let matchesPage = Math.ceil(matched / showRows);\n if (matchesPage == parseInt(page))\n row.classList.add('filtered--show');\n });\n if (wrapper) {\n wrapper.setAttribute('data-total', matched);\n wrapper.setAttribute('data-show', showRows);\n wrapper.setAttribute('data-page', page);\n }\n};\nexport const populateDataQueries = (table, form, wrapper) => {\n const dataQueries = Array.from(form.querySelectorAll('[data-query]'));\n dataQueries.forEach((queryElement, index) => {\n let query = queryElement.getAttribute('data-query');\n let numberOfMatchedRows;\n if (query == 'total') {\n if (wrapper.hasAttribute('data-total'))\n numberOfMatchedRows = wrapper.getAttribute('data-total');\n else\n numberOfMatchedRows = table.classList.contains('table--filtered') ? table.querySelectorAll('tbody tr').length : table.querySelectorAll('tbody tr').length;\n }\n else if (!query.includes(' == ') && query.includes(' & ')) {\n let queries = query.split(' & ');\n let selector = '';\n queries.forEach(element => {\n selector += `:not([data-filtered-by=\"${element}\"])`;\n });\n numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr${selector}`)).length;\n }\n else if (!query.includes(' == ')) {\n numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr:not([data-filtered-by=\"${query}\"])`)).length;\n }\n else if (query.includes(' && ')) {\n let queries = query.split(' && ');\n numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr:not(.filtered)`)).filter(function (row) {\n let matched = true;\n for (const [index, value] of Object.entries(queries)) {\n let queryParts = value.split(' == ');\n if (!row.querySelector(`td[data-label=\"${queryParts[0]}\"]`) || row.querySelector(`td[data-label=\"${queryParts[0]}\"]`).textContent != `${queryParts[1]}`)\n matched = false;\n }\n return matched;\n }).length;\n }\n else {\n let queryParts = query.split(' == ');\n numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr.filtered--matched td[data-label=\"${queryParts[0]}\"], tbody tr[data-filtered-by=\"${queryParts[0]}\"] td[data-label=\"${queryParts[0]}\"]`)).filter(function (element) {\n return element.textContent === queryParts[1];\n }).length;\n }\n if (queryElement.hasAttribute('data-total'))\n queryElement.setAttribute('data-total', numberOfMatchedRows);\n else\n queryElement.innerHTML = numberOfMatchedRows;\n });\n};\n// Pagination\nexport const addPaginationEventListeners = function (table, form, pagination, wrapper) {\n pagination.addEventListener('update-page', (event) => {\n let paginationInput = form.querySelector('[data-pagination]');\n let newPage = event.detail.page;\n // Set the filter value\n paginationInput.value = newPage;\n form.dispatchEvent(new Event(\"paginate\"));\n // Reset the data attribute\n wrapper.setAttribute('data-page', newPage);\n if (table.hasAttribute('data-show-history')) {\n const url = new URL(location);\n url.searchParams.set(\"page\", newPage);\n history.pushState({ 'type': 'pagination', 'form': form.getAttribute('id'), 'page': newPage }, \"\", url);\n }\n // scroll back to the top of the table\n if (!wrapper.hasAttribute('data-no-scroll')) {\n const yOffset = -250;\n const y = table.getBoundingClientRect().top + window.pageYOffset + yOffset;\n window.scrollTo({ top: y, behavior: 'smooth' });\n }\n });\n pagination.addEventListener('update-show', (event) => {\n let showInput = form.querySelector('[data-show]');\n let showRows = event.detail.show;\n showInput.value = showRows;\n wrapper.setAttribute('data-show', showRows);\n form.dispatchEvent(new Event(\"submit\"));\n });\n};\n// Export CSV Data\nexport const addExportEventListeners = (button, table) => {\n if (!button)\n return false;\n button.addEventListener('click', (event) => {\n exportAsCSV(table);\n });\n};\nexport const exportAsCSV = function (table) {\n var csvData = [];\n // Get each row data\n var rows = table.getElementsByTagName('tr');\n for (var i = 0; i < rows.length; i++) {\n // Get each column data\n var cols = rows[i].querySelectorAll('td,th');\n // Stores each csv row data\n var csvRow = [];\n for (var j = 0; j < cols.length; j++) {\n // Get the text data of each cell of a row and push it to csvrow\n csvRow.push(`\"${cols[j].textContent}\"`);\n }\n // Combine each column value with comma\n csvData.push(csvRow.join(\",\"));\n }\n // Combine each row data with new line character\n csvData = csvData.join('\\n');\n // Create CSV file object and feed our csvData into it\n let CSVFile = new Blob([csvData], {\n type: \"text/csv\"\n });\n // Create to temporary link to initiate download process\n var tempLink = document.createElement('a');\n tempLink.download = \"export.csv\";\n var url = window.URL.createObjectURL(CSVFile);\n tempLink.href = url;\n // This link should not be displayed\n tempLink.style.display = \"none\";\n document.body.appendChild(tempLink);\n // Automatically click the link to trigger download\n tempLink.click();\n document.body.removeChild(tempLink);\n};\n// After table is loaded\nexport const makeTableFunctional = function (table, form, pagination, wrapper) {\n addDataAttributes(table);\n createMobileButton(table, wrapper);\n populateDataQueries(table, form, wrapper);\n // Work out the largest width of the CTA's in the last column\n if (wrapper && wrapper.classList.contains('table--cta')) {\n const largestWidth = getLargestLastColWidth(table);\n wrapper.style.setProperty(\"--cta-width\", `${largestWidth}rem`);\n function outputsize() {\n Array.from(table.querySelectorAll('tr')).forEach((row, index) => {\n let rowHeight = row.offsetHeight;\n row.style.setProperty(\"--row-height\", `${rowHeight}px`);\n });\n }\n new ResizeObserver(outputsize).observe(table);\n }\n};\nconst filterFilters = function (form) {\n let filters = new Object();\n // Filter\n let filterInputs = Array.from(form.querySelectorAll('[data-filter]'));\n filterInputs.forEach((filterInput, index) => {\n // Ignore uncked radio inputs\n if (filterInput.type == 'radio' && !filterInput.checked) {\n return;\n }\n if (filterInput.type == 'checkbox' && !filterInput.checked) {\n return;\n }\n if (filterInput && filterInput.value) {\n let dataFilter = filterInput.getAttribute('data-filter');\n if (!filters[dataFilter])\n filters[dataFilter] = new Array();\n filters[dataFilter].push(filterInput.value);\n }\n });\n return filters;\n};\nexport const loadAjaxTable = function (table, form, pagination, wrapper) {\n return __awaiter(this, void 0, void 0, function* () {\n const resolvePath = (object, path, defaultValue) => path.split(/[\\.\\[\\]\\'\\\"]/).filter(p => p).reduce((o, p) => o ? o[p] : defaultValue, object);\n let formData = new FormData(form);\n let queryString = new URLSearchParams(formData).toString();\n let columns = table.querySelectorAll('thead tr th');\n let tbody = table.querySelector('tbody');\n let ajaxURL = form.getAttribute('data-ajax');\n wrapper.classList.add('table--loading');\n // Display the filter count\n let filters = filterFilters(form);\n Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element, index) => {\n element.innerHTML = '';\n element.parentNode.classList.remove('hover');\n });\n let filterCount = 0;\n Object.values(filters).forEach((filter, index) => {\n if (typeof filter == \"object\" && Object.values(filter).length)\n filterCount += Object.values(filter).length;\n else\n filterCount++;\n });\n if (filterCount) {\n Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element, index) => {\n element.innerHTML += `(${filterCount})`;\n element.parentNode.classList.add('hover');\n });\n }\n // Setup controller vars if not already set\n if (!window.controller)\n window.controller = [];\n // Abort if controller already present for this url\n if (window.controller[ajaxURL])\n window.controller[ajaxURL].abort();\n // Create a new controller so it can be aborted if new fetch made\n window.controller[ajaxURL] = new AbortController();\n const { signal } = controller[ajaxURL];\n // Set loading on the pagination\n pagination.setAttribute('data-loading', 'true');\n form.classList.add('processing');\n try {\n yield fetch(ajaxURL + '?' + queryString, {\n signal: signal,\n method: 'get',\n credentials: 'same-origin',\n headers: new Headers({\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'X-Requested-With': 'XMLHttpRequest'\n })\n })\n .then((response) => response.json()).then((response) => {\n let schema = form.hasAttribute('data-schema') ? form.getAttribute('data-schema') : 'data';\n let totalNumberSchema = form.hasAttribute('data-schema-total') ? form.getAttribute('data-schema-total') : 'meta.total';\n let currentPageSchema = form.hasAttribute('data-schema-page') ? form.getAttribute('data-schema-page') : 'meta.current_page';\n let totalNumber = resolvePath(response, totalNumberSchema, 15);\n let currentPage = resolvePath(response, currentPageSchema, 1);\n let data = resolvePath(response, schema);\n let emptyMsg = wrapper.hasAttribute('data-empty-msg') ? wrapper.getAttribute('data-empty-msg') : \"No results found\";\n if (data) {\n tbody.innerHTML = '';\n data.forEach((row, index) => {\n var table_row = document.createElement('tr');\n columns.forEach((col, index) => {\n let cellOutput = '';\n var table_cell = document.createElement('td');\n // Add some data to help with the mobile layout design\n table_cell.setAttribute('data-label', col.innerText);\n if (col.getAttribute('data-output')) {\n var cellTemplate = col.getAttribute('data-output');\n // Use a regex to replace {var} with actual values from the json data\n cellOutput = cellTemplate.replace(new RegExp(/{(.*?)}/, \"gm\"), function (matched) { return resolvePath(row, matched.replace('{', '').replace('}', '')); });\n }\n // If an output array is defined then the content is going to made of of multiple values from an array\n if (col.hasAttribute('data-output-array')) {\n var cellTemplate = col.getAttribute('data-output');\n let arrValue = resolvePath(row, cellTemplate.replace('{', '').replace('}', ''));\n cellOutput = \"\";\n arrValue.forEach((rowValue, i) => {\n let cellTemplateValue = col.getAttribute('data-output-array');\n let cellOutputValue = \"\";\n // If we need to transform some of the data\n if (col.hasAttribute('data-output-array-property') && col.hasAttribute('data-output-array-transform')) {\n const propertyValue = resolvePath(rowValue, col.getAttribute('data-output-array-property'));\n const transforms = JSON.parse(col.getAttribute('data-output-array-transform'));\n const transformValue = transforms[propertyValue];\n cellOutputValue = cellTemplateValue.replace(`{${col.getAttribute('data-output-array-property')}}`, transformValue);\n }\n cellOutputValue = cellOutputValue.replace(new RegExp(/{(.*?)}/, \"gm\"), function (matched) { return resolvePath(rowValue, matched.replace('{', '').replace('}', '')); });\n cellOutput += cellOutputValue;\n });\n }\n if (col.hasAttribute('data-transform')) {\n const transforms = JSON.parse(col.getAttribute('data-transform'));\n cellOutput = transforms[cellOutput];\n if (!cellOutput && col.hasAttribute('data-default'))\n cellOutput = col.getAttribute('data-default');\n }\n table_cell.innerHTML = cellOutput;\n table_row.appendChild(table_cell);\n });\n tbody.appendChild(table_row);\n });\n createSearchDataList(table, form);\n // Add data to the pagination \n wrapper.setAttribute('data-total', parseInt(totalNumber));\n wrapper.setAttribute('data-page', parseInt(currentPage));\n makeTableFunctional(table, form, pagination, wrapper);\n Array.from(form.querySelectorAll('[data-ajax-query]')).forEach((queryElement, index) => {\n let totalNumber = resolvePath(response, queryElement.getAttribute('data-ajax-query'), '');\n if (queryElement.hasAttribute('data-total'))\n queryElement.setAttribute('data-total', totalNumber);\n else\n queryElement.innerHTML = totalNumber;\n });\n if (parseInt(totalNumber) == 0) {\n tbody.innerHTML = `<tr><td colspan=\"100%\"><span>${emptyMsg}</span></td></tr>`;\n }\n wrapper.classList.remove('table--loading');\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n \"event\": \"Ajax table loaded\",\n \"url\": ajaxURL,\n \"formData\": queryString\n });\n }\n else {\n tbody.innerHTML = '<tr><td colspan=\"100%\"><span>Error loading table</span></td></tr>';\n }\n // Remove loading on the pagination\n pagination.removeAttribute('data-loading');\n form.classList.remove('processing');\n });\n }\n catch (error) {\n console.log(error);\n }\n });\n};\nexport const formatCell = (format, cellOutput) => {\n switch (format) {\n case 'datetime':\n return new Date(cellOutput).toLocaleDateString('en-gb', { weekday: 'short', year: \"2-digit\", month: \"long\", day: \"numeric\", }) + \" \" + new Date(cellOutput).toLocaleTimeString(\"en-gb\", { hour: \"2-digit\", minute: \"2-digit\" });\n case 'date':\n return new Date(cellOutput).toLocaleDateString('en-gb', { year: \"2-digit\", month: \"long\", day: \"numeric\" });\n case 'capitalise':\n return cellOutput = ucfirst(cellOutput);\n }\n};\n","// @ts-nocheck\nimport * as tableModule from \"../../modules/table.js\";\nclass iamTable extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';\n const coreCSS = document.body.hasAttribute('data-core-css') ? document.body.getAttribute('data-core-css') : `${assetLocation}/css/core.min.css`;\n const loadCSS = `@import \"${assetLocation}/css/components/table.css\";`;\n const loadExtraCSS = `@import \"${assetLocation}/css/components/table.global.css\";`;\n const template = document.createElement('template');\n template.innerHTML = `\n <style>\n @import \"${coreCSS}\";\n ${loadCSS}\n\n :host(.mh-sm){\n max-height: none!important;\n }\n :host(.mh-md){\n max-height: none!important;\n }\n :host(.mh-lg){\n max-height: none!important;\n }\n \n ${this.hasAttribute('css') ? `@import \"${this.getAttribute('css')}\";` : ``}\n </style>\n <slot name=\"before\"></slot>\n <div class=\"table--cta\">\n <div class=\"table__wrapper\">\n <slot></slot>\n </div>\n </div>\n <iam-pagination class=\"pagination--table\" ${this.hasAttribute('data-page') ? `data-page=\"${this.getAttribute('data-page')}\"` : ''} ></iam-pagination>\n `;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n // insert extra CSS\n if (!document.getElementById('tableExtras'))\n document.head.insertAdjacentHTML('beforeend', `<style id=\"tableExtras\">${loadExtraCSS}</style>`);\n }\n connectedCallback() {\n const params = new URLSearchParams(window.location.search);\n // Set default attributes\n if (!this.hasAttribute('data-total'))\n this.setAttribute('data-total', this.querySelectorAll('table tbody tr').length);\n if (!this.hasAttribute('data-page'))\n this.setAttribute('data-page', (params.has('page') ? params.get('page') : 1));\n if (!this.hasAttribute('data-show'))\n this.setAttribute('data-show', (params.has('show') ? params.get('show') : 15));\n if (!this.hasAttribute('data-increment'))\n this.setAttribute('data-increment', this.getAttribute('data-show'));\n // Update table__wrapper class\n let classList = this.classList.toString();\n classList = classList.replace('table--cta', '');\n classList = classList.replace('table--loading', '');\n this.shadowRoot.querySelector('.table__wrapper').className += ` ${classList}`;\n // set actionbar class if needed\n if (this.querySelector('.actionbar__sticky'))\n this.shadowRoot.querySelector('.table__wrapper').classList.add('has-actionbar');\n this.table = this.querySelector('table');\n this.savedTableBody = this.table.querySelector('tbody').cloneNode(true);\n this.pagination = this.shadowRoot.querySelector('iam-pagination');\n this.pagination.setAttribute('data-total', this.getAttribute('data-total'));\n this.pagination.setAttribute('data-page', this.getAttribute('data-page'));\n this.pagination.setAttribute('data-show', this.getAttribute('data-show'));\n this.pagination.setAttribute('data-increment', this.getAttribute('data-show'));\n if (this.hasAttribute('data-page-jump'))\n this.pagination.setAttribute('data-page-jump', 'true');\n if (this.hasAttribute('data-per-page'))\n this.pagination.setAttribute('data-per-page', 'true');\n if (this.hasAttribute('data-item-count'))\n this.pagination.setAttribute('data-item-count', 'true');\n if (this.hasAttribute('data-loading'))\n this.pagination.setAttribute('data-loading', 'true');\n if (this.classList.contains('table--fullwidth'))\n this.pagination.setAttribute('data-minimal', 'true');\n // Remove table CTA\n const isCTA = this.classList.contains('table--cta');\n if (!isCTA)\n this.shadowRoot.querySelector('.table--cta').classList.remove('table--cta');\n // Set events on the filter table\n this.form = document.createElement('form');\n if (this.hasAttribute('data-filterby')) {\n this.form = document.querySelector(`#${this.getAttribute('data-filterby')}`);\n }\n else {\n this.table.parentNode.insertBefore(this.form, this.table.nextSibling);\n }\n // Set ajax class\n if (this.form.hasAttribute('data-ajax'))\n this.table.classList.add('table--ajax');\n // Create a data list if a search input is present\n tableModule.createSearchDataList(this.table, this.form);\n if (!this.form.querySelector('[data-pagination]')) {\n this.form.innerHTML += `<input name=\"page\" type=\"hidden\" value=\"${this.getAttribute('data-page')}\" data-pagination=\"true\" />`;\n }\n if (!this.form.querySelector('[data-show]')) {\n this.form.innerHTML += `<input name=\"show\" type=\"hidden\" value=\"${this.getAttribute('data-show')}\" data-show=\"true\" />`;\n }\n // Event listeners\n tableModule.addTableEventListeners(this.table);\n tableModule.addFilterEventListeners(this.table, this.form, this.pagination, this, this.savedTableBody);\n tableModule.addPaginationEventListeners(this.table, this.form, this.pagination, this);\n tableModule.addExportEventListeners(this.shadowRoot.querySelector('[data-export]'), this.table);\n if (this.form.getAttribute('data-ajax')) {\n tableModule.loadAjaxTable(this.table, this.form, this.pagination, this);\n }\n else {\n function uniqueID(index = 1) {\n let ID = Math.floor(Math.random() * Date.now() * (index + 1));\n return ID;\n }\n // Add in the checkboxes\n if (this.querySelector('iam-actionbar[data-selectall]')) {\n const actionbar = this.querySelector('iam-actionbar[data-selectall]');\n Array.from(this.table.querySelectorAll('thead tr')).forEach((row, index) => {\n row.insertAdjacentHTML('afterbegin', `<th class=\"th--fixed\"></th>`);\n });\n Array.from(this.table.querySelectorAll('tbody tr')).forEach((row, index) => {\n let rowID = `row${uniqueID(index)}`;\n row.insertAdjacentHTML('afterbegin', `<td class=\"td--fixed selectrow\"><input type=\"checkbox\" name=\"row\" id=\"${rowID}\"/><label for=\"${rowID}\"><span class=\"visually-hidden\">Select row</span></label></td>`);\n });\n this.table.addEventListener('change', (event) => {\n if (event && event.target instanceof HTMLElement && event.target.closest('.selectrow input')) {\n let count = this.table.querySelectorAll('.selectrow input[type=\"checkbox\"]').length;\n let countChecked = this.table.querySelectorAll('.selectrow input[type=\"checkbox\"]:checked').length;\n actionbar.setAttribute('data-selected', count == countChecked ? \"all\" : countChecked);\n }\n ;\n });\n actionbar.addEventListener('selected', (event) => {\n if (event.detail.selected == '0') {\n Array.from(this.table.querySelectorAll('.selectrow input[type=\"checkbox\"]')).forEach((input, index) => {\n input.checked = false;\n });\n }\n else if (event.detail.selected == 'all') {\n Array.from(this.table.querySelectorAll('.selectrow input[type=\"checkbox\"]')).forEach((input, index) => {\n input.checked = true;\n });\n }\n });\n }\n // Make the dialog menus columns fixed \n let colIndex = -1;\n Array.from(this.table.querySelectorAll('tbody tr')).forEach((row, index) => {\n if (row.querySelector(':scope > td > .dialog__wrapper')) {\n let columnn = row.querySelector(':scope > td > .dialog__wrapper').parentNode;\n columnn.classList.add('td--fixed');\n colIndex = Array.from(columnn.parentNode.children).indexOf(columnn);\n }\n });\n if (colIndex != -1) {\n this.table.querySelector(`thead tr th:nth-child(${colIndex + 1})`).classList.add('th--fixed');\n Array.from(this.table.querySelectorAll(`tbody tr td:nth-child(${colIndex + 1})`)).forEach((col, index) => {\n col.classList.add('td--fixed');\n });\n }\n tableModule.makeTableFunctional(this.table, this.form, this.pagination, this);\n tableModule.filterTable(this.table, this.form, this);\n tableModule.populateDataQueries(this.table, this.form);\n }\n this.shadowRoot.querySelector('.table__wrapper').addEventListener(\"scroll\", (event) => {\n if (this.table.querySelector('dialog[open]')) {\n this.table.querySelector('dialog[open]').close();\n this.table.querySelector('.dialog__wrapper > button.active').classList.remove('active');\n }\n });\n }\n static get observedAttributes() {\n return [\"data-total\", \"data-page\", \"data-show\"];\n }\n attributeChangedCallback(attrName, oldVal, newVal) {\n this.pagination = this.shadowRoot.querySelector('iam-pagination');\n switch (attrName) {\n case \"data-total\": {\n if (oldVal != newVal) {\n this.pagination.setAttribute('data-total', newVal);\n }\n break;\n }\n case \"data-show\": {\n if (oldVal != newVal) {\n this.pagination.setAttribute('data-show', newVal);\n }\n break;\n }\n case \"data-page\": {\n if (oldVal != newVal) {\n this.pagination.setAttribute('data-page', newVal);\n }\n break;\n }\n }\n }\n}\nexport default iamTable;\n"],"names":["isNumeric","str","zeroPad","num","places","ucfirst","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","e","rejected","result","addDataAttributes","table","colHeadings","row","index","cells","statuses","cell","cellIndex","heading","tempDiv","headingText","formatCell","getLargestLastColWidth","largestWidth","htmlStyles","lastColChild","responsiveWidth","createMobileButton","wrapper","preExpanded","addTableEventListeners","event","button","tableRow","createSearchDataList","form","searchInput","searchID","searchableColumns","inputWrapper","searchableTerms","columnHeading","td","term","addFilterEventListeners","pagination","savedTableBody","timer","formSubmit","paginate","element","id","input","card","clickEvent","paginationInput","loadAjaxTable","filterTable","populateDataQueries","formData","queryString","http","sortTable","filters","frm_elements","i","label","forms","fields","mimicField","mimicInput","parentForm","updateMimicInput","mimickedAlready","key","field","tbody","select","selectedOption","sortBy","order","format","orderArray","tableArr","rowIndex","dataRow","a","b","strTbody","filterFilters","searches","matched","page","showRows","column","filterCount","filter","filterValue","isMatched","filterTd","yesterday","today","mondayThisWeek","sundayThisWeek","checkDate","mondayLastWeek","sundayLastWeek","year","month","firstDayMonth","lastDayMonth","firstDayLastMonth","lastDayLastMonth","isSearched","search","searchTd","queryElement","query","numberOfMatchedRows","queries","selector","queryParts","addPaginationEventListeners","newPage","url","y","showInput","addExportEventListeners","exportAsCSV","csvData","rows","cols","csvRow","j","CSVFile","tempLink","makeTableFunctional","outputsize","rowHeight","filterInput","dataFilter","resolvePath","object","path","defaultValue","p","o","columns","ajaxURL","signal","response","schema","totalNumberSchema","currentPageSchema","totalNumber","currentPage","data","emptyMsg","table_row","col","cellOutput","table_cell","cellTemplate","arrValue","rowValue","cellTemplateValue","cellOutputValue","propertyValue","transformValue","error","iamTable","assetLocation","coreCSS","template","params","classList","tableModule.createSearchDataList","tableModule.addTableEventListeners","tableModule.addFilterEventListeners","tableModule.addPaginationEventListeners","tableModule.addExportEventListeners","tableModule.loadAjaxTable","uniqueID","actionbar","rowID","count","countChecked","colIndex","columnn","tableModule.makeTableFunctional","tableModule.filterTable","tableModule.populateDataQueries","attrName","oldVal","newVal"],"mappings":"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"}