@iamproperty/components 3.7.9 → 3.9.0-beta-1

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 (88) hide show
  1. package/assets/css/components/accordion.css.map +1 -1
  2. package/assets/css/components/actionbar-global.css +1 -0
  3. package/assets/css/components/actionbar-global.css.map +1 -0
  4. package/assets/css/components/actionbar.css +1 -0
  5. package/assets/css/components/actionbar.css.map +1 -0
  6. package/assets/css/components/dialog.css +1 -1
  7. package/assets/css/components/dialog.css.map +1 -1
  8. package/assets/css/components/fileupload.css.map +1 -1
  9. package/assets/css/components/forms.css +1 -1
  10. package/assets/css/components/forms.css.map +1 -1
  11. package/assets/css/components/header.css +1 -1
  12. package/assets/css/components/header.css.map +1 -1
  13. package/assets/css/components/lists.css.map +1 -1
  14. package/assets/css/components/nav-global.css +1 -0
  15. package/assets/css/components/nav-global.css.map +1 -0
  16. package/assets/css/components/nav.css +1 -1
  17. package/assets/css/components/nav.css.map +1 -1
  18. package/assets/css/components/nav.docs.css +1 -0
  19. package/assets/css/components/nav.docs.css.map +1 -0
  20. package/assets/css/components/nav.old.css +1 -0
  21. package/assets/css/components/nav.old.css.map +1 -0
  22. package/assets/css/components/pagination.css.map +1 -1
  23. package/assets/css/components/property-searchbar.css +1 -1
  24. package/assets/css/components/property-searchbar.css.map +1 -1
  25. package/assets/css/components/table.css +1 -1
  26. package/assets/css/components/table.css.map +1 -1
  27. package/assets/css/core.min.css +1 -1
  28. package/assets/css/core.min.css.map +1 -1
  29. package/assets/css/style.min.css +1 -1
  30. package/assets/css/style.min.css.map +1 -1
  31. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  32. package/assets/js/components/actionbar/actionbar.component.js +305 -0
  33. package/assets/js/components/actionbar/actionbar.component.min.js +53 -0
  34. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -0
  35. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  36. package/assets/js/components/card/card.component.min.js +1 -1
  37. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  38. package/assets/js/components/header/header.component.min.js +2 -2
  39. package/assets/js/components/nav/nav.component.js +294 -0
  40. package/assets/js/components/nav/nav.component.min.js +51 -0
  41. package/assets/js/components/nav/nav.component.min.js.map +1 -0
  42. package/assets/js/components/notification/notification.component.min.js +1 -1
  43. package/assets/js/components/pagination/pagination.component.min.js +1 -1
  44. package/assets/js/components/table/table.component.js +33 -0
  45. package/assets/js/components/table/table.component.min.js +11 -10
  46. package/assets/js/components/table/table.component.min.js.map +1 -1
  47. package/assets/js/components/tabs/tabs.component.min.js +1 -1
  48. package/assets/js/dynamic.min.js +3 -3
  49. package/assets/js/dynamic.min.js.map +1 -1
  50. package/assets/js/modules/dialogs.js +18 -5
  51. package/assets/js/modules/table.js +22 -4
  52. package/assets/js/scripts.bundle.js +15 -14
  53. package/assets/js/scripts.bundle.js.map +1 -1
  54. package/assets/js/scripts.bundle.min.js +2 -2
  55. package/assets/js/scripts.bundle.min.js.map +1 -1
  56. package/assets/sass/_corefiles.scss +2 -0
  57. package/assets/sass/_functions/mixins.scss +25 -0
  58. package/assets/sass/_functions/variables.scss +5 -3
  59. package/assets/sass/components/actionbar-global.scss +89 -0
  60. package/assets/sass/components/actionbar.scss +254 -0
  61. package/assets/sass/components/dialog.scss +99 -1
  62. package/assets/sass/components/forms.scss +96 -21
  63. package/assets/sass/components/nav-global.scss +619 -0
  64. package/assets/sass/components/nav.docs.scss +54 -0
  65. package/assets/sass/components/nav.old.scss +965 -0
  66. package/assets/sass/components/nav.scss +450 -782
  67. package/assets/sass/components/table.scss +9 -1
  68. package/assets/sass/foundations/buttons.scss +87 -14
  69. package/assets/sass/foundations/links.scss +1 -1
  70. package/assets/sass/foundations/reboot.scss +5 -3
  71. package/assets/ts/components/actionbar/README.md +55 -0
  72. package/assets/ts/components/actionbar/actionbar.component.ts +396 -0
  73. package/assets/ts/components/nav/README.md +68 -0
  74. package/assets/ts/components/nav/nav.component.ts +370 -0
  75. package/assets/ts/components/table/table.component.ts +65 -0
  76. package/assets/ts/modules/dialogs.ts +24 -6
  77. package/assets/ts/modules/table.ts +29 -7
  78. package/dist/components.es.js +1013 -1258
  79. package/dist/components.umd.js +97 -47
  80. package/dist/style.css +1 -1
  81. package/package.json +1 -1
  82. package/src/components/Actionbar/Actionbar.vue +20 -0
  83. package/src/components/Actionbar/README.md +40 -0
  84. package/src/components/Nav/Nav.vue +20 -195
  85. package/src/components/Nav/README.md +43 -13
  86. package/src/components/Nav-old/Nav.vue +213 -0
  87. package/src/components/Nav-old/README.md +23 -0
  88. package/src/components/Nav/Nav.spec.js +0 -35
@@ -0,0 +1,51 @@
1
+ /*!
2
+ * iamKey v3.9.0-beta-1
3
+ * Copyright 2022-2023 iamproperty
4
+ */window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:"nav"});class p extends HTMLElement{constructor(){super();const d=this.attachShadow({mode:"open"}),n=document.body.hasAttribute("data-assets-location")?document.body.getAttribute("data-assets-location"):"/assets",r=document.body.hasAttribute("data-core-css")?document.body.getAttribute("data-core-css"):`${n}/css/core.min.css`,i=document.createElement("template");i.innerHTML=`
5
+ <style class="styles">
6
+ @import "${r}";
7
+ :host{display:flex !important;flex-direction:row;flex-wrap:wrap;align-items:center}::slotted(.brand){margin-right:auto}.btn-menu{padding:0;margin:0 0 0 2rem;text-align:center;height:3rem;padding-block:0.75rem;line-height:1.5rem;overflow:hidden;position:relative;background:none;border:none;width:1.5rem;text-indent:-1000%;color:var(--colour-brand)}.btn-menu i{font-size:1.5rem;line-height:1.5rem;position:absolute;text-indent:0px;width:1.5rem;text-align:center;top:0.75rem;right:0;margin:0 !important;transition:none !important}.btn-menu i+i{display:none}.btn-menu.selected i{display:none}.btn-menu.selected i+i{display:inline}@media screen and (max-width: 62em){.btn-menu>.btn{display:contents;display:contents;color:inherit !important;padding:0 !important;margin:0;font-weight:normal !important;line-height:inherit;font-size:inherit;transition:none !important}}@media screen and (min-width: 36em){.btn-menu{margin:0 0 0 3rem;width:auto;padding-right:1.875rem;text-indent:0}.btn-menu.selected{text-indent:-1000%}}@media screen and (min-width: 62em){.btn-menu{width:fit-content;height:auto;margin:0 0 0 3rem !important;padding:0 !important;text-indent:0;padding-right:0 !important}.btn-menu.selected{text-indent:0}.btn-menu .btn{margin:0 !important;display:flex}}@media screen and (min-width: 62em)and (prefers-color-scheme: light){.btn-menu .btn{--colour-muted: #9d9d9d;--colour-body: #595959;--colour-border: #D8D8D8;--colour-link: var(--colour-primary-theme);--colour-brand: var(--colour-primary-theme);--colour-underline: var(--colour-secondary);--colour-heading: var(--colour-primary);--colour-focus: var(--colour-primary-theme);--colour-hover: var(--colour-primary-theme);--colour-active: var(--colour-primary-theme);--colour-selected: var(--colour-info);--colour-inverted: #FCFCFC;--colour-btn: var(--colour-primary-theme);--colour-btn-bg: var(--colour-warning);--colour-btn-border: var(--colour-warning);--colour-btn-bg-hover: transparent;--colour-btn-hover: var(--colour-primary-theme);--colour-btn-secondary: var(--colour-primary-theme);--colour-btn-secondary-border: var(--colour-primary-theme);--colour-btn-secondary-bg: transparent;--colour-btn-secondary-bg-hover: var(--colour-primary-theme);--colour-btn-secondary-hover: var(--colour-inverted);--colour-canvas-2: var(--colour-canvas);--colour-btn-action-hover-bg: var(--colour-light)}.btn-menu .btn .text-primary{color:var(--colour-primary) !important}.btn-menu .btn:is(:hover,:focus){color:var(--colour-inverted)}}@media screen and (min-width: 62em){.btn-menu .btn span{order:2}.btn-menu .btn i[class*=fa-]{position:relative;position:static;vertical-align:bottom;display:inline-block;font-size:1.2rem;margin-right:1rem !important;line-height:1em}.btn-menu .btn i[class*=fa-]+i[class*=fa-]{display:none}}@media screen and (max-width: 62em){:host>.container{display:contents}.menu__outer{position:absolute;top:6rem;left:0;width:100%;height:calc(100vh - 6rem);overflow:hidden;pointer-events:none;transition:background .5s}.menu__outer:has(.menu.open){background:rgba(0,0,0,.2);backdrop-filter:blur(2px)}.menu::-webkit-scrollbar{width:6px}.menu::-webkit-scrollbar-track{border:0 !important}.menu::-webkit-scrollbar-thumb{border:0 !important}.menu{overscroll-behavior:contain;width:calc(23.4375rem - var(--scrollbar-width));background-color:var(--colour-canvas-2);position:absolute;height:calc(100vh - 6rem);left:100%;top:0;padding:0 1.5rem 0 1.5rem;z-index:var(--index-menu);overflow:auto;transition:all 1s ease-out;display:flex;flex-direction:column;flex-wrap:nowrap}.menu>*{flex-shrink:0}}@media screen and (max-width: 62em)and (prefers-color-scheme: dark){.menu{--colour-link: var(--colour-white);--colour-canvas: #262626;--colour-canvas-2: #313131;--colour-body: #BFBFBF;--colour-heading: var(--colour-white);--colour-link: var(--colour-white);--colour-hover: var(--colour-white);--colour-active: var(--colour-white);--colour-border: var(--colour-white);--colour-brand: var(--colour-white);--colour-btn: #00313c;--colour-btn-border: var(--colour-white);--colour-btn-bg: var(--colour-white);--colour-btn-hover: var(--colour-white);--colour-btn-secondary: var(--colour-white);--colour-btn-secondary-border: var(--colour-white);--colour-btn-secondary-bg: transparent;--colour-btn-secondary-bg-hover: var(--colour-white);--colour-btn-secondary-hover: var(--colour-primary-theme);--colour-btn-action-hover-bg: var(--colour-canvas-2)}}@media screen and (max-width: 62em)and (prefers-color-scheme: light){.menu{background-color:var(--colour-white);--colour-muted: #9d9d9d;--colour-body: #595959;--colour-border: #D8D8D8;--colour-link: var(--colour-primary-theme);--colour-brand: var(--colour-primary-theme);--colour-underline: var(--colour-secondary);--colour-heading: var(--colour-primary);--colour-focus: var(--colour-primary-theme);--colour-hover: var(--colour-primary-theme);--colour-active: var(--colour-primary-theme);--colour-selected: var(--colour-info);--colour-inverted: #FCFCFC;--colour-btn: var(--colour-primary-theme);--colour-btn-bg: var(--colour-warning);--colour-btn-border: var(--colour-warning);--colour-btn-bg-hover: transparent;--colour-btn-hover: var(--colour-primary-theme);--colour-btn-secondary: var(--colour-primary-theme);--colour-btn-secondary-border: var(--colour-primary-theme);--colour-btn-secondary-bg: transparent;--colour-btn-secondary-bg-hover: var(--colour-primary-theme);--colour-btn-secondary-hover: var(--colour-inverted);--colour-canvas-2: var(--colour-canvas);--colour-btn-action-hover-bg: var(--colour-light)}.menu .text-primary{color:var(--colour-primary) !important}}@media screen and (max-width: 62em)and (forced-colors: active){.menu{outline:1px solid #fff}}@media screen and (max-width: 62em){.menu:before{content:"";position:absolute;display:block;top:0;left:0;width:100%;border-top:2px solid var(--colour-border);z-index:1}.menu.open{left:calc(100% - (23.4375rem - var(--scrollbar-width)));-webkit-box-shadow:0 6px 12px 0px rgba(0,0,0,.2);box-shadow:0 6px 12px 0px rgba(0,0,0,.2);pointer-events:all}.menu.closed *{display:none !important}.menu__secondary{display:none}.has-secondary .menu__secondary{display:block;margin-left:-1.5rem;margin-right:-1.5rem;padding-left:1.5rem;padding-right:1.5rem;padding-bottom:3rem !important;flex-grow:1;position:relative}}@media screen and (max-width: 62em)and (prefers-color-scheme: light){.has-secondary .menu__secondary{background-color:#eee}}@media screen and (max-width: 62em){.has-secondary .menu__secondary .container{display:contents}::slotted(a:not([slot=logo])){display:block !important;line-height:1.25rem !important;padding:1.5rem 0 !important;margin:0 !important;flex-shrink:0;font-size:1rem !important;font-weight:normal !important}::slotted(a:not([slot=logo])):after{content:"";display:block;height:2px;width:100% !important;background-color:var(--colour-border) !important;top:calc(100% - 2px) !important}*:is(.has-search,.has-actions) .menu__primary{display:block;padding-bottom:3rem}.menu:not(.has-secondary) .menu__primary{display:block;padding-bottom:3rem}::slotted(button){display:block !important;margin:0 0 1.5rem 0 !important;width:100% !important;max-width:100% !important;text-align:center !important;flex-shrink:0}.has-actions slot[name=actions]{display:block;padding-bottom:1.5rem}slot[name=actions]::slotted(button){margin-top:0 !important}.dialog__wrapper{width:100%;margin:0 0 3rem 0 !important;flex-shrink:0}.dialog__wrapper>.btn{display:none}.dialog__wrapper dialog{display:contents}}@media screen and (max-width: 62em)and (min-width: 36em){.menu{padding-right:2.5rem !important}.has-secondary .menu__secondary{margin-right:-2.5rem !important;padding-right:2.5rem !important}.has-secondary .menu__secondary:before{width:calc(100% - 4rem) !important}::slotted(button){width:auto !important}}@media screen and (min-width: 62em){:host{max-width:100% !important;padding:0 !important}:host>.container{padding-block:1.5rem !important;display:flex;flex-wrap:nowrap;align-items:center}:host>.container:has(.has-secondary){padding-top:4rem !important}:host>.container>*{margin-bottom:0 !important}.btn-menu{display:none}.buttons-holder{display:contents}.buttons-holder .btn-menu{display:inline-block;order:2}.menu,.menu__outer,.menu__primary{display:contents}.menu__secondary{display:none}.has-secondary .menu__secondary{background-color:var(--colour-canvas-2);display:block;position:absolute;top:0;left:0;width:100%}}@media screen and (min-width: 62em)and (prefers-color-scheme: light){.has-secondary .menu__secondary{background-color:#eee;--colour-muted: #9d9d9d;--colour-body: #595959;--colour-border: #D8D8D8;--colour-link: var(--colour-primary-theme);--colour-brand: var(--colour-primary-theme);--colour-underline: var(--colour-secondary);--colour-heading: var(--colour-primary);--colour-focus: var(--colour-primary-theme);--colour-hover: var(--colour-primary-theme);--colour-active: var(--colour-primary-theme);--colour-selected: var(--colour-info);--colour-inverted: #FCFCFC;--colour-btn: var(--colour-primary-theme);--colour-btn-bg: var(--colour-warning);--colour-btn-border: var(--colour-warning);--colour-btn-bg-hover: transparent;--colour-btn-hover: var(--colour-primary-theme);--colour-btn-secondary: var(--colour-primary-theme);--colour-btn-secondary-border: var(--colour-primary-theme);--colour-btn-secondary-bg: transparent;--colour-btn-secondary-bg-hover: var(--colour-primary-theme);--colour-btn-secondary-hover: var(--colour-inverted);--colour-canvas-2: var(--colour-canvas);--colour-btn-action-hover-bg: var(--colour-light)}.has-secondary .menu__secondary .text-primary{color:var(--colour-primary) !important}}@media screen and (min-width: 62em)and (prefers-color-scheme: dark){.has-secondary .menu__secondary{--colour-canvas: #262626;--colour-canvas-2: #313131;--colour-body: #BFBFBF;--colour-heading: var(--colour-white);--colour-link: var(--colour-white);--colour-hover: var(--colour-white);--colour-active: var(--colour-white);--colour-border: var(--colour-white);--colour-brand: var(--colour-white);--colour-btn: #00313c;--colour-btn-border: var(--colour-white);--colour-btn-bg: var(--colour-white);--colour-btn-hover: var(--colour-white);--colour-btn-secondary: var(--colour-white);--colour-btn-secondary-border: var(--colour-white);--colour-btn-secondary-bg: transparent;--colour-btn-secondary-bg-hover: var(--colour-white);--colour-btn-secondary-hover: var(--colour-primary-theme);--colour-btn-action-hover-bg: var(--colour-canvas-2)}}@media screen and (min-width: 62em){.has-secondary .menu__secondary .container{margin-left:auto;margin-right:auto;padding:var(--container-padding) !important;padding-top:0.5rem !important;padding-bottom:0.5rem !important;text-align:right}::slotted(a[slot=secondary]){font-size:0.875rem !important}::slotted(a[slot=secondary]):after{top:calc(100% - .25em) !important}::slotted(a:not([slot=logo])),::slotted(button){margin-bottom:0 !important;margin-right:0 !important}::slotted(a:not([slot=logo])){margin-left:2rem !important;font-size:1rem !important;font-weight:normal !important}::slotted(a:not([slot=logo])):after{display:none}::slotted(button){margin-left:3rem !important}.has-actions slot[name=actions]{display:block;padding-left:3rem}slot[name=actions]::slotted(button){margin-left:0.75rem !important}:host([data-search]) slot[name=actions]{padding-left:0 !important}#search-wrapper{margin-left:1.5rem !important;position:static}#search-dialog[open]{position:absolute;top:auto;bottom:0;left:0;width:100%;padding-block:1.5rem;padding-inline:0;background-color:rgba(0,0,0,0);text-align:right;border-radius:0;box-shadow:none}#search-dialog[open] .container{padding:var(--container-padding);padding-bottom:0}:host(.search-open){background:#e6eaec !important}}@media screen and (min-width: 62em)and (prefers-color-scheme: dark){:host(.search-open){background:var(--colour-canvas-2) !important}}@media screen and (min-width: 62em){:host(.search-open) .buttons-holder,:host(.search-open) #search-button{display:none}:host(.search-open.bg-primary){background:var(--colour-primary) !important}:host(.search-open.bg-primary) .suffix,:host(.search-open.bg-primary) #search{border:2px solid #b3c1c5;color:#fff}:host(.search-open.bg-primary) #search{border-right:0}.backdrop{content:"";display:block;position:absolute;top:100%;left:0;height:calc(100vh - var(--nav-height));width:100%;z-index:-1;pointer-events:none;transition:background .5s}.backdrop.show{pointer-events:all;background:rgba(0,0,0,.2);backdrop-filter:blur(2px)}}::slotted(.nav--menu){overscroll-behavior:contain;width:calc(23.4375rem - var(--scrollbar-width));background-color:var(--colour-canvas-2);position:absolute;height:calc(100vh - 6rem);left:100%;top:0;padding:0 1.5rem 0 1.5rem;z-index:var(--index-menu);overflow:auto;transition:all 1s ease-out;display:flex;flex-direction:column;flex-wrap:nowrap}::slotted(.nav--menu)>*{flex-shrink:0}@media screen and (prefers-color-scheme: dark){::slotted(.nav--menu){--colour-link: var(--colour-white);--colour-canvas: #262626;--colour-canvas-2: #313131;--colour-body: #BFBFBF;--colour-heading: var(--colour-white);--colour-link: var(--colour-white);--colour-hover: var(--colour-white);--colour-active: var(--colour-white);--colour-border: var(--colour-white);--colour-brand: var(--colour-white);--colour-btn: #00313c;--colour-btn-border: var(--colour-white);--colour-btn-bg: var(--colour-white);--colour-btn-hover: var(--colour-white);--colour-btn-secondary: var(--colour-white);--colour-btn-secondary-border: var(--colour-white);--colour-btn-secondary-bg: transparent;--colour-btn-secondary-bg-hover: var(--colour-white);--colour-btn-secondary-hover: var(--colour-primary-theme);--colour-btn-action-hover-bg: var(--colour-canvas-2)}}@media screen and (prefers-color-scheme: light){::slotted(.nav--menu){background-color:var(--colour-white);--colour-muted: #9d9d9d;--colour-body: #595959;--colour-border: #D8D8D8;--colour-link: var(--colour-primary-theme);--colour-brand: var(--colour-primary-theme);--colour-underline: var(--colour-secondary);--colour-heading: var(--colour-primary);--colour-focus: var(--colour-primary-theme);--colour-hover: var(--colour-primary-theme);--colour-active: var(--colour-primary-theme);--colour-selected: var(--colour-info);--colour-inverted: #FCFCFC;--colour-btn: var(--colour-primary-theme);--colour-btn-bg: var(--colour-warning);--colour-btn-border: var(--colour-warning);--colour-btn-bg-hover: transparent;--colour-btn-hover: var(--colour-primary-theme);--colour-btn-secondary: var(--colour-primary-theme);--colour-btn-secondary-border: var(--colour-primary-theme);--colour-btn-secondary-bg: transparent;--colour-btn-secondary-bg-hover: var(--colour-primary-theme);--colour-btn-secondary-hover: var(--colour-inverted);--colour-canvas-2: var(--colour-canvas);--colour-btn-action-hover-bg: var(--colour-light)}::slotted(.nav--menu) .text-primary{color:var(--colour-primary) !important}}@media(forced-colors: active){::slotted(.nav--menu){outline:1px solid #fff}}::slotted(.nav--menu):before{display:block;width:100%;border-top:2px solid var(--colour-border);z-index:1;padding-block:1.5rem;margin:0;font-family:var(--font-heading);font-style:normal;font-weight:var(--heading-weight);color:var(--colour-heading);clear:both;font-size:1.75rem;line-height:2.25rem;max-width:var(--content-max-width)}@media screen and (min-width: 36em){::slotted(.nav--menu):before{font-size:2rem;line-height:2.5rem}}::slotted(.nav--menu):before{content:attr(data-title)}@media screen and (min-width: 62em){::slotted(.nav--menu){height:calc(100vh - var(--nav-height));top:100%}}::slotted(.nav--menu.open){left:calc(100% - (23.4375rem - var(--scrollbar-width)));-webkit-box-shadow:0 6px 12px 0px rgba(0,0,0,.2);box-shadow:0 6px 12px 0px rgba(0,0,0,.2);pointer-events:all}@media screen and (max-width: 62em){:host(.open) .menu__outer{background:rgba(0,0,0,.2);backdrop-filter:blur(2px)}}/*# sourceMappingURL=assets/css/components/nav.css.map */
8
+
9
+ </style>
10
+ <link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous">
11
+ <div class="container">
12
+ <slot name="logo"></slot>
13
+ <div class="buttons-holder"></div>
14
+ <button class="btn-menu">Menu<i class="fa-regular fa-bars"></i><i class="fa-regular fa-xmark-large"></i></button>
15
+
16
+ <div class="menu__outer">
17
+ <div class="menu closed">
18
+
19
+ <div class="menu__primary">
20
+ <slot></slot>
21
+ <slot name="dual"></slot>
22
+ </div>
23
+ <div class="dialog__wrapper d-none" id="search-wrapper"></div>
24
+ <slot name="actions"></slot>
25
+ <div class="menu__secondary">
26
+ <div class="container">
27
+ <slot name="secondary"></slot>
28
+ </div>
29
+ </div>
30
+ </div>
31
+ <slot name="menus"></slot>
32
+ </div>
33
+ </div>
34
+ <div class="lists"></div>
35
+ <div class="backdrop" part="backdrop"></div>
36
+ `,d.appendChild(i.content.cloneNode(!0))}connectedCallback(){this.hasAttribute("data-css")&&this.shadowRoot.querySelector(".styles").insertAdjacentHTML("beforeend",`@import "${this.getAttribute("data-css")}";`);const d=this.shadowRoot.querySelector(".btn-menu"),n=this.shadowRoot.querySelector(".menu"),r=this,i=this.shadowRoot.querySelector(".backdrop"),h=this.shadowRoot.querySelector(".buttons-holder");if(this.querySelectorAll(":scope > *").forEach(function(o){switch(o.tagName){case"BUTTON":o.setAttribute("slot","actions"),n.classList.add("has-actions");break}if(o.classList.contains("nav--menu")&&o.hasAttribute("data-title")&&o.hasAttribute("data-icon")){const t=o.getAttribute("data-title"),l=o.getAttribute("data-icon"),e=document.createElement("button");e.setAttribute("slot",t),e.classList.add("btn-menu"),e.innerHTML=`<span class="btn btn-primary"><span>${t}</span><i class="${l}"></i><i class="fa-regular fa-xmark-large"></i></span>`,h.insertAdjacentElement("beforeend",e);const u=e.querySelector(".btn-primary");o.setAttribute("slot","menus"),o.classList.contains("open")?(e.classList.add("selected"),u.classList.toggle("active"),r.classList.add("open"),i.classList.add("show")):o.classList.add("closed"),e.addEventListener("click",function(c){c.preventDefault(),e.classList.toggle("selected"),o.classList.toggle("open"),u.classList.toggle("active");let s=r.querySelector(":scope > details[open]");s&&s.removeAttribute("open"),o.classList.contains("open")?(n.classList.remove("open"),d.classList.remove("selected"),setTimeout(function(){n.classList.add("closed")},1e3),r.classList.add("open"),i.classList.add("show"),o.classList.remove("closed")):(r.classList.remove("open"),i.classList.remove("show"),setTimeout(function(){o.classList.add("closed")},1e3)),r.querySelectorAll(".nav--menu.open").forEach(function(m){m!=o&&m.classList.remove("open")}),r.shadowRoot.querySelectorAll(".buttons-holder .btn-menu.selected").forEach(function(m){m!=e&&(m.classList.remove("selected"),m.querySelector(".btn-primary").classList.remove("active"))})},!1)}}),this.querySelector('a[slot="secondary"]')&&n.classList.add("has-secondary"),document.documentElement.style.setProperty("--scrollbar-width",window.innerWidth-document.documentElement.offsetWidth+"px"),d.addEventListener("click",function(o){o.preventDefault(),d.classList.toggle("selected"),n.classList.toggle("open"),r.querySelectorAll(".nav--menu.open").forEach(function(a){a.classList.remove("open"),setTimeout(function(){a.classList.add("closed")},1e3)}),r.shadowRoot.querySelectorAll(".buttons-holder .btn-menu.selected").forEach(function(a){a.classList.remove("selected"),a.querySelector(".btn-primary").classList.remove("active")}),n.classList.contains("open")?(r.classList.add("open"),n.classList.remove("closed")):(r.classList.remove("open"),setTimeout(function(){n.classList.add("closed")},1e3))},!1),this.addEventListener("request-close",o=>{d.classList.remove("selected"),n.classList.remove("open"),r.classList.remove("open")}),i.addEventListener("click",o=>{let a=this.querySelector("details[open] summary");a&&a.click(),r.querySelectorAll(".nav--menu.open").forEach(function(t){t.classList.remove("open")}),r.shadowRoot.querySelectorAll(".buttons-holder .btn-menu.selected").forEach(function(t){t.classList.remove("selected"),t.querySelector(".btn-primary").classList.remove("active")}),i.classList.remove("show")}),this.addEventListener("click",o=>{if(o&&o.target instanceof HTMLElement&&o.target.closest("summary")&&window.innerWidth>992){let t=o.target.closest("summary").closest("details"),l=t.parentNode;t.hasAttribute("open")?t.removeAttribute("open"):t.setAttribute("open","true"),r.querySelectorAll(".nav--menu.open").forEach(function(e){e.classList.remove("open"),setTimeout(function(){n.classList.add("closed")},1e3)}),r.shadowRoot.querySelectorAll(".buttons-holder .btn-menu.selected").forEach(function(e){e.classList.remove("selected"),e.querySelector(".btn-primary").classList.remove("active")}),Array.from(l.querySelectorAll(":scope > details")).forEach((e,u)=>{e!=t&&e.removeAttribute("open")}),this.querySelectorAll(":scope > details[open]").length?(i.classList.add("show"),r.classList.add("open")):(i.classList.remove("show"),r.classList.remove("open")),o.preventDefault()}}),this.querySelectorAll("details").forEach(o=>{let a=o.querySelector("summary");o.querySelector(":Scope > div").setAttribute("data-title",a.textContent)}),this.hasAttribute("data-search")){n.classList.add("has-search");let o=this.shadowRoot.querySelector("#search-wrapper");o.classList.remove("d-none"),o.insertAdjacentHTML("afterbegin",`<button class="btn btn-secondary btn-compact fa-search me-0 mb-0" id="search-button">Open Search field</button>
37
+ <dialog id="search-dialog">
38
+ <div class="container">
39
+ <form action="${this.hasAttribute("data-search")?this.getAttribute("data-search"):""}" class="row" id="search-form">
40
+ <div class="col mb-0 ms-auto col-md-7">
41
+ <label for="search" class="visually-hidden">Search</label>
42
+ <button class="suffix me-0 mb-0"><i class="fa-regular fa-search"></i></button>
43
+ <input type="search" class="" id="search" name="search" required="" autocomplete="off" data-list="${this.hasAttribute("data-list")?this.getAttribute("data-list"):""}" />
44
+ </div>
45
+ <div class="col d-none d-md-block mw-fit-content ms-3">
46
+ <button class="btn btn-compact btn-secondary fa-xmark-large m-0 mb-0" type="button" id="search-close"></button>
47
+ </div>
48
+ </form>
49
+ </div>
50
+ </dialog>`);let a=this.shadowRoot.querySelector("#search-button"),t=this.shadowRoot.querySelector("#search-close"),l=this.shadowRoot.querySelector("#search-dialog"),e=this.shadowRoot.querySelector("#search"),u=this.shadowRoot.querySelector("#search-form");this.hasAttribute("data-search-open")&&(l.setAttribute("open","open"),this.classList.add("search-open")),a.addEventListener("click",c=>{l.setAttribute("open","open"),this.classList.add("search-open")}),t.addEventListener("click",c=>{l.removeAttribute("open"),this.classList.remove("search-open")}),e.addEventListener("keydown",c=>{const s=new CustomEvent("search-keydown",{detail:{search:e.value}});this.dispatchEvent(s)}),e.addEventListener("keyup",c=>{e.value.length>=3&&e.hasAttribute("data-list")?e.setAttribute("list",e.getAttribute("data-list")):e.removeAttribute("list");const s=new CustomEvent("search-keyup",{detail:{search:e.value}});this.dispatchEvent(s)}),e.addEventListener("change",c=>{const s=new CustomEvent("search-change",{detail:{search:e.value}});this.dispatchEvent(s)}),u.addEventListener("submit",c=>{this.hasAttribute("data-prevent-search")&&c.preventDefault();const s=new CustomEvent("search-submit",{detail:{search:e.value}});this.dispatchEvent(s)}),this.querySelectorAll("datalist").forEach(c=>{r.shadowRoot.querySelector(".lists").insertAdjacentElement("beforeend",c)})}}}export{p as default};
51
+ //# sourceMappingURL=nav.component.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav.component.min.js","sources":["nav.component.js"],"sourcesContent":["// @ts-nocheck\n// Data layer Web component created\nwindow.dataLayer = window.dataLayer || [];\nwindow.dataLayer.push({\n \"event\": \"customElementRegistered\",\n \"element\": \"nav\"\n});\nclass iamNav extends HTMLElement {\n constructor() {\n super();\n const shadowRoot = 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/nav.css\";`;\n const template = document.createElement('template');\n template.innerHTML = `\n <style class=\"styles\">\n @import \"${coreCSS}\";\n ${loadCSS}\n </style>\n <link rel=\"stylesheet\" href=\"https://kit.fontawesome.com/26fdbf0179.css\" crossorigin=\"anonymous\">\n <div class=\"container\">\n <slot name=\"logo\"></slot>\n <div class=\"buttons-holder\"></div>\n <button class=\"btn-menu\">Menu<i class=\"fa-regular fa-bars\"></i><i class=\"fa-regular fa-xmark-large\"></i></button>\n\n <div class=\"menu__outer\">\n <div class=\"menu closed\">\n \n <div class=\"menu__primary\">\n <slot></slot>\n <slot name=\"dual\"></slot>\n </div>\n <div class=\"dialog__wrapper d-none\" id=\"search-wrapper\"></div>\n <slot name=\"actions\"></slot>\n <div class=\"menu__secondary\">\n <div class=\"container\">\n <slot name=\"secondary\"></slot>\n </div>\n </div>\n </div>\n <slot name=\"menus\"></slot>\n </div> \n </div>\n <div class=\"lists\"></div>\n <div class=\"backdrop\" part=\"backdrop\"></div>\n `;\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n // Load external CSS if needed\n if (this.hasAttribute('data-css'))\n this.shadowRoot.querySelector('.styles').insertAdjacentHTML('beforeend', `@import \"${this.getAttribute('data-css')}\";`);\n const menuButton = this.shadowRoot.querySelector('.btn-menu');\n const menu = this.shadowRoot.querySelector('.menu');\n const iamNav = this;\n const backdrop = this.shadowRoot.querySelector('.backdrop');\n const buttonsHolder = this.shadowRoot.querySelector('.buttons-holder');\n // Check the content \n this.querySelectorAll(':scope > *').forEach(function (element) {\n let tagname = element.tagName;\n switch (tagname) {\n case \"BUTTON\":\n element.setAttribute('slot', 'actions');\n menu.classList.add('has-actions');\n break;\n }\n // Create menu button\n if (element.classList.contains('nav--menu') && element.hasAttribute('data-title') && element.hasAttribute('data-icon')) {\n const title = element.getAttribute('data-title');\n const iconClass = element.getAttribute('data-icon');\n // Create the menu button that sits seperately to the menu\n const button = document.createElement('button');\n button.setAttribute('slot', title);\n button.classList.add('btn-menu');\n button.innerHTML = `<span class=\"btn btn-primary\"><span>${title}</span><i class=\"${iconClass}\"></i><i class=\"fa-regular fa-xmark-large\"></i></span>`;\n buttonsHolder.insertAdjacentElement('beforeend', button);\n const mdButton = button.querySelector('.btn-primary');\n // Make sure the menu is added to the right part of the component\n element.setAttribute('slot', 'menus');\n // If open we need to make sure the main mobile menu is closed, the new button has the right state and the backdrop is shown\n if (element.classList.contains('open')) {\n button.classList.add('selected');\n mdButton.classList.toggle('active');\n iamNav.classList.add('open');\n backdrop.classList.add('show');\n }\n else {\n element.classList.add('closed'); // closed class is added to prevent the elements being tabbed into, this causes visual issues\n }\n // Click event\n button.addEventListener('click', function (e) {\n e.preventDefault();\n button.classList.toggle('selected');\n element.classList.toggle('open');\n mdButton.classList.toggle('active');\n // Close desktop menus\n let openMenu = iamNav.querySelector(':scope > details[open]');\n if (openMenu)\n openMenu.removeAttribute('open');\n // Close the main menu and fix states on the button, iamNav component and backdrop\n if (element.classList.contains('open')) {\n menu.classList.remove('open');\n menuButton.classList.remove('selected');\n setTimeout(function () { menu.classList.add('closed'); }, 1000); // Delay until its close so the animation is broken\n iamNav.classList.add('open');\n backdrop.classList.add('show');\n element.classList.remove('closed');\n }\n else {\n iamNav.classList.remove('open');\n backdrop.classList.remove('show');\n setTimeout(function () { element.classList.add('closed'); }, 1000);\n }\n // Close any open menus\n iamNav.querySelectorAll('.nav--menu.open').forEach(function (openmenu) {\n if (openmenu != element) {\n openmenu.classList.remove('open');\n }\n });\n iamNav.shadowRoot.querySelectorAll('.buttons-holder .btn-menu.selected').forEach(function (selectedButton) {\n if (selectedButton != button) {\n selectedButton.classList.remove('selected');\n let innerBtn = selectedButton.querySelector('.btn-primary');\n innerBtn.classList.remove('active');\n }\n });\n }, false);\n }\n });\n // Has secondary link\n if (this.querySelector('a[slot=\"secondary\"]')) {\n menu.classList.add('has-secondary');\n }\n // Create a scroll width variable to help with the sizing of the menu with in the CSS\n document.documentElement.style.setProperty('--scrollbar-width', (window.innerWidth - document.documentElement.offsetWidth) + 'px');\n // Open and close the menu\n menuButton.addEventListener('click', function (e) {\n e.preventDefault();\n menuButton.classList.toggle('selected');\n menu.classList.toggle('open');\n // Close any other menus\n iamNav.querySelectorAll('.nav--menu.open').forEach(function (element) {\n element.classList.remove('open');\n setTimeout(function () { element.classList.add('closed'); }, 1000);\n });\n iamNav.shadowRoot.querySelectorAll('.buttons-holder .btn-menu.selected').forEach(function (element) {\n element.classList.remove('selected');\n let innerBtn = element.querySelector('.btn-primary');\n innerBtn.classList.remove('active');\n });\n if (menu.classList.contains('open')) {\n iamNav.classList.add('open');\n menu.classList.remove('closed');\n }\n else {\n iamNav.classList.remove('open');\n setTimeout(function () { menu.classList.add('closed'); }, 1000);\n }\n }, false);\n // Allow outside JS to close the menu\n this.addEventListener(\"request-close\", (event) => {\n menuButton.classList.remove('selected');\n menu.classList.remove('open');\n iamNav.classList.remove('open');\n });\n // Close the menu on the click of the backdrop on desktop\n backdrop.addEventListener(\"click\", (event) => {\n let openMenu = this.querySelector('details[open] summary');\n if (openMenu)\n openMenu.click();\n iamNav.querySelectorAll('.nav--menu.open').forEach(function (element) {\n element.classList.remove('open');\n });\n iamNav.shadowRoot.querySelectorAll('.buttons-holder .btn-menu.selected').forEach(function (element) {\n element.classList.remove('selected');\n let innerBtn = element.querySelector('.btn-primary');\n innerBtn.classList.remove('active');\n });\n backdrop.classList.remove('show');\n });\n // On desktop close other menu's (details) when one is clicked\n this.addEventListener(\"click\", (event) => {\n if (event && event.target instanceof HTMLElement && event.target.closest('summary')) {\n if (window.innerWidth > 992) {\n let summary = event.target.closest('summary');\n let details = summary.closest('details');\n let wrapper = details.parentNode;\n if (details.hasAttribute('open'))\n details.removeAttribute('open');\n else\n details.setAttribute('open', 'true');\n // Close any bespoke menus\n iamNav.querySelectorAll('.nav--menu.open').forEach(function (element) {\n element.classList.remove('open');\n setTimeout(function () { menu.classList.add('closed'); }, 1000);\n });\n iamNav.shadowRoot.querySelectorAll('.buttons-holder .btn-menu.selected').forEach(function (element) {\n element.classList.remove('selected');\n let innerBtn = element.querySelector('.btn-primary');\n innerBtn.classList.remove('active');\n });\n // Close any other dropdowns on the same level\n Array.from(wrapper.querySelectorAll(':scope > details')).forEach((detailsArrayElement, index) => {\n if (detailsArrayElement != details)\n detailsArrayElement.removeAttribute('open');\n });\n if (this.querySelectorAll(':scope > details[open]').length) {\n backdrop.classList.add('show');\n iamNav.classList.add('open');\n }\n else {\n backdrop.classList.remove('show');\n iamNav.classList.remove('open');\n }\n event.preventDefault();\n }\n }\n ;\n });\n // Mega menu title\n this.querySelectorAll('details').forEach((detailsElement) => {\n let summary = detailsElement.querySelector('summary');\n let containerDiv = detailsElement.querySelector(':Scope > div');\n containerDiv.setAttribute('data-title', summary.textContent);\n });\n // Search \n if (this.hasAttribute('data-search')) {\n menu.classList.add('has-search');\n let searchWrapper = this.shadowRoot.querySelector('#search-wrapper');\n searchWrapper.classList.remove('d-none');\n searchWrapper.insertAdjacentHTML('afterbegin', `<button class=\"btn btn-secondary btn-compact fa-search me-0 mb-0\" id=\"search-button\">Open Search field</button>\n <dialog id=\"search-dialog\">\n <div class=\"container\">\n <form action=\"${this.hasAttribute('data-search') ? this.getAttribute('data-search') : ''}\" class=\"row\" id=\"search-form\">\n <div class=\"col mb-0 ms-auto col-md-7\">\n <label for=\"search\" class=\"visually-hidden\">Search</label>\n <button class=\"suffix me-0 mb-0\"><i class=\"fa-regular fa-search\"></i></button>\n <input type=\"search\" class=\"\" id=\"search\" name=\"search\" required=\"\" autocomplete=\"off\" data-list=\"${this.hasAttribute('data-list') ? this.getAttribute('data-list') : ''}\" />\n </div>\n <div class=\"col d-none d-md-block mw-fit-content ms-3\">\n <button class=\"btn btn-compact btn-secondary fa-xmark-large m-0 mb-0\" type=\"button\" id=\"search-close\"></button>\n </div>\n </form>\n </div>\n </dialog>`);\n let searchButton = this.shadowRoot.querySelector('#search-button');\n let searchClose = this.shadowRoot.querySelector('#search-close');\n let searchDialog = this.shadowRoot.querySelector('#search-dialog');\n let searchInput = this.shadowRoot.querySelector('#search');\n let searchForm = this.shadowRoot.querySelector('#search-form');\n if (this.hasAttribute('data-search-open')) {\n searchDialog.setAttribute('open', 'open');\n this.classList.add('search-open');\n }\n searchButton.addEventListener(\"click\", (event) => {\n searchDialog.setAttribute('open', 'open');\n this.classList.add('search-open');\n });\n searchClose.addEventListener(\"click\", (event) => {\n searchDialog.removeAttribute('open');\n this.classList.remove('search-open');\n });\n // Search events\n searchInput.addEventListener('keydown', (event) => {\n const keyupEvent = new CustomEvent(\"search-keydown\", { detail: { search: searchInput.value } });\n this.dispatchEvent(keyupEvent);\n });\n searchInput.addEventListener('keyup', (event) => {\n if (searchInput.value.length >= 3 && searchInput.hasAttribute('data-list'))\n searchInput.setAttribute(\"list\", searchInput.getAttribute('data-list'));\n else\n searchInput.removeAttribute(\"list\");\n const keyupEvent = new CustomEvent(\"search-keyup\", { detail: { search: searchInput.value } });\n this.dispatchEvent(keyupEvent);\n });\n searchInput.addEventListener('change', (event) => {\n const changeEvent = new CustomEvent(\"search-change\", { detail: { search: searchInput.value } });\n this.dispatchEvent(changeEvent);\n });\n searchForm.addEventListener('submit', (event) => {\n if (this.hasAttribute('data-prevent-search'))\n event.preventDefault();\n const submitEvent = new CustomEvent(\"search-submit\", { detail: { search: searchInput.value } });\n this.dispatchEvent(submitEvent);\n });\n // Make sure any child lists are available to the search input\n this.querySelectorAll('datalist').forEach((list) => {\n iamNav.shadowRoot.querySelector('.lists').insertAdjacentElement('beforeend', list);\n });\n }\n }\n}\nexport default iamNav;\n"],"names":["iamNav","shadowRoot","assetLocation","coreCSS","template","menuButton","menu","backdrop","buttonsHolder","element","title","iconClass","button","mdButton","e","openMenu","openmenu","selectedButton","event","details","wrapper","detailsArrayElement","index","detailsElement","summary","searchWrapper","searchButton","searchClose","searchDialog","searchInput","searchForm","keyupEvent","changeEvent","submitEvent","list"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v3.7.9
2
+ * iamKey v3.9.0-beta-1
3
3
  * Copyright 2022-2023 iamproperty
4
4
  */function r(i){if(i.hasAttribute("data-type")&&i.getAttribute("data-type")=="toast"){let t=document.querySelector(".notification__holder");t||(t=document.createElement("div"),t.classList.add("notification__holder"),t.classList.add("container"),document.querySelector("body").appendChild(t)),i.closest(".notification__holder")||t.appendChild(i)}if(i.setAttribute("role","alert"),i.addEventListener("click",function(t){event&&event.target instanceof HTMLElement&&event.target.closest("[data-dismiss-button]")&&(t.preventDefault(),n(i))},!1),i.hasAttribute("data-timeout")){let t=i.getAttribute("data-timeout");var a=new c(function(){n(i)},t);i.addEventListener("mouseenter",o=>{a.pause()}),i.addEventListener("mouseleave",o=>{a.resume()})}}function c(i,a){var t,o,e=a;this.pause=function(){window.clearTimeout(t),e-=new Date-o},this.resume=function(){o=new Date,window.clearTimeout(t),t=window.setTimeout(i,e)},this.resume()}const n=function(i){i.classList.add("d-none")};window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:"Notification"});class d extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"});const a=document.body.hasAttribute("data-assets-location")?document.body.getAttribute("data-assets-location"):"/assets",t=document.body.hasAttribute("data-core-css")?document.body.getAttribute("data-core-css"):`${a}/css/core.min.css`,o=this.querySelectorAll("a,button");Array.from(o).forEach((s,l)=>{s.setAttribute("slot","btns"),s.classList.add("link")}),(o.length||this.hasAttribute("data-dismiss"))&&this.classList.add("notification--dismissable");const e=document.createElement("template");e.innerHTML=`
5
5
  <style>
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v3.7.9
2
+ * iamKey v3.9.0-beta-1
3
3
  * Copyright 2022-2023 iamproperty
4
4
  */const l=function(e,t){if(!e.getAttribute("data-pages"))return!1;e.getAttribute("data-page")||e.setAttribute("data-page",1);let a=e.getAttribute("data-page"),i=e.getAttribute("data-pages"),d=e.getAttribute("data-total"),n=e.getAttribute("data-show"),o=e.getAttribute("data-increment");if(i<=1)return t.innerHTML="",!1;let r="";for(let s=1;s<=i;s++)s==a?r+=`<li class="page-item active" aria-current="page"><span class="page-link">${s}</span></li>`:r+=`<li class="page-item"><a href="?page=${s}" class="page-link" data-page="${s}">${s}</a></li>`;return t.innerHTML=`<ul class="pagination mb-0 d-none d-sm-flex">
5
5
  ${a==1?'<li class="page-item disabled"><span class="page-link">Previous</span></li>':`<li class="page-item"><a href="?page=${parseInt(a)-1}" class="page-link" data-page="${parseInt(a)-1}">Previous</a></li>`}
@@ -24,6 +24,7 @@ class iamTable extends HTMLElement {
24
24
 
25
25
  ${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
26
26
  </style>
27
+ <slot name="before"></slot>
27
28
  <div class="table--cta">
28
29
  <div class="table__wrapper">
29
30
  <slot></slot>
@@ -96,6 +97,38 @@ class iamTable extends HTMLElement {
96
97
  this.table.querySelector('.dialog__wrapper > button.active').classList.remove('active');
97
98
  }
98
99
  });
100
+ // Add in the checkboxes
101
+ if (this.querySelector('iam-actionbar[data-selectall]')) {
102
+ const actionbar = this.querySelector('iam-actionbar[data-selectall]');
103
+ Array.from(this.table.querySelectorAll('thead tr')).forEach((row, index) => {
104
+ row.insertAdjacentHTML('afterbegin', "<th></th>");
105
+ });
106
+ Array.from(this.table.querySelectorAll('tbody tr')).forEach((row, index) => {
107
+ row.insertAdjacentHTML('afterbegin', `<td class="selectrow"><input type="checkbox" name="row" id="row${index}"/><label for="row${index}"><span class="visually-hidden">Select row</span></label></td>`);
108
+ });
109
+ this.table.addEventListener('change', (event) => {
110
+ if (event && event.target instanceof HTMLElement && event.target.closest('.selectrow input')) {
111
+ let count = this.table.querySelectorAll('.selectrow input[type="checkbox"]').length;
112
+ let countChecked = this.table.querySelectorAll('.selectrow input[type="checkbox"]:checked').length;
113
+ actionbar.setAttribute('data-selected', count == countChecked ? "all" : countChecked);
114
+ console.log(countChecked);
115
+ }
116
+ ;
117
+ });
118
+ actionbar.addEventListener('selected', (event) => {
119
+ console.log(event.detail.selected);
120
+ if (event.detail.selected == '0') {
121
+ Array.from(this.table.querySelectorAll('.selectrow input[type="checkbox"]')).forEach((input, index) => {
122
+ input.checked = false;
123
+ });
124
+ }
125
+ else if (event.detail.selected == 'all') {
126
+ Array.from(this.table.querySelectorAll('.selectrow input[type="checkbox"]')).forEach((input, index) => {
127
+ input.checked = true;
128
+ });
129
+ }
130
+ });
131
+ }
99
132
  }
100
133
  static get observedAttributes() {
101
134
  return ["data-total", "data-pages", "data-page", "data-show"];
@@ -1,15 +1,15 @@
1
1
  /*!
2
- * iamKey v3.7.9
2
+ * iamKey v3.9.0-beta-1
3
3
  * Copyright 2022-2023 iamproperty
4
- */const U=function(a){return typeof a!="string"?!1:!isNaN(a)&&!isNaN(parseFloat(a))},z=(a,t)=>String(a).padStart(t,"0"),Y=a=>a.charAt(0).toUpperCase()+a.slice(1),v=function(a,t){if(!a.getAttribute("data-pages"))return!1;a.getAttribute("data-page")||a.setAttribute("data-page",1);let o=a.getAttribute("data-page"),r=a.getAttribute("data-pages"),n=a.getAttribute("data-total"),l=a.getAttribute("data-show"),s=a.getAttribute("data-increment");if(r<=1)return t.innerHTML="",!1;let d="";for(let i=1;i<=r;i++)i==o?d+=`<li class="page-item active" aria-current="page"><span class="page-link">${i}</span></li>`:d+=`<li class="page-item"><a href="?page=${i}" class="page-link" data-page="${i}">${i}</a></li>`;return t.innerHTML=`<ul class="pagination mb-0 d-none d-sm-flex">
4
+ */const z=function(a){return typeof a!="string"?!1:!isNaN(a)&&!isNaN(parseFloat(a))},Y=(a,e)=>String(a).padStart(e,"0"),Q=a=>a.charAt(0).toUpperCase()+a.slice(1),T=function(a,e){if(!a.getAttribute("data-pages"))return!1;a.getAttribute("data-page")||a.setAttribute("data-page",1);let o=a.getAttribute("data-page"),s=a.getAttribute("data-pages"),l=a.getAttribute("data-total"),i=a.getAttribute("data-show"),r=a.getAttribute("data-increment");if(s<=1)return e.innerHTML="",!1;let n="";for(let c=1;c<=s;c++)c==o?n+=`<li class="page-item active" aria-current="page"><span class="page-link">${c}</span></li>`:n+=`<li class="page-item"><a href="?page=${c}" class="page-link" data-page="${c}">${c}</a></li>`;return e.innerHTML=`<ul class="pagination mb-0 d-none d-sm-flex">
5
5
  ${o==1?'<li class="page-item disabled"><span class="page-link">Previous</span></li>':`<li class="page-item"><a href="?page=${parseInt(o)-1}" class="page-link" data-page="${parseInt(o)-1}">Previous</a></li>`}
6
- ${d}
7
- ${o==r?'<li class="page-item disabled"><span class="page-link">Next</span></li>':`<li class="page-item"><a href="?page=${parseInt(o)+1}" class="page-link" data-page="${parseInt(o)+1}">Next</a></li>`}
8
- </ul>`,t.innerHTML+=`<div class="d-sm-none text-center">
9
- <span class="d-block pb-2">You've viewed ${l} of ${n} results</span>
10
- <a href="?show=${parseInt(l)+parseInt(s)}" class="btn btn-primary w-100 m-0" data-show="${parseInt(l)+parseInt(s)}">Load more results</a>
11
- </div>`,!0};var Q=function(a,t,o,r){function n(l){return l instanceof o?l:new o(function(s){s(l)})}return new(o||(o=Promise))(function(l,s){function d(u){try{e(r.next(u))}catch(b){s(b)}}function i(u){try{e(r.throw(u))}catch(b){s(b)}}function e(u){u.done?l(u.value):n(u.value).then(d,i)}e((r=r.apply(a,t||[])).next())})};const R=a=>{const t=Array.from(a.querySelectorAll("thead th"));Array.from(a.querySelectorAll("tbody tr")).forEach((r,n)=>{const l=Array.from(r.querySelectorAll("th, td")),s=["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"];l.forEach((d,i)=>{const e=t[i];if(typeof e<"u"){let u=document.createElement("div");u.innerHTML=e.innerHTML;let b=u.textContent||u.innerText||"";d.setAttribute("data-label",b),e.hasAttribute("data-td-class")&&d.setAttribute("class",e.getAttribute("data-td-class")),e.hasAttribute("data-format")&&(d.setAttribute("data-format",e.getAttribute("data-format")),d.innerHTML=k(e.getAttribute("data-format"),d.textContent.trim())),s.includes(d.textContent.trim().toLowerCase())&&d.setAttribute("data-content",d.textContent.trim().toLowerCase())}})})},X=a=>{let t=0;return Array.from(a.querySelectorAll("tbody tr")).forEach((o,r)=>{let n=window.getComputedStyle(document.querySelector("html")),l=o.querySelector(":scope > *:last-child > *:first-child");if(l){l.classList.add("text-nowrap");let s=l.offsetWidth/parseFloat(n.fontSize);s+=1.7,t=t>s?t:s}}),t},J=a=>{if(a.closest(".table--fullwidth")||a.querySelectorAll("thead tr th").length<4)return!1;Array.from(a.querySelectorAll("tbody tr")).forEach((t,o)=>{let r=t.querySelector(":scope > :is(td,th):first-child"),n=r.textContent;if(n!="")r.innerHTML=`<span class="td__content">${n}</span><button type="button" class="d-none">${n}</button>`;else{let l=t.querySelector(":scope > :is(td,th):nth-child(2)"),s=l.textContent;l.innerHTML=`<span class="td__content">${s}</span><button type="button" class="d-none">${s}</button>`}})},G=a=>{a.addEventListener("click",t=>{if(t&&t.target instanceof HTMLElement&&t.target.closest("tr > :is(td,th):first-child button")){let o=t.target.closest("tr > :is(td,th):first-child button"),r=o.parentNode.closest("tr");r.getAttribute("data-view")=="full"?r.setAttribute("data-view","default"):r.setAttribute("data-view","full"),o.blur()}})},N=(a,t)=>{let o=t.querySelector("[data-search]");if(!o)return!1;const r=o.getAttribute("id"),n=o.getAttribute("data-search").split(",");let l=o.parentNode,s={};n.forEach((d,i)=>{Array.from(a.querySelectorAll('td[data-label="'+d.trim()+'"]')).forEach((e,u)=>{e.querySelector(".td__content")?s[e.querySelector(".td__content").textContent]=e.querySelector(".td__content").textContent:s[e.textContent]=e.textContent})}),o.setAttribute("list",`${r}_list`),o.setAttribute("autocomplete","off"),l.querySelector("datalist")||(l.innerHTML+=`<datalist id="${r}_list"></datalist>`),l.querySelector("datalist").innerHTML=`${Object.keys(s).map(d=>`<option value="${d}"></option>`).join("")}`},K=(a,t,o,r,n)=>{var l;let s=function(e=!1){if(t.hasAttribute("data-ajax")){if(!e){let u=t.querySelector("[data-pagination]");u.value=1,r.setAttribute("data-page",1)}W(a,t,o,r)}else t.hasAttribute("data-submit")?t.submit():(D(a,t,r),v(r,o),T(a,t));if(t.hasAttribute("data-ajax-post")){let u=new FormData(t),b=new URLSearchParams(u).toString();const c=new XMLHttpRequest;c.open("GET",`${window.location.href}?ajax=true&${b}`),c.send()}};t.addEventListener("keyup",e=>{clearTimeout(l),e&&e.target instanceof HTMLElement&&e.target.closest("[data-search]")&&(l=setTimeout(function(){s()},500))}),t.addEventListener("change",e=>{clearTimeout(l),e&&e.target instanceof HTMLElement&&e.target.closest("[data-sort]")&&(t.hasAttribute("data-submit")||P(a,t,n),s()),e&&e.target instanceof HTMLElement&&e.target.closest("[data-search]")&&s(),e&&e.target instanceof HTMLElement&&e.target.closest("[data-filter][data-no-ajax]")?(D(a,t,r),v(r,o),T(a,t)):(e&&e.target instanceof HTMLElement&&e.target.closest("[data-filter]")&&e.target.closest("form .dialog__wrapper > dialog")||e&&e.target instanceof HTMLElement&&e.target.closest("[data-filter]")&&!e.target.closest("form dialog"))&&s(),e&&e.target instanceof HTMLElement&&e.target.closest("[data-show]")&&s(),e&&e.target instanceof HTMLElement&&e.target.closest("[data-mimic]")&&s()}),t.addEventListener("click",e=>{clearTimeout(l),e&&e.target instanceof HTMLElement&&e.target.closest('dialog button:not([type="button"])')&&e.target.closest('dialog button:not([type="button"])').closest("dialog").close(),e&&e.target instanceof HTMLElement&&e.target.closest(".dialog__close")&&(e.preventDefault(),e.stopPropagation()),e&&e.target instanceof HTMLElement&&e.target.closest("[data-clear]")&&(t.reset(),t.hasAttribute("data-submit")||P(a,t,n),s())}),t.addEventListener("submit",e=>{clearTimeout(l),t.hasAttribute("data-submit")||e.preventDefault(),s()}),t.addEventListener("force",e=>{s()}),t.addEventListener("paginate",e=>{s(!0)});let d=[],i=[];Array.from(t.querySelectorAll("[data-mimic]")).forEach((e,u)=>{let b=e.getAttribute("data-mimic");Array.from(document.querySelectorAll(`[name="${b}"]`)).forEach((c,h)=>{let f=c.closest("form");d.includes(f)||d.push(f),i.includes(b)||i.push(b)})}),d.forEach((e,u)=>{const b=function(){let c=[],h=new FormData(e);for(const[f,m]of h)document.querySelector(`[data-mimic="${f}"]`)&&!c.includes(f)?(c.push(f),document.querySelector(`[data-mimic="${f}"]`).value=m):document.querySelector(`[data-mimic="${f}"]`)&&(document.querySelector(`[data-mimic="${f}"]`).value+=","+m);for(const f of c){const m=new Event("force");t.dispatchEvent(m)}for(const f of i)if(!h.has(f)&&e.querySelector(`[name="${f}"]`)){document.querySelector(`[data-mimic="${f}"]`).value="";const m=new Event("force");t.dispatchEvent(m)}};e.addEventListener("force",c=>{b()}),e.addEventListener("change",c=>{b()})})},P=(a,t,o)=>{if(t.getAttribute("data-ajax"))return!1;let r=a.querySelector("tbody"),n=t.querySelector("[data-sort]"),l=n.querySelector(`option:nth-child(${n.selectedIndex+1})`),s=l.getAttribute("data-sort"),d=l.getAttribute("data-order"),i=l.getAttribute("data-format");if(!s)return r.innerHTML=o.innerHTML,R(a),!1;let e=[];["asc","desc","descending"].includes(d)||(e=d.split(","));let u=[];Array.from(r.querySelectorAll("tr")).forEach((c,h)=>{let f=c.querySelector('td[data-label="'+s+'"], th[data-label="'+s+'"]').textContent.trim();c.querySelector('[data-label="'+s+'"] .td__content')&&(f=c.querySelector('[data-label="'+s+'"] .td__content').textContent.trim()),e.length&&e.includes(f)&&(f=e.indexOf(f)),U(f)&&(f=z(f,10)),i&&i=="date"&&(f=new Date(f));const m={index:f,row:c};u.push(m)}),u.sort((c,h)=>c.index>h.index?1:-1),(d=="descending"||d=="desc")&&(u=u.reverse());let b="";u.forEach((c,h)=>{b+=c.row.outerHTML}),r.innerHTML=b},D=(a,t,o)=>{a.classList.remove("table--filtered");let r=O(t),n=[],l=0,s=t.querySelector("[data-pagination]")?parseInt(t.querySelector("[data-pagination]").value):1,d=t.querySelector("[data-show]")?parseInt(t.querySelector("[data-show]").value):15;if(Array.from(a.querySelectorAll("tbody tr")).forEach((i,e)=>{i.classList.remove("filtered"),i.classList.remove("filtered--matched"),i.classList.remove("filtered--show"),i.removeAttribute("data-filtered-by")}),t.querySelector("[data-search]")){let i=t.querySelector("[data-search]");t.querySelector("[data-search]").getAttribute("data-search").split(",").forEach((u,b)=>{n.push({column:`${u.trim()}`,value:`${i.value}`})})}Array.from(t.querySelectorAll("[data-filter-count]")).forEach((i,e)=>{i.innerHTML=""}),Object.keys(r).length&&Array.from(t.querySelectorAll("[data-filter-count]")).forEach((i,e)=>{i.innerHTML+=`(${Object.keys(r).length})`}),a.classList.add("table--filtered");for(const[i,e]of Object.entries(r))Array.from(a.querySelectorAll("tbody tr:not(.filtered)")).forEach((u,b)=>{let c=!1;e.forEach((h,f)=>{let m=u.querySelector(`[data-label="${i}"]`);if(h&&h=="$today")h=k("date",new Date);else if(h&&h=="$yesterday"){let y=new Date;y.setDate(y.getDate()-1),h=k("date",y)}else if(h&&(h=="$thisWeek"||h=="$lastWeek")){let y=new Date,A=new Date(y.setDate(y.getDate()-(y.getDay()-1))),p=new Date(y.setDate(y.getDate()-y.getDay()+7)),g=new Date(m.textContent.toLowerCase());if(y.setHours(0,0,0,0),A.setHours(0,0,0,0),p.setHours(0,0,0,0),g.setHours(0,0,0,0),h=="$thisWeek")c=g>=A&&g<=p;else{let $=new Date(A.setDate(A.getDate()-7)),w=new Date(p.setDate(p.getDate()-7));$.setHours(0,0,0,0),w.setHours(0,0,0,0),c=g>=$&&g<=w}}else if(h&&h=="$thisMonth"){let y=new Date,A=y.getFullYear(),p=y.getMonth();var S=new Date(A,p,1),x=new Date(A,p+1,0);let g=new Date(m.textContent.toLowerCase());S.setHours(0,0,0,0),x.setHours(0,0,0,0),g.setHours(0,0,0,0),c=g>=S&&g<=x}else if(h&&h=="$lastMonth"){let y=new Date,A=y.getFullYear(),p=y.getMonth();var L=new Date(A,p-1,1),q=new Date(A,p,0);let g=new Date(m.textContent.toLowerCase());L.setHours(0,0,0,0),q.setHours(0,0,0,0),g.setHours(0,0,0,0),c=g>=L&&g<=q}m&&m.textContent.toLowerCase().includes(h.toLowerCase())&&(c=!0)}),c||(u.classList.add("filtered"),u.setAttribute("data-filtered-by",i))});Array.from(a.querySelectorAll("tbody tr:not(.filtered)")).forEach((i,e)=>{let u=!(n.length>0&&n[0].value.length>=3);n.forEach((b,c)=>{let h=i.querySelector(`[data-label="${b.column}"]`);h&&b.value.length>=3&&h.textContent.toLowerCase().includes(b.value.toLowerCase())&&(u=!0)}),u||i.classList.add("filtered")}),Array.from(a.querySelectorAll("tbody tr:not(.filtered")).forEach((i,e)=>{l++,i.classList.add("filtered--matched"),Math.ceil(l/d)==parseInt(s)&&i.classList.add("filtered--show")}),o&&(o.setAttribute("data-page",s),o.setAttribute("data-pages",Math.ceil(l/d)),o.setAttribute("data-total",l),o.setAttribute("data-show",d))},T=(a,t,o)=>{Array.from(t.querySelectorAll("[data-query]")).forEach((n,l)=>{let s=n.getAttribute("data-query"),d;if(s=="total")o.hasAttribute("data-total")?d=o.getAttribute("data-total"):d=(a.classList.contains("table--filtered"),a.querySelectorAll("tbody tr").length);else if(!s.includes(" == ")&&s.includes(" & ")){let i=s.split(" & "),e="";i.forEach(u=>{e+=`:not([data-filtered-by="${u}"])`}),d=Array.from(a.querySelectorAll(`tbody tr${e}`)).length}else if(!s.includes(" == "))d=Array.from(a.querySelectorAll(`tbody tr:not([data-filtered-by="${s}"])`)).length;else if(s.includes(" && ")){let i=s.split(" && ");d=Array.from(a.querySelectorAll("tbody tr:not(.filtered)")).filter(function(e){let u=!0;for(const[b,c]of Object.entries(i)){let h=c.split(" == ");(!e.querySelector(`td[data-label="${h[0]}"]`)||e.querySelector(`td[data-label="${h[0]}"]`).textContent!=`${h[1]}`)&&(u=!1)}return u}).length}else{let i=s.split(" == ");d=Array.from(a.querySelectorAll(`tbody tr.filtered--matched td[data-label="${i[0]}"], tbody tr[data-filtered-by="${i[0]}"] td[data-label="${i[0]}"]`)).filter(function(e){return e.textContent===i[1]}).length}n.hasAttribute("data-total")?n.setAttribute("data-total",d):n.innerHTML=d})},Z=function(a,t,o,r){o.addEventListener("click",n=>{if(n&&n.target instanceof HTMLElement&&n.target.closest("[data-page]")){n.preventDefault();let l=t.querySelector("[data-pagination]"),s=n.target.closest("[data-page]").getAttribute("data-page");if(l.value=s,r.setAttribute("data-page",s),t.dispatchEvent(new Event("paginate")),a.hasAttribute("data-show-history")){const e=new URL(location);e.searchParams.set("page",s),history.pushState({type:"pagination",form:t.getAttribute("id"),page:s},"",e)}const d=-250,i=a.getBoundingClientRect().top+window.pageYOffset+d;window.scrollTo({top:i,behavior:"smooth"})}if(n&&n.target instanceof HTMLElement&&n.target.closest("[data-show]")){n.preventDefault();let l=t.querySelector("[data-show]"),s=n.target.closest("[data-show]").getAttribute("data-show");l.value=s,r.setAttribute("data-show",s),t.dispatchEvent(new Event("submit"))}})},tt=(a,t)=>{if(!a)return!1;a.addEventListener("click",o=>{et(t)})},et=function(a){for(var t=[],o=a.getElementsByTagName("tr"),r=0;r<o.length;r++){for(var n=o[r].querySelectorAll("td,th"),l=[],s=0;s<n.length;s++)l.push(`"${n[s].textContent}"`);t.push(l.join(","))}t=t.join(`
12
- `);let d=new Blob([t],{type:"text/csv"});var i=document.createElement("a");i.download="export.csv";var e=window.URL.createObjectURL(d);i.href=e,i.style.display="none",document.body.appendChild(i),i.click(),document.body.removeChild(i)},I=function(a,t,o,r){if(R(a),J(a),T(a,t,r),r&&r.classList.contains("table--cta")){let l=function(){Array.from(a.querySelectorAll("tr")).forEach((s,d)=>{let i=s.offsetHeight;s.style.setProperty("--row-height",`${i}px`)})};const n=X(a);r.style.setProperty("--cta-width",`${n}rem`),new ResizeObserver(l).observe(a)}},O=function(a){let t=new Object;return Array.from(a.querySelectorAll("[data-filter]")).forEach((r,n)=>{if(!(r.type=="radio"&&!r.checked)&&!(r.type=="checkbox"&&!r.checked)&&r&&r.value){let l=r.getAttribute("data-filter");t[l]||(t[l]=new Array),t[l].push(r.value)}}),t},W=function(a,t,o,r){return Q(this,void 0,void 0,function*(){const n=(c,h,f)=>h.split(/[\.\[\]\'\"]/).filter(m=>m).reduce((m,S)=>m?m[S]:f,c);let l=new FormData(t),s=new URLSearchParams(l).toString(),d=a.querySelectorAll("thead tr th"),i=a.querySelector("tbody"),e=t.getAttribute("data-ajax");r.classList.add("table--loading");let u=O(t);Array.from(t.querySelectorAll("[data-filter-count]")).forEach((c,h)=>{c.innerHTML=""}),Object.keys(u).length&&Array.from(t.querySelectorAll("[data-filter-count]")).forEach((c,h)=>{c.innerHTML+=`(${Object.keys(u).length})`}),window.controller||(window.controller=[]),window.controller[e]&&window.controller[e].abort(),window.controller[e]=new AbortController;const{signal:b}=controller[e];try{yield fetch(e+"?"+s,{signal:b,method:"get",credentials:"same-origin",headers:new Headers({"Content-Type":"application/json",Accept:"application/json","X-Requested-With":"XMLHttpRequest"})}).then(c=>c.json()).then(c=>{let h=t.hasAttribute("data-schema")?t.getAttribute("data-schema"):"data",f=t.hasAttribute("data-schema-total")?t.getAttribute("data-schema-total"):"meta.total",m=t.hasAttribute("data-schema-page")?t.getAttribute("data-schema-page"):"meta.current_page",S=n(c,f,1),x=n(c,m,1),L=n(c,h),q=r.hasAttribute("data-empty-msg")?r.getAttribute("data-empty-msg"):"No results found";L?(i.innerHTML="",L.forEach((y,A)=>{var p=document.createElement("tr");d.forEach((g,$)=>{let w="";var C=document.createElement("td");if(C.setAttribute("data-label",g.innerText),g.getAttribute("data-output")){var H=g.getAttribute("data-output");w=H.replace(new RegExp(/{(.*?)}/,"gm"),function(_){return n(y,_.replace("{","").replace("}",""))})}if(g.hasAttribute("data-output-array")){var H=g.getAttribute("data-output");let F=n(y,H.replace("{","").replace("}",""));w="",F.forEach((j,rt)=>{let B=g.getAttribute("data-output-array"),E="";if(g.hasAttribute("data-output-array-property")&&g.hasAttribute("data-output-array-transform")){const M=n(j,g.getAttribute("data-output-array-property")),V=JSON.parse(g.getAttribute("data-output-array-transform"))[M];E=B.replace(`{${g.getAttribute("data-output-array-property")}}`,V)}E=E.replace(new RegExp(/{(.*?)}/,"gm"),function(M){return n(j,M.replace("{","").replace("}",""))}),w+=E})}g.hasAttribute("data-transform")&&(w=JSON.parse(g.getAttribute("data-transform"))[w],!w&&g.hasAttribute("data-default")&&(w=g.getAttribute("data-default"))),C.innerHTML=w,p.appendChild(C)}),i.appendChild(p)}),N(a,t),r.setAttribute("data-total",parseInt(S)),r.setAttribute("data-page",parseInt(x)),r.setAttribute("data-pages",Math.ceil(r.getAttribute("data-total")/r.getAttribute("data-show"))),I(a,t,o,r),v(r,o),Array.from(t.querySelectorAll("[data-ajax-query]")).forEach((y,A)=>{let p=n(c,y.getAttribute("data-ajax-query"),"");y.hasAttribute("data-total")?y.setAttribute("data-total",p):y.innerHTML=p}),parseInt(S)==0&&(i.innerHTML=`<tr><td colspan="100%"><span>${q}</span></td></tr>`),r.classList.remove("table--loading"),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"Ajax table loaded",url:e,formData:s})):i.innerHTML='<tr><td colspan="100%"><span>Error loading table</span></td></tr>'})}catch(c){console.log(c)}})},k=(a,t)=>{switch(a){case"datetime":return new Date(t).toLocaleDateString("en-gb",{weekday:"short",year:"2-digit",month:"long",day:"numeric"})+" "+new Date(t).toLocaleTimeString("en-gb",{hour:"2-digit",minute:"2-digit"});case"date":return new Date(t).toLocaleDateString("en-gb",{year:"2-digit",month:"long",day:"numeric"});case"capitalise":return t=Y(t)}};class at extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"});const t=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"):`${t}/css/core.min.css`,r=document.createElement("template");r.innerHTML=`
6
+ ${n}
7
+ ${o==s?'<li class="page-item disabled"><span class="page-link">Next</span></li>':`<li class="page-item"><a href="?page=${parseInt(o)+1}" class="page-link" data-page="${parseInt(o)+1}">Next</a></li>`}
8
+ </ul>`,e.innerHTML+=`<div class="d-sm-none text-center">
9
+ <span class="d-block pb-2">You've viewed ${i} of ${l} results</span>
10
+ <a href="?show=${parseInt(i)+parseInt(r)}" class="btn btn-primary w-100 m-0" data-show="${parseInt(i)+parseInt(r)}">Load more results</a>
11
+ </div>`,!0};var X=function(a,e,o,s){function l(i){return i instanceof o?i:new o(function(r){r(i)})}return new(o||(o=Promise))(function(i,r){function n(u){try{t(s.next(u))}catch(f){r(f)}}function c(u){try{t(s.throw(u))}catch(f){r(f)}}function t(u){u.done?i(u.value):l(u.value).then(n,c)}t((s=s.apply(a,e||[])).next())})};const N=a=>{const e=Array.from(a.querySelectorAll("thead th"));Array.from(a.querySelectorAll("tbody tr")).forEach((s,l)=>{const i=Array.from(s.querySelectorAll("th, td")),r=["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"];i.forEach((n,c)=>{const t=e[c];if(typeof t<"u"){let u=document.createElement("div");u.innerHTML=t.innerHTML;let f=u.textContent||u.innerText||"";n.setAttribute("data-label",f),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=_(t.getAttribute("data-format"),n.textContent.trim())),r.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,s)=>{let l=window.getComputedStyle(document.querySelector("html")),i=o.querySelector(":scope > *:last-child > *:first-child");if(i){i.classList.add("text-nowrap");let r=i.offsetWidth/parseFloat(l.fontSize);r+=1.7,e=e>r?e:r}}),e},G=a=>{if(a.closest(".table--fullwidth")||a.querySelectorAll("thead tr th").length<4)return!1;Array.from(a.querySelectorAll("tbody tr")).forEach((e,o)=>{let s=e.querySelector(":scope > :is(td,th):first-child"),l=s.textContent;if(l!="")s.innerHTML=`<span class="td__content">${l}</span><button type="button" class="d-none">${l}</button>`;else{let i=e.querySelector(":scope > :is(td,th):nth-child(2)"),r=i.textContent;i.innerHTML=`<span class="td__content">${r}</span><button type="button" class="d-none">${r}</button>`}})},K=a=>{a.addEventListener("click",e=>{if(e&&e.target instanceof HTMLElement&&e.target.closest("tr > :is(td,th):first-child button")){let o=e.target.closest("tr > :is(td,th):first-child button"),s=o.parentNode.closest("tr");s.getAttribute("data-view")=="full"?s.setAttribute("data-view","default"):s.setAttribute("data-view","full"),o.blur()}})},P=(a,e)=>{let o=e.querySelector("[data-search]");if(!o)return!1;const s=o.getAttribute("id"),l=o.getAttribute("data-search").split(",");let i=o.parentNode,r={};l.forEach((n,c)=>{Array.from(a.querySelectorAll('td[data-label="'+n.trim()+'"]')).forEach((t,u)=>{t.querySelector(".td__content")?r[t.querySelector(".td__content").textContent]=t.querySelector(".td__content").textContent:r[t.textContent]=t.textContent})}),o.setAttribute("list",`${s}_list`),o.setAttribute("autocomplete","off"),i.querySelector("datalist")||(i.innerHTML+=`<datalist id="${s}_list"></datalist>`),i.querySelector("datalist").innerHTML=`${Object.keys(r).map(n=>`<option value="${n}"></option>`).join("")}`},Z=(a,e,o,s,l)=>{var i;let r=function(t=!1){if(e.hasAttribute("data-ajax")){if(!t){let u=e.querySelector("[data-pagination]");u.value=1,s.setAttribute("data-page",1)}F(a,e,o,s)}else e.hasAttribute("data-submit")?e.submit():(k(a,e,s),T(s,o),$(a,e));if(e.hasAttribute("data-ajax-post")){let u=new FormData(e),f=new URLSearchParams(u).toString();const g=new XMLHttpRequest;g.open("GET",`${window.location.href}?ajax=true&${f}`),g.send()}};e.addEventListener("keyup",t=>{clearTimeout(i),t&&t.target instanceof HTMLElement&&t.target.closest("[data-search]")&&(i=setTimeout(function(){r()},500))}),e.addEventListener("change",t=>{clearTimeout(i),t&&t.target instanceof HTMLElement&&t.target.closest("[data-sort]")&&(e.hasAttribute("data-submit")||I(a,e,l),r()),t&&t.target instanceof HTMLElement&&t.target.closest("[data-search]")&&r(),t&&t.target instanceof HTMLElement&&t.target.closest("[data-filter][data-no-ajax]")?(k(a,e,s),T(s,o),$(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"))&&r(),t&&t.target instanceof HTMLElement&&t.target.closest("[data-show]")&&r(),t&&t.target instanceof HTMLElement&&t.target.closest("[data-mimic]")&&r()}),e.addEventListener("click",t=>{clearTimeout(i),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.reset(),e.hasAttribute("data-submit")||I(a,e,l),r())}),e.addEventListener("submit",t=>{clearTimeout(i),e.hasAttribute("data-submit")||t.preventDefault(),r()}),e.addEventListener("force",t=>{r()}),e.addEventListener("paginate",t=>{r(!0)});let n=[],c=[];Array.from(e.querySelectorAll("[data-mimic]")).forEach((t,u)=>{let f=t.getAttribute("data-mimic");Array.from(document.querySelectorAll(`[name="${f}"]`)).forEach((g,h)=>{let d=g.closest("form");n.includes(d)||n.push(d),c.includes(f)||c.push(f)})}),n.forEach((t,u)=>{const f=function(){let g=[],h=new FormData(t);for(const[d,m]of h)document.querySelector(`[data-mimic="${d}"]`)&&!g.includes(d)?(g.push(d),document.querySelector(`[data-mimic="${d}"]`).value=m):document.querySelector(`[data-mimic="${d}"]`)&&(document.querySelector(`[data-mimic="${d}"]`).value+=","+m);for(const d of g){const m=new Event("force");e.dispatchEvent(m)}for(const d of c)if(!h.has(d)&&t.querySelector(`[name="${d}"]`)){document.querySelector(`[data-mimic="${d}"]`).value="";const m=new Event("force");e.dispatchEvent(m)}};t.addEventListener("force",g=>{f()}),t.addEventListener("change",g=>{f()})})},I=(a,e,o)=>{if(e.getAttribute("data-ajax"))return!1;let s=a.querySelector("tbody"),l=e.querySelector("[data-sort]"),i=l.querySelector(`option:nth-child(${l.selectedIndex+1})`),r=i.getAttribute("data-sort"),n=i.getAttribute("data-order"),c=i.getAttribute("data-format");if(!r)return s.innerHTML=o.innerHTML,N(a),!1;let t=[];["asc","desc","descending"].includes(n)||(t=n.split(","));let u=[];Array.from(s.querySelectorAll("tr")).forEach((g,h)=>{let d=g.querySelector('td[data-label="'+r+'"], th[data-label="'+r+'"]').textContent.trim();g.querySelector('[data-label="'+r+'"] .td__content')&&(d=g.querySelector('[data-label="'+r+'"] .td__content').textContent.trim()),t.length&&t.includes(d)&&(d=t.indexOf(d)),z(d)&&(d=Y(d,10)),c&&c=="date"&&(d=new Date(d));const m={index:d,row:g};u.push(m)}),u.sort((g,h)=>g.index>h.index?1:-1),(n=="descending"||n=="desc")&&(u=u.reverse());let f="";u.forEach((g,h)=>{f+=g.row.outerHTML}),s.innerHTML=f},k=(a,e,o)=>{a.classList.remove("table--filtered");let s=W(e),l=[],i=0,r=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((f,g)=>{l.push({column:`${f.trim()}`,value:`${t.value}`})})}Array.from(e.querySelectorAll("[data-filter-count]")).forEach((t,u)=>{t.innerHTML="",t.parentNode.classList.remove("hover")});let c=0;Object.values(s).forEach((t,u)=>{typeof t=="object"&&Object.values(t).length?c+=Object.values(t).length:c++}),c&&Array.from(e.querySelectorAll("[data-filter-count]")).forEach((t,u)=>{t.innerHTML+=`(${c})`,t.parentNode.classList.add("hover")}),a.classList.add("table--filtered");for(const[t,u]of Object.entries(s))Array.from(a.querySelectorAll("tbody tr:not(.filtered)")).forEach((f,g)=>{let h=!1;u.forEach((d,m)=>{let A=f.querySelector(`[data-label="${t}"]`);if(d&&d=="$today")d=_("date",new Date);else if(d&&d=="$yesterday"){let y=new Date;y.setDate(y.getDate()-1),d=_("date",y)}else if(d&&(d=="$thisWeek"||d=="$lastWeek")){let y=new Date,w=new Date(y.setDate(y.getDate()-(y.getDay()-1))),p=new Date(y.setDate(y.getDate()-y.getDay()+7)),b=new Date(A.textContent.toLowerCase());if(y.setHours(0,0,0,0),w.setHours(0,0,0,0),p.setHours(0,0,0,0),b.setHours(0,0,0,0),d=="$thisWeek")h=b>=w&&b<=p;else{let C=new Date(w.setDate(w.getDate()-7)),S=new Date(p.setDate(p.getDate()-7));C.setHours(0,0,0,0),S.setHours(0,0,0,0),h=b>=C&&b<=S}}else if(d&&d=="$thisMonth"){let y=new Date,w=y.getFullYear(),p=y.getMonth();var L=new Date(w,p,1),q=new Date(w,p+1,0);let b=new Date(A.textContent.toLowerCase());L.setHours(0,0,0,0),q.setHours(0,0,0,0),b.setHours(0,0,0,0),h=b>=L&&b<=q}else if(d&&d=="$lastMonth"){let y=new Date,w=y.getFullYear(),p=y.getMonth();var x=new Date(w,p-1,1),v=new Date(w,p,0);let b=new Date(A.textContent.toLowerCase());x.setHours(0,0,0,0),v.setHours(0,0,0,0),b.setHours(0,0,0,0),h=b>=x&&b<=v}A&&A.textContent.toLowerCase().includes(d.toLowerCase())&&(h=!0)}),h||(f.classList.add("filtered"),f.setAttribute("data-filtered-by",t))});Array.from(a.querySelectorAll("tbody tr:not(.filtered)")).forEach((t,u)=>{let f=!(l.length>0&&l[0].value.length>=3);l.forEach((g,h)=>{let d=t.querySelector(`[data-label="${g.column}"]`);d&&g.value.length>=3&&d.textContent.toLowerCase().includes(g.value.toLowerCase())&&(f=!0)}),f||t.classList.add("filtered")}),Array.from(a.querySelectorAll("tbody tr:not(.filtered")).forEach((t,u)=>{i++,t.classList.add("filtered--matched"),Math.ceil(i/n)==parseInt(r)&&t.classList.add("filtered--show")}),o&&(o.setAttribute("data-page",r),o.setAttribute("data-pages",Math.ceil(i/n)),o.setAttribute("data-total",i),o.setAttribute("data-show",n))},$=(a,e,o)=>{Array.from(e.querySelectorAll("[data-query]")).forEach((l,i)=>{let r=l.getAttribute("data-query"),n;if(r=="total")o.hasAttribute("data-total")?n=o.getAttribute("data-total"):n=(a.classList.contains("table--filtered"),a.querySelectorAll("tbody tr").length);else if(!r.includes(" == ")&&r.includes(" & ")){let c=r.split(" & "),t="";c.forEach(u=>{t+=`:not([data-filtered-by="${u}"])`}),n=Array.from(a.querySelectorAll(`tbody tr${t}`)).length}else if(!r.includes(" == "))n=Array.from(a.querySelectorAll(`tbody tr:not([data-filtered-by="${r}"])`)).length;else if(r.includes(" && ")){let c=r.split(" && ");n=Array.from(a.querySelectorAll("tbody tr:not(.filtered)")).filter(function(t){let u=!0;for(const[f,g]of Object.entries(c)){let h=g.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 c=r.split(" == ");n=Array.from(a.querySelectorAll(`tbody tr.filtered--matched td[data-label="${c[0]}"], tbody tr[data-filtered-by="${c[0]}"] td[data-label="${c[0]}"]`)).filter(function(t){return t.textContent===c[1]}).length}l.hasAttribute("data-total")?l.setAttribute("data-total",n):l.innerHTML=n})},tt=function(a,e,o,s){o.addEventListener("click",l=>{if(l&&l.target instanceof HTMLElement&&l.target.closest("[data-page]")){l.preventDefault();let i=e.querySelector("[data-pagination]"),r=l.target.closest("[data-page]").getAttribute("data-page");if(i.value=r,s.setAttribute("data-page",r),e.dispatchEvent(new Event("paginate")),a.hasAttribute("data-show-history")){const t=new URL(location);t.searchParams.set("page",r),history.pushState({type:"pagination",form:e.getAttribute("id"),page:r},"",t)}const n=-250,c=a.getBoundingClientRect().top+window.pageYOffset+n;window.scrollTo({top:c,behavior:"smooth"})}if(l&&l.target instanceof HTMLElement&&l.target.closest("[data-show]")){l.preventDefault();let i=e.querySelector("[data-show]"),r=l.target.closest("[data-show]").getAttribute("data-show");i.value=r,s.setAttribute("data-show",r),e.dispatchEvent(new Event("submit"))}})},et=(a,e)=>{if(!a)return!1;a.addEventListener("click",o=>{at(e)})},at=function(a){for(var e=[],o=a.getElementsByTagName("tr"),s=0;s<o.length;s++){for(var l=o[s].querySelectorAll("td,th"),i=[],r=0;r<l.length;r++)i.push(`"${l[r].textContent}"`);e.push(i.join(","))}e=e.join(`
12
+ `);let n=new Blob([e],{type:"text/csv"});var c=document.createElement("a");c.download="export.csv";var t=window.URL.createObjectURL(n);c.href=t,c.style.display="none",document.body.appendChild(c),c.click(),document.body.removeChild(c)},O=function(a,e,o,s){if(N(a),G(a),$(a,e,s),s&&s.classList.contains("table--cta")){let i=function(){Array.from(a.querySelectorAll("tr")).forEach((r,n)=>{let c=r.offsetHeight;r.style.setProperty("--row-height",`${c}px`)})};const l=J(a);s.style.setProperty("--cta-width",`${l}rem`),new ResizeObserver(i).observe(a)}},W=function(a){let e=new Object;return Array.from(a.querySelectorAll("[data-filter]")).forEach((s,l)=>{if(!(s.type=="radio"&&!s.checked)&&!(s.type=="checkbox"&&!s.checked)&&s&&s.value){let i=s.getAttribute("data-filter");e[i]||(e[i]=new Array),e[i].push(s.value)}}),e},F=function(a,e,o,s){return X(this,void 0,void 0,function*(){const l=(h,d,m)=>d.split(/[\.\[\]\'\"]/).filter(A=>A).reduce((A,L)=>A?A[L]:m,h);let i=new FormData(e),r=new URLSearchParams(i).toString(),n=a.querySelectorAll("thead tr th"),c=a.querySelector("tbody"),t=e.getAttribute("data-ajax");s.classList.add("table--loading");let u=W(e);Array.from(e.querySelectorAll("[data-filter-count]")).forEach((h,d)=>{h.innerHTML="",h.parentNode.classList.remove("hover")});let f=0;Object.values(u).forEach((h,d)=>{typeof h=="object"&&Object.values(h).length?f+=Object.values(h).length:f++}),f&&Array.from(e.querySelectorAll("[data-filter-count]")).forEach((h,d)=>{h.innerHTML+=`(${f})`,h.parentNode.classList.add("hover")}),window.controller||(window.controller=[]),window.controller[t]&&window.controller[t].abort(),window.controller[t]=new AbortController;const{signal:g}=controller[t];try{yield fetch(t+"?"+r,{signal:g,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 d=e.hasAttribute("data-schema")?e.getAttribute("data-schema"):"data",m=e.hasAttribute("data-schema-total")?e.getAttribute("data-schema-total"):"meta.total",A=e.hasAttribute("data-schema-page")?e.getAttribute("data-schema-page"):"meta.current_page",L=l(h,m,1),q=l(h,A,1),x=l(h,d),v=s.hasAttribute("data-empty-msg")?s.getAttribute("data-empty-msg"):"No results found";x?(c.innerHTML="",x.forEach((y,w)=>{var p=document.createElement("tr");n.forEach((b,C)=>{let S="";var H=document.createElement("td");if(H.setAttribute("data-label",b.innerText),b.getAttribute("data-output")){var M=b.getAttribute("data-output");S=M.replace(new RegExp(/{(.*?)}/,"gm"),function(j){return l(y,j.replace("{","").replace("}",""))})}if(b.hasAttribute("data-output-array")){var M=b.getAttribute("data-output");let B=l(y,M.replace("{","").replace("}",""));S="",B.forEach((R,st)=>{let V=b.getAttribute("data-output-array"),E="";if(b.hasAttribute("data-output-array-property")&&b.hasAttribute("data-output-array-transform")){const D=l(R,b.getAttribute("data-output-array-property")),U=JSON.parse(b.getAttribute("data-output-array-transform"))[D];E=V.replace(`{${b.getAttribute("data-output-array-property")}}`,U)}E=E.replace(new RegExp(/{(.*?)}/,"gm"),function(D){return l(R,D.replace("{","").replace("}",""))}),S+=E})}b.hasAttribute("data-transform")&&(S=JSON.parse(b.getAttribute("data-transform"))[S],!S&&b.hasAttribute("data-default")&&(S=b.getAttribute("data-default"))),H.innerHTML=S,p.appendChild(H)}),c.appendChild(p)}),P(a,e),s.setAttribute("data-total",parseInt(L)),s.setAttribute("data-page",parseInt(q)),s.setAttribute("data-pages",Math.ceil(s.getAttribute("data-total")/s.getAttribute("data-show"))),O(a,e,o,s),T(s,o),Array.from(e.querySelectorAll("[data-ajax-query]")).forEach((y,w)=>{let p=l(h,y.getAttribute("data-ajax-query"),"");y.hasAttribute("data-total")?y.setAttribute("data-total",p):y.innerHTML=p}),parseInt(L)==0&&(c.innerHTML=`<tr><td colspan="100%"><span>${v}</span></td></tr>`),s.classList.remove("table--loading"),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"Ajax table loaded",url:t,formData:r})):c.innerHTML='<tr><td colspan="100%"><span>Error loading table</span></td></tr>'})}catch(h){console.log(h)}})},_=(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=Q(e)}};class rt 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`,s=document.createElement("template");s.innerHTML=`
13
13
  <style>
14
14
  @import "${o}";
15
15
 
@@ -25,11 +25,12 @@
25
25
 
26
26
  ${this.hasAttribute("css")?`@import "${this.getAttribute("css")}";`:""}
27
27
  </style>
28
+ <slot name="before"></slot>
28
29
  <div class="table--cta">
29
30
  <div class="table__wrapper">
30
31
  <slot></slot>
31
32
  </div>
32
33
  </div>
33
34
  <div class="table__pagination"></div>
34
- `,this.shadowRoot.appendChild(r.content.cloneNode(!0))}connectedCallback(){const t=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",t.has("page")?t.get("page"):1),this.hasAttribute("data-show")||this.setAttribute("data-show",15),this.hasAttribute("data-increment")||this.setAttribute("data-increment",15),this.setAttribute("data-pages",Math.ceil(this.getAttribute("data-total")/this.getAttribute("data-show")));let o=this.classList.toString();o=o.replace("table--cta",""),o=o.replace("table--loading",""),this.shadowRoot.querySelector(".table__wrapper").className+=` ${o}`,this.table=this.querySelector("table"),this.savedTableBody=this.table.querySelector("tbody").cloneNode(!0),this.pagination=this.shadowRoot.querySelector(".table__pagination"),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-page]")||(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" />`),G(this.table),K(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")?W(this.table,this.form,this.pagination,this):(I(this.table,this.form,this.pagination,this),D(this.table,this.form,this),v(this,this.pagination),T(this.table,this.form)),this.shadowRoot.querySelector(".table__wrapper").addEventListener("scroll",n=>{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-pages","data-page","data-show"]}attributeChangedCallback(t,o,r){}}export{at as default};
35
+ `,this.shadowRoot.appendChild(s.content.cloneNode(!0))}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",15),this.hasAttribute("data-increment")||this.setAttribute("data-increment",15),this.setAttribute("data-pages",Math.ceil(this.getAttribute("data-total")/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.table=this.querySelector("table"),this.savedTableBody=this.table.querySelector("tbody").cloneNode(!0),this.pagination=this.shadowRoot.querySelector(".table__pagination"),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"),P(this.table,this.form),this.form.querySelector("[data-page]")||(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),Z(this.table,this.form,this.pagination,this,this.savedTableBody),tt(this.table,this.form,this.pagination,this),et(this.shadowRoot.querySelector("[data-export]"),this.table),this.form.getAttribute("data-ajax")?F(this.table,this.form,this.pagination,this):(O(this.table,this.form,this.pagination,this),k(this.table,this.form,this),T(this,this.pagination),$(this.table,this.form)),this.shadowRoot.querySelector(".table__wrapper").addEventListener("scroll",l=>{this.table.querySelector("dialog[open]")&&(this.table.querySelector("dialog[open]").close(),this.table.querySelector(".dialog__wrapper > button.active").classList.remove("active"))}),this.querySelector("iam-actionbar[data-selectall]")){const l=this.querySelector("iam-actionbar[data-selectall]");Array.from(this.table.querySelectorAll("thead tr")).forEach((i,r)=>{i.insertAdjacentHTML("afterbegin","<th></th>")}),Array.from(this.table.querySelectorAll("tbody tr")).forEach((i,r)=>{i.insertAdjacentHTML("afterbegin",`<td class="selectrow"><input type="checkbox" name="row" id="row${r}"/><label for="row${r}"><span class="visually-hidden">Select row</span></label></td>`)}),this.table.addEventListener("change",i=>{if(i&&i.target instanceof HTMLElement&&i.target.closest(".selectrow input")){let r=this.table.querySelectorAll('.selectrow input[type="checkbox"]').length,n=this.table.querySelectorAll('.selectrow input[type="checkbox"]:checked').length;l.setAttribute("data-selected",r==n?"all":n),console.log(n)}}),l.addEventListener("selected",i=>{console.log(i.detail.selected),i.detail.selected=="0"?Array.from(this.table.querySelectorAll('.selectrow input[type="checkbox"]')).forEach((r,n)=>{r.checked=!1}):i.detail.selected=="all"&&Array.from(this.table.querySelectorAll('.selectrow input[type="checkbox"]')).forEach((r,n)=>{r.checked=!0})})}}static get observedAttributes(){return["data-total","data-pages","data-page","data-show"]}attributeChangedCallback(e,o,s){}}export{rt as default};
35
36
  //# sourceMappingURL=table.component.min.js.map