@iamproperty/components 3.8.0 → 4.0.0

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 (99) hide show
  1. package/assets/css/components/actionbar-global.css +1 -0
  2. package/assets/css/components/actionbar-global.css.map +1 -0
  3. package/assets/css/components/actionbar.css +1 -0
  4. package/assets/css/components/actionbar.css.map +1 -0
  5. package/assets/css/components/collapsible-side.css +1 -0
  6. package/assets/css/components/collapsible-side.css.map +1 -0
  7. package/assets/css/components/dialog.css +1 -1
  8. package/assets/css/components/dialog.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 +2 -2
  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/collapsible-side/collapsible-side.component.js +96 -0
  38. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +27 -0
  39. package/assets/js/components/collapsible-side/collapsible-side.component.min.js.map +1 -0
  40. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  41. package/assets/js/components/header/header.component.min.js +2 -2
  42. package/assets/js/components/nav/nav.component.js +294 -0
  43. package/assets/js/components/nav/nav.component.min.js +51 -0
  44. package/assets/js/components/nav/nav.component.min.js.map +1 -0
  45. package/assets/js/components/notification/notification.component.min.js +1 -1
  46. package/assets/js/components/pagination/pagination.component.min.js +1 -1
  47. package/assets/js/components/table/table.component.js +33 -0
  48. package/assets/js/components/table/table.component.min.js +12 -11
  49. package/assets/js/components/table/table.component.min.js.map +1 -1
  50. package/assets/js/components/tabs/tabs.component.min.js +1 -1
  51. package/assets/js/dynamic.min.js +3 -3
  52. package/assets/js/dynamic.min.js.map +1 -1
  53. package/assets/js/modules/dialogs.js +3 -0
  54. package/assets/js/modules/helpers.js +0 -13
  55. package/assets/js/modules/table.js +1 -1
  56. package/assets/js/scripts.bundle.js +15 -14
  57. package/assets/js/scripts.bundle.js.map +1 -1
  58. package/assets/js/scripts.bundle.min.js +2 -2
  59. package/assets/js/scripts.bundle.min.js.map +1 -1
  60. package/assets/sass/_corefiles.scss +2 -0
  61. package/assets/sass/_functions/mixins.scss +25 -0
  62. package/assets/sass/_functions/variables.scss +1 -1
  63. package/assets/sass/components/actionbar-global.scss +89 -0
  64. package/assets/sass/components/actionbar.scss +254 -0
  65. package/assets/sass/components/collapsible-side.scss +327 -0
  66. package/assets/sass/components/dialog.scss +10 -0
  67. package/assets/sass/components/forms.scss +29 -0
  68. package/assets/sass/components/nav-global.scss +630 -0
  69. package/assets/sass/components/nav.docs.scss +54 -0
  70. package/assets/sass/components/nav.old.scss +965 -0
  71. package/assets/sass/components/nav.scss +450 -782
  72. package/assets/sass/components/table.scss +9 -1
  73. package/assets/sass/foundations/buttons.scss +57 -32
  74. package/assets/sass/foundations/links.scss +1 -1
  75. package/assets/sass/foundations/reboot.scss +5 -3
  76. package/assets/ts/components/actionbar/README.md +55 -0
  77. package/assets/ts/components/actionbar/actionbar.component.ts +396 -0
  78. package/assets/ts/components/collapsible-side/README.md +38 -0
  79. package/assets/ts/components/collapsible-side/collapsible-side.component.ts +134 -0
  80. package/assets/ts/components/nav/README.md +68 -0
  81. package/assets/ts/components/nav/nav.component.ts +370 -0
  82. package/assets/ts/components/table/table.component.ts +65 -0
  83. package/assets/ts/modules/dialogs.ts +6 -0
  84. package/assets/ts/modules/helpers.ts +0 -17
  85. package/assets/ts/modules/table.ts +5 -5
  86. package/dist/components.es.js +1368 -1113
  87. package/dist/components.umd.js +188 -44
  88. package/dist/style.css +1 -1
  89. package/package.json +1 -1
  90. package/src/components/Actionbar/Actionbar.vue +20 -0
  91. package/src/components/Actionbar/README.md +40 -0
  92. package/src/components/CollapsibleSideMenu/CollapsibleSideMenu.vue +20 -0
  93. package/src/components/CollapsibleSideMenu/README.md +23 -0
  94. package/src/components/Nav/Nav.vue +20 -195
  95. package/src/components/Nav/README.md +43 -13
  96. package/src/components/Nav-old/Nav.vue +213 -0
  97. package/src/components/Nav-old/README.md +23 -0
  98. package/src/index.js +8 -0
  99. package/src/components/Nav/Nav.spec.js +0 -35
@@ -0,0 +1,294 @@
1
+ // @ts-nocheck
2
+ // Data layer Web component created
3
+ window.dataLayer = window.dataLayer || [];
4
+ window.dataLayer.push({
5
+ "event": "customElementRegistered",
6
+ "element": "nav"
7
+ });
8
+ class iamNav extends HTMLElement {
9
+ constructor() {
10
+ super();
11
+ const shadowRoot = this.attachShadow({ mode: 'open' });
12
+ const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';
13
+ const coreCSS = document.body.hasAttribute('data-core-css') ? document.body.getAttribute('data-core-css') : `${assetLocation}/css/core.min.css`;
14
+ const loadCSS = `@import "${assetLocation}/css/components/nav.css";`;
15
+ const template = document.createElement('template');
16
+ template.innerHTML = `
17
+ <style class="styles">
18
+ @import "${coreCSS}";
19
+ ${loadCSS}
20
+ </style>
21
+ <link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous">
22
+ <div class="container">
23
+ <slot name="logo"></slot>
24
+ <div class="buttons-holder"></div>
25
+ <button class="btn-menu">Menu<i class="fa-regular fa-bars"></i><i class="fa-regular fa-xmark-large"></i></button>
26
+
27
+ <div class="menu__outer">
28
+ <div class="menu closed">
29
+
30
+ <div class="menu__primary">
31
+ <slot></slot>
32
+ <slot name="dual"></slot>
33
+ </div>
34
+ <div class="dialog__wrapper d-none" id="search-wrapper"></div>
35
+ <slot name="actions"></slot>
36
+ <div class="menu__secondary">
37
+ <div class="container">
38
+ <slot name="secondary"></slot>
39
+ </div>
40
+ </div>
41
+ </div>
42
+ <slot name="menus"></slot>
43
+ </div>
44
+ </div>
45
+ <div class="lists"></div>
46
+ <div class="backdrop" part="backdrop"></div>
47
+ `;
48
+ shadowRoot.appendChild(template.content.cloneNode(true));
49
+ }
50
+ connectedCallback() {
51
+ // Load external CSS if needed
52
+ if (this.hasAttribute('data-css'))
53
+ this.shadowRoot.querySelector('.styles').insertAdjacentHTML('beforeend', `@import "${this.getAttribute('data-css')}";`);
54
+ const menuButton = this.shadowRoot.querySelector('.btn-menu');
55
+ const menu = this.shadowRoot.querySelector('.menu');
56
+ const iamNav = this;
57
+ const backdrop = this.shadowRoot.querySelector('.backdrop');
58
+ const buttonsHolder = this.shadowRoot.querySelector('.buttons-holder');
59
+ // Check the content
60
+ this.querySelectorAll(':scope > *').forEach(function (element) {
61
+ let tagname = element.tagName;
62
+ switch (tagname) {
63
+ case "BUTTON":
64
+ element.setAttribute('slot', 'actions');
65
+ menu.classList.add('has-actions');
66
+ break;
67
+ }
68
+ // Create menu button
69
+ if (element.classList.contains('nav--menu') && element.hasAttribute('data-title') && element.hasAttribute('data-icon')) {
70
+ const title = element.getAttribute('data-title');
71
+ const iconClass = element.getAttribute('data-icon');
72
+ // Create the menu button that sits seperately to the menu
73
+ const button = document.createElement('button');
74
+ button.setAttribute('slot', title);
75
+ button.classList.add('btn-menu');
76
+ button.innerHTML = `<span class="btn btn-primary"><span>${title}</span><i class="${iconClass}"></i><i class="fa-regular fa-xmark-large"></i></span>`;
77
+ buttonsHolder.insertAdjacentElement('beforeend', button);
78
+ const mdButton = button.querySelector('.btn-primary');
79
+ // Make sure the menu is added to the right part of the component
80
+ element.setAttribute('slot', 'menus');
81
+ // 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
82
+ if (element.classList.contains('open')) {
83
+ button.classList.add('selected');
84
+ mdButton.classList.toggle('active');
85
+ iamNav.classList.add('open');
86
+ backdrop.classList.add('show');
87
+ }
88
+ else {
89
+ element.classList.add('closed'); // closed class is added to prevent the elements being tabbed into, this causes visual issues
90
+ }
91
+ // Click event
92
+ button.addEventListener('click', function (e) {
93
+ e.preventDefault();
94
+ button.classList.toggle('selected');
95
+ element.classList.toggle('open');
96
+ mdButton.classList.toggle('active');
97
+ // Close desktop menus
98
+ let openMenu = iamNav.querySelector(':scope > details[open]');
99
+ if (openMenu)
100
+ openMenu.removeAttribute('open');
101
+ // Close the main menu and fix states on the button, iamNav component and backdrop
102
+ if (element.classList.contains('open')) {
103
+ menu.classList.remove('open');
104
+ menuButton.classList.remove('selected');
105
+ setTimeout(function () { menu.classList.add('closed'); }, 1000); // Delay until its close so the animation is broken
106
+ iamNav.classList.add('open');
107
+ backdrop.classList.add('show');
108
+ element.classList.remove('closed');
109
+ }
110
+ else {
111
+ iamNav.classList.remove('open');
112
+ backdrop.classList.remove('show');
113
+ setTimeout(function () { element.classList.add('closed'); }, 1000);
114
+ }
115
+ // Close any open menus
116
+ iamNav.querySelectorAll('.nav--menu.open').forEach(function (openmenu) {
117
+ if (openmenu != element) {
118
+ openmenu.classList.remove('open');
119
+ }
120
+ });
121
+ iamNav.shadowRoot.querySelectorAll('.buttons-holder .btn-menu.selected').forEach(function (selectedButton) {
122
+ if (selectedButton != button) {
123
+ selectedButton.classList.remove('selected');
124
+ let innerBtn = selectedButton.querySelector('.btn-primary');
125
+ innerBtn.classList.remove('active');
126
+ }
127
+ });
128
+ }, false);
129
+ }
130
+ });
131
+ // Has secondary link
132
+ if (this.querySelector('a[slot="secondary"]')) {
133
+ menu.classList.add('has-secondary');
134
+ }
135
+ // Create a scroll width variable to help with the sizing of the menu with in the CSS
136
+ document.documentElement.style.setProperty('--scrollbar-width', (window.innerWidth - document.documentElement.offsetWidth) + 'px');
137
+ // Open and close the menu
138
+ menuButton.addEventListener('click', function (e) {
139
+ e.preventDefault();
140
+ menuButton.classList.toggle('selected');
141
+ menu.classList.toggle('open');
142
+ // Close any other menus
143
+ iamNav.querySelectorAll('.nav--menu.open').forEach(function (element) {
144
+ element.classList.remove('open');
145
+ setTimeout(function () { element.classList.add('closed'); }, 1000);
146
+ });
147
+ iamNav.shadowRoot.querySelectorAll('.buttons-holder .btn-menu.selected').forEach(function (element) {
148
+ element.classList.remove('selected');
149
+ let innerBtn = element.querySelector('.btn-primary');
150
+ innerBtn.classList.remove('active');
151
+ });
152
+ if (menu.classList.contains('open')) {
153
+ iamNav.classList.add('open');
154
+ menu.classList.remove('closed');
155
+ }
156
+ else {
157
+ iamNav.classList.remove('open');
158
+ setTimeout(function () { menu.classList.add('closed'); }, 1000);
159
+ }
160
+ }, false);
161
+ // Allow outside JS to close the menu
162
+ this.addEventListener("request-close", (event) => {
163
+ menuButton.classList.remove('selected');
164
+ menu.classList.remove('open');
165
+ iamNav.classList.remove('open');
166
+ });
167
+ // Close the menu on the click of the backdrop on desktop
168
+ backdrop.addEventListener("click", (event) => {
169
+ let openMenu = this.querySelector('details[open] summary');
170
+ if (openMenu)
171
+ openMenu.click();
172
+ iamNav.querySelectorAll('.nav--menu.open').forEach(function (element) {
173
+ element.classList.remove('open');
174
+ });
175
+ iamNav.shadowRoot.querySelectorAll('.buttons-holder .btn-menu.selected').forEach(function (element) {
176
+ element.classList.remove('selected');
177
+ let innerBtn = element.querySelector('.btn-primary');
178
+ innerBtn.classList.remove('active');
179
+ });
180
+ backdrop.classList.remove('show');
181
+ });
182
+ // On desktop close other menu's (details) when one is clicked
183
+ this.addEventListener("click", (event) => {
184
+ if (event && event.target instanceof HTMLElement && event.target.closest('summary')) {
185
+ if (window.innerWidth > 992) {
186
+ let summary = event.target.closest('summary');
187
+ let details = summary.closest('details');
188
+ let wrapper = details.parentNode;
189
+ if (details.hasAttribute('open'))
190
+ details.removeAttribute('open');
191
+ else
192
+ details.setAttribute('open', 'true');
193
+ // Close any bespoke menus
194
+ iamNav.querySelectorAll('.nav--menu.open').forEach(function (element) {
195
+ element.classList.remove('open');
196
+ setTimeout(function () { menu.classList.add('closed'); }, 1000);
197
+ });
198
+ iamNav.shadowRoot.querySelectorAll('.buttons-holder .btn-menu.selected').forEach(function (element) {
199
+ element.classList.remove('selected');
200
+ let innerBtn = element.querySelector('.btn-primary');
201
+ innerBtn.classList.remove('active');
202
+ });
203
+ // Close any other dropdowns on the same level
204
+ Array.from(wrapper.querySelectorAll(':scope > details')).forEach((detailsArrayElement, index) => {
205
+ if (detailsArrayElement != details)
206
+ detailsArrayElement.removeAttribute('open');
207
+ });
208
+ if (this.querySelectorAll(':scope > details[open]').length) {
209
+ backdrop.classList.add('show');
210
+ iamNav.classList.add('open');
211
+ }
212
+ else {
213
+ backdrop.classList.remove('show');
214
+ iamNav.classList.remove('open');
215
+ }
216
+ event.preventDefault();
217
+ }
218
+ }
219
+ ;
220
+ });
221
+ // Mega menu title
222
+ this.querySelectorAll('details').forEach((detailsElement) => {
223
+ let summary = detailsElement.querySelector('summary');
224
+ let containerDiv = detailsElement.querySelector(':Scope > div');
225
+ containerDiv.setAttribute('data-title', summary.textContent);
226
+ });
227
+ // Search
228
+ if (this.hasAttribute('data-search')) {
229
+ menu.classList.add('has-search');
230
+ let searchWrapper = this.shadowRoot.querySelector('#search-wrapper');
231
+ searchWrapper.classList.remove('d-none');
232
+ searchWrapper.insertAdjacentHTML('afterbegin', `<button class="btn btn-secondary btn-compact fa-search me-0 mb-0" id="search-button">Open Search field</button>
233
+ <dialog id="search-dialog">
234
+ <div class="container">
235
+ <form action="${this.hasAttribute('data-search') ? this.getAttribute('data-search') : ''}" class="row" id="search-form">
236
+ <div class="col mb-0 ms-auto col-md-7">
237
+ <label for="search" class="visually-hidden">Search</label>
238
+ <button class="suffix me-0 mb-0"><i class="fa-regular fa-search"></i></button>
239
+ <input type="search" class="" id="search" name="search" required="" autocomplete="off" data-list="${this.hasAttribute('data-list') ? this.getAttribute('data-list') : ''}" />
240
+ </div>
241
+ <div class="col d-none d-md-block mw-fit-content ms-3">
242
+ <button class="btn btn-compact btn-secondary fa-xmark-large m-0 mb-0" type="button" id="search-close"></button>
243
+ </div>
244
+ </form>
245
+ </div>
246
+ </dialog>`);
247
+ let searchButton = this.shadowRoot.querySelector('#search-button');
248
+ let searchClose = this.shadowRoot.querySelector('#search-close');
249
+ let searchDialog = this.shadowRoot.querySelector('#search-dialog');
250
+ let searchInput = this.shadowRoot.querySelector('#search');
251
+ let searchForm = this.shadowRoot.querySelector('#search-form');
252
+ if (this.hasAttribute('data-search-open')) {
253
+ searchDialog.setAttribute('open', 'open');
254
+ this.classList.add('search-open');
255
+ }
256
+ searchButton.addEventListener("click", (event) => {
257
+ searchDialog.setAttribute('open', 'open');
258
+ this.classList.add('search-open');
259
+ });
260
+ searchClose.addEventListener("click", (event) => {
261
+ searchDialog.removeAttribute('open');
262
+ this.classList.remove('search-open');
263
+ });
264
+ // Search events
265
+ searchInput.addEventListener('keydown', (event) => {
266
+ const keyupEvent = new CustomEvent("search-keydown", { detail: { search: searchInput.value } });
267
+ this.dispatchEvent(keyupEvent);
268
+ });
269
+ searchInput.addEventListener('keyup', (event) => {
270
+ if (searchInput.value.length >= 3 && searchInput.hasAttribute('data-list'))
271
+ searchInput.setAttribute("list", searchInput.getAttribute('data-list'));
272
+ else
273
+ searchInput.removeAttribute("list");
274
+ const keyupEvent = new CustomEvent("search-keyup", { detail: { search: searchInput.value } });
275
+ this.dispatchEvent(keyupEvent);
276
+ });
277
+ searchInput.addEventListener('change', (event) => {
278
+ const changeEvent = new CustomEvent("search-change", { detail: { search: searchInput.value } });
279
+ this.dispatchEvent(changeEvent);
280
+ });
281
+ searchForm.addEventListener('submit', (event) => {
282
+ if (this.hasAttribute('data-prevent-search'))
283
+ event.preventDefault();
284
+ const submitEvent = new CustomEvent("search-submit", { detail: { search: searchInput.value } });
285
+ this.dispatchEvent(submitEvent);
286
+ });
287
+ // Make sure any child lists are available to the search input
288
+ this.querySelectorAll('datalist').forEach((list) => {
289
+ iamNav.shadowRoot.querySelector('.lists').insertAdjacentElement('beforeend', list);
290
+ });
291
+ }
292
+ }
293
+ }
294
+ export default iamNav;
@@ -0,0 +1,51 @@
1
+ /*!
2
+ * iamKey v4.0.0
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.8.0
2
+ * iamKey v4.0.0
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.8.0
2
+ * iamKey v4.0.0
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"];