@iamproperty/components 7.8.2--beta1 → 7.8.2--beta2

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 (153) hide show
  1. package/assets/css/components/modal.component.css +1 -1
  2. package/assets/css/components/modal.component.css.map +1 -1
  3. package/assets/css/components/video-card.component.css +1 -1
  4. package/assets/css/components/video-card.component.css.map +1 -1
  5. package/assets/css/components/video-modal.component.css +1 -1
  6. package/assets/css/components/video-modal.component.css.map +1 -1
  7. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  8. package/assets/js/components/actionbar/actionbar.component.min.js +1 -1
  9. package/assets/js/components/address-lookup/address-lookup.component.min.js +3 -3
  10. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  11. package/assets/js/components/advanced-select/advanced-select.component.min.js +3 -3
  12. package/assets/js/components/advanced-select/advanced-select.component.min.js.map +1 -1
  13. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  14. package/assets/js/components/banner/banner.component.min.js +1 -1
  15. package/assets/js/components/barchart/barchart.component.min.js +1 -1
  16. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  17. package/assets/js/components/bone/bone.component.min.js +1 -1
  18. package/assets/js/components/button/button.component.min.js +1 -1
  19. package/assets/js/components/calendar/calendar.component.min.js +1 -1
  20. package/assets/js/components/card/card.component.min.js +6 -6
  21. package/assets/js/components/card/card.component.min.js.map +1 -1
  22. package/assets/js/components/carousel/carousel.component.min.js +1 -1
  23. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
  24. package/assets/js/components/config/config.component.min.js +1 -1
  25. package/assets/js/components/content/content.component.min.js +1 -1
  26. package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
  27. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +1 -1
  28. package/assets/js/components/fileupload/fileupload.component.min.js +1 -1
  29. package/assets/js/components/filter-card/filter-card.component.min.js +4 -4
  30. package/assets/js/components/filter-card/filter-card.component.min.js.map +1 -1
  31. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  32. package/assets/js/components/form/form.component.min.js +1 -1
  33. package/assets/js/components/header/header.component.min.js +1 -1
  34. package/assets/js/components/inline-edit/inline-edit.component.min.js +1 -1
  35. package/assets/js/components/input/input.component.min.js +1 -1
  36. package/assets/js/components/input-range/input-range.component.min.js +1 -1
  37. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  38. package/assets/js/components/menu/menu.component.min.js +1 -1
  39. package/assets/js/components/milestone/milestone.component.min.js +1 -1
  40. package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
  41. package/assets/js/components/modal/modal.component.min.js +2 -2
  42. package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
  43. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +1 -1
  44. package/assets/js/components/multiselect/multiselect.component.js +14 -1
  45. package/assets/js/components/multiselect/multiselect.component.min.js +3 -3
  46. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
  47. package/assets/js/components/nav/nav.component.min.js +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 +4 -4
  56. package/assets/js/components/record-card/record-card.component.min.js.map +1 -1
  57. package/assets/js/components/search/search.component.min.js +5 -5
  58. package/assets/js/components/search/search.component.min.js.map +1 -1
  59. package/assets/js/components/skeleton/skeleton.component.min.js +1 -1
  60. package/assets/js/components/slider/slider.component.min.js +1 -1
  61. package/assets/js/components/split-button/split-button.component.min.js +1 -1
  62. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +4 -4
  63. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
  64. package/assets/js/components/std-nav/std-nav.component.min.js +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 +1 -1
  73. package/assets/js/components/tooltip/tooltip.component.min.js +1 -1
  74. package/assets/js/components/video/video.component.min.js +1 -1
  75. package/assets/js/components/video-card/video-card.component.min.js +6 -6
  76. package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
  77. package/assets/js/components/video-modal/video-modal.component.min.js +2 -2
  78. package/assets/js/components/word-count/word-count.component.min.js +1 -1
  79. package/assets/js/modules/advanced-select.js +6 -3
  80. package/assets/js/modules/advanced-select.test.js +28 -0
  81. package/assets/js/modules/applied-filters.test.js +21 -0
  82. package/assets/js/modules/card.module.js +3 -2
  83. package/assets/js/modules/card.module.test.js +20 -0
  84. package/assets/js/modules/carousel.test.js +18 -0
  85. package/assets/js/modules/chart.module.test.js +22 -0
  86. package/assets/js/modules/chart.test.js +15 -0
  87. package/assets/js/modules/content.test.js +20 -0
  88. package/assets/js/modules/data-layer.test.js +12 -0
  89. package/assets/js/modules/dialogs.test.js +13 -0
  90. package/assets/js/modules/drawer.test.js +16 -0
  91. package/assets/js/modules/dropdown.test.js +31 -0
  92. package/assets/js/modules/dynamicEvents.test.js +19 -0
  93. package/assets/js/modules/fileupload.test.js +17 -0
  94. package/assets/js/modules/filterlist.test.js +18 -0
  95. package/assets/js/modules/{helper.test.js → helpers.test.js} +42 -2
  96. package/assets/js/modules/integration-tests.test.js +12 -0
  97. package/assets/js/modules/milestone-group.test.js +18 -0
  98. package/assets/js/modules/milestone.test.js +31 -0
  99. package/assets/js/modules/modal.test.js +18 -0
  100. package/assets/js/modules/nav.test.js +37 -0
  101. package/assets/js/modules/notification.test.js +11 -0
  102. package/assets/js/modules/orderablelist.test.js +15 -0
  103. package/assets/js/modules/pagination.test.js +21 -0
  104. package/assets/js/modules/password.test.js +33 -0
  105. package/assets/js/modules/table.test.js +42 -0
  106. package/assets/js/modules/tabs.test.js +23 -0
  107. package/assets/js/modules/test-dom.js +725 -0
  108. package/assets/js/modules/test-globals.js +7 -0
  109. package/assets/js/modules/test-utils.js +26 -0
  110. package/assets/js/modules/test.js +20 -1
  111. package/assets/js/modules/testimonial.test.js +14 -0
  112. package/assets/js/modules/videos.test.js +37 -0
  113. package/assets/js/scripts.bundle.js +1 -1
  114. package/assets/js/scripts.bundle.min.js +1 -1
  115. package/assets/sass/components/modal.component.scss +1 -2
  116. package/assets/ts/components/multiselect/multiselect.component.ts +20 -1
  117. package/assets/ts/modules/advanced-select.test.ts +33 -0
  118. package/assets/ts/modules/advanced-select.ts +6 -2
  119. package/assets/ts/modules/applied-filters.test.ts +25 -0
  120. package/assets/ts/modules/card.module.test.ts +24 -0
  121. package/assets/ts/modules/card.module.ts +2 -1
  122. package/assets/ts/modules/carousel.test.ts +27 -0
  123. package/assets/ts/modules/chart.module.test.ts +26 -0
  124. package/assets/ts/modules/chart.test.ts +19 -0
  125. package/assets/ts/modules/content.test.ts +24 -0
  126. package/assets/ts/modules/data-layer.test.ts +15 -0
  127. package/assets/ts/modules/dialogs.test.ts +17 -0
  128. package/assets/ts/modules/drawer.test.ts +20 -0
  129. package/assets/ts/modules/dropdown.test.ts +38 -0
  130. package/assets/ts/modules/dynamicEvents.test.ts +23 -0
  131. package/assets/ts/modules/fileupload.test.ts +21 -0
  132. package/assets/ts/modules/filterlist.test.ts +22 -0
  133. package/assets/ts/modules/{helper.test.ts → helpers.test.ts} +63 -2
  134. package/assets/ts/modules/integration-tests.test.ts +15 -0
  135. package/assets/ts/modules/milestone-group.test.ts +22 -0
  136. package/assets/ts/modules/milestone.test.ts +35 -0
  137. package/assets/ts/modules/modal.test.ts +22 -0
  138. package/assets/ts/modules/nav.test.ts +41 -0
  139. package/assets/ts/modules/notification.test.ts +15 -0
  140. package/assets/ts/modules/orderablelist.test.ts +19 -0
  141. package/assets/ts/modules/pagination.test.ts +25 -0
  142. package/assets/ts/modules/password.test.ts +40 -0
  143. package/assets/ts/modules/table.test.ts +57 -0
  144. package/assets/ts/modules/tabs.test.ts +27 -0
  145. package/assets/ts/modules/test-dom.ts +798 -0
  146. package/assets/ts/modules/test-globals.ts +7 -0
  147. package/assets/ts/modules/test-utils.ts +29 -0
  148. package/assets/ts/modules/test.ts +28 -1
  149. package/assets/ts/modules/testimonial.test.ts +17 -0
  150. package/assets/ts/modules/videos.test.ts +33 -0
  151. package/dist/components.es.js +24 -24
  152. package/dist/components.umd.js +109 -109
  153. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v7.8.2--beta1
2
+ * iamKey v7.8.2--beta2
3
3
  * Copyright 2022-2026 iamproperty
4
4
  */const b=r=>{window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:r})};var s=function(r,t,o,e){function i(a){return a instanceof o?a:new o(function(c){c(a)})}return new(o||(o=Promise))(function(a,c){function m(n){try{l(e.next(n))}catch(d){c(d)}}function p(n){try{l(e.throw(n))}catch(d){c(d)}}function l(n){n.done?a(n.value):i(n.value).then(m,p)}l((e=e.apply(r,t||[])).next())})};const g=`<div class="video-wrapper">
5
5
  <slot name="video"></slot>
@@ -11,7 +11,7 @@
11
11
  <style>
12
12
  ${this.hasAttribute("css")?`@import "${this.getAttribute("css")}";`:""}
13
13
 
14
- @layer elements{body:not(.js-enabled) dialog:not([open]):target{display:block}dialog,[popover]{--dialog-padding: 0.5rem;--mh-padding-inline: var(--dialog-padding);color:inherit;width:fit-content;height:fit-content;border:none;overscroll-behavior:contain;outline:var(--contrast-outline-width, 0px) solid var(--colour-primary);font-size:1rem;background:var(--dropdown-bg);margin-block:var(--dropdown-margin-block);padding:var(--dialog-padding);border-radius:var(--dropdown-border-radius);box-shadow:var(--dropdown-box-shadow)}dialog>*:last-child,[popover]>*:last-child{margin-bottom:0}dialog>:is(p):last-child,[popover]>:is(p):last-child{padding-bottom:0}dialog[open]:has(iam-modal){--modal-inner-dialog-display: contents;place-self:center}@media(prefers-color-scheme: light){dialog[open]:has(iam-modal){color-scheme:light;--colour-body: #595959;--colour-heading: var(--colour-primary-theme)}}dialog::backdrop{background:rgba(0,0,0,.3);backdrop-filter:blur(4px);overscroll-behavior:contain}dialog[open],[popover]:popover-open{display:flex;flex-direction:column}*:not(.dialog__wrapper)>dialog[open],*:not(.dialog__wrapper)>[popover]:popover-open{overflow-y:auto;width:90vw;max-width:20.25rem;max-height:min(90vh,47rem);overscroll-behavior:contain}@media screen and (min-width: 36em){*:not(.dialog__wrapper)>dialog[open],*:not(.dialog__wrapper)>[popover]:popover-open{min-width:20.9375rem;width:fit-content;max-width:42.875rem}}@media screen and (min-width: 62em){*:not(.dialog__wrapper)>dialog[open],*:not(.dialog__wrapper)>[popover]:popover-open{min-width:28.375rem;width:fit-content;max-width:46rem}}details.bg-light{margin-inline:calc(var(--dialog-padding)*-1);padding-inline:var(--dialog-padding)}}@layer elements{button{border-radius:0;text-transform:none;margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button:focus:not(:focus-visible){outline:0}:is(button,[type=button],[type=reset],[type=submit],[role=button]){-webkit-appearance:button;&:not(:disabled){cursor:pointer}}.btn{--btn-margin: 1rem;--btn-padding-block: 0.75rem;--btn-padding-inline: 2.5rem;--btn-border-width: 2px;--btn-font-size: 1.125rem;--btn-line-height: 1.25rem;display:inline-block;font-weight:bold;text-align:left;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;color:var(--colour-btn);font-size:var(--btn-font-size);line-height:var(--btn-line-height);padding:var(--btn-padding-block) var(--btn-padding-inline);border-radius:1.5rem;margin-bottom:var(--btn-margin);background:none;transition:border .5s,background .5s,color .5s;height:auto;max-width:fit-content;appearance:none;white-space:nowrap;&:not(.btn-secondary)[class*=colour-]{--colour-btn-bg: var(--colour);--colour-btn-border: var(--colour)}&:is(.colour-primary,.colour-dark,.colour-danger,.colour-black){--colour-btn: #fcfcfc}&:not(.border-0){background:var(--colour-btn-bg);border:var(--btn-border-width) solid var(--colour-btn-border)}&:not(:last-child){margin-right:var(--btn-margin)}}@media screen and (min-width: 36em){.btn{--btn-margin: 1.5rem}}a:is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active) .btn,.btn:is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active){outline:0;text-decoration:none;background:var(--colour-btn-bg-hover);color:var(--colour-btn-hover);border-radius:1.5rem}a:is(:active,.active):not([disabled]) .btn,.btn:is(:active,.active):not([disabled]){filter:brightness(85%);transition:background .1s,color .1s;color:var(--colour-btn);border-radius:1.5rem}a:disabled .btn,.btn:disabled,[disabled] .btn,.btn[disabled]{opacity:.4;cursor:not-allowed}.btn.btn-complete{--colour: var(--colour-success);--colour-btn-bg-hover: var(--colour);--colour-btn-border-hover: var(--colour);--colour-btn-hover: var(--colour-primary-theme);--colour-btn-bg: var(--colour);--colour-btn-border: var(--colour);position:relative;padding-left:3.5rem;padding-right:3.5rem}a:is(:hover,:focus,.hover):not([disabled],:active,.active) .btn.btn-complete,.btn.btn-complete:is(:hover,:focus,.hover):not([disabled],:active,.active){padding-left:2.5rem;padding-right:2.5rem;&:before{content:"\uF00C";font-family:var(--fa-family-classic);margin-right:1rem;font-style:inherit;width:1rem;display:inline-block;height:var(--btn-line-height);vertical-align:bottom}}.btn.btn-sm{--btn-padding-block: 0.5rem;--btn-padding-inline: 2rem;--btn-margin: 0.5rem;--btn-font-size: 1rem}.btn{&[class*=fa-]:before{content:var(--fa);font-family:var(--fa-family-classic)}&[class*=fa-after]{padding-right:4rem}&[class*=fa-after]:before{margin-right:0;margin-right:.375rem;position:absolute;right:1.5rem;top:50%;transform:translate(0, -50%)}&:not(.btn-compact):before{margin-right:1rem}i[class*=fa-]{--fa-width: 1em;font-family:var(--fa-family-classic);margin-right:1rem;line-height:1em;font-style:inherit;&:not(:first-child){margin-left:1rem;margin-right:0}}}.btn.btn--prompt{&:after{content:"";height:var(--btn-line-height);width:1rem;display:inline-block;background:currentColor;mask-image:var(--icon-arrow);mask-size:100%;mask-repeat:no-repeat;mask-position:50% 50%;-webkit-mask-image:var(--icon-arrow);-webkit-mask-size:100%;-webkit-mask-repeat:no-repeat;-webkit-mask-position:50% 50%;vertical-align:bottom;margin-left:1rem}}a:is(:hover,:focus,.hover):not([disabled],:active,.active) .btn.btn--prompt,.btn.btn--prompt:is(:hover,:focus,.hover):not([disabled],:active,.active){&:after{margin-left:1.5rem;margin-right:-0.5rem}}.btn-filter{&:after{content:"\uF1DE";display:inline-block;margin-left:1em;margin-bottom:-0.15em;height:1em;width:1em;z-index:var(--index-focus);color:currentColor;font-weight:300;font-family:var(--fa-family-classic)}}}@layer elements{.btn-secondary{color:var(--colour-btn-secondary);&:not(.border-0){background:var(--colour-btn-secondary-bg);border:2px solid var(--colour-btn-secondary-border)}}a:is(:hover,:focus,.hover,:active,.active):not([disabled]) .btn-secondary,.btn-secondary:is(:hover,:focus,.hover,:focus-within,:active,.active):not([disabled]){background:var(--colour-btn-secondary-bg-hover);color:var(--colour-btn-secondary-hover)}}@layer elements{.btn.btn-tertiary{background-color:transparent;border:none;color:var(--colour-link);margin:0 var(--btn-margin) var(--btn-margin) 0;padding:0;font-size:1.125rem;font-weight:normal;line-height:1.5rem;min-height:1.5rem;position:relative;&:after{position:absolute;content:"";top:100%;left:50%;height:2px;width:100%;transform:translate(-50%, 0);background:var(--colour-underline);transition:width .5s}&.text-decoration-none:after{width:0%}&[class*=fa-]{margin-left:0;margin-right:.5rem}&[class*=fa-]:not(:first-child){margin-left:.5rem;margin-right:0}&:is(:hover,:focus,.hover,:focus-within):not([disabled],:disabled,:active,.active){&:after{width:60% !important}}&:is(:active,.active):not([disabled],:disabled){color:var(--colour-active)}}}@layer elements{.btn-action{--btn-border-width: 1px;--btn-padding-block: 0.3125rem /* 5px */;--btn-padding-inline: 0.3125rem /* 5px */;--btn-margin: 0.5rem;border-radius:.25rem !important;font-weight:400 !important;font-size:1rem;line-height:1.25rem;&:not(.btn-primary){color:var(--colour-heading)}&:not(.btn-primary):not(.border-0){background-color:var(--colour-canvas-2);border:var(--btn-border-width) solid var(--colour-muted)}&.btn[class*=fa-]:before{content:var(--fa);margin-right:.375rem}&.icon-only{position:relative;text-indent:-300vw;overflow:hidden;min-width:1.75rem;&:before{position:absolute;left:0;top:0;min-width:1.75rem;text-align:center;text-indent:0;padding-inline:.25rem;line-height:1.85rem}}a:not(.btn-primary):is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active) &,&:not(.btn-primary):is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active){background:var(--colour-btn-action-hover-bg)}.btn-primary:is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active) &,&.btn-primary:is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active){filter:brightness(90%);background:var(--colour-btn-bg);border:var(--btn-border-width) solid var(--colour-btn-border);color:var(--colour-btn)}a:is(:active,.active):not([disabled]):not(.btn-primary) &,&:is(:active,.active):not([disabled]):not(.btn-primary){filter:brightness(85%);transition:all .1s;color:var(--colour-heading)}}.btn-action:not(.btn-compact).fa-compact-only:before{display:none !important}}@layer elements{.btn-compact{--compact-size: 3rem;padding:0 !important;margin-bottom:.5rem;text-align:center;width:var(--compact-size);min-width:var(--compact-size);max-width:var(--compact-size);height:var(--compact-size) !important;min-height:var(--compact-size) !important;max-height:var(--compact-size) !important;align-content:center;line-height:1 !important;text-indent:-500px;overflow:hidden;position:relative;font-size:1rem;&:not(:last-child){margin-right:.5rem}&:before{content:var(--fa);position:absolute;display:block;top:0;left:0;width:100%;height:100%;text-indent:0;line-height:calc(var(--compact-size) - .25rem);font-weight:900}[class*=fa-]:before{line-height:calc(var(--compact-size) - .25rem);@container style(--theme: dark){color:white}}&.btn-sm{--compact-size: 2.5rem;font-size:1rem;padding:0 !important}&.btn-action{--compact-size: 2rem;font-size:1rem;&:before{font-size:1em;font-weight:400}}&.btn-secondary{--colour-btn-bg: transparent;--colour-btn-border: transparent;border-color:transparent;&:not([class*=colour-]){--colour: var(--colour-light)}}&.btn-secondary:is(:hover,:focus,.hover,:active,.active,[aria-expanded],:focus-within):not([disabled]):not(.btn-collapse){background-color:var(--colour);color:var(--colour-primary-theme);border-color:var(--colour);&:is(.colour-primary,.colour-dark,.colour-danger,.colour-black){color:var(--colour-inverted)}}&[data-number]{position:relative}&[data-number]:after{content:attr(data-number);position:absolute;top:.5em;z-index:99;background:var(--colour-danger);height:1.5em;width:1.5em;border-radius:50%;text-indent:0;left:50%;font-size:.5em;line-height:1.5em;text-align:center;color:white;letter-spacing:-0.1em;font-family:arial,sans-serif}}.btn-compact{&:is(.fa-left,.fa-chevron-left,.fa-right,.fa-chevron-right,.fa-up,.fa-chevron-up,.fa-down,.fa-chevron-down,.fa-plus,.fa-bars,.fa-edit,.fa-envelope,.fa-calendar){--iso-display: block;--iso-font-size: 1.5rem;--iso-border-radius: 50%;--iso-text-indent: -500px}}@container style(--font-body){.btn-compact{font-size:var(--iso-font-size, 0.6rem) !important;text-indent:var(--iso-text-indent, 0px);white-space:initial;&:not(.btn-action){border-radius:var(--iso-border-radius, 0.25rem) !important}&:before{display:var(--iso-display, none);font-family:monospace !important;content:var(--iso) !important}}}@container style(--fa-font-regular){.btn-compact{text-indent:-500px;font-size:1rem !important;&:not(.btn-action){border-radius:50% !important}&:before{font-family:"Font Awesome 7 Pro" !important;content:var(--fa) !important;display:block}}}}@layer elements{.btn[popovertarget]{position:relative;anchor-name:--button2;&>.fa-chevron-down{display:none}&:not(:has(i)):not(.no-icon):after{content:"";display:inline-block;margin-right:.25em;margin-left:1em;height:.8em;width:.8em;z-index:var(--index-focus);background:currentColor;mask-image:var(--icon-arrow);mask-size:100%;mask-repeat:no-repeat;mask-position:50% 50%;-webkit-mask-image:var(--icon-arrow);-webkit-mask-size:100%;-webkit-mask-repeat:no-repeat;-webkit-mask-position:50% 50%;transform:rotate(90deg)}&[aria-pressed]:after{transform:rotate(270deg)}}.btn:has(select){position:relative;padding:0;max-width:fit-content;min-width:fit-content;width:fit-content;select{all:unset !important;padding:var(--btn-padding-block) var(--btn-padding-inline) !important;padding-right:calc(var(--btn-padding-inline) + 2rem) !important;border-radius:1.5rem !important;appearance:none !important;background:none !important;border:none !important;color:currentColor !important;display:block;outline:none;font-weight:inherit !important;font-size:var(--btn-font-size) !important;line-height:var(--btn-line-height) !important;field-sizing:content !important;appearance:base-select !important}&:after{position:absolute;top:.625rem;right:1.5rem;content:"";height:1.5rem;width:1rem;display:inline-block;background:currentColor;mask-image:var(--icon-arrow);mask-size:100%;mask-repeat:no-repeat;mask-position:50% 50%;-webkit-mask-image:var(--icon-arrow);-webkit-mask-size:100%;-webkit-mask-repeat:no-repeat;-webkit-mask-position:50% 50%;vertical-align:bottom;margin-left:1rem;transform:rotate(90deg);pointer-events:none}}.btn-action:has(select){padding-block:0;padding-right:2rem;font-size:1em;select{margin:0rem 0rem !important;padding-right:2rem !important;margin-right:-2rem !important;font-size:1rem !important}&:after{top:.2rem;right:.5rem}}}@layer elements{.btn__group{display:flex;flex-direction:column;row-gap:var(--gap);reading-flow:source-order;margin-bottom:1.5rem;.btn-compact{max-width:fit-content;margin-inline:auto}}:where(.btn__group,iam-modal){reading-flow:source-order;.btn{margin-inline-end:0;width:100%;max-width:100%;text-align:center;white-space:normal;margin:0;&:not(:last-child){margin-right:0}}.btn-tertiary{max-width:fit-content;margin-block:0 !important;margin-inline:auto !important;order:3;reading-order:3}.btn-secondary{order:2;reading-order:2}.btn-primary{order:1;reading-order:1;margin:0;&:not(:last-child){margin:0}}}:is(iam-form,form) .btn__group{padding-top:1rem}@container (min-width: 36em){.btn__group{flex-direction:row;row-gap:0;gap:var(--gap);flex-wrap:wrap;.btn-tertiary{max-width:fit-content;margin-inline:0 !important;margin-block:auto;order:1}.btn-secondary{order:2}.btn-primary{order:3}.btn-compact{margin-inline:0;margin-block:auto}}:where(iam-modal,.btn__group){.btn{max-width:fit-content;white-space:nowrap;margin-block:auto}}.btn__group{.btn-tertiary{reading-order:1}.btn-secondary{reading-order:2}.btn-primary{reading-order:3}}iam-modal{.btn-tertiary{reading-order:3;order:1}.btn-secondary{order:2;reading-order:2}.btn-primary{order:3;reading-order:1}}.btn__group.text-end{justify-content:flex-end}:is(iam-form,form) .btn__group{justify-content:flex-end;padding-top:3rem}iam-modal .btn__group:last-child .btn,dialog .btn__group:last-child .btn{margin-bottom:0}}}:host{overscroll-behavior:contain;display:block;container-type:inline-size}::slotted(dialog){display:contents !important}::slotted(button){margin:0 !important}@layer components{dialog[open]{display:var(--modal-inner-dialog-display, block)}dialog{width:90vw;max-width:20.25rem;max-height:min(90vh,47rem);overscroll-behavior:contain;overflow-y:hidden;place-self:center}@media screen and (min-width: 36em){dialog{--dialog-padding: 2rem;min-width:20.9375rem;width:fit-content;max-width:42.875rem}}@media screen and (min-width: 62em){dialog{min-width:28.375rem;width:fit-content;max-width:46rem}}dialog::before{content:"";top:.75rem;bottom:auto;left:0;right:.5rem;height:calc(var(--dialog-padding) - .75rem);position:absolute;display:block;background:linear-gradient(0deg, transparent 0%, var(--colour-canvas-2) 100%);z-index:2}dialog::after{content:"";top:auto;bottom:.75rem;left:0;right:6px;height:calc(var(--dialog-padding) - .75rem);position:absolute;display:block;background:linear-gradient(180deg, transparent 0%, var(--colour-canvas-2) 100%);z-index:2}dialog .scroll{margin-inline:calc(var(--dialog-padding)*-1);margin-block:calc((var(--dialog-padding) - .75rem)*-1);padding-inline:var(--dialog-padding);padding-block:calc(var(--dialog-padding) - .75rem);height:100%;max-height:100%;overflow:auto;overscroll-behavior:contain;position:relative;z-index:1}dialog .scroll .fa-circle{display:none}dialog>button:first-child{position:absolute;top:.5rem;right:.5rem;z-index:var(--index-floating);margin:0}dialog>button:first-child:not(:hover,:focus,:active){background-color:var(--colour-canvas)}@container (min-width: 36em){dialog>button:first-child{top:calc(var(--dialog-padding) - .75rem);right:calc(var(--dialog-padding) - .75rem)}}dialog:has(.youtube-embed){padding:0 !important}dialog.dialog--fullwidth{max-width:69.5rem}dialog .btn__group{display:none}@media screen and (min-width: 36em){:host(.modal--sm) dialog[open]{min-width:20.9375rem;width:20.9375rem;max-width:20.9375rem}}@media screen and (min-width: 62em){:host(.modal--sm) dialog[open]{min-width:28.375rem;width:28.375rem;max-width:28.375rem}}@media screen and (min-width: 36em){:host(.modal--lg) dialog[open]{min-width:42.875rem;width:42.875rem;max-width:42.875rem}}@media screen and (min-width: 62em){:host(.modal--lg) dialog[open]{min-width:46rem;width:46rem;max-width:46rem}}dialog::backdrop{background:rgba(0,0,0,.3);backdrop-filter:blur(4px);overscroll-behavior:contain}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background-color:rgba(0,0,0,0);border-top:4px solid rgba(0,0,0,0)}::-webkit-scrollbar-thumb{background-color:#c1c1c1;width:6px;border-radius:3px}::slotted(p:last-child){padding-bottom:0 !important}::slotted(p:last-child){padding-bottom:0 !important}::slotted(:last-child){margin-bottom:0 !important}:host(:is([data-type=transactional],[data-type=acknowledgement])) dialog[open]{text-align:center}:host(:is([data-type=transactional],[data-type=acknowledgement])) dialog[open] .scroll>.fa-circle{display:var(--fa-display, block);line-height:1;font-size:3rem;height:3rem;width:3rem;margin-top:0;margin-bottom:0;line-height:1;color:var(--colour-heading);margin-inline:auto}@media screen and (min-width: 62em){:host(:is([data-type=transactional],[data-type=acknowledgement])) dialog[open] .scroll>.fa-circle{font-size:4rem;height:4rem;width:4rem}}:host(:is([data-type=transactional],[data-type=acknowledgement])) dialog[open] .scroll>.fa-circle:has(>i){position:relative}:host(:is([data-type=transactional],[data-type=acknowledgement])) dialog[open] .scroll>.fa-circle>i:before{position:absolute;top:0;left:50%;transform:scale(0.5) translate(-100%, 0)}:host(:is([data-type=transactional],[data-type=acknowledgement])) dialog[open]>button:first-child{display:none}:host(:is([data-type=transactional],[data-type=acknowledgement])) dialog[open] .btn__group{display:flex;justify-content:center;padding-top:2rem;margin-bottom:0}:host([data-type=acknowledgement]) dialog[open] .btn__group [data-cancel]{display:none}}@keyframes spin{to{rotate:1turn}}@layer utilities{.text-heading{color:var(--colour-heading) !important}.text-primary{color:var(--colour-primary) !important}.bg-primary{--bg-colour: var(--colour-primary) !important;background-color:var(--colour-primary) !important}.hover-primary:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-primary) !important;background-color:var(--colour-primary) !important}.colour-primary{--colour: var(--colour-primary) !important}.text-secondary{color:var(--colour-secondary) !important}.bg-secondary{--bg-colour: var(--colour-secondary) !important;background-color:var(--colour-secondary) !important}.hover-secondary:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-secondary) !important;background-color:var(--colour-secondary) !important}.colour-secondary{--colour: var(--colour-secondary) !important}.text-info{color:var(--colour-info) !important}.bg-info{--bg-colour: var(--colour-info) !important;background-color:var(--colour-info) !important}.hover-info:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-info) !important;background-color:var(--colour-info) !important}.colour-info{--colour: var(--colour-info) !important}.text-warning{color:var(--colour-warning) !important}.bg-warning{--bg-colour: var(--colour-warning) !important;background-color:var(--colour-warning) !important}.hover-warning:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-warning) !important;background-color:var(--colour-warning) !important}.colour-warning{--colour: var(--colour-warning) !important}.text-success{color:var(--colour-success) !important}.bg-success{--bg-colour: var(--colour-success) !important;background-color:var(--colour-success) !important}.hover-success:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-success) !important;background-color:var(--colour-success) !important}.colour-success{--colour: var(--colour-success) !important}.text-complete{color:var(--colour-complete) !important}.bg-complete{--bg-colour: var(--colour-complete) !important;background-color:var(--colour-complete) !important}.hover-complete:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-complete) !important;background-color:var(--colour-complete) !important}.colour-complete{--colour: var(--colour-complete) !important}.text-danger{color:var(--colour-danger) !important}.bg-danger{--bg-colour: var(--colour-danger) !important;background-color:var(--colour-danger) !important}.hover-danger:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-danger) !important;background-color:var(--colour-danger) !important}.colour-danger{--colour: var(--colour-danger) !important}.text-dark{color:var(--colour-dark) !important}.bg-dark{--bg-colour: var(--colour-dark) !important;background-color:var(--colour-dark) !important}.hover-dark:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-dark) !important;background-color:var(--colour-dark) !important}.colour-dark{--colour: var(--colour-dark) !important}.text-light{color:var(--colour-light) !important}.bg-light{--bg-colour: var(--colour-light) !important;background-color:var(--colour-light) !important}.hover-light:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-light) !important;background-color:var(--colour-light) !important}.colour-light{--colour: var(--colour-light) !important}.text-canvas{color:var(--colour-canvas) !important}.bg-canvas{--bg-colour: var(--colour-canvas) !important;background-color:var(--colour-canvas) !important}.hover-canvas:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-canvas) !important;background-color:var(--colour-canvas) !important}.colour-canvas{--colour: var(--colour-canvas) !important}.text-white{color:var(--colour-white) !important}.bg-white{--bg-colour: var(--colour-white) !important;background-color:var(--colour-white) !important}.hover-white:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-white) !important;background-color:var(--colour-white) !important}.colour-white{--colour: var(--colour-white) !important}.text-body{color:var(--colour-body) !important}.text-muted{color:var(--colour-muted) !important}}@layer components{.video-wrapper{display:block;position:relative;width:100%;height:auto;aspect-ratio:16/9;background-color:var(--colour-light);margin-bottom:2rem;cursor:pointer}.video-wrapper:before{font-family:var(--fa-family-classic);content:"\uF3F4";position:absolute;font-weight:900;color:var(--colour-heading);animation:spin 1.5s infinite steps(10);font-size:1.5em;top:50%;left:50%;translate:-50% -50%;z-index:1}.video-wrapper img{position:absolute;inset:0;z-index:3;width:calc(100% + 2px);height:100%;object-fit:cover;margin-inline:-1px}.video-wrapper button{pointer-events:none;position:absolute;top:50%;left:50%;z-index:4;transform:translate(-50%, -50%)}.video-wrapper:is(:hover,:focus):not(:active) button{--colour-btn-bg: var(--colour-white)!important;--colour-btn-border: var(--colour-white)!important}.video-wrapper:is(:active) button{filter:brightness(85%)}dialog .video-wrapper{margin-bottom:0}}::slotted(.embed){position:absolute;inset:0;z-index:4;aspect-ratio:16/9;width:calc(100% + 2px);height:100%;margin-inline:-1px;margin-block:0}@layer components{dialog{width:calc(100% - 6rem) !important;max-width:50rem !important;padding:0;aspect-ratio:16/9;overflow:hidden}dialog[open]::before{display:none}dialog[open]::after{display:none}dialog .video-wrapper button{display:none}}/*# sourceMappingURL=assets/css/components/video-modal.component.css.map */
14
+ @layer elements{body:not(.js-enabled) dialog:not([open]):target{display:block}dialog,[popover]{--dialog-padding: 0.5rem;--mh-padding-inline: var(--dialog-padding);color:inherit;width:fit-content;height:fit-content;border:none;overscroll-behavior:contain;outline:var(--contrast-outline-width, 0px) solid var(--colour-primary);font-size:1rem;background:var(--dropdown-bg);margin-block:var(--dropdown-margin-block);padding:var(--dialog-padding);border-radius:var(--dropdown-border-radius);box-shadow:var(--dropdown-box-shadow)}dialog>*:last-child,[popover]>*:last-child{margin-bottom:0}dialog>:is(p):last-child,[popover]>:is(p):last-child{padding-bottom:0}dialog[open]:has(iam-modal){--modal-inner-dialog-display: contents;place-self:center}@media(prefers-color-scheme: light){dialog[open]:has(iam-modal){color-scheme:light;--colour-body: #595959;--colour-heading: var(--colour-primary-theme)}}dialog::backdrop{background:rgba(0,0,0,.3);backdrop-filter:blur(4px);overscroll-behavior:contain}dialog[open],[popover]:popover-open{display:flex;flex-direction:column}*:not(.dialog__wrapper)>dialog[open],*:not(.dialog__wrapper)>[popover]:popover-open{overflow-y:auto;width:90vw;max-width:20.25rem;max-height:min(90vh,47rem);overscroll-behavior:contain}@media screen and (min-width: 36em){*:not(.dialog__wrapper)>dialog[open],*:not(.dialog__wrapper)>[popover]:popover-open{min-width:20.9375rem;width:fit-content;max-width:42.875rem}}@media screen and (min-width: 62em){*:not(.dialog__wrapper)>dialog[open],*:not(.dialog__wrapper)>[popover]:popover-open{min-width:28.375rem;width:fit-content;max-width:46rem}}details.bg-light{margin-inline:calc(var(--dialog-padding)*-1);padding-inline:var(--dialog-padding)}}@layer elements{button{border-radius:0;text-transform:none;margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button:focus:not(:focus-visible){outline:0}:is(button,[type=button],[type=reset],[type=submit],[role=button]){-webkit-appearance:button;&:not(:disabled){cursor:pointer}}.btn{--btn-margin: 1rem;--btn-padding-block: 0.75rem;--btn-padding-inline: 2.5rem;--btn-border-width: 2px;--btn-font-size: 1.125rem;--btn-line-height: 1.25rem;display:inline-block;font-weight:bold;text-align:left;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;color:var(--colour-btn);font-size:var(--btn-font-size);line-height:var(--btn-line-height);padding:var(--btn-padding-block) var(--btn-padding-inline);border-radius:1.5rem;margin-bottom:var(--btn-margin);background:none;transition:border .5s,background .5s,color .5s;height:auto;max-width:fit-content;appearance:none;white-space:nowrap;&:not(.btn-secondary)[class*=colour-]{--colour-btn-bg: var(--colour);--colour-btn-border: var(--colour)}&:is(.colour-primary,.colour-dark,.colour-danger,.colour-black){--colour-btn: #fcfcfc}&:not(.border-0){background:var(--colour-btn-bg);border:var(--btn-border-width) solid var(--colour-btn-border)}&:not(:last-child){margin-right:var(--btn-margin)}}@media screen and (min-width: 36em){.btn{--btn-margin: 1.5rem}}a:is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active) .btn,.btn:is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active){outline:0;text-decoration:none;background:var(--colour-btn-bg-hover);color:var(--colour-btn-hover);border-radius:1.5rem}a:is(:active,.active):not([disabled]) .btn,.btn:is(:active,.active):not([disabled]){filter:brightness(85%);transition:background .1s,color .1s;color:var(--colour-btn);border-radius:1.5rem}a:disabled .btn,.btn:disabled,[disabled] .btn,.btn[disabled]{opacity:.4;cursor:not-allowed}.btn.btn-complete{--colour: var(--colour-success);--colour-btn-bg-hover: var(--colour);--colour-btn-border-hover: var(--colour);--colour-btn-hover: var(--colour-primary-theme);--colour-btn-bg: var(--colour);--colour-btn-border: var(--colour);position:relative;padding-left:3.5rem;padding-right:3.5rem}a:is(:hover,:focus,.hover):not([disabled],:active,.active) .btn.btn-complete,.btn.btn-complete:is(:hover,:focus,.hover):not([disabled],:active,.active){padding-left:2.5rem;padding-right:2.5rem;&:before{content:"\uF00C";font-family:var(--fa-family-classic);margin-right:1rem;font-style:inherit;width:1rem;display:inline-block;height:var(--btn-line-height);vertical-align:bottom}}.btn.btn-sm{--btn-padding-block: 0.5rem;--btn-padding-inline: 2rem;--btn-margin: 0.5rem;--btn-font-size: 1rem}.btn{&[class*=fa-]:before{content:var(--fa);font-family:var(--fa-family-classic)}&[class*=fa-after]{padding-right:4rem}&[class*=fa-after]:before{margin-right:0;margin-right:.375rem;position:absolute;right:1.5rem;top:50%;transform:translate(0, -50%)}&:not(.btn-compact):before{margin-right:1rem}i[class*=fa-]{--fa-width: 1em;font-family:var(--fa-family-classic);margin-right:1rem;line-height:1em;font-style:inherit;&:not(:first-child){margin-left:1rem;margin-right:0}}}.btn.btn--prompt{&:after{content:"";height:var(--btn-line-height);width:1rem;display:inline-block;background:currentColor;mask-image:var(--icon-arrow);mask-size:100%;mask-repeat:no-repeat;mask-position:50% 50%;-webkit-mask-image:var(--icon-arrow);-webkit-mask-size:100%;-webkit-mask-repeat:no-repeat;-webkit-mask-position:50% 50%;vertical-align:bottom;margin-left:1rem}}a:is(:hover,:focus,.hover):not([disabled],:active,.active) .btn.btn--prompt,.btn.btn--prompt:is(:hover,:focus,.hover):not([disabled],:active,.active){&:after{margin-left:1.5rem;margin-right:-0.5rem}}.btn-filter{&:after{content:"\uF1DE";display:inline-block;margin-left:1em;margin-bottom:-0.15em;height:1em;width:1em;z-index:var(--index-focus);color:currentColor;font-weight:300;font-family:var(--fa-family-classic)}}}@layer elements{.btn-secondary{color:var(--colour-btn-secondary);&:not(.border-0){background:var(--colour-btn-secondary-bg);border:2px solid var(--colour-btn-secondary-border)}}a:is(:hover,:focus,.hover,:active,.active):not([disabled]) .btn-secondary,.btn-secondary:is(:hover,:focus,.hover,:focus-within,:active,.active):not([disabled]){background:var(--colour-btn-secondary-bg-hover);color:var(--colour-btn-secondary-hover)}}@layer elements{.btn.btn-tertiary{background-color:transparent;border:none;color:var(--colour-link);margin:0 var(--btn-margin) var(--btn-margin) 0;padding:0;font-size:1.125rem;font-weight:normal;line-height:1.5rem;min-height:1.5rem;position:relative;&:after{position:absolute;content:"";top:100%;left:50%;height:2px;width:100%;transform:translate(-50%, 0);background:var(--colour-underline);transition:width .5s}&.text-decoration-none:after{width:0%}&[class*=fa-]{margin-left:0;margin-right:.5rem}&[class*=fa-]:not(:first-child){margin-left:.5rem;margin-right:0}&:is(:hover,:focus,.hover,:focus-within):not([disabled],:disabled,:active,.active){&:after{width:60% !important}}&:is(:active,.active):not([disabled],:disabled){color:var(--colour-active)}}}@layer elements{.btn-action{--btn-border-width: 1px;--btn-padding-block: 0.3125rem /* 5px */;--btn-padding-inline: 0.3125rem /* 5px */;--btn-margin: 0.5rem;border-radius:.25rem !important;font-weight:400 !important;font-size:1rem;line-height:1.25rem;&:not(.btn-primary){color:var(--colour-heading)}&:not(.btn-primary):not(.border-0){background-color:var(--colour-canvas-2);border:var(--btn-border-width) solid var(--colour-muted)}&.btn[class*=fa-]:before{content:var(--fa);margin-right:.375rem}&.icon-only{position:relative;text-indent:-300vw;overflow:hidden;min-width:1.75rem;&:before{position:absolute;left:0;top:0;min-width:1.75rem;text-align:center;text-indent:0;padding-inline:.25rem;line-height:1.85rem}}a:not(.btn-primary):is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active) &,&:not(.btn-primary):is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active){background:var(--colour-btn-action-hover-bg)}.btn-primary:is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active) &,&.btn-primary:is(:hover,:focus,.hover,:focus-within):not([disabled],:active,.active){filter:brightness(90%);background:var(--colour-btn-bg);border:var(--btn-border-width) solid var(--colour-btn-border);color:var(--colour-btn)}a:is(:active,.active):not([disabled]):not(.btn-primary) &,&:is(:active,.active):not([disabled]):not(.btn-primary){filter:brightness(85%);transition:all .1s;color:var(--colour-heading)}}.btn-action:not(.btn-compact).fa-compact-only:before{display:none !important}}@layer elements{.btn-compact{--compact-size: 3rem;padding:0 !important;margin-bottom:.5rem;text-align:center;width:var(--compact-size);min-width:var(--compact-size);max-width:var(--compact-size);height:var(--compact-size) !important;min-height:var(--compact-size) !important;max-height:var(--compact-size) !important;align-content:center;line-height:1 !important;text-indent:-500px;overflow:hidden;position:relative;font-size:1rem;&:not(:last-child){margin-right:.5rem}&:before{content:var(--fa);position:absolute;display:block;top:0;left:0;width:100%;height:100%;text-indent:0;line-height:calc(var(--compact-size) - .25rem);font-weight:900}[class*=fa-]:before{line-height:calc(var(--compact-size) - .25rem);@container style(--theme: dark){color:white}}&.btn-sm{--compact-size: 2.5rem;font-size:1rem;padding:0 !important}&.btn-action{--compact-size: 2rem;font-size:1rem;&:before{font-size:1em;font-weight:400}}&.btn-secondary{--colour-btn-bg: transparent;--colour-btn-border: transparent;border-color:transparent;&:not([class*=colour-]){--colour: var(--colour-light)}}&.btn-secondary:is(:hover,:focus,.hover,:active,.active,[aria-expanded],:focus-within):not([disabled]):not(.btn-collapse){background-color:var(--colour);color:var(--colour-primary-theme);border-color:var(--colour);&:is(.colour-primary,.colour-dark,.colour-danger,.colour-black){color:var(--colour-inverted)}}&[data-number]{position:relative}&[data-number]:after{content:attr(data-number);position:absolute;top:.5em;z-index:99;background:var(--colour-danger);height:1.5em;width:1.5em;border-radius:50%;text-indent:0;left:50%;font-size:.5em;line-height:1.5em;text-align:center;color:white;letter-spacing:-0.1em;font-family:arial,sans-serif}}.btn-compact{&:is(.fa-left,.fa-chevron-left,.fa-right,.fa-chevron-right,.fa-up,.fa-chevron-up,.fa-down,.fa-chevron-down,.fa-plus,.fa-bars,.fa-edit,.fa-envelope,.fa-calendar){--iso-display: block;--iso-font-size: 1.5rem;--iso-border-radius: 50%;--iso-text-indent: -500px}}@container style(--font-body){.btn-compact{font-size:var(--iso-font-size, 0.6rem) !important;text-indent:var(--iso-text-indent, 0px);white-space:initial;&:not(.btn-action){border-radius:var(--iso-border-radius, 0.25rem) !important}&:before{display:var(--iso-display, none);font-family:monospace !important;content:var(--iso) !important}}}@container style(--fa-font-regular){.btn-compact{text-indent:-500px;font-size:1rem !important;&:not(.btn-action){border-radius:50% !important}&:before{font-family:"Font Awesome 7 Pro" !important;content:var(--fa) !important;display:block}}}}@layer elements{.btn[popovertarget]{position:relative;anchor-name:--button2;&>.fa-chevron-down{display:none}&:not(:has(i)):not(.no-icon):after{content:"";display:inline-block;margin-right:.25em;margin-left:1em;height:.8em;width:.8em;z-index:var(--index-focus);background:currentColor;mask-image:var(--icon-arrow);mask-size:100%;mask-repeat:no-repeat;mask-position:50% 50%;-webkit-mask-image:var(--icon-arrow);-webkit-mask-size:100%;-webkit-mask-repeat:no-repeat;-webkit-mask-position:50% 50%;transform:rotate(90deg)}&[aria-pressed]:after{transform:rotate(270deg)}}.btn:has(select){position:relative;padding:0;max-width:fit-content;min-width:fit-content;width:fit-content;select{all:unset !important;padding:var(--btn-padding-block) var(--btn-padding-inline) !important;padding-right:calc(var(--btn-padding-inline) + 2rem) !important;border-radius:1.5rem !important;appearance:none !important;background:none !important;border:none !important;color:currentColor !important;display:block;outline:none;font-weight:inherit !important;font-size:var(--btn-font-size) !important;line-height:var(--btn-line-height) !important;field-sizing:content !important;appearance:base-select !important}&:after{position:absolute;top:.625rem;right:1.5rem;content:"";height:1.5rem;width:1rem;display:inline-block;background:currentColor;mask-image:var(--icon-arrow);mask-size:100%;mask-repeat:no-repeat;mask-position:50% 50%;-webkit-mask-image:var(--icon-arrow);-webkit-mask-size:100%;-webkit-mask-repeat:no-repeat;-webkit-mask-position:50% 50%;vertical-align:bottom;margin-left:1rem;transform:rotate(90deg);pointer-events:none}}.btn-action:has(select){padding-block:0;padding-right:2rem;font-size:1em;select{margin:0rem 0rem !important;padding-right:2rem !important;margin-right:-2rem !important;font-size:1rem !important}&:after{top:.2rem;right:.5rem}}}@layer elements{.btn__group{display:flex;flex-direction:column;row-gap:var(--gap);reading-flow:source-order;margin-bottom:1.5rem;.btn-compact{max-width:fit-content;margin-inline:auto}}:where(.btn__group,iam-modal){reading-flow:source-order;.btn{margin-inline-end:0;width:100%;max-width:100%;text-align:center;white-space:normal;margin:0;&:not(:last-child){margin-right:0}}.btn-tertiary{max-width:fit-content;margin-block:0 !important;margin-inline:auto !important;order:3;reading-order:3}.btn-secondary{order:2;reading-order:2}.btn-primary{order:1;reading-order:1;margin:0;&:not(:last-child){margin:0}}}:is(iam-form,form) .btn__group{padding-top:1rem}@container (min-width: 36em){.btn__group{flex-direction:row;row-gap:0;gap:var(--gap);flex-wrap:wrap;.btn-tertiary{max-width:fit-content;margin-inline:0 !important;margin-block:auto;order:1}.btn-secondary{order:2}.btn-primary{order:3}.btn-compact{margin-inline:0;margin-block:auto}}:where(iam-modal,.btn__group){.btn{max-width:fit-content;white-space:nowrap;margin-block:auto}}.btn__group{.btn-tertiary{reading-order:1}.btn-secondary{reading-order:2}.btn-primary{reading-order:3}}iam-modal{.btn-tertiary{reading-order:3;order:1}.btn-secondary{order:2;reading-order:2}.btn-primary{order:3;reading-order:1}}.btn__group.text-end{justify-content:flex-end}:is(iam-form,form) .btn__group{justify-content:flex-end;padding-top:3rem}iam-modal .btn__group:last-child .btn,dialog .btn__group:last-child .btn{margin-bottom:0}}}:host{overscroll-behavior:contain;display:block;container-type:inline-size}::slotted(dialog){display:contents !important}::slotted(button){margin:0 !important}@layer components{dialog[open]{display:var(--modal-inner-dialog-display, block)}dialog{width:90vw;max-width:20.25rem;max-height:min(90vh,47rem);overscroll-behavior:contain;overflow-y:hidden;place-self:center}@media screen and (min-width: 36em){dialog{--dialog-padding: 2rem;min-width:20.9375rem;width:fit-content;max-width:42.875rem}}@media screen and (min-width: 62em){dialog{min-width:28.375rem;width:fit-content;max-width:46rem}}dialog::before{content:"";top:.75rem;bottom:auto;left:0;right:.5rem;height:calc(var(--dialog-padding) - .75rem);position:absolute;display:block;background:linear-gradient(0deg, transparent 0%, var(--colour-canvas-2) 100%);z-index:2}dialog::after{content:"";top:auto;bottom:.75rem;left:0;right:6px;height:calc(var(--dialog-padding) - .75rem);position:absolute;display:block;background:linear-gradient(180deg, transparent 0%, var(--colour-canvas-2) 100%);z-index:2}dialog .scroll{margin-inline:calc(var(--dialog-padding)*-1);margin-block:calc((var(--dialog-padding) - .75rem)*-1);padding-inline:var(--dialog-padding);padding-block:calc(var(--dialog-padding) - .75rem);height:100%;max-height:min(90vh,47rem);overflow:auto;overscroll-behavior:contain;position:relative;z-index:1}dialog .scroll .fa-circle{display:none}dialog>button:first-child{position:absolute;top:.5rem;right:.5rem;z-index:var(--index-floating);margin:0}dialog>button:first-child:not(:hover,:focus,:active){background-color:var(--colour-canvas)}@container (min-width: 36em){dialog>button:first-child{top:calc(var(--dialog-padding) - .75rem);right:calc(var(--dialog-padding) - .75rem)}}dialog:has(.youtube-embed){padding:0 !important}dialog.dialog--fullwidth{max-width:69.5rem}dialog .btn__group{display:none}@media screen and (min-width: 36em){:host(.modal--sm) dialog[open]{min-width:20.9375rem;width:20.9375rem;max-width:20.9375rem}}@media screen and (min-width: 62em){:host(.modal--sm) dialog[open]{min-width:28.375rem;width:28.375rem;max-width:28.375rem}}@media screen and (min-width: 36em){:host(.modal--lg) dialog[open]{min-width:42.875rem;width:42.875rem;max-width:42.875rem}}@media screen and (min-width: 62em){:host(.modal--lg) dialog[open]{min-width:46rem;width:46rem;max-width:46rem}}dialog::backdrop{background:rgba(0,0,0,.3);backdrop-filter:blur(4px);overscroll-behavior:contain}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background-color:rgba(0,0,0,0);border-top:4px solid rgba(0,0,0,0)}::-webkit-scrollbar-thumb{background-color:#c1c1c1;width:6px;border-radius:3px}::slotted(p:last-child){padding-bottom:0 !important}::slotted(p:last-child){padding-bottom:0 !important}::slotted(:last-child){margin-bottom:0 !important}:host(:is([data-type=transactional],[data-type=acknowledgement])) dialog[open]{text-align:center}:host(:is([data-type=transactional],[data-type=acknowledgement])) dialog[open] .scroll>.fa-circle{display:var(--fa-display, block);line-height:1;font-size:3rem;height:3rem;width:3rem;margin-top:0;margin-bottom:0;line-height:1;color:var(--colour-heading);margin-inline:auto}@media screen and (min-width: 62em){:host(:is([data-type=transactional],[data-type=acknowledgement])) dialog[open] .scroll>.fa-circle{font-size:4rem;height:4rem;width:4rem}}:host(:is([data-type=transactional],[data-type=acknowledgement])) dialog[open] .scroll>.fa-circle:has(>i){position:relative}:host(:is([data-type=transactional],[data-type=acknowledgement])) dialog[open] .scroll>.fa-circle>i:before{position:absolute;top:0;left:50%;transform:scale(0.5) translate(-100%, 0)}:host(:is([data-type=transactional],[data-type=acknowledgement])) dialog[open]>button:first-child{display:none}:host(:is([data-type=transactional],[data-type=acknowledgement])) dialog[open] .btn__group{display:flex;justify-content:center;padding-top:2rem;margin-bottom:0}:host([data-type=acknowledgement]) dialog[open] .btn__group [data-cancel]{display:none}}@keyframes spin{to{rotate:1turn}}@layer utilities{.text-heading{color:var(--colour-heading) !important}.text-primary{color:var(--colour-primary) !important}.bg-primary{--bg-colour: var(--colour-primary) !important;background-color:var(--colour-primary) !important}.hover-primary:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-primary) !important;background-color:var(--colour-primary) !important}.colour-primary{--colour: var(--colour-primary) !important}.text-secondary{color:var(--colour-secondary) !important}.bg-secondary{--bg-colour: var(--colour-secondary) !important;background-color:var(--colour-secondary) !important}.hover-secondary:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-secondary) !important;background-color:var(--colour-secondary) !important}.colour-secondary{--colour: var(--colour-secondary) !important}.text-info{color:var(--colour-info) !important}.bg-info{--bg-colour: var(--colour-info) !important;background-color:var(--colour-info) !important}.hover-info:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-info) !important;background-color:var(--colour-info) !important}.colour-info{--colour: var(--colour-info) !important}.text-warning{color:var(--colour-warning) !important}.bg-warning{--bg-colour: var(--colour-warning) !important;background-color:var(--colour-warning) !important}.hover-warning:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-warning) !important;background-color:var(--colour-warning) !important}.colour-warning{--colour: var(--colour-warning) !important}.text-success{color:var(--colour-success) !important}.bg-success{--bg-colour: var(--colour-success) !important;background-color:var(--colour-success) !important}.hover-success:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-success) !important;background-color:var(--colour-success) !important}.colour-success{--colour: var(--colour-success) !important}.text-complete{color:var(--colour-complete) !important}.bg-complete{--bg-colour: var(--colour-complete) !important;background-color:var(--colour-complete) !important}.hover-complete:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-complete) !important;background-color:var(--colour-complete) !important}.colour-complete{--colour: var(--colour-complete) !important}.text-danger{color:var(--colour-danger) !important}.bg-danger{--bg-colour: var(--colour-danger) !important;background-color:var(--colour-danger) !important}.hover-danger:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-danger) !important;background-color:var(--colour-danger) !important}.colour-danger{--colour: var(--colour-danger) !important}.text-dark{color:var(--colour-dark) !important}.bg-dark{--bg-colour: var(--colour-dark) !important;background-color:var(--colour-dark) !important}.hover-dark:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-dark) !important;background-color:var(--colour-dark) !important}.colour-dark{--colour: var(--colour-dark) !important}.text-light{color:var(--colour-light) !important}.bg-light{--bg-colour: var(--colour-light) !important;background-color:var(--colour-light) !important}.hover-light:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-light) !important;background-color:var(--colour-light) !important}.colour-light{--colour: var(--colour-light) !important}.text-canvas{color:var(--colour-canvas) !important}.bg-canvas{--bg-colour: var(--colour-canvas) !important;background-color:var(--colour-canvas) !important}.hover-canvas:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-canvas) !important;background-color:var(--colour-canvas) !important}.colour-canvas{--colour: var(--colour-canvas) !important}.text-white{color:var(--colour-white) !important}.bg-white{--bg-colour: var(--colour-white) !important;background-color:var(--colour-white) !important}.hover-white:is(:hover,:focus,:focus-within){--bg-colour: var(--colour-white) !important;background-color:var(--colour-white) !important}.colour-white{--colour: var(--colour-white) !important}.text-body{color:var(--colour-body) !important}.text-muted{color:var(--colour-muted) !important}}@layer components{.video-wrapper{display:block;position:relative;width:100%;height:auto;aspect-ratio:16/9;background-color:var(--colour-light);margin-bottom:2rem;cursor:pointer}.video-wrapper:before{font-family:var(--fa-family-classic);content:"\uF3F4";position:absolute;font-weight:900;color:var(--colour-heading);animation:spin 1.5s infinite steps(10);font-size:1.5em;top:50%;left:50%;translate:-50% -50%;z-index:1}.video-wrapper img{position:absolute;inset:0;z-index:3;width:calc(100% + 2px);height:100%;object-fit:cover;margin-inline:-1px}.video-wrapper button{pointer-events:none;position:absolute;top:50%;left:50%;z-index:4;transform:translate(-50%, -50%)}.video-wrapper:is(:hover,:focus):not(:active) button{--colour-btn-bg: var(--colour-white)!important;--colour-btn-border: var(--colour-white)!important}.video-wrapper:is(:active) button{filter:brightness(85%)}dialog .video-wrapper{margin-bottom:0}}::slotted(.embed){position:absolute;inset:0;z-index:4;aspect-ratio:16/9;width:calc(100% + 2px);height:100%;margin-inline:-1px;margin-block:0}@layer components{dialog{width:calc(100% - 6rem) !important;max-width:50rem !important;padding:0;aspect-ratio:16/9;overflow:hidden}dialog[open]::before{display:none}dialog[open]::after{display:none}dialog .video-wrapper button{display:none}}/*# sourceMappingURL=assets/css/components/video-modal.component.css.map */
15
15
 
16
16
  </style>
17
17
 
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v7.8.2--beta1
2
+ * iamKey v7.8.2--beta2
3
3
  * Copyright 2022-2026 iamproperty
4
4
  */const o=i=>{window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:i})};o("iam-word-count");class n 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,12 +1,15 @@
1
1
  function advancedSelect(advancedSelect, displayInputField, datalist, isSearch = false) {
2
- var _a, _b, _c;
2
+ var _a;
3
3
  let currentFocus = -1;
4
4
  const datalistWrapper = datalist.closest('.datalist__wrapper') ? datalist.closest('.datalist__wrapper') : datalist;
5
5
  datalistWrapper.setAttribute('slot', 'datalist');
6
6
  if (advancedSelect.querySelector('.suffix')) {
7
7
  (_a = advancedSelect.querySelector('.suffix')) === null || _a === void 0 ? void 0 : _a.setAttribute('slot', 'suffix');
8
- (_b = advancedSelect.shadowRoot.querySelector('.suffix')) === null || _b === void 0 ? void 0 : _b.innerHTML = '<slot name="suffix"></slot>';
9
- (_c = advancedSelect.shadowRoot.querySelector('.suffix')) === null || _c === void 0 ? void 0 : _c.classList = "";
8
+ const shadowSuffix = advancedSelect.shadowRoot.querySelector('.suffix');
9
+ if (shadowSuffix) {
10
+ shadowSuffix.innerHTML = '<slot name="suffix"></slot>';
11
+ shadowSuffix.className = '';
12
+ }
10
13
  }
11
14
  // Hide the default datalist
12
15
  displayInputField.setAttribute('data-list', displayInputField.getAttribute('list'));
@@ -0,0 +1,28 @@
1
+ import './test-globals.ts';
2
+ import { describe, expect, it } from './test.ts';
3
+ import { createElement, installTestDom } from './test-dom.ts';
4
+ import { append } from './test-utils.ts';
5
+ import advancedSelect from './advanced-select.ts';
6
+ installTestDom();
7
+ describe('Advanced select module', () => {
8
+ it('moves native datalist wiring onto component state', () => {
9
+ const component = createElement('iam-advanced-select');
10
+ component.shadowRoot = createElement('shadow-root');
11
+ const shadowInputWrapper = createElement('div', { class: 'input__wrapper' });
12
+ const shadowClear = createElement('button', { class: 'clear-search' });
13
+ append(shadowInputWrapper, shadowClear);
14
+ append(component.shadowRoot, shadowInputWrapper);
15
+ const inputWrapper = createElement('div', { class: 'input__wrapper' });
16
+ const input = createElement('input', { list: 'choices', placeholder: 'Pick one' });
17
+ const datalist = createElement('datalist', { id: 'choices' });
18
+ append(datalist, createElement('option', { value: 'A' }));
19
+ append(inputWrapper, input);
20
+ append(component, inputWrapper, datalist);
21
+ advancedSelect(component, input, datalist);
22
+ expect(input.getAttribute('data-list') === 'choices');
23
+ expect(input.getAttribute('list') === '');
24
+ expect(input.classList.contains('empty'));
25
+ expect(component.classList.contains('has-empty-input'));
26
+ expect(datalist.getAttribute('slot') === 'datalist');
27
+ });
28
+ });
@@ -0,0 +1,21 @@
1
+ import { describe, expect, it } from './test.ts';
2
+ import { createElement, installTestDom } from './test-dom.ts';
3
+ import { append } from './test-utils.ts';
4
+ import createAppliedFilters from './applied-filters.ts';
5
+ installTestDom();
6
+ describe('Applied filters module', () => {
7
+ it('creates a filter tag for an initial text input value', () => {
8
+ const container = createElement('iam-applied-filters');
9
+ const filters = createElement('div');
10
+ const input = createElement('input', {
11
+ name: 'search',
12
+ value: 'auction',
13
+ dataFilterText: 'Search $value',
14
+ });
15
+ append(container, input);
16
+ createAppliedFilters(container, filters);
17
+ expect(filters.children.length === 1);
18
+ expect(filters.children[0].getAttribute('data-name') === 'search');
19
+ expect(filters.children[0].innerHTML === 'Search auction');
20
+ });
21
+ });
@@ -16,7 +16,6 @@ export const cardHTML = `<div class="wrapper">
16
16
  </div>
17
17
  </div>`;
18
18
  export const setupCard = (cardComponent) => {
19
- var _a;
20
19
  cardComponent.classList.add('card');
21
20
  const cardHead = cardComponent.shadowRoot.querySelector('.card__head');
22
21
  const cardBody = cardComponent.shadowRoot.querySelector('.card__body');
@@ -28,7 +27,9 @@ export const setupCard = (cardComponent) => {
28
27
  if (!(cardBody === null || cardBody === void 0 ? void 0 : cardBody.querySelector('.card__total')))
29
28
  cardBody.insertAdjacentHTML('beforeend', `<div class="card__total">${cardComponent.getAttribute('data-total')}</div>`);
30
29
  else {
31
- (_a = cardBody === null || cardBody === void 0 ? void 0 : cardBody.querySelector('.card__total')) === null || _a === void 0 ? void 0 : _a.innerHTML = cardComponent.getAttribute('data-total');
30
+ const cardTotal = cardBody === null || cardBody === void 0 ? void 0 : cardBody.querySelector('.card__total');
31
+ if (cardTotal)
32
+ cardTotal.innerHTML = cardComponent.getAttribute('data-total');
32
33
  }
33
34
  }
34
35
  else if (cardComponent.querySelector('[slot="total-icon"]')) {
@@ -0,0 +1,20 @@
1
+ import { describe, expect, it } from './test.ts';
2
+ import { createElement, installTestDom } from './test-dom.ts';
3
+ import { append } from './test-utils.ts';
4
+ import { setupCard } from './card.module.ts';
5
+ installTestDom();
6
+ describe('Card module', () => {
7
+ it('hydrates image, total and empty badge state', () => {
8
+ const card = createElement('iam-card', { dataImage: '/test.jpg', dataTotal: '42' });
9
+ card.shadowRoot = createElement('shadow-root');
10
+ const head = createElement('div', { class: 'card__head' });
11
+ const body = createElement('div', { class: 'card__body' });
12
+ const badges = createElement('div', { class: 'card__badges' });
13
+ append(card.shadowRoot, head, badges, body);
14
+ setupCard(card);
15
+ expect(card.classList.contains('card'));
16
+ expect(head.innerHTML.includes('/test.jpg'));
17
+ expect(body.innerHTML.includes('42'));
18
+ expect(badges.classList.contains('empty'));
19
+ });
20
+ });
@@ -0,0 +1,18 @@
1
+ import { describe, expect, it } from './test.ts';
2
+ import { createElement, installTestDom } from './test-dom.ts';
3
+ import { append } from './test-utils.ts';
4
+ import { generatePipsHTML, generateThumbnailList, getProgressMax } from './carousel.ts';
5
+ installTestDom();
6
+ describe('Carousel module', () => {
7
+ it('builds thumbnail-aware pips and progress max values', () => {
8
+ const carousel = createElement('iam-carousel');
9
+ append(carousel, createElement('div', { dataThumbnail: '/one.jpg' }), createElement('iam-card'), createElement('div', { dataThumbnail: '/three.jpg' }));
10
+ const thumbnails = generateThumbnailList(carousel);
11
+ const html = generatePipsHTML(carousel, thumbnails);
12
+ expect(thumbnails[0] === '/one.jpg');
13
+ expect(thumbnails[2] === '/three.jpg');
14
+ expect(html.includes('control-1 has-thumbnail'));
15
+ expect(html.includes('Slide 2'));
16
+ expect(getProgressMax(7, 3) === 7);
17
+ });
18
+ });
@@ -0,0 +1,22 @@
1
+ import { describe, expect, it } from './test.ts';
2
+ import { createElement, installTestDom } from './test-dom.ts';
3
+ import { append } from './test-utils.ts';
4
+ import { addClasses } from './chart.module.ts';
5
+ installTestDom();
6
+ describe('Chart module', () => {
7
+ it('reads chart data and applies configured colour variables', () => {
8
+ const chartElement = createElement('iam-chart', {
9
+ dataMin: '0',
10
+ dataMax: '100',
11
+ dataYaxis: '0,50,100',
12
+ dataGuidelines: '25,75',
13
+ 'data-colour-1': 'success',
14
+ });
15
+ const chartOuter = createElement('div');
16
+ const coloured = createElement('span', { 'data-colour-2': 'warning' });
17
+ append(chartOuter, coloured);
18
+ addClasses(chartElement, chartOuter);
19
+ expect(chartElement.style.getPropertyValue('--chart-colour-1') === 'var(--chart-colour-success)');
20
+ expect(coloured.style.getPropertyValue('--chart-colour-2-hover') === 'var(--chart-colour-warning-hover)');
21
+ });
22
+ });
@@ -0,0 +1,15 @@
1
+ import { describe, expect, it } from './test.ts';
2
+ import { createElement, installTestDom } from './test-dom.ts';
3
+ import { createTypeSwitcher } from './chart.ts';
4
+ installTestDom();
5
+ describe('Legacy chart module', () => {
6
+ it('creates chart option controls for legacy charts', () => {
7
+ const chartElement = createElement('iam-chart', { dataTypes: 'bar,line', dataType: 'line' });
8
+ const chartKey = createElement('div', { class: 'chart__key' });
9
+ const chartOptions = createElement('div', { class: 'chart__options' });
10
+ createTypeSwitcher(chartElement, chartKey, chartOptions);
11
+ expect(chartOptions.innerHTML.includes('for="chart-'));
12
+ expect(chartOptions.innerHTML.includes('bar'));
13
+ expect(chartOptions.innerHTML.includes('line'));
14
+ });
15
+ });
@@ -0,0 +1,20 @@
1
+ import { describe, expect, it } from './test.ts';
2
+ import { createElement, installTestDom } from './test-dom.ts';
3
+ import { append } from './test-utils.ts';
4
+ import { transformButtons } from './content.ts';
5
+ const { document } = installTestDom();
6
+ describe('Content module', () => {
7
+ it('transforms WordPress button wrappers into direct links', () => {
8
+ const parent = createElement('div');
9
+ const buttons = createElement('div', { class: 'wp-block-buttons' });
10
+ const button = createElement('div', { class: 'btn btn-primary wp-block-button' });
11
+ const link = createElement('a', { href: '/test' }, 'Open');
12
+ append(button, link);
13
+ append(buttons, button);
14
+ append(parent, buttons);
15
+ append(document.body, parent);
16
+ transformButtons();
17
+ expect(link.getAttribute('class') === 'btn btn-primary wp-block-button');
18
+ expect(parent.children[0].localName === 'fragment');
19
+ });
20
+ });
@@ -0,0 +1,12 @@
1
+ import { describe, expect, it } from './test.ts';
2
+ import { installTestDom } from './test-dom.ts';
3
+ import createDataLayer from './data-layer.ts';
4
+ const { window } = installTestDom();
5
+ describe('Data layer module', () => {
6
+ it('pushes the initial pageview event', () => {
7
+ window.dataLayer = [];
8
+ createDataLayer();
9
+ expect(window.dataLayer[0].event === 'Pageview');
10
+ expect(window.dataLayer[0].pageTitle === 'Test page');
11
+ });
12
+ });
@@ -0,0 +1,13 @@
1
+ import { describe, expect, it } from './test.ts';
2
+ import { createElement, installTestDom } from './test-dom.ts';
3
+ import { createDialog } from './dialogs.ts';
4
+ installTestDom();
5
+ describe('Dialogs module', () => {
6
+ it('wraps dialog content and adds a close button', () => {
7
+ const dialog = createElement('dialog');
8
+ dialog.innerHTML = '<p>Body</p>';
9
+ createDialog(dialog);
10
+ expect(dialog.innerHTML.includes('mh-lg'));
11
+ expect(dialog.innerHTML.includes('dialog__close'));
12
+ });
13
+ });
@@ -0,0 +1,16 @@
1
+ import { describe, expect, it } from './test.ts';
2
+ import { createElement, installTestDom } from './test-dom.ts';
3
+ import { append } from './test-utils.ts';
4
+ import drawer from './drawer.ts';
5
+ const { document } = installTestDom();
6
+ describe('Drawer module', () => {
7
+ it('marks the drawer end as in-view and closes the drawer toggle', () => {
8
+ const toggle = createElement('input', { id: 'showDrawer' });
9
+ toggle.checked = true;
10
+ const drawerEnd = createElement('div', { id: 'drawer-end' });
11
+ append(document.body, toggle, drawerEnd);
12
+ drawer();
13
+ expect(drawerEnd.classList.contains('in-view'));
14
+ expect(toggle.checked === false);
15
+ });
16
+ });
@@ -0,0 +1,31 @@
1
+ import { describe, expect, it } from './test.ts';
2
+ import { createElement, installTestDom } from './test-dom.ts';
3
+ import { append } from './test-utils.ts';
4
+ import { filterList, setTag } from './dropdown.ts';
5
+ const { localStorage } = installTestDom();
6
+ describe('Dropdown module', () => {
7
+ it('filters unchecked dropdown labels by input value', () => {
8
+ const dropdown = createElement('div');
9
+ const search = createElement('input', { value: 'alp' });
10
+ const alpha = createElement('label', {}, 'Alpha');
11
+ append(alpha, createElement('input', { value: 'alpha' }));
12
+ const beta = createElement('label', {}, 'Beta');
13
+ append(beta, createElement('input', { value: 'beta' }));
14
+ append(dropdown, alpha, beta);
15
+ filterList(dropdown, search);
16
+ expect(!alpha.hasAttribute('slot'));
17
+ expect(beta.getAttribute('slot') === 'notmatched');
18
+ });
19
+ it('stores selected tag text and assigns a stable colour class', () => {
20
+ localStorage.clear();
21
+ const tag = createElement('label');
22
+ tag.textContent = 'Leasehold';
23
+ const input = createElement('input', { name: 'tenure' });
24
+ input.checked = true;
25
+ append(tag, input);
26
+ setTag(tag);
27
+ expect(tag.getAttribute('slot') === 'checked');
28
+ expect(localStorage.getItem('tags-tenure').includes('Leasehold'));
29
+ expect(tag.className.includes('wider-colour-'));
30
+ });
31
+ });
@@ -0,0 +1,19 @@
1
+ import './test-globals.ts';
2
+ import { describe, expect, it } from './test.ts';
3
+ import { createElement, installTestDom } from './test-dom.ts';
4
+ import { append, silenceConsole } from './test-utils.ts';
5
+ import createDynamicEvents from './dynamicEvents.ts';
6
+ const { document, window } = installTestDom();
7
+ describe('Dynamic events module', () => {
8
+ it('runs configured dynamic show and hide events', () => {
9
+ const target = createElement('div', { id: 'target', class: 'js-hide' });
10
+ const input = createElement('input', {
11
+ dataChangeEvents: JSON.stringify([{ matches: 'yes', if: 'show', else: 'hide', target: '#target' }]),
12
+ value: 'yes',
13
+ });
14
+ append(document.body, target, input);
15
+ createDynamicEvents();
16
+ silenceConsole(() => window.triggerDynamicEvent(input));
17
+ expect(!target.classList.contains('js-hide'));
18
+ });
19
+ });
@@ -0,0 +1,17 @@
1
+ import { describe, expect, it } from './test.ts';
2
+ import { createElement, installTestDom } from './test-dom.ts';
3
+ import { append } from './test-utils.ts';
4
+ import fileupload from './fileupload.ts';
5
+ installTestDom();
6
+ describe('File upload module', () => {
7
+ it('renders an existing uploaded filename', () => {
8
+ const component = createElement('iam-fileupload', { dataFilename: 'contract.pdf' });
9
+ const input = createElement('input', { type: 'file' });
10
+ const wrapper = createElement('div');
11
+ append(wrapper, createElement('div', { class: 'files' }), createElement('div', { class: 'drop-area' }));
12
+ append(wrapper, createElement('div', { class: 'invalid-feedback size' }), createElement('div', { class: 'invalid-feedback ext' }));
13
+ append(component, input);
14
+ fileupload(component, wrapper);
15
+ expect(wrapper.querySelector('.files').innerHTML.includes('contract.pdf'));
16
+ });
17
+ });
@@ -0,0 +1,18 @@
1
+ import { describe, expect, it } from './test.ts';
2
+ import { createElement, installTestDom } from './test-dom.ts';
3
+ import { append } from './test-utils.ts';
4
+ import { filterTheList } from './filterlist.ts';
5
+ const { window } = installTestDom();
6
+ describe('Filter list module', () => {
7
+ it('filters list items and records the search term', () => {
8
+ window.dataLayer = [];
9
+ const list = createElement('ul');
10
+ const one = createElement('li', {}, 'Alpha');
11
+ const two = createElement('li', {}, 'Beta');
12
+ append(list, one, two);
13
+ filterTheList(list, 'alp');
14
+ expect(!one.classList.contains('d-none'));
15
+ expect(two.classList.contains('d-none'));
16
+ expect(window.dataLayer[0].event === 'Filtered list');
17
+ });
18
+ });
@@ -1,10 +1,50 @@
1
- import { describe, it, expect } from './test.ts';
2
- import { isValidPostcode } from './helpers.ts';
1
+ import { describe, it, expect } from './test.js';
2
+ import { getSwipeDirection, isNumeric, isTraversable, isValidPostcode, numberOfDays, resolvePath, safeID, snake, ucfirst, ucwords, unsnake, zeroPad, } from './helpers.js';
3
+ import { installTestDom } from './test-dom.js';
3
4
  describe("MathUtils Tests", function () {
4
5
  it('should pass', function () {
5
6
  expect(1 === 1);
6
7
  });
7
8
  });
9
+ describe('The general helper functions', () => {
10
+ installTestDom();
11
+ it('should identify numeric strings only', () => {
12
+ expect(isNumeric('12.5'));
13
+ expect(!isNumeric(''));
14
+ expect(!isNumeric('abc'));
15
+ expect(!isNumeric(12));
16
+ });
17
+ it('should format simple string values', () => {
18
+ expect(zeroPad(7, 3) === '007');
19
+ expect(ucfirst('hello') === 'Hello');
20
+ expect(ucwords('hello world') === 'Hello World');
21
+ expect(unsnake('hello_world') === 'hello world');
22
+ expect(snake('hello world') === 'hello_world');
23
+ expect(safeID('Hello world!') === 'hello_world');
24
+ });
25
+ it('should count inclusive date ranges', () => {
26
+ expect(numberOfDays('01/01/2026', '03/01/2026') === 3);
27
+ });
28
+ it('should resolve nested object paths', () => {
29
+ const data = { user: { name: 'Ada', roles: ['admin'] } };
30
+ expect(resolvePath(data, 'user.name', '') === 'Ada');
31
+ expect(resolvePath(data, 'user.roles[0]', '') === 'admin');
32
+ expect(resolvePath(data, 'account.name', 'fallback') === 'fallback');
33
+ });
34
+ it('should identify traversable values', () => {
35
+ expect(isTraversable([]));
36
+ expect(isTraversable({}));
37
+ expect(!isTraversable(null));
38
+ expect(!isTraversable('value'));
39
+ });
40
+ it('should detect swipe direction', () => {
41
+ expect(getSwipeDirection(100, 100, 20, 100) === 'left');
42
+ expect(getSwipeDirection(100, 100, 180, 100) === 'right');
43
+ expect(getSwipeDirection(100, 100, 100, 20) === 'top');
44
+ expect(getSwipeDirection(100, 100, 100, 180) === 'bottom');
45
+ expect(getSwipeDirection(100, 100, 101, 101) === 'tap');
46
+ });
47
+ });
8
48
  describe('The postcode helper function', () => {
9
49
  // #region valid pattern variations
10
50
  it('should return true when testing the postcode "ne33hd"', () => {
@@ -0,0 +1,12 @@
1
+ import { describe, expect, it } from './test.ts';
2
+ import { installTestDom } from './test-dom.ts';
3
+ import { silenceConsole } from './test-utils.ts';
4
+ import integrationTests from './integration-tests.ts';
5
+ const { window } = installTestDom();
6
+ describe('Integration tests module', () => {
7
+ it('runs integration checks against an empty document', () => {
8
+ silenceConsole(() => integrationTests());
9
+ expect(window.integrationTestsIntro.includes('component or element'));
10
+ expect(Array.isArray(window.integrationTests));
11
+ });
12
+ });
@@ -0,0 +1,18 @@
1
+ import { describe, expect, it } from './test.ts';
2
+ import { createElement, installTestDom } from './test-dom.ts';
3
+ import milestoneGroup from './milestone-group.ts';
4
+ installTestDom();
5
+ describe('Milestone group module', () => {
6
+ it('toggles future milestone visibility', () => {
7
+ const group = createElement('iam-milestone-group', { dataShowAllToggle: 'true' });
8
+ let opened = false;
9
+ group.addEventListener('show-future-items', () => {
10
+ opened = true;
11
+ });
12
+ milestoneGroup(group);
13
+ group.children[0].click();
14
+ expect(group.classList.contains('show-all'));
15
+ expect(group.children[0].innerHTML === 'Hide next steps');
16
+ expect(opened);
17
+ });
18
+ });
@@ -0,0 +1,31 @@
1
+ import { describe, expect, it } from './test.ts';
2
+ import { createElement, installTestDom } from './test-dom.ts';
3
+ import { append } from './test-utils.ts';
4
+ import milestone from './milestone.ts';
5
+ installTestDom();
6
+ describe('Milestone module', () => {
7
+ it('adds milestone status and task details', () => {
8
+ const milestoneElement = createElement('iam-milestone', {
9
+ dataStatus: 'Current',
10
+ dataItems: JSON.stringify([
11
+ {
12
+ name: 'Checks',
13
+ description: 'Run checks',
14
+ date_completed: '2026-01-01',
15
+ actions: [
16
+ { action: 'One', date_completed: '2026-01-01' },
17
+ { action: 'Two' },
18
+ ],
19
+ },
20
+ ]),
21
+ });
22
+ milestoneElement.shadowRoot = createElement('shadow-root');
23
+ const wrap = createElement('div', { class: 'milestone-wrap' });
24
+ const tasks = createElement('div', { class: 'task-wrap' });
25
+ append(milestoneElement.shadowRoot, wrap, tasks);
26
+ milestone(milestoneElement);
27
+ expect(milestoneElement.classList.contains('current'));
28
+ expect(wrap.children[0].innerHTML === 'Current Step');
29
+ expect(tasks.children[0].querySelector('summary').innerHTML.includes('(1/2)'));
30
+ });
31
+ });
@@ -0,0 +1,18 @@
1
+ import { describe, expect, it } from './test.ts';
2
+ import { createElement, installTestDom } from './test-dom.ts';
3
+ import { append } from './test-utils.ts';
4
+ import { closeModal, openModal } from './modal.ts';
5
+ const { window } = installTestDom();
6
+ describe('Modal module', () => {
7
+ it('opens and closes modal dialogs with data layer events', () => {
8
+ window.dataLayer = [];
9
+ const dialog = createElement('dialog');
10
+ const modal = createElement('iam-modal', { id: 'confirm' });
11
+ append(dialog, modal);
12
+ openModal(modal);
13
+ closeModal(modal);
14
+ expect(dialog.open === false);
15
+ expect(window.dataLayer[0].event === 'openModal');
16
+ expect(window.dataLayer[1].event === 'closeModal');
17
+ });
18
+ });