@testgorilla/tgo-ui 11.22.3 → 12.0.0

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 (225) hide show
  1. package/fesm2022/testgorilla-tgo-ui-components-accordion.mjs +335 -229
  2. package/fesm2022/testgorilla-tgo-ui-components-accordion.mjs.map +1 -1
  3. package/fesm2022/testgorilla-tgo-ui-components-ai-audio-circle.mjs +547 -465
  4. package/fesm2022/testgorilla-tgo-ui-components-ai-audio-circle.mjs.map +1 -1
  5. package/fesm2022/testgorilla-tgo-ui-components-ai-caveat.mjs +160 -75
  6. package/fesm2022/testgorilla-tgo-ui-components-ai-caveat.mjs.map +1 -1
  7. package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs +678 -278
  8. package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs.map +1 -1
  9. package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs +337 -274
  10. package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs.map +1 -1
  11. package/fesm2022/testgorilla-tgo-ui-components-audio-waveform.mjs +351 -192
  12. package/fesm2022/testgorilla-tgo-ui-components-audio-waveform.mjs.map +1 -1
  13. package/fesm2022/testgorilla-tgo-ui-components-autocomplete-v2.mjs +1950 -960
  14. package/fesm2022/testgorilla-tgo-ui-components-autocomplete-v2.mjs.map +1 -1
  15. package/fesm2022/testgorilla-tgo-ui-components-autocomplete.mjs +1206 -1044
  16. package/fesm2022/testgorilla-tgo-ui-components-autocomplete.mjs.map +1 -1
  17. package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs +328 -182
  18. package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs.map +1 -1
  19. package/fesm2022/testgorilla-tgo-ui-components-badge.mjs +383 -203
  20. package/fesm2022/testgorilla-tgo-ui-components-badge.mjs.map +1 -1
  21. package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs +553 -261
  22. package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs.map +1 -1
  23. package/fesm2022/testgorilla-tgo-ui-components-button.mjs +709 -739
  24. package/fesm2022/testgorilla-tgo-ui-components-button.mjs.map +1 -1
  25. package/fesm2022/testgorilla-tgo-ui-components-card.mjs +219 -184
  26. package/fesm2022/testgorilla-tgo-ui-components-card.mjs.map +1 -1
  27. package/fesm2022/testgorilla-tgo-ui-components-checkbox.mjs +515 -458
  28. package/fesm2022/testgorilla-tgo-ui-components-checkbox.mjs.map +1 -1
  29. package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs +423 -162
  30. package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs.map +1 -1
  31. package/fesm2022/testgorilla-tgo-ui-components-core.mjs +10784 -10996
  32. package/fesm2022/testgorilla-tgo-ui-components-core.mjs.map +1 -1
  33. package/fesm2022/testgorilla-tgo-ui-components-datepicker.mjs +810 -533
  34. package/fesm2022/testgorilla-tgo-ui-components-datepicker.mjs.map +1 -1
  35. package/fesm2022/testgorilla-tgo-ui-components-device-control.mjs +473 -116
  36. package/fesm2022/testgorilla-tgo-ui-components-device-control.mjs.map +1 -1
  37. package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs +1149 -540
  38. package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs.map +1 -1
  39. package/fesm2022/testgorilla-tgo-ui-components-divider.mjs +148 -84
  40. package/fesm2022/testgorilla-tgo-ui-components-divider.mjs.map +1 -1
  41. package/fesm2022/testgorilla-tgo-ui-components-donut-chart.mjs +239 -142
  42. package/fesm2022/testgorilla-tgo-ui-components-donut-chart.mjs.map +1 -1
  43. package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs +599 -467
  44. package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs.map +1 -1
  45. package/fesm2022/testgorilla-tgo-ui-components-elevation-shadow.mjs +126 -70
  46. package/fesm2022/testgorilla-tgo-ui-components-elevation-shadow.mjs.map +1 -1
  47. package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs +324 -329
  48. package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs.map +1 -1
  49. package/fesm2022/testgorilla-tgo-ui-components-field.mjs +969 -648
  50. package/fesm2022/testgorilla-tgo-ui-components-field.mjs.map +1 -1
  51. package/fesm2022/testgorilla-tgo-ui-components-file-upload.mjs +553 -419
  52. package/fesm2022/testgorilla-tgo-ui-components-file-upload.mjs.map +1 -1
  53. package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs +847 -452
  54. package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs.map +1 -1
  55. package/fesm2022/testgorilla-tgo-ui-components-gaussian-chart.mjs +398 -302
  56. package/fesm2022/testgorilla-tgo-ui-components-gaussian-chart.mjs.map +1 -1
  57. package/fesm2022/testgorilla-tgo-ui-components-icon-label.mjs +162 -95
  58. package/fesm2022/testgorilla-tgo-ui-components-icon-label.mjs.map +1 -1
  59. package/fesm2022/testgorilla-tgo-ui-components-icon.mjs +1825 -1795
  60. package/fesm2022/testgorilla-tgo-ui-components-icon.mjs.map +1 -1
  61. package/fesm2022/testgorilla-tgo-ui-components-infinite-scroll-table.mjs +1018 -672
  62. package/fesm2022/testgorilla-tgo-ui-components-infinite-scroll-table.mjs.map +1 -1
  63. package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs +758 -368
  64. package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs.map +1 -1
  65. package/fesm2022/testgorilla-tgo-ui-components-logo.mjs +204 -212
  66. package/fesm2022/testgorilla-tgo-ui-components-logo.mjs.map +1 -1
  67. package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs +183 -48
  68. package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs.map +1 -1
  69. package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs +243 -79
  70. package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs.map +1 -1
  71. package/fesm2022/testgorilla-tgo-ui-components-multi-input.mjs +751 -361
  72. package/fesm2022/testgorilla-tgo-ui-components-multi-input.mjs.map +1 -1
  73. package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs +1122 -385
  74. package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs.map +1 -1
  75. package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs +689 -413
  76. package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs.map +1 -1
  77. package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs +227 -92
  78. package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs.map +1 -1
  79. package/fesm2022/testgorilla-tgo-ui-components-paginator.mjs +174 -113
  80. package/fesm2022/testgorilla-tgo-ui-components-paginator.mjs.map +1 -1
  81. package/fesm2022/testgorilla-tgo-ui-components-password-criteria.mjs +367 -165
  82. package/fesm2022/testgorilla-tgo-ui-components-password-criteria.mjs.map +1 -1
  83. package/fesm2022/testgorilla-tgo-ui-components-password-strength.mjs +253 -118
  84. package/fesm2022/testgorilla-tgo-ui-components-password-strength.mjs.map +1 -1
  85. package/fesm2022/testgorilla-tgo-ui-components-phone-input.mjs +730 -444
  86. package/fesm2022/testgorilla-tgo-ui-components-phone-input.mjs.map +1 -1
  87. package/fesm2022/testgorilla-tgo-ui-components-popover.mjs +533 -221
  88. package/fesm2022/testgorilla-tgo-ui-components-popover.mjs.map +1 -1
  89. package/fesm2022/testgorilla-tgo-ui-components-popup-tip.mjs +274 -76
  90. package/fesm2022/testgorilla-tgo-ui-components-popup-tip.mjs.map +1 -1
  91. package/fesm2022/testgorilla-tgo-ui-components-progress-bar.mjs +184 -124
  92. package/fesm2022/testgorilla-tgo-ui-components-progress-bar.mjs.map +1 -1
  93. package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs +1223 -574
  94. package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs.map +1 -1
  95. package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs +249 -160
  96. package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs.map +1 -1
  97. package/fesm2022/testgorilla-tgo-ui-components-radio-button.mjs +447 -439
  98. package/fesm2022/testgorilla-tgo-ui-components-radio-button.mjs.map +1 -1
  99. package/fesm2022/testgorilla-tgo-ui-components-rating.mjs +226 -150
  100. package/fesm2022/testgorilla-tgo-ui-components-rating.mjs.map +1 -1
  101. package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs +255 -67
  102. package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs.map +1 -1
  103. package/fesm2022/testgorilla-tgo-ui-components-scale.mjs +205 -162
  104. package/fesm2022/testgorilla-tgo-ui-components-scale.mjs.map +1 -1
  105. package/fesm2022/testgorilla-tgo-ui-components-segmented-bar.mjs +245 -153
  106. package/fesm2022/testgorilla-tgo-ui-components-segmented-bar.mjs.map +1 -1
  107. package/fesm2022/testgorilla-tgo-ui-components-segmented-button.mjs +274 -140
  108. package/fesm2022/testgorilla-tgo-ui-components-segmented-button.mjs.map +1 -1
  109. package/fesm2022/testgorilla-tgo-ui-components-segmented-toggle.mjs +319 -147
  110. package/fesm2022/testgorilla-tgo-ui-components-segmented-toggle.mjs.map +1 -1
  111. package/fesm2022/testgorilla-tgo-ui-components-selectable-card.mjs +286 -84
  112. package/fesm2022/testgorilla-tgo-ui-components-selectable-card.mjs.map +1 -1
  113. package/fesm2022/testgorilla-tgo-ui-components-side-navigation.mjs +660 -208
  114. package/fesm2022/testgorilla-tgo-ui-components-side-navigation.mjs.map +1 -1
  115. package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs +579 -320
  116. package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs.map +1 -1
  117. package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs +419 -200
  118. package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs.map +1 -1
  119. package/fesm2022/testgorilla-tgo-ui-components-skeleton.mjs +132 -80
  120. package/fesm2022/testgorilla-tgo-ui-components-skeleton.mjs.map +1 -1
  121. package/fesm2022/testgorilla-tgo-ui-components-slider.mjs +741 -390
  122. package/fesm2022/testgorilla-tgo-ui-components-slider.mjs.map +1 -1
  123. package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs +455 -329
  124. package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs.map +1 -1
  125. package/fesm2022/testgorilla-tgo-ui-components-spider-chart.mjs +543 -514
  126. package/fesm2022/testgorilla-tgo-ui-components-spider-chart.mjs.map +1 -1
  127. package/fesm2022/testgorilla-tgo-ui-components-spinner.mjs +193 -104
  128. package/fesm2022/testgorilla-tgo-ui-components-spinner.mjs.map +1 -1
  129. package/fesm2022/testgorilla-tgo-ui-components-stepper.mjs +760 -524
  130. package/fesm2022/testgorilla-tgo-ui-components-stepper.mjs.map +1 -1
  131. package/fesm2022/testgorilla-tgo-ui-components-table.mjs +714 -415
  132. package/fesm2022/testgorilla-tgo-ui-components-table.mjs.map +1 -1
  133. package/fesm2022/testgorilla-tgo-ui-components-tabs.mjs +847 -438
  134. package/fesm2022/testgorilla-tgo-ui-components-tabs.mjs.map +1 -1
  135. package/fesm2022/testgorilla-tgo-ui-components-tag.mjs +535 -275
  136. package/fesm2022/testgorilla-tgo-ui-components-tag.mjs.map +1 -1
  137. package/fesm2022/testgorilla-tgo-ui-components-toggle.mjs +316 -246
  138. package/fesm2022/testgorilla-tgo-ui-components-toggle.mjs.map +1 -1
  139. package/fesm2022/testgorilla-tgo-ui-components-tooltip.mjs +404 -284
  140. package/fesm2022/testgorilla-tgo-ui-components-tooltip.mjs.map +1 -1
  141. package/fesm2022/testgorilla-tgo-ui-components-universal-skills.mjs +664 -383
  142. package/fesm2022/testgorilla-tgo-ui-components-universal-skills.mjs.map +1 -1
  143. package/fesm2022/testgorilla-tgo-ui-components-validation-error.mjs +201 -112
  144. package/fesm2022/testgorilla-tgo-ui-components-validation-error.mjs.map +1 -1
  145. package/fesm2022/testgorilla-tgo-ui-components-write-with-ai.mjs +1014 -458
  146. package/fesm2022/testgorilla-tgo-ui-components-write-with-ai.mjs.map +1 -1
  147. package/fesm2022/testgorilla-tgo-ui.mjs +147 -155
  148. package/fesm2022/testgorilla-tgo-ui.mjs.map +1 -1
  149. package/mcp/catalog.json +1 -1
  150. package/package.json +16 -17
  151. package/projects/tgo-canopy-ui/theme/_palette.scss +23 -18
  152. package/types/testgorilla-tgo-ui-components-accordion.d.ts +214 -158
  153. package/types/testgorilla-tgo-ui-components-ai-audio-circle.d.ts +93 -69
  154. package/types/testgorilla-tgo-ui-components-ai-caveat.d.ts +37 -34
  155. package/types/testgorilla-tgo-ui-components-ai-feedback.d.ts +126 -86
  156. package/types/testgorilla-tgo-ui-components-alert-banner.d.ts +260 -185
  157. package/types/testgorilla-tgo-ui-components-audio-waveform.d.ts +96 -67
  158. package/types/testgorilla-tgo-ui-components-autocomplete-v2.d.ts +455 -256
  159. package/types/testgorilla-tgo-ui-components-autocomplete.d.ts +545 -390
  160. package/types/testgorilla-tgo-ui-components-avatar.d.ts +128 -102
  161. package/types/testgorilla-tgo-ui-components-badge.d.ts +191 -139
  162. package/types/testgorilla-tgo-ui-components-breadcrumb.d.ts +100 -62
  163. package/types/testgorilla-tgo-ui-components-button.d.ts +479 -340
  164. package/types/testgorilla-tgo-ui-components-card.d.ts +153 -114
  165. package/types/testgorilla-tgo-ui-components-checkbox.d.ts +299 -223
  166. package/types/testgorilla-tgo-ui-components-checklist.d.ts +149 -97
  167. package/types/testgorilla-tgo-ui-components-core.d.ts +307 -295
  168. package/types/testgorilla-tgo-ui-components-datepicker.d.ts +404 -299
  169. package/types/testgorilla-tgo-ui-components-device-control.d.ts +151 -81
  170. package/types/testgorilla-tgo-ui-components-dialog.d.ts +442 -329
  171. package/types/testgorilla-tgo-ui-components-divider.d.ts +64 -51
  172. package/types/testgorilla-tgo-ui-components-donut-chart.d.ts +41 -37
  173. package/types/testgorilla-tgo-ui-components-dropdown.d.ts +335 -241
  174. package/types/testgorilla-tgo-ui-components-elevation-shadow.d.ts +48 -43
  175. package/types/testgorilla-tgo-ui-components-empty-state.d.ts +317 -215
  176. package/types/testgorilla-tgo-ui-components-field.d.ts +559 -388
  177. package/types/testgorilla-tgo-ui-components-file-upload.d.ts +230 -168
  178. package/types/testgorilla-tgo-ui-components-filter-button.d.ts +263 -206
  179. package/types/testgorilla-tgo-ui-components-gaussian-chart.d.ts +107 -94
  180. package/types/testgorilla-tgo-ui-components-icon-label.d.ts +84 -61
  181. package/types/testgorilla-tgo-ui-components-icon.d.ts +137 -110
  182. package/types/testgorilla-tgo-ui-components-infinite-scroll-table.d.ts +429 -303
  183. package/types/testgorilla-tgo-ui-components-inline-field.d.ts +338 -254
  184. package/types/testgorilla-tgo-ui-components-logo.d.ts +119 -101
  185. package/types/testgorilla-tgo-ui-components-media-card.d.ts +51 -35
  186. package/types/testgorilla-tgo-ui-components-media-dialog.d.ts +40 -45
  187. package/types/testgorilla-tgo-ui-components-multi-input.d.ts +283 -194
  188. package/types/testgorilla-tgo-ui-components-navbar.d.ts +326 -208
  189. package/types/testgorilla-tgo-ui-components-overflow-menu.d.ts +276 -204
  190. package/types/testgorilla-tgo-ui-components-page-header.d.ts +67 -50
  191. package/types/testgorilla-tgo-ui-components-paginator.d.ts +103 -70
  192. package/types/testgorilla-tgo-ui-components-password-criteria.d.ts +67 -58
  193. package/types/testgorilla-tgo-ui-components-password-strength.d.ts +66 -57
  194. package/types/testgorilla-tgo-ui-components-phone-input.d.ts +217 -175
  195. package/types/testgorilla-tgo-ui-components-popover.d.ts +94 -53
  196. package/types/testgorilla-tgo-ui-components-popup-tip.d.ts +81 -44
  197. package/types/testgorilla-tgo-ui-components-progress-bar.d.ts +115 -84
  198. package/types/testgorilla-tgo-ui-components-prompt.d.ts +315 -219
  199. package/types/testgorilla-tgo-ui-components-radial-progress.d.ts +146 -107
  200. package/types/testgorilla-tgo-ui-components-radio-button.d.ts +296 -219
  201. package/types/testgorilla-tgo-ui-components-rating.d.ts +134 -95
  202. package/types/testgorilla-tgo-ui-components-scale-table.d.ts +67 -47
  203. package/types/testgorilla-tgo-ui-components-scale.d.ts +91 -66
  204. package/types/testgorilla-tgo-ui-components-segmented-bar.d.ts +118 -89
  205. package/types/testgorilla-tgo-ui-components-segmented-button.d.ts +107 -80
  206. package/types/testgorilla-tgo-ui-components-segmented-toggle.d.ts +138 -105
  207. package/types/testgorilla-tgo-ui-components-selectable-card.d.ts +90 -56
  208. package/types/testgorilla-tgo-ui-components-side-navigation.d.ts +183 -107
  209. package/types/testgorilla-tgo-ui-components-side-panel.d.ts +156 -145
  210. package/types/testgorilla-tgo-ui-components-side-sheet.d.ts +98 -89
  211. package/types/testgorilla-tgo-ui-components-skeleton.d.ts +50 -33
  212. package/types/testgorilla-tgo-ui-components-slider.d.ts +278 -198
  213. package/types/testgorilla-tgo-ui-components-snackbar.d.ts +211 -159
  214. package/types/testgorilla-tgo-ui-components-spider-chart.d.ts +140 -121
  215. package/types/testgorilla-tgo-ui-components-spinner.d.ts +93 -72
  216. package/types/testgorilla-tgo-ui-components-stepper.d.ts +480 -338
  217. package/types/testgorilla-tgo-ui-components-table.d.ts +280 -233
  218. package/types/testgorilla-tgo-ui-components-tabs.d.ts +282 -183
  219. package/types/testgorilla-tgo-ui-components-tag.d.ts +266 -193
  220. package/types/testgorilla-tgo-ui-components-toggle.d.ts +180 -132
  221. package/types/testgorilla-tgo-ui-components-tooltip.d.ts +142 -105
  222. package/types/testgorilla-tgo-ui-components-universal-skills.d.ts +165 -144
  223. package/types/testgorilla-tgo-ui-components-validation-error.d.ts +70 -51
  224. package/types/testgorilla-tgo-ui-components-write-with-ai.d.ts +210 -133
  225. package/types/testgorilla-tgo-ui.d.ts +52 -45
@@ -1 +1 @@
1
- {"version":3,"file":"testgorilla-tgo-ui-components-autocomplete.mjs","sources":["../../../components/autocomplete/autocomplete.model.ts","../../../components/autocomplete/prevent-input.directive.ts","../../../components/autocomplete/select-text.directive.ts","../../../components/autocomplete/transform-Item.pipe.ts","../../../components/autocomplete/includes.pipe.ts","../../../components/autocomplete/autocomplete.component.ts","../../../components/autocomplete/autocomplete.component.html","../../../components/autocomplete/autocomplete.component.module.ts","../../../components/autocomplete/testgorilla-tgo-ui-components-autocomplete.ts"],"sourcesContent":["export type AutocompleteType = 'single' | 'multi' | 'large';\n\nexport enum Autocomplete {\n SINGLE = 'single',\n MULTI = 'multi',\n LARGE = 'large',\n}\n\nexport enum Padding {\n AUTOCOMPLETE_CONTAINER = 40,\n DROPDOWN_CONTAINER = 60,\n AUTOCOMPLETE_SPACE_CONTAINER = 65,\n DROPDOWN_SPACE_CONTAINER = 85,\n}\n\nexport const AMOUNT_TAG_WIDTH = 33;\n\nexport enum Timeout {\n VIEW_INITIALIZED_AFTER_ACTION = 150,\n VIEW_INITIALIZED_COMPONENT_LOAD = 600,\n}\n\nexport enum DropdownVariation {\n AUTOCOMPLETE = 'autocomplete',\n DROPDOWN = 'dropdown',\n}\n\nexport type DropdownVariationType = `${DropdownVariation}`;\n\nexport type AutocompleteSize = 'small' | 'medium';\n","import { Directive, HostListener, Input } from '@angular/core';\n\n@Directive({\n selector: '[uiPreventInput]',\n standalone: true,\n})\nexport class PreventInputDirective {\n @Input() uiPreventInput: boolean;\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent): void {\n const allowedKeys = [\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n 'Backspace',\n 'Tab',\n 'Delete',\n 'Control',\n 'Shift',\n 'Alt',\n ];\n if (!allowedKeys.includes(event.key) && !event.ctrlKey && !event.metaKey && this.uiPreventInput) {\n event.preventDefault();\n }\n }\n}\n","import { Directive, ElementRef, Input, OnChanges } from '@angular/core';\n\n/**\n * the SelectTextDirective provides a dynamic way to highlight or style specific text within an element.\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector -- public directive selector; ui-prefix rename is breaking, deferred to the breaking-change MAJOR (see plan)\n selector: '[selectText]',\n standalone: false,\n})\nexport class SelectTextDirective implements OnChanges {\n @Input() selectText: string | null;\n\n constructor(private readonly el: ElementRef) {}\n\n /**\n * this method utilizes setTimeout to defer the execution until the next tick of the event loop.\n * The text content of the element is modified by wrapping occurrences of the specified selectText with a <span> element,\n * applying a bold font-weight style.\n */\n private setTextColor(): void {\n const textElement = this.el.nativeElement as HTMLElement;\n setTimeout(() => {\n const { textContent } = textElement;\n if (this.selectText && textContent) {\n // eslint-disable-next-line no-unsanitized/property -- SECURITY: source is the element's own textContent (plain text, browser-escaped); only matches are wrapped in a static <span> for highlighting, so no untrusted markup is introduced.\n textElement.innerHTML = textContent.replace(\n new RegExp(this.selectText, 'gmi'),\n match => `<span style=\"font-weight: bold\" >${match}</span>`\n );\n }\n }, 0);\n }\n\n ngOnChanges(): void {\n if (this.selectText) {\n this.setTextColor();\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { AutocompleteUtils } from '@testgorilla/tgo-ui/components/core';\n\n/**\n * the TransformItemPipe is designed to selectively extract and return values from objects based on a specified field,\n * providing a way to transform and display data a template.\n */\n@Pipe({\n name: 'transformItem',\n standalone: false,\n})\nexport class TransformItemPipe implements PipeTransform {\n transform(value: any, field: string, getValueList: boolean = false): any {\n if (getValueList) {\n return AutocompleteUtils.isArray(value)\n ? value.map((item: any) => (field ? item[field] : item))\n : field\n ? value?.[field]\n : value;\n }\n\n if (AutocompleteUtils.isPrimitive(value)) {\n return value;\n } else if (!AutocompleteUtils.isPrimitive(value) && field && (value?.[field] || value[0][field])) {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- a falsy field value falls back to the first item field\n return value?.[field] || value[0][field];\n } else {\n AutocompleteUtils.throwInvalidSetupError();\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * The purpose of this pipe is to determine if the value is present in the values array.\n * If values is an array, the method uses the includes method to check for inclusion.\n * If values is not an array, it checks for strict equality between value and values.\n */\n@Pipe({\n name: 'includes',\n standalone: false,\n})\nexport class IncludesPipe implements PipeTransform {\n transform(value: any, values: any, valueField?: string): boolean {\n return Array.isArray(values)\n ? Boolean(values?.find(v => (valueField ? v?.[valueField] === value?.[valueField] : value === v)))\n : valueField\n ? value?.[valueField] === values?.[valueField]\n : value === values;\n }\n}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n DoCheck,\n ElementRef,\n EventEmitter,\n HostBinding,\n inject,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n PLATFORM_ID,\n ProviderToken,\n signal,\n SimpleChanges,\n ViewChild,\n OnInit,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete';\nimport { BehaviorSubject, filter, map, ReplaySubject, startWith, Subscription, take, throttleTime } from 'rxjs';\n\nimport { ApplicationTheme, IKeyboardEvent, AutocompleteUtils } from '@testgorilla/tgo-ui/components/core';\n\nimport {\n Autocomplete,\n AutocompleteSize,\n AutocompleteType,\n DropdownVariation,\n DropdownVariationType,\n Padding,\n Timeout,\n} from './autocomplete.model';\n\n@Component({\n selector: 'ui-autocomplete',\n templateUrl: './autocomplete.component.html',\n styleUrls: ['./autocomplete.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\n/* eslint-disable @angular-eslint/no-conflicting-lifecycle */\nexport class AutocompleteComponent\n implements ControlValueAccessor, OnChanges, AfterViewInit, DoCheck, OnDestroy, OnInit\n{\n /**\n * @property itemsList\n * @description The list of items to display in the autocomplete.\n * @memberof AutocompleteComponent\n */\n @Input() itemsList: any[] | { groupName: string; items: any[]; isGroup: boolean }[] = [];\n\n /**\n * @property suggestionsList\n * @description The list of suggestions to display in the autocomplete.\n * @memberof AutocompleteComponent\n */\n @Input() suggestionsList: any[] = [];\n\n /**\n * @property disabled\n * @description If `true`, the autocomplete is disabled.\n * @memberof AutocompleteComponent\n */\n @Input() disabled = false;\n\n /**\n * @property allowAdd\n * @description If `true`, allows adding new values to the autocomplete.\n * @memberof AutocompleteComponent\n */\n @Input() allowAdd = true;\n\n /**\n * @property textField\n * @description The field to be used as the display text in the autocomplete.\n * @memberof AutocompleteComponent\n */\n @Input() textField = '';\n\n /**\n * @property valueField\n * @description The field to be used as the value in the autocomplete.\n * @memberof AutocompleteComponent\n */\n @Input() valueField = '';\n\n /**\n * @property label\n * @description The label for the autocomplete input.\n * @memberof AutocompleteComponent\n */\n @Input() label = '';\n\n /**\n * @property placeholder\n * @description The placeholder for the autocomplete input.\n * @memberof AutocompleteComponent\n */\n @Input() placeholder = '';\n\n @Input() testId: string | null = null;\n\n /**\n * @property value\n * @description The selected value(s) in the autocomplete.\n * @memberof AutocompleteComponent\n */\n @Input() set itemValue(v: any) {\n this.value = AutocompleteUtils.isArray(v) ? v : v ? [v] : [];\n }\n\n /**\n * @property type\n * @description The type of the autocomplete ('single', 'multi', etc.).\n * @memberof AutocompleteComponent\n */\n @Input() type: AutocompleteType = 'multi';\n\n /**\n * @property minCharactersSearch\n * @description The minimum characters to trigger search.\n * @memberof AutocompleteComponent\n */\n @Input() minCharactersSearch = 3;\n\n /**\n * @property variant\n * @description The variant of Autocomplete\n * @memberof AutocompleteComponent\n */\n @Input({ required: true }) variant: DropdownVariationType = DropdownVariation.AUTOCOMPLETE;\n\n /**\n * Show reserved content below form field\n * @property showBottomContent\n * @type {boolean}\n * @memberof AutocompleteComponent\n */\n @Input() showBottomContent = true;\n\n /**\n * Return full object if true\n * @property valuePrimitive\n * @type {boolean}\n * @memberof AutocompleteComponent\n */\n @Input() valuePrimitive = false;\n\n /**\n * Indicator of the autocomplete width\n * @property fullWidth\n * @type {boolean}\n * @memberof AutocompleteComponent\n */\n @HostBinding('class.full-width')\n @Input()\n fullWidth = false;\n\n /**\n *\n * Defines the application theme\n *\n * @type {ApplicationTheme}\n * @memberof AutocompleteComponent\n */\n @HostBinding('attr.theme')\n @Input()\n applicationTheme: ApplicationTheme = 'light';\n\n /**\n * Autocomplete is required or not\n *\n * @type {boolean}\n * @memberof AutocompleteComponent\n */\n @Input() required: boolean;\n\n /**\n * Input field errors\n *\n * @type {string[]}\n * @memberof AutocompleteComponent\n */\n @Input() set errors(errors: string[]) {\n this.safeErrors = errors?.filter(Boolean) ?? [];\n }\n\n /**\n * Color of the option hover.\n * Defaults to Test Gorilla primary color.\n *\n * @type {string}\n * @memberof AutocompleteComponent\n */\n @Input() companyColor: string | null = '#FFF2FC';\n\n /**\n * Hide in-build errors for Reactive Forms\n *\n * @type {number}\n * @memberof AutocompleteComponent\n */\n @Input() hideBuiltInErrors = false;\n\n /**\n * Hide label in errors\n *\n * @type {number}\n * @memberof AutocompleteComponent\n */\n @Input() hideLabelInErrors = false;\n\n /**\n * Sets dropdown list to virtual scroll mode\n *\n * @type {boolean}\n * @memberof AutocompleteComponent\n */\n @Input({ transform: booleanAttribute }) virtualScroll = false;\n\n /**\n * @property compareWith\n * @description Custom comparison logic for the autocomplete.\n * @memberof AutocompleteComponent\n */\n @Input() compareWith: (a: any, b: any) => boolean;\n\n /**\n * @property dropdownPanelClass\n * @description Sets class on autocomplete dropdown\n * @memberof AutocompleteComponent\n */\n @Input() dropdownPanelClass = '';\n\n /**\n * @property closeOnScroll\n * @description Defines if dropdown should be closed on page scroll\n * @memberof AutocompleteComponent\n */\n @Input() closeOnScroll = false;\n\n /**\n * @property AutocompleteSize\n * @description Defines the size of the autocomplete. Small changes the tags to counter; medium is default.\n * @memberof AutocompleteComponent\n */\n @Input() size: AutocompleteSize = 'medium';\n\n /**\n * @property allowUserInput\n * @description If `true`, allows the user to input custom values in the autocomplete.\n * @type {boolean}\n * @memberof AutocompleteComponent\n */\n @Input() allowUserInput = true;\n\n /**\n * @property clearable\n * @description If `true`, allows the user to clear the input values\n * @type {boolean}\n * @memberof AutocompleteComponent\n */\n @Input() clearable = true;\n\n /**\n * @property exactMatchSelect\n * @description If `true`, allows to select the exact match from the suggestions list\n * @type {boolean}\n * @memberof AutocompleteComponent\n */\n @Input() exactMatchSelect = true;\n\n /**\n * @property maxItemSelected\n * @description Sets the maximum number of items that can be selected in the autocomplete\n * @type {boolean}\n * @memberof AutocompleteComponent\n */\n @Input() maxItemSelected = Infinity;\n\n /**\n * @property maxItemSelected\n * @description Sets the maximum length of the autocomplete input\n * @type {boolean}\n * @memberof AutocompleteComponent\n */\n @Input() maxLength?: number;\n\n @Input() isDynamicFilteringEnabled = false;\n @Input() dynamicFilterLoading = false;\n @Input() dynamicFilteredList: any[] | null = null;\n\n @Input() infiniteScroll = false;\n @Input() hasMoreOptionsForInfiniteScroll = true;\n\n @Output() selectionChange = new EventEmitter<any>();\n @Output() searchTextChange = new EventEmitter<string>();\n // eslint-disable-next-line @angular-eslint/no-output-native -- output shadows a native event; rename is breaking, deferred to the breaking-change MAJOR (see plan)\n @Output() blur = new EventEmitter<void>();\n // eslint-disable-next-line @angular-eslint/no-output-native -- output shadows a native event; rename is breaking, deferred to the breaking-change MAJOR (see plan)\n @Output() focus = new EventEmitter<void>();\n\n /**\n * @property scrollViewportBottomReached\n * @description Emits when the bottom of the unfiltered list is reached during infinite scroll\n * @memberof AutocompleteComponent\n */\n @Output() scrollViewportBottomReached = new EventEmitter<void>();\n\n /**\n * @property scrollViewportBottomReachedFiltered\n * @description Emits when the bottom of the filtered list is reached during infinite scroll\n * @memberof AutocompleteComponent\n */\n @Output() scrollViewportBottomReachedFiltered = new EventEmitter<void>();\n\n @ViewChild('formField') formFieldElement: ElementRef<HTMLElement>;\n @ViewChild('tagContainer') tagContainer: ElementRef<HTMLElement>;\n @ViewChild('trigger') autocomplete: MatAutocompleteTrigger;\n @ViewChild(CdkVirtualScrollViewport, { static: false }) set cdkVirtualScrollViewport(\n viewport: CdkVirtualScrollViewport\n ) {\n if (this.savedVirtualScrollSubscription) {\n this.savedVirtualScrollSubscription.unsubscribe();\n }\n\n if (viewport) {\n this.savedVirtualScrollViewport = viewport;\n\n if (this.infiniteScroll) {\n setTimeout(() => {\n this.inputValueSearch$.pipe(take(1)).subscribe(searchValue => {\n this.isFilteredViewport = !!searchValue;\n });\n }, 0);\n\n this.savedVirtualScrollSubscription = this.savedVirtualScrollViewport\n .elementScrolled()\n .pipe(\n map(() => this.savedVirtualScrollViewport.measureScrollOffset('bottom')),\n filter(offset => offset < this.savedVirtualScrollViewport.getViewportSize() * 0.2),\n throttleTime(200),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => {\n if (this.isFilteredViewport) {\n this.scrollViewportBottomReachedFiltered.emit();\n } else {\n this.scrollViewportBottomReached.emit();\n }\n });\n }\n }\n }\n @ViewChild('autocomplete') matAutocomplete: MatAutocomplete;\n @ViewChild('matInput') matInput: ElementRef<HTMLInputElement>;\n\n protected safeErrors: string[] = [];\n protected value: any;\n protected inputValue: any = '';\n protected isInputFocus = false;\n protected autocompleteType = Autocomplete;\n protected isOverLapping = false;\n protected isOverlapChecking = true;\n protected overlapIndex = 0;\n protected inputOpacity = 1;\n protected firstTagMaxWidth = 0;\n protected inputValueSearch$ = new BehaviorSubject<string>('');\n protected userInput$ = new ReplaySubject<string>(1);\n protected dynamicFilteredList$ = new BehaviorSubject<any[] | null>(null);\n protected filteredItemsList$ = this.inputValueSearch$.pipe(\n startWith(''),\n map(inputValue =>\n inputValue.length\n ? AutocompleteUtils.filterItems(this.itemsList, inputValue, this.textField, this.isGrouped)\n : null\n )\n );\n protected filteredSuggestionList$ = this.inputValueSearch$.pipe(\n map(inputValue =>\n inputValue.length ? AutocompleteUtils.filterItems(this.suggestionsList, inputValue, this.textField) : null\n )\n );\n protected savedVirtualScrollViewport: CdkVirtualScrollViewport;\n protected savedVirtualScrollSubscription: Subscription;\n protected isFilteredViewport = false;\n\n scrollEvent = (event: any): void => {\n const isNotAutocompleteScroll =\n !event.target?.id?.includes('mat-autocomplete-') &&\n !event.target?.parentElement?.id?.includes('mat-autocomplete-') &&\n !event.target?.classList?.contains('mat-mdc-autocomplete-trigger');\n\n if (this.autocomplete.panelOpen && isNotAutocompleteScroll) {\n this.autocomplete.closePanel();\n }\n };\n\n protected searchResult$ = this.inputValueSearch$.pipe(map(inputValue => !!inputValue.trim()));\n protected translationContext = 'AUTOCOMPLETE.';\n protected readonly AutocompleteUtils = AutocompleteUtils;\n private readonly defaultAppTheme = inject(\n 'CANOPYUI_DEFAULT_APPLICATION_THEME' as unknown as ProviderToken<ApplicationTheme>,\n {\n optional: true,\n }\n );\n private readonly cdr = inject(ChangeDetectorRef);\n public ngControl = inject(NgControl, { optional: true, self: true });\n private readonly platformId = inject(PLATFORM_ID);\n private readonly el = inject(ElementRef);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly destroyRef = inject(DestroyRef);\n private readonly ngZone = inject(NgZone);\n private readonly isPlatform = isPlatformBrowser(this.platformId);\n private observer: MutationObserver;\n protected keyboardFocused = signal<boolean>(false);\n isAlreadyAdded = false;\n\n constructor() {\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n if (this.defaultAppTheme) {\n this.applicationTheme = this.defaultAppTheme;\n }\n\n this.subscriberDisplayChange();\n }\n\n ngOnInit(): void {\n if (this.isDynamicFilteringEnabled) {\n this.filteredItemsList$ = this.dynamicFilteredList$;\n }\n }\n\n /**\n * Used to mark component view as dirty when touched programmatically with markAsTouched/markAllAsTouched or errors\n * to display validation errors that might happen (e.g. required)\n */\n\n ngDoCheck(): void {\n if (this.ngControl?.touched || this.ngControl?.errors) {\n this.cdr.markForCheck();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.isDynamicFilteringEnabled) {\n const dynamicFilteredList = changes['dynamicFilteredList']?.currentValue;\n\n if (dynamicFilteredList) {\n this.dynamicFilteredList$.next(dynamicFilteredList);\n }\n\n return;\n }\n\n if (changes['itemsList'] || changes['suggestionsList'] || changes['valueField']) {\n this.itemsList = this.isGrouped\n ? this.itemsList\n : AutocompleteUtils.excludeSuggestions(this.itemsList, this.suggestionsList, this.valueField);\n this.initValue();\n }\n\n if (this.isPlatform && changes['companyColor']) {\n this.setCompanyColorVariable();\n }\n }\n\n ngAfterViewInit(): void {\n if (this.type !== (Autocomplete.LARGE as AutocompleteType)) {\n this.checkOverlap(Timeout.VIEW_INITIALIZED_COMPONENT_LOAD, true);\n }\n if (this.isPlatform) {\n this.setCompanyColorVariable();\n }\n if (this.closeOnScroll) {\n window.addEventListener('scroll', this.scrollEvent, true);\n }\n\n this.focusMonitor\n .monitor(this.matInput)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(origin =>\n this.ngZone.run(() => {\n this.keyboardFocused.set(origin === 'keyboard');\n })\n );\n\n this.matInput.nativeElement.onkeydown = this.onKeydown.bind(this);\n }\n\n ngOnDestroy(): void {\n window.removeEventListener('scroll', this.scrollEvent, true);\n\n if (this.observer) {\n this.observer.disconnect();\n }\n }\n\n onChange = (_: any) => {};\n onTouch = () => {};\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouch = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n writeValue(value: any): void {\n if (this.valuePrimitive && this.textField && this.valueField) {\n if (this.type === (Autocomplete.SINGLE as AutocompleteType)) {\n this.value = this.itemsList.find(item => item[this.valueField] === value);\n } else {\n this.value = AutocompleteUtils.isArray(value)\n ? this.itemsList.filter(item => value.find((v: any) => v === item[this.valueField]))\n : [this.itemsList.find(item => item[this.valueField] === value)];\n this.value = this.value.filter(Boolean).length ? this.value : null;\n }\n } else {\n this.value = value;\n }\n\n this.initValue();\n\n this.cdr.markForCheck();\n }\n\n protected get isGrouped(): boolean {\n return this.itemsList?.some((item: any) => item.isGroup);\n }\n\n protected onOptionSelected(event: MatAutocompleteSelectedEvent): void {\n const inputValue = event.option.value;\n const itemValue = AutocompleteUtils.createValueItem(inputValue, this.textField, this.valueField);\n this.addNewValue(itemValue);\n\n if (this.type === (this.autocompleteType.MULTI as AutocompleteType)) {\n this.checkOverlap();\n }\n\n queueMicrotask(() => {\n if (this.type !== (this.autocompleteType.SINGLE as AutocompleteType)) {\n this.inputValue = '';\n } else {\n this.inputValue = AutocompleteUtils.transformDisplayValue(this.value, this.textField);\n }\n this.cdr.markForCheck();\n });\n\n this.onUpdate();\n }\n\n protected onOptionRemoved(option: any): void {\n setTimeout(() => this.autocomplete.closePanel(), 0);\n const foundValue = this.value.find((v: any) => (this.compareWith ? this.compareWith(v, option) : v === option));\n\n if (foundValue) {\n this.value = this.value.filter((v: any) => (this.compareWith ? !this.compareWith(v, option) : v !== option));\n this.matAutocomplete.options.forEach(matOption => {\n if (matOption.value?.value === foundValue.value) {\n matOption.deselect();\n }\n });\n }\n\n if (this.type === (this.autocompleteType.MULTI as AutocompleteType)) {\n this.checkOverlap();\n }\n\n if (!this.value.length) {\n this.inputValue = '';\n }\n\n this.onUpdate();\n }\n\n protected onInputChange(event: Event): void {\n const inputValue = (event.target as HTMLInputElement).value;\n this.userInput$.next(inputValue);\n if (inputValue.length >= this.minCharactersSearch) {\n this.inputValueSearch$.next(inputValue);\n this.searchTextChange.emit(inputValue);\n const itemList = this.isGrouped ? this.itemsList.flatMap(groups => groups.items) : this.itemsList.flat();\n\n const findValue = [...this.suggestionsList, ...itemList].find(\n v => inputValue === (this.textField ? v[this.textField] : v)\n );\n const count = AutocompleteUtils.countMatchingWords(\n [...this.suggestionsList, ...itemList],\n this.inputValue,\n this.textField\n );\n if (findValue && count === 1 && this.exactMatchSelect) {\n this.onOptionSelected({ option: { value: findValue } } as MatAutocompleteSelectedEvent);\n }\n } else {\n this.inputValueSearch$.next('');\n this.userInput$.next('');\n }\n this.isAlreadyAdded = !!(this.compareWith\n ? this.value.find((v: any) => this.compareWith(v, inputValue))\n : AutocompleteUtils.findDuplicate(this.value, inputValue, this.textField));\n }\n\n protected onClear(): void {\n this.inputValue = '';\n this.value = AutocompleteUtils.isArray(this.value) ? [] : '';\n this.isOverLapping = false;\n this.overlapIndex = 0;\n this.onUpdate();\n this.matAutocomplete?.options.forEach(option => option.deselect());\n this.onTouch();\n }\n\n protected refillInput(): void {\n setTimeout(() => {\n if (this.value && this.type === (this.autocompleteType.SINGLE as AutocompleteType) && !this.inputValue) {\n this.inputValue = AutocompleteUtils.transformDisplayValue(this.value, this.textField);\n } else if (!this.inputValue && this.value?.length) {\n this.inputValue = ' ';\n } else if (\n this.inputValue &&\n this.type === (Autocomplete.SINGLE as AutocompleteType) &&\n this.value &&\n Object.keys(this.value).length\n ) {\n this.inputValue = AutocompleteUtils.transformDisplayValue(\n AutocompleteUtils.isArray(this.value) ? this.value[0] : this.value,\n this.textField\n );\n } else if (this.inputValue) {\n this.inputValue = ' ';\n }\n\n this.inputValueSearch$.next('');\n this.userInput$.next('');\n this.isInputFocus = false;\n this.onTouch();\n this.blur.emit();\n }, 0);\n }\n\n protected gotoUp() {\n if (this.savedVirtualScrollViewport) {\n this.savedVirtualScrollViewport.scrollToIndex(0);\n this.savedVirtualScrollViewport.checkViewportSize();\n }\n }\n\n protected onFocus(): void {\n this.isInputFocus = true;\n\n const inputValue = AutocompleteUtils.isArray(this.inputValue) ? this.inputValue[0] : this.inputValue;\n\n if (AutocompleteUtils.isPrimitive(inputValue)) {\n if (typeof inputValue !== 'number' && inputValue?.match(/^\\s+/gm)) {\n this.inputValue = inputValue.trimStart();\n }\n } else {\n if (inputValue[this.textField]?.match(/^\\s+/gm)) {\n this.inputValue = inputValue[this.textField].trimStart();\n }\n }\n this.focus.emit();\n }\n\n private checkOverlap(delay = Timeout.VIEW_INITIALIZED_AFTER_ACTION, init = false): void {\n this.isOverLapping = false;\n this.isOverlapChecking = true;\n this.inputOpacity = 0;\n\n setTimeout(() => {\n const inputWidth = this.inputWidth;\n const tags = this.tagContainer?.nativeElement.querySelectorAll('.value-tag');\n if (tags) {\n let width = 0;\n tags.forEach((tag: any, index: number) => {\n width += tag.getBoundingClientRect().width;\n\n const inpWidth = this.formFieldElement?.nativeElement.getBoundingClientRect().width - 20;\n this.firstTagMaxWidth =\n tags.length > 1\n ? inpWidth -\n (this.variant === (DropdownVariation.DROPDOWN as DropdownVariationType)\n ? Padding.DROPDOWN_SPACE_CONTAINER\n : Padding.AUTOCOMPLETE_SPACE_CONTAINER)\n : inpWidth;\n\n if (!this.isOverLapping && width > inputWidth && index > 0) {\n this.isOverLapping = true;\n this.overlapIndex = index;\n }\n });\n this.isOverlapChecking = false;\n if (init) {\n if (this.type === (this.autocompleteType.SINGLE as AutocompleteType)) {\n this.inputValue = AutocompleteUtils.transformDisplayValue(this.value[0], this.textField);\n } else if (this.value?.length) {\n this.inputValue = ' ';\n }\n }\n const tagContainerWidth = this.tagContainer.nativeElement.getBoundingClientRect().width;\n this.tagContainer.nativeElement.style.maxWidth = tagContainerWidth / 100 ? '100%' : `${tagContainerWidth}px`;\n this.cdr.markForCheck();\n }\n this.inputOpacity = 1;\n }, delay);\n }\n\n private onUpdate(): void {\n this.inputValueSearch$.next('');\n this.userInput$.next('');\n if (!this.valuePrimitive) {\n this.onChange(this.value);\n } else {\n if (this.type === (Autocomplete.SINGLE as AutocompleteType)) {\n this.onChange(this.value[this.valueField]);\n } else {\n this.onChange(this.value.map((v: any) => v[this.valueField]));\n }\n }\n this.updateControlMaxLengthValidity();\n this.selectionChange.emit(this.value);\n }\n\n private updateControlMaxLengthValidity(): void {\n const control = this.ngControl?.control;\n if (!control) {\n return;\n }\n\n if (this.type !== (Autocomplete.SINGLE as AutocompleteType)) {\n const existingErrors = control.errors ?? {};\n\n if (this.value.length > this.maxItemSelected) {\n control.setErrors({\n ...existingErrors,\n maxItemSelected: {\n expected: this.maxItemSelected,\n actual: this.value.length,\n },\n });\n control.markAsTouched();\n } else {\n if (existingErrors['maxItemSelected']) {\n delete existingErrors['maxItemSelected'];\n control.setErrors(Object.keys(existingErrors).length ? existingErrors : null);\n }\n }\n }\n }\n\n private initValue(): void {\n if (\n this.type === (this.autocompleteType.SINGLE as AutocompleteType) &&\n this.variant !== (DropdownVariation.DROPDOWN as DropdownVariationType)\n ) {\n if (AutocompleteUtils.isArray(this.value)) {\n this.inputValue = AutocompleteUtils.transformDisplayValue(this.value[0], this.textField);\n } else {\n this.inputValue = this.value ? AutocompleteUtils.transformDisplayValue(this.value, this.textField) : '';\n }\n } else if (this.variant === (DropdownVariation.DROPDOWN as DropdownVariationType)) {\n this.inputValue =\n (AutocompleteUtils.isArray(this.value) && !this.value?.length) || !this.value\n ? ''\n : this.type === (Autocomplete.SINGLE as AutocompleteType)\n ? AutocompleteUtils.transformDisplayValue(\n AutocompleteUtils.isArray(this.value) ? this.value[0] : this.value,\n this.textField\n )\n : ' ';\n } else {\n this.inputValue = this.value?.length ? ' ' : '';\n }\n if (this.type === (this.autocompleteType.MULTI as AutocompleteType)) {\n this.checkOverlap();\n }\n }\n\n private addNewValue(newValue: any): void {\n if (this.type !== (this.autocompleteType.SINGLE as AutocompleteType) && !this.value) {\n this.value = [];\n }\n\n const foundDuplicate = this.compareWith\n ? this.value.find((v: any) => this.compareWith(v, newValue))\n : AutocompleteUtils.findDuplicate(this.value, newValue, this.textField);\n\n if (this.type !== (this.autocompleteType.SINGLE as AutocompleteType)) {\n this.value = foundDuplicate\n ? this.value.filter((v: any) =>\n this.compareWith ? !this.compareWith(v, foundDuplicate) : v !== foundDuplicate\n )\n : [...this.value, newValue];\n } else {\n this.value = newValue;\n }\n }\n\n protected get isDropdown(): boolean {\n return this.variant === (DropdownVariation.DROPDOWN as DropdownVariationType);\n }\n\n protected onChevronClick(autocomplete: MatAutocomplete): void {\n if (autocomplete.isOpen) {\n setTimeout(() => {\n this.autocomplete.closePanel();\n }, 0);\n }\n }\n\n protected get inputWidth(): number {\n return (\n this.formFieldElement?.nativeElement.getBoundingClientRect().width -\n (this.isDropdown ? Padding.DROPDOWN_CONTAINER : Padding.AUTOCOMPLETE_CONTAINER)\n );\n }\n\n protected trackByFn = (index: number, value: string) => value;\n\n /**\n * Adding company color variable to the body to style overlay container that's out of the component scope.\n */\n private setCompanyColorVariable(): void {\n document.body.style.setProperty('--ui-autocomplete-option-color', `${this.companyColor}`);\n }\n\n private subscriberDisplayChange(): void {\n const autocompleteHostElement = this.el.nativeElement;\n\n this.observer = new MutationObserver(mutations => {\n mutations.forEach(mutation => {\n if (mutation.attributeName === 'style') {\n const displayStyle = getComputedStyle(autocompleteHostElement).display;\n if (displayStyle !== 'none') {\n this.checkOverlap();\n }\n }\n });\n });\n\n this.observer.observe(autocompleteHostElement, {\n attributes: true,\n attributeFilter: ['style'],\n });\n }\n\n protected get hasObjectValue(): boolean {\n return this.value ? !!Object.keys(this.value).length : false;\n }\n\n onKeydown($event: KeyboardEvent) {\n /* eslint-disable no-underscore-dangle -- MatAutocomplete internals (_keyManager/_setScrollTop) drive keyboard nav */\n const optionHeight = 48;\n\n if ($event.key === (IKeyboardEvent.HOME as string)) {\n this.matAutocomplete._keyManager.setFirstItemActive();\n } else if ($event.key === (IKeyboardEvent.END as string)) {\n this.matAutocomplete._keyManager.setLastItemActive();\n } else if ($event.key === (IKeyboardEvent.PAGE_DOWN as string)) {\n this.matAutocomplete._keyManager.setNextItemActive();\n this.matAutocomplete._keyManager.setNextItemActive();\n this.matAutocomplete._keyManager.setNextItemActive();\n } else if ($event.key === (IKeyboardEvent.PAGE_UP as string)) {\n this.matAutocomplete._keyManager.setPreviousItemActive();\n this.matAutocomplete._keyManager.setPreviousItemActive();\n this.matAutocomplete._keyManager.setPreviousItemActive();\n }\n\n this.matAutocomplete._setScrollTop((this.matAutocomplete._keyManager.activeItemIndex ?? 0) * optionHeight);\n /* eslint-enable no-underscore-dangle */\n }\n\n protected getVirtualScrollHeight(itemCount: number): number {\n const itemHeight = 48;\n const maxHeight = 200;\n const minHeight = 48;\n\n const calculatedHeight = itemCount * itemHeight;\n\n return Math.min(Math.max(calculatedHeight, minHeight), maxHeight);\n }\n}\n","<ng-container>\n <div class=\"autocomplete-wrapper\" [ngClass]=\"{ 'full-width': fullWidth, disabled: disabled }\">\n <mat-form-field\n [color]=\"\n safeErrors.length ||\n (ngControl?.errors && ngControl?.touched) ||\n (AutocompleteUtils.isArray(value) && value.length) > maxItemSelected ||\n ((AutocompleteUtils.isArray(value) && value.length) >= maxItemSelected && inputValue && inputValue !== ' ')\n ? 'warn'\n : 'accent'\n \"\n [appearance]=\"'outline'\"\n [ngClass]=\"{\n 'large-size': type === autocompleteType.LARGE,\n 'hide-bottom-content': !showBottomContent,\n 'keyboard-focused': keyboardFocused(),\n 'has-label': !!label,\n }\"\n >\n @if (label) {\n <mat-label\n >{{ label }}\n @if (required) {\n <span>*</span>\n }\n </mat-label>\n }\n <div #formField class=\"input-container\">\n @if (textField ? value?.[textField] : value === inputValue) {\n <span style=\"position: absolute; left: -9999px\" aria-live=\"polite\">{{\n ('SELECTED' | uiTranslate | async) + ' ' + inputValue\n }}</span>\n }\n\n <input\n [attr.data-testid]=\"testId ?? 'autocomplete-input'\"\n #trigger=\"matAutocompleteTrigger\"\n #matInput\n [attr.maxlength]=\"maxLength !== null && maxLength !== undefined ? maxLength : null\"\n [uiPreventInput]=\"!allowUserInput\"\n [disabled]=\"disabled\"\n [ngClass]=\"{ 'unset-margin': value && type === autocompleteType.LARGE, 'no-caret': !allowUserInput }\"\n (blur)=\"refillInput()\"\n (focusin)=\"onFocus()\"\n [attr.aria-label]=\"\n (translationContext + 'SELECTED' | uiTranslate | async) + ' ' + (value | transformItem: textField : true)\n \"\n [style.opacity]=\"type === autocompleteType.MULTI ? inputOpacity : 1\"\n matInput\n [placeholder]=\"value && value.length ? '' : placeholder\"\n [type]=\"'text'\"\n [matAutocomplete]=\"autocomplete\"\n (input)=\"onInputChange($event)\"\n [(ngModel)]=\"inputValue\"\n />\n @if (\n (type === autocompleteType.LARGE && value) ||\n (!(inputValue && isInputFocus) && value && type !== autocompleteType.SINGLE)\n ) {\n <div class=\"selected-items\" #tagContainer>\n @for (valueItem of value; track valueItem; let i = $index) {\n <ui-tag\n class=\"value-tag\"\n [id]=\"'ui-tag-' + i\"\n [label]=\"valueItem | transformItem: textField\"\n [allowClose]=\"true\"\n [isDisabled]=\"disabled\"\n [applicationTheme]=\"applicationTheme\"\n [style.opacity]=\"type === autocompleteType.MULTI ? inputOpacity : 1\"\n [style.display]=\"\n (isOverLapping && i > 0 && i >= overlapIndex) || (size === 'small' && value.length > 1)\n ? 'none'\n : 'block'\n \"\n [ngStyle]=\"{\n '--tag-max-width': type === autocompleteType.LARGE ? 'fit-content' : firstTagMaxWidth + 'px',\n }\"\n [ngClass]=\"{\n 'overlap-tag':\n isOverlapChecking && overlapIndex && i >= overlapIndex && type === autocompleteType.MULTI,\n }\"\n (close)=\"onOptionRemoved(valueItem)\"\n ></ui-tag>\n }\n @if (size === 'small') {\n @if (value.length > 1) {\n <div class=\"selected-count\">\n {{\n translationContext + 'SELECTED_AMOUNT'\n | uiTranslate: { numberSelected: (value | slice: overlapIndex).length }\n | async\n }}\n </div>\n }\n } @else {\n @if (value.length > 1 && isOverLapping) {\n <div class=\"overlap-count\">\n <ui-tag\n [applicationTheme]=\"applicationTheme\"\n [isDisabled]=\"disabled\"\n [label]=\"'+' + (value.length - overlapIndex)\"\n ></ui-tag>\n </div>\n }\n }\n </div>\n }\n </div>\n\n @if (\n (clearable && type === autocompleteType.SINGLE && (value?.length || hasObjectValue)) ||\n (type !== autocompleteType.SINGLE &&\n value &&\n value.length > 1 &&\n ((AutocompleteUtils.isPrimitive(value) && value.length) ||\n (!AutocompleteUtils.isPrimitive(value) &&\n ((AutocompleteUtils.isArray(value) && value.length) ||\n (!AutocompleteUtils.isArray(value) && !value.length)))))\n ) {\n <ui-icon\n class=\"remove-selected\"\n [tabIndex]=\"disabled ? -1 : 0\"\n (keydown.enter)=\"onClear(); $event.preventDefault(); $event.stopPropagation()\"\n (keydown.space)=\"onClear(); $event.preventDefault(); $event.stopPropagation()\"\n [ngClass]=\"{ 'large-input-icon': type === autocompleteType.LARGE }\"\n (click)=\"onClear(); $event.preventDefault(); $event.stopPropagation()\"\n [size]=\"'24'\"\n [color]=\"applicationTheme === 'classic' ? 'inherit' : 'rebrand-black'\"\n [attr.aria-label]=\"'COMMON.CLEAR' | uiTranslate | async\"\n [name]=\"applicationTheme === 'classic' ? 'Close' : 'Close-in-line'\"\n ></ui-icon>\n }\n\n @if (isDropdown) {\n <ui-icon\n class=\"arrow-state\"\n [ngClass]=\"{ opened: autocomplete.isOpen, 'large-input-icon': type === autocompleteType.LARGE }\"\n [size]=\"'24'\"\n [name]=\"applicationTheme !== 'classic' ? 'Arrow-chevron-down-in-line' : 'Arrow_down'\"\n (click)=\"onChevronClick(autocomplete)\"\n ></ui-icon>\n }\n\n <mat-autocomplete\n #autocomplete\n [class]=\"applicationTheme + ' ' + dropdownPanelClass\"\n (optionSelected)=\"onOptionSelected($event)\"\n [disableRipple]=\"applicationTheme !== 'classic'\"\n [hideSingleSelectionIndicator]=\"false\"\n (opened)=\"gotoUp()\"\n >\n @if (type !== autocompleteType.MULTI || value?.length < maxItemSelected) {\n @if ((searchResult$ | async) === false) {\n @if (!isDropdown) {\n @if (suggestionsList.length) {\n <mat-optgroup [label]=\"(translationContext + 'SUGGESTED' | uiTranslate | async)! | uppercase\">\n @for (suggested of suggestionsList; track suggested) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': suggested | includes: value : valueField }\"\n [value]=\"suggested\"\n >\n <span [selectText]=\"userInput$ | async\">{{ suggested | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n </mat-optgroup>\n }\n @if (value?.length && type !== autocompleteType.SINGLE) {\n <mat-optgroup [label]=\"(translationContext + 'SELECTED' | uiTranslate | async)! | uppercase\">\n @for (item of value; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span>{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n </mat-optgroup>\n }\n @if (isGrouped) {\n @for (group of itemsList; track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n @for (item of group.items; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n </mat-optgroup>\n } @else {\n @for (item of group.items; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n }\n }\n }\n @if (value?.length && type === autocompleteType.SINGLE) {\n <mat-optgroup [label]=\"(translationContext + 'SELECTED' | uiTranslate | async)! | uppercase\">\n <mat-option (mousedown)=\"$event.preventDefault()\" [class]=\"'selected-option'\" [value]=\"value\">\n <span [selectText]=\"userInput$ | async\">{{ value | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n </mat-optgroup>\n }\n } @else {\n @if (virtualScroll || infiniteScroll) {\n <cdk-virtual-scroll-viewport\n [itemSize]=\"48\"\n [style.height.px]=\"getVirtualScrollHeight(itemsList.length)\"\n class=\"virtual-scroll\"\n >\n @if (!isGrouped) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n *cdkVirtualFor=\"let item of itemsList\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n @if (infiniteScroll && hasMoreOptionsForInfiniteScroll) {\n <mat-option class=\"loading-option\" [style.pointer-events]=\"'none'\">\n <div class=\"loading-container\">\n <ui-spinner size=\"small\" [isLoader]=\"false\"></ui-spinner>\n </div>\n </mat-option>\n }\n } @else {\n @for (group of itemsList; track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n *cdkVirtualFor=\"let item of group.items\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n </mat-optgroup>\n } @else {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n *cdkVirtualFor=\"let item of group.items\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n }\n }\n </cdk-virtual-scroll-viewport>\n } @else {\n @if (!isGrouped) {\n @for (item of itemsList; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n } @else {\n @for (group of itemsList; track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n @for (item of group.items; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n </mat-optgroup>\n } @else {\n @for (item of group.items; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n }\n }\n }\n }\n }\n }\n\n @if (filteredSuggestionList$ | async; as filteredSuggestionList) {\n @if (filteredItemsList$ | async; as filteredItemsList) {\n @if (virtualScroll || infiniteScroll) {\n <cdk-virtual-scroll-viewport\n [itemSize]=\"48\"\n [style.height.px]=\"getVirtualScrollHeight(filteredItemsList.length)\"\n class=\"virtual-scroll\"\n >\n @if (isGrouped && filteredItemsList.length) {\n @for (group of filteredItemsList; track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n *cdkVirtualFor=\"let item of group.filteredItems\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n </mat-optgroup>\n } @else {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n *cdkVirtualFor=\"let item of group.filteredItems\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n }\n }\n @if (filteredSuggestionList.length) {\n <mat-optgroup [label]=\"(translationContext + 'SUGGESTED' | uiTranslate | async)! | uppercase\">\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n *cdkVirtualFor=\"let item of filteredSuggestionList\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n </mat-optgroup>\n }\n @if (!filteredSuggestionList.length && !isGrouped) {\n @for (item of filteredItemsList; let idx = $index; track item[valueField] || idx) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n } @else {\n @if (filteredItemsList.length && !isGrouped) {\n <mat-optgroup [label]=\"(translationContext + 'ALL_ITEMS' | uiTranslate | async)! | uppercase\">\n @for (item of filteredItemsList; let idx = $index; track item[valueField] || idx) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n </mat-optgroup>\n }\n }\n @if (isDynamicFilteringEnabled && dynamicFilterLoading) {\n <mat-option class=\"loading-option\" [style.pointer-events]=\"'none'\">\n <div class=\"loading-container\">\n <ui-spinner size=\"small\" [isLoader]=\"false\"></ui-spinner>\n </div>\n </mat-option>\n } @else if (inputValue) {\n @if (allowAdd && !isAlreadyAdded) {\n <mat-option (mousedown)=\"$event.preventDefault()\" [value]=\"inputValue\">\n <span>{{ 'COMMON.ADD' | uiTranslate | async }}</span>\n <span class=\"add-suggestion\">\"{{ inputValue }}\"</span>\n </mat-option>\n } @else if (!filteredItemsList.length && !filteredSuggestionList.length) {\n <mat-option [style.pointer-events]=\"'none'\">\n <span>{{ translationContext + 'NO_RESULTS_FOUND' | uiTranslate | async }}</span>\n </mat-option>\n }\n }\n </cdk-virtual-scroll-viewport>\n } @else {\n @if (isGrouped && filteredItemsList.length) {\n @for (group of filteredItemsList; track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n @for (item of group.filteredItems; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n </mat-optgroup>\n } @else {\n @for (item of group.filteredItems; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n }\n }\n }\n @if (isGrouped && filteredItemsList.length) {\n @for (group of filteredItemsList; track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n @for (item of group.filteredItems; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n </mat-optgroup>\n } @else {\n @for (item of group.filteredItems; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n }\n }\n }\n @if (filteredSuggestionList.length) {\n <mat-optgroup [label]=\"(translationContext + 'SUGGESTED' | uiTranslate | async)! | uppercase\">\n @for (item of filteredSuggestionList; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n </mat-optgroup>\n }\n @if (!filteredSuggestionList.length && !isGrouped) {\n @for (item of filteredItemsList; let idx = $index; track item[valueField] || idx) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n } @else {\n @if (filteredItemsList.length && !isGrouped) {\n <mat-optgroup [label]=\"(translationContext + 'ALL_ITEMS' | uiTranslate | async)! | uppercase\">\n @for (item of filteredItemsList; let idx = $index; track item[valueField] || idx) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n </mat-optgroup>\n }\n }\n @if (isDynamicFilteringEnabled && dynamicFilterLoading) {\n <mat-option class=\"loading-option\" [style.pointer-events]=\"'none'\">\n <div class=\"loading-container\">\n <ui-spinner size=\"small\" [isLoader]=\"false\"></ui-spinner>\n </div>\n </mat-option>\n } @else if (inputValue) {\n @if (allowAdd && !isAlreadyAdded) {\n <mat-option (mousedown)=\"$event.preventDefault()\" [value]=\"inputValue\">\n <span>{{ 'COMMON.ADD' | uiTranslate | async }}</span>\n <span class=\"add-suggestion\">\"{{ inputValue }}\"</span>\n </mat-option>\n } @else if (!filteredItemsList.length && !filteredSuggestionList.length) {\n <mat-option [style.pointer-events]=\"'none'\">\n <span>{{ translationContext + 'NO_RESULTS_FOUND' | uiTranslate | async }}</span>\n </mat-option>\n }\n }\n }\n }\n }\n }\n </mat-autocomplete>\n @if (\n safeErrors.length ||\n (ngControl?.errors | hasValidationError) ||\n (AutocompleteUtils.isArray(value) && value.length) > maxItemSelected ||\n ((AutocompleteUtils.isArray(value) && value.length) >= maxItemSelected && inputValue && inputValue !== ' ')\n ) {\n <mat-hint class=\"error\">\n @if (\n (AutocompleteUtils.isArray(value) && value.length) > maxItemSelected ||\n ((AutocompleteUtils.isArray(value) && value.length) >= maxItemSelected && inputValue && inputValue !== ' ')\n ) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{\n translationContext + 'MAX_SELECTED_ERROR' | uiTranslate: { max: maxItemSelected } | async\n }}</span>\n </div>\n }\n @if (safeErrors.length) {\n @for (error of safeErrors; track trackByFn($index, error)) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span [innerHTML]=\"error\"></span>\n </div>\n }\n }\n @if (ngControl && !hideBuiltInErrors) {\n <ui-validation-error\n [ngControl]=\"ngControl\"\n [label]=\"hideLabelInErrors ? null : label\"\n ></ui-validation-error>\n }\n </mat-hint>\n }\n </mat-form-field>\n </div>\n</ng-container>\n","import { CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { UiTranslatePipe, HasValidationErrorPipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { SpinnerComponentModule } from '@testgorilla/tgo-ui/components/spinner';\nimport { TagComponentModule } from '@testgorilla/tgo-ui/components/tag';\nimport { ValidationErrorModule } from '@testgorilla/tgo-ui/components/validation-error';\n\nimport { AutocompleteComponent } from './autocomplete.component';\nimport { IncludesPipe } from './includes.pipe';\nimport { PreventInputDirective } from './prevent-input.directive';\nimport { SelectTextDirective } from './select-text.directive';\nimport { TransformItemPipe } from './transform-Item.pipe';\n\n@NgModule({\n declarations: [AutocompleteComponent, TransformItemPipe, IncludesPipe, SelectTextDirective],\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatAutocompleteModule,\n MatInputModule,\n FormsModule,\n TagComponentModule,\n MatChipsModule,\n IconComponentModule,\n UiTranslatePipe,\n ValidationErrorModule,\n HasValidationErrorPipe,\n CdkVirtualForOf,\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n PreventInputDirective,\n SpinnerComponentModule,\n ],\n exports: [AutocompleteComponent],\n providers: [TransformItemPipe, IncludesPipe, SelectTextDirective],\n})\nexport class AutocompleteComponentModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i10.PreventInputDirective","i12.SelectTextDirective","i14.TransformItemPipe","i15.IncludesPipe"],"mappings":"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"}
1
+ {"version":3,"file":"testgorilla-tgo-ui-components-autocomplete.mjs","names":["i10.PreventInputDirective","i12.SelectTextDirective","i14.TransformItemPipe","i15.IncludesPipe"],"sources":["../../../components/autocomplete/autocomplete.model.ts","../../../components/autocomplete/prevent-input.directive.ts","../../../components/autocomplete/select-text.directive.ts","../../../components/autocomplete/transform-Item.pipe.ts","../../../components/autocomplete/includes.pipe.ts","../../../components/autocomplete/autocomplete.component.ts","../../../components/autocomplete/autocomplete.component.html","../../../components/autocomplete/autocomplete.component.module.ts"],"sourcesContent":["export type AutocompleteType = 'single' | 'multi' | 'large';\n\nexport enum Autocomplete {\n SINGLE = 'single',\n MULTI = 'multi',\n LARGE = 'large',\n}\n\nexport enum Padding {\n AUTOCOMPLETE_CONTAINER = 40,\n DROPDOWN_CONTAINER = 60,\n AUTOCOMPLETE_SPACE_CONTAINER = 65,\n DROPDOWN_SPACE_CONTAINER = 85,\n}\n\nexport const AMOUNT_TAG_WIDTH = 33;\n\nexport enum Timeout {\n VIEW_INITIALIZED_AFTER_ACTION = 150,\n VIEW_INITIALIZED_COMPONENT_LOAD = 600,\n}\n\nexport enum DropdownVariation {\n AUTOCOMPLETE = 'autocomplete',\n DROPDOWN = 'dropdown',\n}\n\nexport type DropdownVariationType = `${DropdownVariation}`;\n\nexport type AutocompleteSize = 'small' | 'medium';\n","import { Directive, HostListener, Input } from '@angular/core';\n\n@Directive({\n selector: '[uiPreventInput]',\n standalone: true,\n})\nexport class PreventInputDirective {\n @Input() uiPreventInput: boolean;\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent): void {\n const allowedKeys = [\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n 'Backspace',\n 'Tab',\n 'Delete',\n 'Control',\n 'Shift',\n 'Alt',\n ];\n if (!allowedKeys.includes(event.key) && !event.ctrlKey && !event.metaKey && this.uiPreventInput) {\n event.preventDefault();\n }\n }\n}\n","import { Directive, ElementRef, Input, OnChanges } from '@angular/core';\n\n/**\n * the SelectTextDirective provides a dynamic way to highlight or style specific text within an element.\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector -- public directive selector; ui-prefix rename is breaking, deferred to the breaking-change MAJOR (see plan)\n selector: '[selectText]',\n standalone: false,\n})\nexport class SelectTextDirective implements OnChanges {\n @Input() selectText: string | null;\n\n constructor(private readonly el: ElementRef) {}\n\n /**\n * this method utilizes setTimeout to defer the execution until the next tick of the event loop.\n * The text content of the element is modified by wrapping occurrences of the specified selectText with a <span> element,\n * applying a bold font-weight style.\n */\n private setTextColor(): void {\n const textElement = this.el.nativeElement as HTMLElement;\n setTimeout(() => {\n const { textContent } = textElement;\n if (this.selectText && textContent) {\n // eslint-disable-next-line no-unsanitized/property -- SECURITY: source is the element's own textContent (plain text, browser-escaped); only matches are wrapped in a static <span> for highlighting, so no untrusted markup is introduced.\n textElement.innerHTML = textContent.replace(\n new RegExp(this.selectText, 'gmi'),\n match => `<span style=\"font-weight: bold\" >${match}</span>`\n );\n }\n }, 0);\n }\n\n ngOnChanges(): void {\n if (this.selectText) {\n this.setTextColor();\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { AutocompleteUtils } from '@testgorilla/tgo-ui/components/core';\n\n/**\n * the TransformItemPipe is designed to selectively extract and return values from objects based on a specified field,\n * providing a way to transform and display data a template.\n */\n@Pipe({\n name: 'transformItem',\n standalone: false,\n})\nexport class TransformItemPipe implements PipeTransform {\n transform(value: any, field: string, getValueList: boolean = false): any {\n if (getValueList) {\n return AutocompleteUtils.isArray(value)\n ? value.map((item: any) => (field ? item[field] : item))\n : field\n ? value?.[field]\n : value;\n }\n\n if (AutocompleteUtils.isPrimitive(value)) {\n return value;\n } else if (!AutocompleteUtils.isPrimitive(value) && field && (value?.[field] || value[0][field])) {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- a falsy field value falls back to the first item field\n return value?.[field] || value[0][field];\n } else {\n AutocompleteUtils.throwInvalidSetupError();\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * The purpose of this pipe is to determine if the value is present in the values array.\n * If values is an array, the method uses the includes method to check for inclusion.\n * If values is not an array, it checks for strict equality between value and values.\n */\n@Pipe({\n name: 'includes',\n standalone: false,\n})\nexport class IncludesPipe implements PipeTransform {\n transform(value: any, values: any, valueField?: string): boolean {\n return Array.isArray(values)\n ? Boolean(values?.find(v => (valueField ? v?.[valueField] === value?.[valueField] : value === v)))\n : valueField\n ? value?.[valueField] === values?.[valueField]\n : value === values;\n }\n}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n DoCheck,\n ElementRef,\n EventEmitter,\n HostBinding,\n inject,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n PLATFORM_ID,\n ProviderToken,\n signal,\n SimpleChanges,\n ViewChild,\n OnInit,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete';\nimport { BehaviorSubject, filter, map, ReplaySubject, startWith, Subscription, take, throttleTime } from 'rxjs';\n\nimport { ApplicationTheme, IKeyboardEvent, AutocompleteUtils } from '@testgorilla/tgo-ui/components/core';\n\nimport {\n Autocomplete,\n AutocompleteSize,\n AutocompleteType,\n DropdownVariation,\n DropdownVariationType,\n Padding,\n Timeout,\n} from './autocomplete.model';\n\n@Component({\n selector: 'ui-autocomplete',\n templateUrl: './autocomplete.component.html',\n styleUrls: ['./autocomplete.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class AutocompleteComponent\n implements ControlValueAccessor, OnChanges, AfterViewInit, DoCheck, OnDestroy, OnInit\n{\n /**\n * @property itemsList\n * @description The list of items to display in the autocomplete.\n * @memberof AutocompleteComponent\n */\n @Input() itemsList: any[] | { groupName: string; items: any[]; isGroup: boolean }[] = [];\n\n /**\n * @property suggestionsList\n * @description The list of suggestions to display in the autocomplete.\n * @memberof AutocompleteComponent\n */\n @Input() suggestionsList: any[] = [];\n\n /**\n * @property disabled\n * @description If `true`, the autocomplete is disabled.\n * @memberof AutocompleteComponent\n */\n @Input() disabled = false;\n\n /**\n * @property allowAdd\n * @description If `true`, allows adding new values to the autocomplete.\n * @memberof AutocompleteComponent\n */\n @Input() allowAdd = true;\n\n /**\n * @property textField\n * @description The field to be used as the display text in the autocomplete.\n * @memberof AutocompleteComponent\n */\n @Input() textField = '';\n\n /**\n * @property valueField\n * @description The field to be used as the value in the autocomplete.\n * @memberof AutocompleteComponent\n */\n @Input() valueField = '';\n\n /**\n * @property label\n * @description The label for the autocomplete input.\n * @memberof AutocompleteComponent\n */\n @Input() label = '';\n\n /**\n * @property placeholder\n * @description The placeholder for the autocomplete input.\n * @memberof AutocompleteComponent\n */\n @Input() placeholder = '';\n\n @Input() testId: string | null = null;\n\n /**\n * @property value\n * @description The selected value(s) in the autocomplete.\n * @memberof AutocompleteComponent\n */\n @Input() set itemValue(v: any) {\n this.value = AutocompleteUtils.isArray(v) ? v : v ? [v] : [];\n }\n\n /**\n * @property type\n * @description The type of the autocomplete ('single', 'multi', etc.).\n * @memberof AutocompleteComponent\n */\n @Input() type: AutocompleteType = 'multi';\n\n /**\n * @property minCharactersSearch\n * @description The minimum characters to trigger search.\n * @memberof AutocompleteComponent\n */\n @Input() minCharactersSearch = 3;\n\n /**\n * @property variant\n * @description The variant of Autocomplete\n * @memberof AutocompleteComponent\n */\n @Input({ required: true }) variant: DropdownVariationType = DropdownVariation.AUTOCOMPLETE;\n\n /**\n * Show reserved content below form field\n * @property showBottomContent\n * @type {boolean}\n * @memberof AutocompleteComponent\n */\n @Input() showBottomContent = true;\n\n /**\n * Return full object if true\n * @property valuePrimitive\n * @type {boolean}\n * @memberof AutocompleteComponent\n */\n @Input() valuePrimitive = false;\n\n /**\n * Indicator of the autocomplete width\n * @property fullWidth\n * @type {boolean}\n * @memberof AutocompleteComponent\n */\n @HostBinding('class.full-width')\n @Input()\n fullWidth = false;\n\n /**\n *\n * Defines the application theme\n *\n * @type {ApplicationTheme}\n * @memberof AutocompleteComponent\n */\n @HostBinding('attr.theme')\n @Input()\n applicationTheme: ApplicationTheme = 'light';\n\n /**\n * Autocomplete is required or not\n *\n * @type {boolean}\n * @memberof AutocompleteComponent\n */\n @Input() required: boolean;\n\n /**\n * Input field errors\n *\n * @type {string[]}\n * @memberof AutocompleteComponent\n */\n @Input() set errors(errors: string[]) {\n this.safeErrors = errors?.filter(Boolean) ?? [];\n }\n\n /**\n * Color of the option hover.\n * Defaults to Test Gorilla primary color.\n *\n * @type {string}\n * @memberof AutocompleteComponent\n */\n @Input() companyColor: string | null = '#FFF2FC';\n\n /**\n * Hide in-build errors for Reactive Forms\n *\n * @type {number}\n * @memberof AutocompleteComponent\n */\n @Input() hideBuiltInErrors = false;\n\n /**\n * Hide label in errors\n *\n * @type {number}\n * @memberof AutocompleteComponent\n */\n @Input() hideLabelInErrors = false;\n\n /**\n * Sets dropdown list to virtual scroll mode\n *\n * @type {boolean}\n * @memberof AutocompleteComponent\n */\n @Input({ transform: booleanAttribute }) virtualScroll = false;\n\n /**\n * @property compareWith\n * @description Custom comparison logic for the autocomplete.\n * @memberof AutocompleteComponent\n */\n @Input() compareWith: (a: any, b: any) => boolean;\n\n /**\n * @property dropdownPanelClass\n * @description Sets class on autocomplete dropdown\n * @memberof AutocompleteComponent\n */\n @Input() dropdownPanelClass = '';\n\n /**\n * @property closeOnScroll\n * @description Defines if dropdown should be closed on page scroll\n * @memberof AutocompleteComponent\n */\n @Input() closeOnScroll = false;\n\n /**\n * @property AutocompleteSize\n * @description Defines the size of the autocomplete. Small changes the tags to counter; medium is default.\n * @memberof AutocompleteComponent\n */\n @Input() size: AutocompleteSize = 'medium';\n\n /**\n * @property allowUserInput\n * @description If `true`, allows the user to input custom values in the autocomplete.\n * @type {boolean}\n * @memberof AutocompleteComponent\n */\n @Input() allowUserInput = true;\n\n /**\n * @property clearable\n * @description If `true`, allows the user to clear the input values\n * @type {boolean}\n * @memberof AutocompleteComponent\n */\n @Input() clearable = true;\n\n /**\n * @property exactMatchSelect\n * @description If `true`, allows to select the exact match from the suggestions list\n * @type {boolean}\n * @memberof AutocompleteComponent\n */\n @Input() exactMatchSelect = true;\n\n /**\n * @property maxItemSelected\n * @description Sets the maximum number of items that can be selected in the autocomplete\n * @type {boolean}\n * @memberof AutocompleteComponent\n */\n @Input() maxItemSelected = Infinity;\n\n /**\n * @property maxItemSelected\n * @description Sets the maximum length of the autocomplete input\n * @type {boolean}\n * @memberof AutocompleteComponent\n */\n @Input() maxLength?: number;\n\n @Input() isDynamicFilteringEnabled = false;\n @Input() dynamicFilterLoading = false;\n @Input() dynamicFilteredList: any[] | null = null;\n\n @Input() infiniteScroll = false;\n @Input() hasMoreOptionsForInfiniteScroll = true;\n\n @Output() selectionChange = new EventEmitter<any>();\n @Output() searchTextChange = new EventEmitter<string>();\n // eslint-disable-next-line @angular-eslint/no-output-native -- output shadows a native event; rename is breaking, deferred to the breaking-change MAJOR (see plan)\n @Output() blur = new EventEmitter<void>();\n // eslint-disable-next-line @angular-eslint/no-output-native -- output shadows a native event; rename is breaking, deferred to the breaking-change MAJOR (see plan)\n @Output() focus = new EventEmitter<void>();\n\n /**\n * @property scrollViewportBottomReached\n * @description Emits when the bottom of the unfiltered list is reached during infinite scroll\n * @memberof AutocompleteComponent\n */\n @Output() scrollViewportBottomReached = new EventEmitter<void>();\n\n /**\n * @property scrollViewportBottomReachedFiltered\n * @description Emits when the bottom of the filtered list is reached during infinite scroll\n * @memberof AutocompleteComponent\n */\n @Output() scrollViewportBottomReachedFiltered = new EventEmitter<void>();\n\n @ViewChild('formField') formFieldElement: ElementRef<HTMLElement>;\n @ViewChild('tagContainer') tagContainer: ElementRef<HTMLElement>;\n @ViewChild('trigger') autocomplete: MatAutocompleteTrigger;\n @ViewChild(CdkVirtualScrollViewport, { static: false }) set cdkVirtualScrollViewport(\n viewport: CdkVirtualScrollViewport\n ) {\n if (this.savedVirtualScrollSubscription) {\n this.savedVirtualScrollSubscription.unsubscribe();\n }\n\n if (viewport) {\n this.savedVirtualScrollViewport = viewport;\n\n if (this.infiniteScroll) {\n setTimeout(() => {\n this.inputValueSearch$.pipe(take(1)).subscribe(searchValue => {\n this.isFilteredViewport = !!searchValue;\n });\n }, 0);\n\n this.savedVirtualScrollSubscription = this.savedVirtualScrollViewport\n .elementScrolled()\n .pipe(\n map(() => this.savedVirtualScrollViewport.measureScrollOffset('bottom')),\n filter(offset => offset < this.savedVirtualScrollViewport.getViewportSize() * 0.2),\n throttleTime(200),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => {\n if (this.isFilteredViewport) {\n this.scrollViewportBottomReachedFiltered.emit();\n } else {\n this.scrollViewportBottomReached.emit();\n }\n });\n }\n }\n }\n @ViewChild('autocomplete') matAutocomplete: MatAutocomplete;\n @ViewChild('matInput') matInput: ElementRef<HTMLInputElement>;\n\n protected safeErrors: string[] = [];\n protected value: any;\n protected inputValue: any = '';\n protected isInputFocus = false;\n protected autocompleteType = Autocomplete;\n protected isOverLapping = false;\n protected isOverlapChecking = true;\n protected overlapIndex = 0;\n protected inputOpacity = 1;\n protected firstTagMaxWidth = 0;\n protected inputValueSearch$ = new BehaviorSubject<string>('');\n protected userInput$ = new ReplaySubject<string>(1);\n protected dynamicFilteredList$ = new BehaviorSubject<any[] | null>(null);\n protected filteredItemsList$ = this.inputValueSearch$.pipe(\n startWith(''),\n map(inputValue =>\n inputValue.length\n ? AutocompleteUtils.filterItems(this.itemsList, inputValue, this.textField, this.isGrouped)\n : null\n )\n );\n protected filteredSuggestionList$ = this.inputValueSearch$.pipe(\n map(inputValue =>\n inputValue.length ? AutocompleteUtils.filterItems(this.suggestionsList, inputValue, this.textField) : null\n )\n );\n protected savedVirtualScrollViewport: CdkVirtualScrollViewport;\n protected savedVirtualScrollSubscription: Subscription;\n protected isFilteredViewport = false;\n\n scrollEvent = (event: any): void => {\n const isNotAutocompleteScroll =\n !event.target?.id?.includes('mat-autocomplete-') &&\n !event.target?.parentElement?.id?.includes('mat-autocomplete-') &&\n !event.target?.classList?.contains('mat-mdc-autocomplete-trigger');\n\n if (this.autocomplete.panelOpen && isNotAutocompleteScroll) {\n this.autocomplete.closePanel();\n }\n };\n\n protected searchResult$ = this.inputValueSearch$.pipe(map(inputValue => !!inputValue.trim()));\n protected translationContext = 'AUTOCOMPLETE.';\n protected readonly AutocompleteUtils = AutocompleteUtils;\n private readonly defaultAppTheme = inject(\n 'CANOPYUI_DEFAULT_APPLICATION_THEME' as unknown as ProviderToken<ApplicationTheme>,\n {\n optional: true,\n }\n );\n private readonly cdr = inject(ChangeDetectorRef);\n public ngControl = inject(NgControl, { optional: true, self: true });\n private readonly platformId = inject(PLATFORM_ID);\n private readonly el = inject(ElementRef);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly destroyRef = inject(DestroyRef);\n private readonly ngZone = inject(NgZone);\n private readonly isPlatform = isPlatformBrowser(this.platformId);\n private observer: MutationObserver;\n protected keyboardFocused = signal<boolean>(false);\n isAlreadyAdded = false;\n\n constructor() {\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n if (this.defaultAppTheme) {\n this.applicationTheme = this.defaultAppTheme;\n }\n\n this.subscriberDisplayChange();\n }\n\n ngOnInit(): void {\n if (this.isDynamicFilteringEnabled) {\n this.filteredItemsList$ = this.dynamicFilteredList$;\n }\n }\n\n /**\n * Used to mark component view as dirty when touched programmatically with markAsTouched/markAllAsTouched or errors\n * to display validation errors that might happen (e.g. required)\n */\n\n ngDoCheck(): void {\n if (this.ngControl?.touched || this.ngControl?.errors) {\n this.cdr.markForCheck();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.isDynamicFilteringEnabled) {\n const dynamicFilteredList = changes['dynamicFilteredList']?.currentValue;\n\n if (dynamicFilteredList) {\n this.dynamicFilteredList$.next(dynamicFilteredList);\n }\n\n return;\n }\n\n if (changes['itemsList'] || changes['suggestionsList'] || changes['valueField']) {\n this.itemsList = this.isGrouped\n ? this.itemsList\n : AutocompleteUtils.excludeSuggestions(this.itemsList, this.suggestionsList, this.valueField);\n this.initValue();\n }\n\n if (this.isPlatform && changes['companyColor']) {\n this.setCompanyColorVariable();\n }\n }\n\n ngAfterViewInit(): void {\n if (this.type !== (Autocomplete.LARGE as AutocompleteType)) {\n this.checkOverlap(Timeout.VIEW_INITIALIZED_COMPONENT_LOAD, true);\n }\n if (this.isPlatform) {\n this.setCompanyColorVariable();\n }\n if (this.closeOnScroll) {\n window.addEventListener('scroll', this.scrollEvent, true);\n }\n\n this.focusMonitor\n .monitor(this.matInput)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(origin =>\n this.ngZone.run(() => {\n this.keyboardFocused.set(origin === 'keyboard');\n })\n );\n\n this.matInput.nativeElement.onkeydown = this.onKeydown.bind(this);\n }\n\n ngOnDestroy(): void {\n window.removeEventListener('scroll', this.scrollEvent, true);\n\n if (this.observer) {\n this.observer.disconnect();\n }\n }\n\n onChange = (_: any) => {};\n onTouch = () => {};\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouch = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n writeValue(value: any): void {\n if (this.valuePrimitive && this.textField && this.valueField) {\n if (this.type === (Autocomplete.SINGLE as AutocompleteType)) {\n this.value = this.itemsList.find(item => item[this.valueField] === value);\n } else {\n this.value = AutocompleteUtils.isArray(value)\n ? this.itemsList.filter(item => value.find((v: any) => v === item[this.valueField]))\n : [this.itemsList.find(item => item[this.valueField] === value)];\n this.value = this.value.filter(Boolean).length ? this.value : null;\n }\n } else {\n this.value = value;\n }\n\n this.initValue();\n\n this.cdr.markForCheck();\n }\n\n protected get isGrouped(): boolean {\n return this.itemsList?.some((item: any) => item.isGroup);\n }\n\n protected onOptionSelected(event: MatAutocompleteSelectedEvent): void {\n const inputValue = event.option.value;\n const itemValue = AutocompleteUtils.createValueItem(inputValue, this.textField, this.valueField);\n this.addNewValue(itemValue);\n\n if (this.type === (this.autocompleteType.MULTI as AutocompleteType)) {\n this.checkOverlap();\n }\n\n queueMicrotask(() => {\n if (this.type !== (this.autocompleteType.SINGLE as AutocompleteType)) {\n this.inputValue = '';\n } else {\n this.inputValue = AutocompleteUtils.transformDisplayValue(this.value, this.textField);\n }\n this.cdr.markForCheck();\n });\n\n this.onUpdate();\n }\n\n protected onOptionRemoved(option: any): void {\n setTimeout(() => this.autocomplete.closePanel(), 0);\n const foundValue = this.value.find((v: any) => (this.compareWith ? this.compareWith(v, option) : v === option));\n\n if (foundValue) {\n this.value = this.value.filter((v: any) => (this.compareWith ? !this.compareWith(v, option) : v !== option));\n this.matAutocomplete.options.forEach(matOption => {\n if (matOption.value?.value === foundValue.value) {\n matOption.deselect();\n }\n });\n }\n\n if (this.type === (this.autocompleteType.MULTI as AutocompleteType)) {\n this.checkOverlap();\n }\n\n if (!this.value.length) {\n this.inputValue = '';\n }\n\n this.onUpdate();\n }\n\n protected onInputChange(event: Event): void {\n const inputValue = (event.target as HTMLInputElement).value;\n this.userInput$.next(inputValue);\n if (inputValue.length >= this.minCharactersSearch) {\n this.inputValueSearch$.next(inputValue);\n this.searchTextChange.emit(inputValue);\n const itemList = this.isGrouped ? this.itemsList.flatMap(groups => groups.items) : this.itemsList.flat();\n\n const findValue = [...this.suggestionsList, ...itemList].find(\n v => inputValue === (this.textField ? v[this.textField] : v)\n );\n const count = AutocompleteUtils.countMatchingWords(\n [...this.suggestionsList, ...itemList],\n this.inputValue,\n this.textField\n );\n if (findValue && count === 1 && this.exactMatchSelect) {\n this.onOptionSelected({ option: { value: findValue } } as MatAutocompleteSelectedEvent);\n }\n } else {\n this.inputValueSearch$.next('');\n this.userInput$.next('');\n }\n this.isAlreadyAdded = !!(this.compareWith\n ? this.value.find((v: any) => this.compareWith(v, inputValue))\n : AutocompleteUtils.findDuplicate(this.value, inputValue, this.textField));\n }\n\n protected onClear(): void {\n this.inputValue = '';\n this.value = AutocompleteUtils.isArray(this.value) ? [] : '';\n this.isOverLapping = false;\n this.overlapIndex = 0;\n this.onUpdate();\n this.matAutocomplete?.options.forEach(option => option.deselect());\n this.onTouch();\n }\n\n protected refillInput(): void {\n setTimeout(() => {\n if (this.value && this.type === (this.autocompleteType.SINGLE as AutocompleteType) && !this.inputValue) {\n this.inputValue = AutocompleteUtils.transformDisplayValue(this.value, this.textField);\n } else if (!this.inputValue && this.value?.length) {\n this.inputValue = ' ';\n } else if (\n this.inputValue &&\n this.type === (Autocomplete.SINGLE as AutocompleteType) &&\n this.value &&\n Object.keys(this.value).length\n ) {\n this.inputValue = AutocompleteUtils.transformDisplayValue(\n AutocompleteUtils.isArray(this.value) ? this.value[0] : this.value,\n this.textField\n );\n } else if (this.inputValue) {\n this.inputValue = ' ';\n }\n\n this.inputValueSearch$.next('');\n this.userInput$.next('');\n this.isInputFocus = false;\n this.onTouch();\n this.blur.emit();\n }, 0);\n }\n\n protected gotoUp() {\n if (this.savedVirtualScrollViewport) {\n this.savedVirtualScrollViewport.scrollToIndex(0);\n this.savedVirtualScrollViewport.checkViewportSize();\n }\n }\n\n protected onFocus(): void {\n this.isInputFocus = true;\n\n const inputValue = AutocompleteUtils.isArray(this.inputValue) ? this.inputValue[0] : this.inputValue;\n\n if (AutocompleteUtils.isPrimitive(inputValue)) {\n if (typeof inputValue !== 'number' && inputValue?.match(/^\\s+/gm)) {\n this.inputValue = inputValue.trimStart();\n }\n } else {\n if (inputValue[this.textField]?.match(/^\\s+/gm)) {\n this.inputValue = inputValue[this.textField].trimStart();\n }\n }\n this.focus.emit();\n }\n\n private checkOverlap(delay = Timeout.VIEW_INITIALIZED_AFTER_ACTION, init = false): void {\n this.isOverLapping = false;\n this.isOverlapChecking = true;\n this.inputOpacity = 0;\n\n setTimeout(() => {\n const inputWidth = this.inputWidth;\n const tags = this.tagContainer?.nativeElement.querySelectorAll('.value-tag');\n if (tags) {\n let width = 0;\n tags.forEach((tag: any, index: number) => {\n width += tag.getBoundingClientRect().width;\n\n const inpWidth = this.formFieldElement?.nativeElement.getBoundingClientRect().width - 20;\n this.firstTagMaxWidth =\n tags.length > 1\n ? inpWidth -\n (this.variant === (DropdownVariation.DROPDOWN as DropdownVariationType)\n ? Padding.DROPDOWN_SPACE_CONTAINER\n : Padding.AUTOCOMPLETE_SPACE_CONTAINER)\n : inpWidth;\n\n if (!this.isOverLapping && width > inputWidth && index > 0) {\n this.isOverLapping = true;\n this.overlapIndex = index;\n }\n });\n this.isOverlapChecking = false;\n if (init) {\n if (this.type === (this.autocompleteType.SINGLE as AutocompleteType)) {\n this.inputValue = AutocompleteUtils.transformDisplayValue(this.value[0], this.textField);\n } else if (this.value?.length) {\n this.inputValue = ' ';\n }\n }\n const tagContainerWidth = this.tagContainer.nativeElement.getBoundingClientRect().width;\n this.tagContainer.nativeElement.style.maxWidth = tagContainerWidth / 100 ? '100%' : `${tagContainerWidth}px`;\n this.cdr.markForCheck();\n }\n this.inputOpacity = 1;\n }, delay);\n }\n\n private onUpdate(): void {\n this.inputValueSearch$.next('');\n this.userInput$.next('');\n if (!this.valuePrimitive) {\n this.onChange(this.value);\n } else {\n if (this.type === (Autocomplete.SINGLE as AutocompleteType)) {\n this.onChange(this.value[this.valueField]);\n } else {\n this.onChange(this.value.map((v: any) => v[this.valueField]));\n }\n }\n this.updateControlMaxLengthValidity();\n this.selectionChange.emit(this.value);\n }\n\n private updateControlMaxLengthValidity(): void {\n const control = this.ngControl?.control;\n if (!control) {\n return;\n }\n\n if (this.type !== (Autocomplete.SINGLE as AutocompleteType)) {\n const existingErrors = control.errors ?? {};\n\n if (this.value.length > this.maxItemSelected) {\n control.setErrors({\n ...existingErrors,\n maxItemSelected: {\n expected: this.maxItemSelected,\n actual: this.value.length,\n },\n });\n control.markAsTouched();\n } else {\n if (existingErrors['maxItemSelected']) {\n delete existingErrors['maxItemSelected'];\n control.setErrors(Object.keys(existingErrors).length ? existingErrors : null);\n }\n }\n }\n }\n\n private initValue(): void {\n if (\n this.type === (this.autocompleteType.SINGLE as AutocompleteType) &&\n this.variant !== (DropdownVariation.DROPDOWN as DropdownVariationType)\n ) {\n if (AutocompleteUtils.isArray(this.value)) {\n this.inputValue = AutocompleteUtils.transformDisplayValue(this.value[0], this.textField);\n } else {\n this.inputValue = this.value ? AutocompleteUtils.transformDisplayValue(this.value, this.textField) : '';\n }\n } else if (this.variant === (DropdownVariation.DROPDOWN as DropdownVariationType)) {\n this.inputValue =\n (AutocompleteUtils.isArray(this.value) && !this.value?.length) || !this.value\n ? ''\n : this.type === (Autocomplete.SINGLE as AutocompleteType)\n ? AutocompleteUtils.transformDisplayValue(\n AutocompleteUtils.isArray(this.value) ? this.value[0] : this.value,\n this.textField\n )\n : ' ';\n } else {\n this.inputValue = this.value?.length ? ' ' : '';\n }\n if (this.type === (this.autocompleteType.MULTI as AutocompleteType)) {\n this.checkOverlap();\n }\n }\n\n private addNewValue(newValue: any): void {\n if (this.type !== (this.autocompleteType.SINGLE as AutocompleteType) && !this.value) {\n this.value = [];\n }\n\n const foundDuplicate = this.compareWith\n ? this.value.find((v: any) => this.compareWith(v, newValue))\n : AutocompleteUtils.findDuplicate(this.value, newValue, this.textField);\n\n if (this.type !== (this.autocompleteType.SINGLE as AutocompleteType)) {\n this.value = foundDuplicate\n ? this.value.filter((v: any) =>\n this.compareWith ? !this.compareWith(v, foundDuplicate) : v !== foundDuplicate\n )\n : [...this.value, newValue];\n } else {\n this.value = newValue;\n }\n }\n\n protected get isDropdown(): boolean {\n return this.variant === (DropdownVariation.DROPDOWN as DropdownVariationType);\n }\n\n protected onChevronClick(autocomplete: MatAutocomplete): void {\n if (autocomplete.isOpen) {\n setTimeout(() => {\n this.autocomplete.closePanel();\n }, 0);\n }\n }\n\n protected get inputWidth(): number {\n return (\n this.formFieldElement?.nativeElement.getBoundingClientRect().width -\n (this.isDropdown ? Padding.DROPDOWN_CONTAINER : Padding.AUTOCOMPLETE_CONTAINER)\n );\n }\n\n protected trackByFn = (index: number, value: string) => value;\n\n /**\n * Adding company color variable to the body to style overlay container that's out of the component scope.\n */\n private setCompanyColorVariable(): void {\n document.body.style.setProperty('--ui-autocomplete-option-color', `${this.companyColor}`);\n }\n\n private subscriberDisplayChange(): void {\n const autocompleteHostElement = this.el.nativeElement;\n\n this.observer = new MutationObserver(mutations => {\n mutations.forEach(mutation => {\n if (mutation.attributeName === 'style') {\n const displayStyle = getComputedStyle(autocompleteHostElement).display;\n if (displayStyle !== 'none') {\n this.checkOverlap();\n }\n }\n });\n });\n\n this.observer.observe(autocompleteHostElement, {\n attributes: true,\n attributeFilter: ['style'],\n });\n }\n\n protected get hasObjectValue(): boolean {\n return this.value ? !!Object.keys(this.value).length : false;\n }\n\n onKeydown($event: KeyboardEvent) {\n /* eslint-disable no-underscore-dangle -- MatAutocomplete internals (_keyManager/_setScrollTop) drive keyboard nav */\n const optionHeight = 48;\n\n if ($event.key === (IKeyboardEvent.HOME as string)) {\n this.matAutocomplete._keyManager.setFirstItemActive();\n } else if ($event.key === (IKeyboardEvent.END as string)) {\n this.matAutocomplete._keyManager.setLastItemActive();\n } else if ($event.key === (IKeyboardEvent.PAGE_DOWN as string)) {\n this.matAutocomplete._keyManager.setNextItemActive();\n this.matAutocomplete._keyManager.setNextItemActive();\n this.matAutocomplete._keyManager.setNextItemActive();\n } else if ($event.key === (IKeyboardEvent.PAGE_UP as string)) {\n this.matAutocomplete._keyManager.setPreviousItemActive();\n this.matAutocomplete._keyManager.setPreviousItemActive();\n this.matAutocomplete._keyManager.setPreviousItemActive();\n }\n\n this.matAutocomplete._setScrollTop((this.matAutocomplete._keyManager.activeItemIndex ?? 0) * optionHeight);\n /* eslint-enable no-underscore-dangle */\n }\n\n protected getVirtualScrollHeight(itemCount: number): number {\n const itemHeight = 48;\n const maxHeight = 200;\n const minHeight = 48;\n\n const calculatedHeight = itemCount * itemHeight;\n\n return Math.min(Math.max(calculatedHeight, minHeight), maxHeight);\n }\n}\n","<ng-container>\n <div class=\"autocomplete-wrapper\" [ngClass]=\"{ 'full-width': fullWidth, disabled: disabled }\">\n <mat-form-field\n [color]=\"\n safeErrors.length ||\n (ngControl?.errors && ngControl?.touched) ||\n (AutocompleteUtils.isArray(value) && value.length) > maxItemSelected ||\n ((AutocompleteUtils.isArray(value) && value.length) >= maxItemSelected && inputValue && inputValue !== ' ')\n ? 'warn'\n : 'accent'\n \"\n [appearance]=\"'outline'\"\n [ngClass]=\"{\n 'large-size': type === autocompleteType.LARGE,\n 'hide-bottom-content': !showBottomContent,\n 'keyboard-focused': keyboardFocused(),\n 'has-label': !!label,\n }\"\n >\n @if (label) {\n <mat-label\n >{{ label }}\n @if (required) {\n <span>*</span>\n }\n </mat-label>\n }\n <div #formField class=\"input-container\">\n @if (textField ? value?.[textField] : value === inputValue) {\n <span style=\"position: absolute; left: -9999px\" aria-live=\"polite\">{{\n ('SELECTED' | uiTranslate | async) + ' ' + inputValue\n }}</span>\n }\n\n <input\n [attr.data-testid]=\"testId ?? 'autocomplete-input'\"\n #trigger=\"matAutocompleteTrigger\"\n #matInput\n [attr.maxlength]=\"maxLength !== null && maxLength !== undefined ? maxLength : null\"\n [uiPreventInput]=\"!allowUserInput\"\n [disabled]=\"disabled\"\n [ngClass]=\"{ 'unset-margin': value && type === autocompleteType.LARGE, 'no-caret': !allowUserInput }\"\n (blur)=\"refillInput()\"\n (focusin)=\"onFocus()\"\n [attr.aria-label]=\"\n (translationContext + 'SELECTED' | uiTranslate | async) + ' ' + (value | transformItem: textField : true)\n \"\n [style.opacity]=\"type === autocompleteType.MULTI ? inputOpacity : 1\"\n matInput\n [placeholder]=\"value && value.length ? '' : placeholder\"\n [type]=\"'text'\"\n [matAutocomplete]=\"autocomplete\"\n (input)=\"onInputChange($event)\"\n [(ngModel)]=\"inputValue\"\n />\n @if (\n (type === autocompleteType.LARGE && value) ||\n (!(inputValue && isInputFocus) && value && type !== autocompleteType.SINGLE)\n ) {\n <div class=\"selected-items\" #tagContainer>\n @for (valueItem of value; track valueItem; let i = $index) {\n <ui-tag\n class=\"value-tag\"\n [id]=\"'ui-tag-' + i\"\n [label]=\"valueItem | transformItem: textField\"\n [allowClose]=\"true\"\n [isDisabled]=\"disabled\"\n [applicationTheme]=\"applicationTheme\"\n [style.opacity]=\"type === autocompleteType.MULTI ? inputOpacity : 1\"\n [style.display]=\"\n (isOverLapping && i > 0 && i >= overlapIndex) || (size === 'small' && value.length > 1)\n ? 'none'\n : 'block'\n \"\n [ngStyle]=\"{\n '--tag-max-width': type === autocompleteType.LARGE ? 'fit-content' : firstTagMaxWidth + 'px',\n }\"\n [ngClass]=\"{\n 'overlap-tag':\n isOverlapChecking && overlapIndex && i >= overlapIndex && type === autocompleteType.MULTI,\n }\"\n (close)=\"onOptionRemoved(valueItem)\"\n ></ui-tag>\n }\n @if (size === 'small') {\n @if (value.length > 1) {\n <div class=\"selected-count\">\n {{\n translationContext + 'SELECTED_AMOUNT'\n | uiTranslate: { numberSelected: (value | slice: overlapIndex).length }\n | async\n }}\n </div>\n }\n } @else {\n @if (value.length > 1 && isOverLapping) {\n <div class=\"overlap-count\">\n <ui-tag\n [applicationTheme]=\"applicationTheme\"\n [isDisabled]=\"disabled\"\n [label]=\"'+' + (value.length - overlapIndex)\"\n ></ui-tag>\n </div>\n }\n }\n </div>\n }\n </div>\n\n @if (\n (clearable && type === autocompleteType.SINGLE && (value?.length || hasObjectValue)) ||\n (type !== autocompleteType.SINGLE &&\n value &&\n value.length > 1 &&\n ((AutocompleteUtils.isPrimitive(value) && value.length) ||\n (!AutocompleteUtils.isPrimitive(value) &&\n ((AutocompleteUtils.isArray(value) && value.length) ||\n (!AutocompleteUtils.isArray(value) && !value.length)))))\n ) {\n <ui-icon\n class=\"remove-selected\"\n [tabIndex]=\"disabled ? -1 : 0\"\n (keydown.enter)=\"onClear(); $event.preventDefault(); $event.stopPropagation()\"\n (keydown.space)=\"onClear(); $event.preventDefault(); $event.stopPropagation()\"\n [ngClass]=\"{ 'large-input-icon': type === autocompleteType.LARGE }\"\n (click)=\"onClear(); $event.preventDefault(); $event.stopPropagation()\"\n [size]=\"'24'\"\n [color]=\"applicationTheme === 'classic' ? 'inherit' : 'rebrand-black'\"\n [attr.aria-label]=\"'COMMON.CLEAR' | uiTranslate | async\"\n [name]=\"applicationTheme === 'classic' ? 'Close' : 'Close-in-line'\"\n ></ui-icon>\n }\n\n @if (isDropdown) {\n <ui-icon\n class=\"arrow-state\"\n [ngClass]=\"{ opened: autocomplete.isOpen, 'large-input-icon': type === autocompleteType.LARGE }\"\n [size]=\"'24'\"\n [name]=\"applicationTheme !== 'classic' ? 'Arrow-chevron-down-in-line' : 'Arrow_down'\"\n (click)=\"onChevronClick(autocomplete)\"\n ></ui-icon>\n }\n\n <mat-autocomplete\n #autocomplete\n [class]=\"applicationTheme + ' ' + dropdownPanelClass\"\n (optionSelected)=\"onOptionSelected($event)\"\n [disableRipple]=\"applicationTheme !== 'classic'\"\n [hideSingleSelectionIndicator]=\"false\"\n (opened)=\"gotoUp()\"\n >\n @if (type !== autocompleteType.MULTI || value?.length < maxItemSelected) {\n @if ((searchResult$ | async) === false) {\n @if (!isDropdown) {\n @if (suggestionsList.length) {\n <mat-optgroup [label]=\"(translationContext + 'SUGGESTED' | uiTranslate | async)! | uppercase\">\n @for (suggested of suggestionsList; track suggested) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': suggested | includes: value : valueField }\"\n [value]=\"suggested\"\n >\n <span [selectText]=\"userInput$ | async\">{{ suggested | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n </mat-optgroup>\n }\n @if (value?.length && type !== autocompleteType.SINGLE) {\n <mat-optgroup [label]=\"(translationContext + 'SELECTED' | uiTranslate | async)! | uppercase\">\n @for (item of value; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span>{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n </mat-optgroup>\n }\n @if (isGrouped) {\n @for (group of itemsList; track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n @for (item of group.items; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n </mat-optgroup>\n } @else {\n @for (item of group.items; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n }\n }\n }\n @if (value?.length && type === autocompleteType.SINGLE) {\n <mat-optgroup [label]=\"(translationContext + 'SELECTED' | uiTranslate | async)! | uppercase\">\n <mat-option (mousedown)=\"$event.preventDefault()\" [class]=\"'selected-option'\" [value]=\"value\">\n <span [selectText]=\"userInput$ | async\">{{ value | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n </mat-optgroup>\n }\n } @else {\n @if (virtualScroll || infiniteScroll) {\n <cdk-virtual-scroll-viewport\n [itemSize]=\"48\"\n [style.height.px]=\"getVirtualScrollHeight(itemsList.length)\"\n class=\"virtual-scroll\"\n >\n @if (!isGrouped) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n *cdkVirtualFor=\"let item of itemsList\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n @if (infiniteScroll && hasMoreOptionsForInfiniteScroll) {\n <mat-option class=\"loading-option\" [style.pointer-events]=\"'none'\">\n <div class=\"loading-container\">\n <ui-spinner size=\"small\" [isLoader]=\"false\"></ui-spinner>\n </div>\n </mat-option>\n }\n } @else {\n @for (group of itemsList; track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n *cdkVirtualFor=\"let item of group.items\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n </mat-optgroup>\n } @else {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n *cdkVirtualFor=\"let item of group.items\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n }\n }\n </cdk-virtual-scroll-viewport>\n } @else {\n @if (!isGrouped) {\n @for (item of itemsList; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n } @else {\n @for (group of itemsList; track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n @for (item of group.items; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n </mat-optgroup>\n } @else {\n @for (item of group.items; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n }\n }\n }\n }\n }\n }\n\n @if (filteredSuggestionList$ | async; as filteredSuggestionList) {\n @if (filteredItemsList$ | async; as filteredItemsList) {\n @if (virtualScroll || infiniteScroll) {\n <cdk-virtual-scroll-viewport\n [itemSize]=\"48\"\n [style.height.px]=\"getVirtualScrollHeight(filteredItemsList.length)\"\n class=\"virtual-scroll\"\n >\n @if (isGrouped && filteredItemsList.length) {\n @for (group of filteredItemsList; track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n *cdkVirtualFor=\"let item of group.filteredItems\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n </mat-optgroup>\n } @else {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n *cdkVirtualFor=\"let item of group.filteredItems\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n }\n }\n @if (filteredSuggestionList.length) {\n <mat-optgroup [label]=\"(translationContext + 'SUGGESTED' | uiTranslate | async)! | uppercase\">\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n *cdkVirtualFor=\"let item of filteredSuggestionList\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n </mat-optgroup>\n }\n @if (!filteredSuggestionList.length && !isGrouped) {\n @for (item of filteredItemsList; let idx = $index; track item[valueField] || idx) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n } @else {\n @if (filteredItemsList.length && !isGrouped) {\n <mat-optgroup [label]=\"(translationContext + 'ALL_ITEMS' | uiTranslate | async)! | uppercase\">\n @for (item of filteredItemsList; let idx = $index; track item[valueField] || idx) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n </mat-optgroup>\n }\n }\n @if (isDynamicFilteringEnabled && dynamicFilterLoading) {\n <mat-option class=\"loading-option\" [style.pointer-events]=\"'none'\">\n <div class=\"loading-container\">\n <ui-spinner size=\"small\" [isLoader]=\"false\"></ui-spinner>\n </div>\n </mat-option>\n } @else if (inputValue) {\n @if (allowAdd && !isAlreadyAdded) {\n <mat-option (mousedown)=\"$event.preventDefault()\" [value]=\"inputValue\">\n <span>{{ 'COMMON.ADD' | uiTranslate | async }}</span>\n <span class=\"add-suggestion\">\"{{ inputValue }}\"</span>\n </mat-option>\n } @else if (!filteredItemsList.length && !filteredSuggestionList.length) {\n <mat-option [style.pointer-events]=\"'none'\">\n <span>{{ translationContext + 'NO_RESULTS_FOUND' | uiTranslate | async }}</span>\n </mat-option>\n }\n }\n </cdk-virtual-scroll-viewport>\n } @else {\n @if (isGrouped && filteredItemsList.length) {\n @for (group of filteredItemsList; track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n @for (item of group.filteredItems; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n </mat-optgroup>\n } @else {\n @for (item of group.filteredItems; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n }\n }\n }\n @if (isGrouped && filteredItemsList.length) {\n @for (group of filteredItemsList; track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n @for (item of group.filteredItems; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n </mat-optgroup>\n } @else {\n @for (item of group.filteredItems; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n }\n }\n }\n @if (filteredSuggestionList.length) {\n <mat-optgroup [label]=\"(translationContext + 'SUGGESTED' | uiTranslate | async)! | uppercase\">\n @for (item of filteredSuggestionList; track item) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n </mat-optgroup>\n }\n @if (!filteredSuggestionList.length && !isGrouped) {\n @for (item of filteredItemsList; let idx = $index; track item[valueField] || idx) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n } @else {\n @if (filteredItemsList.length && !isGrouped) {\n <mat-optgroup [label]=\"(translationContext + 'ALL_ITEMS' | uiTranslate | async)! | uppercase\">\n @for (item of filteredItemsList; let idx = $index; track item[valueField] || idx) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: value : valueField }\"\n [value]=\"item\"\n >\n <span [selectText]=\"userInput$ | async\">{{ item | transformItem: textField }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n </mat-optgroup>\n }\n }\n @if (isDynamicFilteringEnabled && dynamicFilterLoading) {\n <mat-option class=\"loading-option\" [style.pointer-events]=\"'none'\">\n <div class=\"loading-container\">\n <ui-spinner size=\"small\" [isLoader]=\"false\"></ui-spinner>\n </div>\n </mat-option>\n } @else if (inputValue) {\n @if (allowAdd && !isAlreadyAdded) {\n <mat-option (mousedown)=\"$event.preventDefault()\" [value]=\"inputValue\">\n <span>{{ 'COMMON.ADD' | uiTranslate | async }}</span>\n <span class=\"add-suggestion\">\"{{ inputValue }}\"</span>\n </mat-option>\n } @else if (!filteredItemsList.length && !filteredSuggestionList.length) {\n <mat-option [style.pointer-events]=\"'none'\">\n <span>{{ translationContext + 'NO_RESULTS_FOUND' | uiTranslate | async }}</span>\n </mat-option>\n }\n }\n }\n }\n }\n }\n </mat-autocomplete>\n @if (\n safeErrors.length ||\n ($safeNavigationMigration(ngControl?.errors) | hasValidationError) ||\n (AutocompleteUtils.isArray(value) && value.length) > maxItemSelected ||\n ((AutocompleteUtils.isArray(value) && value.length) >= maxItemSelected && inputValue && inputValue !== ' ')\n ) {\n <mat-hint class=\"error\">\n @if (\n (AutocompleteUtils.isArray(value) && value.length) > maxItemSelected ||\n ((AutocompleteUtils.isArray(value) && value.length) >= maxItemSelected && inputValue && inputValue !== ' ')\n ) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{\n translationContext + 'MAX_SELECTED_ERROR' | uiTranslate: { max: maxItemSelected } | async\n }}</span>\n </div>\n }\n @if (safeErrors.length) {\n @for (error of safeErrors; track trackByFn($index, error)) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span [innerHTML]=\"error\"></span>\n </div>\n }\n }\n @if (ngControl && !hideBuiltInErrors) {\n <ui-validation-error\n [ngControl]=\"ngControl\"\n [label]=\"hideLabelInErrors ? null : label\"\n ></ui-validation-error>\n }\n </mat-hint>\n }\n </mat-form-field>\n </div>\n</ng-container>\n","import { CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { UiTranslatePipe, HasValidationErrorPipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { SpinnerComponentModule } from '@testgorilla/tgo-ui/components/spinner';\nimport { TagComponentModule } from '@testgorilla/tgo-ui/components/tag';\nimport { ValidationErrorModule } from '@testgorilla/tgo-ui/components/validation-error';\n\nimport { AutocompleteComponent } from './autocomplete.component';\nimport { IncludesPipe } from './includes.pipe';\nimport { PreventInputDirective } from './prevent-input.directive';\nimport { SelectTextDirective } from './select-text.directive';\nimport { TransformItemPipe } from './transform-Item.pipe';\n\n@NgModule({\n declarations: [AutocompleteComponent, TransformItemPipe, IncludesPipe, SelectTextDirective],\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatAutocompleteModule,\n MatInputModule,\n FormsModule,\n TagComponentModule,\n MatChipsModule,\n IconComponentModule,\n UiTranslatePipe,\n ValidationErrorModule,\n HasValidationErrorPipe,\n CdkVirtualForOf,\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n PreventInputDirective,\n SpinnerComponentModule,\n ],\n exports: [AutocompleteComponent],\n providers: [TransformItemPipe, IncludesPipe, SelectTextDirective],\n})\nexport class AutocompleteComponentModule {}\n"],"mappings":"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"}