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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/assets/css/components/actionbar.component.css +1 -1
  2. package/assets/css/components/actionbar.component.css.map +1 -1
  3. package/assets/css/components/address-lookup.component.css +1 -1
  4. package/assets/css/components/address-lookup.component.css.map +1 -1
  5. package/assets/css/components/applied-filters.css +1 -1
  6. package/assets/css/components/applied-filters.css.map +1 -1
  7. package/assets/css/components/barchart.component.css +1 -1
  8. package/assets/css/components/barchart.component.css.map +1 -1
  9. package/assets/css/components/calendar.component.css +1 -1
  10. package/assets/css/components/calendar.component.css.map +1 -1
  11. package/assets/css/components/card.component.css +1 -1
  12. package/assets/css/components/card.component.css.map +1 -1
  13. package/assets/css/components/carousel.component.css +1 -1
  14. package/assets/css/components/carousel.component.css.map +1 -1
  15. package/assets/css/components/collapsible-side.css +1 -1
  16. package/assets/css/components/collapsible-side.css.map +1 -1
  17. package/assets/css/components/config.component.css +1 -1
  18. package/assets/css/components/config.component.css.map +1 -1
  19. package/assets/css/components/content.component.css +1 -1
  20. package/assets/css/components/content.component.css.map +1 -1
  21. package/assets/css/components/doughnutchart.component.css +1 -1
  22. package/assets/css/components/doughnutchart.component.css.map +1 -1
  23. package/assets/css/components/fileupload.css +1 -1
  24. package/assets/css/components/fileupload.css.map +1 -1
  25. package/assets/css/components/inline-edit.css +1 -1
  26. package/assets/css/components/inline-edit.css.map +1 -1
  27. package/assets/css/components/modal.component.css +1 -1
  28. package/assets/css/components/modal.component.css.map +1 -1
  29. package/assets/css/components/multi-step-modal.component.css +1 -1
  30. package/assets/css/components/multi-step-modal.component.css.map +1 -1
  31. package/assets/css/components/multiselect.css +1 -1
  32. package/assets/css/components/multiselect.css.map +1 -1
  33. package/assets/css/components/nav.component.css +1 -1
  34. package/assets/css/components/nav.component.css.map +1 -1
  35. package/assets/css/components/pagination.css +1 -1
  36. package/assets/css/components/pagination.css.map +1 -1
  37. package/assets/css/components/split-button.component.css +1 -1
  38. package/assets/css/components/split-button.component.css.map +1 -1
  39. package/assets/css/components/tabs.component.css +1 -1
  40. package/assets/css/components/tabs.component.css.map +1 -1
  41. package/assets/css/components/tabs.config.css +1 -1
  42. package/assets/css/components/tabs.config.css.map +1 -1
  43. package/assets/css/components/video-card.component.css +1 -1
  44. package/assets/css/components/video-card.component.css.map +1 -1
  45. package/assets/css/components/video-modal.component.css +1 -1
  46. package/assets/css/components/video-modal.component.css.map +1 -1
  47. package/assets/css/components/video.component.css +1 -0
  48. package/assets/css/components/video.component.css.map +1 -0
  49. package/assets/css/core.min.css +1 -1
  50. package/assets/css/core.min.css.map +1 -1
  51. package/assets/css/elements/badge-tag.css +1 -1
  52. package/assets/css/elements/badge-tag.css.map +1 -1
  53. package/assets/css/elements/buttons--action.css +1 -1
  54. package/assets/css/elements/buttons--action.css.map +1 -1
  55. package/assets/css/elements/buttons--global.css +1 -1
  56. package/assets/css/elements/buttons--global.css.map +1 -1
  57. package/assets/css/elements/buttons.css +1 -1
  58. package/assets/css/elements/buttons.css.map +1 -1
  59. package/assets/css/elements/links.css +1 -1
  60. package/assets/css/elements/links.css.map +1 -1
  61. package/assets/css/style.min.css +1 -1
  62. package/assets/css/style.min.css.map +1 -1
  63. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  64. package/assets/js/components/actionbar/actionbar.component.min.js +2 -2
  65. package/assets/js/components/address-lookup/address-lookup.component.min.js +4 -4
  66. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  67. package/assets/js/components/advanced-select/advanced-select.component.js +21 -7
  68. package/assets/js/components/advanced-select/advanced-select.component.min.js +4 -4
  69. package/assets/js/components/advanced-select/advanced-select.component.min.js.map +1 -1
  70. package/assets/js/components/applied-filters/applied-filters.component.min.js +2 -2
  71. package/assets/js/components/barchart/barchart.component.min.js +6 -6
  72. package/assets/js/components/barchart/barchart.component.min.js.map +1 -1
  73. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  74. package/assets/js/components/calendar/calendar.component.min.js +2 -2
  75. package/assets/js/components/card/card.component.min.js +2 -2
  76. package/assets/js/components/carousel/carousel.component.min.js +3 -3
  77. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +2 -2
  78. package/assets/js/components/config/config.component.min.js +2 -2
  79. package/assets/js/components/content/content.component.min.js +2 -2
  80. package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
  81. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +4 -4
  82. package/assets/js/components/fileupload/fileupload.component.min.js +2 -2
  83. package/assets/js/components/filter-card/filter-card.component.min.js +1 -1
  84. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  85. package/assets/js/components/form/form.component.min.js +1 -1
  86. package/assets/js/components/header/header.component.min.js +1 -1
  87. package/assets/js/components/inline-edit/inline-edit.component.min.js +4 -4
  88. package/assets/js/components/input/input.component.min.js +1 -1
  89. package/assets/js/components/input-range/input-range.component.min.js +1 -1
  90. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  91. package/assets/js/components/menu/menu.component.min.js +1 -1
  92. package/assets/js/components/milestone/milestone.component.min.js +1 -1
  93. package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
  94. package/assets/js/components/modal/modal.component.js +2 -2
  95. package/assets/js/components/modal/modal.component.min.js +4 -4
  96. package/assets/js/components/modal/modal.component.min.js.map +1 -1
  97. package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
  98. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +2 -2
  99. package/assets/js/components/multiselect/multiselect.component.min.js +2 -2
  100. package/assets/js/components/nav/nav.component.min.js +2 -2
  101. package/assets/js/components/notification/notification.component.min.js +1 -1
  102. package/assets/js/components/pagination/pagination.component.min.js +2 -2
  103. package/assets/js/components/password/password.component.min.js +1 -1
  104. package/assets/js/components/popover/popover.component.min.js +1 -1
  105. package/assets/js/components/rank/rank.component.min.js +1 -1
  106. package/assets/js/components/rankings/rankings.component.min.js +1 -1
  107. package/assets/js/components/rating/rating.component.min.js +1 -1
  108. package/assets/js/components/record-card/record-card.component.min.js +1 -1
  109. package/assets/js/components/search/search.component.min.js +5 -5
  110. package/assets/js/components/search/search.component.min.js.map +1 -1
  111. package/assets/js/components/slider/slider.component.min.js +1 -1
  112. package/assets/js/components/split-button/split-button.component.min.js +2 -2
  113. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +8 -8
  114. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
  115. package/assets/js/components/table/table.component.min.js +1 -1
  116. package/assets/js/components/table-ajax/table-ajax.component.min.js +1 -1
  117. package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
  118. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
  119. package/assets/js/components/table-submit/table-submit.component.min.js +1 -1
  120. package/assets/js/components/tabs/tabs.component.js +13 -0
  121. package/assets/js/components/tabs/tabs.component.min.js +4 -4
  122. package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
  123. package/assets/js/components/tag/tag.component.min.js +1 -1
  124. package/assets/js/components/tooltip/tooltip.component.min.js +1 -1
  125. package/assets/js/components/video/video.component.js +67 -0
  126. package/assets/js/components/video/video.component.min.js +21 -0
  127. package/assets/js/components/video/video.component.min.js.map +1 -0
  128. package/assets/js/components/video-card/video-card.component.js +42 -59
  129. package/assets/js/components/video-card/video-card.component.min.js +15 -7
  130. package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
  131. package/assets/js/components/video-modal/video-modal.component.js +10 -44
  132. package/assets/js/components/video-modal/video-modal.component.min.js +12 -6
  133. package/assets/js/components/video-modal/video-modal.component.min.js.map +1 -1
  134. package/assets/js/components/word-count/word-count.component.min.js +1 -1
  135. package/assets/js/modules/advanced-select.js +31 -8
  136. package/assets/js/modules/modal.js +4 -2
  137. package/assets/js/modules/videos.js +42 -0
  138. package/assets/js/scripts.bundle.js +1 -1
  139. package/assets/js/scripts.bundle.min.js +1 -1
  140. package/assets/sass/_components.scss +1 -1
  141. package/assets/sass/components/tabs.component.scss +25 -0
  142. package/assets/sass/components/tabs.config.scss +5 -1
  143. package/assets/sass/components/video-card.component.scss +36 -62
  144. package/assets/sass/components/video-modal.component.scss +6 -4
  145. package/assets/sass/components/video.component.scss +75 -0
  146. package/assets/sass/elements/badge-tag.css +1 -1
  147. package/assets/sass/elements/buttons--action.css +17 -0
  148. package/assets/sass/elements/buttons--global.scss +5 -1
  149. package/assets/sass/elements/links.scss +53 -31
  150. package/assets/sass/foundations/animations.scss +1 -1
  151. package/assets/ts/components/advanced-select/advanced-select.component.ts +25 -7
  152. package/assets/ts/components/modal/modal.component.ts +2 -2
  153. package/assets/ts/components/tabs/tabs.component.ts +19 -0
  154. package/assets/ts/components/video/video.component.ts +74 -0
  155. package/assets/ts/components/video-card/video-card.component.ts +54 -75
  156. package/assets/ts/components/video-modal/video-modal.component.ts +10 -59
  157. package/assets/ts/modules/advanced-select.ts +38 -17
  158. package/assets/ts/modules/modal.ts +4 -2
  159. package/assets/ts/modules/videos.ts +57 -0
  160. package/dist/components.es.js +25 -25
  161. package/dist/components.umd.js +163 -133
  162. package/package.json +1 -1
  163. package/src/components/Video/Video.vue +22 -0
@@ -1,6 +1,7 @@
1
1
  import { trackComponent, trackComponentRegistered } from '../_global';
2
2
  import { cardHTML, setupCard } from '../../modules/card.module';
3
- import { loadYouTubeScripts, createYoutTubeVideo } from '../../modules/videos';
3
+ import { videoHTML, loadYouTubeScripts, createYoutTubeVideo,openYoutubeVideo,openVimeoVideo } from '../../modules/videos';
4
+ import { openModal,closeModal,closeButtonHtml } from '../../modules/modal';
4
5
 
5
6
  trackComponentRegistered('iam-video-card');
6
7
 
@@ -21,9 +22,11 @@ class iamVideoCard extends HTMLElement {
21
22
 
22
23
  ${loadCSS}
23
24
  </style>
25
+ <link rel="stylesheet" href="https://kit.fontawesome.com/8bd0fca975.css" crossorigin="anonymous" />
24
26
  ${cardHTML}
25
27
  <dialog>
26
- <div class="embed"></div>
28
+ ${closeButtonHtml}
29
+ ${videoHTML}
27
30
  </dialog>
28
31
  `;
29
32
 
@@ -34,97 +37,73 @@ class iamVideoCard extends HTMLElement {
34
37
  // eslint-disable-next-line @typescript-eslint/no-this-alias
35
38
  const cardComponent = this;
36
39
  const cardHead = cardComponent.shadowRoot.querySelector('.card__head');
40
+ const closeButton = this.shadowRoot?.querySelector('[data-close]');
37
41
 
38
- const randLetter = String.fromCharCode(65 + Math.floor(Math.random() * 26));
39
- const link_id = randLetter + Date.now();
40
-
41
- let dialog;
42
- let embed;
42
+ this.insertAdjacentHTML('beforeend', `<div class="embed" slot="video"></div>`);
43
+ const embed = this.querySelector('.embed');
43
44
 
44
45
  setupCard(cardComponent);
46
+
47
+ if (cardComponent.querySelector('[data-youtube]')){
48
+
49
+ cardComponent.setAttribute('data-youtube',cardComponent.querySelector('[data-youtube]').getAttribute('data-youtube'));
50
+ cardComponent.querySelector('[data-youtube]')?.remove();
51
+ }
45
52
 
46
- // Check if youtube or vimeo video link is present
47
- if (cardComponent.querySelector('[data-youtube]'))
48
- cardComponent.setAttribute(
49
- 'data-youtube',
50
- cardComponent.querySelector('[data-youtube]').getAttribute('data-youtube')
51
- );
52
-
53
- if (cardComponent.querySelector('[data-vimeo]'))
53
+ if (cardComponent.querySelector('[data-vimeo]')){
54
+
54
55
  cardComponent.setAttribute('data-vimeo', cardComponent.querySelector('[data-vimeo]').getAttribute('data-vimeo'));
56
+ cardComponent.querySelector('[data-vimeo]')?.remove();
57
+ }
58
+
59
+
55
60
 
56
- // General dialog stuff
57
- if (cardComponent.hasAttribute('data-youtube') || cardComponent.hasAttribute('data-vimeo')) {
58
- cardHead.setAttribute('tabindex', '0');
59
-
60
- // Add dialog to page
61
- if (!document.getElementById(`${link_id}-dialog`)) {
62
- document.body.insertAdjacentHTML(
61
+ cardHead.insertAdjacentHTML(
63
62
  'beforeend',
64
- `<dialog id="${link_id}-dialog"><div class="embed" id="${link_id}"></div></dialog>`
63
+ `<button class="btn btn-compact fa-play colour-success">Play</button>`
65
64
  );
66
- }
67
-
68
- dialog = document.getElementById(`${link_id}-dialog`);
69
- embed = document.getElementById(link_id);
70
- }
71
-
72
- // Youtube
73
- if (cardComponent.hasAttribute('data-youtube')) {
74
- // Load the scripts only once
75
- if (!document.body.classList.contains('youtubeLoaded')) {
76
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
77
- const loaded = await loadYouTubeScripts();
78
- }
79
- cardHead.addEventListener('click', function () {
80
- const customEvent = new CustomEvent('play-video', {
81
- detail: { 'Video Type': 'YoutTube', ID: cardComponent.getAttribute('data-youtube') },
82
- });
83
- cardComponent.dispatchEvent(customEvent);
84
-
85
- createYoutTubeVideo(embed, this.getAttribute('[data-youtube]'));
86
- dialog.showModal();
87
- });
88
-
89
- dialog.addEventListener('close', () => {
90
- if (
91
- window.player[embed.getAttribute('id')] &&
92
- typeof window.player[embed.getAttribute('id')].pauseVideo == 'function'
93
- ) {
94
- window.player[embed.getAttribute('id')].pauseVideo();
95
- }
96
65
 
97
- const customEvent = new CustomEvent('close-video', {
98
- detail: { 'Video Type': 'YoutTube', ID: cardComponent.getAttribute('data-youtube') },
99
- });
100
- cardComponent.dispatchEvent(customEvent);
101
- });
102
- } else if (cardComponent.hasAttribute('data-vimeo')) {
103
- // Vimeo
66
+
67
+ const button = cardHead?.querySelector('button');
104
68
 
105
- cardHead.addEventListener('click', function () {
106
- const videoId = cardComponent.getAttribute('data-vimeo');
69
+ cardHead.tabIndex = 6;
70
+ button?.tabIndex = -1;
107
71
 
108
- const customEvent = new CustomEvent('play-video', {
109
- detail: { 'Video Type': 'Vimeo', ID: videoId },
110
- });
111
- cardComponent.dispatchEvent(customEvent);
72
+ cardHead.addEventListener('click', () => {
73
+
74
+ if(this.hasAttribute('data-youtube')){
75
+ const youtubeId = this.getAttribute('data-youtube');
76
+ embed?.setAttribute('id',youtubeId);
77
+ openYoutubeVideo(this);
78
+ openModal(this);
79
+ }
80
+ else if(this.hasAttribute('data-vimeo')) {
81
+ openVimeoVideo(this);
82
+ openModal(this);
83
+ }
84
+ });
112
85
 
113
- if (!embed.querySelector('iframe'))
114
- 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>`;
86
+ closeButton?.addEventListener('click', () => {
87
+ closeModal(this);
115
88
 
116
- dialog.showModal();
117
- });
89
+ if(this.hasAttribute('data-youtube')){
90
+ const youtubeId = this.getAttribute('data-youtube');
118
91
 
119
- dialog.addEventListener('close', () => {
92
+ if (window.player[youtubeId] && typeof window.player[youtubeId].pauseVideo == 'function') {
93
+ window.player[youtubeId].pauseVideo();
94
+ }
95
+ }
96
+ else if(this.hasAttribute('data-vimeo')) {
97
+
120
98
  embed.innerHTML = ``; // Remove the video since we cant pause it
121
99
 
122
100
  const customEvent = new CustomEvent('close-video', {
123
- detail: { 'Video Type': 'Vimeo', ID: cardComponent.getAttribute('data-vimeo') },
101
+ detail: { 'Video Type': 'Vimeo', ID: this.getAttribute('data-vimeo') },
124
102
  });
125
- cardComponent.dispatchEvent(customEvent);
126
- });
127
- }
103
+ this.dispatchEvent(customEvent);
104
+ window.dataLayer.push(customEvent.detail);
105
+ }
106
+ });
128
107
 
129
108
  trackComponent(cardComponent, 'iam-video-card', ['play-video', 'close-video']);
130
109
  }
@@ -1,5 +1,5 @@
1
1
  import { trackComponent, trackComponentRegistered } from '../_global';
2
- import { loadYouTubeScripts, createYoutTubeVideo } from '../../modules/videos';
2
+ import { videoHTML, loadYouTubeScripts, createYoutTubeVideo,openYoutubeVideo,openVimeoVideo } from '../../modules/videos';
3
3
  import { openModal,closeModal,closeButtonHtml } from '../../modules/modal';
4
4
 
5
5
  trackComponentRegistered('iam-video-modal');
@@ -26,74 +26,22 @@ class iamVideoCard extends HTMLElement {
26
26
 
27
27
  <dialog>
28
28
  ${closeButtonHtml}
29
- <slot></slot>
29
+ ${videoHTML}
30
30
  </dialog>
31
31
  `;
32
32
 
33
33
  this.shadowRoot.appendChild(template.content.cloneNode(true));
34
34
  }
35
35
 
36
- openYoutubeVideo = async (id, component):void => {
37
-
38
- const embed = component.querySelector('.embed');
39
-
40
- openModal(id, component);
41
-
42
- const youtubeId = component.getAttribute('data-youtube');
43
- let loaded;
44
- if (!document.body.classList.contains('youtubeLoaded')) {
45
-
46
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
47
- loaded = await loadYouTubeScripts();
48
- }
49
-
50
- const customEvent = new CustomEvent('play-video', {
51
- detail: { 'Video Type': 'YoutTube', ID: youtubeId },
52
- });
53
- component.dispatchEvent(customEvent);
54
-
55
- const interval = setInterval(():void => {
56
-
57
- if(typeof YT != "undefined"){
58
- clearInterval(interval);
59
- createYoutTubeVideo(embed, youtubeId);
60
- }
61
- }, 200);
62
- // Limit the number of calls
63
- setTimeout(function() {
64
- clearInterval(interval)
65
- }, 2000);
66
-
67
- }
68
-
69
- openVimeoVideo = async (id, component):void => {
70
-
71
- const embed = component.querySelector('.embed');
72
-
73
- openModal(id, component);
74
-
75
- const vimeoId = component.getAttribute('data-vimeo');
76
-
77
- const customEvent = new CustomEvent('play-video', {
78
- detail: { 'Video Type': 'Vimeo', ID: vimeoId },
79
- });
80
- component.dispatchEvent(customEvent);
81
- window.dataLayer.push(customEvent.detail);
82
-
83
- if (!embed.querySelector('iframe'))
84
- embed.innerHTML = `<iframe src="https://player.vimeo.com/video/${vimeoId}?autoplay=1" width="100%" height="100%" frameborder="0" allow="autoplay; encrypted-media" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>`;
85
-
86
- }
87
-
88
36
  async connectedCallback(): void {
89
37
 
90
38
  const id = this.getAttribute('id');
91
39
  const closeButton = this.shadowRoot?.querySelector('[data-close]');
92
40
 
93
- this.innerHTML = `<div class="embed"></div>`
41
+ this.innerHTML = `<div class="embed" slot="video"></div>`;
94
42
  const embed = this.querySelector('.embed');
95
43
 
96
- document.addEventListener('click', async (e) => {
44
+ document.addEventListener('click', (e) => {
97
45
 
98
46
  if(e.target.closest(`[command="show-modal"][commandfor="${id}"]`)){
99
47
 
@@ -102,16 +50,19 @@ class iamVideoCard extends HTMLElement {
102
50
  if(this.hasAttribute('data-youtube')){
103
51
  const youtubeId = this.getAttribute('data-youtube');
104
52
  embed?.setAttribute('id',youtubeId);
105
- this.openYoutubeVideo(id, this);
53
+ openYoutubeVideo(this);
54
+ openModal(this);
106
55
  }
107
56
  else if(this.hasAttribute('data-vimeo')) {
108
- this.openVimeoVideo(id, this);
57
+ openVimeoVideo(this);
58
+ openModal(this);
109
59
  }
110
60
  }
111
61
  });
62
+
112
63
 
113
64
  closeButton?.addEventListener('click', () => {
114
- closeModal(id, this);
65
+ closeModal(this);
115
66
 
116
67
  if(this.hasAttribute('data-youtube')){
117
68
  const youtubeId = this.getAttribute('data-youtube');
@@ -24,13 +24,6 @@ function advancedSelect(advancedSelect, displayInputField, datalist, isSearch =
24
24
 
25
25
  });
26
26
 
27
- displayInputField.addEventListener('keyup', function () {
28
-
29
- if(displayInputField.value != ""){
30
- displayInputField.setAttribute('data-value', displayInputField.value);
31
- }
32
- });
33
-
34
27
  displayInputField.addEventListener('blur', function () {
35
28
  if (displayInputField.hasAttribute('data-value')) {
36
29
  displayInputField.value = displayInputField.getAttribute('data-value');
@@ -46,9 +39,20 @@ function advancedSelect(advancedSelect, displayInputField, datalist, isSearch =
46
39
 
47
40
  datalist.addEventListener('click', function (event) {
48
41
  if (event && event.target instanceof HTMLElement && event.target.closest('option')) {
49
- const option = event.target.closest('option');
42
+ const option = event.target.closest('option') as HTMLOptionElement;
43
+ const optionText = option.textContent?.trim() || option.value;
44
+
45
+ // Store actual value on the original input
46
+ const originalInput = advancedSelect.querySelector('input[type="hidden"]') as HTMLInputElement | null;
47
+ if (originalInput) {
48
+ originalInput.value = option.value;
49
+ originalInput.setAttribute('value', option.value);
50
+ }
50
51
 
51
- displayInputField.value = option.value;
52
+ // Show label text in the visible field
53
+ displayInputField.value = optionText;
54
+ displayInputField.setAttribute('data-value', optionText);
55
+ displayInputField.setAttribute('placeholder', optionText);
52
56
 
53
57
  if (typeof window.triggerDynamicEvent == 'function') window.triggerDynamicEvent(displayInputField);
54
58
 
@@ -60,7 +64,10 @@ function advancedSelect(advancedSelect, displayInputField, datalist, isSearch =
60
64
 
61
65
  setTimeout(() => {
62
66
  advancedSelect.dispatchEvent(new CustomEvent('update-value', {
63
- detail: { value: option.value },
67
+ detail: {
68
+ value: option.value,
69
+ text: optionText,
70
+ },
64
71
  }));
65
72
  }, 0);
66
73
  }
@@ -70,19 +77,21 @@ function advancedSelect(advancedSelect, displayInputField, datalist, isSearch =
70
77
  displayInputField.removeAttribute('data-value');
71
78
  currentFocus = -1;
72
79
 
73
- if(advancedSelect.tagName != "IAM-ADDRESS-LOOKUP"){
80
+ if (advancedSelect.tagName != "IAM-ADDRESS-LOOKUP") {
74
81
  const text = displayInputField.value.toUpperCase();
82
+
75
83
  for (const option of datalist.options) {
76
- if (option.value.toUpperCase().indexOf(text) > -1) {
84
+ const optionText = (option.textContent || option.value).toUpperCase();
85
+
86
+ if (optionText.indexOf(text) > -1) {
77
87
  option.style.display = 'block';
78
88
  option.classList.remove('hide');
79
89
  } else {
80
90
  option.style.display = 'none';
81
91
  option.classList.add('hide');
82
92
  }
83
- }
93
+ }
84
94
  }
85
-
86
95
  });
87
96
 
88
97
  advancedSelect.addEventListener('keydown', function (e) {
@@ -127,6 +136,12 @@ function advancedSelect(advancedSelect, displayInputField, datalist, isSearch =
127
136
 
128
137
 
129
138
  const emptyField = (): void => {
139
+ const originalInput = advancedSelect.querySelector('input[type="hidden"]') as HTMLInputElement | null;
140
+
141
+ if (originalInput) {
142
+ originalInput.value = '';
143
+ originalInput.setAttribute('value', '');
144
+ }
130
145
 
131
146
  displayInputField.removeAttribute('placeholder');
132
147
 
@@ -139,15 +154,21 @@ function advancedSelect(advancedSelect, displayInputField, datalist, isSearch =
139
154
 
140
155
  for (const optionInner of datalist.options) {
141
156
  optionInner.classList.remove('active');
157
+ optionInner.classList.remove('hide');
142
158
  optionInner.removeAttribute('style');
143
159
  }
144
160
 
145
161
  const updateEvent = new CustomEvent('close-button-pressed');
146
162
  advancedSelect.dispatchEvent(updateEvent);
147
- }
148
-
149
-
150
163
 
164
+ // Notify consumers the value was cleared
165
+ advancedSelect.dispatchEvent(new CustomEvent('update-value', {
166
+ detail: {
167
+ value: '',
168
+ text: '',
169
+ },
170
+ }));
171
+ }
151
172
 
152
173
  const closeBtn = advancedSelect.querySelector('.empty') ? advancedSelect.querySelector('.empty') : advancedSelect.shadowRoot.querySelector('.empty');
153
174
 
@@ -1,6 +1,7 @@
1
- export const openModal = (id, modal): void => {
1
+ export const openModal = (modal): void => {
2
2
 
3
3
  const dialog = modal.shadowRoot?.querySelector('dialog');
4
+ const id = modal.hasAttribute('id') ? modal.getAttribute('id') : 'unknown';
4
5
 
5
6
  dialog?.showModal();
6
7
  dialog?.focus();
@@ -20,9 +21,10 @@ export const openModal = (id, modal): void => {
20
21
  });
21
22
  }
22
23
 
23
- export const closeModal = (id, modal): void => {
24
+ export const closeModal = (modal): void => {
24
25
 
25
26
  const dialog = modal.shadowRoot?.querySelector('dialog');
27
+ const id = modal.hasAttribute('id') ? modal.getAttribute('id') : 'unknown';
26
28
 
27
29
  dialog?.close();
28
30
 
@@ -101,6 +101,14 @@ const videoSupport = async (body): void => {
101
101
  });
102
102
  };
103
103
 
104
+ export const videoHTML = `<div class="video-wrapper">
105
+ <slot name="video"></slot>
106
+ <picture>
107
+ <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" alt="" lazy="" />
108
+ </picture>
109
+ <button class="btn btn-compact fa-play m-0 colour-success">Play</button>
110
+ </div>`;
111
+
104
112
  export const loadYouTubeScripts = async (): any => {
105
113
  return new Promise((resolve, reject) => {
106
114
  const image = new Image();
@@ -133,6 +141,9 @@ export const createYoutTubeVideo = async (target, video_id): void | boolean => {
133
141
  return false;
134
142
  }
135
143
 
144
+ console.log('hi2');
145
+
146
+
136
147
  // This function creates an <iframe> (and YouTube player) after the API code downloads.
137
148
  //function onYouTubeIframeAPIReady() {
138
149
 
@@ -173,4 +184,50 @@ export const createYoutTubeVideo = async (target, video_id): void | boolean => {
173
184
  }
174
185
  };
175
186
 
187
+ export const openYoutubeVideo = async (component):void => {
188
+
189
+ const embed = component.shadowRoot.querySelector('.embed');
190
+ const youtubeId = component.getAttribute('data-youtube');
191
+
192
+ let loaded;
193
+ if (!document.body.classList.contains('youtubeLoaded')) {
194
+
195
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
196
+ loaded = await loadYouTubeScripts();
197
+ }
198
+
199
+ const customEvent = new CustomEvent('play-video', {
200
+ detail: { 'Video Type': 'YoutTube', ID: youtubeId },
201
+ });
202
+ component.dispatchEvent(customEvent);
203
+
204
+ const interval = setInterval(():void => {
205
+
206
+ if(typeof YT != "undefined"){
207
+ clearInterval(interval);
208
+ createYoutTubeVideo(embed, youtubeId);
209
+ }
210
+ }, 200);
211
+ // Limit the number of calls
212
+ setTimeout(function() {
213
+ clearInterval(interval)
214
+ }, 2000);
215
+
216
+ }
217
+
218
+ export const openVimeoVideo = async (component):void => {
219
+
220
+ const embed = component.querySelector('.embed');
221
+ const vimeoId = component.getAttribute('data-vimeo');
222
+
223
+ const customEvent = new CustomEvent('play-video', {
224
+ detail: { 'Video Type': 'Vimeo', ID: vimeoId },
225
+ });
226
+ component.dispatchEvent(customEvent);
227
+ window.dataLayer.push(customEvent.detail);
228
+
229
+ if (!embed.querySelector('iframe'))
230
+ embed.innerHTML = `<iframe src="https://player.vimeo.com/video/${vimeoId}?autoplay=1" width="100%" height="100%" frameborder="0" allow="autoplay; encrypted-media" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>`;
231
+ }
232
+
176
233
  export default videoSupport;