@iamproperty/components 7.8.2--beta3 → 7.8.2--beta5

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 (235) hide show
  1. package/assets/css/components/actionbar.component.css +1 -1
  2. package/assets/css/components/actionbar.component.css.map +1 -1
  3. package/assets/css/components/address-lookup.component.css +1 -1
  4. package/assets/css/components/address-lookup.component.css.map +1 -1
  5. package/assets/css/components/advanced-select.component.css +1 -1
  6. package/assets/css/components/advanced-select.component.css.map +1 -1
  7. package/assets/css/components/banner.preload.css +1 -0
  8. package/assets/css/components/banner.preload.css.map +1 -0
  9. package/assets/css/components/calendar.component.css +1 -1
  10. package/assets/css/components/calendar.component.css.map +1 -1
  11. package/assets/css/components/card.component.css +1 -1
  12. package/assets/css/components/card.component.css.map +1 -1
  13. package/assets/css/components/card.module.css +1 -1
  14. package/assets/css/components/card.module.css.map +1 -1
  15. package/assets/css/components/card.preload.css +1 -0
  16. package/assets/css/components/card.preload.css.map +1 -0
  17. package/assets/css/components/carousel.component.css +1 -1
  18. package/assets/css/components/carousel.component.css.map +1 -1
  19. package/assets/css/components/carousel.config.css +1 -1
  20. package/assets/css/components/carousel.config.css.map +1 -1
  21. package/assets/css/components/config.component.css +1 -1
  22. package/assets/css/components/config.component.css.map +1 -1
  23. package/assets/css/components/content.component.css +1 -1
  24. package/assets/css/components/content.component.css.map +1 -1
  25. package/assets/css/components/fileupload.css +1 -1
  26. package/assets/css/components/fileupload.css.map +1 -1
  27. package/assets/css/components/filter-card.component.css +1 -1
  28. package/assets/css/components/filter-card.component.css.map +1 -1
  29. package/assets/css/components/modal.component.css +1 -1
  30. package/assets/css/components/modal.component.css.map +1 -1
  31. package/assets/css/components/multi-step-modal.component.css +1 -1
  32. package/assets/css/components/multi-step-modal.component.css.map +1 -1
  33. package/assets/css/components/multiselect.css +1 -1
  34. package/assets/css/components/multiselect.css.map +1 -1
  35. package/assets/css/components/nav.component.css +1 -1
  36. package/assets/css/components/nav.component.css.map +1 -1
  37. package/assets/css/components/nav.global.css +1 -1
  38. package/assets/css/components/nav.global.css.map +1 -1
  39. package/assets/css/components/notification.global.css +1 -1
  40. package/assets/css/components/notification.global.css.map +1 -1
  41. package/assets/css/components/pagination.css +1 -1
  42. package/assets/css/components/pagination.css.map +1 -1
  43. package/assets/css/components/record-card.component.css +1 -1
  44. package/assets/css/components/record-card.component.css.map +1 -1
  45. package/assets/css/components/search.component.css +1 -1
  46. package/assets/css/components/search.component.css.map +1 -1
  47. package/assets/css/components/skeleton.global.css +1 -1
  48. package/assets/css/components/skeleton.global.css.map +1 -1
  49. package/assets/css/components/slider.css +1 -1
  50. package/assets/css/components/slider.css.map +1 -1
  51. package/assets/css/components/split-button.component.css +1 -1
  52. package/assets/css/components/split-button.component.css.map +1 -1
  53. package/assets/css/components/std-nav-standalone.component.css +1 -1
  54. package/assets/css/components/std-nav-standalone.component.css.map +1 -1
  55. package/assets/css/components/tabs.component.css +1 -1
  56. package/assets/css/components/tabs.component.css.map +1 -1
  57. package/assets/css/components/tag.component.css +1 -1
  58. package/assets/css/components/tag.component.css.map +1 -1
  59. package/assets/css/components/video-card.component.css +1 -1
  60. package/assets/css/components/video-card.component.css.map +1 -1
  61. package/assets/css/components/video-modal.component.css +1 -1
  62. package/assets/css/components/video-modal.component.css.map +1 -1
  63. package/assets/css/core.min.css +1 -1
  64. package/assets/css/core.min.css.map +1 -1
  65. package/assets/css/elements/dialog.css +1 -1
  66. package/assets/css/elements/dialog.css.map +1 -1
  67. package/assets/css/elements/dropdown.css +1 -1
  68. package/assets/css/elements/dropdown.css.map +1 -1
  69. package/assets/css/elements/forms.css +1 -1
  70. package/assets/css/elements/forms.css.map +1 -1
  71. package/assets/css/elements/links--global.css +1 -1
  72. package/assets/css/elements/links--global.css.map +1 -1
  73. package/assets/css/elements/links.css +1 -1
  74. package/assets/css/elements/links.css.map +1 -1
  75. package/assets/css/style.min.css +1 -1
  76. package/assets/css/style.min.css.map +1 -1
  77. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  78. package/assets/js/components/actionbar/actionbar.component.min.js +3 -3
  79. package/assets/js/components/address-lookup/address-lookup.component.min.js +4 -4
  80. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  81. package/assets/js/components/advanced-select/advanced-select.component.min.js +2 -2
  82. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  83. package/assets/js/components/banner/banner.component.min.js +1 -1
  84. package/assets/js/components/barchart/barchart.component.min.js +1 -1
  85. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  86. package/assets/js/components/bone/bone.component.min.js +1 -1
  87. package/assets/js/components/button/button.component.min.js +1 -1
  88. package/assets/js/components/calendar/calendar.component.min.js +2 -2
  89. package/assets/js/components/card/card.component.js +114 -125
  90. package/assets/js/components/card/card.component.min.js +7 -7
  91. package/assets/js/components/card/card.component.min.js.map +1 -1
  92. package/assets/js/components/carousel/carousel.component.js +83 -29
  93. package/assets/js/components/carousel/carousel.component.min.js +16 -11
  94. package/assets/js/components/carousel/carousel.component.min.js.map +1 -1
  95. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
  96. package/assets/js/components/config/config.component.min.js +7 -7
  97. package/assets/js/components/config/config.component.min.js.map +1 -1
  98. package/assets/js/components/content/content.component.js +28 -69
  99. package/assets/js/components/content/content.component.min.js +4 -4
  100. package/assets/js/components/content/content.component.min.js.map +1 -1
  101. package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
  102. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +1 -1
  103. package/assets/js/components/fileupload/fileupload.component.min.js +2 -2
  104. package/assets/js/components/filter-card/filter-card.component.min.js +5 -5
  105. package/assets/js/components/filter-card/filter-card.component.min.js.map +1 -1
  106. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  107. package/assets/js/components/form/form.component.js +42 -151
  108. package/assets/js/components/form/form.component.min.js +3 -3
  109. package/assets/js/components/form/form.component.min.js.map +1 -1
  110. package/assets/js/components/header/header.component.min.js +1 -1
  111. package/assets/js/components/inline-edit/inline-edit.component.min.js +1 -1
  112. package/assets/js/components/input/input.component.min.js +1 -1
  113. package/assets/js/components/input-range/input-range.component.min.js +1 -1
  114. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  115. package/assets/js/components/menu/menu.component.min.js +1 -1
  116. package/assets/js/components/milestone/milestone.component.min.js +1 -1
  117. package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
  118. package/assets/js/components/modal/modal.component.js +16 -11
  119. package/assets/js/components/modal/modal.component.min.js +7 -7
  120. package/assets/js/components/modal/modal.component.min.js.map +1 -1
  121. package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
  122. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +4 -4
  123. package/assets/js/components/multiselect/multiselect.component.min.js +4 -4
  124. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
  125. package/assets/js/components/nav/nav.component.js +88 -79
  126. package/assets/js/components/nav/nav.component.min.js +8 -8
  127. package/assets/js/components/nav/nav.component.min.js.map +1 -1
  128. package/assets/js/components/notification/notification.component.min.js +2 -2
  129. package/assets/js/components/pagination/pagination.component.min.js +5 -5
  130. package/assets/js/components/password/password.component.min.js +1 -1
  131. package/assets/js/components/popover/popover.component.min.js +1 -1
  132. package/assets/js/components/rank/rank.component.min.js +1 -1
  133. package/assets/js/components/rankings/rankings.component.min.js +1 -1
  134. package/assets/js/components/rating/rating.component.min.js +1 -1
  135. package/assets/js/components/record-card/record-card.component.min.js +6 -6
  136. package/assets/js/components/record-card/record-card.component.min.js.map +1 -1
  137. package/assets/js/components/search/search.component.js +235 -186
  138. package/assets/js/components/search/search.component.min.js +12 -7
  139. package/assets/js/components/search/search.component.min.js.map +1 -1
  140. package/assets/js/components/skeleton/skeleton.component.min.js +1 -1
  141. package/assets/js/components/slider/slider.component.min.js +2 -2
  142. package/assets/js/components/split-button/split-button.component.min.js +2 -2
  143. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +5 -5
  144. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
  145. package/assets/js/components/std-nav/std-nav.component.js +12 -9
  146. package/assets/js/components/std-nav/std-nav.component.min.js +12 -15
  147. package/assets/js/components/std-nav/std-nav.component.min.js.map +1 -1
  148. package/assets/js/components/std-nav-standalone/std-nav-standalone.component.min.js +5 -5
  149. package/assets/js/components/std-nav-standalone/std-nav-standalone.component.min.js.map +1 -1
  150. package/assets/js/components/table/table.component.min.js +1 -1
  151. package/assets/js/components/table-ajax/table-ajax.component.min.js +1 -1
  152. package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
  153. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
  154. package/assets/js/components/table-submit/table-submit.component.min.js +1 -1
  155. package/assets/js/components/tabs/tabs.component.min.js +4 -4
  156. package/assets/js/components/tag/tag.component.min.js +3 -3
  157. package/assets/js/components/tag/tag.component.min.js.map +1 -1
  158. package/assets/js/components/tooltip/tooltip.component.min.js +1 -1
  159. package/assets/js/components/video/video.component.min.js +1 -1
  160. package/assets/js/components/video-card/video-card.component.min.js +9 -9
  161. package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
  162. package/assets/js/components/video-modal/video-modal.component.min.js +5 -5
  163. package/assets/js/components/word-count/word-count.component.min.js +1 -1
  164. package/assets/js/modules/card.module.js +12 -11
  165. package/assets/js/modules/content.js +40 -8
  166. package/assets/js/modules/content.test.js +62 -12
  167. package/assets/js/modules/data-layer.js +7 -6
  168. package/assets/js/modules/dropdown.js +0 -1
  169. package/assets/js/modules/form.js +129 -0
  170. package/assets/js/modules/form.test.js +132 -0
  171. package/assets/js/modules/nav.js +10 -3
  172. package/assets/js/modules/search.js +153 -0
  173. package/assets/js/modules/search.test.js +125 -0
  174. package/assets/js/modules/tabs.test.js +64 -12
  175. package/assets/js/modules/test-dom.js +5 -0
  176. package/assets/js/modules/testimonial.test.js +44 -6
  177. package/assets/js/modules/videos.test.js +61 -13
  178. package/assets/js/scripts.bundle.js +3 -3
  179. package/assets/js/scripts.bundle.js.map +1 -1
  180. package/assets/js/scripts.bundle.min.js +2 -2
  181. package/assets/js/scripts.bundle.min.js.map +1 -1
  182. package/assets/sass/_components.scss +2 -63
  183. package/assets/sass/_utilities.scss +1 -0
  184. package/assets/sass/components/banner.preload.scss +26 -0
  185. package/assets/sass/components/card.component.scss +1 -7
  186. package/assets/sass/components/card.module.scss +6 -6
  187. package/assets/sass/components/card.preload.scss +80 -0
  188. package/assets/sass/components/carousel.component.scss +165 -0
  189. package/assets/sass/components/carousel.config.scss +90 -249
  190. package/assets/sass/components/content.component.scss +0 -7
  191. package/assets/sass/components/modal.component.scss +5 -1
  192. package/assets/sass/components/nav.component.scss +2 -1
  193. package/assets/sass/components/nav.global.scss +0 -10
  194. package/assets/sass/components/notification.global.scss +8 -0
  195. package/assets/sass/components/search.component.scss +89 -7
  196. package/assets/sass/components/skeleton.global.scss +4 -0
  197. package/assets/sass/elements/dialog.scss +43 -0
  198. package/assets/sass/elements/dropdown.css +2 -0
  199. package/assets/sass/elements/forms.scss +0 -27
  200. package/assets/sass/elements/links--global.scss +40 -2
  201. package/assets/sass/foundations/colours.scss +0 -24
  202. package/assets/sass/foundations/reboot.scss +4 -0
  203. package/assets/sass/foundations/root.scss +0 -1
  204. package/assets/sass/utilities/js-display.css +2 -3
  205. package/assets/sass/utilities/wordpress.css +7 -0
  206. package/assets/ts/components/card/card.component.ts +72 -62
  207. package/assets/ts/components/carousel/carousel.component.ts +84 -19
  208. package/assets/ts/components/content/content.component.ts +36 -100
  209. package/assets/ts/components/form/form.component.ts +54 -213
  210. package/assets/ts/components/modal/modal.component.ts +27 -19
  211. package/assets/ts/components/nav/nav.component.ts +107 -95
  212. package/assets/ts/components/search/search.component.ts +260 -184
  213. package/assets/ts/components/std-nav/std-nav.component.ts +20 -17
  214. package/assets/ts/html.d.ts +6 -0
  215. package/assets/ts/modules/card.module.ts +19 -11
  216. package/assets/ts/modules/content.test.ts +84 -12
  217. package/assets/ts/modules/content.ts +56 -9
  218. package/assets/ts/modules/data-layer.ts +7 -11
  219. package/assets/ts/modules/dropdown.ts +0 -2
  220. package/assets/ts/modules/form.test.ts +183 -0
  221. package/assets/ts/modules/form.ts +210 -0
  222. package/assets/ts/modules/nav.ts +12 -3
  223. package/assets/ts/modules/search.test.ts +142 -0
  224. package/assets/ts/modules/search.ts +206 -0
  225. package/assets/ts/modules/tabs.test.ts +79 -12
  226. package/assets/ts/modules/test-dom.ts +5 -0
  227. package/assets/ts/modules/testimonial.test.ts +45 -6
  228. package/assets/ts/modules/videos.test.ts +74 -14
  229. package/dist/components.es.js +25 -25
  230. package/dist/components.umd.js +170 -163
  231. package/package.json +1 -1
  232. package/assets/js/modules/carousel.js +0 -214
  233. package/assets/js/modules/carousel.test.js +0 -18
  234. package/assets/ts/modules/carousel.test.ts +0 -27
  235. package/assets/ts/modules/carousel.ts +0 -301
@@ -17,7 +17,7 @@ class iamModal extends HTMLElement {
17
17
  template.innerHTML = `
18
18
  <style>
19
19
  ${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
20
-
20
+
21
21
  ${loadCSS}
22
22
  </style>
23
23
  <link rel="stylesheet" href="https://kit.fontawesome.com/8bd0fca975.css" crossorigin="anonymous" />
@@ -41,6 +41,7 @@ class iamModal extends HTMLElement {
41
41
 
42
42
  connectedCallback(): void {
43
43
 
44
+ const hasDialogParent = this.closest('dialog[id]');
44
45
  const originalDialog = this.querySelector('dialog');
45
46
 
46
47
  const id = this.hasAttribute('id') ? this.getAttribute('id') : originalDialog?.getAttribute('id');
@@ -50,6 +51,10 @@ class iamModal extends HTMLElement {
50
51
  const agreedButton = this.querySelector('button[slot="agreed-button"]') ? this.querySelector('button[slot="agreed-button"]') : this.shadowRoot?.querySelector('[data-agreed]');
51
52
  const modalType = this.hasAttribute('data-type') ? this.getAttribute('data-type') : 'passive';
52
53
 
54
+
55
+ if(hasDialogParent)
56
+ this.classList.add('has-parent-dialog');
57
+
53
58
  const agreed = (close = true) => {
54
59
  const agreedEvent = new CustomEvent('agreed', {
55
60
  detail: { modalId: id },
@@ -62,20 +67,20 @@ class iamModal extends HTMLElement {
62
67
  }
63
68
 
64
69
  document.addEventListener('click', (e) => {
65
-
70
+
66
71
  if(e.target.matches(`[command="show-modal"][commandfor="${id}"]`) || e.target.matches(`[data-modal="${id}"]`)){
67
72
  openModal(this);
68
73
  }
69
74
  });
70
75
 
71
76
  document.addEventListener('click', (e) => {
72
-
77
+
73
78
  if(e.target.matches(`[command="close"][commandfor="${id}"]`)){
74
79
  closeModal(this);
75
80
  }
76
81
  });
77
-
78
- // Disable the original event
82
+
83
+ // Disable the original event
79
84
  originalDialog?.addEventListener('command', (e) => {
80
85
 
81
86
  if (event.command == "show-modal") {
@@ -103,7 +108,7 @@ class iamModal extends HTMLElement {
103
108
  if(originalDialog) {
104
109
  Array.from(originalDialog?.querySelectorAll('[slot]')).forEach((element) => {
105
110
  this.moveBefore(element, originalDialog);
106
- });
111
+ });
107
112
  }
108
113
 
109
114
  closeButton?.addEventListener('click', () => {
@@ -118,30 +123,33 @@ class iamModal extends HTMLElement {
118
123
 
119
124
  agreed();
120
125
  });
121
-
126
+
122
127
 
123
128
  this.addEventListener('close-modal', () => {
124
129
  closeModal(this);
125
130
  });
126
131
 
127
- // Hijack the default form submission
128
- originalDialog?.addEventListener('submit', (e) => {
132
+ // Hijack the default form submission
133
+ if(!hasDialogParent){
134
+ originalDialog?.addEventListener('submit', (e) => {
135
+
136
+ if(e.submitter && e.submitter.hasAttribute('formmethod') && e.submitter.getAttribute('formmethod') =="dialog"){
137
+
138
+ closeModal(this);
139
+ }
140
+ else {
141
+ agreed(false);
142
+ }
143
+ });
144
+ }
129
145
 
130
- if(e.submitter && e.submitter.hasAttribute('formmethod') && e.submitter.getAttribute('formmethod') =="dialog"){
131
-
132
- closeModal(this);
133
- }
134
- else {
135
- agreed(false);
136
- }
137
- });
138
146
 
139
147
  Array.from(this.querySelectorAll('button[type="submit"]')).forEach((button)=> {
140
148
 
141
149
  button.addEventListener('click', (e) => {
142
150
 
143
151
  if(!button.closest('form') && !button.hasAttribute('formmethod')){
144
-
152
+
145
153
  agreed();
146
154
  }
147
155
  });
@@ -179,7 +187,7 @@ class iamModal extends HTMLElement {
179
187
  </i>`
180
188
  );
181
189
  }
182
-
190
+
183
191
  }
184
192
  }
185
193
 
@@ -32,7 +32,7 @@ class iamNav extends HTMLElement {
32
32
 
33
33
  <div class="menu__outer">
34
34
  <div class="menu closed">
35
-
35
+
36
36
  <div class="menu__primary">
37
37
  <slot></slot>
38
38
  <slot name="dual"></slot>
@@ -46,7 +46,7 @@ class iamNav extends HTMLElement {
46
46
  </div>
47
47
  </div>
48
48
  <slot name="menus"></slot>
49
- </div>
49
+ </div>
50
50
  </div>
51
51
  <div class="backdrop" part="backdrop"></div>
52
52
  `;
@@ -73,107 +73,119 @@ class iamNav extends HTMLElement {
73
73
  const buttonsHolder = this.shadowRoot.querySelector('.buttons-holder');
74
74
 
75
75
  // Check the content
76
- this.querySelectorAll(':scope > *').forEach(function (element) {
77
- const tagname = element.tagName;
78
-
79
- switch (tagname) {
80
- case 'BUTTON':
81
- if (!element.hasAttribute('slot')) {
82
- element.setAttribute('slot', 'actions');
83
- menu.classList.add('has-actions');
84
- }
85
- break;
86
- }
76
+ const createNavMenu = (component) => {
87
77
 
88
-
89
- // Create menu button
90
- if (
91
- element.classList.contains('nav--menu') &&
92
- element.hasAttribute('data-title') &&
93
- element.hasAttribute('data-icon')
94
- ) {
95
- const title = element.getAttribute('data-title');
96
- const iconClass = element.getAttribute('data-icon');
97
-
98
- // Create the menu button that sits seperately to the menu
99
- const button = document.createElement('button');
100
- button.setAttribute('slot', title);
101
- button.classList.add('btn-menu');
102
- button.setAttribute('part', 'btn-menu');
103
- button.innerHTML = `<span class="btn btn-primary"><span>${title}</span><i class="${iconClass}"></i><i class="fa-regular fa-xmark-large"></i></span>`;
104
- buttonsHolder.insertAdjacentElement('beforeend', button);
105
-
106
- const mdButton = button.querySelector('.btn-primary');
107
-
108
- // Make sure the menu is added to the right part of the component
109
- element.setAttribute('slot', 'menus');
110
-
111
- // 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
112
- if (element.classList.contains('open')) {
113
- button.setAttribute('aria-expanded', true);
114
- mdButton.classList.toggle('active');
115
- iamNav.classList.add('open');
116
- backdrop.classList.add('show');
117
- } else {
118
- element.classList.add('closed'); // closed class is added to prevent the elements being tabbed into, this causes visual issues
78
+ buttonsHolder?.innerHTML = '';
79
+ component.querySelectorAll(':scope > *').forEach(function (element) {
80
+ const tagname = element.tagName;
81
+
82
+ switch (tagname) {
83
+ case 'BUTTON':
84
+ if (!element.hasAttribute('slot')) {
85
+ element.setAttribute('slot', 'actions');
86
+ menu.classList.add('has-actions');
87
+ }
88
+ break;
119
89
  }
120
90
 
121
- // Click event
122
- button.addEventListener(
123
- 'click',
124
- function (e) {
125
- e.preventDefault();
126
- button.toggleAttribute('aria-expanded');
127
- element.classList.toggle('open');
128
- mdButton.classList.toggle('active');
129
91
 
130
- // Close desktop menus
131
- const openMenu = iamNav.querySelector(':scope > details[open]');
132
-
133
- if (openMenu) openMenu.removeAttribute('open');
134
-
135
- // Close the main menu and fix states on the button, iamNav component and backdrop
136
- if (element.classList.contains('open')) {
137
- menu.classList.remove('open');
138
- menuButton.removeAttribute('aria-expanded');
139
- setTimeout(function () {
140
- menu.classList.add('closed');
141
- }, 1000); // Delay until its close so the animation is broken
142
- iamNav.classList.add('open');
143
- backdrop.classList.add('show');
144
- element.classList.remove('closed');
145
- } else {
146
- iamNav.classList.remove('open');
147
- backdrop.classList.remove('show');
148
- setTimeout(function () {
149
- element.classList.add('closed');
150
- }, 1000);
151
- }
92
+ // Create menu button
93
+ if (
94
+ element.classList.contains('nav--menu') &&
95
+ element.hasAttribute('data-title') &&
96
+ element.hasAttribute('data-icon')
97
+ ) {
98
+ const title = element.getAttribute('data-title');
99
+ const iconClass = element.getAttribute('data-icon');
100
+
101
+ // Create the menu button that sits seperately to the menu
102
+ const button = document.createElement('button');
103
+ button.setAttribute('slot', title);
104
+ button.classList.add('btn-menu');
105
+ button.setAttribute('part', 'btn-menu');
106
+ button.innerHTML = `<span class="btn btn-primary"><span>${title}</span><i class="${iconClass}"></i><i class="fa-regular fa-xmark-large"></i></span>`;
107
+ buttonsHolder.insertAdjacentElement('beforeend', button);
152
108
 
153
- // Close any open menus
154
- iamNav.querySelectorAll('.nav--menu.open').forEach(function (openmenu) {
155
- if (openmenu != element) {
156
- openmenu.classList.remove('open');
109
+ const mdButton = button.querySelector('.btn-primary');
110
+
111
+ // Make sure the menu is added to the right part of the component
112
+ element.setAttribute('slot', 'menus');
113
+
114
+ // 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
115
+ if (element.classList.contains('open')) {
116
+ button.setAttribute('aria-expanded', true);
117
+ mdButton.classList.toggle('active');
118
+ component.classList.add('open');
119
+ backdrop.classList.add('show');
120
+ } else {
121
+ element.classList.add('closed'); // closed class is added to prevent the elements being tabbed into, this causes visual issues
122
+ }
123
+
124
+ // Click event
125
+ button.addEventListener(
126
+ 'click',
127
+ function (e) {
128
+ e.preventDefault();
129
+ button.toggleAttribute('aria-expanded');
130
+
131
+ console.log(element);
132
+ element.classList.toggle('open');
133
+ mdButton.classList.toggle('active');
134
+
135
+ // Close desktop menus
136
+ const openMenu = component.querySelector(':scope > details[open]');
137
+
138
+ if (openMenu) openMenu.removeAttribute('open');
139
+
140
+ // Close the main menu and fix states on the button, iamNav component and backdrop
141
+ if (element.classList.contains('open')) {
142
+ menu.classList.remove('open');
143
+ menuButton.removeAttribute('aria-expanded');
144
+ setTimeout(function () {
145
+ menu.classList.add('closed');
146
+ }, 1000); // Delay until its close so the animation is broken
147
+ component.classList.add('open');
148
+ backdrop.classList.add('show');
149
+ element.classList.remove('closed');
150
+ } else {
151
+ component.classList.remove('open');
152
+ backdrop.classList.remove('show');
153
+ setTimeout(function () {
154
+ element.classList.add('closed');
155
+ }, 1000);
157
156
  }
158
- });
159
-
160
- iamNav.shadowRoot
161
- .querySelectorAll('.buttons-holder .btn-menu[aria-expanded]')
162
- .forEach(function (selectedButton) {
163
- if (selectedButton != button) {
164
- selectedButton.removeAttribute('aria-expanded');
165
- const innerBtn = selectedButton.querySelector('.btn-primary');
166
- innerBtn.classList.remove('active');
157
+
158
+ // Close any open menus
159
+ component.querySelectorAll('.nav--menu.open').forEach(function (openmenu) {
160
+ if (openmenu != element) {
161
+ openmenu.classList.remove('open');
167
162
  }
168
163
  });
169
- },
170
- false
171
- );
172
- }
173
- });
174
164
 
175
- this.querySelectorAll('details').forEach(function (element) {
176
- element.classList.add('details--revert');
165
+ component.shadowRoot
166
+ .querySelectorAll('.buttons-holder .btn-menu[aria-expanded]')
167
+ .forEach(function (selectedButton) {
168
+ if (selectedButton != button) {
169
+ selectedButton.removeAttribute('aria-expanded');
170
+ const innerBtn = selectedButton.querySelector('.btn-primary');
171
+ innerBtn.classList.remove('active');
172
+ }
173
+ });
174
+ },
175
+ false
176
+ );
177
+ }
178
+ });
179
+
180
+ component.querySelectorAll('details').forEach(function (element) {
181
+ element.classList.add('details--revert');
182
+ });
183
+ }
184
+ createNavMenu(this);
185
+
186
+ this.addEventListener('rebuilt', () => {
187
+ console.log('rebuilt nav');
188
+ createNavMenu(this);
177
189
  });
178
190
 
179
191
  // Has secondary link
@@ -186,7 +198,7 @@ class iamNav extends HTMLElement {
186
198
  'click',
187
199
  function (e) {
188
200
  e.preventDefault();
189
- menuButton.toggleAttribute('aria-expanded');
201
+ //menuButton.toggleAttribute('aria-expanded');
190
202
  menu.classList.toggle('open');
191
203
 
192
204
  // Close any other menus