@iamproperty/components 6.1.0--beta → 6.1.0--beta3

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 (144) hide show
  1. package/assets/css/components/actionbar.css.map +1 -1
  2. package/assets/css/components/actionbar.global.css.map +1 -1
  3. package/assets/css/components/card.component.css +1 -1
  4. package/assets/css/components/card.component.css.map +1 -1
  5. package/assets/css/components/card.module.css +1 -1
  6. package/assets/css/components/card.module.css.map +1 -1
  7. package/assets/css/components/carousel.component.css +1 -0
  8. package/assets/css/components/carousel.component.css.map +1 -0
  9. package/assets/css/components/carousel.config.css +1 -0
  10. package/assets/css/components/carousel.config.css.map +1 -0
  11. package/assets/css/components/collapsible-side.css.map +1 -1
  12. package/assets/css/components/fileupload.css.map +1 -1
  13. package/assets/css/components/filter-card.component.css +1 -1
  14. package/assets/css/components/filter-card.component.css.map +1 -1
  15. package/assets/css/components/header.css +1 -1
  16. package/assets/css/components/header.css.map +1 -1
  17. package/assets/css/components/marketing.css.map +1 -1
  18. package/assets/css/components/multi-step.component.css +1 -0
  19. package/assets/css/components/multi-step.component.css.map +1 -0
  20. package/assets/css/components/multiselect.preload.css.map +1 -1
  21. package/assets/css/components/nav.css.map +1 -1
  22. package/assets/css/components/nav.docs.css.map +1 -1
  23. package/assets/css/components/nav.global.css.map +1 -1
  24. package/assets/css/components/nav.old.css.map +1 -1
  25. package/assets/css/components/nav.preload.css +1 -1
  26. package/assets/css/components/nav.preload.css.map +1 -1
  27. package/assets/css/components/notification.css.map +1 -1
  28. package/assets/css/components/pagination.css.map +1 -1
  29. package/assets/css/components/property-searchbar.css.map +1 -1
  30. package/assets/css/components/record-card.component.css +1 -1
  31. package/assets/css/components/record-card.component.css.map +1 -1
  32. package/assets/css/components/slider.css.map +1 -1
  33. package/assets/css/components/snapshot.css.map +1 -1
  34. package/assets/css/components/stepper.css.map +1 -1
  35. package/assets/css/components/table.global.css.map +1 -1
  36. package/assets/css/components/tabs.css +1 -1
  37. package/assets/css/components/tabs.css.map +1 -1
  38. package/assets/css/components/testimonial.css.map +1 -1
  39. package/assets/css/components/timeline.css.map +1 -1
  40. package/assets/css/components/video-card.component.css +1 -1
  41. package/assets/css/components/video-card.component.css.map +1 -1
  42. package/assets/css/core.min.css +1 -1
  43. package/assets/css/core.min.css.map +1 -1
  44. package/assets/css/style.min.css +1 -1
  45. package/assets/css/style.min.css.map +1 -1
  46. package/assets/img/illustrations/not-found.png +0 -0
  47. package/assets/js/components/accordion/accordion.component.min.js +2 -2
  48. package/assets/js/components/actionbar/actionbar.component.min.js +6 -6
  49. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
  50. package/assets/js/components/address-lookup/address-lookup.component.min.js +2 -2
  51. package/assets/js/components/applied-filters/applied-filters.component.min.js +2 -2
  52. package/assets/js/components/barchart/barchart.component.min.js +2 -2
  53. package/assets/js/components/card/card.component.min.js +4 -4
  54. package/assets/js/components/card/card.component.min.js.map +1 -1
  55. package/assets/js/components/carousel/carousel.component.js +36 -41
  56. package/assets/js/components/carousel/carousel.component.min.js +18 -12
  57. package/assets/js/components/carousel/carousel.component.min.js.map +1 -1
  58. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +2 -2
  59. package/assets/js/components/fileupload/fileupload.component.min.js +2 -2
  60. package/assets/js/components/filter-card/filter-card.component.min.js +5 -5
  61. package/assets/js/components/filter-card/filter-card.component.min.js.map +1 -1
  62. package/assets/js/components/filterlist/filterlist.component.min.js +2 -2
  63. package/assets/js/components/header/header.component.min.js +3 -3
  64. package/assets/js/components/inline-edit/inline-edit.component.min.js +2 -2
  65. package/assets/js/components/marketing/marketing.component.min.js +2 -2
  66. package/assets/js/components/multi-step/multi-step.component.js +162 -0
  67. package/assets/js/components/multiselect/multiselect.component.min.js +2 -2
  68. package/assets/js/components/nav/nav.component.min.js +2 -2
  69. package/assets/js/components/notification/notification.component.min.js +2 -2
  70. package/assets/js/components/pagination/pagination.component.min.js +2 -2
  71. package/assets/js/components/record-card/record-card.component.min.js +6 -6
  72. package/assets/js/components/record-card/record-card.component.min.js.map +1 -1
  73. package/assets/js/components/search/search.component.min.js +2 -2
  74. package/assets/js/components/slider/slider.component.min.js +2 -2
  75. package/assets/js/components/table/table.component.js +1 -1
  76. package/assets/js/components/table/table.component.min.js +3 -3
  77. package/assets/js/components/table/table.component.min.js.map +1 -1
  78. package/assets/js/components/tabs/tabs.component.min.js +3 -3
  79. package/assets/js/components/video-card/video-card.component.min.js +6 -6
  80. package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
  81. package/assets/js/components.bundle.js +3 -3
  82. package/assets/js/components.bundle.js.map +1 -1
  83. package/assets/js/components.js +1 -1
  84. package/assets/js/modules/card.module.js +4 -1
  85. package/assets/js/modules/carousel.js +110 -8
  86. package/assets/js/modules/dialogs.js +5 -123
  87. package/assets/js/scripts.bundle.js +4 -4
  88. package/assets/js/scripts.bundle.js.map +1 -1
  89. package/assets/js/scripts.bundle.min.js +3 -3
  90. package/assets/js/scripts.bundle.min.js.map +1 -1
  91. package/assets/sass/_components.scss +3 -19
  92. package/assets/sass/_corefiles.scss +15 -0
  93. package/assets/sass/_func.scss +3 -0
  94. package/assets/sass/_functions/functions.scss +304 -1
  95. package/assets/sass/_functions/mixins.scss +458 -2
  96. package/assets/sass/_functions/utilities.scss +647 -2
  97. package/assets/sass/_functions/variables.scss +1724 -2
  98. package/assets/sass/_utilities.scss +126 -7
  99. package/assets/sass/components/card.module.scss +1 -1
  100. package/assets/sass/components/carousel.component.scss +605 -0
  101. package/assets/sass/components/carousel.config.scss +84 -0
  102. package/assets/sass/components/header.scss +1 -0
  103. package/assets/sass/components/multi-step.component.scss +148 -0
  104. package/assets/sass/components/nav.preload.scss +5 -0
  105. package/assets/sass/components/tabs.scss +1 -1
  106. package/assets/sass/elements/admin-panel.scss +2 -1
  107. package/assets/sass/elements/buttons.scss +33 -0
  108. package/assets/sass/elements/container.scss +16 -6
  109. package/assets/sass/elements/details.scss +2 -0
  110. package/assets/sass/elements/forms.scss +236 -24
  111. package/assets/sass/elements/links.scss +27 -4
  112. package/assets/sass/elements/lists.scss +46 -0
  113. package/assets/sass/elements/media.scss +11 -1
  114. package/assets/sass/elements/modal.scss +138 -238
  115. package/assets/sass/elements/table.element.scss +35 -0
  116. package/assets/sass/elements/type.scss +38 -2
  117. package/assets/sass/error.scss +32 -1
  118. package/assets/sass/foundations/bs_grid.scss +33 -0
  119. package/assets/sass/foundations/grid.scss +270 -0
  120. package/assets/sass/foundations/reboot.scss +71 -49
  121. package/assets/sass/foundations/root.scss +16 -2
  122. package/assets/ts/components/carousel/carousel.component.ts +51 -44
  123. package/assets/ts/components/multi-step/multi-step.component.ts +262 -0
  124. package/assets/ts/components/table/table.component.ts +2 -1
  125. package/assets/ts/components.ts +1 -1
  126. package/assets/ts/modules/card.module.ts +4 -1
  127. package/assets/ts/modules/carousel.ts +161 -7
  128. package/assets/ts/modules/dialogs.ts +6 -174
  129. package/dist/components.es.js +177 -193
  130. package/dist/components.umd.js +73 -67
  131. package/dist/style.css +1 -1
  132. package/package.json +3 -2
  133. package/src/components/Carousel/Carousel.vue +1 -15
  134. package/src/components/FilterCard/FilterCard.vue +1 -1
  135. package/src/components/MultiStep/MultiStep.vue +25 -0
  136. package/src/components/RecordCard/RecordCard.vue +1 -1
  137. package/src/components/VideoCard/VideoCard.vue +1 -1
  138. package/assets/css/components/carousel.css +0 -1
  139. package/assets/css/components/carousel.css.map +0 -1
  140. package/assets/css/components/carousel.preload.css +0 -1
  141. package/assets/css/components/carousel.preload.css.map +0 -1
  142. package/assets/sass/components/carousel.preload.scss +0 -82
  143. package/assets/sass/components/carousel.scss +0 -258
  144. package/assets/ts/tests/dialogs.spec.js +0 -50
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * iamKey v6.1.0--beta
3
- * Copyright 2022-2024 iamproperty
4
- */const u=d=>{window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:d})},p=(d,t,e)=>(window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementAdded",element:t}),e.forEach(r=>{d.addEventListener(r,function(o){let a={event:r,element:t,target:o.target};Object.keys(o.detail).forEach(i=>{const n=o.detail[i];a[i]=n}),window.dataLayer.push(a)})}),!0),h=`<div class="card__head" part="head">
2
+ * iamKey v6.1.0--beta3
3
+ * Copyright 2022-2025 iamproperty
4
+ */const u=i=>{window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:i})},p=(i,t,e)=>(window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementAdded",element:t}),e.forEach(r=>{i.addEventListener(r,function(o){let a={event:r,element:t,target:o.target};Object.keys(o.detail).forEach(d=>{const n=o.detail[d];a[d]=n}),window.dataLayer.push(a)})}),!0),h=`<div class="card__head" part="head">
5
5
  <slot name="head"></slot>
6
6
  </div>
7
7
  <div class="card__badges"><slot name="badges"></slot></div>
@@ -15,16 +15,16 @@
15
15
  </div>
16
16
  <div class="card__footer" part="footer">
17
17
  <slot name="footer"></slot>
18
- </div>`,b=d=>{d.classList.add("card");const t=d.shadowRoot.querySelector(".card__head"),e=d.shadowRoot.querySelector(".card__body");d.hasAttribute("data-image")&&(t.innerHTML+=`<img src="${d.getAttribute("data-image")}" alt="" loading="lazy" part="image" />`),d.hasAttribute("data-total")?e.insertAdjacentHTML("beforeend",`<div class="card__total">${d.getAttribute("data-total")}</div>`):d.querySelector('[slot="total-icon"]')&&e.insertAdjacentHTML("beforeend",'<div class="card__total"><slot name="total-icon"></slot></div>'),d.querySelector('[slot="badges"]')||d.shadowRoot.querySelector(".card__badges").remove()};var g=function(d,t,e,r){function o(a){return a instanceof e?a:new e(function(i){i(a)})}return new(e||(e=Promise))(function(a,i){function n(c){try{l(r.next(c))}catch(m){i(m)}}function s(c){try{l(r.throw(c))}catch(m){i(m)}}function l(c){c.done?a(c.value):o(c.value).then(n,s)}l((r=r.apply(d,t||[])).next())})};u("iam-video-card");class v 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=`
18
+ </div>`,b=i=>{i.classList.add("card");const t=i.shadowRoot.querySelector(".card__head"),e=i.shadowRoot.querySelector(".card__body");i.hasAttribute("data-image")&&(t.innerHTML+=`<img src="${i.getAttribute("data-image")}" alt="" loading="lazy" part="image" />`),i.hasAttribute("data-total")?e.insertAdjacentHTML("beforeend",`<div class="card__total">${i.getAttribute("data-total")}</div>`):i.querySelector('[slot="total-icon"]')&&e.insertAdjacentHTML("beforeend",'<div class="card__total"><slot name="total-icon"></slot></div>'),i.querySelector('[slot="badges"]')?i.shadowRoot.querySelector(".card__badges").classList.remove("empty"):i.shadowRoot.querySelector(".card__badges").classList.add("empty")};var g=function(i,t,e,r){function o(a){return a instanceof e?a:new e(function(d){d(a)})}return new(e||(e=Promise))(function(a,d){function n(c){try{l(r.next(c))}catch(m){d(m)}}function s(c){try{l(r.throw(c))}catch(m){d(m)}}function l(c){c.done?a(c.value):o(c.value).then(n,s)}l((r=r.apply(i,t||[])).next())})};u("iam-video-card");class v 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=`
19
19
  <style>
20
20
  ${this.hasAttribute("css")?`@import "${this.getAttribute("css")}";`:""}
21
21
 
22
- :host{--card-icon-right: 1rem;--card-head-top-padding: 2rem;--card-head-bottom-padding: 2rem;--card-footer-bottom-padding: 1.5rem;--card-head-height: 6rem;box-shadow:var(--card-box-shadow);border-radius:var(--card-border-radius);position:relative;font-weight:bold;font-size:1.125rem;line-height:1.5rem;color:var(--colour-primary);width:100%;text-align:left;display:flex;flex-direction:column;overflow:hidden;z-index:0;background:var(--colour-canvas-2);outline:2px solid var(--outline-colour, --colour-canvas-2);outline-offset:-2px;margin-bottom:2rem}:host>*{width:100%;box-sizing:border-box}:host-context(:is(a,label,button)){margin-bottom:0 !important}:host(.border-0){box-shadow:none;--card-left-padding: 0rem;outline-offset:1px !important}.card__head:has(img){min-height:var(--card-head-height);position:relative;overflow:hidden;background:rgba(0,0,0,.1);z-index:-1}.card__head:has(img)>img{position:absolute;top:0;left:0;margin:-2px;width:calc(100% + 4px);height:calc(100% + 4px);object-fit:cover}.card__body{padding:var(--card-head-top-padding) var(--card-right-padding) var(--card-head-bottom-padding) var(--card-left-padding)}.card__footer{margin-top:0;padding:0 var(--card-right-padding) 0 var(--card-left-padding)}::slotted(i){font-size:1.5rem !important;margin:-3px var(--card-icon-right) 0 0 !important;vertical-align:middle !important}::slotted(i:not(.fa-light):not(.fa-bold)){font-weight:400 !important}::slotted(.badge){margin-bottom:.375rem !important}::slotted(span:not(.badge)){display:block !important;font-weight:normal !important;font-size:1rem !important}::slotted(small){padding-top:1rem !important;display:block !important;font-weight:normal !important;padding-bottom:0 !important;color:var(--colour-body)}::slotted(span:not(.badge):not([class*=pt-])){padding-top:1.5rem !important}::slotted(:is(a,button)[slot=footer]){margin-bottom:var(--card-footer-bottom-padding) !important}.card__body:has(.card__total){--card-head-top-padding: 1rem;--card-head-bottom-padding: 1.5rem}.card__total{font-size:3rem;line-height:3rem;padding-right:1rem;margin-top:.5rem}.card__total i{font-family:var(--fa-style-family, "Font Awesome 6 Pro");font-weight:var(--fa-style, 900);display:block !important;font-size:2.5rem !important;margin:.5rem 0 .5rem 0 !important}::slotted([slot=total-icon]){display:block !important;font-size:2.5rem !important;margin:.5rem 0 .5rem 0 !important;line-height:2.5rem}.card__head:has(img)~.card__badges{position:absolute;top:0;text-align:left;left:0;z-index:9}.card__badges{padding:var(--card-badges-top-padding, 1rem) var(--card-right-padding) 0 var(--card-left-padding);margin-bottom:-1.5rem}:host{--card-right-padding: 1rem;--card-head-height: 10rem;font-size:1.5rem;--line-height: 2rem}:host(:is([data-youtube],[data-vimeo]):not(.video-card--top)) .card__head{order:2}:host(:is([data-youtube],[data-vimeo])) .card__head{cursor:pointer;position:relative}:host(:is([data-youtube],[data-vimeo])) .card__head>*:not(img){z-index:-1}:host(:is([data-youtube],[data-vimeo])) .card__head:before{content:"";display:block;background-color:var(--video-btn-colour, var(--colour-success));height:5rem;width:5rem;position:absolute;top:calc(50% - 2.5rem);left:calc(50% - 2.5rem);z-index:2;border-radius:2.5rem}:host(:is([data-youtube],[data-vimeo])) .card__head:after{--icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'><path d='M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80L0 432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z'/></svg>");content:"";display:block;height:2rem;width:2rem;position:absolute;top:calc(50% - 1rem);left:calc(50% - .8rem);z-index:5;background:var(--colour-primary-theme);mask-image:var(--icon);mask-size:80%;mask-repeat:no-repeat;mask-position:50% 50%;-webkit-mask-image:var(--icon);-webkit-mask-size:80%;-webkit-mask-repeat:no-repeat;-webkit-mask-position:50% 50%}:host(:is([data-youtube],[data-vimeo])) .card__head:is(:hover,:focus){--video-btn-colour: var(--colour-canvas)}:host(:is([data-youtube],[data-vimeo])) .card__head:is(:active){--video-btn-colour: color-mix(in oklab, var(--colour-success), #000000 20%) !important}.embed{aspect-ratio:1/1;display:block;width:10rem}/*# sourceMappingURL=assets/css/components/video-card.component.css.map */
22
+ :host{--card-icon-right: 1rem;--card-head-top-padding: 2rem;--card-head-bottom-padding: 2rem;--card-footer-bottom-padding: 1.5rem;--card-head-height: 6rem;box-shadow:var(--card-box-shadow);border-radius:var(--card-border-radius);position:relative;font-weight:bold;font-size:1.125rem;line-height:1.5rem;color:var(--colour-primary);width:100%;text-align:left;display:flex;flex-direction:column;overflow:hidden;z-index:0;background:var(--colour-canvas-2);outline:2px solid var(--outline-colour, --colour-canvas-2);outline-offset:-2px;margin-bottom:2rem}:host>*{width:100%;box-sizing:border-box}:host-context(:is(a,label,button)){margin-bottom:0 !important}:host(.border-0){box-shadow:none;--card-left-padding: 0rem;outline-offset:1px !important}.card__head:has(img){min-height:var(--card-head-height);position:relative;overflow:hidden;background:rgba(0,0,0,.1);z-index:-1}.card__head:has(img)>img{position:absolute;top:0;left:0;margin:-2px;width:calc(100% + 4px);height:calc(100% + 4px);object-fit:cover}.card__body{padding:var(--card-head-top-padding) var(--card-right-padding) var(--card-head-bottom-padding) var(--card-left-padding)}.card__footer{margin-top:0;padding:0 var(--card-right-padding) 0 var(--card-left-padding)}::slotted(i){font-size:1.5rem !important;margin:-3px var(--card-icon-right) 0 0 !important;vertical-align:middle !important}::slotted(i:not(.fa-light):not(.fa-bold)){font-weight:400 !important}::slotted(.badge){margin-bottom:.375rem !important}::slotted(span:not(.badge)){display:block !important;font-weight:normal !important;font-size:1rem !important}::slotted(small){padding-top:1rem !important;display:block !important;font-weight:normal !important;padding-bottom:0 !important;color:var(--colour-body)}::slotted(span:not(.badge):not([class*=pt-])){padding-top:1.5rem !important}::slotted(:is(a,button)[slot=footer]){margin-bottom:var(--card-footer-bottom-padding) !important}.card__body:has(.card__total){--card-head-top-padding: 1rem;--card-head-bottom-padding: 1.5rem}.card__total{font-size:3rem;line-height:3rem;padding-right:1rem;margin-top:.5rem}.card__total i{font-family:var(--fa-style-family, "Font Awesome 6 Pro");font-weight:var(--fa-style, 900);display:block !important;font-size:2.5rem !important;margin:.5rem 0 .5rem 0 !important}::slotted([slot=total-icon]){display:block !important;font-size:2.5rem !important;margin:.5rem 0 .5rem 0 !important;line-height:2.5rem}.card__head:has(img)~.card__badges{position:absolute;top:0;text-align:left;left:0;z-index:9}.card__badges:not(.empty){padding:var(--card-badges-top-padding, 1rem) var(--card-right-padding) 0 var(--card-left-padding);margin-bottom:-1.5rem}:host{--card-right-padding: 1rem;--card-head-height: 10rem;font-size:1.5rem;--line-height: 2rem}:host(:is([data-youtube],[data-vimeo]):not(.video-card--top)) .card__head{order:2}:host(:is([data-youtube],[data-vimeo])) .card__head{cursor:pointer;position:relative}:host(:is([data-youtube],[data-vimeo])) .card__head>*:not(img){z-index:-1}:host(:is([data-youtube],[data-vimeo])) .card__head:before{content:"";display:block;background-color:var(--video-btn-colour, var(--colour-success));height:5rem;width:5rem;position:absolute;top:calc(50% - 2.5rem);left:calc(50% - 2.5rem);z-index:2;border-radius:2.5rem}:host(:is([data-youtube],[data-vimeo])) .card__head:after{--icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'><path d='M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80L0 432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z'/></svg>");content:"";display:block;height:2rem;width:2rem;position:absolute;top:calc(50% - 1rem);left:calc(50% - .8rem);z-index:5;background:var(--colour-primary-theme);mask-image:var(--icon);mask-size:80%;mask-repeat:no-repeat;mask-position:50% 50%;-webkit-mask-image:var(--icon);-webkit-mask-size:80%;-webkit-mask-repeat:no-repeat;-webkit-mask-position:50% 50%}:host(:is([data-youtube],[data-vimeo])) .card__head:is(:hover,:focus){--video-btn-colour: var(--colour-canvas)}:host(:is([data-youtube],[data-vimeo])) .card__head:is(:active){--video-btn-colour: color-mix(in oklab, var(--colour-success), #000000 20%) !important}.embed{aspect-ratio:1/1;display:block;width:10rem}/*# sourceMappingURL=assets/css/components/video-card.component.css.map */
23
23
 
24
24
  </style>
25
25
  ${h}
26
26
  <dialog>
27
27
  <div class="embed"></div>
28
28
  </dialog>
29
- `,this.shadowRoot.appendChild(t.content.cloneNode(!0))}connectedCallback(){return g(this,void 0,void 0,function*(){const t=this,e=t.shadowRoot.querySelector(".card__head"),o=String.fromCharCode(65+Math.floor(Math.random()*26))+Date.now();let a,i;b(t),t.querySelector("[data-youtube]")&&t.setAttribute("data-youtube",t.querySelector("[data-youtube]").getAttribute("data-youtube")),t.querySelector("[data-vimeo]")&&t.setAttribute("data-vimeo",t.querySelector("[data-vimeo]").getAttribute("data-vimeo")),(t.hasAttribute("data-youtube")||t.hasAttribute("data-vimeo"))&&(e.setAttribute("tabindex","0"),document.getElementById(`${o}-dialog`)||document.body.insertAdjacentHTML("beforeend",`<dialog id="${o}-dialog"><div class="embed" id="${o}"></div></dialog>`),a=document.getElementById(`${o}-dialog`),i=document.getElementById(o)),t.hasAttribute("data-youtube")?(document.body.classList.contains("youtubeLoaded")||(yield this.loadYouTubeScripts()),e.addEventListener("click",function(){const n=new CustomEvent("play-video",{detail:{"Video Type":"YoutTube",ID:t.getAttribute("data-youtube")}});t.dispatchEvent(n),t.createYoutTubeVideo(i),a.showModal()}),a.addEventListener("close",n=>{window.player[i.getAttribute("id")]&&typeof window.player[i.getAttribute("id")].pauseVideo=="function"&&window.player[i.getAttribute("id")].pauseVideo();const s=new CustomEvent("close-video",{detail:{"Video Type":"YoutTube",ID:t.getAttribute("data-youtube")}});t.dispatchEvent(s)})):t.hasAttribute("data-vimeo")&&(e.addEventListener("click",function(){const n=t.getAttribute("data-vimeo"),s=new CustomEvent("play-video",{detail:{"Video Type":"Vimeo",ID:n}});t.dispatchEvent(s),i.querySelector("iframe")||(i.innerHTML=`<iframe src="https://player.vimeo.com/video/${n}?autoplay=1" width="100%" height="100%" frameborder="0" allow="autoplay; encrypted-media" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>`),a.showModal()}),a.addEventListener("close",n=>{i.innerHTML="";const s=new CustomEvent("close-video",{detail:{"Video Type":"Vimeo",ID:t.getAttribute("data-vimeo")}});t.dispatchEvent(s)})),p(t,"iam-video-card",["play-video","close-video"])})}loadYouTubeScripts(){return new Promise((t,e)=>{const r=new Image;r.onload=function(){var o=document.createElement("script");o.src="https://www.youtube.com/iframe_api";var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(o,a),document.body.classList.add("youtubeLoaded"),t(!0)},r.onerror=function(){e(!1)},r.src="https://youtube.com/favicon.ico"})}createYoutTubeVideo(t){typeof window.player>"u"&&(window.player=[]);var e=t.getAttribute("id"),r=this.getAttribute("data-youtube");if(console.log(window.player),typeof window.player[e]<"u"&&typeof window.player[e].pauseVideo=="function")return window.player[e].playVideo(),!1;window.player[e]=new YT.Player(e,{height:"100%",width:"100%",videoId:r,playerVars:{modestbranding:1,playsinline:1,rel:0,showinfo:0},events:{onReady:o,onStateChange:i}});function o(n){n.target.playVideo()}var a=!1;function i(n){if(n.data==YT.PlayerState.PLAYING&&!a){var s=document.getElementById(e);s.classList.add("player-ready"),a=!0}}}static get observedAttributes(){return["data-image"]}attributeChangedCallback(t,e,r){switch(t){case"data-image":{if(e!=r){const o=this.shadowRoot.querySelector(".card__head img");o&&o.setAttribute("src",r)}break}}}}export{v as default};
29
+ `,this.shadowRoot.appendChild(t.content.cloneNode(!0))}connectedCallback(){return g(this,void 0,void 0,function*(){const t=this,e=t.shadowRoot.querySelector(".card__head"),o=String.fromCharCode(65+Math.floor(Math.random()*26))+Date.now();let a,d;b(t),t.querySelector("[data-youtube]")&&t.setAttribute("data-youtube",t.querySelector("[data-youtube]").getAttribute("data-youtube")),t.querySelector("[data-vimeo]")&&t.setAttribute("data-vimeo",t.querySelector("[data-vimeo]").getAttribute("data-vimeo")),(t.hasAttribute("data-youtube")||t.hasAttribute("data-vimeo"))&&(e.setAttribute("tabindex","0"),document.getElementById(`${o}-dialog`)||document.body.insertAdjacentHTML("beforeend",`<dialog id="${o}-dialog"><div class="embed" id="${o}"></div></dialog>`),a=document.getElementById(`${o}-dialog`),d=document.getElementById(o)),t.hasAttribute("data-youtube")?(document.body.classList.contains("youtubeLoaded")||(yield this.loadYouTubeScripts()),e.addEventListener("click",function(){const n=new CustomEvent("play-video",{detail:{"Video Type":"YoutTube",ID:t.getAttribute("data-youtube")}});t.dispatchEvent(n),t.createYoutTubeVideo(d),a.showModal()}),a.addEventListener("close",n=>{window.player[d.getAttribute("id")]&&typeof window.player[d.getAttribute("id")].pauseVideo=="function"&&window.player[d.getAttribute("id")].pauseVideo();const s=new CustomEvent("close-video",{detail:{"Video Type":"YoutTube",ID:t.getAttribute("data-youtube")}});t.dispatchEvent(s)})):t.hasAttribute("data-vimeo")&&(e.addEventListener("click",function(){const n=t.getAttribute("data-vimeo"),s=new CustomEvent("play-video",{detail:{"Video Type":"Vimeo",ID:n}});t.dispatchEvent(s),d.querySelector("iframe")||(d.innerHTML=`<iframe src="https://player.vimeo.com/video/${n}?autoplay=1" width="100%" height="100%" frameborder="0" allow="autoplay; encrypted-media" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>`),a.showModal()}),a.addEventListener("close",n=>{d.innerHTML="";const s=new CustomEvent("close-video",{detail:{"Video Type":"Vimeo",ID:t.getAttribute("data-vimeo")}});t.dispatchEvent(s)})),p(t,"iam-video-card",["play-video","close-video"])})}loadYouTubeScripts(){return new Promise((t,e)=>{const r=new Image;r.onload=function(){var o=document.createElement("script");o.src="https://www.youtube.com/iframe_api";var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(o,a),document.body.classList.add("youtubeLoaded"),t(!0)},r.onerror=function(){e(!1)},r.src="https://youtube.com/favicon.ico"})}createYoutTubeVideo(t){typeof window.player>"u"&&(window.player=[]);var e=t.getAttribute("id"),r=this.getAttribute("data-youtube");if(console.log(window.player),typeof window.player[e]<"u"&&typeof window.player[e].pauseVideo=="function")return window.player[e].playVideo(),!1;window.player[e]=new YT.Player(e,{height:"100%",width:"100%",videoId:r,playerVars:{modestbranding:1,playsinline:1,rel:0,showinfo:0},events:{onReady:o,onStateChange:d}});function o(n){n.target.playVideo()}var a=!1;function d(n){if(n.data==YT.PlayerState.PLAYING&&!a){var s=document.getElementById(e);s.classList.add("player-ready"),a=!0}}}static get observedAttributes(){return["data-image"]}attributeChangedCallback(t,e,r){switch(t){case"data-image":{if(e!=r){const o=this.shadowRoot.querySelector(".card__head img");o&&o.setAttribute("src",r)}break}}}}export{v as default};
30
30
  //# sourceMappingURL=video-card.component.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"video-card.component.min.js","sources":["../_global.js","../../modules/card.module.js","video-card.component.js"],"sourcesContent":["// @ts-nocheck\nexport const trackComponentRegistered = (componentName) => {\n // Data layer Web component created\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n \"event\": \"customElementRegistered\",\n \"element\": componentName\n });\n};\nexport const trackComponent = (component, componentName, trackEvents) => {\n // Data layer Web component created\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n \"event\": \"customElementAdded\",\n \"element\": componentName\n });\n trackEvents.forEach((eventName) => {\n component.addEventListener(eventName, function (event) {\n let eventDetails = {\n \"event\": eventName,\n \"element\": componentName,\n \"target\": event.target\n };\n Object.keys(event.detail).forEach((eventKey) => {\n const eventDetail = event.detail[eventKey];\n eventDetails[eventKey] = eventDetail;\n });\n window.dataLayer.push(eventDetails);\n });\n });\n return true;\n};\n","export const cardHTML = `<div class=\"card__head\" part=\"head\">\n <slot name=\"head\"></slot>\n</div>\n<div class=\"card__badges\"><slot name=\"badges\"></slot></div>\n<slot name=\"checkbox\" class=\"activate-prevent-hover\"></slot>\n<div class=\"card__body\" part=\"body\">\n <slot></slot>\n <slot name=\"secondary\" part=\"secondary\"></slot>\n</div>\n<div class=\"card__details\" part=\"details\">\n <slot name=\"details\"></slot>\n</div>\n<div class=\"card__footer\" part=\"footer\">\n <slot name=\"footer\"></slot>\n</div>`;\nexport const setupCard = (cardComponent) => {\n cardComponent.classList.add('card');\n const cardHead = cardComponent.shadowRoot.querySelector('.card__head');\n const cardBody = cardComponent.shadowRoot.querySelector('.card__body');\n if (cardComponent.hasAttribute('data-image')) {\n cardHead.innerHTML += `<img src=\"${cardComponent.getAttribute('data-image')}\" alt=\"\" loading=\"lazy\" part=\"image\" />`;\n }\n // Inset the HTML for the data total or icon fallback\n if (cardComponent.hasAttribute('data-total')) {\n cardBody.insertAdjacentHTML('beforeend', `<div class=\"card__total\">${cardComponent.getAttribute('data-total')}</div>`);\n }\n else if (cardComponent.querySelector('[slot=\"total-icon\"]')) {\n cardBody.insertAdjacentHTML('beforeend', `<div class=\"card__total\"><slot name=\"total-icon\"></slot></div>`);\n }\n if (!cardComponent.querySelector('[slot=\"badges\"]')) {\n cardComponent.shadowRoot.querySelector('.card__badges').remove();\n }\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};\n// @ts-nocheck\nimport { trackComponent, trackComponentRegistered } from \"../_global.js\";\nimport { cardHTML, setupCard } from \"../../modules/card.module.js\";\ntrackComponentRegistered(\"iam-video-card\");\nclass iamVideoCard extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';\n const loadCSS = `@import \"${assetLocation}/css/components/video-card.component.css\";`;\n const template = document.createElement('template');\n template.innerHTML = `\n <style>\n ${this.hasAttribute('css') ? `@import \"${this.getAttribute('css')}\";` : ``}\n \n ${loadCSS}\n </style>\n ${cardHTML}\n <dialog>\n <div class=\"embed\"></div>\n </dialog>\n `;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n return __awaiter(this, void 0, void 0, function* () {\n const cardComponent = this;\n const cardHead = cardComponent.shadowRoot.querySelector('.card__head');\n const randLetter = String.fromCharCode(65 + Math.floor(Math.random() * 26));\n const link_id = randLetter + Date.now();\n let dialog;\n let embed;\n setupCard(cardComponent);\n // Check if youtube or vimeo video link is present\n if (cardComponent.querySelector('[data-youtube]'))\n cardComponent.setAttribute('data-youtube', cardComponent.querySelector('[data-youtube]').getAttribute('data-youtube'));\n if (cardComponent.querySelector('[data-vimeo]'))\n cardComponent.setAttribute('data-vimeo', cardComponent.querySelector('[data-vimeo]').getAttribute('data-vimeo'));\n // General dialog stuff\n if (cardComponent.hasAttribute('data-youtube') || cardComponent.hasAttribute('data-vimeo')) {\n cardHead.setAttribute('tabindex', '0');\n // Add dialog to page\n if (!document.getElementById(`${link_id}-dialog`)) {\n document.body.insertAdjacentHTML('beforeend', `<dialog id=\"${link_id}-dialog\"><div class=\"embed\" id=\"${link_id}\"></div></dialog>`);\n }\n dialog = document.getElementById(`${link_id}-dialog`);\n embed = document.getElementById(link_id);\n }\n // Youtube\n if (cardComponent.hasAttribute('data-youtube')) {\n // Load the scripts only once\n if (!document.body.classList.contains('youtubeLoaded')) {\n let loaded = yield this.loadYouTubeScripts();\n }\n cardHead.addEventListener('click', function () {\n const customEvent = new CustomEvent(\"play-video\", { detail: { 'Video Type': 'YoutTube', 'ID': cardComponent.getAttribute('data-youtube') } });\n cardComponent.dispatchEvent(customEvent);\n cardComponent.createYoutTubeVideo(embed);\n dialog.showModal();\n });\n dialog.addEventListener(\"close\", (event) => {\n if (window.player[embed.getAttribute('id')] && typeof window.player[embed.getAttribute('id')].pauseVideo == \"function\") {\n window.player[embed.getAttribute('id')].pauseVideo();\n }\n const customEvent = new CustomEvent(\"close-video\", { detail: { 'Video Type': 'YoutTube', 'ID': cardComponent.getAttribute('data-youtube') } });\n cardComponent.dispatchEvent(customEvent);\n });\n }\n else if (cardComponent.hasAttribute('data-vimeo')) { // Vimeo\n cardHead.addEventListener('click', function () {\n const videoId = cardComponent.getAttribute('data-vimeo');\n const customEvent = new CustomEvent(\"play-video\", { detail: { 'Video Type': 'Vimeo', 'ID': videoId } });\n cardComponent.dispatchEvent(customEvent);\n if (!embed.querySelector('iframe'))\n embed.innerHTML = `<iframe src=\"https://player.vimeo.com/video/${videoId}?autoplay=1\" width=\"100%\" height=\"100%\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>`;\n dialog.showModal();\n });\n dialog.addEventListener(\"close\", (event) => {\n embed.innerHTML = ``; // Remove the video since we cant pause it\n const customEvent = new CustomEvent(\"close-video\", { detail: { 'Video Type': 'Vimeo', 'ID': cardComponent.getAttribute('data-vimeo') } });\n cardComponent.dispatchEvent(customEvent);\n });\n }\n trackComponent(cardComponent, \"iam-video-card\", ['play-video', 'close-video']);\n });\n }\n loadYouTubeScripts() {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.onload = function () {\n // This code loads the IFrame Player API code asynchronously.\n var tag = document.createElement('script');\n tag.src = \"https://www.youtube.com/iframe_api\";\n var firstScriptTag = document.getElementsByTagName('script')[0];\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n document.body.classList.add('youtubeLoaded');\n resolve(true);\n };\n image.onerror = function () {\n reject(false);\n };\n image.src = \"https://youtube.com/favicon.ico\";\n });\n }\n createYoutTubeVideo(target) {\n if (typeof window.player == \"undefined\") {\n window.player = [];\n }\n var link_id = target.getAttribute('id');\n var video_id = this.getAttribute('data-youtube');\n console.log(window.player);\n if (typeof window.player[link_id] != 'undefined' && typeof window.player[link_id].pauseVideo == \"function\") {\n window.player[link_id].playVideo();\n return false;\n }\n // This function creates an <iframe> (and YouTube player) after the API code downloads.\n //function onYouTubeIframeAPIReady() {\n window.player[link_id] = new YT.Player(link_id, {\n height: '100%',\n width: '100%',\n videoId: video_id,\n playerVars: {\n 'modestbranding': 1,\n 'playsinline': 1,\n 'rel': 0,\n 'showinfo': 0\n },\n events: {\n 'onReady': onPlayerReady,\n 'onStateChange': onPlayerStateChange\n }\n });\n //}\n //onYouTubeIframeAPIReady();\n // The API will call this function when the video player is ready.\n function onPlayerReady(event) {\n // Play the video straight away\n event.target.playVideo();\n }\n // The API calls this function when the player's state changes.\n // The function indicates that when playing a video (state=1)\n var done = false;\n function onPlayerStateChange(event) {\n if (event.data == YT.PlayerState.PLAYING && !done) {\n var link = document.getElementById(link_id);\n link.classList.add('player-ready');\n done = true;\n }\n }\n }\n static get observedAttributes() {\n return [\"data-image\"];\n }\n attributeChangedCallback(attrName, oldVal, newVal) {\n switch (attrName) {\n case \"data-image\": {\n if (oldVal != newVal) {\n const cardHeadImg = this.shadowRoot.querySelector('.card__head img');\n if (cardHeadImg)\n cardHeadImg.setAttribute('src', newVal);\n }\n break;\n }\n }\n }\n}\nexport default iamVideoCard;\n"],"names":["trackComponentRegistered","componentName","trackComponent","component","trackEvents","eventName","event","eventDetails","eventKey","eventDetail","cardHTML","setupCard","cardComponent","cardHead","cardBody","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","e","rejected","result","iamVideoCard","template","link_id","dialog","embed","customEvent","videoId","image","tag","firstScriptTag","target","video_id","onPlayerReady","onPlayerStateChange","done","link","attrName","oldVal","newVal","cardHeadImg"],"mappings":";;;IACO,MAAMA,EAA4BC,GAAkB,CAEvD,OAAO,UAAY,OAAO,WAAa,CAAA,EACvC,OAAO,UAAU,KAAK,CAClB,MAAS,0BACT,QAAWA,CACnB,CAAK,CACL,EACaC,EAAiB,CAACC,EAAWF,EAAeG,KAErD,OAAO,UAAY,OAAO,WAAa,CAAA,EACvC,OAAO,UAAU,KAAK,CAClB,MAAS,qBACT,QAAWH,CACnB,CAAK,EACDG,EAAY,QAASC,GAAc,CAC/BF,EAAU,iBAAiBE,EAAW,SAAUC,EAAO,CACnD,IAAIC,EAAe,CACf,MAASF,EACT,QAAWJ,EACX,OAAUK,EAAM,MAChC,EACY,OAAO,KAAKA,EAAM,MAAM,EAAE,QAASE,GAAa,CAC5C,MAAMC,EAAcH,EAAM,OAAOE,CAAQ,EACzCD,EAAaC,CAAQ,EAAIC,CACzC,CAAa,EACD,OAAO,UAAU,KAAKF,CAAY,CAC9C,CAAS,CACT,CAAK,EACM,IC9BEG,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAeXC,EAAaC,GAAkB,CACxCA,EAAc,UAAU,IAAI,MAAM,EAClC,MAAMC,EAAWD,EAAc,WAAW,cAAc,aAAa,EAC/DE,EAAWF,EAAc,WAAW,cAAc,aAAa,EACjEA,EAAc,aAAa,YAAY,IACvCC,EAAS,WAAa,aAAaD,EAAc,aAAa,YAAY,4CAG1EA,EAAc,aAAa,YAAY,EACvCE,EAAS,mBAAmB,YAAa,4BAA4BF,EAAc,aAAa,YAAY,SAAS,EAEhHA,EAAc,cAAc,qBAAqB,GACtDE,EAAS,mBAAmB,YAAa,gEAAgE,EAExGF,EAAc,cAAc,iBAAiB,GAC9CA,EAAc,WAAW,cAAc,eAAe,EAAE,OAAM,CAEtE,EChCA,IAAIG,EAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAE,CAAE,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAE,OAAUK,EAAP,CAAYH,EAAOG,CAAC,EAAK,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAI,OAAQK,EAAP,CAAYH,EAAOG,CAAC,EAAK,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,CAAE,CAAA,GAAG,KAAI,CAAE,CAC5E,CAAK,CACL,EAIAjB,EAAyB,gBAAgB,EACzC,MAAM6B,UAAqB,WAAY,CACnC,aAAc,CACV,QACA,KAAK,aAAa,CAAE,KAAM,MAAQ,CAAA,EACZ,SAAS,KAAK,aAAa,sBAAsB,GAAI,SAAS,KAAK,aAAa,sBAAsB,EAE5H,MAAMC,EAAW,SAAS,cAAc,UAAU,EAClDA,EAAS,UAAY;AAAA;AAAA,MAEvB,KAAK,aAAa,KAAK,EAAI,YAAY,KAAK,aAAa,KAAK,MAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,MAItEpB;AAAA;AAAA;AAAA;AAAA,MAKE,KAAK,WAAW,YAAYoB,EAAS,QAAQ,UAAU,EAAI,CAAC,CAChE,CACA,mBAAoB,CAChB,OAAOf,EAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,MAAMH,EAAgB,KAChBC,EAAWD,EAAc,WAAW,cAAc,aAAa,EAE/DmB,EADa,OAAO,aAAa,GAAK,KAAK,MAAM,KAAK,SAAW,EAAE,CAAC,EAC7C,KAAK,IAAG,EACrC,IAAIC,EACAC,EACJtB,EAAUC,CAAa,EAEnBA,EAAc,cAAc,gBAAgB,GAC5CA,EAAc,aAAa,eAAgBA,EAAc,cAAc,gBAAgB,EAAE,aAAa,cAAc,CAAC,EACrHA,EAAc,cAAc,cAAc,GAC1CA,EAAc,aAAa,aAAcA,EAAc,cAAc,cAAc,EAAE,aAAa,YAAY,CAAC,GAE/GA,EAAc,aAAa,cAAc,GAAKA,EAAc,aAAa,YAAY,KACrFC,EAAS,aAAa,WAAY,GAAG,EAEhC,SAAS,eAAe,GAAGkB,UAAgB,GAC5C,SAAS,KAAK,mBAAmB,YAAa,eAAeA,oCAA0CA,oBAA0B,EAErIC,EAAS,SAAS,eAAe,GAAGD,UAAgB,EACpDE,EAAQ,SAAS,eAAeF,CAAO,GAGvCnB,EAAc,aAAa,cAAc,GAEpC,SAAS,KAAK,UAAU,SAAS,eAAe,IACpC,MAAM,KAAK,mBAAoB,GAEhDC,EAAS,iBAAiB,QAAS,UAAY,CAC3C,MAAMqB,EAAc,IAAI,YAAY,aAAc,CAAE,OAAQ,CAAE,aAAc,WAAY,GAAMtB,EAAc,aAAa,cAAc,CAAC,CAAI,CAAA,EAC5IA,EAAc,cAAcsB,CAAW,EACvCtB,EAAc,oBAAoBqB,CAAK,EACvCD,EAAO,UAAS,CACpC,CAAiB,EACDA,EAAO,iBAAiB,QAAU1B,GAAU,CACpC,OAAO,OAAO2B,EAAM,aAAa,IAAI,CAAC,GAAK,OAAO,OAAO,OAAOA,EAAM,aAAa,IAAI,CAAC,EAAE,YAAc,YACxG,OAAO,OAAOA,EAAM,aAAa,IAAI,CAAC,EAAE,aAE5C,MAAMC,EAAc,IAAI,YAAY,cAAe,CAAE,OAAQ,CAAE,aAAc,WAAY,GAAMtB,EAAc,aAAa,cAAc,CAAC,CAAI,CAAA,EAC7IA,EAAc,cAAcsB,CAAW,CAC3D,CAAiB,GAEItB,EAAc,aAAa,YAAY,IAC5CC,EAAS,iBAAiB,QAAS,UAAY,CAC3C,MAAMsB,EAAUvB,EAAc,aAAa,YAAY,EACjDsB,EAAc,IAAI,YAAY,aAAc,CAAE,OAAQ,CAAE,aAAc,QAAS,GAAMC,CAAO,CAAI,CAAA,EACtGvB,EAAc,cAAcsB,CAAW,EAClCD,EAAM,cAAc,QAAQ,IAC7BA,EAAM,UAAY,+CAA+CE,iKACrEH,EAAO,UAAS,CACpC,CAAiB,EACDA,EAAO,iBAAiB,QAAU1B,GAAU,CACxC2B,EAAM,UAAY,GAClB,MAAMC,EAAc,IAAI,YAAY,cAAe,CAAE,OAAQ,CAAE,aAAc,QAAS,GAAMtB,EAAc,aAAa,YAAY,CAAC,CAAI,CAAA,EACxIA,EAAc,cAAcsB,CAAW,CAC3D,CAAiB,GAELhC,EAAeU,EAAe,iBAAkB,CAAC,aAAc,aAAa,CAAC,CACzF,CAAS,CACL,CACA,oBAAqB,CACjB,OAAO,IAAI,QAAQ,CAACU,EAASC,IAAW,CACpC,MAAMa,EAAQ,IAAI,MAClBA,EAAM,OAAS,UAAY,CAEvB,IAAIC,EAAM,SAAS,cAAc,QAAQ,EACzCA,EAAI,IAAM,qCACV,IAAIC,EAAiB,SAAS,qBAAqB,QAAQ,EAAE,CAAC,EAC9DA,EAAe,WAAW,aAAaD,EAAKC,CAAc,EAC1D,SAAS,KAAK,UAAU,IAAI,eAAe,EAC3ChB,EAAQ,EAAI,CAC5B,EACYc,EAAM,QAAU,UAAY,CACxBb,EAAO,EAAK,CAC5B,EACYa,EAAM,IAAM,iCACxB,CAAS,CACL,CACA,oBAAoBG,EAAQ,CACpB,OAAO,OAAO,OAAU,MACxB,OAAO,OAAS,IAEpB,IAAIR,EAAUQ,EAAO,aAAa,IAAI,EAClCC,EAAW,KAAK,aAAa,cAAc,EAE/C,GADA,QAAQ,IAAI,OAAO,MAAM,EACrB,OAAO,OAAO,OAAOT,CAAO,EAAK,KAAe,OAAO,OAAO,OAAOA,CAAO,EAAE,YAAc,WAC5F,cAAO,OAAOA,CAAO,EAAE,UAAS,EACzB,GAIX,OAAO,OAAOA,CAAO,EAAI,IAAI,GAAG,OAAOA,EAAS,CAC5C,OAAQ,OACR,MAAO,OACP,QAASS,EACT,WAAY,CACR,eAAkB,EAClB,YAAe,EACf,IAAO,EACP,SAAY,CACf,EACD,OAAQ,CACJ,QAAWC,EACX,cAAiBC,CACrB,CACZ,CAAS,EAID,SAASD,EAAcnC,EAAO,CAE1BA,EAAM,OAAO,WACjB,CAGA,IAAIqC,EAAO,GACX,SAASD,EAAoBpC,EAAO,CAChC,GAAIA,EAAM,MAAQ,GAAG,YAAY,SAAW,CAACqC,EAAM,CAC/C,IAAIC,EAAO,SAAS,eAAeb,CAAO,EAC1Ca,EAAK,UAAU,IAAI,cAAc,EACjCD,EAAO,GAEf,CACJ,CACA,WAAW,oBAAqB,CAC5B,MAAO,CAAC,YAAY,CACxB,CACA,yBAAyBE,EAAUC,EAAQC,EAAQ,CAC/C,OAAQF,EAAQ,CACZ,IAAK,aAAc,CACf,GAAIC,GAAUC,EAAQ,CAClB,MAAMC,EAAc,KAAK,WAAW,cAAc,iBAAiB,EAC/DA,GACAA,EAAY,aAAa,MAAOD,CAAM,EAE9C,KACJ,CACJ,CACJ,CACJ"}
1
+ {"version":3,"file":"video-card.component.min.js","sources":["../_global.js","../../modules/card.module.js","video-card.component.js"],"sourcesContent":["// @ts-nocheck\nexport const trackComponentRegistered = (componentName) => {\n // Data layer Web component created\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n \"event\": \"customElementRegistered\",\n \"element\": componentName\n });\n};\nexport const trackComponent = (component, componentName, trackEvents) => {\n // Data layer Web component created\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n \"event\": \"customElementAdded\",\n \"element\": componentName\n });\n trackEvents.forEach((eventName) => {\n component.addEventListener(eventName, function (event) {\n let eventDetails = {\n \"event\": eventName,\n \"element\": componentName,\n \"target\": event.target\n };\n Object.keys(event.detail).forEach((eventKey) => {\n const eventDetail = event.detail[eventKey];\n eventDetails[eventKey] = eventDetail;\n });\n window.dataLayer.push(eventDetails);\n });\n });\n return true;\n};\n","export const cardHTML = `<div class=\"card__head\" part=\"head\">\n <slot name=\"head\"></slot>\n</div>\n<div class=\"card__badges\"><slot name=\"badges\"></slot></div>\n<slot name=\"checkbox\" class=\"activate-prevent-hover\"></slot>\n<div class=\"card__body\" part=\"body\">\n <slot></slot>\n <slot name=\"secondary\" part=\"secondary\"></slot>\n</div>\n<div class=\"card__details\" part=\"details\">\n <slot name=\"details\"></slot>\n</div>\n<div class=\"card__footer\" part=\"footer\">\n <slot name=\"footer\"></slot>\n</div>`;\nexport const setupCard = (cardComponent) => {\n cardComponent.classList.add('card');\n const cardHead = cardComponent.shadowRoot.querySelector('.card__head');\n const cardBody = cardComponent.shadowRoot.querySelector('.card__body');\n if (cardComponent.hasAttribute('data-image')) {\n cardHead.innerHTML += `<img src=\"${cardComponent.getAttribute('data-image')}\" alt=\"\" loading=\"lazy\" part=\"image\" />`;\n }\n // Inset the HTML for the data total or icon fallback\n if (cardComponent.hasAttribute('data-total')) {\n cardBody.insertAdjacentHTML('beforeend', `<div class=\"card__total\">${cardComponent.getAttribute('data-total')}</div>`);\n }\n else if (cardComponent.querySelector('[slot=\"total-icon\"]')) {\n cardBody.insertAdjacentHTML('beforeend', `<div class=\"card__total\"><slot name=\"total-icon\"></slot></div>`);\n }\n if (!cardComponent.querySelector('[slot=\"badges\"]')) {\n cardComponent.shadowRoot.querySelector('.card__badges').classList.add('empty');\n }\n else {\n cardComponent.shadowRoot.querySelector('.card__badges').classList.remove('empty');\n }\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};\n// @ts-nocheck\nimport { trackComponent, trackComponentRegistered } from \"../_global.js\";\nimport { cardHTML, setupCard } from \"../../modules/card.module.js\";\ntrackComponentRegistered(\"iam-video-card\");\nclass iamVideoCard extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';\n const loadCSS = `@import \"${assetLocation}/css/components/video-card.component.css\";`;\n const template = document.createElement('template');\n template.innerHTML = `\n <style>\n ${this.hasAttribute('css') ? `@import \"${this.getAttribute('css')}\";` : ``}\n \n ${loadCSS}\n </style>\n ${cardHTML}\n <dialog>\n <div class=\"embed\"></div>\n </dialog>\n `;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n return __awaiter(this, void 0, void 0, function* () {\n const cardComponent = this;\n const cardHead = cardComponent.shadowRoot.querySelector('.card__head');\n const randLetter = String.fromCharCode(65 + Math.floor(Math.random() * 26));\n const link_id = randLetter + Date.now();\n let dialog;\n let embed;\n setupCard(cardComponent);\n // Check if youtube or vimeo video link is present\n if (cardComponent.querySelector('[data-youtube]'))\n cardComponent.setAttribute('data-youtube', cardComponent.querySelector('[data-youtube]').getAttribute('data-youtube'));\n if (cardComponent.querySelector('[data-vimeo]'))\n cardComponent.setAttribute('data-vimeo', cardComponent.querySelector('[data-vimeo]').getAttribute('data-vimeo'));\n // General dialog stuff\n if (cardComponent.hasAttribute('data-youtube') || cardComponent.hasAttribute('data-vimeo')) {\n cardHead.setAttribute('tabindex', '0');\n // Add dialog to page\n if (!document.getElementById(`${link_id}-dialog`)) {\n document.body.insertAdjacentHTML('beforeend', `<dialog id=\"${link_id}-dialog\"><div class=\"embed\" id=\"${link_id}\"></div></dialog>`);\n }\n dialog = document.getElementById(`${link_id}-dialog`);\n embed = document.getElementById(link_id);\n }\n // Youtube\n if (cardComponent.hasAttribute('data-youtube')) {\n // Load the scripts only once\n if (!document.body.classList.contains('youtubeLoaded')) {\n let loaded = yield this.loadYouTubeScripts();\n }\n cardHead.addEventListener('click', function () {\n const customEvent = new CustomEvent(\"play-video\", { detail: { 'Video Type': 'YoutTube', 'ID': cardComponent.getAttribute('data-youtube') } });\n cardComponent.dispatchEvent(customEvent);\n cardComponent.createYoutTubeVideo(embed);\n dialog.showModal();\n });\n dialog.addEventListener(\"close\", (event) => {\n if (window.player[embed.getAttribute('id')] && typeof window.player[embed.getAttribute('id')].pauseVideo == \"function\") {\n window.player[embed.getAttribute('id')].pauseVideo();\n }\n const customEvent = new CustomEvent(\"close-video\", { detail: { 'Video Type': 'YoutTube', 'ID': cardComponent.getAttribute('data-youtube') } });\n cardComponent.dispatchEvent(customEvent);\n });\n }\n else if (cardComponent.hasAttribute('data-vimeo')) { // Vimeo\n cardHead.addEventListener('click', function () {\n const videoId = cardComponent.getAttribute('data-vimeo');\n const customEvent = new CustomEvent(\"play-video\", { detail: { 'Video Type': 'Vimeo', 'ID': videoId } });\n cardComponent.dispatchEvent(customEvent);\n if (!embed.querySelector('iframe'))\n embed.innerHTML = `<iframe src=\"https://player.vimeo.com/video/${videoId}?autoplay=1\" width=\"100%\" height=\"100%\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>`;\n dialog.showModal();\n });\n dialog.addEventListener(\"close\", (event) => {\n embed.innerHTML = ``; // Remove the video since we cant pause it\n const customEvent = new CustomEvent(\"close-video\", { detail: { 'Video Type': 'Vimeo', 'ID': cardComponent.getAttribute('data-vimeo') } });\n cardComponent.dispatchEvent(customEvent);\n });\n }\n trackComponent(cardComponent, \"iam-video-card\", ['play-video', 'close-video']);\n });\n }\n loadYouTubeScripts() {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.onload = function () {\n // This code loads the IFrame Player API code asynchronously.\n var tag = document.createElement('script');\n tag.src = \"https://www.youtube.com/iframe_api\";\n var firstScriptTag = document.getElementsByTagName('script')[0];\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n document.body.classList.add('youtubeLoaded');\n resolve(true);\n };\n image.onerror = function () {\n reject(false);\n };\n image.src = \"https://youtube.com/favicon.ico\";\n });\n }\n createYoutTubeVideo(target) {\n if (typeof window.player == \"undefined\") {\n window.player = [];\n }\n var link_id = target.getAttribute('id');\n var video_id = this.getAttribute('data-youtube');\n console.log(window.player);\n if (typeof window.player[link_id] != 'undefined' && typeof window.player[link_id].pauseVideo == \"function\") {\n window.player[link_id].playVideo();\n return false;\n }\n // This function creates an <iframe> (and YouTube player) after the API code downloads.\n //function onYouTubeIframeAPIReady() {\n window.player[link_id] = new YT.Player(link_id, {\n height: '100%',\n width: '100%',\n videoId: video_id,\n playerVars: {\n 'modestbranding': 1,\n 'playsinline': 1,\n 'rel': 0,\n 'showinfo': 0\n },\n events: {\n 'onReady': onPlayerReady,\n 'onStateChange': onPlayerStateChange\n }\n });\n //}\n //onYouTubeIframeAPIReady();\n // The API will call this function when the video player is ready.\n function onPlayerReady(event) {\n // Play the video straight away\n event.target.playVideo();\n }\n // The API calls this function when the player's state changes.\n // The function indicates that when playing a video (state=1)\n var done = false;\n function onPlayerStateChange(event) {\n if (event.data == YT.PlayerState.PLAYING && !done) {\n var link = document.getElementById(link_id);\n link.classList.add('player-ready');\n done = true;\n }\n }\n }\n static get observedAttributes() {\n return [\"data-image\"];\n }\n attributeChangedCallback(attrName, oldVal, newVal) {\n switch (attrName) {\n case \"data-image\": {\n if (oldVal != newVal) {\n const cardHeadImg = this.shadowRoot.querySelector('.card__head img');\n if (cardHeadImg)\n cardHeadImg.setAttribute('src', newVal);\n }\n break;\n }\n }\n }\n}\nexport default iamVideoCard;\n"],"names":["trackComponentRegistered","componentName","trackComponent","component","trackEvents","eventName","event","eventDetails","eventKey","eventDetail","cardHTML","setupCard","cardComponent","cardHead","cardBody","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","e","rejected","result","iamVideoCard","template","link_id","dialog","embed","customEvent","videoId","image","tag","firstScriptTag","target","video_id","onPlayerReady","onPlayerStateChange","done","link","attrName","oldVal","newVal","cardHeadImg"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v6.1.0--beta
3
- * Copyright 2022-2024 iamproperty
4
- */(function(t){typeof define=="function"&&define.amd?define(t):t()})(function(){"use strict";var t=["accordion","header","table","tabs","card","filter-card","video-card","record-card","filterlist","applied-filters","pagination","notification","actionbar","nav","collapsible-side","address-lookup","fileupload","search","inline-edit","multiselect","slider","carousel","marketing","barchart"],a="iam",i={rootMargin:"50px",threshold:.1},r=".component.min.js";t.forEach(e=>{if(document.getElementsByTagName("".concat(a,"-").concat(e)).length!==0){var s=l=>{l.forEach(o=>{o.intersectionRatio>0&&(console.log(e),import("./components/".concat(e,"/").concat(e).concat(r)).then(c=>{window.customElements.get("".concat(a,"-").concat(e))||window.customElements.define("".concat(a,"-").concat(e),c.default)}).catch(c=>{console.log(c.message)}),n.unobserve(o.target))})},n=new IntersectionObserver(s,i);n.observe(document.getElementsByTagName("".concat(a,"-").concat(e))[0])}})});
2
+ * iamKey v6.1.0--beta3
3
+ * Copyright 2022-2025 iamproperty
4
+ */(function(t){typeof define=="function"&&define.amd?define(t):t()})(function(){"use strict";var t=["accordion","header","table","tabs","card","filter-card","video-card","record-card","filterlist","applied-filters","pagination","notification","actionbar","nav","collapsible-side","address-lookup","fileupload","search","inline-edit","multiselect","multi-step","slider","carousel","marketing","barchart"],a="iam",i={rootMargin:"50px",threshold:.1},r=".component.min.js";t.forEach(e=>{if(document.getElementsByTagName("".concat(a,"-").concat(e)).length!==0){var s=l=>{l.forEach(o=>{o.intersectionRatio>0&&(console.log(e),import("./components/".concat(e,"/").concat(e).concat(r)).then(c=>{window.customElements.get("".concat(a,"-").concat(e))||window.customElements.define("".concat(a,"-").concat(e),c.default)}).catch(c=>{console.log(c.message)}),n.unobserve(o.target))})},n=new IntersectionObserver(s,i);n.observe(document.getElementsByTagName("".concat(a,"-").concat(e))[0])}})});
5
5
  //# sourceMappingURL=components.bundle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components.bundle.js","sources":["components.js"],"sourcesContent":["\"use strict\";\n// @ts-nocheck\nconst components = [\"accordion\", \"header\", \"table\", \"tabs\", 'card', 'filter-card', 'video-card', 'record-card', \"filterlist\", 'applied-filters', 'pagination', 'notification', 'actionbar', 'nav', 'collapsible-side', 'address-lookup', 'fileupload', 'search', 'inline-edit', 'multiselect', 'slider', 'carousel', 'marketing', 'barchart'];\nconst prefix = \"iam\";\nconst options = {\n rootMargin: '50px',\n threshold: 0.1\n};\nconst componentExt = \".component.min.js\";\n// Load components - Each component will load once the first of its type has been loaded\ncomponents.forEach((component) => {\n if (document.getElementsByTagName(`${prefix}-${component}`).length === 0)\n return;\n let callback = (entries) => {\n entries.forEach((entry) => {\n if (entry.intersectionRatio > 0) {\n console.log(component);\n import(`./components/${component}/${component}${componentExt}`).then(module => {\n if (!window.customElements.get(`${prefix}-${component}`))\n window.customElements.define(`${prefix}-${component}`, module.default);\n }).catch((err) => {\n console.log(err.message);\n });\n intObserver.unobserve(entry.target);\n }\n });\n };\n const intObserver = new IntersectionObserver(callback, options);\n intObserver.observe(document.getElementsByTagName(`${prefix}-${component}`)[0]);\n});\n"],"names":["components","prefix","options","rootMargin","threshold","componentExt","forEach","component","document","getElementsByTagName","concat","length","callback","entries","entry","intersectionRatio","console","log","then","module","window","customElements","get","define","default","catch","err","message","intObserver","unobserve","target","IntersectionObserver","observe"],"mappings":";;;+FAEA,IAAMA,EAAa,CAAC,YAAa,SAAU,QAAS,OAAQ,OAAQ,cAAe,aAAc,cAAe,aAAc,kBAAmB,aAAc,eAAgB,YAAa,MAAO,mBAAoB,iBAAkB,aAAc,SAAU,cAAe,cAAe,SAAU,WAAY,YAAa,UAAU,EACtUC,EAAS,MACTC,EAAU,CACZC,WAAY,OACZC,UAAW,EACf,EACMC,EAAe,oBAErBL,EAAWM,QAASC,GAAc,CAC9B,GAAIC,SAASC,qBAAoBC,GAAAA,OAAIT,EAAM,GAAA,EAAAS,OAAIH,CAAS,CAAE,EAAEI,SAAW,EAEvE,KAAIC,EAAYC,GAAY,CACxBA,EAAQP,QAASQ,GAAU,CACnBA,EAAMC,kBAAoB,IAC1BC,QAAQC,IAAIV,CAAS,EACrB,uBAAMG,OAAiBH,EAASG,GAAAA,EAAAA,OAAIH,CAAS,EAAAG,OAAGL,CAAY,GAAIa,KAAKC,GAAU,CACtEC,OAAOC,eAAeC,IAAG,GAAAZ,OAAIT,EAAMS,GAAAA,EAAAA,OAAIH,CAAS,CAAE,GACnDa,OAAOC,eAAeE,OAAM,GAAAb,OAAIT,EAAMS,GAAAA,EAAAA,OAAIH,CAAS,EAAIY,EAAOK,OAAO,CAC7E,CAAC,EAAEC,MAAOC,GAAQ,CACdV,QAAQC,IAAIS,EAAIC,OAAO,CAC3B,CAAC,EACDC,EAAYC,UAAUf,EAAMgB,MAAM,EAE1C,CAAC,GAECF,EAAc,IAAIG,qBAAqBnB,EAAUV,CAAO,EAC9D0B,EAAYI,QAAQxB,SAASC,wBAAoBC,OAAIT,EAAMS,GAAAA,EAAAA,OAAIH,CAAS,CAAE,EAAE,CAAC,CAAC,EAClF,CAAC"}
1
+ {"version":3,"file":"components.bundle.js","sources":["components.js"],"sourcesContent":["\"use strict\";\n// @ts-nocheck\nconst components = [\"accordion\", \"header\", \"table\", \"tabs\", 'card', 'filter-card', 'video-card', 'record-card', \"filterlist\", 'applied-filters', 'pagination', 'notification', 'actionbar', 'nav', 'collapsible-side', 'address-lookup', 'fileupload', 'search', 'inline-edit', 'multiselect', 'multi-step', 'slider', 'carousel', 'marketing', 'barchart'];\nconst prefix = \"iam\";\nconst options = {\n rootMargin: '50px',\n threshold: 0.1\n};\nconst componentExt = \".component.min.js\";\n// Load components - Each component will load once the first of its type has been loaded\ncomponents.forEach((component) => {\n if (document.getElementsByTagName(`${prefix}-${component}`).length === 0)\n return;\n let callback = (entries) => {\n entries.forEach((entry) => {\n if (entry.intersectionRatio > 0) {\n console.log(component);\n import(`./components/${component}/${component}${componentExt}`).then(module => {\n if (!window.customElements.get(`${prefix}-${component}`))\n window.customElements.define(`${prefix}-${component}`, module.default);\n }).catch((err) => {\n console.log(err.message);\n });\n intObserver.unobserve(entry.target);\n }\n });\n };\n const intObserver = new IntersectionObserver(callback, options);\n intObserver.observe(document.getElementsByTagName(`${prefix}-${component}`)[0]);\n});\n"],"names":["components","prefix","options","rootMargin","threshold","componentExt","forEach","component","document","getElementsByTagName","concat","length","callback","entries","entry","intersectionRatio","console","log","then","module","window","customElements","get","define","default","catch","err","message","intObserver","unobserve","target","IntersectionObserver","observe"],"mappings":";;;+FAEA,IAAMA,EAAa,CAAC,YAAa,SAAU,QAAS,OAAQ,OAAQ,cAAe,aAAc,cAAe,aAAc,kBAAmB,aAAc,eAAgB,YAAa,MAAO,mBAAoB,iBAAkB,aAAc,SAAU,cAAe,cAAe,aAAc,SAAU,WAAY,YAAa,UAAU,EACpVC,EAAS,MACTC,EAAU,CACZC,WAAY,OACZC,UAAW,EACf,EACMC,EAAe,oBAErBL,EAAWM,QAASC,GAAc,CAC9B,GAAIC,SAASC,qBAAoBC,GAAAA,OAAIT,EAAM,GAAA,EAAAS,OAAIH,CAAS,CAAE,EAAEI,SAAW,EAEvE,KAAIC,EAAYC,GAAY,CACxBA,EAAQP,QAASQ,GAAU,CACnBA,EAAMC,kBAAoB,IAC1BC,QAAQC,IAAIV,CAAS,EACrB,uBAAMG,OAAiBH,EAASG,GAAAA,EAAAA,OAAIH,CAAS,EAAAG,OAAGL,CAAY,GAAIa,KAAKC,GAAU,CACtEC,OAAOC,eAAeC,IAAG,GAAAZ,OAAIT,EAAMS,GAAAA,EAAAA,OAAIH,CAAS,CAAE,GACnDa,OAAOC,eAAeE,OAAM,GAAAb,OAAIT,EAAMS,GAAAA,EAAAA,OAAIH,CAAS,EAAIY,EAAOK,OAAO,CAC7E,CAAC,EAAEC,MAAOC,GAAQ,CACdV,QAAQC,IAAIS,EAAIC,OAAO,CAC3B,CAAC,EACDC,EAAYC,UAAUf,EAAMgB,MAAM,EAE1C,CAAC,GAECF,EAAc,IAAIG,qBAAqBnB,EAAUV,CAAO,EAC9D0B,EAAYI,QAAQxB,SAASC,wBAAoBC,OAAIT,EAAMS,GAAAA,EAAAA,OAAIH,CAAS,CAAE,EAAE,CAAC,CAAC,EAClF,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  // @ts-nocheck
3
- const components = ["accordion", "header", "table", "tabs", 'card', 'filter-card', 'video-card', 'record-card', "filterlist", 'applied-filters', 'pagination', 'notification', 'actionbar', 'nav', 'collapsible-side', 'address-lookup', 'fileupload', 'search', 'inline-edit', 'multiselect', 'slider', 'carousel', 'marketing', 'barchart'];
3
+ const components = ["accordion", "header", "table", "tabs", 'card', 'filter-card', 'video-card', 'record-card', "filterlist", 'applied-filters', 'pagination', 'notification', 'actionbar', 'nav', 'collapsible-side', 'address-lookup', 'fileupload', 'search', 'inline-edit', 'multiselect', 'multi-step', 'slider', 'carousel', 'marketing', 'barchart'];
4
4
  const prefix = "iam";
5
5
  const options = {
6
6
  rootMargin: '50px',
@@ -28,6 +28,9 @@ export const setupCard = (cardComponent) => {
28
28
  cardBody.insertAdjacentHTML('beforeend', `<div class="card__total"><slot name="total-icon"></slot></div>`);
29
29
  }
30
30
  if (!cardComponent.querySelector('[slot="badges"]')) {
31
- cardComponent.shadowRoot.querySelector('.card__badges').remove();
31
+ cardComponent.shadowRoot.querySelector('.card__badges').classList.add('empty');
32
+ }
33
+ else {
34
+ cardComponent.shadowRoot.querySelector('.card__badges').classList.remove('empty');
32
35
  }
33
36
  };
@@ -1,9 +1,62 @@
1
1
  // @ts-nocheck
2
- function carousel(carouselElement, row) {
2
+ export const generateThumbnailList = function (carouselComponent) {
3
+ let thumbnailImages = [];
4
+ Array.from(carouselComponent.querySelectorAll(':scope > div')).forEach((slide, index) => {
5
+ if (slide.hasAttribute('data-thumbnail')) {
6
+ thumbnailImages[index] = slide.getAttribute('data-thumbnail');
7
+ }
8
+ });
9
+ return thumbnailImages;
10
+ };
11
+ export const generatePipsHTML = function (carouselComponent, thumbnailImages) {
12
+ let itemCount = carouselComponent.querySelectorAll(':scope > div').length;
13
+ let pips = "";
14
+ for (let i = 1; i <= itemCount; i++) {
15
+ let pipContent = null;
16
+ let pipClass = '';
17
+ if (thumbnailImages.length && thumbnailImages[i - 1]) {
18
+ pipClass = 'has-thumbnail';
19
+ pipContent = `<img src="${thumbnailImages[i - 1]}" alt="Slide ${i}" height="148"/>`;
20
+ }
21
+ else {
22
+ pipContent = `Slide ${i}`;
23
+ }
24
+ pips += `<button class="control-${i} ${pipClass}" data-slide="${i}" ${i == 1 ? "aria-current" : ""}>${pipContent}</button>`;
25
+ }
26
+ return pips;
27
+ };
28
+ const getProgressMax = function (itemCount, visibleItems) {
29
+ if (visibleItems == 1) {
30
+ return itemCount;
31
+ }
32
+ let max = (Math.ceil(itemCount / visibleItems) * visibleItems) - visibleItems;
33
+ return max + 1;
34
+ };
35
+ const getProgressPercent = function (value, max) {
36
+ return (((value - 1) / (max - 1)) * 100);
37
+ };
38
+ export const carousel = function (carouselComponent) {
3
39
  var scrollTimeout;
40
+ const carouselElement = carouselComponent.shadowRoot.querySelector('.carousel');
4
41
  let carouselInner = carouselElement.querySelector('.carousel__inner');
5
42
  let carouselControls = carouselElement.querySelector('.carousel__controls');
6
- let itemCount = row.querySelectorAll(':scope > .col').length;
43
+ let carouselProgress = carouselElement.querySelector('.carousel__progress [type="range"]');
44
+ let itemCount = carouselComponent.querySelectorAll(':scope > div').length;
45
+ let scrollArea = carouselInner.clientWidth;
46
+ let itemWidth = carouselComponent.querySelector(':scope > div').scrollWidth;
47
+ let visibleItems = Math.round(scrollArea / itemWidth);
48
+ carouselProgress.setAttribute('min', 1);
49
+ carouselProgress.setAttribute('step', visibleItems);
50
+ let progressMax = getProgressMax(itemCount, visibleItems);
51
+ carouselProgress.setAttribute('max', progressMax);
52
+ carouselProgress.value = 1;
53
+ let percent = getProgressPercent(1, progressMax);
54
+ carouselProgress.style.setProperty('--percent', percent + "%");
55
+ let stepperInterval, stepperEvent = "mouseup", stepperStart = "mousedown";
56
+ if ("ontouchstart" in document.documentElement) {
57
+ stepperEvent = "touchend";
58
+ stepperStart = "touchstart";
59
+ }
7
60
  // On scroll we need to make sure the buttons get corrected and the next testimonial is shown
8
61
  carouselInner.addEventListener('scroll', function (e) {
9
62
  clearTimeout(scrollTimeout);
@@ -12,13 +65,14 @@ function carousel(carouselElement, row) {
12
65
  let scrollWidth = carouselInner.scrollWidth;
13
66
  let scrollLeft = carouselInner.scrollLeft;
14
67
  let targetSlide = Math.round((scrollLeft / scrollWidth) * itemCount) + 1;
15
- let itemWidth = row.querySelector(':scope > .col').scrollWidth;
16
- let lastItemOffset = row.querySelector(':scope > .col:last-child').offsetLeft;
68
+ let itemWidth = carouselComponent.querySelector(':scope > div').scrollWidth;
69
+ let lastItemOffset = carouselComponent.querySelector(':scope > div:last-child').offsetLeft;
17
70
  //+60px here is to account for when the next offscreen slide is visible beneath the next arrow
18
71
  let lastItemInView = carouselInner.scrollLeft + scrollArea + carouselInner.getBoundingClientRect().left >= (lastItemOffset + 60);
19
72
  let visibleItems = Math.round(scrollArea / itemWidth);
20
73
  //Check if theres room for more slides than we have
21
74
  let leftOverSpace = (Math.ceil(itemCount / visibleItems) * visibleItems) - itemCount;
75
+ carouselProgress.setAttribute('step', visibleItems);
22
76
  if (leftOverSpace > 0 && lastItemInView) {
23
77
  targetSlide = (Math.floor(itemCount / visibleItems) * visibleItems) + 1;
24
78
  }
@@ -36,6 +90,12 @@ function carousel(carouselElement, row) {
36
90
  carouselElement.querySelector('.btn-next').setAttribute('disabled', 'disabled');
37
91
  else
38
92
  carouselElement.querySelector('.btn-next').removeAttribute('disabled');
93
+ carouselProgress.value = targetSlide;
94
+ progressMax = getProgressMax(itemCount, visibleItems);
95
+ carouselProgress.setAttribute('max', progressMax);
96
+ percent = (targetSlide / progressMax) * 100;
97
+ percent = getProgressPercent(targetSlide, progressMax);
98
+ carouselProgress.style.setProperty('--percent', percent + "%");
39
99
  }, 100);
40
100
  }, false);
41
101
  // when the buttons are used we need to make sure the carousel scrolls to the correct place
@@ -47,7 +107,12 @@ function carousel(carouselElement, row) {
47
107
  button.removeAttribute('aria-current');
48
108
  });
49
109
  target.setAttribute('aria-current', true);
50
- const el = row.querySelector(`:scope > *:nth-child(${target.getAttribute('data-slide')})`);
110
+ const customEvent = new CustomEvent("pip-clicked", { detail: {
111
+ 'slide': target.getAttribute('data-slide')
112
+ }
113
+ });
114
+ carouselComponent.dispatchEvent(customEvent);
115
+ const el = carouselComponent.querySelector(`:scope > *:nth-child(${target.getAttribute('data-slide')})`);
51
116
  carouselInner.scroll({
52
117
  top: 0,
53
118
  left: el.offsetLeft - carouselInner.getBoundingClientRect().left,
@@ -60,9 +125,9 @@ function carousel(carouselElement, row) {
60
125
  carouselElement.addEventListener('click', function (e) {
61
126
  let scrollArea = carouselInner.clientWidth;
62
127
  let scrollWidth = carouselInner.scrollWidth;
63
- let itemWidth = row.querySelector(':scope > .col').scrollWidth;
128
+ let itemWidth = carouselComponent.querySelector(':scope > div').scrollWidth;
64
129
  let visibleItems = Math.round(scrollArea / itemWidth);
65
- let lastItemOffset = row.querySelector(':scope > .col:last-child').offsetLeft;
130
+ let lastItemOffset = carouselComponent.querySelector(':scope > div:last-child').offsetLeft;
66
131
  let lastItemInView = carouselInner.scrollLeft + scrollArea + carouselInner.getBoundingClientRect().left >= (lastItemOffset + 60);
67
132
  //Check if theres room for more slides than we have
68
133
  let leftOverSpace = (Math.ceil(itemCount / visibleItems) * visibleItems) - itemCount;
@@ -75,6 +140,12 @@ function carousel(carouselElement, row) {
75
140
  let movement = lastItemInView && leftOverSpace > 0 ? spacesToMove * itemWidth : carouselInner.clientWidth;
76
141
  for (var target = e.target; target && target != this; target = target.parentNode) {
77
142
  if (typeof target.matches == "function" && target.matches('.btn-next, .btn-prev')) {
143
+ let direction = target.matches('.btn-next') ? 'next' : 'prev';
144
+ const customEvent = new CustomEvent(`${direction}-clicked`, { detail: {
145
+ 'slide': target.getAttribute('data-go')
146
+ }
147
+ });
148
+ carouselComponent.dispatchEvent(customEvent);
78
149
  e.preventDefault();
79
150
  let scrollTo = target.classList.contains('btn-prev') ? carouselInner.scrollLeft - movement : carouselInner.scrollLeft + carouselInner.clientWidth;
80
151
  carouselInner.scroll({
@@ -86,5 +157,36 @@ function carousel(carouselElement, row) {
86
157
  }
87
158
  }
88
159
  }, false);
89
- }
160
+ carouselProgress.addEventListener(stepperStart, function (event) {
161
+ clearInterval(stepperInterval);
162
+ stepperInterval = setInterval(function () {
163
+ scrollArea = carouselInner.clientWidth;
164
+ itemWidth = carouselComponent.querySelector(':scope > div').scrollWidth;
165
+ visibleItems = Math.round(scrollArea / itemWidth);
166
+ carouselProgress.setAttribute('step', visibleItems);
167
+ progressMax = getProgressMax(itemCount, visibleItems);
168
+ carouselProgress.setAttribute('max', progressMax);
169
+ percent = getProgressPercent(carouselProgress.value, progressMax);
170
+ carouselProgress.style.setProperty('--percent', percent + "%");
171
+ }, 10);
172
+ });
173
+ carouselProgress.addEventListener(stepperEvent, function (event) {
174
+ clearInterval(stepperInterval);
175
+ });
176
+ carouselProgress.addEventListener('change', function (e) {
177
+ clearInterval(stepperInterval);
178
+ let target = carouselComponent.querySelector(`:scope > *:nth-child(${carouselProgress.value})`);
179
+ carouselInner.scroll({
180
+ top: 0,
181
+ left: target ? target.offsetLeft - carouselInner.getBoundingClientRect().left : 0,
182
+ behavior: 'smooth'
183
+ });
184
+ let direction = target.matches('.btn-next') ? 'next' : 'prev';
185
+ const customEvent = new CustomEvent(`slider-changed`, { detail: {
186
+ 'slide': carouselProgress.value
187
+ }
188
+ });
189
+ carouselComponent.dispatchEvent(customEvent);
190
+ }, false);
191
+ };
90
192
  export default carousel;
@@ -22,8 +22,10 @@ const extendDialogs = (body) => {
22
22
  // Open the modal!
23
23
  dialog.showModal();
24
24
  dialog.focus();
25
- let firstWidth = dialog.offsetWidth;
26
- dialog.setAttribute('style', `max-width: ${firstWidth}px;`);
25
+ if (!dialog.querySelector('iam-multi-step')) {
26
+ let firstWidth = dialog.offsetWidth;
27
+ dialog.setAttribute('style', `max-width: ${firstWidth}px;`);
28
+ }
27
29
  // When the modal is opened we want to make sure any duplicate checkboxes are matching the originals
28
30
  Array.from(dialog.querySelectorAll('[data-duplicate]')).forEach((element, index) => {
29
31
  const id = element.getAttribute('data-duplicate');
@@ -168,12 +170,8 @@ const extendDialogs = (body) => {
168
170
  return null;
169
171
  };
170
172
  export const createDialog = (dialog) => {
171
- // Multi dialog
172
- if (dialog.classList.contains('dialog--multi') && !dialog.querySelector(':scope > .steps')) {
173
- createMultiFormDialog(dialog);
174
- }
175
173
  // If you are using Vue eevents and bindings its recommended to add in the .mh-lg div manually to the dialog
176
- if (!dialog.querySelector(':scope .mh-lg') && !dialog.classList.contains('dialog--multi')) {
174
+ if (!dialog.querySelector(':scope .mh-lg') && !dialog.querySelector('iam-multi-step')) {
177
175
  dialog.innerHTML = `<div class="mh-lg">${dialog.innerHTML}</div>`;
178
176
  let dialogContent = dialog.querySelector('.mh-lg');
179
177
  let titleElement = dialog.querySelector('.mh-lg :is(.h1,.h2,.h3,.h4,.h5,.h6)');
@@ -188,120 +186,4 @@ export const createDialog = (dialog) => {
188
186
  if (!dialog.querySelector(':scope > button:first-child'))
189
187
  dialog.insertAdjacentHTML('afterbegin', `<button class="dialog__close">Close</button>`);
190
188
  };
191
- export const createMultiFormDialog = (dialog) => {
192
- let buttons = "";
193
- let fieldsets = Array.from(dialog.querySelectorAll('fieldset[data-title]'));
194
- let form = dialog.querySelector('form');
195
- fieldsets.forEach((fieldset, index) => {
196
- buttons += `<button data-title="${fieldset.getAttribute('data-title')}" type="button" class="${index == 0 ? "active" : ""}" tabindex="-1">${fieldset.getAttribute('data-title')}</button>`;
197
- const btnWrapper = document.createElement("div");
198
- btnWrapper.classList.add('btn--wrapper');
199
- fieldset.appendChild(btnWrapper);
200
- if (index != 0)
201
- btnWrapper.innerHTML += `<button data-title="${fieldsets[index - 1].getAttribute('data-title')}" class="btn btn-secondary mb-0" data-previous type="button">Previous</button>`;
202
- if (index != fieldsets.length - 1)
203
- btnWrapper.innerHTML += `<button data-title="${fieldsets[index + 1].getAttribute('data-title')}" class="btn btn-primary mb-0" data-next type="button">Next</button>`;
204
- // Last fieldset
205
- if (index == fieldsets.length - 1) {
206
- if (form && form.querySelector(':scope > button[type="submit"]')) {
207
- let existingButton = form.querySelector(':scope > button[type="submit"]');
208
- existingButton.classList.add('mb-0');
209
- btnWrapper.insertAdjacentElement('beforeend', existingButton);
210
- }
211
- else
212
- btnWrapper.innerHTML += `<button data-title="${fieldsets[index].getAttribute('data-title')}" class="btn btn-primary mb-0" data-next type="submit">Submit</button>`;
213
- }
214
- });
215
- dialog.insertAdjacentHTML('afterbegin', `<div class="steps bg-primary">${buttons}</div>`);
216
- // Open the fieldset with an error inside
217
- let validatedFieldsets = Array.from(dialog.querySelectorAll('fieldset.was-validated'));
218
- for (let i = 0; i < validatedFieldsets.length; i++) {
219
- let fieldset = validatedFieldsets[i];
220
- let fieldsetID = fieldset.getAttribute('data-title');
221
- if (fieldset.querySelector('.is-invalid')) {
222
- Array.from(dialog.querySelectorAll(`[data-title="${fieldsetID}"]`)).forEach((element, index) => {
223
- element.classList.add('active');
224
- });
225
- break;
226
- }
227
- else {
228
- Array.from(dialog.querySelectorAll(`[data-title="${fieldsetID}"]`)).forEach((element, index) => {
229
- element.classList.add('valid');
230
- });
231
- }
232
- }
233
- // Prevent the bubble messages
234
- dialog.addEventListener('invalid', (function () {
235
- return function (e) {
236
- e.preventDefault();
237
- };
238
- })(), true);
239
- function validateFieldset(button) {
240
- const currentFieldset = dialog.querySelector(`fieldset.active`) ? dialog.querySelector(`fieldset.active`) : dialog.querySelector(`fieldset[data-title]`);
241
- const currentFieldsetID = currentFieldset.getAttribute('data-title');
242
- let isFieldsetValid = true;
243
- currentFieldset.classList.add('was-validated');
244
- Array.from(currentFieldset.querySelectorAll('input')).forEach((input, index) => {
245
- if (!input.checkValidity())
246
- isFieldsetValid = false;
247
- });
248
- // If valid mode to next field set
249
- if (!isFieldsetValid) {
250
- Array.from(dialog.querySelectorAll(`[data-title="${currentFieldsetID}"]`)).forEach((element, index) => {
251
- element.classList.remove('valid');
252
- });
253
- }
254
- else {
255
- Array.from(dialog.querySelectorAll(`[data-title="${currentFieldsetID}"]`)).forEach((element, index) => {
256
- element.classList.add('valid');
257
- });
258
- }
259
- // Allow the previous button to navigate
260
- if (isFieldsetValid || !button.hasAttribute('data-next')) {
261
- const fieldset = dialog.querySelector(`fieldset[data-title="${button.getAttribute('data-title')}"]`);
262
- const step = dialog.querySelector(`.steps button[data-title="${button.getAttribute('data-title')}"]`);
263
- Array.from(dialog.querySelectorAll('button')).forEach((button, index) => {
264
- button.classList.remove('active');
265
- });
266
- Array.from(dialog.querySelectorAll('fieldset')).forEach((button, index) => {
267
- button.classList.remove('active');
268
- });
269
- step.classList.add('active');
270
- fieldset.classList.add('active');
271
- }
272
- let fieldsetCount = Array.from(dialog.querySelectorAll(`fieldset`)).length;
273
- let validFieldsetCount = Array.from(dialog.querySelectorAll(`fieldset.valid`)).length;
274
- // update the progress bar
275
- dialog.style.setProperty('--progress', `${(validFieldsetCount / (fieldsetCount - 1) * 100)}%`);
276
- }
277
- // remove error messages from server
278
- dialog.addEventListener('keydown', (event) => {
279
- if (event && event.target instanceof HTMLElement && event.target.closest('button')) {
280
- const button = event.target.closest('button');
281
- if (event.keyCode == 13 && button.getAttribute('type') != "submit") {
282
- event.preventDefault();
283
- validateFieldset(button);
284
- }
285
- }
286
- if (event && event.target instanceof HTMLElement && event.target.closest('input')) {
287
- const input = event.target.closest('input');
288
- input.classList.remove('is-invalid');
289
- if (event.keyCode == 13) {
290
- event.preventDefault();
291
- }
292
- }
293
- });
294
- dialog.addEventListener('click', (event) => {
295
- if (event && event.target instanceof HTMLElement && event.target.closest('button[type="submit"]')) {
296
- const form = event.target.closest('form');
297
- form.classList.add('was-validated');
298
- }
299
- else if (event && event.target instanceof HTMLElement && event.target.closest('button[data-title]')) {
300
- const button = event.target.closest('button[data-title]');
301
- validateFieldset(button);
302
- }
303
- ;
304
- return null;
305
- });
306
- };
307
189
  export default extendDialogs;