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

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 (85) hide show
  1. package/assets/css/core.min.css +1 -1
  2. package/assets/css/core.min.css.map +1 -1
  3. package/assets/css/style.min.css +1 -1
  4. package/assets/css/style.min.css.map +1 -1
  5. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  6. package/assets/js/components/actionbar/actionbar.component.min.js +1 -1
  7. package/assets/js/components/address-lookup/address-lookup.component.min.js +2 -2
  8. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  9. package/assets/js/components/advanced-select/advanced-select.component.min.js +1 -1
  10. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  11. package/assets/js/components/banner/banner.component.min.js +1 -1
  12. package/assets/js/components/barchart/barchart.component.min.js +1 -1
  13. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  14. package/assets/js/components/bone/bone.component.min.js +1 -1
  15. package/assets/js/components/button/button.component.min.js +1 -1
  16. package/assets/js/components/calendar/calendar.component.min.js +1 -1
  17. package/assets/js/components/card/card.component.min.js +1 -1
  18. package/assets/js/components/carousel/carousel.component.min.js +1 -1
  19. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
  20. package/assets/js/components/config/config.component.min.js +2 -2
  21. package/assets/js/components/config/config.component.min.js.map +1 -1
  22. package/assets/js/components/content/content.component.min.js +1 -1
  23. package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
  24. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +1 -1
  25. package/assets/js/components/fileupload/fileupload.component.min.js +1 -1
  26. package/assets/js/components/filter-card/filter-card.component.min.js +1 -1
  27. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  28. package/assets/js/components/form/form.component.min.js +1 -1
  29. package/assets/js/components/header/header.component.min.js +1 -1
  30. package/assets/js/components/inline-edit/inline-edit.component.min.js +2 -2
  31. package/assets/js/components/inline-edit/inline-edit.component.min.js.map +1 -1
  32. package/assets/js/components/input/input.component.min.js +1 -1
  33. package/assets/js/components/input-range/input-range.component.min.js +1 -1
  34. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  35. package/assets/js/components/menu/menu.component.min.js +1 -1
  36. package/assets/js/components/milestone/milestone.component.min.js +1 -1
  37. package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
  38. package/assets/js/components/modal/modal.component.min.js +1 -1
  39. package/assets/js/components/multi-step/multi-step.component.min.js +2 -2
  40. package/assets/js/components/multi-step/multi-step.component.min.js.map +1 -1
  41. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +2 -2
  42. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js.map +1 -1
  43. package/assets/js/components/multiselect/multiselect.component.min.js +2 -2
  44. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
  45. package/assets/js/components/nav/nav.component.js +1 -1
  46. package/assets/js/components/nav/nav.component.min.js +2 -2
  47. package/assets/js/components/nav/nav.component.min.js.map +1 -1
  48. package/assets/js/components/notification/notification.component.min.js +1 -1
  49. package/assets/js/components/pagination/pagination.component.min.js +1 -1
  50. package/assets/js/components/password/password.component.min.js +1 -1
  51. package/assets/js/components/popover/popover.component.min.js +1 -1
  52. package/assets/js/components/rank/rank.component.min.js +1 -1
  53. package/assets/js/components/rankings/rankings.component.min.js +1 -1
  54. package/assets/js/components/rating/rating.component.min.js +1 -1
  55. package/assets/js/components/record-card/record-card.component.min.js +1 -1
  56. package/assets/js/components/search/search.component.min.js +2 -2
  57. package/assets/js/components/search/search.component.min.js.map +1 -1
  58. package/assets/js/components/skeleton/skeleton.component.min.js +1 -1
  59. package/assets/js/components/slider/slider.component.min.js +1 -1
  60. package/assets/js/components/split-button/split-button.component.min.js +1 -1
  61. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +3 -3
  62. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
  63. package/assets/js/components/std-nav/std-nav.component.min.js +2 -2
  64. package/assets/js/components/std-nav/std-nav.component.min.js.map +1 -1
  65. package/assets/js/components/std-nav-standalone/std-nav-standalone.component.min.js +1 -1
  66. package/assets/js/components/table/table.component.min.js +1 -1
  67. package/assets/js/components/table-ajax/table-ajax.component.min.js +1 -1
  68. package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
  69. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
  70. package/assets/js/components/table-submit/table-submit.component.min.js +1 -1
  71. package/assets/js/components/tabs/tabs.component.min.js +1 -1
  72. package/assets/js/components/tag/tag.component.min.js +2 -2
  73. package/assets/js/components/tag/tag.component.min.js.map +1 -1
  74. package/assets/js/components/tooltip/tooltip.component.min.js +1 -1
  75. package/assets/js/components/video/video.component.min.js +1 -1
  76. package/assets/js/components/video-card/video-card.component.min.js +1 -1
  77. package/assets/js/components/video-modal/video-modal.component.min.js +1 -1
  78. package/assets/js/components/word-count/word-count.component.min.js +1 -1
  79. package/assets/js/scripts.bundle.js +1 -1
  80. package/assets/js/scripts.bundle.min.js +1 -1
  81. package/assets/sass/foundations/colours.scss +15 -0
  82. package/assets/ts/components/nav/nav.component.ts +1 -1
  83. package/dist/components.es.js +2662 -1246
  84. package/dist/components.umd.js +363 -363
  85. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"nav.component.min.js","sources":["nav.component.js"],"sourcesContent":["// 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')\n ? document.body.getAttribute('data-assets-location')\n : '/assets';\n const loadCSS = `@import \"${assetLocation}/css/components/nav.component.css\";`;\n const loadExtraCSS = `@import \"${assetLocation}/css/components/nav.global.css\";`;\n const template = document.createElement('template');\n template.innerHTML = `\n <style class=\"styles\">\n\n ${loadCSS}\n </style>\n <style class=\"doc-styles\">\n </style>\n <link rel=\"stylesheet\" href=\"https://kit.fontawesome.com/8bd0fca975.css\" crossorigin=\"anonymous\">\n <div class=\"container\">\n <slot name=\"logo\"></slot>\n <div class=\"buttons-holder\"></div>\n <button class=\"btn-menu\" part=\"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 bg-light\">\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=\"backdrop\" part=\"backdrop\"></div>\n `;\n shadowRoot.appendChild(template.content.cloneNode(true));\n // insert extra CSS\n if (!document.getElementById('navGlobal'))\n document.head.insertAdjacentHTML('beforeend', `<style id=\"navGlobal\">${loadExtraCSS}</style>`);\n }\n connectedCallback() {\n // Load external CSS if needed\n if (this.hasAttribute('data-css'))\n this.shadowRoot\n .querySelector('.doc-styles')\n .insertAdjacentHTML('beforeend', `@import \"${this.getAttribute('data-css')}\";`);\n const menuButton = this.shadowRoot.querySelector('.btn-menu');\n const menu = this.shadowRoot.querySelector('.menu');\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const iamNav = this;\n const backdrop = this.shadowRoot.querySelector('.backdrop');\n const buttonsHolder = this.shadowRoot.querySelector('.buttons-holder');\n // Check the content\n const createNavMenu = (component) => {\n buttonsHolder === null || buttonsHolder === void 0 ? void 0 : buttonsHolder.innerHTML = '';\n component.querySelectorAll(':scope > *').forEach(function (element) {\n const tagname = element.tagName;\n switch (tagname) {\n case 'BUTTON':\n if (!element.hasAttribute('slot')) {\n element.setAttribute('slot', 'actions');\n menu.classList.add('has-actions');\n }\n break;\n }\n // Create menu button\n if (element.classList.contains('nav--menu') &&\n element.hasAttribute('data-title') &&\n 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.setAttribute('part', '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.setAttribute('aria-expanded', true);\n mdButton.classList.toggle('active');\n component.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.toggleAttribute('aria-expanded');\n console.log(element);\n element.classList.toggle('open');\n mdButton.classList.toggle('active');\n // Close desktop menus\n const openMenu = component.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.removeAttribute('aria-expanded');\n setTimeout(function () {\n menu.classList.add('closed');\n }, 1000); // Delay until its close so the animation is broken\n component.classList.add('open');\n backdrop.classList.add('show');\n element.classList.remove('closed');\n }\n else {\n component.classList.remove('open');\n backdrop.classList.remove('show');\n setTimeout(function () {\n element.classList.add('closed');\n }, 1000);\n }\n // Close any open menus\n component.querySelectorAll('.nav--menu.open').forEach(function (openmenu) {\n if (openmenu != element) {\n openmenu.classList.remove('open');\n }\n });\n component.shadowRoot\n .querySelectorAll('.buttons-holder .btn-menu[aria-expanded]')\n .forEach(function (selectedButton) {\n if (selectedButton != button) {\n selectedButton.removeAttribute('aria-expanded');\n const innerBtn = selectedButton.querySelector('.btn-primary');\n innerBtn.classList.remove('active');\n }\n });\n }, false);\n }\n });\n component.querySelectorAll('details').forEach(function (element) {\n element.classList.add('details--revert');\n });\n };\n createNavMenu(this);\n this.addEventListener('rebuilt', () => {\n console.log('rebuilt nav');\n createNavMenu(this);\n });\n // Has secondary link\n if (this.querySelector('[slot=\"secondary\"]')) {\n menu.classList.add('has-secondary');\n }\n // Open and close the menu\n menuButton.addEventListener('click', function (e) {\n e.preventDefault();\n //menuButton.toggleAttribute('aria-expanded');\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 () {\n element.classList.add('closed');\n }, 1000);\n });\n iamNav.shadowRoot.querySelectorAll('.buttons-holder .btn-menu[aria-expanded]').forEach(function (element) {\n element.removeAttribute('aria-expanded');\n const 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 () {\n menu.classList.add('closed');\n }, 1000);\n }\n }, false);\n // Allow outside JS to close the menu\n this.addEventListener('request-close', () => {\n menuButton.removeAttribute('aria-expanded');\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', () => {\n const openMenu = this.querySelector('details[open] summary');\n if (openMenu)\n openMenu.click();\n iamNav.classList.toggle('open');\n iamNav.querySelectorAll('.nav--menu.open').forEach(function (element) {\n element.classList.remove('open');\n });\n iamNav.shadowRoot.querySelectorAll('.buttons-holder .btn-menu[aria-expanded]').forEach(function (element) {\n element.removeAttribute('aria-expanded');\n const 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 && !event.target.closest('.nav--menu')) {\n const summary = event.target.closest('summary');\n const details = summary.closest('details');\n const 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 () {\n menu.classList.add('closed');\n }, 1000);\n });\n iamNav.shadowRoot.querySelectorAll('.buttons-holder .btn-menu[aria-expanded]').forEach(function (element) {\n element.removeAttribute('aria-expanded');\n const 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) => {\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 if (this.querySelectorAll(':scope > details[open][slot=\"secondary\"]').length)\n iamNav.classList.add('open-secondary');\n }\n else {\n backdrop.classList.remove('show');\n iamNav.classList.remove('open');\n iamNav.classList.remove('open-secondary');\n }\n event.preventDefault();\n }\n }\n });\n // Mega menu title\n this.querySelectorAll('details').forEach((detailsElement) => {\n const summary = detailsElement.querySelector('summary');\n const containerDiv = detailsElement.querySelector(':Scope > div');\n containerDiv.setAttribute('data-title', summary.textContent);\n });\n // Search\n if (this.querySelector('[slot=\"search\"]')) {\n menu.classList.add('has-search');\n const 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\" aria-controls=\"search-dialog\">Open Search field</button>\n <dialog id=\"search-dialog\">\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col mb-0 ms-auto col-md-7\">\n <slot name=\"search\"></slot>\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\">Close search field</button>\n </div>\n </div>\n </div>\n </dialog>`);\n const searchButton = this.shadowRoot.querySelector('#search-button');\n const searchClose = this.shadowRoot.querySelector('#search-close');\n const searchDialog = this.shadowRoot.querySelector('#search-dialog');\n if (this.hasAttribute('data-search-open')) {\n searchDialog.setAttribute('open', 'open');\n this.classList.add('search-open');\n searchButton.setAttribute('aria-expanded', true);\n }\n searchButton.addEventListener('click', () => {\n searchDialog.setAttribute('open', 'open');\n this.classList.add('search-open');\n searchButton.setAttribute('aria-expanded', true);\n });\n searchClose.addEventListener('click', () => {\n searchDialog.removeAttribute('open');\n this.classList.remove('search-open');\n searchButton.removeAttribute('aria-expanded');\n });\n }\n if (this.classList.contains('nav--sticky')) {\n let oldScrollY = window.scrollY;\n window.onscroll = function (e) {\n if (oldScrollY < window.scrollY) {\n document.body.setAttribute('data-direction', 'down');\n }\n else {\n document.body.setAttribute('data-direction', 'up');\n }\n if (window.scrollY > 100) {\n document.body.classList.add('past100');\n }\n else {\n document.body.classList.remove('past100');\n }\n oldScrollY = window.scrollY;\n };\n }\n }\n}\nexport default iamNav;\n"],"names":["iamNav","shadowRoot","template","menuButton","menu","backdrop","buttonsHolder","createNavMenu","component","element","title","iconClass","button","mdButton","e","openMenu","openmenu","selectedButton","event","details","wrapper","detailsArrayElement","detailsElement","summary","searchWrapper","searchButton","searchClose","searchDialog","oldScrollY"],"mappings":"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"}
1
+ {"version":3,"file":"nav.component.min.js","sources":["nav.component.js"],"sourcesContent":["// 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')\n ? document.body.getAttribute('data-assets-location')\n : '/assets';\n const loadCSS = `@import \"${assetLocation}/css/components/nav.component.css\";`;\n const loadExtraCSS = `@import \"${assetLocation}/css/components/nav.global.css\";`;\n const template = document.createElement('template');\n template.innerHTML = `\n <style class=\"styles\">\n\n ${loadCSS}\n </style>\n <style class=\"doc-styles\">\n </style>\n <link rel=\"stylesheet\" href=\"https://kit.fontawesome.com/8bd0fca975.css\" crossorigin=\"anonymous\">\n <div class=\"container\">\n <slot name=\"logo\"></slot>\n <div class=\"buttons-holder\"></div>\n <button class=\"btn-menu\" part=\"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 bg-light\">\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=\"backdrop\" part=\"backdrop\"></div>\n `;\n shadowRoot.appendChild(template.content.cloneNode(true));\n // insert extra CSS\n if (!document.getElementById('navGlobal'))\n document.head.insertAdjacentHTML('beforeend', `<style id=\"navGlobal\">${loadExtraCSS}</style>`);\n }\n connectedCallback() {\n // Load external CSS if needed\n if (this.hasAttribute('data-css'))\n this.shadowRoot\n .querySelector('.doc-styles')\n .insertAdjacentHTML('beforeend', `@import \"${this.getAttribute('data-css')}\";`);\n const menuButton = this.shadowRoot.querySelector('.btn-menu');\n const menu = this.shadowRoot.querySelector('.menu');\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const iamNav = this;\n const backdrop = this.shadowRoot.querySelector('.backdrop');\n const buttonsHolder = this.shadowRoot.querySelector('.buttons-holder');\n // Check the content\n const createNavMenu = (component) => {\n buttonsHolder.innerHTML = '';\n component.querySelectorAll(':scope > *').forEach(function (element) {\n const tagname = element.tagName;\n switch (tagname) {\n case 'BUTTON':\n if (!element.hasAttribute('slot')) {\n element.setAttribute('slot', 'actions');\n menu.classList.add('has-actions');\n }\n break;\n }\n // Create menu button\n if (element.classList.contains('nav--menu') &&\n element.hasAttribute('data-title') &&\n 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.setAttribute('part', '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.setAttribute('aria-expanded', true);\n mdButton.classList.toggle('active');\n component.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.toggleAttribute('aria-expanded');\n console.log(element);\n element.classList.toggle('open');\n mdButton.classList.toggle('active');\n // Close desktop menus\n const openMenu = component.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.removeAttribute('aria-expanded');\n setTimeout(function () {\n menu.classList.add('closed');\n }, 1000); // Delay until its close so the animation is broken\n component.classList.add('open');\n backdrop.classList.add('show');\n element.classList.remove('closed');\n }\n else {\n component.classList.remove('open');\n backdrop.classList.remove('show');\n setTimeout(function () {\n element.classList.add('closed');\n }, 1000);\n }\n // Close any open menus\n component.querySelectorAll('.nav--menu.open').forEach(function (openmenu) {\n if (openmenu != element) {\n openmenu.classList.remove('open');\n }\n });\n component.shadowRoot\n .querySelectorAll('.buttons-holder .btn-menu[aria-expanded]')\n .forEach(function (selectedButton) {\n if (selectedButton != button) {\n selectedButton.removeAttribute('aria-expanded');\n const innerBtn = selectedButton.querySelector('.btn-primary');\n innerBtn.classList.remove('active');\n }\n });\n }, false);\n }\n });\n component.querySelectorAll('details').forEach(function (element) {\n element.classList.add('details--revert');\n });\n };\n createNavMenu(this);\n this.addEventListener('rebuilt', () => {\n console.log('rebuilt nav');\n createNavMenu(this);\n });\n // Has secondary link\n if (this.querySelector('[slot=\"secondary\"]')) {\n menu.classList.add('has-secondary');\n }\n // Open and close the menu\n menuButton.addEventListener('click', function (e) {\n e.preventDefault();\n //menuButton.toggleAttribute('aria-expanded');\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 () {\n element.classList.add('closed');\n }, 1000);\n });\n iamNav.shadowRoot.querySelectorAll('.buttons-holder .btn-menu[aria-expanded]').forEach(function (element) {\n element.removeAttribute('aria-expanded');\n const 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 () {\n menu.classList.add('closed');\n }, 1000);\n }\n }, false);\n // Allow outside JS to close the menu\n this.addEventListener('request-close', () => {\n menuButton.removeAttribute('aria-expanded');\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', () => {\n const openMenu = this.querySelector('details[open] summary');\n if (openMenu)\n openMenu.click();\n iamNav.classList.toggle('open');\n iamNav.querySelectorAll('.nav--menu.open').forEach(function (element) {\n element.classList.remove('open');\n });\n iamNav.shadowRoot.querySelectorAll('.buttons-holder .btn-menu[aria-expanded]').forEach(function (element) {\n element.removeAttribute('aria-expanded');\n const 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 && !event.target.closest('.nav--menu')) {\n const summary = event.target.closest('summary');\n const details = summary.closest('details');\n const 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 () {\n menu.classList.add('closed');\n }, 1000);\n });\n iamNav.shadowRoot.querySelectorAll('.buttons-holder .btn-menu[aria-expanded]').forEach(function (element) {\n element.removeAttribute('aria-expanded');\n const 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) => {\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 if (this.querySelectorAll(':scope > details[open][slot=\"secondary\"]').length)\n iamNav.classList.add('open-secondary');\n }\n else {\n backdrop.classList.remove('show');\n iamNav.classList.remove('open');\n iamNav.classList.remove('open-secondary');\n }\n event.preventDefault();\n }\n }\n });\n // Mega menu title\n this.querySelectorAll('details').forEach((detailsElement) => {\n const summary = detailsElement.querySelector('summary');\n const containerDiv = detailsElement.querySelector(':Scope > div');\n containerDiv.setAttribute('data-title', summary.textContent);\n });\n // Search\n if (this.querySelector('[slot=\"search\"]')) {\n menu.classList.add('has-search');\n const 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\" aria-controls=\"search-dialog\">Open Search field</button>\n <dialog id=\"search-dialog\">\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col mb-0 ms-auto col-md-7\">\n <slot name=\"search\"></slot>\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\">Close search field</button>\n </div>\n </div>\n </div>\n </dialog>`);\n const searchButton = this.shadowRoot.querySelector('#search-button');\n const searchClose = this.shadowRoot.querySelector('#search-close');\n const searchDialog = this.shadowRoot.querySelector('#search-dialog');\n if (this.hasAttribute('data-search-open')) {\n searchDialog.setAttribute('open', 'open');\n this.classList.add('search-open');\n searchButton.setAttribute('aria-expanded', true);\n }\n searchButton.addEventListener('click', () => {\n searchDialog.setAttribute('open', 'open');\n this.classList.add('search-open');\n searchButton.setAttribute('aria-expanded', true);\n });\n searchClose.addEventListener('click', () => {\n searchDialog.removeAttribute('open');\n this.classList.remove('search-open');\n searchButton.removeAttribute('aria-expanded');\n });\n }\n if (this.classList.contains('nav--sticky')) {\n let oldScrollY = window.scrollY;\n window.onscroll = function (e) {\n if (oldScrollY < window.scrollY) {\n document.body.setAttribute('data-direction', 'down');\n }\n else {\n document.body.setAttribute('data-direction', 'up');\n }\n if (window.scrollY > 100) {\n document.body.classList.add('past100');\n }\n else {\n document.body.classList.remove('past100');\n }\n oldScrollY = window.scrollY;\n };\n }\n }\n}\nexport default iamNav;\n"],"names":["iamNav","shadowRoot","template","menuButton","menu","backdrop","buttonsHolder","createNavMenu","component","element","title","iconClass","button","mdButton","e","openMenu","openmenu","selectedButton","event","details","wrapper","detailsArrayElement","detailsElement","summary","searchWrapper","searchButton","searchClose","searchDialog","oldScrollY"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v7.8.2--beta5
2
+ * iamKey v7.8.2--beta6
3
3
  * Copyright 2022-2026 iamproperty
4
4
  */function l(e){if(e.hasAttribute("data-type")&&e.getAttribute("data-type")=="toast"){let i=document.querySelector(".notification__holder");i||(i=document.createElement("div"),i.classList.add("notification__holder"),i.classList.add("container"),document.querySelector("body").appendChild(i)),e.closest(".notification__holder")||i.appendChild(e)}if(e.setAttribute("role","alert"),e.addEventListener("click",function(i){event&&event.target instanceof HTMLElement&&(event.target.closest("[data-dismiss-button]")||event.target.matches("[data-dismiss-button]"))&&(i.preventDefault(),c(e))},!1),e.hasAttribute("data-timeout")){const i=e.getAttribute("data-timeout"),t=new m(function(){c(e)},i);e.addEventListener("mouseenter",()=>{t.pause()}),e.addEventListener("mouseleave",()=>{t.resume()})}}function m(e,i){let t,o,n=i;this.pause=function(){window.clearTimeout(t),n-=new Date-o},this.resume=function(){o=new Date,window.clearTimeout(t),t=window.setTimeout(e,n)},this.resume()}const c=function(e){e.classList.add("d-none")},f=e=>{window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:e})},b=(e,i,t)=>(window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementAdded",element:i}),t.forEach(o=>{e.addEventListener(o,function(n){const a={event:o,element:i,target:n.target};Object.keys(n.detail).forEach(r=>{const s=n.detail[r];a[r]=s}),window.dataLayer.push(a)})}),!0);f("iam-notification");class h extends HTMLElement{constructor(){super(),this.addColour=(t,o)=>{t.hasAttribute("data-type")?t.classList.add(`bg-${o}`):t.classList.add(`colour-${o}`)},this.addIcon=(t,o)=>{switch(o){case"danger":t.insertAdjacentHTML("beforeend",'<i class="fa-solid fa-circle-exclamation" aria-hidden="true" slot="icon"></i>');break;case"warning":t.insertAdjacentHTML("beforeend",'<i class="fa-solid fa-triangle-exclamation" aria-hidden="true" slot="icon"></i>');break;case"success":t.insertAdjacentHTML("beforeend",'<i class="fa-solid fa-check-circle" aria-hidden="true" slot="icon"></i>');break;default:t.insertAdjacentHTML("beforeend",'<i class="fa-solid fa-circle-info" aria-hidden="true" slot="icon"></i>')}},this.addDismissBtn=t=>{var o;(o=t.shadowRoot.querySelector(".notification__dismiss"))===null||o===void 0||(o.innerHTML='<button data-dismiss-button part="dismiss-btn" class="btn btn-secondary btn-compact fa-xmark">Dismiss</button>'),t.shadowRoot.querySelector(".notification__dismiss [data-dismiss-button]").addEventListener("click",function(){c(t);const n=new CustomEvent("dismiss",{detail:{class:t.classList}});t.dispatchEvent(n)},!1)},this.attachShadow({mode:"open"}),document.body.hasAttribute("data-assets-location")&&document.body.getAttribute("data-assets-location");const i=document.createElement("template");i.innerHTML=`
5
5
  <style>
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v7.8.2--beta5
2
+ * iamKey v7.8.2--beta6
3
3
  * Copyright 2022-2026 iamproperty
4
4
  */class v extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),document.body.hasAttribute("data-assets-location")&&document.body.getAttribute("data-assets-location");const a=document.createElement("template");a.innerHTML=`
5
5
  <style>
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v7.8.2--beta5
2
+ * iamKey v7.8.2--beta6
3
3
  * Copyright 2022-2026 iamproperty
4
4
  */const u=c=>{window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:c})};function m(c){var r=new TextEncoder("utf-8").encode(c);return crypto.subtle.digest("SHA-1",r).then(function(e){for(var i=[],a=new DataView(e),o=0;o<a.byteLength;o+=4){var s=a.getUint32(o),n=s.toString(16),t="00000000",p=(t+n).slice(-t.length);i.push(p)}return i.join("")})}const b=(c,r)=>{m(c).then(function(e){const i=new XMLHttpRequest;i.addEventListener("load",function(){const a=this.responseText.split(`
5
5
  `),o=e.slice(5).toUpperCase();var s=!1;for(let t in a)if(a[t].substring(0,35)==o){s=!0;break}const n=new CustomEvent("hibpCheck",{detail:s});r.dispatchEvent(n)}),i.open("GET","https://api.pwnedpasswords.com/range/"+e.substr(0,5)),i.send()})};u("iam-password");class x extends HTMLElement{constructor(){var r;super(),this.attachShadow({mode:"open"}),document.body.hasAttribute("data-assets-location")&&document.body.getAttribute("data-assets-location");const e=document.createElement("template");e.innerHTML=`
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v7.8.2--beta5
2
+ * iamKey v7.8.2--beta6
3
3
  * Copyright 2022-2026 iamproperty
4
4
  */const i=o=>{window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:o})};i("iam-popover");class a extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),document.body.hasAttribute("data-assets-location")&&document.body.getAttribute("data-assets-location");const e=document.createElement("template");e.innerHTML=`
5
5
  <style>
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v7.8.2--beta5
2
+ * iamKey v7.8.2--beta6
3
3
  * Copyright 2022-2026 iamproperty
4
4
  */const i=o=>{window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:o})};i("iam-rank");class a extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"});const C=`@import "${document.body.hasAttribute("data-assets-location")?document.body.getAttribute("data-assets-location"):"/assets"}/css/components/rank.component.css";`,l=document.createElement("template");l.innerHTML=`
5
5
  <style>
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v7.8.2--beta5
2
+ * iamKey v7.8.2--beta6
3
3
  * Copyright 2022-2026 iamproperty
4
4
  */const L=e=>{window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:e})};L("iam-rank");class g extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"});const i=`@import "${document.body.hasAttribute("data-assets-location")?document.body.getAttribute("data-assets-location"):"/assets"}/css/components/rank.component.css";`,o=document.createElement("template");o.innerHTML=`
5
5
  <style>
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v7.8.2--beta5
2
+ * iamKey v7.8.2--beta6
3
3
  * Copyright 2022-2026 iamproperty
4
4
  */const p=n=>{window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:n})};p("iam-rating");class l extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),document.body.hasAttribute("data-assets-location")&&document.body.getAttribute("data-assets-location");const a=document.createElement("template");a.innerHTML=`
5
5
  <style>
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v7.8.2--beta5
2
+ * iamKey v7.8.2--beta6
3
3
  * Copyright 2022-2026 iamproperty
4
4
  */const p=o=>{window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:o})},g=(o,r,t)=>(window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementAdded",element:r}),t.forEach(a=>{o.addEventListener(a,function(e){const d={event:a,element:r,target:e.target};Object.keys(e.detail).forEach(i=>{const c=e.detail[i];d[i]=c}),window.dataLayer.push(d)})}),!0),u=`<div class="wrapper">
5
5
  <div class="card__head" part="head">
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v7.8.2--beta5
2
+ * iamKey v7.8.2--beta6
3
3
  * Copyright 2022-2026 iamproperty
4
4
  */const y=(e,r,i)=>r.split(/[\.\[\]\'\"]/).filter(t=>t).reduce((t,d)=>t?t[d]:i,e),_=e=>Array.isArray(e)||e!==null&&["function","object"].includes(typeof e);var S=function(e,r,i,t){function d(n){return n instanceof i?n:new i(function(s){s(n)})}return new(i||(i=Promise))(function(n,s){function p(l){try{a(t.next(l))}catch(c){s(c)}}function o(l){try{a(t.throw(l))}catch(c){s(c)}}function a(l){l.done?n(l.value):d(l.value).then(p,o)}a((t=t.apply(e,r||[])).next())})};const w=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),f=(e,r)=>w(e)?e[r]:void 0,j=e=>String(e??"").replace(`
5
5
  `,", "),z=(e,r,i,t,d="")=>{var n,s,p,o,a,l,c;const h=y(r,i,void 0),u=y(r,t,void 0),m=_(r)?"":r,b=(a=(o=(p=(s=(n=h??f(r,"value"))!==null&&n!==void 0?n:f(r,"id"))!==null&&s!==void 0?s:u)!==null&&p!==void 0?p:f(r,"title"))!==null&&o!==void 0?o:f(r,"label"))!==null&&a!==void 0?a:m,g=j((c=(l=u??f(r,"title"))!==null&&l!==void 0?l:f(r,"label"))!==null&&c!==void 0?c:b);if(!g)return;const v=document.createElement("option");v.value=String(b),v.textContent=`${d}${g}`,e.appendChild(v)},A=e=>Array.from(e.querySelectorAll("input,select")),k=(e,r,i)=>e.hasAttribute(r)?e.getAttribute(r)||"":i,E=(e,r,i)=>S(void 0,void 0,void 0,function*(){let t=e.getAttribute("data-url");if(!t)return;const d=e.getAttribute("data-method")||"GET",n={},s=window;s.controller||(s.controller={}),s.controller[t]&&s.controller[t].abort(),s.controller[t]=new AbortController;const{signal:p}=s.controller[t],o={signal:p,method:d,headers:new Headers({"Content-Type":"application/json",Accept:"application/json"})};d.toUpperCase()==="GET"?A(e).forEach(a=>{const l=a.getAttribute("name"),c=a.value;l&&c&&(t+=`${t.includes("?")?"&":"?"}${encodeURIComponent(l)}=${encodeURIComponent(c)}`)}):(A(e).forEach(a=>{const l=a.getAttribute("name"),c=a.value;l&&c&&(n[l]=c)}),o.body=JSON.stringify(n));try{const l=yield(yield fetch(t,o)).json(),c=k(e,"data-schema","data"),h=k(e,"data-value-schema","value"),u=k(e,"data-display-schema","label"),m=y(l,c,[]);Array.isArray(m)?m.forEach(b=>{z(r,b,h,u)}):w(m)&&Object.entries(m).forEach(([b,g])=>{Array.isArray(g)&&g.forEach(v=>{z(r,v,h,u,`${b}: `)})}),L(r,i)}catch(a){console.log(a)}}),L=(e,r)=>{var i;for(const t of e.options)(((i=t.textContent)===null||i===void 0?void 0:i.trim())||t.value).toLowerCase().includes(r.toLowerCase())?t.classList.remove("js-hide"):t.classList.add("js-hide")},q=(e,r,i)=>{var t;const d=i.closest("datalist"),n=((t=i.textContent)===null||t===void 0?void 0:t.trim())||i.value,p=`${r.getAttribute("name")||""}Alt`;if(r.value=n,r.setAttribute("data-value",n),r.setAttribute("placeholder",n),i.value&&i.value!==n){const a=e.querySelector(`input[name="${p}"]`);a?a.value=i.value:e.insertAdjacentHTML("beforeend",`<input type="hidden" name="${p}" value="${i.value}">`)}else{const a=e.querySelector(`input[name="${p}"]`);a&&a.remove()}if(!d)return;for(const a of d.options)a===i?a.classList.add("active"):a.classList.remove("active");const o=new CustomEvent("option-selected",{detail:{title:n,value:i.value||"",url:i.hasAttribute("data-url")&&i.getAttribute("data-url")||""}});e.dispatchEvent(o)},C=(e,r,i)=>{const t=Number.parseInt(e.getAttribute(r)||"",10);return Number.isNaN(t)?i:t},T=e=>e.target instanceof HTMLElement?e.target.closest("option"):null,x=window;x.dataLayer=x.dataLayer||[],x.dataLayer.push({event:"customElementRegistered",element:"Search"});class $ extends HTMLElement{constructor(){super();const r=this.attachShadow({mode:"open"});document.body.getAttribute("data-assets-location");const i=document.createElement("template");i.innerHTML=`
@@ -16,5 +16,5 @@
16
16
  <button class="suffix fa-regular fa-search"></button>
17
17
  </span>
18
18
  <slot name="datalist"></slot>
19
- `,r.appendChild(i.content.cloneNode(!0))}connectedCallback(){const r=this.shadowRoot;if(!r)return;let i=this.querySelector("datalist");const t=this.querySelector("input"),d=r.querySelector(".suffix"),n=r.querySelector(".clear-search");let s=this.hasAttribute("data-min-length")?C(this,"data-min-length",1):1;if(d?.setAttribute("class",`suffix ${this.hasAttribute("data-icon")?this.getAttribute("data-icon"):"fa-regular fa-search"}`),this.hasAttribute("data-url")&&!this.hasAttribute("data-min-length")&&(s=3),!t||!d)return;const p=t.getAttribute("placeholder");if(p!==null&&this.setAttribute("data-original-placeholder",p),t.setAttribute("autocomplete","off"),t.setAttribute("aria-autocomplete","none"),t&&t.hasAttribute("list")&&(t.setAttribute("data-list",t.getAttribute("list")||""),t.setAttribute("list","")),!i){i=document.createElement("datalist");const o=`${t?.getAttribute("name")}-list`;i.setAttribute("id",o),t?.setAttribute("data-list",o),this.appendChild(i)}i.setAttribute("slot","datalist"),i.querySelectorAll("option").forEach(o=>{o.setAttribute("tabindex","0"),o.textContent==""&&o.hasAttribute("value")&&(o.textContent=o.getAttribute("value"))}),i.addEventListener("click",o=>{const a=T(o);a&&(o.stopPropagation(),o.preventDefault(),document.activeElement instanceof HTMLElement&&document.activeElement.blur(),this.classList.remove("js-show-datalist"),q(this,t,a))}),t.addEventListener("input",()=>{t.value.length>=1?this.classList.add("has-value"):this.classList.remove("has-value"),t.value.length>=s?(this.classList.add("js-show-datalist"),this.hasAttribute("data-url")?E(this,i,t.value):L(i,t.value)):this.classList.remove("js-show-datalist")}),t.addEventListener("focus",()=>{if(t.value==t.getAttribute("data-value")){const o=t.getAttribute("data-value")||"";t.value="",t.setAttribute("placeholder",o),this.classList.remove("js-show-datalist")}else t.value.length>=s&&this.classList.add("js-show-datalist")}),t.addEventListener("blur",()=>{const o=t.getAttribute("data-value");!t.value&&o&&(t.value=o),setTimeout(()=>{this.classList.remove("js-force-show-datalist"),this.classList.remove("js-show-datalist")},200);const a=t.getAttribute("data-placeholder");a&&t.setAttribute("placeholder",a)}),d.addEventListener("click",()=>{const o=this.closest("form");o&&!this.hasAttribute("data-prevent-submit")?o.requestSubmit():(t.focus(),this.classList.add("js-force-show-datalist"))}),this.addEventListener("keydown",o=>{var a;switch(o.key){case"ArrowDown":o&&o.target instanceof HTMLElement&&o.target==t&&((a=this.querySelector("datalist option:not(.js-hide)"))===null||a===void 0||a.focus());break}}),n?.addEventListener("click",()=>{this.classList.remove("js-show-datalist"),t.value="",t.removeAttribute("data-value"),t.focus(),this.classList.remove("has-value"),t.setAttribute("placeholder",this.getAttribute("data-original-placeholder")||"");const o=t.getAttribute("name"),a=o?this.querySelector(`[name="${o}Alt"]`):null;a?.remove(),i.querySelectorAll("option").forEach(l=>{l.classList.remove("active")})})}}export{$ as default};
19
+ `,r.appendChild(i.content.cloneNode(!0))}connectedCallback(){const r=this.shadowRoot;if(!r)return;let i=this.querySelector("datalist");const t=this.querySelector("input"),d=r.querySelector(".suffix"),n=r.querySelector(".clear-search");let s=this.hasAttribute("data-min-length")?C(this,"data-min-length",1):1;if(d?.setAttribute("class",`suffix ${this.hasAttribute("data-icon")?this.getAttribute("data-icon"):"fa-regular fa-search"}`),this.hasAttribute("data-url")&&!this.hasAttribute("data-min-length")&&(s=3),!t||!d)return;const p=t.getAttribute("placeholder");if(p!==null&&this.setAttribute("data-original-placeholder",p),t.setAttribute("autocomplete","off"),t.setAttribute("aria-autocomplete","none"),t&&t.hasAttribute("list")&&(t.setAttribute("data-list",t.getAttribute("list")||""),t.setAttribute("list","")),!i){i=document.createElement("datalist");const o=`${t?.getAttribute("name")}-list`;i.setAttribute("id",o),t?.setAttribute("data-list",o),this.appendChild(i)}i.setAttribute("slot","datalist"),i.querySelectorAll("option").forEach(o=>{o.setAttribute("tabindex","0"),o.textContent==""&&o.hasAttribute("value")&&(o.textContent=o.getAttribute("value"))}),i.addEventListener("click",o=>{const a=T(o);a&&(o.stopPropagation(),o.preventDefault(),document.activeElement instanceof HTMLElement&&document.activeElement.blur(),this.classList.remove("js-show-datalist"),q(this,t,a))}),t.addEventListener("input",()=>{t.value.length>=1?this.classList.add("has-value"):this.classList.remove("has-value"),t.value.length>=s?(this.classList.add("js-show-datalist"),this.hasAttribute("data-url")?E(this,i,t.value):L(i,t.value)):this.classList.remove("js-show-datalist")}),t.addEventListener("focus",()=>{if(t.value==t.getAttribute("data-value")){const o=t.getAttribute("data-value")||"";t.value="",t.setAttribute("placeholder",o),this.classList.remove("js-show-datalist")}else t.value.length>=s&&this.classList.add("js-show-datalist")}),t.addEventListener("blur",()=>{const o=t.getAttribute("data-value");!t.value&&o&&(t.value=o),setTimeout(()=>{this.classList.remove("js-force-show-datalist"),this.classList.remove("js-show-datalist")},200);const a=t.getAttribute("data-placeholder");a&&t.setAttribute("placeholder",a)}),d.addEventListener("click",()=>{const o=this.closest("form");o&&!this.hasAttribute("data-prevent-submit")?o.requestSubmit():(t.focus(),this.classList.add("js-force-show-datalist"))}),this.addEventListener("keydown",o=>{var a;o.key==="ArrowDown"&&o&&o.target instanceof HTMLElement&&o.target==t&&((a=this.querySelector("datalist option:not(.js-hide)"))===null||a===void 0||a.focus())}),n?.addEventListener("click",()=>{this.classList.remove("js-show-datalist"),t.value="",t.removeAttribute("data-value"),t.focus(),this.classList.remove("has-value"),t.setAttribute("placeholder",this.getAttribute("data-original-placeholder")||"");const o=t.getAttribute("name"),a=o?this.querySelector(`[name="${o}Alt"]`):null;a?.remove(),i.querySelectorAll("option").forEach(l=>{l.classList.remove("active")})})}}export{$ as default};
20
20
  //# sourceMappingURL=search.component.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.component.min.js","sources":["../../modules/helpers.js","../../modules/search.js","search.component.js"],"sourcesContent":["/**\n * Global helper functions to help maintain and enhance framework elements.\n * @module Helpers\n */\n/**\n * Add global classes used by the CSS and later JavaScript.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addBodyClasses = (body) => {\n body.classList.add('js-enabled');\n if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {\n body.classList.add('ie');\n }\n};\n/**\n * Add global events.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addGlobalEvents = (body) => {\n const checkElements = function (hash) {\n const label = document.querySelector(`label[for=\"${hash.replace('#', '')}\"]`);\n const summary = document.querySelector(hash + ' summary');\n const dialog = document.querySelector(`dialog${hash}`);\n const detail = document.querySelector(`detail${hash}`);\n if (label instanceof HTMLElement)\n label.click();\n else if (summary instanceof HTMLElement)\n summary.click();\n else if (dialog instanceof HTMLElement)\n dialog.showModal();\n else if (detail instanceof HTMLElement)\n detail.addAttribute('open');\n };\n if (location.hash)\n checkElements(location.hash);\n window.addEventListener('hashchange', function () {\n checkElements(location.hash);\n }, false);\n addEventListener('popstate', (event) => {\n if (event && event.state && event.state.type && event.state.type == 'pagination') {\n const form = document.querySelector(`#${event.state.form}`);\n const pageInput = document.querySelector(`#${event.state.form} [data-pagination]`);\n if (pageInput)\n pageInput.value = event.state.page;\n else\n form.innerHTML += `<input name=\"page\" type=\"hidden\" data-pagination=\"true\" value=\"${event.state.page}\" />`;\n form.dispatchEvent(new Event('submit'));\n }\n });\n Array.from(document.querySelectorAll('form')).forEach((form) => {\n if (!(form === null || form === void 0 ? void 0 : form.closest('iam-form'))) {\n form.addEventListener('submit', (event) => {\n var _a;\n if (form.querySelector(':invalid')) {\n form.classList.add('was-validated');\n (_a = form === null || form === void 0 ? void 0 : form.querySelector('input:invalid')) === null || _a === void 0 ? void 0 : _a.scrollIntoView();\n event.preventDefault();\n }\n });\n }\n });\n document.addEventListener('click', (event) => {\n var _a;\n if (event && event.target instanceof HTMLElement && event.target.matches('form button:not([type=button])')) {\n const form = event.target.closest('form');\n if (!(form === null || form === void 0 ? void 0 : form.closest('iam-form'))) {\n // Reset password types\n Array.from(form.querySelectorAll('[data-password-type]')).forEach((input) => {\n input.setAttribute('type', 'password');\n });\n if (form.querySelector(':invalid') ||\n form.querySelector('.pwd-checker[data-strength=\"1\"]') ||\n form.querySelector('.pwd-checker[data-strength=\"2\"]')) {\n form.classList.add('was-validated');\n (_a = form === null || form === void 0 ? void 0 : form.querySelector('input:invalid')) === null || _a === void 0 ? void 0 : _a.scrollIntoView();\n event.preventDefault();\n }\n if (form.querySelector('iam-multiselect[data-is-required][data-error]')) {\n form.classList.add('was-validated');\n event.preventDefault();\n }\n }\n }\n });\n document.addEventListener('keydown', (e) => {\n if (e.key === 'Escape') {\n if (document.querySelector('.dialog--transactional[open], .dialog--acknowledgement[open]')) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n });\n Array.from(document.querySelectorAll('label progress')).forEach((progress) => {\n const label = progress.closest('label');\n label.setAttribute('data-percent', progress.getAttribute('value'));\n });\n};\nexport const isNumeric = function (str) {\n if (typeof str != 'string')\n return false; // we only process strings!\n return (!isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...\n !isNaN(parseFloat(str))); // ...and ensure strings of whitespace fail\n};\nexport const zeroPad = (num, places) => String(num).padStart(places, '0');\nexport const ucfirst = (str) => str.charAt(0).toUpperCase() + str.slice(1);\nexport const ucwords = (str) => str\n .split(' ')\n .map((s) => ucfirst(s))\n .join(' ');\nexport const unsnake = (str) => str.replace(/_/g, ' ');\nexport const snake = (str) => str.replace(/ /g, '_');\nexport const safeID = function (str) {\n str = str.toLowerCase();\n str = snake(str);\n str = str.replace(/\\W/g, '');\n return str;\n};\nexport const numberOfDays = function (startDateString, endDateString) {\n const convertStart = startDateString.split('/');\n const convertEnd = endDateString.split('/');\n const dateStart = new Date(convertStart[1] + '/' + convertStart[0] + '/' + convertStart[2]);\n const dateEnd = new Date(convertEnd[1] + '/' + convertEnd[0] + '/' + convertEnd[2]);\n if (dateStart == 'Invalid Date')\n throw 'Start date is not a valid date';\n if (dateEnd == 'Invalid Date')\n throw 'End date is not a valid date';\n // To calculate the time difference of two dates\n const diffTime = dateEnd.getTime() - dateStart.getTime();\n const numberOfDays = diffTime / (1000 * 3600 * 24) + 1;\n if (numberOfDays < 0)\n throw 'The start date should be before the end date';\n return numberOfDays;\n};\n// Used to get values from nested json objects\nexport const resolvePath = (object, path, defaultValue) => path\n // eslint-disable-next-line no-useless-escape\n .split(/[\\.\\[\\]\\'\\\"]/)\n .filter((p) => p)\n .reduce((o, p) => (o ? o[p] : defaultValue), object);\nexport const isTraversable = (o) => Array.isArray(o) || (o !== null && ['function', 'object'].includes(typeof o));\nexport const getSwipeDirection = (touchstartX, touchstartY, touchendX, touchendY) => {\n const limit = Math.tan(((45 * 1.5) / 180) * Math.PI);\n const pageWidth = window.innerWidth || document.body.clientWidth;\n const treshold = Math.max(1, Math.floor(0.01 * pageWidth));\n const x = touchendX - touchstartX;\n const y = touchendY - touchstartY;\n const xy = Math.abs(x / y);\n const yx = Math.abs(y / x);\n if (Math.abs(x) > treshold || Math.abs(y) > treshold) {\n if (yx <= limit) {\n if (x < 0) {\n return 'left';\n }\n else {\n return 'right';\n }\n }\n if (xy <= limit) {\n if (y < 0) {\n return 'top';\n }\n else {\n return 'bottom';\n }\n }\n }\n else {\n return 'tap';\n }\n};\nexport const uniqueID = (index = 1) => {\n const ID = Math.floor(Math.random() * Date.now() * (index + 1));\n return ID;\n};\nexport const isValidPostcode = (searchValue) => {\n const regexp = /^([A-Z][A-HJ-Y]?[0-9][A-Z0-9]? ?[0-9][A-Z]{2}|GIR ?0A{2})$/gmi;\n return regexp.test(searchValue.trim());\n};\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { resolvePath, isTraversable } from './helpers';\nconst isRecord = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);\nconst getResultValue = (item, key) => (isRecord(item) ? item[key] : undefined);\nconst toOptionText = (value) => String(value !== null && value !== void 0 ? value : '').replace('\\n', ', ');\nconst appendDatalistOption = (datalistElement, item, valueSchema, displaySchema, groupLabel = '') => {\n var _a, _b, _c, _d, _e, _f, _g;\n const resolvedValue = resolvePath(item, valueSchema, undefined);\n const resolvedDisplay = resolvePath(item, displaySchema, undefined);\n const fallbackValue = isTraversable(item) ? '' : item;\n const actualValue = (_e = (_d = (_c = (_b = (_a = resolvedValue !== null && resolvedValue !== void 0 ? resolvedValue : getResultValue(item, 'value')) !== null && _a !== void 0 ? _a : getResultValue(item, 'id')) !== null && _b !== void 0 ? _b : resolvedDisplay) !== null && _c !== void 0 ? _c : getResultValue(item, 'title')) !== null && _d !== void 0 ? _d : getResultValue(item, 'label')) !== null && _e !== void 0 ? _e : fallbackValue;\n const displayValue = toOptionText((_g = (_f = resolvedDisplay !== null && resolvedDisplay !== void 0 ? resolvedDisplay : getResultValue(item, 'title')) !== null && _f !== void 0 ? _f : getResultValue(item, 'label')) !== null && _g !== void 0 ? _g : actualValue);\n if (!displayValue)\n return;\n const optionElement = document.createElement('option');\n optionElement.value = String(actualValue);\n optionElement.textContent = `${groupLabel}${displayValue}`;\n datalistElement.appendChild(optionElement);\n};\nconst getFormControls = (component) => Array.from(component.querySelectorAll('input,select'));\nconst getSearchSchema = (component, attributeName, fallback) => component.hasAttribute(attributeName) ? component.getAttribute(attributeName) || '' : fallback;\nconst search = (component, datalistElement, searchTerm) => __awaiter(void 0, void 0, void 0, function* () {\n let url = component.getAttribute('data-url');\n if (!url)\n return;\n const method = component.getAttribute('data-method') || 'GET';\n const body = {};\n const searchWindow = window;\n // Setup controller vars if not already set\n if (!searchWindow.controller)\n searchWindow.controller = {};\n // Abort if controller already present for this url\n if (searchWindow.controller[url])\n searchWindow.controller[url].abort();\n // Create a new controller so it can be aborted if new fetch made\n searchWindow.controller[url] = new AbortController();\n const { signal } = searchWindow.controller[url];\n const requestOptions = {\n signal,\n method,\n headers: new Headers({\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n }),\n };\n if (method.toUpperCase() === 'GET') {\n getFormControls(component).forEach((input) => {\n const name = input.getAttribute('name');\n const value = input.value;\n if (name && value) {\n url += `${url.includes('?') ? '&' : '?'}${encodeURIComponent(name)}=${encodeURIComponent(value)}`;\n }\n });\n }\n else {\n getFormControls(component).forEach((input) => {\n const name = input.getAttribute('name');\n const value = input.value;\n if (name && value) {\n body[name] = value;\n }\n });\n requestOptions['body'] = JSON.stringify(body);\n }\n try {\n const response = yield fetch(url, requestOptions);\n const responseData = (yield response.json());\n const loopSchema = getSearchSchema(component, 'data-schema', 'data');\n const valueSchema = getSearchSchema(component, 'data-value-schema', 'value');\n const displaySchema = getSearchSchema(component, 'data-display-schema', 'label');\n const loopValues = resolvePath(responseData, loopSchema, []);\n if (Array.isArray(loopValues)) {\n loopValues.forEach((item) => {\n appendDatalistOption(datalistElement, item, valueSchema, displaySchema);\n });\n }\n else if (isRecord(loopValues)) {\n Object.entries(loopValues).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach((item) => {\n appendDatalistOption(datalistElement, item, valueSchema, displaySchema, `${key}: `);\n });\n }\n });\n }\n filterDatalist(datalistElement, searchTerm);\n }\n catch (error) {\n console.log(error);\n }\n});\nexport const filterDatalist = (datalistElement, searchTerm) => {\n var _a;\n for (const optionElement of datalistElement.options) {\n const optionText = ((_a = optionElement.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || optionElement.value;\n if (optionText.toLowerCase().includes(searchTerm.toLowerCase())) {\n optionElement.classList.remove('js-hide');\n }\n else {\n optionElement.classList.add('js-hide');\n }\n }\n};\nexport const datalistSelectOption = (component, inputElement, optionElement) => {\n var _a;\n const datalistElement = optionElement.closest('datalist');\n const optionText = ((_a = optionElement.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || optionElement.value;\n const inputName = inputElement.getAttribute('name') || '';\n const alternateInputName = `${inputName}Alt`;\n inputElement.value = optionText;\n inputElement.setAttribute('data-value', optionText);\n //inputElement.setAttribute('data-placeholder', optionText);\n inputElement.setAttribute('placeholder', optionText);\n // Make sure the value of the option is passed when in a form\n if (optionElement.value && optionElement.value !== optionText) {\n const alternateInput = component.querySelector(`input[name=\"${alternateInputName}\"]`);\n if (!alternateInput)\n component.insertAdjacentHTML('beforeend', `<input type=\"hidden\" name=\"${alternateInputName}\" value=\"${optionElement.value}\">`);\n else\n alternateInput.value = optionElement.value;\n }\n else {\n const alternateInput = component.querySelector(`input[name=\"${alternateInputName}\"]`);\n if (alternateInput)\n alternateInput.remove();\n }\n // Set the active value on the datalist option\n if (!datalistElement)\n return;\n for (const optionLoopElement of datalistElement.options) {\n if (optionLoopElement === optionElement)\n optionLoopElement.classList.add('active');\n else\n optionLoopElement.classList.remove('active');\n }\n const customEvent = new CustomEvent('option-selected', {\n detail: {\n title: optionText,\n value: optionElement.value || '',\n url: optionElement.hasAttribute('data-url') ? optionElement.getAttribute('data-url') || '' : '',\n },\n });\n component.dispatchEvent(customEvent);\n};\nexport default search;\n","import search, { filterDatalist, datalistSelectOption } from '../../modules/search';\nconst getIntegerAttribute = (element, attributeName, fallback) => {\n const value = Number.parseInt(element.getAttribute(attributeName) || '', 10);\n return Number.isNaN(value) ? fallback : value;\n};\nconst getOptionFromEvent = (event) => event.target instanceof HTMLElement ? event.target.closest('option') : null;\n// Data layer Web component created\nconst searchWindow = window;\nsearchWindow.dataLayer = searchWindow.dataLayer || [];\nsearchWindow.dataLayer.push({\n event: 'customElementRegistered',\n element: 'Search',\n});\nclass iamSearch extends HTMLElement {\n constructor() {\n super();\n const shadowRoot = this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.getAttribute('data-assets-location') || '/assets';\n const loadCSS = `@import \"${assetLocation}/css/components/search.component.css\";`;\n const template = document.createElement('template');\n template.innerHTML = /* HTML */ `\n <style>\n ${loadCSS}\n </style>\n <link rel=\"stylesheet\" href=\"https://kit.fontawesome.com/8bd0fca975.css\" crossorigin=\"anonymous\" />\n <span class=\"wrapper\">\n <span class=\"input__wrapper\">\n <slot></slot>\n <button class=\"clear-search btn btn-action\" type=\"button\"><i class=\"fa-light fa-times me-0\"></i></button>\n </span>\n <button class=\"suffix fa-regular fa-search\"></button>\n </span>\n <slot name=\"datalist\"></slot>\n `;\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n const shadowRoot = this.shadowRoot;\n if (!shadowRoot)\n return;\n let datalistElement = this.querySelector('datalist');\n const inputElement = this.querySelector('input');\n const suffixElement = shadowRoot.querySelector('.suffix');\n const clearBtn = shadowRoot.querySelector('.clear-search');\n let minLength = this.hasAttribute('data-min-length') ? getIntegerAttribute(this, 'data-min-length', 1) : 1;\n suffixElement === null || suffixElement === void 0 ? void 0 : suffixElement.setAttribute('class', `suffix ${this.hasAttribute('data-icon') ? this.getAttribute('data-icon') : 'fa-regular fa-search'}`);\n if (this.hasAttribute('data-url') && !this.hasAttribute('data-min-length')) {\n minLength = 3;\n }\n if (!inputElement || !suffixElement)\n return;\n // #region maintain the original placeholder value in a data attribute to allow for it to be reset when the field is emptied\n const originalPlaceholder = inputElement.getAttribute('placeholder');\n if (originalPlaceholder !== null)\n this.setAttribute('data-original-placeholder', originalPlaceholder);\n // #endregion\n // #region transform datalist into dropdown\n // Turn off the browser's default datalist functionality to allow for a custom implementation\n inputElement.setAttribute('autocomplete', 'off');\n inputElement.setAttribute('aria-autocomplete', 'none');\n if (inputElement && inputElement.hasAttribute('list')) {\n inputElement.setAttribute('data-list', inputElement.getAttribute('list') || '');\n inputElement.setAttribute('list', '');\n }\n if (!datalistElement) {\n datalistElement = document.createElement('datalist');\n const listID = `${inputElement === null || inputElement === void 0 ? void 0 : inputElement.getAttribute('name')}-list`;\n datalistElement.setAttribute('id', listID);\n inputElement === null || inputElement === void 0 ? void 0 : inputElement.setAttribute('data-list', listID);\n this.appendChild(datalistElement);\n }\n datalistElement.setAttribute('slot', 'datalist');\n datalistElement.querySelectorAll('option').forEach((option) => {\n option.setAttribute('tabindex', '0');\n if (option.textContent == '' && option.hasAttribute('value')) {\n option.textContent = option.getAttribute('value');\n }\n });\n datalistElement.addEventListener('click', (event) => {\n const optionElement = getOptionFromEvent(event);\n if (optionElement) {\n event.stopPropagation();\n event.preventDefault();\n if (document.activeElement instanceof HTMLElement)\n document.activeElement.blur();\n this.classList.remove('js-show-datalist');\n datalistSelectOption(this, inputElement, optionElement);\n }\n });\n // #endregion\n // #region control input field\n inputElement.addEventListener('input', () => {\n if (inputElement.value.length >= 1) {\n this.classList.add('has-value');\n }\n else {\n this.classList.remove('has-value');\n }\n if (inputElement.value.length >= minLength) {\n //inputElement.removeAttribute('data-value');\n this.classList.add('js-show-datalist');\n if (this.hasAttribute('data-url')) {\n void search(this, datalistElement, inputElement.value);\n }\n else {\n filterDatalist(datalistElement, inputElement.value);\n }\n }\n else {\n this.classList.remove('js-show-datalist');\n }\n });\n inputElement.addEventListener('focus', () => {\n if (inputElement.value == inputElement.getAttribute('data-value')) {\n const selectedValue = inputElement.getAttribute('data-value') || '';\n inputElement.value = '';\n inputElement.setAttribute('placeholder', selectedValue);\n this.classList.remove('js-show-datalist');\n }\n else if (inputElement.value.length >= minLength) {\n this.classList.add('js-show-datalist');\n }\n });\n inputElement.addEventListener('blur', () => {\n const selectedValue = inputElement.getAttribute('data-value');\n if (!inputElement.value && selectedValue) {\n inputElement.value = selectedValue;\n //inputElement.setAttribute('placeholder', inputElement.getAttribute('data-value'));\n //this.classList.remove('js-show-datalist');\n }\n // Set timeout to allow click event to fire on options before hiding the list again\n setTimeout(() => {\n this.classList.remove('js-force-show-datalist');\n this.classList.remove('js-show-datalist');\n }, 200);\n const placeholder = inputElement.getAttribute('data-placeholder');\n if (placeholder)\n inputElement.setAttribute('placeholder', placeholder);\n });\n // #endregion\n // #region control suffix button\n suffixElement.addEventListener('click', () => {\n const form = this.closest('form');\n if (form && !this.hasAttribute('data-prevent-submit')) {\n form.requestSubmit();\n }\n else {\n inputElement.focus();\n this.classList.add('js-force-show-datalist');\n }\n });\n // #endregion\n // #region keyboard navigation\n this.addEventListener('keydown', (event) => {\n var _a;\n switch (event.key) {\n case 'ArrowDown':\n //event.stopPropagation();\n //event.preventDefault();\n if (event && event.target instanceof HTMLElement && event.target == inputElement) {\n (_a = this.querySelector('datalist option:not(.js-hide)')) === null || _a === void 0 ? void 0 : _a.focus();\n }\n break;\n }\n /*\n if (event && event.target instanceof HTMLElement && event.target.closest('a, button, summary')) {\n const activeItem = document.activeElement;\n const prevIndex = Array.from(topLevelmenuItems).indexOf(activeItem) - 1;\n const nextIndex = Array.from(topLevelmenuItems).indexOf(activeItem) + 1;\n \n switch (\n event.keyCode // change to event.key to key to use the above variable\n ) {\n case 27: // Esc\n if (activeItem.closest('details')) {\n event.stopPropagation();\n event.preventDefault();\n activeItem.closest('details').removeAttribute('open');\n activeItem.closest('details').querySelector(':scope summary').focus();\n } else {\n event.stopPropagation();\n menuButton.focus();\n }\n \n break;\n case 32: // Space\n case 13: // Enter\n break;\n case 35: // end\n event.stopPropagation();\n event.preventDefault();\n \n this.querySelector('details[open]').removeAttribute('open');\n Array.from(menuItems)[menuItems.length - 1].focus();\n \n break;\n case 36: // home\n event.stopPropagation();\n event.preventDefault();\n \n this.querySelector('details[open]').removeAttribute('open');\n Array.from(menuItems)[0].focus();\n \n break;\n case 38: // up\n event.stopPropagation();\n event.preventDefault();\n \n if (Array.from(topLevelmenuItems).indexOf(activeItem) > -1) {\n if (Array.from(topLevelmenuItems)[prevIndex] != undefined)\n Array.from(topLevelmenuItems)[prevIndex].focus();\n else Array.from(topLevelmenuItems)[topLevelmenuItems.length - 1].focus();\n } else if (activeItem.closest('details')) {\n const subMenuItems = activeItem\n .closest('details')\n .querySelectorAll('a, button, :scope details > summary');\n subPrevIndex = Array.from(subMenuItems).indexOf(activeItem) - 1;\n \n if (Array.from(subMenuItems)[subPrevIndex] != undefined) Array.from(subMenuItems)[subPrevIndex].focus();\n else Array.from(subMenuItems)[subMenuItems.length - 1].focus();\n }\n \n break;\n case 40: // down\n event.stopPropagation();\n event.preventDefault();\n \n if (Array.from(topLevelmenuItems).indexOf(activeItem) > -1) {\n if (Array.from(topLevelmenuItems)[nextIndex] != undefined)\n Array.from(topLevelmenuItems)[nextIndex].focus();\n else Array.from(topLevelmenuItems)[0].focus();\n } else if (activeItem.closest('details')) {\n const subMenuItems = activeItem\n .closest('details')\n .querySelectorAll('a, button, :scope details > summary');\n subNextIndex = Array.from(subMenuItems).indexOf(activeItem) + 1;\n \n if (Array.from(subMenuItems)[subNextIndex] != undefined) Array.from(subMenuItems)[subNextIndex].focus();\n else Array.from(subMenuItems)[0].focus();\n }\n \n break;\n }\n }\n \n */\n });\n // #endregion\n // #region empty button\n clearBtn === null || clearBtn === void 0 ? void 0 : clearBtn.addEventListener('click', () => {\n this.classList.remove('js-show-datalist');\n inputElement.value = '';\n inputElement.removeAttribute('data-value');\n inputElement.focus();\n this.classList.remove('has-value');\n inputElement.setAttribute('placeholder', this.getAttribute('data-original-placeholder') || '');\n const inputName = inputElement.getAttribute('name');\n const alternateInput = inputName ? this.querySelector(`[name=\"${inputName}Alt\"]`) : null;\n alternateInput === null || alternateInput === void 0 ? void 0 : alternateInput.remove();\n datalistElement.querySelectorAll('option').forEach((option) => {\n option.classList.remove('active');\n });\n });\n }\n}\nexport default iamSearch;\n"],"names":["resolvePath","object","path","defaultValue","p","o","isTraversable","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","e","rejected","result","isRecord","getResultValue","item","key","toOptionText","appendDatalistOption","datalistElement","valueSchema","displaySchema","groupLabel","_a","_b","_c","_d","_e","_f","_g","resolvedValue","resolvedDisplay","fallbackValue","actualValue","displayValue","optionElement","getFormControls","component","getSearchSchema","attributeName","fallback","search","searchTerm","url","method","body","searchWindow","signal","requestOptions","input","name","responseData","loopSchema","loopValues","filterDatalist","error","datalistSelectOption","inputElement","optionText","alternateInputName","alternateInput","optionLoopElement","customEvent","getIntegerAttribute","element","getOptionFromEvent","event","iamSearch","shadowRoot","template","suffixElement","clearBtn","minLength","originalPlaceholder","listID","option","selectedValue","placeholder","form","inputName"],"mappings":"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"}
1
+ {"version":3,"file":"search.component.min.js","sources":["../../modules/helpers.js","../../modules/search.js","search.component.js"],"sourcesContent":["/**\n * Global helper functions to help maintain and enhance framework elements.\n * @module Helpers\n */\n/**\n * Add global classes used by the CSS and later JavaScript.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addBodyClasses = (body) => {\n body.classList.add('js-enabled');\n if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {\n body.classList.add('ie');\n }\n};\n/**\n * Add global events.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addGlobalEvents = (body) => {\n const checkElements = function (hash) {\n const label = document.querySelector(`label[for=\"${hash.replace('#', '')}\"]`);\n const summary = document.querySelector(hash + ' summary');\n const dialog = document.querySelector(`dialog${hash}`);\n const detail = document.querySelector(`detail${hash}`);\n if (label instanceof HTMLElement)\n label.click();\n else if (summary instanceof HTMLElement)\n summary.click();\n else if (dialog instanceof HTMLElement)\n dialog.showModal();\n else if (detail instanceof HTMLElement)\n detail.addAttribute('open');\n };\n if (location.hash)\n checkElements(location.hash);\n window.addEventListener('hashchange', function () {\n checkElements(location.hash);\n }, false);\n addEventListener('popstate', (event) => {\n if (event && event.state && event.state.type && event.state.type == 'pagination') {\n const form = document.querySelector(`#${event.state.form}`);\n const pageInput = document.querySelector(`#${event.state.form} [data-pagination]`);\n if (pageInput)\n pageInput.value = event.state.page;\n else\n form.innerHTML += `<input name=\"page\" type=\"hidden\" data-pagination=\"true\" value=\"${event.state.page}\" />`;\n form.dispatchEvent(new Event('submit'));\n }\n });\n Array.from(document.querySelectorAll('form')).forEach((form) => {\n if (!(form === null || form === void 0 ? void 0 : form.closest('iam-form'))) {\n form.addEventListener('submit', (event) => {\n var _a;\n if (form.querySelector(':invalid')) {\n form.classList.add('was-validated');\n (_a = form === null || form === void 0 ? void 0 : form.querySelector('input:invalid')) === null || _a === void 0 ? void 0 : _a.scrollIntoView();\n event.preventDefault();\n }\n });\n }\n });\n document.addEventListener('click', (event) => {\n var _a;\n if (event && event.target instanceof HTMLElement && event.target.matches('form button:not([type=button])')) {\n const form = event.target.closest('form');\n if (!(form === null || form === void 0 ? void 0 : form.closest('iam-form'))) {\n // Reset password types\n Array.from(form.querySelectorAll('[data-password-type]')).forEach((input) => {\n input.setAttribute('type', 'password');\n });\n if (form.querySelector(':invalid') ||\n form.querySelector('.pwd-checker[data-strength=\"1\"]') ||\n form.querySelector('.pwd-checker[data-strength=\"2\"]')) {\n form.classList.add('was-validated');\n (_a = form === null || form === void 0 ? void 0 : form.querySelector('input:invalid')) === null || _a === void 0 ? void 0 : _a.scrollIntoView();\n event.preventDefault();\n }\n if (form.querySelector('iam-multiselect[data-is-required][data-error]')) {\n form.classList.add('was-validated');\n event.preventDefault();\n }\n }\n }\n });\n document.addEventListener('keydown', (e) => {\n if (e.key === 'Escape') {\n if (document.querySelector('.dialog--transactional[open], .dialog--acknowledgement[open]')) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n });\n Array.from(document.querySelectorAll('label progress')).forEach((progress) => {\n const label = progress.closest('label');\n label.setAttribute('data-percent', progress.getAttribute('value'));\n });\n};\nexport const isNumeric = function (str) {\n if (typeof str != 'string')\n return false; // we only process strings!\n return (!isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...\n !isNaN(parseFloat(str))); // ...and ensure strings of whitespace fail\n};\nexport const zeroPad = (num, places) => String(num).padStart(places, '0');\nexport const ucfirst = (str) => str.charAt(0).toUpperCase() + str.slice(1);\nexport const ucwords = (str) => str\n .split(' ')\n .map((s) => ucfirst(s))\n .join(' ');\nexport const unsnake = (str) => str.replace(/_/g, ' ');\nexport const snake = (str) => str.replace(/ /g, '_');\nexport const safeID = function (str) {\n str = str.toLowerCase();\n str = snake(str);\n str = str.replace(/\\W/g, '');\n return str;\n};\nexport const numberOfDays = function (startDateString, endDateString) {\n const convertStart = startDateString.split('/');\n const convertEnd = endDateString.split('/');\n const dateStart = new Date(convertStart[1] + '/' + convertStart[0] + '/' + convertStart[2]);\n const dateEnd = new Date(convertEnd[1] + '/' + convertEnd[0] + '/' + convertEnd[2]);\n if (dateStart == 'Invalid Date')\n throw 'Start date is not a valid date';\n if (dateEnd == 'Invalid Date')\n throw 'End date is not a valid date';\n // To calculate the time difference of two dates\n const diffTime = dateEnd.getTime() - dateStart.getTime();\n const numberOfDays = diffTime / (1000 * 3600 * 24) + 1;\n if (numberOfDays < 0)\n throw 'The start date should be before the end date';\n return numberOfDays;\n};\n// Used to get values from nested json objects\nexport const resolvePath = (object, path, defaultValue) => path\n // eslint-disable-next-line no-useless-escape\n .split(/[\\.\\[\\]\\'\\\"]/)\n .filter((p) => p)\n .reduce((o, p) => (o ? o[p] : defaultValue), object);\nexport const isTraversable = (o) => Array.isArray(o) || (o !== null && ['function', 'object'].includes(typeof o));\nexport const getSwipeDirection = (touchstartX, touchstartY, touchendX, touchendY) => {\n const limit = Math.tan(((45 * 1.5) / 180) * Math.PI);\n const pageWidth = window.innerWidth || document.body.clientWidth;\n const treshold = Math.max(1, Math.floor(0.01 * pageWidth));\n const x = touchendX - touchstartX;\n const y = touchendY - touchstartY;\n const xy = Math.abs(x / y);\n const yx = Math.abs(y / x);\n if (Math.abs(x) > treshold || Math.abs(y) > treshold) {\n if (yx <= limit) {\n if (x < 0) {\n return 'left';\n }\n else {\n return 'right';\n }\n }\n if (xy <= limit) {\n if (y < 0) {\n return 'top';\n }\n else {\n return 'bottom';\n }\n }\n }\n else {\n return 'tap';\n }\n};\nexport const uniqueID = (index = 1) => {\n const ID = Math.floor(Math.random() * Date.now() * (index + 1));\n return ID;\n};\nexport const isValidPostcode = (searchValue) => {\n const regexp = /^([A-Z][A-HJ-Y]?[0-9][A-Z0-9]? ?[0-9][A-Z]{2}|GIR ?0A{2})$/gmi;\n return regexp.test(searchValue.trim());\n};\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { resolvePath, isTraversable } from './helpers';\nconst isRecord = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);\nconst getResultValue = (item, key) => (isRecord(item) ? item[key] : undefined);\nconst toOptionText = (value) => String(value !== null && value !== void 0 ? value : '').replace('\\n', ', ');\nconst appendDatalistOption = (datalistElement, item, valueSchema, displaySchema, groupLabel = '') => {\n var _a, _b, _c, _d, _e, _f, _g;\n const resolvedValue = resolvePath(item, valueSchema, undefined);\n const resolvedDisplay = resolvePath(item, displaySchema, undefined);\n const fallbackValue = isTraversable(item) ? '' : item;\n const actualValue = (_e = (_d = (_c = (_b = (_a = resolvedValue !== null && resolvedValue !== void 0 ? resolvedValue : getResultValue(item, 'value')) !== null && _a !== void 0 ? _a : getResultValue(item, 'id')) !== null && _b !== void 0 ? _b : resolvedDisplay) !== null && _c !== void 0 ? _c : getResultValue(item, 'title')) !== null && _d !== void 0 ? _d : getResultValue(item, 'label')) !== null && _e !== void 0 ? _e : fallbackValue;\n const displayValue = toOptionText((_g = (_f = resolvedDisplay !== null && resolvedDisplay !== void 0 ? resolvedDisplay : getResultValue(item, 'title')) !== null && _f !== void 0 ? _f : getResultValue(item, 'label')) !== null && _g !== void 0 ? _g : actualValue);\n if (!displayValue)\n return;\n const optionElement = document.createElement('option');\n optionElement.value = String(actualValue);\n optionElement.textContent = `${groupLabel}${displayValue}`;\n datalistElement.appendChild(optionElement);\n};\nconst getFormControls = (component) => Array.from(component.querySelectorAll('input,select'));\nconst getSearchSchema = (component, attributeName, fallback) => component.hasAttribute(attributeName) ? component.getAttribute(attributeName) || '' : fallback;\nconst search = (component, datalistElement, searchTerm) => __awaiter(void 0, void 0, void 0, function* () {\n let url = component.getAttribute('data-url');\n if (!url)\n return;\n const method = component.getAttribute('data-method') || 'GET';\n const body = {};\n const searchWindow = window;\n // Setup controller vars if not already set\n if (!searchWindow.controller)\n searchWindow.controller = {};\n // Abort if controller already present for this url\n if (searchWindow.controller[url])\n searchWindow.controller[url].abort();\n // Create a new controller so it can be aborted if new fetch made\n searchWindow.controller[url] = new AbortController();\n const { signal } = searchWindow.controller[url];\n const requestOptions = {\n signal,\n method,\n headers: new Headers({\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n }),\n };\n if (method.toUpperCase() === 'GET') {\n getFormControls(component).forEach((input) => {\n const name = input.getAttribute('name');\n const value = input.value;\n if (name && value) {\n url += `${url.includes('?') ? '&' : '?'}${encodeURIComponent(name)}=${encodeURIComponent(value)}`;\n }\n });\n }\n else {\n getFormControls(component).forEach((input) => {\n const name = input.getAttribute('name');\n const value = input.value;\n if (name && value) {\n body[name] = value;\n }\n });\n requestOptions['body'] = JSON.stringify(body);\n }\n try {\n const response = yield fetch(url, requestOptions);\n const responseData = (yield response.json());\n const loopSchema = getSearchSchema(component, 'data-schema', 'data');\n const valueSchema = getSearchSchema(component, 'data-value-schema', 'value');\n const displaySchema = getSearchSchema(component, 'data-display-schema', 'label');\n const loopValues = resolvePath(responseData, loopSchema, []);\n if (Array.isArray(loopValues)) {\n loopValues.forEach((item) => {\n appendDatalistOption(datalistElement, item, valueSchema, displaySchema);\n });\n }\n else if (isRecord(loopValues)) {\n Object.entries(loopValues).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach((item) => {\n appendDatalistOption(datalistElement, item, valueSchema, displaySchema, `${key}: `);\n });\n }\n });\n }\n filterDatalist(datalistElement, searchTerm);\n }\n catch (error) {\n console.log(error);\n }\n});\nexport const filterDatalist = (datalistElement, searchTerm) => {\n var _a;\n for (const optionElement of datalistElement.options) {\n const optionText = ((_a = optionElement.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || optionElement.value;\n if (optionText.toLowerCase().includes(searchTerm.toLowerCase())) {\n optionElement.classList.remove('js-hide');\n }\n else {\n optionElement.classList.add('js-hide');\n }\n }\n};\nexport const datalistSelectOption = (component, inputElement, optionElement) => {\n var _a;\n const datalistElement = optionElement.closest('datalist');\n const optionText = ((_a = optionElement.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || optionElement.value;\n const inputName = inputElement.getAttribute('name') || '';\n const alternateInputName = `${inputName}Alt`;\n inputElement.value = optionText;\n inputElement.setAttribute('data-value', optionText);\n //inputElement.setAttribute('data-placeholder', optionText);\n inputElement.setAttribute('placeholder', optionText);\n // Make sure the value of the option is passed when in a form\n if (optionElement.value && optionElement.value !== optionText) {\n const alternateInput = component.querySelector(`input[name=\"${alternateInputName}\"]`);\n if (!alternateInput)\n component.insertAdjacentHTML('beforeend', `<input type=\"hidden\" name=\"${alternateInputName}\" value=\"${optionElement.value}\">`);\n else\n alternateInput.value = optionElement.value;\n }\n else {\n const alternateInput = component.querySelector(`input[name=\"${alternateInputName}\"]`);\n if (alternateInput)\n alternateInput.remove();\n }\n // Set the active value on the datalist option\n if (!datalistElement)\n return;\n for (const optionLoopElement of datalistElement.options) {\n if (optionLoopElement === optionElement)\n optionLoopElement.classList.add('active');\n else\n optionLoopElement.classList.remove('active');\n }\n const customEvent = new CustomEvent('option-selected', {\n detail: {\n title: optionText,\n value: optionElement.value || '',\n url: optionElement.hasAttribute('data-url') ? optionElement.getAttribute('data-url') || '' : '',\n },\n });\n component.dispatchEvent(customEvent);\n};\nexport default search;\n","import search, { filterDatalist, datalistSelectOption } from '../../modules/search';\nconst getIntegerAttribute = (element, attributeName, fallback) => {\n const value = Number.parseInt(element.getAttribute(attributeName) || '', 10);\n return Number.isNaN(value) ? fallback : value;\n};\nconst getOptionFromEvent = (event) => event.target instanceof HTMLElement ? event.target.closest('option') : null;\n// Data layer Web component created\nconst searchWindow = window;\nsearchWindow.dataLayer = searchWindow.dataLayer || [];\nsearchWindow.dataLayer.push({\n event: 'customElementRegistered',\n element: 'Search',\n});\nclass iamSearch extends HTMLElement {\n constructor() {\n super();\n const shadowRoot = this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.getAttribute('data-assets-location') || '/assets';\n const loadCSS = `@import \"${assetLocation}/css/components/search.component.css\";`;\n const template = document.createElement('template');\n template.innerHTML = /* HTML */ `\n <style>\n ${loadCSS}\n </style>\n <link rel=\"stylesheet\" href=\"https://kit.fontawesome.com/8bd0fca975.css\" crossorigin=\"anonymous\" />\n <span class=\"wrapper\">\n <span class=\"input__wrapper\">\n <slot></slot>\n <button class=\"clear-search btn btn-action\" type=\"button\"><i class=\"fa-light fa-times me-0\"></i></button>\n </span>\n <button class=\"suffix fa-regular fa-search\"></button>\n </span>\n <slot name=\"datalist\"></slot>\n `;\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n const shadowRoot = this.shadowRoot;\n if (!shadowRoot)\n return;\n let datalistElement = this.querySelector('datalist');\n const inputElement = this.querySelector('input');\n const suffixElement = shadowRoot.querySelector('.suffix');\n const clearBtn = shadowRoot.querySelector('.clear-search');\n let minLength = this.hasAttribute('data-min-length') ? getIntegerAttribute(this, 'data-min-length', 1) : 1;\n suffixElement === null || suffixElement === void 0 ? void 0 : suffixElement.setAttribute('class', `suffix ${this.hasAttribute('data-icon') ? this.getAttribute('data-icon') : 'fa-regular fa-search'}`);\n if (this.hasAttribute('data-url') && !this.hasAttribute('data-min-length')) {\n minLength = 3;\n }\n if (!inputElement || !suffixElement)\n return;\n // #region maintain the original placeholder value in a data attribute to allow for it to be reset when the field is emptied\n const originalPlaceholder = inputElement.getAttribute('placeholder');\n if (originalPlaceholder !== null)\n this.setAttribute('data-original-placeholder', originalPlaceholder);\n // #endregion\n // #region transform datalist into dropdown\n // Turn off the browser's default datalist functionality to allow for a custom implementation\n inputElement.setAttribute('autocomplete', 'off');\n inputElement.setAttribute('aria-autocomplete', 'none');\n if (inputElement && inputElement.hasAttribute('list')) {\n inputElement.setAttribute('data-list', inputElement.getAttribute('list') || '');\n inputElement.setAttribute('list', '');\n }\n if (!datalistElement) {\n datalistElement = document.createElement('datalist');\n const listID = `${inputElement === null || inputElement === void 0 ? void 0 : inputElement.getAttribute('name')}-list`;\n datalistElement.setAttribute('id', listID);\n inputElement === null || inputElement === void 0 ? void 0 : inputElement.setAttribute('data-list', listID);\n this.appendChild(datalistElement);\n }\n datalistElement.setAttribute('slot', 'datalist');\n datalistElement.querySelectorAll('option').forEach((option) => {\n option.setAttribute('tabindex', '0');\n if (option.textContent == '' && option.hasAttribute('value')) {\n option.textContent = option.getAttribute('value');\n }\n });\n datalistElement.addEventListener('click', (event) => {\n const optionElement = getOptionFromEvent(event);\n if (optionElement) {\n event.stopPropagation();\n event.preventDefault();\n if (document.activeElement instanceof HTMLElement)\n document.activeElement.blur();\n this.classList.remove('js-show-datalist');\n datalistSelectOption(this, inputElement, optionElement);\n }\n });\n // #endregion\n // #region control input field\n inputElement.addEventListener('input', () => {\n if (inputElement.value.length >= 1) {\n this.classList.add('has-value');\n }\n else {\n this.classList.remove('has-value');\n }\n if (inputElement.value.length >= minLength) {\n //inputElement.removeAttribute('data-value');\n this.classList.add('js-show-datalist');\n if (this.hasAttribute('data-url')) {\n void search(this, datalistElement, inputElement.value);\n }\n else {\n filterDatalist(datalistElement, inputElement.value);\n }\n }\n else {\n this.classList.remove('js-show-datalist');\n }\n });\n inputElement.addEventListener('focus', () => {\n if (inputElement.value == inputElement.getAttribute('data-value')) {\n const selectedValue = inputElement.getAttribute('data-value') || '';\n inputElement.value = '';\n inputElement.setAttribute('placeholder', selectedValue);\n this.classList.remove('js-show-datalist');\n }\n else if (inputElement.value.length >= minLength) {\n this.classList.add('js-show-datalist');\n }\n });\n inputElement.addEventListener('blur', () => {\n const selectedValue = inputElement.getAttribute('data-value');\n if (!inputElement.value && selectedValue) {\n inputElement.value = selectedValue;\n //inputElement.setAttribute('placeholder', inputElement.getAttribute('data-value'));\n //this.classList.remove('js-show-datalist');\n }\n // Set timeout to allow click event to fire on options before hiding the list again\n setTimeout(() => {\n this.classList.remove('js-force-show-datalist');\n this.classList.remove('js-show-datalist');\n }, 200);\n const placeholder = inputElement.getAttribute('data-placeholder');\n if (placeholder)\n inputElement.setAttribute('placeholder', placeholder);\n });\n // #endregion\n // #region control suffix button\n suffixElement.addEventListener('click', () => {\n const form = this.closest('form');\n if (form && !this.hasAttribute('data-prevent-submit')) {\n form.requestSubmit();\n }\n else {\n inputElement.focus();\n this.classList.add('js-force-show-datalist');\n }\n });\n // #endregion\n // #region keyboard navigation\n this.addEventListener('keydown', (event) => {\n var _a;\n switch (event.key) {\n case 'ArrowDown':\n //event.stopPropagation();\n //event.preventDefault();\n if (event && event.target instanceof HTMLElement && event.target == inputElement) {\n (_a = this.querySelector('datalist option:not(.js-hide)')) === null || _a === void 0 ? void 0 : _a.focus();\n }\n break;\n }\n /*\n if (event && event.target instanceof HTMLElement && event.target.closest('a, button, summary')) {\n const activeItem = document.activeElement;\n const prevIndex = Array.from(topLevelmenuItems).indexOf(activeItem) - 1;\n const nextIndex = Array.from(topLevelmenuItems).indexOf(activeItem) + 1;\n \n switch (\n event.keyCode // change to event.key to key to use the above variable\n ) {\n case 27: // Esc\n if (activeItem.closest('details')) {\n event.stopPropagation();\n event.preventDefault();\n activeItem.closest('details').removeAttribute('open');\n activeItem.closest('details').querySelector(':scope summary').focus();\n } else {\n event.stopPropagation();\n menuButton.focus();\n }\n \n break;\n case 32: // Space\n case 13: // Enter\n break;\n case 35: // end\n event.stopPropagation();\n event.preventDefault();\n \n this.querySelector('details[open]').removeAttribute('open');\n Array.from(menuItems)[menuItems.length - 1].focus();\n \n break;\n case 36: // home\n event.stopPropagation();\n event.preventDefault();\n \n this.querySelector('details[open]').removeAttribute('open');\n Array.from(menuItems)[0].focus();\n \n break;\n case 38: // up\n event.stopPropagation();\n event.preventDefault();\n \n if (Array.from(topLevelmenuItems).indexOf(activeItem) > -1) {\n if (Array.from(topLevelmenuItems)[prevIndex] != undefined)\n Array.from(topLevelmenuItems)[prevIndex].focus();\n else Array.from(topLevelmenuItems)[topLevelmenuItems.length - 1].focus();\n } else if (activeItem.closest('details')) {\n const subMenuItems = activeItem\n .closest('details')\n .querySelectorAll('a, button, :scope details > summary');\n subPrevIndex = Array.from(subMenuItems).indexOf(activeItem) - 1;\n \n if (Array.from(subMenuItems)[subPrevIndex] != undefined) Array.from(subMenuItems)[subPrevIndex].focus();\n else Array.from(subMenuItems)[subMenuItems.length - 1].focus();\n }\n \n break;\n case 40: // down\n event.stopPropagation();\n event.preventDefault();\n \n if (Array.from(topLevelmenuItems).indexOf(activeItem) > -1) {\n if (Array.from(topLevelmenuItems)[nextIndex] != undefined)\n Array.from(topLevelmenuItems)[nextIndex].focus();\n else Array.from(topLevelmenuItems)[0].focus();\n } else if (activeItem.closest('details')) {\n const subMenuItems = activeItem\n .closest('details')\n .querySelectorAll('a, button, :scope details > summary');\n subNextIndex = Array.from(subMenuItems).indexOf(activeItem) + 1;\n \n if (Array.from(subMenuItems)[subNextIndex] != undefined) Array.from(subMenuItems)[subNextIndex].focus();\n else Array.from(subMenuItems)[0].focus();\n }\n \n break;\n }\n }\n \n */\n });\n // #endregion\n // #region empty button\n clearBtn === null || clearBtn === void 0 ? void 0 : clearBtn.addEventListener('click', () => {\n this.classList.remove('js-show-datalist');\n inputElement.value = '';\n inputElement.removeAttribute('data-value');\n inputElement.focus();\n this.classList.remove('has-value');\n inputElement.setAttribute('placeholder', this.getAttribute('data-original-placeholder') || '');\n const inputName = inputElement.getAttribute('name');\n const alternateInput = inputName ? this.querySelector(`[name=\"${inputName}Alt\"]`) : null;\n alternateInput === null || alternateInput === void 0 ? void 0 : alternateInput.remove();\n datalistElement.querySelectorAll('option').forEach((option) => {\n option.classList.remove('active');\n });\n });\n }\n}\nexport default iamSearch;\n"],"names":["resolvePath","object","path","defaultValue","p","o","isTraversable","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","e","rejected","result","isRecord","getResultValue","item","key","toOptionText","appendDatalistOption","datalistElement","valueSchema","displaySchema","groupLabel","_a","_b","_c","_d","_e","_f","_g","resolvedValue","resolvedDisplay","fallbackValue","actualValue","displayValue","optionElement","getFormControls","component","getSearchSchema","attributeName","fallback","search","searchTerm","url","method","body","searchWindow","signal","requestOptions","input","name","responseData","loopSchema","loopValues","filterDatalist","error","datalistSelectOption","inputElement","optionText","alternateInputName","alternateInput","optionLoopElement","customEvent","getIntegerAttribute","element","getOptionFromEvent","event","iamSearch","shadowRoot","template","suffixElement","clearBtn","minLength","originalPlaceholder","listID","option","selectedValue","placeholder","form","inputName"],"mappings":";;;IAsIO,MAAMA,EAAc,CAACC,EAAQC,EAAMC,IAAiBD,EAEtD,MAAM,cAAc,EACpB,OAAQE,GAAMA,CAAC,EACf,OAAO,CAACC,EAAGD,IAAOC,EAAIA,EAAED,CAAC,EAAID,EAAeF,CAAM,EAC1CK,EAAiBD,GAAM,MAAM,QAAQA,CAAC,GAAMA,IAAM,MAAQ,CAAC,WAAY,QAAQ,EAAE,SAAS,OAAOA,CAAC,EC3I/G,IAAIE,EAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAA,CAAE,GAAG,MAAM,CACxE,CAAC,CACL,EAEA,MAAMY,EAAYR,GAAUA,IAAU,MAAQ,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAK,EACzFS,EAAiB,CAACC,EAAMC,IAASH,EAASE,CAAI,EAAIA,EAAKC,CAAG,EAAI,OAC9DC,EAAgBZ,GAAU,OAAOA,GAA6C,EAAE,EAAE,QAAQ;AAAA,EAAM,IAAI,EACpGa,EAAuB,CAACC,EAAiBJ,EAAMK,EAAaC,EAAeC,EAAa,KAAO,CACjG,IAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAC5B,MAAMC,EAAgBtC,EAAYuB,EAAMK,EAAa,MAAS,EACxDW,EAAkBvC,EAAYuB,EAAMM,EAAe,MAAS,EAC5DW,EAAgBlC,EAAciB,CAAI,EAAI,GAAKA,EAC3CkB,GAAeN,GAAMD,GAAMD,GAAMD,GAAMD,EAAKO,GAAqEhB,EAAeC,EAAM,OAAO,KAAO,MAAQQ,IAAO,OAASA,EAAKT,EAAeC,EAAM,IAAI,KAAO,MAAQS,IAAO,OAASA,EAAKO,KAAqB,MAAQN,IAAO,OAASA,EAAKX,EAAeC,EAAM,OAAO,KAAO,MAAQW,IAAO,OAASA,EAAKZ,EAAeC,EAAM,OAAO,KAAO,MAAQY,IAAO,OAASA,EAAKK,EAChaE,EAAejB,GAAcY,GAAMD,EAAKG,GAA2EjB,EAAeC,EAAM,OAAO,KAAO,MAAQa,IAAO,OAASA,EAAKd,EAAeC,EAAM,OAAO,KAAO,MAAQc,IAAO,OAASA,EAAKI,CAAW,EACpQ,GAAI,CAACC,EACD,OACJ,MAAMC,EAAgB,SAAS,cAAc,QAAQ,EACrDA,EAAc,MAAQ,OAAOF,CAAW,EACxCE,EAAc,YAAc,GAAGb,CAAU,GAAGY,CAAY,GACxDf,EAAgB,YAAYgB,CAAa,CAC7C,EACMC,EAAmBC,GAAc,MAAM,KAAKA,EAAU,iBAAiB,cAAc,CAAC,EACtFC,EAAkB,CAACD,EAAWE,EAAeC,IAAaH,EAAU,aAAaE,CAAa,EAAIF,EAAU,aAAaE,CAAa,GAAK,GAAKC,EAChJC,EAAS,CAACJ,EAAWlB,EAAiBuB,IAAe3C,EAAU,OAAQ,OAAQ,OAAQ,WAAa,CACtG,IAAI4C,EAAMN,EAAU,aAAa,UAAU,EAC3C,GAAI,CAACM,EACD,OACJ,MAAMC,EAASP,EAAU,aAAa,aAAa,GAAK,MAClDQ,EAAO,CAAA,EACPC,EAAe,OAEhBA,EAAa,aACdA,EAAa,WAAa,CAAA,GAE1BA,EAAa,WAAWH,CAAG,GAC3BG,EAAa,WAAWH,CAAG,EAAE,MAAK,EAEtCG,EAAa,WAAWH,CAAG,EAAI,IAAI,gBACnC,KAAM,CAAE,OAAAI,CAAM,EAAKD,EAAa,WAAWH,CAAG,EACxCK,EAAiB,CACnB,OAAAD,EACA,OAAAH,EACA,QAAS,IAAI,QAAQ,CACjB,eAAgB,mBAChB,OAAQ,kBACpB,CAAS,CACT,EACQA,EAAO,YAAW,IAAO,MACzBR,EAAgBC,CAAS,EAAE,QAASY,GAAU,CAC1C,MAAMC,EAAOD,EAAM,aAAa,MAAM,EAChC5C,EAAQ4C,EAAM,MAChBC,GAAQ7C,IACRsC,GAAO,GAAGA,EAAI,SAAS,GAAG,EAAI,IAAM,GAAG,GAAG,mBAAmBO,CAAI,CAAC,IAAI,mBAAmB7C,CAAK,CAAC,GAEvG,CAAC,GAGD+B,EAAgBC,CAAS,EAAE,QAASY,GAAU,CAC1C,MAAMC,EAAOD,EAAM,aAAa,MAAM,EAChC5C,EAAQ4C,EAAM,MAChBC,GAAQ7C,IACRwC,EAAKK,CAAI,EAAI7C,EAErB,CAAC,EACD2C,EAAe,KAAU,KAAK,UAAUH,CAAI,GAEhD,GAAI,CAEA,MAAMM,EAAgB,MADL,MAAM,MAAMR,EAAKK,CAAc,GACX,OAC/BI,EAAad,EAAgBD,EAAW,cAAe,MAAM,EAC7DjB,EAAckB,EAAgBD,EAAW,oBAAqB,OAAO,EACrEhB,EAAgBiB,EAAgBD,EAAW,sBAAuB,OAAO,EACzEgB,EAAa7D,EAAY2D,EAAcC,EAAY,CAAA,CAAE,EACvD,MAAM,QAAQC,CAAU,EACxBA,EAAW,QAAStC,GAAS,CACzBG,EAAqBC,EAAiBJ,EAAMK,EAAaC,CAAa,CAC1E,CAAC,EAEIR,EAASwC,CAAU,GACxB,OAAO,QAAQA,CAAU,EAAE,QAAQ,CAAC,CAACrC,EAAKX,CAAK,IAAM,CAC7C,MAAM,QAAQA,CAAK,GACnBA,EAAM,QAASU,GAAS,CACpBG,EAAqBC,EAAiBJ,EAAMK,EAAaC,EAAe,GAAGL,CAAG,IAAI,CACtF,CAAC,CAET,CAAC,EAELsC,EAAenC,EAAiBuB,CAAU,CAC9C,OACOa,EAAO,CACV,QAAQ,IAAIA,CAAK,CACrB,CACJ,CAAC,EACYD,EAAiB,CAACnC,EAAiBuB,IAAe,CAC3D,IAAInB,EACJ,UAAWY,KAAiBhB,EAAgB,WACnBI,EAAKY,EAAc,eAAiB,MAAQZ,IAAO,OAAS,OAASA,EAAG,KAAI,IAAOY,EAAc,OACvG,YAAW,EAAG,SAASO,EAAW,YAAW,CAAE,EAC1DP,EAAc,UAAU,OAAO,SAAS,EAGxCA,EAAc,UAAU,IAAI,SAAS,CAGjD,EACaqB,EAAuB,CAACnB,EAAWoB,EAActB,IAAkB,CAC5E,IAAIZ,EACJ,MAAMJ,EAAkBgB,EAAc,QAAQ,UAAU,EAClDuB,IAAenC,EAAKY,EAAc,eAAiB,MAAQZ,IAAO,OAAS,OAASA,EAAG,KAAI,IAAOY,EAAc,MAEhHwB,EAAqB,GADTF,EAAa,aAAa,MAAM,GAAK,EAChB,MAMvC,GALAA,EAAa,MAAQC,EACrBD,EAAa,aAAa,aAAcC,CAAU,EAElDD,EAAa,aAAa,cAAeC,CAAU,EAE/CvB,EAAc,OAASA,EAAc,QAAUuB,EAAY,CAC3D,MAAME,EAAiBvB,EAAU,cAAc,eAAesB,CAAkB,IAAI,EAC/EC,EAGDA,EAAe,MAAQzB,EAAc,MAFrCE,EAAU,mBAAmB,YAAa,8BAA8BsB,CAAkB,YAAYxB,EAAc,KAAK,IAAI,CAGrI,KACK,CACD,MAAMyB,EAAiBvB,EAAU,cAAc,eAAesB,CAAkB,IAAI,EAChFC,GACAA,EAAe,OAAM,CAC7B,CAEA,GAAI,CAACzC,EACD,OACJ,UAAW0C,KAAqB1C,EAAgB,QACxC0C,IAAsB1B,EACtB0B,EAAkB,UAAU,IAAI,QAAQ,EAExCA,EAAkB,UAAU,OAAO,QAAQ,EAEnD,MAAMC,EAAc,IAAI,YAAY,kBAAmB,CACnD,OAAQ,CACJ,MAAOJ,EACP,MAAOvB,EAAc,OAAS,GAC9B,IAAKA,EAAc,aAAa,UAAU,GAAIA,EAAc,aAAa,UAAU,GAAK,EACpG,CACA,CAAK,EACDE,EAAU,cAAcyB,CAAW,CACvC,ECtJMC,EAAsB,CAACC,EAASzB,EAAeC,IAAa,CAC9D,MAAMnC,EAAQ,OAAO,SAAS2D,EAAQ,aAAazB,CAAa,GAAK,GAAI,EAAE,EAC3E,OAAO,OAAO,MAAMlC,CAAK,EAAImC,EAAWnC,CAC5C,EACM4D,EAAsBC,GAAUA,EAAM,kBAAkB,YAAcA,EAAM,OAAO,QAAQ,QAAQ,EAAI,KAEvGpB,EAAe,OACrBA,EAAa,UAAYA,EAAa,WAAa,CAAA,EACnDA,EAAa,UAAU,KAAK,CACxB,MAAO,0BACP,QAAS,QACb,CAAC,EACD,MAAMqB,UAAkB,WAAY,CAChC,aAAc,CACV,MAAK,EACL,MAAMC,EAAa,KAAK,aAAa,CAAE,KAAM,MAAM,CAAE,EAC/B,SAAS,KAAK,aAAa,sBAAsB,EAEvE,MAAMC,EAAW,SAAS,cAAc,UAAU,EAClDA,EAAS,UAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAchCD,EAAW,YAAYC,EAAS,QAAQ,UAAU,EAAI,CAAC,CAC3D,CACA,mBAAoB,CAChB,MAAMD,EAAa,KAAK,WACxB,GAAI,CAACA,EACD,OACJ,IAAIjD,EAAkB,KAAK,cAAc,UAAU,EACnD,MAAMsC,EAAe,KAAK,cAAc,OAAO,EACzCa,EAAgBF,EAAW,cAAc,SAAS,EAClDG,EAAWH,EAAW,cAAc,eAAe,EACzD,IAAII,EAAY,KAAK,aAAa,iBAAiB,EAAIT,EAAoB,KAAM,kBAAmB,CAAC,EAAI,EAKzG,GAJ8DO,GAAc,aAAa,QAAS,UAAU,KAAK,aAAa,WAAW,EAAI,KAAK,aAAa,WAAW,EAAI,sBAAsB,EAAE,EAClM,KAAK,aAAa,UAAU,GAAK,CAAC,KAAK,aAAa,iBAAiB,IACrEE,EAAY,GAEZ,CAACf,GAAgB,CAACa,EAClB,OAEJ,MAAMG,EAAsBhB,EAAa,aAAa,aAAa,EAYnE,GAXIgB,IAAwB,MACxB,KAAK,aAAa,4BAA6BA,CAAmB,EAItEhB,EAAa,aAAa,eAAgB,KAAK,EAC/CA,EAAa,aAAa,oBAAqB,MAAM,EACjDA,GAAgBA,EAAa,aAAa,MAAM,IAChDA,EAAa,aAAa,YAAaA,EAAa,aAAa,MAAM,GAAK,EAAE,EAC9EA,EAAa,aAAa,OAAQ,EAAE,GAEpC,CAACtC,EAAiB,CAClBA,EAAkB,SAAS,cAAc,UAAU,EACnD,MAAMuD,EAAS,GAA+DjB,GAAa,aAAa,MAAM,CAAC,QAC/GtC,EAAgB,aAAa,KAAMuD,CAAM,EACmBjB,GAAa,aAAa,YAAaiB,CAAM,EACzG,KAAK,YAAYvD,CAAe,CACpC,CACAA,EAAgB,aAAa,OAAQ,UAAU,EAC/CA,EAAgB,iBAAiB,QAAQ,EAAE,QAASwD,GAAW,CAC3DA,EAAO,aAAa,WAAY,GAAG,EAC/BA,EAAO,aAAe,IAAMA,EAAO,aAAa,OAAO,IACvDA,EAAO,YAAcA,EAAO,aAAa,OAAO,EAExD,CAAC,EACDxD,EAAgB,iBAAiB,QAAU+C,GAAU,CACjD,MAAM/B,EAAgB8B,EAAmBC,CAAK,EAC1C/B,IACA+B,EAAM,gBAAe,EACrBA,EAAM,eAAc,EAChB,SAAS,yBAAyB,aAClC,SAAS,cAAc,KAAI,EAC/B,KAAK,UAAU,OAAO,kBAAkB,EACxCV,EAAqB,KAAMC,EAActB,CAAa,EAE9D,CAAC,EAGDsB,EAAa,iBAAiB,QAAS,IAAM,CACrCA,EAAa,MAAM,QAAU,EAC7B,KAAK,UAAU,IAAI,WAAW,EAG9B,KAAK,UAAU,OAAO,WAAW,EAEjCA,EAAa,MAAM,QAAUe,GAE7B,KAAK,UAAU,IAAI,kBAAkB,EACjC,KAAK,aAAa,UAAU,EACvB/B,EAAO,KAAMtB,EAAiBsC,EAAa,KAAK,EAGrDH,EAAenC,EAAiBsC,EAAa,KAAK,GAItD,KAAK,UAAU,OAAO,kBAAkB,CAEhD,CAAC,EACDA,EAAa,iBAAiB,QAAS,IAAM,CACzC,GAAIA,EAAa,OAASA,EAAa,aAAa,YAAY,EAAG,CAC/D,MAAMmB,EAAgBnB,EAAa,aAAa,YAAY,GAAK,GACjEA,EAAa,MAAQ,GACrBA,EAAa,aAAa,cAAemB,CAAa,EACtD,KAAK,UAAU,OAAO,kBAAkB,CAC5C,MACSnB,EAAa,MAAM,QAAUe,GAClC,KAAK,UAAU,IAAI,kBAAkB,CAE7C,CAAC,EACDf,EAAa,iBAAiB,OAAQ,IAAM,CACxC,MAAMmB,EAAgBnB,EAAa,aAAa,YAAY,EACxD,CAACA,EAAa,OAASmB,IACvBnB,EAAa,MAAQmB,GAKzB,WAAW,IAAM,CACb,KAAK,UAAU,OAAO,wBAAwB,EAC9C,KAAK,UAAU,OAAO,kBAAkB,CAC5C,EAAG,GAAG,EACN,MAAMC,EAAcpB,EAAa,aAAa,kBAAkB,EAC5DoB,GACApB,EAAa,aAAa,cAAeoB,CAAW,CAC5D,CAAC,EAGDP,EAAc,iBAAiB,QAAS,IAAM,CAC1C,MAAMQ,EAAO,KAAK,QAAQ,MAAM,EAC5BA,GAAQ,CAAC,KAAK,aAAa,qBAAqB,EAChDA,EAAK,cAAa,GAGlBrB,EAAa,MAAK,EAClB,KAAK,UAAU,IAAI,wBAAwB,EAEnD,CAAC,EAGD,KAAK,iBAAiB,UAAYS,GAAU,CACxC,IAAI3C,EACI2C,EAAM,MACL,aAGGA,GAASA,EAAM,kBAAkB,aAAeA,EAAM,QAAUT,KAC/DlC,EAAK,KAAK,cAAc,+BAA+B,KAAO,MAAQA,IAAO,QAAkBA,EAAG,MAAK,EAsFxH,CAAC,EAGmDgD,GAAS,iBAAiB,QAAS,IAAM,CACzF,KAAK,UAAU,OAAO,kBAAkB,EACxCd,EAAa,MAAQ,GACrBA,EAAa,gBAAgB,YAAY,EACzCA,EAAa,MAAK,EAClB,KAAK,UAAU,OAAO,WAAW,EACjCA,EAAa,aAAa,cAAe,KAAK,aAAa,2BAA2B,GAAK,EAAE,EAC7F,MAAMsB,EAAYtB,EAAa,aAAa,MAAM,EAC5CG,EAAiBmB,EAAY,KAAK,cAAc,UAAUA,CAAS,OAAO,EAAI,KACpBnB,GAAe,OAAM,EACrFzC,EAAgB,iBAAiB,QAAQ,EAAE,QAASwD,GAAW,CAC3DA,EAAO,UAAU,OAAO,QAAQ,CACpC,CAAC,CACL,CAAC,CACL,CACJ"}
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v7.8.2--beta5
2
+ * iamKey v7.8.2--beta6
3
3
  * Copyright 2022-2026 iamproperty
4
4
  */const a=e=>{window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:e})};a("iam-skeleton");class r extends HTMLElement{constructor(){var t;super(),this.attachShadow({mode:"open"}),document.body.hasAttribute("data-assets-location")&&document.body.getAttribute("data-assets-location");const o=document.createElement("template");o.innerHTML=`
5
5
  <style>
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v7.8.2--beta5
2
+ * iamKey v7.8.2--beta6
3
3
  * Copyright 2022-2026 iamproperty
4
4
  */window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:"Slider"});class f extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),document.body.hasAttribute("data-assets-location")&&document.body.getAttribute("data-assets-location");const t=document.createElement("template");t.innerHTML=`
5
5
  <style>
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v7.8.2--beta5
2
+ * iamKey v7.8.2--beta6
3
3
  * Copyright 2022-2026 iamproperty
4
4
  */class u extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),document.body.hasAttribute("data-assets-location")&&document.body.getAttribute("data-assets-location");const r=document.createElement("template");r.innerHTML=`
5
5
  <style>