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

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 (243) 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.component.css +1 -1
  8. package/assets/css/components/banner.component.css.map +1 -1
  9. package/assets/css/components/barchart.component.css +1 -1
  10. package/assets/css/components/barchart.component.css.map +1 -1
  11. package/assets/css/components/branch-selector.css +1 -0
  12. package/assets/css/components/branch-selector.css.map +1 -0
  13. package/assets/css/components/calendar.component.css +1 -1
  14. package/assets/css/components/calendar.component.css.map +1 -1
  15. package/assets/css/components/card.component.css +1 -1
  16. package/assets/css/components/card.component.css.map +1 -1
  17. package/assets/css/components/card.module.css +1 -1
  18. package/assets/css/components/card.module.css.map +1 -1
  19. package/assets/css/components/card.preload.css +1 -1
  20. package/assets/css/components/card.preload.css.map +1 -1
  21. package/assets/css/components/carousel.component.css +1 -1
  22. package/assets/css/components/carousel.component.css.map +1 -1
  23. package/assets/css/components/charts.config.css +1 -1
  24. package/assets/css/components/charts.config.css.map +1 -1
  25. package/assets/css/components/collapsible-side.css +1 -1
  26. package/assets/css/components/collapsible-side.css.map +1 -1
  27. package/assets/css/components/config.component.css +1 -1
  28. package/assets/css/components/config.component.css.map +1 -1
  29. package/assets/css/components/doughnutchart.component.css +1 -1
  30. package/assets/css/components/doughnutchart.component.css.map +1 -1
  31. package/assets/css/components/fileupload.css +1 -1
  32. package/assets/css/components/fileupload.css.map +1 -1
  33. package/assets/css/components/filter-card.component.css +1 -1
  34. package/assets/css/components/filter-card.component.css.map +1 -1
  35. package/assets/css/components/inline-edit.css +1 -1
  36. package/assets/css/components/inline-edit.css.map +1 -1
  37. package/assets/css/components/menu.component.css +1 -1
  38. package/assets/css/components/menu.component.css.map +1 -1
  39. package/assets/css/components/modal.component.css +1 -1
  40. package/assets/css/components/modal.component.css.map +1 -1
  41. package/assets/css/components/multi-step-modal.component.css +1 -1
  42. package/assets/css/components/multi-step-modal.component.css.map +1 -1
  43. package/assets/css/components/multiselect.css +1 -1
  44. package/assets/css/components/multiselect.css.map +1 -1
  45. package/assets/css/components/nav-standalone.component.css +1 -0
  46. package/assets/css/components/nav-standalone.component.css.map +1 -0
  47. package/assets/css/components/nav.component.css +1 -1
  48. package/assets/css/components/nav.component.css.map +1 -1
  49. package/assets/css/components/nav.global.css +1 -1
  50. package/assets/css/components/nav.global.css.map +1 -1
  51. package/assets/css/components/nav.preload.css +1 -1
  52. package/assets/css/components/nav.preload.css.map +1 -1
  53. package/assets/css/components/notification.css +1 -1
  54. package/assets/css/components/notification.css.map +1 -1
  55. package/assets/css/components/pagination.css +1 -1
  56. package/assets/css/components/pagination.css.map +1 -1
  57. package/assets/css/components/record-card.component.css +1 -1
  58. package/assets/css/components/record-card.component.css.map +1 -1
  59. package/assets/css/components/search.component.css +1 -1
  60. package/assets/css/components/search.component.css.map +1 -1
  61. package/assets/css/components/slider.css +1 -1
  62. package/assets/css/components/slider.css.map +1 -1
  63. package/assets/css/components/split-button.component.css +1 -1
  64. package/assets/css/components/split-button.component.css.map +1 -1
  65. package/assets/css/components/tabs.component.css +1 -1
  66. package/assets/css/components/tabs.component.css.map +1 -1
  67. package/assets/css/components/tag.component.css +1 -1
  68. package/assets/css/components/tag.component.css.map +1 -1
  69. package/assets/css/components/video-card.component.css +1 -1
  70. package/assets/css/components/video-card.component.css.map +1 -1
  71. package/assets/css/components/video-modal.component.css +1 -1
  72. package/assets/css/components/video-modal.component.css.map +1 -1
  73. package/assets/css/components/video.component.css +1 -1
  74. package/assets/css/components/video.component.css.map +1 -1
  75. package/assets/css/core.min.css +1 -1
  76. package/assets/css/core.min.css.map +1 -1
  77. package/assets/css/elements/buttons--action.css +1 -1
  78. package/assets/css/elements/buttons--action.css.map +1 -1
  79. package/assets/css/elements/buttons--compact.css +1 -1
  80. package/assets/css/elements/buttons--compact.css.map +1 -1
  81. package/assets/css/elements/buttons--global.css +1 -1
  82. package/assets/css/elements/buttons--global.css.map +1 -1
  83. package/assets/css/elements/buttons--secondary.css +1 -1
  84. package/assets/css/elements/buttons--secondary.css.map +1 -1
  85. package/assets/css/elements/buttons--tertiary.css +1 -1
  86. package/assets/css/elements/buttons--tertiary.css.map +1 -1
  87. package/assets/css/elements/buttons.css +1 -1
  88. package/assets/css/elements/buttons.css.map +1 -1
  89. package/assets/css/elements/dropdown.css +1 -1
  90. package/assets/css/elements/dropdown.css.map +1 -1
  91. package/assets/css/elements/forms.css +1 -1
  92. package/assets/css/elements/forms.css.map +1 -1
  93. package/assets/css/elements/links--global.css +1 -1
  94. package/assets/css/elements/links--global.css.map +1 -1
  95. package/assets/css/elements/links.css +1 -1
  96. package/assets/css/elements/links.css.map +1 -1
  97. package/assets/css/elements/popover.css +1 -1
  98. package/assets/css/elements/popover.css.map +1 -1
  99. package/assets/css/elements/select.css +1 -1
  100. package/assets/css/elements/select.css.map +1 -1
  101. package/assets/css/elements/tooltips.css +1 -1
  102. package/assets/css/elements/tooltips.css.map +1 -1
  103. package/assets/css/style.min.css +1 -1
  104. package/assets/css/style.min.css.map +1 -1
  105. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  106. package/assets/js/components/actionbar/actionbar.component.min.js +3 -3
  107. package/assets/js/components/address-lookup/address-lookup.component.js +1 -1
  108. package/assets/js/components/address-lookup/address-lookup.component.min.js +5 -5
  109. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  110. package/assets/js/components/advanced-select/advanced-select.component.min.js +4 -4
  111. package/assets/js/components/advanced-select/advanced-select.component.min.js.map +1 -1
  112. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  113. package/assets/js/components/banner/banner.component.min.js +2 -2
  114. package/assets/js/components/barchart/barchart.component.min.js +2 -2
  115. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  116. package/assets/js/components/bone/bone.component.min.js +1 -1
  117. package/assets/js/components/branch-selector/branch-selector.component.js +69 -0
  118. package/assets/js/components/branch-selector/branch-selector.component.min.js +22 -0
  119. package/assets/js/components/branch-selector/branch-selector.component.min.js.map +1 -0
  120. package/assets/js/components/button/button.component.min.js +1 -1
  121. package/assets/js/components/calendar/calendar.component.min.js +2 -2
  122. package/assets/js/components/card/card.component.min.js +3 -3
  123. package/assets/js/components/carousel/carousel.component.min.js +3 -3
  124. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +2 -2
  125. package/assets/js/components/config/config.component.min.js +4 -4
  126. package/assets/js/components/config/config.component.min.js.map +1 -1
  127. package/assets/js/components/content/content.component.min.js +1 -1
  128. package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
  129. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +4 -4
  130. package/assets/js/components/fileupload/fileupload.component.min.js +4 -4
  131. package/assets/js/components/filter-card/filter-card.component.min.js +5 -5
  132. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  133. package/assets/js/components/form/form.component.min.js +1 -1
  134. package/assets/js/components/header/header.component.min.js +1 -1
  135. package/assets/js/components/inline-edit/inline-edit.component.min.js +3 -3
  136. package/assets/js/components/inline-edit/inline-edit.component.min.js.map +1 -1
  137. package/assets/js/components/input/input.component.min.js +1 -1
  138. package/assets/js/components/input-range/input-range.component.min.js +1 -1
  139. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  140. package/assets/js/components/menu/menu.component.min.js +2 -2
  141. package/assets/js/components/milestone/milestone.component.min.js +1 -1
  142. package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
  143. package/assets/js/components/modal/modal.component.js +2 -0
  144. package/assets/js/components/modal/modal.component.min.js +4 -4
  145. package/assets/js/components/modal/modal.component.min.js.map +1 -1
  146. package/assets/js/components/multi-step/multi-step.component.min.js +2 -2
  147. package/assets/js/components/multi-step/multi-step.component.min.js.map +1 -1
  148. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +4 -4
  149. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js.map +1 -1
  150. package/assets/js/components/multiselect/multiselect.component.js +14 -18
  151. package/assets/js/components/multiselect/multiselect.component.min.js +14 -14
  152. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
  153. package/assets/js/components/nav/nav.component.js +30 -255
  154. package/assets/js/components/nav/nav.component.min.js +46 -30
  155. package/assets/js/components/nav/nav.component.min.js.map +1 -1
  156. package/assets/js/components/nav-standalone/nav-standalone.component.js +51 -0
  157. package/assets/js/components/nav-standalone/nav-standalone.component.min.js +80 -0
  158. package/assets/js/components/nav-standalone/nav-standalone.component.min.js.map +1 -0
  159. package/assets/js/components/notification/notification.component.min.js +2 -2
  160. package/assets/js/components/pagination/pagination.component.min.js +2 -2
  161. package/assets/js/components/password/password.component.min.js +1 -1
  162. package/assets/js/components/popover/popover.component.min.js +1 -1
  163. package/assets/js/components/rank/rank.component.min.js +1 -1
  164. package/assets/js/components/rankings/rankings.component.min.js +1 -1
  165. package/assets/js/components/rating/rating.component.min.js +1 -1
  166. package/assets/js/components/record-card/record-card.component.min.js +6 -6
  167. package/assets/js/components/search/search.component.min.js +3 -3
  168. package/assets/js/components/search/search.component.min.js.map +1 -1
  169. package/assets/js/components/skeleton/skeleton.component.min.js +1 -1
  170. package/assets/js/components/slider/slider.component.min.js +2 -2
  171. package/assets/js/components/split-button/split-button.component.min.js +4 -4
  172. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +6 -6
  173. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
  174. package/assets/js/components/std-nav/std-nav.component.js +32 -58
  175. package/assets/js/components/std-nav/std-nav.component.min.js +9 -54
  176. package/assets/js/components/std-nav/std-nav.component.min.js.map +1 -1
  177. package/assets/js/components/table/table.component.min.js +2 -2
  178. package/assets/js/components/table-ajax/table-ajax.component.min.js +2 -2
  179. package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
  180. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +2 -2
  181. package/assets/js/components/table-submit/table-submit.component.min.js +2 -2
  182. package/assets/js/components/tabs/tabs.component.min.js +2 -2
  183. package/assets/js/components/tag/tag.component.min.js +4 -4
  184. package/assets/js/components/tag/tag.component.min.js.map +1 -1
  185. package/assets/js/components/tooltip/tooltip.component.min.js +1 -1
  186. package/assets/js/components/video/video.component.min.js +2 -2
  187. package/assets/js/components/video-card/video-card.component.min.js +6 -6
  188. package/assets/js/components/video-modal/video-modal.component.min.js +5 -5
  189. package/assets/js/components/word-count/word-count.component.min.js +1 -1
  190. package/assets/js/modules/advanced-select.js +13 -5
  191. package/assets/js/modules/nav.js +183 -64
  192. package/assets/js/modules/nav.test.js +4 -1
  193. package/assets/js/scripts.bundle.js +1 -1
  194. package/assets/js/scripts.bundle.min.js +1 -1
  195. package/assets/sass/components/branch-selector.scss +112 -0
  196. package/assets/sass/components/card.module.scss +11 -1
  197. package/assets/sass/components/card.preload.scss +0 -15
  198. package/assets/sass/components/charts.config.scss +3 -3
  199. package/assets/sass/components/menu.component.scss +2 -1
  200. package/assets/sass/components/multiselect.scss +0 -1
  201. package/assets/sass/components/nav-standalone.component.scss +50 -0
  202. package/assets/sass/components/nav.component.scss +142 -116
  203. package/assets/sass/components/nav.global.scss +26 -198
  204. package/assets/sass/components/nav.preload.scss +1 -7
  205. package/assets/sass/elements/buttons--action.css +1 -1
  206. package/assets/sass/elements/buttons--compact.css +8 -4
  207. package/assets/sass/elements/buttons--global.css +3 -6
  208. package/assets/sass/elements/buttons--secondary.css +1 -1
  209. package/assets/sass/elements/buttons--tertiary.css +1 -1
  210. package/assets/sass/elements/dropdown.css +16 -2
  211. package/assets/sass/elements/links--global.scss +29 -3
  212. package/assets/sass/elements/popover.scss +1 -0
  213. package/assets/sass/elements/select.scss +1 -1
  214. package/assets/sass/elements/tooltips.scss +54 -0
  215. package/assets/sass/foundations/colours.scss +15 -0
  216. package/assets/sass/foundations/root.scss +4 -0
  217. package/assets/sass/templates/form.scss +26 -3
  218. package/assets/ts/components/address-lookup/address-lookup.component.ts +2 -1
  219. package/assets/ts/components/branch-selector/branch-selector.component.ts +93 -0
  220. package/assets/ts/components/modal/modal.component.ts +3 -0
  221. package/assets/ts/components/multiselect/multiselect.component.ts +20 -23
  222. package/assets/ts/components/nav/nav.component.ts +30 -285
  223. package/assets/ts/components/nav-standalone/nav-standalone.component.ts +69 -0
  224. package/assets/ts/components/std-nav/std-nav.component.ts +38 -81
  225. package/assets/ts/modules/advanced-select.ts +12 -11
  226. package/assets/ts/modules/nav.test.ts +4 -1
  227. package/assets/ts/modules/nav.ts +221 -78
  228. package/dist/components.es.js +2697 -1246
  229. package/dist/components.umd.js +503 -455
  230. package/package.json +5 -5
  231. package/src/components/BranchSelector/BranchSelector.vue +20 -0
  232. package/src/components/{STDNavStandalone/STDNavStandalone.vue → NavStandalone/NavStandalone.vue} +3 -3
  233. package/src/index.js +1 -0
  234. package/assets/css/components/nav.docs.css +0 -1
  235. package/assets/css/components/nav.docs.css.map +0 -1
  236. package/assets/css/components/std-nav-standalone.component.css +0 -1
  237. package/assets/css/components/std-nav-standalone.component.css.map +0 -1
  238. package/assets/js/components/std-nav-standalone/std-nav-standalone.component.js +0 -70
  239. package/assets/js/components/std-nav-standalone/std-nav-standalone.component.min.js +0 -20
  240. package/assets/js/components/std-nav-standalone/std-nav-standalone.component.min.js.map +0 -1
  241. package/assets/sass/components/nav.docs.scss +0 -54
  242. package/assets/sass/components/std-nav-standalone.component.scss +0 -229
  243. package/assets/ts/components/std-nav-standalone/std-nav-standalone.component.ts +0 -94
@@ -1,43 +1,59 @@
1
- const navbar = (element): void => {
2
- Array.from(element.querySelectorAll('details')).forEach((detail) => {
3
- detail.addEventListener(
4
- 'mouseenter',
5
- function () {
6
- if (window.matchMedia('(min-width: 62em)').matches) detail.setAttribute('open', 'true');
7
- },
8
- false
9
- );
10
-
11
- detail.addEventListener(
12
- 'mouseleave',
13
- function () {
14
- if (window.matchMedia('(min-width: 62em)').matches) detail.removeAttribute('open');
15
- },
16
- false
17
- );
18
- });
19
-
20
- if ('IntersectionObserver' in window) {
21
- const observer = new IntersectionObserver(([e]) => e.target.classList.toggle('is-stuck', e.intersectionRatio < 1), {
22
- threshold: [1],
23
- });
24
-
25
- observer.observe(element);
26
- }
27
- };
28
-
29
- export const populateNav = (data):void => {
1
+ export const navTemplate = /* HTML */`<div class="container">
2
+ <slot name="logo"></slot>
3
+
4
+ <div class="buttons-holder">
5
+ <button class="btn-menu" part="btn-menu-account" id="btn-menu-account">
6
+ <span class="btn btn-primary">
7
+ <span id="account-btn-title"></span>
8
+ <i class="fa-user fa-solid"></i>
9
+ <i class="fa-regular fa-xmark-large"></i>
10
+ </span>
11
+ </button>
12
+ <button class="btn-menu" part="btn-menu" id="btn-menu">
13
+ Menu
14
+ <i class="fa-regular fa-bars"></i>
15
+ <i class="fa-regular fa-xmark-large"></i>
16
+ </button>
17
+ </div>
18
+
19
+ <div class="menu__outer" part="menu__outer">
20
+ <div class="menu closed" part="menu">
21
+
22
+ <div class="menu__primary">
23
+ <slot></slot>
24
+ <slot name="dual"></slot>
25
+ </div>
26
+ <div class="dialog__wrapper d-none" id="search-wrapper"></div>
27
+
28
+ <slot name="actions"></slot>
29
+
30
+ <div class="menu__secondary bg-light">
31
+ <div class="container">
32
+
33
+ <slot name="secondary"></slot>
34
+ </div>
35
+ </div>
36
+ </div>
37
+ <div class="nav--menu" part="nav--menu">
38
+ <slot name="account"></slot>
39
+ </div>
40
+ </div>
41
+ </div>
42
+ <div class="backdrop" part="backdrop"></div>`;
43
+
44
+ // #region Standadised Nav
45
+ export const populateNav = (data, slot = ''):void => {
30
46
 
31
47
  let html = ``;
32
48
 
33
49
  data.forEach((feature) => {
34
50
 
35
51
  if(feature.attributes.sections.length)
36
- html += `<details name="megamenu"><summary>${feature.attributes.title}</summary><div data-title="${feature.attributes.title}">${populateSections(feature.attributes.sections)}</div></details>`;
52
+ html += `<details name="megamenu" ${slot != '' ? `slot="${slot}"` : ''}><summary>${feature.attributes.title}</summary><div data-title="${feature.attributes.title}">${populateSections(feature.attributes.sections)}</div></details>`;
37
53
  else if(feature.attributes.links)
38
- html += `<details name="megamenu"><summary>${feature.attributes.title}</summary><div data-title="${feature.attributes.title}">${populateLinks(feature.attributes.links)}</div></details>`;
39
- else
40
- html += `<a href="/">${feature.attributes.title}</a>`;
54
+ html += `<details name="megamenu" ${slot != '' ? `slot="${slot}"` : ''}><summary>${feature.attributes.title}</summary><div data-title="${feature.attributes.title}">${populateLinks(feature.attributes.links)}</div></details>`;
55
+ else
56
+ html += `<a href="/" ${slot != '' ? `slot="${slot}"` : ''}>${feature.attributes.title}</a>`;
41
57
  });
42
58
 
43
59
  return html;
@@ -51,7 +67,7 @@ export const populateSections = (data):void => {
51
67
 
52
68
  html += `<span class="section section--${section.layout}">
53
69
  ${section.title ? `<span class="lead section-title" data-product="${section.id}" data-title>${section.title}:</span>` : ''}
54
- ${section.description ? `<span class="lead section-desc" data-product="${section.id}"><i class="fa-solid fa-sparkles colour-warning"></i> ${section.description}</span>` : ''}
70
+ ${section.description ? `<span class="lead section-desc text-body" data-product="${section.id}"><i class="fa-solid fa-rocket colour-warning"></i> ${section.description}</span>` : ''}
55
71
  ${populateLinks(section.links)}
56
72
  </span>`;
57
73
  });
@@ -65,32 +81,19 @@ export const populateLinks = (data):void => {
65
81
  data.forEach((link) => {
66
82
 
67
83
 
68
- html += `<a href="${link.destinations.unlinked}" target="_blank" data-product="${link.productKey}" data-feature="${link.featureKey}" data-enabled="${link.destinations.linkedEnabled}" data-disabled="${link.destinations.linkedDisabled}">${link.title}</a>`;
84
+ html += `<a href="${link.destinations.unlinked}" title="Learn more about this features product" target="_blank" data-product="${link.productKey}" data-feature="${link.featureKey}" data-enabled="${link.destinations.linkedEnabled}" data-disabled="${link.destinations.linkedDisabled}">${link.title}</a>`;
69
85
 
70
86
  });
71
87
 
72
88
  return html;
73
89
  }
74
90
 
75
- export const loadNavData = async(Cookies): any => {
76
-
77
- const ajaxURL = 'https://dev.hub.iamproperty.group/data/ecosystem-switcher.json';
91
+ export const loadNavData = async(mode): any => {
78
92
 
79
- //const ajaxURL = '/nav.json';
80
-
81
- // Setup controller vars if not already set
82
- if (!window.controller) window.controller = [];
83
-
84
- // Abort if controller already present for this url
85
- if (window.controller[ajaxURL]) window.controller[ajaxURL].abort();
86
-
87
- // Create a new controller so it can be aborted if new fetch made
88
- window.controller[ajaxURL] = new AbortController();
89
- const { signal } = window.controller[ajaxURL];
93
+ const ajaxURL = mode != 'dev' ? 'https://hub.iamproperty.group/data/ecosystem-switcher.json' : 'https://dev.hub.iamproperty.group/data/ecosystem-switcher.json';
90
94
 
91
95
  try {
92
96
  const response = await fetch(ajaxURL, {
93
- signal,
94
97
  method: 'GET',
95
98
  headers: {
96
99
  Accept: 'application/json',
@@ -109,27 +112,28 @@ export const loadNavData = async(Cookies): any => {
109
112
  }
110
113
  }
111
114
 
112
- export const loadUserData = async(Cookies): any => {
113
-
114
- const ajaxURL = '/user.json';
115
-
116
- // Setup controller vars if not already set
117
- if (!window.controller) window.controller = [];
115
+ export const loadUserData = async(mode, subject, product): any => {
118
116
 
119
- // Abort if controller already present for this url
120
- if (window.controller[ajaxURL]) window.controller[ajaxURL].abort();
121
-
122
- // Create a new controller so it can be aborted if new fetch made
123
- window.controller[ajaxURL] = new AbortController();
124
- const { signal } = window.controller[ajaxURL];
117
+ const ajaxURL = mode != 'dev' ? 'https://api.sso.iamproperty.group/navigation/access-context' : 'https://api.dev.sso.iamproperty.group/navigation/access-context';
125
118
 
126
119
  try {
120
+
127
121
  const response = await fetch(ajaxURL, {
128
- signal,
129
- method: 'GET',
122
+ method: 'post',
130
123
  headers: {
131
- Accept: 'application/json',
124
+ Accept: 'application/vnd.api+json',
125
+ 'Content-Type': 'application/vnd.api+json'
132
126
  },
127
+ body: JSON.stringify({
128
+ "data": {
129
+ "type": "navigation-access-context-request",
130
+ "attributes": {
131
+ "subject": subject,
132
+ "requestingProduct": product,
133
+ "navigationSchemaVersion": "2026-04-16"
134
+ }
135
+ }
136
+ })
133
137
  });
134
138
 
135
139
  const json = await response.json();
@@ -146,23 +150,162 @@ export const loadUserData = async(Cookies): any => {
146
150
 
147
151
  export const setEnabledLinks = (component,data):void => {
148
152
 
149
- const selector = `[data-product][data-feature]`;
150
- const elements = component
151
- ? [
152
- ...component.querySelectorAll(selector),
153
- ...(component.shadowRoot ? component.shadowRoot.querySelectorAll(selector) : []),
154
- ]
155
- : document.querySelectorAll(`iam-nav ${selector}`);
153
+ const elements = component.querySelectorAll('[data-product][data-feature]');
156
154
 
157
155
  elements.forEach((element) => {
158
- const isEnabled = data.attributes.products[element.getAttribute('data-product')].features[element.getAttribute('data-feature')];
159
- element.setAttribute('data-is-enabled',isEnabled);
160
- if(isEnabled && element.getAttribute('data-enabled')){
161
- element.setAttribute('href',element.getAttribute('data-enabled'));
162
- element.removeAttribute('target');
156
+
157
+ if(data.attributes.features[element.getAttribute('data-product')]){
158
+
159
+ const isEnabled = data.attributes.features[element.getAttribute('data-product')].includes(element.getAttribute('data-feature'));
160
+
161
+ element.setAttribute('data-is-enabled',isEnabled);
162
+ if(isEnabled && element.getAttribute('data-enabled')){
163
+ element.setAttribute('href',element.getAttribute('data-enabled'));
164
+ element.removeAttribute('target');
165
+ element.removeAttribute('title');
166
+ }
167
+
168
+ }
169
+ });
170
+
171
+ }
172
+ // #endregion
173
+
174
+ export const branchSelector = (component):void => {
175
+ const branchSelector = component.querySelector("iam-branch-selector");
176
+ const mql = window.matchMedia("(width > 62em)");
177
+
178
+ if (mql.matches)
179
+ branchSelector?.setAttribute('slot','secondary');
180
+
181
+ mql.addEventListener("change", (e) => {
182
+
183
+ if (e.matches && component.classList.contains('has-secondary'))
184
+ branchSelector?.setAttribute('slot','secondary');
185
+ else
186
+ branchSelector?.setAttribute('slot','account');
187
+ });
188
+ }
189
+
190
+ export const menuEvents = (component,menu,menuButton,accountMenu,accountMenuButton):void => {
191
+
192
+ menuButton.addEventListener ('click', (e) => {
193
+ e.preventDefault();
194
+
195
+ menu.classList.toggle('open');
196
+ accountMenu.classList.remove('open');
197
+
198
+
199
+ if (menu.classList.contains('open')) {
200
+ component.classList.add('open');
201
+ } else {
202
+ component.classList.remove('open');
163
203
  }
204
+
205
+ accountMenuButton?.querySelector('.btn-primary').classList.remove('active');
206
+ accountMenuButton?.removeAttribute('aria-expanded');
207
+
208
+ component.querySelector(':scope > details[open]')?.removeAttribute('open');
209
+
210
+ }, false);
211
+ }
212
+
213
+ export const megaMenuTitles = (component):void => {
214
+
215
+ // Mega menu title
216
+ component.querySelectorAll('details').forEach((detailsElement) => {
217
+ const summary = detailsElement.querySelector('summary');
218
+ const containerDiv = detailsElement.querySelector(':Scope > div');
219
+
220
+ if(containerDiv)
221
+ containerDiv.setAttribute('data-title', summary.textContent);
164
222
  });
223
+ }
224
+
225
+ export const megaMenusEvents = (component,menu,menuButton,accountMenu,accountMenuButton,backdrop):void => {
226
+
227
+ component.addEventListener('click', (event) => {
228
+ if (event && event.target instanceof HTMLElement && event.target.closest('summary')) {
229
+
230
+ const summary = event.target.closest('summary');
231
+ const details = summary.closest('details');
232
+
233
+ if (window.innerWidth > 992 && !event.target.closest('.nav--menu')) {
234
+
235
+
236
+ if (details?.hasAttribute('open')) { // Is open before the user clicks on the details summary
237
+
238
+ backdrop.classList.remove('show');
239
+ component.classList.remove('open');
240
+ component.classList.remove('open-secondary');
241
+ } else {
242
+ backdrop.classList.add('show');
243
+ component.classList.add('open');
244
+
245
+ if(details?.hasAttribute('slot') && details?.getAttribute('slot') == "secondary")
246
+ component.classList.add('open-secondary');
247
+
248
+ // Open the first details element if one isn't open
249
+ if(!details.querySelector('details[open]') && details.querySelector('details'))
250
+ details.querySelector('details').setAttribute('open', true);
251
+ }
252
+
253
+ // Close all other siblings of details
254
+ details?.parentNode.querySelectorAll(':scope > details').forEach(element => {
165
255
 
256
+ if(element != details)
257
+ element.removeAttribute('open');
258
+ });
259
+
260
+
261
+ menu.classList.remove('open');
262
+ accountMenu.classList.remove('open');
263
+ accountMenuButton?.querySelector('.btn-primary').classList.remove('active');
264
+ menuButton?.removeAttribute('aria-expanded');
265
+ accountMenuButton?.removeAttribute('aria-expanded');
266
+ }
267
+ }
268
+ });
269
+ }
270
+
271
+ export const accountMenuEvents = (component,menu,menuButton,accountMenu,accountMenuButton,backdrop):void => {
272
+
273
+ accountMenuButton.addEventListener ('click', () => {
274
+
275
+ // Close the main menu
276
+ menu.classList.remove('open');
277
+ accountMenu.classList.toggle('open');
278
+
279
+ if (accountMenu.classList.contains('open')) {
280
+ component.classList.add('open');
281
+ accountMenuButton?.querySelector('.btn-primary').classList.add('active');
282
+ accountMenuButton?.setAttribute('aria-expanded', true);
283
+ } else {
284
+ component.classList.remove('open');
285
+ accountMenuButton?.querySelector('.btn-primary').classList.remove('active');
286
+ accountMenuButton?.removeAttribute('aria-expanded');
287
+ }
288
+
289
+ component.querySelector(':scope > details[open]')?.removeAttribute('open');
290
+ menuButton?.removeAttribute('aria-expanded');
291
+ });
166
292
  }
167
293
 
168
- export default navbar;
294
+ export const backdropEvents = (component,menu,menuButton,accountMenu,accountMenuButton,backdrop):void => {
295
+
296
+ // Close the menu on the click of the backdrop on desktop
297
+ backdrop.addEventListener('click', () => {
298
+ const openMenu = component.querySelector(':scope > details[open]');
299
+
300
+ if (openMenu) openMenu.removeAttribute('open');
301
+
302
+ component.classList.remove('open');
303
+ menu.classList.remove('open');
304
+ menuButton?.removeAttribute('aria-expanded');
305
+ accountMenu.classList.remove('open');
306
+ accountMenuButton?.querySelector('.btn-primary').classList.remove('active');
307
+ accountMenuButton?.removeAttribute('aria-expanded');
308
+
309
+ backdrop.classList.remove('show');
310
+ });
311
+ }