@onemrvapublic/design-system 18.2.25 → 18.3.0-develop.2

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 (439) hide show
  1. package/_index.scss +0 -1
  2. package/_utils.scss +3 -3
  3. package/fesm2022/onemrvapublic-design-system-core.mjs +7 -7
  4. package/fesm2022/onemrvapublic-design-system-core.mjs.map +1 -1
  5. package/fesm2022/onemrvapublic-design-system-flag-icon.mjs +3 -3
  6. package/fesm2022/onemrvapublic-design-system-flag-icon.mjs.map +1 -1
  7. package/fesm2022/onemrvapublic-design-system-layout.mjs +188 -97
  8. package/fesm2022/onemrvapublic-design-system-layout.mjs.map +1 -1
  9. package/fesm2022/onemrvapublic-design-system-mat-avatar.mjs +11 -11
  10. package/fesm2022/onemrvapublic-design-system-mat-avatar.mjs.map +1 -1
  11. package/fesm2022/onemrvapublic-design-system-mat-breadcrumb.mjs +27 -18
  12. package/fesm2022/onemrvapublic-design-system-mat-breadcrumb.mjs.map +1 -1
  13. package/fesm2022/onemrvapublic-design-system-mat-carousel.mjs +6 -6
  14. package/fesm2022/onemrvapublic-design-system-mat-carousel.mjs.map +1 -1
  15. package/fesm2022/onemrvapublic-design-system-mat-copy-to-clipboard.mjs +3 -3
  16. package/fesm2022/onemrvapublic-design-system-mat-copy-to-clipboard.mjs.map +1 -1
  17. package/fesm2022/onemrvapublic-design-system-mat-datepicker-header.mjs +3 -3
  18. package/fesm2022/onemrvapublic-design-system-mat-datepicker-header.mjs.map +1 -1
  19. package/fesm2022/onemrvapublic-design-system-mat-empty-row.mjs +3 -3
  20. package/fesm2022/onemrvapublic-design-system-mat-empty-row.mjs.map +1 -1
  21. package/fesm2022/onemrvapublic-design-system-mat-file-upload.mjs +107 -86
  22. package/fesm2022/onemrvapublic-design-system-mat-file-upload.mjs.map +1 -1
  23. package/fesm2022/onemrvapublic-design-system-mat-input-birthplace.mjs +6 -6
  24. package/fesm2022/onemrvapublic-design-system-mat-input-birthplace.mjs.map +1 -1
  25. package/fesm2022/onemrvapublic-design-system-mat-input-country.mjs +3 -3
  26. package/fesm2022/onemrvapublic-design-system-mat-input-country.mjs.map +1 -1
  27. package/fesm2022/onemrvapublic-design-system-mat-input-enterprise-number.mjs +3 -3
  28. package/fesm2022/onemrvapublic-design-system-mat-input-enterprise-number.mjs.map +1 -1
  29. package/fesm2022/onemrvapublic-design-system-mat-input-iban.mjs +26 -14
  30. package/fesm2022/onemrvapublic-design-system-mat-input-iban.mjs.map +1 -1
  31. package/fesm2022/onemrvapublic-design-system-mat-input-phone.mjs +6 -6
  32. package/fesm2022/onemrvapublic-design-system-mat-input-phone.mjs.map +1 -1
  33. package/fesm2022/onemrvapublic-design-system-mat-message-box.mjs +10 -13
  34. package/fesm2022/onemrvapublic-design-system-mat-message-box.mjs.map +1 -1
  35. package/fesm2022/onemrvapublic-design-system-mat-multi-select.mjs +31 -51
  36. package/fesm2022/onemrvapublic-design-system-mat-multi-select.mjs.map +1 -1
  37. package/fesm2022/onemrvapublic-design-system-mat-notification.mjs +3 -3
  38. package/fesm2022/onemrvapublic-design-system-mat-notification.mjs.map +1 -1
  39. package/fesm2022/onemrvapublic-design-system-mat-paginator.mjs +24 -35
  40. package/fesm2022/onemrvapublic-design-system-mat-paginator.mjs.map +1 -1
  41. package/fesm2022/onemrvapublic-design-system-mat-panel.mjs +28 -29
  42. package/fesm2022/onemrvapublic-design-system-mat-panel.mjs.map +1 -1
  43. package/fesm2022/onemrvapublic-design-system-mat-pop-over.mjs +20 -20
  44. package/fesm2022/onemrvapublic-design-system-mat-pop-over.mjs.map +1 -1
  45. package/fesm2022/onemrvapublic-design-system-mat-progress-bar.mjs +3 -3
  46. package/fesm2022/onemrvapublic-design-system-mat-progress-bar.mjs.map +1 -1
  47. package/fesm2022/onemrvapublic-design-system-mat-select-search.mjs +48 -149
  48. package/fesm2022/onemrvapublic-design-system-mat-select-search.mjs.map +1 -1
  49. package/fesm2022/onemrvapublic-design-system-mat-selectable-box.mjs +21 -53
  50. package/fesm2022/onemrvapublic-design-system-mat-selectable-box.mjs.map +1 -1
  51. package/fesm2022/onemrvapublic-design-system-mat-side-menu.mjs +14 -17
  52. package/fesm2022/onemrvapublic-design-system-mat-side-menu.mjs.map +1 -1
  53. package/fesm2022/onemrvapublic-design-system-mat-skeleton.mjs +11 -12
  54. package/fesm2022/onemrvapublic-design-system-mat-skeleton.mjs.map +1 -1
  55. package/fesm2022/onemrvapublic-design-system-mat-spinner.mjs +12 -13
  56. package/fesm2022/onemrvapublic-design-system-mat-spinner.mjs.map +1 -1
  57. package/fesm2022/onemrvapublic-design-system-mat-stepper.mjs +16 -41
  58. package/fesm2022/onemrvapublic-design-system-mat-stepper.mjs.map +1 -1
  59. package/fesm2022/onemrvapublic-design-system-mat-sticker.mjs +11 -11
  60. package/fesm2022/onemrvapublic-design-system-mat-sticker.mjs.map +1 -1
  61. package/fesm2022/onemrvapublic-design-system-mat-table-of-content.mjs +9 -9
  62. package/fesm2022/onemrvapublic-design-system-mat-table-of-content.mjs.map +1 -1
  63. package/fesm2022/onemrvapublic-design-system-mat-task-list.mjs +26 -41
  64. package/fesm2022/onemrvapublic-design-system-mat-task-list.mjs.map +1 -1
  65. package/fesm2022/onemrvapublic-design-system-mat-timepicker.mjs +51 -64
  66. package/fesm2022/onemrvapublic-design-system-mat-timepicker.mjs.map +1 -1
  67. package/fesm2022/onemrvapublic-design-system-mat-toast.mjs +12 -12
  68. package/fesm2022/onemrvapublic-design-system-mat-toast.mjs.map +1 -1
  69. package/fesm2022/onemrvapublic-design-system-mat-tooltip.mjs +18 -18
  70. package/fesm2022/onemrvapublic-design-system-mat-tooltip.mjs.map +1 -1
  71. package/fesm2022/onemrvapublic-design-system-page-error.mjs +6 -6
  72. package/fesm2022/onemrvapublic-design-system-page-error.mjs.map +1 -1
  73. package/fesm2022/onemrvapublic-design-system-page-not-found.mjs +32 -26
  74. package/fesm2022/onemrvapublic-design-system-page-not-found.mjs.map +1 -1
  75. package/fesm2022/onemrvapublic-design-system-shared.mjs +70 -62
  76. package/fesm2022/onemrvapublic-design-system-shared.mjs.map +1 -1
  77. package/layout/index.d.ts +5 -5
  78. package/layout/src/components/layout/_layout-mixin.component.scss +5 -5
  79. package/layout/src/components/layout/layout.component.d.ts +1 -1
  80. package/layout/src/components/layout/layout.component.scss +7 -0
  81. package/layout/src/components/layout-after-nav/layout-after-nav.component.d.ts +1 -1
  82. package/layout/src/components/layout-content/layout-content.component.d.ts +1 -1
  83. package/layout/src/components/layout-footer/layout-footer.component.d.ts +1 -1
  84. package/layout/src/components/layout-login-menu/layout-login-menu.component.d.ts +1 -1
  85. package/layout/src/components/layout-route/layout-route.component.d.ts +1 -1
  86. package/layout/src/components/layout-sidenav/layout-sidenav.component.d.ts +1 -1
  87. package/layout/src/components/layout-sidenav-title/layout-sidenav-title.component.d.ts +1 -1
  88. package/layout/src/components/layout-subroute/layout-subroute.component.d.ts +1 -1
  89. package/layout/src/components/layout-title/layout-title.component.d.ts +1 -1
  90. package/layout/src/decorators/coerce-boolean-input.decorator.d.ts +1 -0
  91. package/layout/src/decorators/index.d.ts +2 -0
  92. package/layout/src/decorators/observable-content.decorator.d.ts +1 -0
  93. package/layout/src/directives/drawer-host.directive.d.ts +1 -1
  94. package/layout/src/directives/index.d.ts +2 -0
  95. package/layout/src/{striphtml.pipe.d.ts → directives/striphtml.pipe.d.ts} +1 -1
  96. package/layout/src/enums/index.d.ts +1 -0
  97. package/layout/src/layout.module.d.ts +3 -3
  98. package/layout/src/models/index.d.ts +2 -0
  99. package/layout/src/services/index.d.ts +1 -0
  100. package/mat-avatar/src/onemrva-mat-avatar.component.d.ts +1 -1
  101. package/mat-avatar/src/onemrva-mat-avatar.module.d.ts +1 -3
  102. package/mat-breadcrumb/src/onemrva-mat-breadcrumb.component.d.ts +1 -1
  103. package/mat-breadcrumb/src/onemrva-mat-breadcrumb.module.d.ts +5 -5
  104. package/mat-datepicker-header/src/_onemrva-mat-datepicker-header.component.scss +1 -1
  105. package/mat-file-upload/index.d.ts +1 -0
  106. package/mat-file-upload/src/components/onemrva-mat-file-panel/onemrva-file-panel.component.d.ts +1 -1
  107. package/mat-file-upload/src/components/onemrva-mat-file-panel/onemrva-file-panel.component.scss +3 -3
  108. package/mat-file-upload/src/components/onemrva-mat-file-upload/onemrva-mat-file-upload.component.d.ts +1 -1
  109. package/mat-file-upload/src/components/onemrva-mat-file-upload/onemrva-mat-file-upload.component.scss +2 -1
  110. package/mat-file-upload/src/directives/dnd.directive.d.ts +1 -1
  111. package/mat-file-upload/src/onemrva-mat-file-upload.module.d.ts +1 -1
  112. package/mat-input-iban/src/onemrva-mat-input-iban.component.d.ts +5 -3
  113. package/mat-message-box/src/onemrva-mat-message-box.component.d.ts +1 -1
  114. package/mat-message-box/src/onemrva-mat-message-box.module.d.ts +1 -4
  115. package/mat-multi-select/src/onemrva-mat-multi-select.component.d.ts +1 -1
  116. package/mat-multi-select/src/onemrva-mat-multi-select.module.d.ts +1 -9
  117. package/mat-paginator/src/onemrva-mat-paginator.component.d.ts +1 -1
  118. package/mat-paginator/src/onemrva-mat-paginator.module.d.ts +1 -6
  119. package/mat-panel/src/onemrva-mat-panel-content.component.d.ts +1 -1
  120. package/mat-panel/src/onemrva-mat-panel-icon.component.d.ts +1 -1
  121. package/mat-panel/src/onemrva-mat-panel-title-action.component.d.ts +1 -1
  122. package/mat-panel/src/onemrva-mat-panel-title.component.d.ts +1 -1
  123. package/mat-panel/src/onemrva-mat-panel.component.d.ts +1 -1
  124. package/mat-panel/src/onemrva-mat-panel.module.d.ts +1 -2
  125. package/mat-pop-over/src/onemrva-mat-pop-over-content.component.d.ts +1 -1
  126. package/mat-pop-over/src/onemrva-mat-pop-over-trigger.component.d.ts +1 -1
  127. package/mat-pop-over/src/onemrva-mat-pop-over.component.d.ts +1 -1
  128. package/mat-pop-over/src/onemrva-mat-pop-over.module.d.ts +1 -3
  129. package/mat-select-search/src/mat-select-no-entries-found.directive.d.ts +1 -1
  130. package/mat-select-search/src/mat-select-search-clear.directive.d.ts +1 -1
  131. package/mat-select-search/src/mat-select-search.component.d.ts +1 -79
  132. package/mat-select-search/src/mat-select-search.module.d.ts +1 -12
  133. package/mat-selectable-box/src/onemrva-mat-selectable-box.component.d.ts +1 -1
  134. package/mat-selectable-box/src/onemrva-mat-selectable-box.module.d.ts +1 -11
  135. package/mat-side-menu/src/onemrva-mat-side-menu.component.d.ts +1 -1
  136. package/mat-side-menu/src/onemrva-mat-side-menu.module.d.ts +1 -5
  137. package/mat-skeleton/src/onemrva-mat-skeleton.component.d.ts +1 -1
  138. package/mat-skeleton/src/onemrva-mat-skeleton.module.d.ts +1 -2
  139. package/mat-spinner/src/onemrva-mat-spinner.component.d.ts +1 -1
  140. package/mat-spinner/src/onemrva-mat-spinner.module.d.ts +1 -1
  141. package/mat-stepper/src/onemrva-mat-stepper.component.d.ts +1 -1
  142. package/mat-stepper/src/onemrva-mat-stepper.module.d.ts +2 -7
  143. package/mat-stepper/src/onemrva-mat-stepper.scss +1 -1
  144. package/mat-sticker/src/onemrva-mat-sticker.component.d.ts +1 -1
  145. package/mat-sticker/src/onemrva-mat-sticker.module.d.ts +1 -2
  146. package/mat-task-list/src/onemrva-mat-task-content.component.d.ts +1 -1
  147. package/mat-task-list/src/onemrva-mat-task-list.component.d.ts +1 -1
  148. package/mat-task-list/src/onemrva-mat-task-list.module.d.ts +1 -5
  149. package/mat-task-list/src/onemrva-mat-task-title.component.d.ts +1 -1
  150. package/mat-task-list/src/onemrva-mat-task.component.d.ts +1 -1
  151. package/mat-timepicker/src/clock/clock.component.d.ts +1 -1
  152. package/mat-timepicker/src/onemrva-mat-timepicker.component.d.ts +1 -1
  153. package/mat-timepicker/src/onemrva-mat-timepicker.module.d.ts +1 -7
  154. package/mat-timepicker/src/timepicker-dialog/timepicker-dialog.component.d.ts +1 -1
  155. package/mat-timepicker/src/timepicker-toggle/timepicker-toggle.component.d.ts +2 -2
  156. package/mat-timepicker/src/timepicker.directive.d.ts +1 -1
  157. package/mat-toast/src/onemrva-mat-toast.component.d.ts +1 -1
  158. package/mat-toast/src/onemrva-mat-toast.module.d.ts +2 -3
  159. package/mat-tooltip/src/onemrva-mat-tooltip.component.d.ts +1 -1
  160. package/mat-tooltip/src/onemrva-mat-tooltip.directive.d.ts +1 -1
  161. package/mat-tooltip/src/onemrva-mat-tooltip.module.d.ts +1 -2
  162. package/package.json +1 -85
  163. package/page-not-found/src/page-not-found-action.component.d.ts +1 -1
  164. package/page-not-found/src/page-not-found-extra.component.d.ts +1 -1
  165. package/page-not-found/src/page-not-found-invader.component.d.ts +1 -1
  166. package/page-not-found/src/page-not-found-mixin.component.scss +1 -1
  167. package/page-not-found/src/page-not-found.component.d.ts +1 -1
  168. package/page-not-found/src/page-not-found.module.d.ts +1 -3
  169. package/shared/src/lib/directives/clipboard.directive.d.ts +1 -1
  170. package/shared/src/lib/directives/color.directive.d.ts +1 -1
  171. package/shared/src/lib/directives/digit-only.directive.d.ts +1 -1
  172. package/shared/src/lib/directives/iconRight.directive.d.ts +1 -1
  173. package/shared/src/lib/directives/if-width-is.directive.d.ts +1 -1
  174. package/shared/src/lib/directives/mask.directive.d.ts +1 -1
  175. package/shared/src/lib/directives/mat-row-clickable.directive.d.ts +1 -1
  176. package/shared/src/lib/shared.module.d.ts +1 -2
  177. package/esm2022/core/index.mjs +0 -4
  178. package/esm2022/core/onemrvapublic-design-system-core.mjs +0 -5
  179. package/esm2022/core/src/lib/core.module.mjs +0 -39
  180. package/esm2022/core/src/lib/services/index.mjs +0 -3
  181. package/esm2022/core/src/lib/services/onemrva-error-handler.service.mjs +0 -26
  182. package/esm2022/core/src/lib/services/onemrva-missing-translation.service.mjs +0 -6
  183. package/esm2022/flag-icon/index.mjs +0 -2
  184. package/esm2022/flag-icon/onemrvapublic-design-system-flag-icon.mjs +0 -5
  185. package/esm2022/flag-icon/src/flag-icon.component.mjs +0 -41
  186. package/esm2022/layout/index.mjs +0 -8
  187. package/esm2022/layout/onemrvapublic-design-system-layout.mjs +0 -5
  188. package/esm2022/layout/src/components/index.mjs +0 -36
  189. package/esm2022/layout/src/components/layout/layout.component.mjs +0 -177
  190. package/esm2022/layout/src/components/layout-after-nav/layout-after-nav.component.mjs +0 -25
  191. package/esm2022/layout/src/components/layout-content/layout-content.component.mjs +0 -25
  192. package/esm2022/layout/src/components/layout-drawer-actions/layout-drawer-actions.component.mjs +0 -16
  193. package/esm2022/layout/src/components/layout-drawer-content/layout-drawer-content.component.mjs +0 -16
  194. package/esm2022/layout/src/components/layout-drawer-title/layout-drawer-title.component.mjs +0 -20
  195. package/esm2022/layout/src/components/layout-footer/layout-footer.component.mjs +0 -17
  196. package/esm2022/layout/src/components/layout-login-menu/layout-login-menu.component.mjs +0 -25
  197. package/esm2022/layout/src/components/layout-route/layout-route.component.mjs +0 -65
  198. package/esm2022/layout/src/components/layout-sidenav/layout-sidenav.component.mjs +0 -83
  199. package/esm2022/layout/src/components/layout-sidenav-title/layout-sidenav-title.component.mjs +0 -17
  200. package/esm2022/layout/src/components/layout-subroute/layout-subroute.component.mjs +0 -55
  201. package/esm2022/layout/src/components/layout-title/layout-title.component.mjs +0 -25
  202. package/esm2022/layout/src/directives/drawer-host.directive.mjs +0 -41
  203. package/esm2022/layout/src/enums/environment.enum.mjs +0 -8
  204. package/esm2022/layout/src/layout.module.mjs +0 -95
  205. package/esm2022/layout/src/models/onem-language.model.mjs +0 -2
  206. package/esm2022/layout/src/models/onemrva-profile.model.mjs +0 -46
  207. package/esm2022/layout/src/services/drawer.service.mjs +0 -31
  208. package/esm2022/layout/src/striphtml.pipe.mjs +0 -16
  209. package/esm2022/mat-avatar/index.mjs +0 -3
  210. package/esm2022/mat-avatar/onemrvapublic-design-system-mat-avatar.mjs +0 -5
  211. package/esm2022/mat-avatar/src/onemrva-mat-avatar.component.mjs +0 -440
  212. package/esm2022/mat-avatar/src/onemrva-mat-avatar.module.mjs +0 -19
  213. package/esm2022/mat-badge/index.mjs +0 -6
  214. package/esm2022/mat-badge/onemrvapublic-design-system-mat-badge.mjs +0 -5
  215. package/esm2022/mat-badge/src/onemrva-mat-badge.component.mjs +0 -250
  216. package/esm2022/mat-badge/src/onemrva-mat-badge.module.mjs +0 -16
  217. package/esm2022/mat-breadcrumb/index.mjs +0 -7
  218. package/esm2022/mat-breadcrumb/onemrvapublic-design-system-mat-breadcrumb.mjs +0 -5
  219. package/esm2022/mat-breadcrumb/src/onemrva-mat-breadcrumb.component.mjs +0 -19
  220. package/esm2022/mat-breadcrumb/src/onemrva-mat-breadcrumb.model.mjs +0 -2
  221. package/esm2022/mat-breadcrumb/src/onemrva-mat-breadcrumb.module.mjs +0 -20
  222. package/esm2022/mat-breadcrumb/src/onemrva-mat-breadcrumb.service.mjs +0 -59
  223. package/esm2022/mat-carousel/index.mjs +0 -3
  224. package/esm2022/mat-carousel/onemrvapublic-design-system-mat-carousel.mjs +0 -5
  225. package/esm2022/mat-carousel/src/mat-carousel-item/onemrva-mat-carousel-item.component.mjs +0 -23
  226. package/esm2022/mat-carousel/src/onemrva-mat-carousel.component.mjs +0 -175
  227. package/esm2022/mat-copy-to-clipboard/index.mjs +0 -2
  228. package/esm2022/mat-copy-to-clipboard/onemrvapublic-design-system-mat-copy-to-clipboard.mjs +0 -5
  229. package/esm2022/mat-copy-to-clipboard/src/components/copy-to-clipboard.component.mjs +0 -85
  230. package/esm2022/mat-datepicker-header/index.mjs +0 -5
  231. package/esm2022/mat-datepicker-header/onemrvapublic-design-system-mat-datepicker-header.mjs +0 -5
  232. package/esm2022/mat-datepicker-header/src/onemrva-mat-datepicker-header.component.mjs +0 -203
  233. package/esm2022/mat-empty-row/index.mjs +0 -2
  234. package/esm2022/mat-empty-row/onemrvapublic-design-system-mat-empty-row.mjs +0 -5
  235. package/esm2022/mat-empty-row/src/onemrva-mat-empty-row.component.mjs +0 -35
  236. package/esm2022/mat-file-upload/index.mjs +0 -11
  237. package/esm2022/mat-file-upload/onemrvapublic-design-system-mat-file-upload.mjs +0 -5
  238. package/esm2022/mat-file-upload/src/components/index.mjs +0 -9
  239. package/esm2022/mat-file-upload/src/components/onemrva-mat-file-panel/onemrva-file-panel.component.mjs +0 -88
  240. package/esm2022/mat-file-upload/src/components/onemrva-mat-file-upload/onemrva-mat-file-upload.component.mjs +0 -195
  241. package/esm2022/mat-file-upload/src/directives/dnd.directive.mjs +0 -53
  242. package/esm2022/mat-file-upload/src/models/action-config.model.mjs +0 -2
  243. package/esm2022/mat-file-upload/src/models/progress-file.model.mjs +0 -49
  244. package/esm2022/mat-file-upload/src/onemrva-mat-file-upload-itf.store.mjs +0 -2
  245. package/esm2022/mat-file-upload/src/onemrva-mat-file-upload.module.mjs +0 -51
  246. package/esm2022/mat-file-upload/src/onemrva-mat-file-upload.service.mjs +0 -49
  247. package/esm2022/mat-file-upload/src/onemrva-mat-file-upload.store.mjs +0 -320
  248. package/esm2022/mat-input-birthplace/index.mjs +0 -5
  249. package/esm2022/mat-input-birthplace/onemrvapublic-design-system-mat-input-birthplace.mjs +0 -5
  250. package/esm2022/mat-input-birthplace/src/country-item.component.mjs +0 -31
  251. package/esm2022/mat-input-birthplace/src/onemrva-mat-input-birthplace.component.mjs +0 -120
  252. package/esm2022/mat-input-country/index.mjs +0 -5
  253. package/esm2022/mat-input-country/onemrvapublic-design-system-mat-input-country.mjs +0 -5
  254. package/esm2022/mat-input-country/src/onemrva-mat-input-country.component.mjs +0 -90
  255. package/esm2022/mat-input-enterprise-number/index.mjs +0 -5
  256. package/esm2022/mat-input-enterprise-number/onemrvapublic-design-system-mat-input-enterprise-number.mjs +0 -5
  257. package/esm2022/mat-input-enterprise-number/src/onemrva-mat-input-enterprise-number.component.mjs +0 -180
  258. package/esm2022/mat-input-iban/index.mjs +0 -5
  259. package/esm2022/mat-input-iban/onemrvapublic-design-system-mat-input-iban.mjs +0 -5
  260. package/esm2022/mat-input-iban/src/onemrva-mat-input-iban.component.mjs +0 -283
  261. package/esm2022/mat-input-phone/index.mjs +0 -6
  262. package/esm2022/mat-input-phone/onemrvapublic-design-system-mat-input-phone.mjs +0 -5
  263. package/esm2022/mat-input-phone/src/onemrva-mat-input-phone.component.mjs +0 -234
  264. package/esm2022/mat-input-phone/src/phone-number.directive.mjs +0 -51
  265. package/esm2022/mat-message-box/index.mjs +0 -3
  266. package/esm2022/mat-message-box/onemrvapublic-design-system-mat-message-box.mjs +0 -5
  267. package/esm2022/mat-message-box/src/onemrva-mat-message-box.component.mjs +0 -175
  268. package/esm2022/mat-message-box/src/onemrva-mat-message-box.module.mjs +0 -20
  269. package/esm2022/mat-multi-select/index.mjs +0 -3
  270. package/esm2022/mat-multi-select/onemrvapublic-design-system-mat-multi-select.mjs +0 -5
  271. package/esm2022/mat-multi-select/src/onemrva-mat-multi-select.component.mjs +0 -200
  272. package/esm2022/mat-multi-select/src/onemrva-mat-multi-select.module.mjs +0 -51
  273. package/esm2022/mat-notification/index.mjs +0 -2
  274. package/esm2022/mat-notification/onemrvapublic-design-system-mat-notification.mjs +0 -5
  275. package/esm2022/mat-notification/src/onemrva-mat-notification.component.mjs +0 -165
  276. package/esm2022/mat-paginator/index.mjs +0 -6
  277. package/esm2022/mat-paginator/onemrvapublic-design-system-mat-paginator.mjs +0 -5
  278. package/esm2022/mat-paginator/src/onemrva-mat-paginator.component.mjs +0 -217
  279. package/esm2022/mat-paginator/src/onemrva-mat-paginator.module.mjs +0 -36
  280. package/esm2022/mat-panel/index.mjs +0 -7
  281. package/esm2022/mat-panel/onemrvapublic-design-system-mat-panel.mjs +0 -5
  282. package/esm2022/mat-panel/src/onemrva-mat-panel-content.component.mjs +0 -17
  283. package/esm2022/mat-panel/src/onemrva-mat-panel-icon.component.mjs +0 -17
  284. package/esm2022/mat-panel/src/onemrva-mat-panel-title-action.component.mjs +0 -17
  285. package/esm2022/mat-panel/src/onemrva-mat-panel-title.component.mjs +0 -27
  286. package/esm2022/mat-panel/src/onemrva-mat-panel.component.mjs +0 -132
  287. package/esm2022/mat-panel/src/onemrva-mat-panel.module.mjs +0 -42
  288. package/esm2022/mat-pop-over/index.mjs +0 -5
  289. package/esm2022/mat-pop-over/onemrvapublic-design-system-mat-pop-over.mjs +0 -5
  290. package/esm2022/mat-pop-over/src/onemrva-mat-pop-over-content.component.mjs +0 -23
  291. package/esm2022/mat-pop-over/src/onemrva-mat-pop-over-trigger.component.mjs +0 -23
  292. package/esm2022/mat-pop-over/src/onemrva-mat-pop-over.component.mjs +0 -46
  293. package/esm2022/mat-pop-over/src/onemrva-mat-pop-over.module.mjs +0 -30
  294. package/esm2022/mat-progress-bar/index.mjs +0 -2
  295. package/esm2022/mat-progress-bar/onemrvapublic-design-system-mat-progress-bar.mjs +0 -5
  296. package/esm2022/mat-progress-bar/src/onemrva-mat-progress-bar.component.mjs +0 -29
  297. package/esm2022/mat-select-search/index.mjs +0 -4
  298. package/esm2022/mat-select-search/onemrvapublic-design-system-mat-select-search.mjs +0 -5
  299. package/esm2022/mat-select-search/src/default-options.mjs +0 -35
  300. package/esm2022/mat-select-search/src/mat-select-no-entries-found.directive.mjs +0 -22
  301. package/esm2022/mat-select-search/src/mat-select-search-clear.directive.mjs +0 -20
  302. package/esm2022/mat-select-search/src/mat-select-search.component.mjs +0 -589
  303. package/esm2022/mat-select-search/src/mat-select-search.module.mjs +0 -79
  304. package/esm2022/mat-selectable-box/index.mjs +0 -6
  305. package/esm2022/mat-selectable-box/onemrvapublic-design-system-mat-selectable-box.mjs +0 -5
  306. package/esm2022/mat-selectable-box/src/onemrva-mat-selectable-box.component.mjs +0 -56
  307. package/esm2022/mat-selectable-box/src/onemrva-mat-selectable-box.module.mjs +0 -56
  308. package/esm2022/mat-side-menu/index.mjs +0 -6
  309. package/esm2022/mat-side-menu/onemrvapublic-design-system-mat-side-menu.mjs +0 -5
  310. package/esm2022/mat-side-menu/src/onemrva-mat-side-menu.component.mjs +0 -48
  311. package/esm2022/mat-side-menu/src/onemrva-mat-side-menu.module.mjs +0 -21
  312. package/esm2022/mat-skeleton/index.mjs +0 -4
  313. package/esm2022/mat-skeleton/onemrvapublic-design-system-mat-skeleton.mjs +0 -5
  314. package/esm2022/mat-skeleton/src/onemrva-mat-skeleton-enums.mjs +0 -20
  315. package/esm2022/mat-skeleton/src/onemrva-mat-skeleton.component.mjs +0 -202
  316. package/esm2022/mat-skeleton/src/onemrva-mat-skeleton.module.mjs +0 -18
  317. package/esm2022/mat-spinner/index.mjs +0 -7
  318. package/esm2022/mat-spinner/onemrvapublic-design-system-mat-spinner.mjs +0 -5
  319. package/esm2022/mat-spinner/src/onemrva-mat-loading.directive.mjs +0 -33
  320. package/esm2022/mat-spinner/src/onemrva-mat-spinner.component.mjs +0 -73
  321. package/esm2022/mat-spinner/src/onemrva-mat-spinner.module.mjs +0 -18
  322. package/esm2022/mat-stepper/index.mjs +0 -6
  323. package/esm2022/mat-stepper/onemrvapublic-design-system-mat-stepper.mjs +0 -5
  324. package/esm2022/mat-stepper/src/onemrva-mat-stepper.component.mjs +0 -74
  325. package/esm2022/mat-stepper/src/onemrva-mat-stepper.module.mjs +0 -44
  326. package/esm2022/mat-stepper/src/onemrva-stepper-animations.mjs +0 -28
  327. package/esm2022/mat-sticker/index.mjs +0 -6
  328. package/esm2022/mat-sticker/onemrvapublic-design-system-mat-sticker.mjs +0 -5
  329. package/esm2022/mat-sticker/src/onemrva-mat-sticker.component.mjs +0 -69
  330. package/esm2022/mat-sticker/src/onemrva-mat-sticker.module.mjs +0 -18
  331. package/esm2022/mat-table-of-content/index.mjs +0 -8
  332. package/esm2022/mat-table-of-content/onemrvapublic-design-system-mat-table-of-content.mjs +0 -5
  333. package/esm2022/mat-table-of-content/src/onemrva-mat-table-of-content.component.mjs +0 -104
  334. package/esm2022/mat-table-of-content/src/onemrva-mat-table-of-content.directive.mjs +0 -60
  335. package/esm2022/mat-table-of-content/src/onemrva-mat-table-of-content.service.mjs +0 -46
  336. package/esm2022/mat-table-of-content/src/onemrva-mat-toc-anchor.model.mjs +0 -11
  337. package/esm2022/mat-task-list/index.mjs +0 -6
  338. package/esm2022/mat-task-list/onemrvapublic-design-system-mat-task-list.mjs +0 -5
  339. package/esm2022/mat-task-list/src/onemrva-mat-task-content.component.mjs +0 -17
  340. package/esm2022/mat-task-list/src/onemrva-mat-task-list.component.mjs +0 -36
  341. package/esm2022/mat-task-list/src/onemrva-mat-task-list.module.mjs +0 -51
  342. package/esm2022/mat-task-list/src/onemrva-mat-task-title.component.mjs +0 -23
  343. package/esm2022/mat-task-list/src/onemrva-mat-task.component.mjs +0 -140
  344. package/esm2022/mat-timepicker/index.mjs +0 -7
  345. package/esm2022/mat-timepicker/onemrvapublic-design-system-mat-timepicker.mjs +0 -5
  346. package/esm2022/mat-timepicker/src/clock/clock.component.mjs +0 -232
  347. package/esm2022/mat-timepicker/src/interfaces-and-types.mjs +0 -2
  348. package/esm2022/mat-timepicker/src/onemrva-mat-timepicker.component.mjs +0 -279
  349. package/esm2022/mat-timepicker/src/onemrva-mat-timepicker.module.mjs +0 -62
  350. package/esm2022/mat-timepicker/src/timepicker-dialog/timepicker-dialog.component.mjs +0 -129
  351. package/esm2022/mat-timepicker/src/timepicker-toggle/timepicker-toggle.component.mjs +0 -115
  352. package/esm2022/mat-timepicker/src/timepicker.directive.mjs +0 -512
  353. package/esm2022/mat-timepicker/src/util.mjs +0 -83
  354. package/esm2022/mat-toast/index.mjs +0 -6
  355. package/esm2022/mat-toast/onemrvapublic-design-system-mat-toast.mjs +0 -5
  356. package/esm2022/mat-toast/src/onemrva-mat-toast.component.mjs +0 -52
  357. package/esm2022/mat-toast/src/onemrva-mat-toast.module.mjs +0 -19
  358. package/esm2022/mat-tooltip/index.mjs +0 -5
  359. package/esm2022/mat-tooltip/onemrvapublic-design-system-mat-tooltip.mjs +0 -5
  360. package/esm2022/mat-tooltip/src/onemrva-mat-tooltip.component.mjs +0 -36
  361. package/esm2022/mat-tooltip/src/onemrva-mat-tooltip.directive.mjs +0 -111
  362. package/esm2022/mat-tooltip/src/onemrva-mat-tooltip.module.mjs +0 -19
  363. package/esm2022/onemrvapublic-design-system.mjs +0 -5
  364. package/esm2022/page-error/index.mjs +0 -3
  365. package/esm2022/page-error/onemrvapublic-design-system-page-error.mjs +0 -5
  366. package/esm2022/page-error/src/page-error-action.component.mjs +0 -18
  367. package/esm2022/page-error/src/page-error.component.mjs +0 -61
  368. package/esm2022/page-not-found/index.mjs +0 -6
  369. package/esm2022/page-not-found/onemrvapublic-design-system-page-not-found.mjs +0 -5
  370. package/esm2022/page-not-found/src/page-not-found-action.component.mjs +0 -17
  371. package/esm2022/page-not-found/src/page-not-found-extra.component.mjs +0 -17
  372. package/esm2022/page-not-found/src/page-not-found-invader.component.mjs +0 -94
  373. package/esm2022/page-not-found/src/page-not-found.component.mjs +0 -54
  374. package/esm2022/page-not-found/src/page-not-found.module.mjs +0 -38
  375. package/esm2022/public-api.mjs +0 -5
  376. package/esm2022/shared/index.mjs +0 -19
  377. package/esm2022/shared/onemrvapublic-design-system-shared.mjs +0 -5
  378. package/esm2022/shared/src/lib/adapters/index.mjs +0 -3
  379. package/esm2022/shared/src/lib/adapters/luxon.date.adapter.mjs +0 -251
  380. package/esm2022/shared/src/lib/adapters/luxon.utils.mjs +0 -23
  381. package/esm2022/shared/src/lib/adapters/native.date.adapter.mjs +0 -66
  382. package/esm2022/shared/src/lib/components/clipboard-icon/clipboard-icon.component.mjs +0 -20
  383. package/esm2022/shared/src/lib/components/index.mjs +0 -2
  384. package/esm2022/shared/src/lib/constants/CDNUrlModeOptions.mjs +0 -6
  385. package/esm2022/shared/src/lib/constants/cdn.mjs +0 -3
  386. package/esm2022/shared/src/lib/constants/constants.mjs +0 -7
  387. package/esm2022/shared/src/lib/constants/date.format.mjs +0 -95
  388. package/esm2022/shared/src/lib/constants/index.mjs +0 -5
  389. package/esm2022/shared/src/lib/containers/WebComponentOverlayContainer.mjs +0 -84
  390. package/esm2022/shared/src/lib/containers/index.mjs +0 -2
  391. package/esm2022/shared/src/lib/decorators/HttpCacheDecorator.mjs +0 -123
  392. package/esm2022/shared/src/lib/decorators/index.mjs +0 -2
  393. package/esm2022/shared/src/lib/directives/clipboard.directive.mjs +0 -39
  394. package/esm2022/shared/src/lib/directives/color.directive.mjs +0 -64
  395. package/esm2022/shared/src/lib/directives/digit-only.directive.mjs +0 -52
  396. package/esm2022/shared/src/lib/directives/iconRight.directive.mjs +0 -22
  397. package/esm2022/shared/src/lib/directives/if-width-is.directive.mjs +0 -34
  398. package/esm2022/shared/src/lib/directives/index.mjs +0 -24
  399. package/esm2022/shared/src/lib/directives/mask.directive.mjs +0 -198
  400. package/esm2022/shared/src/lib/directives/mat-row-clickable.directive.mjs +0 -74
  401. package/esm2022/shared/src/lib/helpers/index.mjs +0 -2
  402. package/esm2022/shared/src/lib/helpers/translation-helper.mjs +0 -58
  403. package/esm2022/shared/src/lib/interfaces/OnemRvaCommonCountry.interface.mjs +0 -2
  404. package/esm2022/shared/src/lib/interfaces/index.mjs +0 -2
  405. package/esm2022/shared/src/lib/loaders/index.mjs +0 -3
  406. package/esm2022/shared/src/lib/loaders/onemrva-translate-cdn-loader.mjs +0 -15
  407. package/esm2022/shared/src/lib/loaders/onemrva-translate-http-loader.mjs +0 -30
  408. package/esm2022/shared/src/lib/pipes/index.mjs +0 -3
  409. package/esm2022/shared/src/lib/pipes/onemrva-bce.pipe.mjs +0 -20
  410. package/esm2022/shared/src/lib/pipes/onemrva-niss.pipe.mjs +0 -20
  411. package/esm2022/shared/src/lib/providers/index.mjs +0 -5
  412. package/esm2022/shared/src/lib/providers/onemrva.date.luxon.provider.mjs +0 -16
  413. package/esm2022/shared/src/lib/providers/onemrva.date.luxon.year.month.provider.mjs +0 -16
  414. package/esm2022/shared/src/lib/providers/onemrva.date.native.provider.mjs +0 -16
  415. package/esm2022/shared/src/lib/providers/onemrva.date.native.year.month.provider.mjs +0 -16
  416. package/esm2022/shared/src/lib/services/cache.service.mjs +0 -31
  417. package/esm2022/shared/src/lib/services/cdn.service.mjs +0 -105
  418. package/esm2022/shared/src/lib/services/country-cdn.service.mjs +0 -75
  419. package/esm2022/shared/src/lib/services/country-lookup.service.mjs +0 -43
  420. package/esm2022/shared/src/lib/services/index.mjs +0 -5
  421. package/esm2022/shared/src/lib/services/mime-cdn.service.mjs +0 -45
  422. package/esm2022/shared/src/lib/shared.module.mjs +0 -25
  423. package/esm2022/shared/src/lib/tokens/index.mjs +0 -2
  424. package/esm2022/shared/src/lib/tokens/lookup.token.mjs +0 -7
  425. package/esm2022/shared/src/lib/validators/bank-account.validator.utils.mjs +0 -56
  426. package/esm2022/shared/src/lib/validators/index.mjs +0 -3
  427. package/esm2022/shared/src/lib/validators/onemrva-validators.mjs +0 -75
  428. package/esm2022/utils/index.mjs +0 -3
  429. package/esm2022/utils/onemrvapublic-design-system-utils.mjs +0 -5
  430. package/esm2022/utils/src/enum.utils.mjs +0 -7
  431. package/esm2022/utils/src/enums/color.enum.mjs +0 -12
  432. package/esm2022/utils/src/enums/index.mjs +0 -3
  433. package/esm2022/utils/src/enums/size.enum.mjs +0 -9
  434. package/fesm2022/onemrvapublic-design-system-mat-badge.mjs +0 -274
  435. package/fesm2022/onemrvapublic-design-system-mat-badge.mjs.map +0 -1
  436. package/mat-badge/index.d.ts +0 -2
  437. package/mat-badge/src/onemrva-mat-badge.component.d.ts +0 -89
  438. package/mat-badge/src/onemrva-mat-badge.component.scss +0 -157
  439. package/mat-badge/src/onemrva-mat-badge.module.d.ts +0 -7
@@ -1,589 +0,0 @@
1
- /**
2
- * Copyright (c) 2018 Bithost GmbH All Rights Reserved.
3
- *
4
- * Use of this source code is governed by an MIT-style license that can be
5
- * found in the LICENSE file at https://angular.io/license
6
- */
7
- import { A, DOWN_ARROW, END, ENTER, ESCAPE, HOME, NINE, SPACE, UP_ARROW, Z, ZERO, } from '@angular/cdk/keycodes';
8
- import { ChangeDetectionStrategy, Component, ContentChild, ElementRef, EventEmitter, forwardRef, Inject, Input, Optional, Output, QueryList, ViewChild, } from '@angular/core';
9
- import { FormControl, NG_VALUE_ACCESSOR, } from '@angular/forms';
10
- import { MatOption } from '@angular/material/core';
11
- import { MatFormField } from '@angular/material/form-field';
12
- import { MatSelect } from '@angular/material/select';
13
- import { BehaviorSubject, combineLatest, of, Subject } from 'rxjs';
14
- import { delay, filter, map, startWith, switchMap, take, takeUntil, tap, } from 'rxjs/operators';
15
- import { MatSelectSearchClearDirective } from './mat-select-search-clear.directive';
16
- import { configurableDefaultOptions, MAT_SELECTSEARCH_DEFAULT_OPTIONS, } from './default-options';
17
- import { MatSelectNoEntriesFoundDirective } from './mat-select-no-entries-found.directive';
18
- import * as i0 from "@angular/core";
19
- import * as i1 from "@angular/cdk/scrolling";
20
- import * as i2 from "@angular/common";
21
- import * as i3 from "@angular/forms";
22
- import * as i4 from "@angular/material/button";
23
- import * as i5 from "@angular/material/checkbox";
24
- import * as i6 from "@angular/material/icon";
25
- import * as i7 from "@angular/material/progress-spinner";
26
- import * as i8 from "@angular/material/tooltip";
27
- import * as i9 from "@angular/material/divider";
28
- import * as i10 from "@angular/material/select";
29
- import * as i11 from "@angular/material/core";
30
- import * as i12 from "@angular/material/form-field";
31
- /**
32
- * Component providing an input field for searching MatSelect options.
33
- *
34
- * Example usage:
35
- *
36
- * interface Bank {
37
- * id: string;
38
- * name: string;
39
- * }
40
- *
41
- * @Component({
42
- * selector: 'my-app-data-selection',
43
- * template: `
44
- * <mat-form-field>
45
- * <mat-select [formControl]="bankCtrl" placeholder="Bank">
46
- * <mat-option>
47
- * <ngx-mat-select-search [formControl]="bankFilterCtrl"></ngx-mat-select-search>
48
- * </mat-option>
49
- * <mat-option *ngFor="let bank of filteredBanks | async" [value]="bank.id">
50
- * {{bank.name}}
51
- * </mat-option>
52
- * </mat-select>
53
- * </mat-form-field>
54
- * `
55
- * })
56
- * export class DataSelectionComponent implements OnInit, OnDestroy {
57
- *
58
- * // control for the selected bank
59
- * public bankCtrl: FormControl = new FormControl();
60
- * // control for the MatSelect filter keyword
61
- * public bankFilterCtrl: FormControl = new FormControl();
62
- *
63
- * // list of banks
64
- * private banks: Bank[] = [{name: 'Bank A', id: 'A'}, {name: 'Bank B', id: 'B'}, {name: 'Bank C', id: 'C'}];
65
- * // list of banks filtered by search keyword
66
- * public filteredBanks: ReplaySubject<Bank[]> = new ReplaySubject<Bank[]>(1);
67
- *
68
- * // Subject that emits when the component has been destroyed.
69
- * private _onDestroy = new Subject<void>();
70
- *
71
- *
72
- * ngOnInit() {
73
- * // load the initial bank list
74
- * this.filteredBanks.next(this.banks.slice());
75
- * // listen for search field value changes
76
- * this.bankFilterCtrl.valueChanges
77
- * .pipe(takeUntil(this._onDestroy))
78
- * .subscribe(() => {
79
- * this.filterBanks();
80
- * });
81
- * }
82
- *
83
- * ngOnDestroy() {
84
- * this._onDestroy.next();
85
- * this._onDestroy.complete();
86
- * }
87
- *
88
- * private filterBanks() {
89
- * if (!this.banks) {
90
- * return;
91
- * }
92
- *
93
- * // get the search keyword
94
- * let search = this.bankFilterCtrl.value;
95
- * if (!search) {
96
- * this.filteredBanks.next(this.banks.slice());
97
- * return;
98
- * } else {
99
- * search = search.toLowerCase();
100
- * }
101
- *
102
- * // filter the banks
103
- * this.filteredBanks.next(
104
- * this.banks.filter(bank => bank.name.toLowerCase().indexOf(search) > -1)
105
- * );
106
- * }
107
- * }
108
- */
109
- export class MatSelectSearchComponent {
110
- /** Current search value */
111
- get value() {
112
- return this._formControl.value;
113
- }
114
- /** Reference to the MatSelect options */
115
- set _options(_options) {
116
- this._options$.next(_options);
117
- }
118
- get _options() {
119
- return this._options$.getValue();
120
- }
121
- constructor(matSelect, changeDetectorRef, _viewportRuler, matOption, matFormField, defaultOptions) {
122
- this.matSelect = matSelect;
123
- this.changeDetectorRef = changeDetectorRef;
124
- this._viewportRuler = _viewportRuler;
125
- this.matOption = matOption;
126
- this.matFormField = matFormField;
127
- /** Label of the search placeholder */
128
- this.placeholderLabel = 'Search';
129
- /** Type of the search input field */
130
- this.type = 'text';
131
- /** Font-based icon used for displaying Close-Icon */
132
- this.closeIcon = 'close';
133
- /** Svg-based icon used for displaying Close-Icon. If set, closeIcon is overridden */
134
- this.closeSvgIcon = '';
135
- /** Label to be shown when no entries are found. Set to null if no message should be shown. */
136
- this.noEntriesFoundLabel = 'Nothing found';
137
- /**
138
- * Whether or not the search field should be cleared after the dropdown menu is closed.
139
- * Useful for server-side filtering. See [#3](https://github.com/bithost-gmbh/ngx-mat-select-search/issues/3)
140
- */
141
- this.clearSearchInput = true;
142
- /** Whether to show the search-in-progress indicator */
143
- this.searching = false;
144
- /** Disables initial focusing of the input field */
145
- this.disableInitialFocus = false;
146
- /** Enable clear input on escape pressed */
147
- this.enableClearOnEscapePressed = false;
148
- /**
149
- * Prevents home / end key being propagated to mat-select,
150
- * allowing to move the cursor within the search input instead of navigating the options
151
- */
152
- this.preventHomeEndKeyPropagation = false;
153
- /** Disables scrolling to active options when option list changes. Useful for server-side search */
154
- this.disableScrollToActiveOnOptionsChanged = false;
155
- /** Adds 508 screen reader support for search box */
156
- this.ariaLabel = 'dropdown search';
157
- /** Whether to show Select All Checkbox (for mat-select[multi=true]) */
158
- this.showToggleAllCheckbox = false;
159
- /** select all checkbox checked state */
160
- this.toggleAllCheckboxChecked = false;
161
- /** select all checkbox indeterminate state */
162
- this.toggleAllCheckboxIndeterminate = false;
163
- /** Display a message in a tooltip on the toggle-all checkbox */
164
- this.toggleAllCheckboxTooltipMessage = '';
165
- /** Define the position of the tooltip on the toggle-all checkbox. */
166
- this.toggleAllCheckboxTooltipPosition = 'below';
167
- /** Show/Hide the search clear button of the search input */
168
- this.hideClearSearchButton = false;
169
- /**
170
- * Always restore selected options on selectionChange for mode multi (e.g. for lazy loading/infinity scrolling).
171
- * Defaults to false, so selected options are only restored while filtering is active.
172
- */
173
- this.alwaysRestoreSelectedOptionsMulti = false;
174
- /** Output emitter to send to parent component with the toggle all boolean */
175
- this.toggleAll = new EventEmitter();
176
- this.onTouched = (_) => {
177
- //
178
- };
179
- this._options$ = new BehaviorSubject(new QueryList());
180
- this.optionsList$ = this._options$.pipe(switchMap(_options => _options
181
- ? _options.changes.pipe(map(options => options.toArray()), startWith(_options.toArray()))
182
- : of([])));
183
- this.optionsLength$ = this.optionsList$.pipe(map(options => (options ? options.length : 0)));
184
- this._formControl = new FormControl('');
185
- /** whether to show the no entries found message */
186
- this._showNoEntriesFound$ = combineLatest([
187
- this._formControl.valueChanges,
188
- this.optionsLength$,
189
- ]).pipe(map(([_, optionsLength]) => {
190
- return (this.noEntriesFoundLabel !== '' &&
191
- optionsLength === this.getOptionsLengthOffset());
192
- }));
193
- /** Subject that emits when the component has been destroyed. */
194
- this._onDestroy = new Subject();
195
- this.applyDefaultOptions(defaultOptions);
196
- }
197
- applyDefaultOptions(defaultOptions) {
198
- if (!defaultOptions) {
199
- return;
200
- }
201
- for (const key of configurableDefaultOptions) {
202
- // eslint-disable-next-line
203
- if (defaultOptions.hasOwnProperty(key)) {
204
- this[key] = defaultOptions[key];
205
- }
206
- }
207
- }
208
- ngOnInit() {
209
- // set custom mat-option class if the component was placed inside a mat-option
210
- if (this.matOption) {
211
- this.matOption.disabled = true;
212
- this.matOption
213
- ._getHostElement()
214
- .classList.add('contains-mat-select-search');
215
- //this.matOption._getHostElement().setAttribute('aria-hidden', 'true'); // this provoke an error
216
- }
217
- else {
218
- console.error('<ngx-mat-select-search> must be placed inside a <mat-option> element');
219
- }
220
- // when the select dropdown panel is opened or closed
221
- this.matSelect.openedChange
222
- .pipe(delay(1), takeUntil(this._onDestroy))
223
- .subscribe(opened => {
224
- if (opened) {
225
- this.updateInputWidth();
226
- // focus the search field when opening
227
- if (!this.disableInitialFocus) {
228
- this._focus();
229
- }
230
- }
231
- else {
232
- // clear it when closing
233
- if (this.clearSearchInput) {
234
- this._reset();
235
- }
236
- }
237
- });
238
- // set the first item active after the options changed
239
- this.matSelect.openedChange
240
- .pipe(take(1), switchMap(_ => {
241
- this._options = this.matSelect.options;
242
- // Closure variable for tracking the most recent first option.
243
- // In order to avoid avoid causing the list to
244
- // scroll to the top when options are added to the bottom of
245
- // the list (eg: infinite scroll), we compare only
246
- // the changes to the first options to determine if we
247
- // should set the first item as active.
248
- // This prevents unnecessary scrolling to the top of the list
249
- // when options are appended, but allows the first item
250
- // in the list to be set as active by default when there
251
- // is no active selection
252
- let previousFirstOption = this._options.toArray()[this.getOptionsLengthOffset()];
253
- return this._options.changes.pipe(tap(() => {
254
- // avoid "expression has been changed" error
255
- setTimeout(() => {
256
- // Convert the QueryList to an array
257
- const options = this._options.toArray();
258
- // The true first item is offset by 1
259
- const currentFirstOption = options[this.getOptionsLengthOffset()];
260
- const keyManager = this.matSelect._keyManager;
261
- if (keyManager && this.matSelect.panelOpen) {
262
- // set first item active and input width
263
- // Check to see if the first option in these changes is different from the previous.
264
- const firstOptionIsChanged = !this.matSelect.compareWith(previousFirstOption, currentFirstOption);
265
- // CASE: The first option is different now.
266
- // Indiciates we should set it as active and scroll to the top.
267
- if (firstOptionIsChanged ||
268
- !keyManager.activeItem ||
269
- !options.find(option => this.matSelect.compareWith(option, keyManager.activeItem))) {
270
- keyManager.setFirstItemActive();
271
- }
272
- // wait for panel width changes
273
- setTimeout(() => {
274
- this.updateInputWidth();
275
- });
276
- }
277
- // Update our reference
278
- previousFirstOption = currentFirstOption;
279
- });
280
- }));
281
- }))
282
- .pipe(takeUntil(this._onDestroy))
283
- .subscribe();
284
- // add or remove css class depending on whether to show the no entries found message
285
- // note: this is hacky
286
- this._showNoEntriesFound$
287
- .pipe(takeUntil(this._onDestroy))
288
- .subscribe(showNoEntriesFound => {
289
- // set no entries found class on mat option
290
- if (this.matOption) {
291
- if (showNoEntriesFound) {
292
- this.matOption
293
- ._getHostElement()
294
- .classList.add('mat-select-search-no-entries-found');
295
- }
296
- else {
297
- this.matOption
298
- ._getHostElement()
299
- .classList.remove('mat-select-search-no-entries-found');
300
- }
301
- }
302
- });
303
- // resize the input width when the viewport is resized, i.e. the trigger width could potentially be resized
304
- this._viewportRuler
305
- .change()
306
- .pipe(takeUntil(this._onDestroy))
307
- .subscribe(() => {
308
- if (this.matSelect.panelOpen) {
309
- this.updateInputWidth();
310
- }
311
- });
312
- this.initMultipleHandling();
313
- this.optionsList$.pipe(takeUntil(this._onDestroy)).subscribe(() => {
314
- // update view when available options change
315
- this.changeDetectorRef.markForCheck();
316
- });
317
- }
318
- _emitSelectAllBooleanToParent(state) {
319
- this.toggleAll.emit(state);
320
- }
321
- ngOnDestroy() {
322
- this._onDestroy.next();
323
- this._onDestroy.complete();
324
- }
325
- _isToggleAllCheckboxVisible() {
326
- return this.matSelect.multiple && this.showToggleAllCheckbox;
327
- }
328
- /**
329
- * Handles the key down event with MatSelect.
330
- * Allows e.g. selecting with enter key, navigation with arrow keys, etc.
331
- * @param event
332
- */
333
- _handleKeydown(event) {
334
- // Prevent propagation for all alphanumeric characters in order to avoid selection issues
335
- if ((event.key && event.key.length === 1) ||
336
- (event.keyCode >= A && event.keyCode <= Z) ||
337
- (event.keyCode >= ZERO && event.keyCode <= NINE) ||
338
- event.keyCode === SPACE ||
339
- (this.preventHomeEndKeyPropagation &&
340
- (event.keyCode === HOME || event.keyCode === END))) {
341
- event.stopPropagation();
342
- }
343
- if (this.matSelect.multiple && event.key && event.keyCode === ENTER) {
344
- // Regain focus after multiselect, so we can further type
345
- setTimeout(() => this._focus());
346
- }
347
- // Special case if click Escape, if input is empty, close the dropdown, if not, empty out the search field
348
- if (this.enableClearOnEscapePressed === true &&
349
- event.keyCode === ESCAPE &&
350
- this.value) {
351
- this._reset(true);
352
- event.stopPropagation();
353
- }
354
- }
355
- /**
356
- * Handles the key up event with MatSelect.
357
- * Allows e.g. the announcing of the currently activeDescendant by screen readers.
358
- */
359
- _handleKeyup(event) {
360
- if (event.keyCode === UP_ARROW || event.keyCode === DOWN_ARROW) {
361
- const ariaActiveDescendantId = this.matSelect._getAriaActiveDescendant();
362
- const index = this._options
363
- .toArray()
364
- .findIndex(item => item.id === ariaActiveDescendantId);
365
- if (index !== -1) {
366
- this.unselectActiveDescendant();
367
- const temp = this._options.toArray();
368
- this.activeDescendant = temp[index]._getHostElement();
369
- this.activeDescendant.setAttribute('aria-selected', 'true');
370
- this.searchSelectInput?.nativeElement.setAttribute('aria-activedescendant', ariaActiveDescendantId);
371
- }
372
- }
373
- }
374
- writeValue(value) {
375
- this._lastExternalInputValue = value;
376
- this._formControl.setValue(value);
377
- this.changeDetectorRef.markForCheck();
378
- }
379
- onBlur() {
380
- this.unselectActiveDescendant();
381
- }
382
- registerOnChange(fn) {
383
- this._formControl.valueChanges
384
- .pipe(filter(value => value !== this._lastExternalInputValue), tap(() => (this._lastExternalInputValue = undefined)), takeUntil(this._onDestroy))
385
- .subscribe(fn);
386
- }
387
- registerOnTouched(fn) {
388
- this.onTouched = fn;
389
- }
390
- /**
391
- * Focuses the search input field
392
- */
393
- _focus() {
394
- if (!this.searchSelectInput || !this.matSelect.panel) {
395
- return;
396
- }
397
- // save and restore scrollTop of panel, since it will be reset by focus()
398
- // note: this is hacky
399
- const panel = this.matSelect.panel.nativeElement;
400
- const scrollTop = panel.scrollTop;
401
- // focus
402
- this.searchSelectInput.nativeElement.focus();
403
- panel.scrollTop = scrollTop;
404
- }
405
- /**
406
- * Resets the current search value
407
- * @param focus whether to focus after resetting
408
- */
409
- _reset(focus) {
410
- this._formControl.setValue('');
411
- if (focus) {
412
- this._focus();
413
- }
414
- }
415
- /**
416
- * Initializes handling <mat-select [multiple]="true">
417
- * Note: to improve this code, mat-select should be extended to allow disabling resetting the selection while filtering.
418
- */
419
- initMultipleHandling() {
420
- if (!this.matSelect.ngControl) {
421
- if (this.matSelect.multiple) {
422
- // note: the access to matSelect.ngControl (instead of matSelect.value / matSelect.valueChanges)
423
- // is necessary to properly work in multi-selection mode.
424
- console.error('the mat-select containing ngx-mat-select-search must have a ngModel or formControl directive when multiple=true');
425
- }
426
- return;
427
- }
428
- // if <mat-select [multiple]="true">
429
- // store previously selected values and restore them when they are deselected
430
- // because the option is not available while we are currently filtering
431
- this.previousSelectedValues = this.matSelect.ngControl.value;
432
- this.matSelect.ngControl.valueChanges
433
- ?.pipe(takeUntil(this._onDestroy))
434
- .subscribe(values => {
435
- let restoreSelectedValues = false;
436
- if (this.matSelect.multiple) {
437
- if ((this.alwaysRestoreSelectedOptionsMulti ||
438
- (this._formControl.value && this._formControl.value.length)) &&
439
- this.previousSelectedValues &&
440
- Array.isArray(this.previousSelectedValues)) {
441
- if (!values || !Array.isArray(values)) {
442
- values = [];
443
- }
444
- const optionValues = this.matSelect.options.map(option => option.value);
445
- this.previousSelectedValues.forEach(previousValue => {
446
- if (!values.some((v) => this.matSelect.compareWith(v, previousValue)) &&
447
- !optionValues.some(v => this.matSelect.compareWith(v, previousValue))) {
448
- // if a value that was selected before is deselected and not found in the options, it was deselected
449
- // due to the filtering, so we restore it.
450
- values.push(previousValue);
451
- restoreSelectedValues = true;
452
- }
453
- });
454
- }
455
- }
456
- this.previousSelectedValues = values;
457
- if (restoreSelectedValues) {
458
- this.matSelect._onChange(values);
459
- }
460
- });
461
- }
462
- /**
463
- * Set the width of the innerSelectSearch to fit even custom scrollbars
464
- * And support all Operation Systems
465
- */
466
- updateInputWidth() {
467
- if (!this.innerSelectSearch || !this.innerSelectSearch.nativeElement) {
468
- return;
469
- }
470
- let element = this.innerSelectSearch.nativeElement;
471
- if (element.parentElement !== null) {
472
- let panelElement = null;
473
- while ((element = element.parentElement)) {
474
- if (element.classList.contains('mat-select-panel')) {
475
- panelElement = element;
476
- break;
477
- }
478
- }
479
- if (panelElement !== null) {
480
- this.innerSelectSearch.nativeElement.style.width =
481
- panelElement.clientWidth + 'px';
482
- }
483
- }
484
- }
485
- /**
486
- * Determine the offset to length that can be caused by the optional matOption used as a search input.
487
- */
488
- getOptionsLengthOffset() {
489
- if (this.matOption) {
490
- return 1;
491
- }
492
- else {
493
- return 0;
494
- }
495
- }
496
- unselectActiveDescendant() {
497
- this.activeDescendant?.removeAttribute('aria-selected');
498
- this.searchSelectInput?.nativeElement.removeAttribute('aria-activedescendant');
499
- }
500
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatSelectSearchComponent, deps: [{ token: MatSelect }, { token: i0.ChangeDetectorRef }, { token: i1.ViewportRuler }, { token: MatOption, optional: true }, { token: MatFormField, optional: true }, { token: MAT_SELECTSEARCH_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
501
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MatSelectSearchComponent, selector: "mat-select-search", inputs: { placeholderLabel: "placeholderLabel", type: "type", closeIcon: "closeIcon", closeSvgIcon: "closeSvgIcon", noEntriesFoundLabel: "noEntriesFoundLabel", clearSearchInput: "clearSearchInput", searching: "searching", disableInitialFocus: "disableInitialFocus", enableClearOnEscapePressed: "enableClearOnEscapePressed", preventHomeEndKeyPropagation: "preventHomeEndKeyPropagation", disableScrollToActiveOnOptionsChanged: "disableScrollToActiveOnOptionsChanged", ariaLabel: "ariaLabel", showToggleAllCheckbox: "showToggleAllCheckbox", toggleAllCheckboxChecked: "toggleAllCheckboxChecked", toggleAllCheckboxIndeterminate: "toggleAllCheckboxIndeterminate", toggleAllCheckboxTooltipMessage: "toggleAllCheckboxTooltipMessage", toggleAllCheckboxTooltipPosition: "toggleAllCheckboxTooltipPosition", hideClearSearchButton: "hideClearSearchButton", alwaysRestoreSelectedOptionsMulti: "alwaysRestoreSelectedOptionsMulti" }, outputs: { toggleAll: "toggleAll" }, providers: [
502
- {
503
- provide: NG_VALUE_ACCESSOR,
504
- useExisting: forwardRef(() => MatSelectSearchComponent),
505
- multi: true,
506
- },
507
- ], queries: [{ propertyName: "clearIcon", first: true, predicate: MatSelectSearchClearDirective, descendants: true }, { propertyName: "noEntriesFound", first: true, predicate: MatSelectNoEntriesFoundDirective, descendants: true }], viewQueries: [{ propertyName: "searchSelectInput", first: true, predicate: ["searchSelectInput"], descendants: true, read: ElementRef, static: true }, { propertyName: "innerSelectSearch", first: true, predicate: ["innerSelectSearch"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<!--\nCopyright (c) 2018 Bithost GmbH All Rights Reserved.\n\nUse of this source code is governed by an MIT-style license that can be\nfound in the LICENSE file at https://angular.io/license\n-->\n<!-- Placeholder to adjust vertical offset of the mat-option elements -->\n<input matInput class=\"mat-select-search-input mat-select-search-hidden\" />\n\n<!-- Note: the mat-datepicker-content mat-tab-header are needed to inherit the material theme colors, see PR #22 -->\n<div\n #innerSelectSearch\n class=\"mat-select-search-inner mat-typography mat-datepicker-content mat-tab-header\"\n [ngClass]=\"{\n 'mat-select-search-inner-multiple': matSelect.multiple,\n 'mat-select-search-inner-toggle-all': _isToggleAllCheckboxVisible(),\n }\"\n>\n <mat-checkbox\n *ngIf=\"_isToggleAllCheckboxVisible()\"\n [color]=\"matFormField.color\"\n class=\"mat-select-search-toggle-all-checkbox\"\n [checked]=\"toggleAllCheckboxChecked\"\n [indeterminate]=\"toggleAllCheckboxIndeterminate\"\n [matTooltip]=\"toggleAllCheckboxTooltipMessage\"\n matTooltipClass=\"ngx-mat-select-search-toggle-all-tooltip\"\n [matTooltipPosition]=\"toggleAllCheckboxTooltipPosition\"\n (change)=\"_emitSelectAllBooleanToParent($event.checked)\"\n ></mat-checkbox>\n\n <input\n class=\"mat-select-search-input\"\n autocomplete=\"off\"\n [type]=\"type\"\n [formControl]=\"_formControl\"\n #searchSelectInput\n (keydown)=\"_handleKeydown($event)\"\n (keyup)=\"_handleKeyup($event)\"\n (blur)=\"onBlur()\"\n [placeholder]=\"placeholderLabel\"\n [attr.aria-label]=\"ariaLabel\"\n />\n <mat-icon *ngIf=\"value === '' && !searching\" class=\"suffix\">search</mat-icon>\n <mat-spinner\n *ngIf=\"searching\"\n class=\"mat-select-search-spinner\"\n diameter=\"16\"\n ></mat-spinner>\n\n <button\n *ngIf=\"!hideClearSearchButton && value && !searching\"\n mat-icon-button\n aria-label=\"Clear\"\n (click)=\"_reset(true)\"\n class=\"mat-select-search-clear\"\n >\n <ng-content\n *ngIf=\"clearIcon; else defaultIcon\"\n select=\"[matSelectSearchClear]\"\n ></ng-content>\n <ng-template #defaultIcon>\n <mat-icon [svgIcon]=\"closeSvgIcon\">\n {{ !closeSvgIcon ? closeIcon : null }}\n </mat-icon>\n </ng-template>\n </button>\n\n <ng-content select=\".mat-select-search-custom-header-content\"></ng-content>\n\n <mat-divider></mat-divider>\n</div>\n\n<div\n *ngIf=\"_showNoEntriesFound$ | async\"\n class=\"mat-select-search-no-entries-found\"\n>\n <ng-content\n *ngIf=\"noEntriesFound; else defaultNoEntriesFound\"\n select=\"[matSelectNoEntriesFound]\"\n ></ng-content>\n <ng-template #defaultNoEntriesFound>{{ noEntriesFoundLabel }}</ng-template>\n</div>\n", styles: [".mat-select-search-hidden{visibility:hidden}.mat-select-search-inner{position:absolute;top:0;left:0;width:100%;z-index:100;font-size:inherit;box-shadow:none}.mat-select-search-inner.mat-select-search-inner-multiple.mat-select-search-inner-toggle-all{display:flex;align-items:center}.suffix{position:absolute;top:12px;right:14px}.mat-select-search-input{box-sizing:border-box;width:100%;border:none;font-family:inherit;font-size:inherit;color:currentColor;outline:none;background:#fff;padding:0 44px 0 16px;height:calc(3em - 1px);line-height:calc(3em - 1px)}:host-context([dir=rtl]) .mat-select-search-input{padding-right:16px;padding-left:44px}.mat-select-search-inner-toggle-all .mat-select-search-input{padding-left:5px}.mat-select-search-no-entries-found{padding-top:8px}.mat-select-search-clear{position:absolute;right:4px;top:0}:host-context([dir=rtl]) .mat-select-search-clear{right:auto;left:4px}.mat-select-search-spinner{position:absolute;right:16px;top:calc(50% - 8px)}:host-context([dir=rtl]) .mat-select-search-spinner{right:auto;left:16px}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search{position:sticky;top:0;z-index:1;opacity:1;margin-top:-8px;pointer-events:all}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search .mat-icon{margin-right:0;margin-left:0}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search mat-pseudo-checkbox{display:none}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search .mdc-list-item__primary-text{opacity:1}.mat-select-search-toggle-all-checkbox{padding-left:5px}:host-context([dir=rtl]) .mat-select-search-toggle-all-checkbox{padding-left:0;padding-right:5px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
508
- }
509
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatSelectSearchComponent, decorators: [{
510
- type: Component,
511
- args: [{ selector: 'mat-select-search', providers: [
512
- {
513
- provide: NG_VALUE_ACCESSOR,
514
- useExisting: forwardRef(() => MatSelectSearchComponent),
515
- multi: true,
516
- },
517
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\nCopyright (c) 2018 Bithost GmbH All Rights Reserved.\n\nUse of this source code is governed by an MIT-style license that can be\nfound in the LICENSE file at https://angular.io/license\n-->\n<!-- Placeholder to adjust vertical offset of the mat-option elements -->\n<input matInput class=\"mat-select-search-input mat-select-search-hidden\" />\n\n<!-- Note: the mat-datepicker-content mat-tab-header are needed to inherit the material theme colors, see PR #22 -->\n<div\n #innerSelectSearch\n class=\"mat-select-search-inner mat-typography mat-datepicker-content mat-tab-header\"\n [ngClass]=\"{\n 'mat-select-search-inner-multiple': matSelect.multiple,\n 'mat-select-search-inner-toggle-all': _isToggleAllCheckboxVisible(),\n }\"\n>\n <mat-checkbox\n *ngIf=\"_isToggleAllCheckboxVisible()\"\n [color]=\"matFormField.color\"\n class=\"mat-select-search-toggle-all-checkbox\"\n [checked]=\"toggleAllCheckboxChecked\"\n [indeterminate]=\"toggleAllCheckboxIndeterminate\"\n [matTooltip]=\"toggleAllCheckboxTooltipMessage\"\n matTooltipClass=\"ngx-mat-select-search-toggle-all-tooltip\"\n [matTooltipPosition]=\"toggleAllCheckboxTooltipPosition\"\n (change)=\"_emitSelectAllBooleanToParent($event.checked)\"\n ></mat-checkbox>\n\n <input\n class=\"mat-select-search-input\"\n autocomplete=\"off\"\n [type]=\"type\"\n [formControl]=\"_formControl\"\n #searchSelectInput\n (keydown)=\"_handleKeydown($event)\"\n (keyup)=\"_handleKeyup($event)\"\n (blur)=\"onBlur()\"\n [placeholder]=\"placeholderLabel\"\n [attr.aria-label]=\"ariaLabel\"\n />\n <mat-icon *ngIf=\"value === '' && !searching\" class=\"suffix\">search</mat-icon>\n <mat-spinner\n *ngIf=\"searching\"\n class=\"mat-select-search-spinner\"\n diameter=\"16\"\n ></mat-spinner>\n\n <button\n *ngIf=\"!hideClearSearchButton && value && !searching\"\n mat-icon-button\n aria-label=\"Clear\"\n (click)=\"_reset(true)\"\n class=\"mat-select-search-clear\"\n >\n <ng-content\n *ngIf=\"clearIcon; else defaultIcon\"\n select=\"[matSelectSearchClear]\"\n ></ng-content>\n <ng-template #defaultIcon>\n <mat-icon [svgIcon]=\"closeSvgIcon\">\n {{ !closeSvgIcon ? closeIcon : null }}\n </mat-icon>\n </ng-template>\n </button>\n\n <ng-content select=\".mat-select-search-custom-header-content\"></ng-content>\n\n <mat-divider></mat-divider>\n</div>\n\n<div\n *ngIf=\"_showNoEntriesFound$ | async\"\n class=\"mat-select-search-no-entries-found\"\n>\n <ng-content\n *ngIf=\"noEntriesFound; else defaultNoEntriesFound\"\n select=\"[matSelectNoEntriesFound]\"\n ></ng-content>\n <ng-template #defaultNoEntriesFound>{{ noEntriesFoundLabel }}</ng-template>\n</div>\n", styles: [".mat-select-search-hidden{visibility:hidden}.mat-select-search-inner{position:absolute;top:0;left:0;width:100%;z-index:100;font-size:inherit;box-shadow:none}.mat-select-search-inner.mat-select-search-inner-multiple.mat-select-search-inner-toggle-all{display:flex;align-items:center}.suffix{position:absolute;top:12px;right:14px}.mat-select-search-input{box-sizing:border-box;width:100%;border:none;font-family:inherit;font-size:inherit;color:currentColor;outline:none;background:#fff;padding:0 44px 0 16px;height:calc(3em - 1px);line-height:calc(3em - 1px)}:host-context([dir=rtl]) .mat-select-search-input{padding-right:16px;padding-left:44px}.mat-select-search-inner-toggle-all .mat-select-search-input{padding-left:5px}.mat-select-search-no-entries-found{padding-top:8px}.mat-select-search-clear{position:absolute;right:4px;top:0}:host-context([dir=rtl]) .mat-select-search-clear{right:auto;left:4px}.mat-select-search-spinner{position:absolute;right:16px;top:calc(50% - 8px)}:host-context([dir=rtl]) .mat-select-search-spinner{right:auto;left:16px}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search{position:sticky;top:0;z-index:1;opacity:1;margin-top:-8px;pointer-events:all}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search .mat-icon{margin-right:0;margin-left:0}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search mat-pseudo-checkbox{display:none}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search .mdc-list-item__primary-text{opacity:1}.mat-select-search-toggle-all-checkbox{padding-left:5px}:host-context([dir=rtl]) .mat-select-search-toggle-all-checkbox{padding-left:0;padding-right:5px}\n"] }]
518
- }], ctorParameters: () => [{ type: i10.MatSelect, decorators: [{
519
- type: Inject,
520
- args: [MatSelect]
521
- }] }, { type: i0.ChangeDetectorRef }, { type: i1.ViewportRuler }, { type: i11.MatOption, decorators: [{
522
- type: Optional
523
- }, {
524
- type: Inject,
525
- args: [MatOption]
526
- }] }, { type: i12.MatFormField, decorators: [{
527
- type: Optional
528
- }, {
529
- type: Inject,
530
- args: [MatFormField]
531
- }] }, { type: undefined, decorators: [{
532
- type: Optional
533
- }, {
534
- type: Inject,
535
- args: [MAT_SELECTSEARCH_DEFAULT_OPTIONS]
536
- }] }], propDecorators: { placeholderLabel: [{
537
- type: Input
538
- }], type: [{
539
- type: Input
540
- }], closeIcon: [{
541
- type: Input
542
- }], closeSvgIcon: [{
543
- type: Input
544
- }], noEntriesFoundLabel: [{
545
- type: Input
546
- }], clearSearchInput: [{
547
- type: Input
548
- }], searching: [{
549
- type: Input
550
- }], disableInitialFocus: [{
551
- type: Input
552
- }], enableClearOnEscapePressed: [{
553
- type: Input
554
- }], preventHomeEndKeyPropagation: [{
555
- type: Input
556
- }], disableScrollToActiveOnOptionsChanged: [{
557
- type: Input
558
- }], ariaLabel: [{
559
- type: Input
560
- }], showToggleAllCheckbox: [{
561
- type: Input
562
- }], toggleAllCheckboxChecked: [{
563
- type: Input
564
- }], toggleAllCheckboxIndeterminate: [{
565
- type: Input
566
- }], toggleAllCheckboxTooltipMessage: [{
567
- type: Input
568
- }], toggleAllCheckboxTooltipPosition: [{
569
- type: Input
570
- }], hideClearSearchButton: [{
571
- type: Input
572
- }], alwaysRestoreSelectedOptionsMulti: [{
573
- type: Input
574
- }], toggleAll: [{
575
- type: Output
576
- }], searchSelectInput: [{
577
- type: ViewChild,
578
- args: ['searchSelectInput', { read: ElementRef, static: true }]
579
- }], innerSelectSearch: [{
580
- type: ViewChild,
581
- args: ['innerSelectSearch', { read: ElementRef, static: true }]
582
- }], clearIcon: [{
583
- type: ContentChild,
584
- args: [MatSelectSearchClearDirective]
585
- }], noEntriesFound: [{
586
- type: ContentChild,
587
- args: [MatSelectNoEntriesFoundDirective]
588
- }] } });
589
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LXNlbGVjdC1zZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25lbXJ2YS9kZXNpZ24tc3lzdGVtL21hdC1zZWxlY3Qtc2VhcmNoL3NyYy9tYXQtc2VsZWN0LXNlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmVtcnZhL2Rlc2lnbi1zeXN0ZW0vbWF0LXNlbGVjdC1zZWFyY2gvc3JjL21hdC1zZWxlY3Qtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUNMLENBQUMsRUFDRCxVQUFVLEVBQ1YsR0FBRyxFQUNILEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxFQUNKLElBQUksRUFDSixLQUFLLEVBQ0wsUUFBUSxFQUNSLENBQUMsRUFDRCxJQUFJLEdBQ0wsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLFdBQVcsRUFDWCxpQkFBaUIsR0FDbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFDTCxLQUFL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biAqIENvcHlyaWdodCAoYykgMjAxOCBCaXRob3N0IEdtYkggQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7XG4gIEEsXG4gIERPV05fQVJST1csXG4gIEVORCxcbiAgRU5URVIsXG4gIEVTQ0FQRSxcbiAgSE9NRSxcbiAgTklORSxcbiAgU1BBQ0UsXG4gIFVQX0FSUk9XLFxuICBaLFxuICBaRVJPLFxufSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgVmlld3BvcnRSdWxlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEZvcm1Db250cm9sLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0T3B0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkZWxheSxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIHN0YXJ0V2l0aCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWF0U2VsZWN0U2VhcmNoQ2xlYXJEaXJlY3RpdmUgfSBmcm9tICcuL21hdC1zZWxlY3Qtc2VhcmNoLWNsZWFyLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICBjb25maWd1cmFibGVEZWZhdWx0T3B0aW9ucyxcbiAgTUFUX1NFTEVDVFNFQVJDSF9ERUZBVUxUX09QVElPTlMsXG4gIE1hdFNlbGVjdFNlYXJjaE9wdGlvbnMsXG59IGZyb20gJy4vZGVmYXVsdC1vcHRpb25zJztcbmltcG9ydCB7IE1hdFNlbGVjdE5vRW50cmllc0ZvdW5kRGlyZWN0aXZlIH0gZnJvbSAnLi9tYXQtc2VsZWN0LW5vLWVudHJpZXMtZm91bmQuZGlyZWN0aXZlJztcblxuLyoqXG4gKiBDb21wb25lbnQgcHJvdmlkaW5nIGFuIGlucHV0IGZpZWxkIGZvciBzZWFyY2hpbmcgTWF0U2VsZWN0IG9wdGlvbnMuXG4gKlxuICogRXhhbXBsZSB1c2FnZTpcbiAqXG4gKiBpbnRlcmZhY2UgQmFuayB7XG4gKiAgaWQ6IHN0cmluZztcbiAqICBuYW1lOiBzdHJpbmc7XG4gKiB9XG4gKlxuICogQENvbXBvbmVudCh7XG4gKiAgIHNlbGVjdG9yOiAnbXktYXBwLWRhdGEtc2VsZWN0aW9uJyxcbiAqICAgdGVtcGxhdGU6IGBcbiAqICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gKiAgICAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwiYmFua0N0cmxcIiBwbGFjZWhvbGRlcj1cIkJhbmtcIj5cbiAqICAgICAgICAgPG1hdC1vcHRpb24+XG4gKiAgICAgICAgICAgPG5neC1tYXQtc2VsZWN0LXNlYXJjaCBbZm9ybUNvbnRyb2xdPVwiYmFua0ZpbHRlckN0cmxcIj48L25neC1tYXQtc2VsZWN0LXNlYXJjaD5cbiAqICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICogICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgYmFuayBvZiBmaWx0ZXJlZEJhbmtzIHwgYXN5bmNcIiBbdmFsdWVdPVwiYmFuay5pZFwiPlxuICogICAgICAgICAgIHt7YmFuay5uYW1lfX1cbiAqICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICogICAgICAgPC9tYXQtc2VsZWN0PlxuICogICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gKiAgIGBcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgRGF0YVNlbGVjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAqXG4gKiAgIC8vIGNvbnRyb2wgZm9yIHRoZSBzZWxlY3RlZCBiYW5rXG4gKiAgIHB1YmxpYyBiYW5rQ3RybDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAqICAgLy8gY29udHJvbCBmb3IgdGhlIE1hdFNlbGVjdCBmaWx0ZXIga2V5d29yZFxuICogICBwdWJsaWMgYmFua0ZpbHRlckN0cmw6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gKlxuICogICAvLyBsaXN0IG9mIGJhbmtzXG4gKiAgIHByaXZhdGUgYmFua3M6IEJhbmtbXSA9IFt7bmFtZTogJ0JhbmsgQScsIGlkOiAnQSd9LCB7bmFtZTogJ0JhbmsgQicsIGlkOiAnQid9LCB7bmFtZTogJ0JhbmsgQycsIGlkOiAnQyd9XTtcbiAqICAgLy8gbGlzdCBvZiBiYW5rcyBmaWx0ZXJlZCBieSBzZWFyY2gga2V5d29yZFxuICogICBwdWJsaWMgZmlsdGVyZWRCYW5rczogUmVwbGF5U3ViamVjdDxCYW5rW10+ID0gbmV3IFJlcGxheVN1YmplY3Q8QmFua1tdPigxKTtcbiAqXG4gKiAgIC8vIFN1YmplY3QgdGhhdCBlbWl0cyB3aGVuIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gZGVzdHJveWVkLlxuICogICBwcml2YXRlIF9vbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICpcbiAqXG4gKiAgIG5nT25Jbml0KCkge1xuICogICAgIC8vIGxvYWQgdGhlIGluaXRpYWwgYmFuayBsaXN0XG4gKiAgICAgdGhpcy5maWx0ZXJlZEJhbmtzLm5leHQodGhpcy5iYW5rcy5zbGljZSgpKTtcbiAqICAgICAvLyBsaXN0ZW4gZm9yIHNlYXJjaCBmaWVsZCB2YWx1ZSBjaGFuZ2VzXG4gKiAgICAgdGhpcy5iYW5rRmlsdGVyQ3RybC52YWx1ZUNoYW5nZXNcbiAqICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKVxuICogICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gKiAgICAgICAgIHRoaXMuZmlsdGVyQmFua3MoKTtcbiAqICAgICAgIH0pO1xuICogICB9XG4gKlxuICogICBuZ09uRGVzdHJveSgpIHtcbiAqICAgICB0aGlzLl9vbkRlc3Ryb3kubmV4dCgpO1xuICogICAgIHRoaXMuX29uRGVzdHJveS5jb21wbGV0ZSgpO1xuICogICB9XG4gKlxuICogICBwcml2YXRlIGZpbHRlckJhbmtzKCkge1xuICogICAgIGlmICghdGhpcy5iYW5rcykge1xuICogICAgICAgcmV0dXJuO1xuICogICAgIH1cbiAqXG4gKiAgICAgLy8gZ2V0IHRoZSBzZWFyY2gga2V5d29yZFxuICogICAgIGxldCBzZWFyY2ggPSB0aGlzLmJhbmtGaWx0ZXJDdHJsLnZhbHVlO1xuICogICAgIGlmICghc2VhcmNoKSB7XG4gKiAgICAgICB0aGlzLmZpbHRlcmVkQmFua3MubmV4dCh0aGlzLmJhbmtzLnNsaWNlKCkpO1xuICogICAgICAgcmV0dXJuO1xuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICBzZWFyY2ggPSBzZWFyY2gudG9Mb3dlckNhc2UoKTtcbiAqICAgICB9XG4gKlxuICogICAgIC8vIGZpbHRlciB0aGUgYmFua3NcbiAqICAgICB0aGlzLmZpbHRlcmVkQmFua3MubmV4dChcbiAqICAgICAgIHRoaXMuYmFua3MuZmlsdGVyKGJhbmsgPT4gYmFuay5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2gpID4gLTEpXG4gKiAgICAgKTtcbiAqICAgfVxuICogfVxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtc2VsZWN0LXNlYXJjaCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXQtc2VsZWN0LXNlYXJjaC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21hdC1zZWxlY3Qtc2VhcmNoLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWF0U2VsZWN0U2VhcmNoQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRTZWxlY3RTZWFyY2hDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3JcbntcbiAgLyoqIExhYmVsIG9mIHRoZSBzZWFyY2ggcGxhY2Vob2xkZXIgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXJMYWJlbCA9ICdTZWFyY2gnO1xuXG4gIC8qKiBUeXBlIG9mIHRoZSBzZWFyY2ggaW5wdXQgZmllbGQgKi9cbiAgQElucHV0KCkgdHlwZSA9ICd0ZXh0JztcblxuICAvKiogRm9udC1iYXNlZCBpY29uIHVzZWQgZm9yIGRpc3BsYXlpbmcgQ2xvc2UtSWNvbiAqL1xuICBASW5wdXQoKSBjbG9zZUljb24gPSAnY2xvc2UnO1xuXG4gIC8qKiBTdmctYmFzZWQgaWNvbiB1c2VkIGZvciBkaXNwbGF5aW5nIENsb3NlLUljb24uIElmIHNldCwgY2xvc2VJY29uIGlzIG92ZXJyaWRkZW4gKi9cbiAgQElucHV0KCkgY2xvc2VTdmdJY29uID0gJyc7XG5cbiAgLyoqIExhYmVsIHRvIGJlIHNob3duIHdoZW4gbm8gZW50cmllcyBhcmUgZm91bmQuIFNldCB0byBudWxsIGlmIG5vIG1lc3NhZ2Ugc2hvdWxkIGJlIHNob3duLiAqL1xuICBASW5wdXQoKSBub0VudHJpZXNGb3VuZExhYmVsID0gJ05vdGhpbmcgZm91bmQnO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgc2VhcmNoIGZpZWxkIHNob3VsZCBiZSBjbGVhcmVkIGFmdGVyIHRoZSBkcm9wZG93biBtZW51IGlzIGNsb3NlZC5cbiAgICogVXNlZnVsIGZvciBzZXJ2ZXItc2lkZSBmaWx0ZXJpbmcuIFNlZSBbIzNdKGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRob3N0LWdtYmgvbmd4LW1hdC1zZWxlY3Qtc2VhcmNoL2lzc3Vlcy8zKVxuICAgKi9cbiAgQElucHV0KCkgY2xlYXJTZWFyY2hJbnB1dCA9IHRydWU7XG5cbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyB0aGUgc2VhcmNoLWluLXByb2dyZXNzIGluZGljYXRvciAqL1xuICBASW5wdXQoKSBzZWFyY2hpbmcgPSBmYWxzZTtcblxuICAvKiogRGlzYWJsZXMgaW5pdGlhbCBmb2N1c2luZyBvZiB0aGUgaW5wdXQgZmllbGQgKi9cbiAgQElucHV0KCkgZGlzYWJsZUluaXRpYWxGb2N1cyA9IGZhbHNlO1xuXG4gIC8qKiBFbmFibGUgY2xlYXIgaW5wdXQgb24gZXNjYXBlIHByZXNzZWQgKi9cbiAgQElucHV0KCkgZW5hYmxlQ2xlYXJPbkVzY2FwZVByZXNzZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogUHJldmVudHMgaG9tZSAvIGVuZCBrZXkgYmVpbmcgcHJvcGFnYXRlZCB0byBtYXQtc2VsZWN0LFxuICAgKiBhbGxvd2luZyB0byBtb3ZlIHRoZSBjdXJzb3Igd2l0aGluIHRoZSBzZWFyY2ggaW5wdXQgaW5zdGVhZCBvZiBuYXZpZ2F0aW5nIHRoZSBvcHRpb25zXG4gICAqL1xuICBASW5wdXQoKSBwcmV2ZW50SG9tZUVuZEtleVByb3BhZ2F0aW9uID0gZmFsc2U7XG5cbiAgLyoqIERpc2FibGVzIHNjcm9sbGluZyB0byBhY3RpdmUgb3B0aW9ucyB3aGVuIG9wdGlvbiBsaXN0IGNoYW5nZXMuIFVzZWZ1bCBmb3Igc2VydmVyLXNpZGUgc2VhcmNoICovXG4gIEBJbnB1dCgpIGRpc2FibGVTY3JvbGxUb0FjdGl2ZU9uT3B0aW9uc0NoYW5nZWQgPSBmYWxzZTtcblxuICAvKiogQWRkcyA1MDggc2NyZWVuIHJlYWRlciBzdXBwb3J0IGZvciBzZWFyY2ggYm94ICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbCA9ICdkcm9wZG93biBzZWFyY2gnO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgU2VsZWN0IEFsbCBDaGVja2JveCAoZm9yIG1hdC1zZWxlY3RbbXVsdGk9dHJ1ZV0pICovXG4gIEBJbnB1dCgpIHNob3dUb2dnbGVBbGxDaGVja2JveCA9IGZhbHNlO1xuXG4gIC8qKiBzZWxlY3QgYWxsIGNoZWNrYm94IGNoZWNrZWQgc3RhdGUgKi9cbiAgQElucHV0KCkgdG9nZ2xlQWxsQ2hlY2tib3hDaGVja2VkID0gZmFsc2U7XG5cbiAgLyoqIHNlbGVjdCBhbGwgY2hlY2tib3ggaW5kZXRlcm1pbmF0ZSBzdGF0ZSAqL1xuICBASW5wdXQoKSB0b2dnbGVBbGxDaGVja2JveEluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcblxuICAvKiogRGlzcGxheSBhIG1lc3NhZ2UgaW4gYSB0b29sdGlwIG9uIHRoZSB0b2dnbGUtYWxsIGNoZWNrYm94ICovXG4gIEBJbnB1dCgpIHRvZ2dsZUFsbENoZWNrYm94VG9vbHRpcE1lc3NhZ2UgPSAnJztcblxuICAvKiogRGVmaW5lIHRoZSBwb3NpdGlvbiBvZiB0aGUgdG9vbHRpcCBvbiB0aGUgdG9nZ2xlLWFsbCBjaGVja2JveC4gKi9cbiAgQElucHV0KCkgdG9nZ2xlQWxsQ2hlY2tib3hUb29sdGlwUG9zaXRpb246XG4gICAgfCAnbGVmdCdcbiAgICB8ICdyaWdodCdcbiAgICB8ICdhYm92ZSdcbiAgICB8ICdiZWxvdydcbiAgICB8ICdiZWZvcmUnXG4gICAgfCAnYWZ0ZXInID0gJ2JlbG93JztcblxuICAvKiogU2hvdy9IaWRlIHRoZSBzZWFyY2ggY2xlYXIgYnV0dG9uIG9mIHRoZSBzZWFyY2ggaW5wdXQgKi9cbiAgQElucHV0KCkgaGlkZUNsZWFyU2VhcmNoQnV0dG9uID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFsd2F5cyByZXN0b3JlIHNlbGVjdGVkIG9wdGlvbnMgb24gc2VsZWN0aW9uQ2hhbmdlIGZvciBtb2RlIG11bHRpIChlLmcuIGZvciBsYXp5IGxvYWRpbmcvaW5maW5pdHkgc2Nyb2xsaW5nKS5cbiAgICogRGVmYXVsdHMgdG8gZmFsc2UsIHNvIHNlbGVjdGVkIG9wdGlvbnMgYXJlIG9ubHkgcmVzdG9yZWQgd2hpbGUgZmlsdGVyaW5nIGlzIGFjdGl2ZS5cbiAgICovXG4gIEBJbnB1dCgpIGFsd2F5c1Jlc3RvcmVTZWxlY3RlZE9wdGlvbnNNdWx0aSA9IGZhbHNlO1xuXG4gIC8qKiBPdXRwdXQgZW1pdHRlciB0byBzZW5kIHRvIHBhcmVudCBjb21wb25lbnQgd2l0aCB0aGUgdG9nZ2xlIGFsbCBib29sZWFuICovXG4gIEBPdXRwdXQoKSB0b2dnbGVBbGwgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgc2VhcmNoIGlucHV0IGZpZWxkICovXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaFNlbGVjdElucHV0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgc2VhcmNoU2VsZWN0SW5wdXQ/OiBFbGVtZW50UmVmO1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIHNlYXJjaCBpbnB1dCBmaWVsZCAqL1xuICBAVmlld0NoaWxkKCdpbm5lclNlbGVjdFNlYXJjaCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIGlubmVyU2VsZWN0U2VhcmNoPzogRWxlbWVudFJlZjtcblxuICAvKiogUmVmZXJlbmNlIHRvIGN1c3RvbSBzZWFyY2ggaW5wdXQgY2xlYXIgaWNvbiAqL1xuICBAQ29udGVudENoaWxkKE1hdFNlbGVjdFNlYXJjaENsZWFyRGlyZWN0aXZlKVxuICBjbGVhckljb24/OiBNYXRTZWxlY3RTZWFyY2hDbGVhckRpcmVjdGl2ZTtcblxuICAvKiogUmVmZXJlbmNlIHRvIGN1c3RvbSBubyBlbnRyaWVzIGZvdW5kIGVsZW1lbnQgKi9cbiAgQENvbnRlbnRDaGlsZChNYXRTZWxlY3ROb0VudHJpZXNGb3VuZERpcmVjdGl2ZSlcbiAgbm9FbnRyaWVzRm91bmQ/OiBNYXRTZWxlY3ROb0VudHJpZXNGb3VuZERpcmVjdGl2ZTtcblxuICAvKiogQ3VycmVudCBzZWFyY2ggdmFsdWUgKi9cbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLl9mb3JtQ29udHJvbCBhcyBGb3JtQ29udHJvbCkudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9sYXN0RXh0ZXJuYWxJbnB1dFZhbHVlPzogc3RyaW5nO1xuXG4gIG9uVG91Y2hlZDogKF86IGFueSkgPT4gdm9pZCA9IChfOiBhbnkpID0+IHtcbiAgICAvL1xuICB9O1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIE1hdFNlbGVjdCBvcHRpb25zICovXG4gIHB1YmxpYyBzZXQgX29wdGlvbnMoX29wdGlvbnM6IFF1ZXJ5TGlzdDxNYXRPcHRpb24+KSB7XG4gICAgdGhpcy5fb3B0aW9ucyQubmV4dChfb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IF9vcHRpb25zKCk6IFF1ZXJ5TGlzdDxNYXRPcHRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucyQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBfb3B0aW9ucyQ6IEJlaGF2aW9yU3ViamVjdDxRdWVyeUxpc3Q8TWF0T3B0aW9uPj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFF1ZXJ5TGlzdDxNYXRPcHRpb24+XG4gID4obmV3IFF1ZXJ5TGlzdCgpKTtcblxuICBwcml2YXRlIG9wdGlvbnNMaXN0JDogT2JzZXJ2YWJsZTxNYXRPcHRpb25bXT4gPSB0aGlzLl9vcHRpb25zJC5waXBlKFxuICAgIHN3aXRjaE1hcChfb3B0aW9ucyA9PlxuICAgICAgX29wdGlvbnNcbiAgICAgICAgPyBfb3B0aW9ucy5jaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBtYXAob3B0aW9ucyA9PiBvcHRpb25zLnRvQXJyYXkoKSksXG4gICAgICAgICAgICBzdGFydFdpdGg8TWF0T3B0aW9uW10+KF9vcHRpb25zLnRvQXJyYXkoKSksXG4gICAgICAgICAgKVxuICAgICAgICA6IG9mKFtdKSxcbiAgICApLFxuICApO1xuXG4gIHByaXZhdGUgb3B0aW9uc0xlbmd0aCQ6IE9ic2VydmFibGU8bnVtYmVyPiA9IHRoaXMub3B0aW9uc0xpc3QkLnBpcGUoXG4gICAgbWFwKG9wdGlvbnMgPT4gKG9wdGlvbnMgPyBvcHRpb25zLmxlbmd0aCA6IDApKSxcbiAgKTtcblxuICAvKiogUHJldmlvdXNseSBzZWxlY3RlZCB2YWx1ZXMgd2hlbiB1c2luZyA8bWF0LXNlbGVjdCBbbXVsdGlwbGVdPVwidHJ1ZVwiPiovXG4gIHByaXZhdGUgcHJldmlvdXNTZWxlY3RlZFZhbHVlcz86IGFueVtdO1xuXG4gIHB1YmxpYyBfZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+ID0gbmV3IEZvcm1Db250cm9sPHN0cmluZz4oJycpO1xuXG4gIC8qKiB3aGV0aGVyIHRvIHNob3cgdGhlIG5vIGVudHJpZXMgZm91bmQgbWVzc2FnZSAqL1xuICBwdWJsaWMgX3Nob3dOb0VudHJpZXNGb3VuZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLl9mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMsXG4gICAgdGhpcy5vcHRpb25zTGVuZ3RoJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtfLCBvcHRpb25zTGVuZ3RoXSkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5ub0VudHJpZXNGb3VuZExhYmVsICE9PSAnJyAmJlxuICAgICAgICBvcHRpb25zTGVuZ3RoID09PSB0aGlzLmdldE9wdGlvbnNMZW5ndGhPZmZzZXQoKVxuICAgICAgKTtcbiAgICB9KSxcbiAgKTtcblxuICAvKiogU3ViamVjdCB0aGF0IGVtaXRzIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgYmVlbiBkZXN0cm95ZWQuICovXG4gIHByaXZhdGUgX29uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLyoqIFJlZmVyZW5jZSB0byBhY3RpdmUgZGVzY2VuZGFudCBmb3IgQVJJQSBTdXBwb3J0LiAqL1xuICBwcml2YXRlIGFjdGl2ZURlc2NlbmRhbnQ/OiBIVE1MRWxlbWVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KE1hdFNlbGVjdCkgcHVibGljIG1hdFNlbGVjdDogTWF0U2VsZWN0LFxuICAgIHB1YmxpYyBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfdmlld3BvcnRSdWxlcjogVmlld3BvcnRSdWxlcixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1hdE9wdGlvbikgcHVibGljIG1hdE9wdGlvbjogTWF0T3B0aW9uLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTWF0Rm9ybUZpZWxkKSBwdWJsaWMgbWF0Rm9ybUZpZWxkOiBNYXRGb3JtRmllbGQsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KE1BVF9TRUxFQ1RTRUFSQ0hfREVGQVVMVF9PUFRJT05TKVxuICAgIGRlZmF1bHRPcHRpb25zOiBNYXRTZWxlY3RTZWFyY2hPcHRpb25zLFxuICApIHtcbiAgICB0aGlzLmFwcGx5RGVmYXVsdE9wdGlvbnMoZGVmYXVsdE9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseURlZmF1bHRPcHRpb25zKGRlZmF1bHRPcHRpb25zOiBNYXRTZWxlY3RTZWFyY2hPcHRpb25zKSB7XG4gICAgaWYgKCFkZWZhdWx0T3B0aW9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBjb25maWd1cmFibGVEZWZhdWx0T3B0aW9ucykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBpZiAoZGVmYXVsdE9wdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAodGhpc1trZXldIGFzIGFueSkgPSBkZWZhdWx0T3B0aW9uc1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIHNldCBjdXN0b20gbWF0LW9wdGlvbiBjbGFzcyBpZiB0aGUgY29tcG9uZW50IHdhcyBwbGFjZWQgaW5zaWRlIGEgbWF0LW9wdGlvblxuICAgIGlmICh0aGlzLm1hdE9wdGlvbikge1xuICAgICAgdGhpcy5tYXRPcHRpb24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5tYXRPcHRpb25cbiAgICAgICAgLl9nZXRIb3N0RWxlbWVudCgpXG4gICAgICAgIC5jbGFzc0xpc3QuYWRkKCdjb250YWlucy1tYXQtc2VsZWN0LXNlYXJjaCcpO1xuICAgICAgLy90aGlzLm1hdE9wdGlvbi5fZ2V0SG9zdEVsZW1lbnQoKS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTsgLy8gdGhpcyBwcm92b2tlIGFuIGVycm9yXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICc8bmd4LW1hdC1zZWxlY3Qtc2VhcmNoPiBtdXN0IGJlIHBsYWNlZCBpbnNpZGUgYSA8bWF0LW9wdGlvbj4gZWxlbWVudCcsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHdoZW4gdGhlIHNlbGVjdCBkcm9wZG93biBwYW5lbCBpcyBvcGVuZWQgb3IgY2xvc2VkXG4gICAgdGhpcy5tYXRTZWxlY3Qub3BlbmVkQ2hhbmdlXG4gICAgICAucGlwZShkZWxheSgxKSwgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSkpXG4gICAgICAuc3Vic2NyaWJlKG9wZW5lZCA9PiB7XG4gICAgICAgIGlmIChvcGVuZWQpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKTtcbiAgICAgICAgICAvLyBmb2N1cyB0aGUgc2VhcmNoIGZpZWxkIHdoZW4gb3BlbmluZ1xuICAgICAgICAgIGlmICghdGhpcy5kaXNhYmxlSW5pdGlhbEZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjbGVhciBpdCB3aGVuIGNsb3NpbmdcbiAgICAgICAgICBpZiAodGhpcy5jbGVhclNlYXJjaElucHV0KSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNldCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAvLyBzZXQgdGhlIGZpcnN0IGl0ZW0gYWN0aXZlIGFmdGVyIHRoZSBvcHRpb25zIGNoYW5nZWRcbiAgICB0aGlzLm1hdFNlbGVjdC5vcGVuZWRDaGFuZ2VcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBzd2l0Y2hNYXAoXyA9PiB7XG4gICAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHRoaXMubWF0U2VsZWN0Lm9wdGlvbnM7XG5cbiAgICAgICAgICAvLyBDbG9zdXJlIHZhcmlhYmxlIGZvciB0cmFja2luZyB0aGUgbW9zdCByZWNlbnQgZmlyc3Qgb3B0aW9uLlxuICAgICAgICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIGF2b2lkIGNhdXNpbmcgdGhlIGxpc3QgdG9cbiAgICAgICAgICAvLyBzY3JvbGwgdG8gdGhlIHRvcCB3aGVuIG9wdGlvbnMgYXJlIGFkZGVkIHRvIHRoZSBib3R0b20gb2ZcbiAgICAgICAgICAvLyB0aGUgbGlzdCAoZWc6IGluZmluaXRlIHNjcm9sbCksIHdlIGNvbXBhcmUgb25seVxuICAgICAgICAgIC8vIHRoZSBjaGFuZ2VzIHRvIHRoZSBmaXJzdCBvcHRpb25zIHRvIGRldGVybWluZSBpZiB3ZVxuICAgICAgICAgIC8vIHNob3VsZCBzZXQgdGhlIGZpcnN0IGl0ZW0gYXMgYWN0aXZlLlxuICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgdW5uZWNlc3Nhcnkgc2Nyb2xsaW5nIHRvIHRoZSB0b3Agb2YgdGhlIGxpc3RcbiAgICAgICAgICAvLyB3aGVuIG9wdGlvbnMgYXJlIGFwcGVuZGVkLCBidXQgYWxsb3dzIHRoZSBmaXJzdCBpdGVtXG4gICAgICAgICAgLy8gaW4gdGhlIGxpc3QgdG8gYmUgc2V0IGFzIGFjdGl2ZSBieSBkZWZhdWx0IHdoZW4gdGhlcmVcbiAgICAgICAgICAvLyBpcyBubyBhY3RpdmUgc2VsZWN0aW9uXG4gICAgICAgICAgbGV0IHByZXZpb3VzRmlyc3RPcHRpb24gPVxuICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy50b0FycmF5KClbdGhpcy5nZXRPcHRpb25zTGVuZ3RoT2Zmc2V0KCldO1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuY2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgLy8gYXZvaWQgXCJleHByZXNzaW9uIGhhcyBiZWVuIGNoYW5nZWRcIiBlcnJvclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBRdWVyeUxpc3QgdG8gYW4gYXJyYXlcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fb3B0aW9ucy50b0FycmF5KCk7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGUgdHJ1ZSBmaXJzdCBpdGVtIGlzIG9mZnNldCBieSAxXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEZpcnN0T3B0aW9uID1cbiAgICAgICAgICAgICAgICAgIG9wdGlvbnNbdGhpcy5nZXRPcHRpb25zTGVuZ3RoT2Zmc2V0KCldO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5TWFuYWdlciA9IHRoaXMubWF0U2VsZWN0Ll9rZXlNYW5hZ2VyO1xuICAgICAgICAgICAgICAgIGlmIChrZXlNYW5hZ2VyICYmIHRoaXMubWF0U2VsZWN0LnBhbmVsT3Blbikge1xuICAgICAgICAgICAgICAgICAgLy8gc2V0IGZpcnN0IGl0ZW0gYWN0aXZlIGFuZCBpbnB1dCB3aWR0aFxuXG4gICAgICAgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGZpcnN0IG9wdGlvbiBpbiB0aGVzZSBjaGFuZ2VzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBwcmV2aW91cy5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0T3B0aW9uSXNDaGFuZ2VkID0gIXRoaXMubWF0U2VsZWN0LmNvbXBhcmVXaXRoKFxuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0ZpcnN0T3B0aW9uLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RPcHRpb24sXG4gICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAvLyBDQVNFOiBUaGUgZmlyc3Qgb3B0aW9uIGlzIGRpZmZlcmVudCBub3cuXG4gICAgICAgICAgICAgICAgICAvLyBJbmRpY2lhdGVzIHdlIHNob3VsZCBzZXQgaXQgYXMgYWN0aXZlIGFuZCBzY3JvbGwgdG8gdGhlIHRvcC5cbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RPcHRpb25Jc0NoYW5nZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgIWtleU1hbmFnZXIuYWN0aXZlSXRlbSB8fFxuICAgICAgICAgICAgICAgICAgICAhb3B0aW9ucy5maW5kKG9wdGlvbiA9PlxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0U2VsZWN0LmNvbXBhcmVXaXRoKG9wdGlvbiwga2V5TWFuYWdlci5hY3RpdmVJdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleU1hbmFnZXIuc2V0Rmlyc3RJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIC8vIHdhaXQgZm9yIHBhbmVsIHdpZHRoIGNoYW5nZXNcbiAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBvdXIgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgcHJldmlvdXNGaXJzdE9wdGlvbiA9IGN1cnJlbnRGaXJzdE9wdGlvbjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgLy8gYWRkIG9yIHJlbW92ZSBjc3MgY2xhc3MgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdG8gc2hvdyB0aGUgbm8gZW50cmllcyBmb3VuZCBtZXNzYWdlXG4gICAgLy8gbm90ZTogdGhpcyBpcyBoYWNreVxuICAgIHRoaXMuX3Nob3dOb0VudHJpZXNGb3VuZCRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKVxuICAgICAgLnN1YnNjcmliZShzaG93Tm9FbnRyaWVzRm91bmQgPT4ge1xuICAgICAgICAvLyBzZXQgbm8gZW50cmllcyBmb3VuZCBjbGFzcyBvbiBtYXQgb3B0aW9uXG4gICAgICAgIGlmICh0aGlzLm1hdE9wdGlvbikge1xuICAgICAgICAgIGlmIChzaG93Tm9FbnRyaWVzRm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMubWF0T3B0aW9uXG4gICAgICAgICAgICAgIC5fZ2V0SG9zdEVsZW1lbnQoKVxuICAgICAgICAgICAgICAuY2xhc3NMaXN0LmFkZCgnbWF0LXNlbGVjdC1zZWFyY2gtbm8tZW50cmllcy1mb3VuZCcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1hdE9wdGlvblxuICAgICAgICAgICAgICAuX2dldEhvc3RFbGVtZW50KClcbiAgICAgICAgICAgICAgLmNsYXNzTGlzdC5yZW1vdmUoJ21hdC1zZWxlY3Qtc2VhcmNoLW5vLWVudHJpZXMtZm91bmQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgLy8gcmVzaXplIHRoZSBpbnB1dCB3aWR0aCB3aGVuIHRoZSB2aWV3cG9ydCBpcyByZXNpemVkLCBpLmUuIHRoZSB0cmlnZ2VyIHdpZHRoIGNvdWxkIHBvdGVudGlhbGx5IGJlIHJlc2l6ZWRcbiAgICB0aGlzLl92aWV3cG9ydFJ1bGVyXG4gICAgICAuY2hhbmdlKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm1hdFNlbGVjdC5wYW5lbE9wZW4pIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmluaXRNdWx0aXBsZUhhbmRsaW5nKCk7XG5cbiAgICB0aGlzLm9wdGlvbnNMaXN0JC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgLy8gdXBkYXRlIHZpZXcgd2hlbiBhdmFpbGFibGUgb3B0aW9ucyBjaGFuZ2VcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBfZW1pdFNlbGVjdEFsbEJvb2xlYW5Ub1BhcmVudChzdGF0ZTogYm9vbGVhbikge1xuICAgIHRoaXMudG9nZ2xlQWxsLmVtaXQoc3RhdGUpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fb25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLl9vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxuXG4gIF9pc1RvZ2dsZUFsbENoZWNrYm94VmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tYXRTZWxlY3QubXVsdGlwbGUgJiYgdGhpcy5zaG93VG9nZ2xlQWxsQ2hlY2tib3g7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUga2V5IGRvd24gZXZlbnQgd2l0aCBNYXRTZWxlY3QuXG4gICAqIEFsbG93cyBlLmcuIHNlbGVjdGluZyB3aXRoIGVudGVyIGtleSwgbmF2aWdhdGlvbiB3aXRoIGFycm93IGtleXMsIGV0Yy5cbiAgICogQHBhcmFtIGV2ZW50XG4gICAqL1xuICBfaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIC8vIFByZXZlbnQgcHJvcGFnYXRpb24gZm9yIGFsbCBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBpbiBvcmRlciB0byBhdm9pZCBzZWxlY3Rpb24gaXNzdWVzXG4gICAgaWYgKFxuICAgICAgKGV2ZW50LmtleSAmJiBldmVudC5rZXkubGVuZ3RoID09PSAxKSB8fFxuICAgICAgKGV2ZW50LmtleUNvZGUgPj0gQSAmJiBldmVudC5rZXlDb2RlIDw9IFopIHx8XG4gICAgICAoZXZlbnQua2V5Q29kZSA+PSBaRVJPICYmIGV2ZW50LmtleUNvZGUgPD0gTklORSkgfHxcbiAgICAgIGV2ZW50LmtleUNvZGUgPT09IFNQQUNFIHx8XG4gICAgICAodGhpcy5wcmV2ZW50SG9tZUVuZEtleVByb3BhZ2F0aW9uICYmXG4gICAgICAgIChldmVudC5rZXlDb2RlID09PSBIT01FIHx8IGV2ZW50LmtleUNvZGUgPT09IEVORCkpXG4gICAgKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYXRTZWxlY3QubXVsdGlwbGUgJiYgZXZlbnQua2V5ICYmIGV2ZW50LmtleUNvZGUgPT09IEVOVEVSKSB7XG4gICAgICAvLyBSZWdhaW4gZm9jdXMgYWZ0ZXIgbXVsdGlzZWxlY3QsIHNvIHdlIGNhbiBmdXJ0aGVyIHR5cGVcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fZm9jdXMoKSk7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlIGlmIGNsaWNrIEVzY2FwZSwgaWYgaW5wdXQgaXMgZW1wdHksIGNsb3NlIHRoZSBkcm9wZG93biwgaWYgbm90LCBlbXB0eSBvdXQgdGhlIHNlYXJjaCBmaWVsZFxuICAgIGlmIChcbiAgICAgIHRoaXMuZW5hYmxlQ2xlYXJPbkVzY2FwZVByZXNzZWQgPT09IHRydWUgJiZcbiAgICAgIGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRSAmJlxuICAgICAgdGhpcy52YWx1ZVxuICAgICkge1xuICAgICAgdGhpcy5fcmVzZXQodHJ1ZSk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUga2V5IHVwIGV2ZW50IHdpdGggTWF0U2VsZWN0LlxuICAgKiBBbGxvd3MgZS5nLiB0aGUgYW5ub3VuY2luZyBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZURlc2NlbmRhbnQgYnkgc2NyZWVuIHJlYWRlcnMuXG4gICAqL1xuICBfaGFuZGxlS2V5dXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gVVBfQVJST1cgfHwgZXZlbnQua2V5Q29kZSA9PT0gRE9XTl9BUlJPVykge1xuICAgICAgY29uc3QgYXJpYUFjdGl2ZURlc2NlbmRhbnRJZCA9IHRoaXMubWF0U2VsZWN0Ll9nZXRBcmlhQWN0aXZlRGVzY2VuZGFudCgpO1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9vcHRpb25zXG4gICAgICAgIC50b0FycmF5KClcbiAgICAgICAgLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IGFyaWFBY3RpdmVEZXNjZW5kYW50SWQpO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLnVuc2VsZWN0QWN0aXZlRGVzY2VuZGFudCgpO1xuXG4gICAgICAgIGNvbnN0IHRlbXAgPSB0aGlzLl9vcHRpb25zLnRvQXJyYXkoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50ID0gdGVtcFtpbmRleF0uX2dldEhvc3RFbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsICd0cnVlJyk7XG5cbiAgICAgICAgdGhpcy5zZWFyY2hTZWxlY3RJbnB1dD8ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsXG4gICAgICAgICAgYXJpYUFjdGl2ZURlc2NlbmRhbnRJZCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sYXN0RXh0ZXJuYWxJbnB1dFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5fZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy51bnNlbGVjdEFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4gdm9pZCkge1xuICAgIHRoaXMuX2Zvcm1Db250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gdGhpcy5fbGFzdEV4dGVybmFsSW5wdXRWYWx1ZSksXG4gICAgICAgIHRhcCgoKSA9PiAodGhpcy5fbGFzdEV4dGVybmFsSW5wdXRWYWx1ZSA9IHVuZGVmaW5lZCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoZm4pO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzZXMgdGhlIHNlYXJjaCBpbnB1dCBmaWVsZFxuICAgKi9cbiAgcHVibGljIF9mb2N1cygpIHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoU2VsZWN0SW5wdXQgfHwgIXRoaXMubWF0U2VsZWN0LnBhbmVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIHNhdmUgYW5kIHJlc3RvcmUgc2Nyb2xsVG9wIG9mIHBhbmVsLCBzaW5jZSBpdCB3aWxsIGJlIHJlc2V0IGJ5IGZvY3VzKClcbiAgICAvLyBub3RlOiB0aGlzIGlzIGhhY2t5XG4gICAgY29uc3QgcGFuZWwgPSB0aGlzLm1hdFNlbGVjdC5wYW5lbC5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHNjcm9sbFRvcCA9IHBhbmVsLnNjcm9sbFRvcDtcblxuICAgIC8vIGZvY3VzXG4gICAgdGhpcy5zZWFyY2hTZWxlY3RJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cbiAgICBwYW5lbC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBjdXJyZW50IHNlYXJjaCB2YWx1ZVxuICAgKiBAcGFyYW0gZm9jdXMgd2hldGhlciB0byBmb2N1cyBhZnRlciByZXNldHRpbmdcbiAgICovXG4gIHB1YmxpYyBfcmVzZXQoZm9jdXM/OiBib29sZWFuKSB7XG4gICAgdGhpcy5fZm9ybUNvbnRyb2wuc2V0VmFsdWUoJycpO1xuICAgIGlmIChmb2N1cykge1xuICAgICAgdGhpcy5fZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgaGFuZGxpbmcgPG1hdC1zZWxlY3QgW211bHRpcGxlXT1cInRydWVcIj5cbiAgICogTm90ZTogdG8gaW1wcm92ZSB0aGlzIGNvZGUsIG1hdC1zZWxlY3Qgc2hvdWxkIGJlIGV4dGVuZGVkIHRvIGFsbG93IGRpc2FibGluZyByZXNldHRpbmcgdGhlIHNlbGVjdGlvbiB3aGlsZSBmaWx0ZXJpbmcuXG4gICAqL1xuICBwcml2YXRlIGluaXRNdWx0aXBsZUhhbmRsaW5nKCkge1xuICAgIGlmICghdGhpcy5tYXRTZWxlY3QubmdDb250cm9sKSB7XG4gICAgICBpZiAodGhpcy5tYXRTZWxlY3QubXVsdGlwbGUpIHtcbiAgICAgICAgLy8gbm90ZTogdGhlIGFjY2VzcyB0byBtYXRTZWxlY3QubmdDb250cm9sIChpbnN0ZWFkIG9mIG1hdFNlbGVjdC52YWx1ZSAvIG1hdFNlbGVjdC52YWx1ZUNoYW5nZXMpXG4gICAgICAgIC8vIGlzIG5lY2Vzc2FyeSB0byBwcm9wZXJseSB3b3JrIGluIG11bHRpLXNlbGVjdGlvbiBtb2RlLlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICd0aGUgbWF0LXNlbGVjdCBjb250YWluaW5nIG5neC1tYXQtc2VsZWN0LXNlYXJjaCBtdXN0IGhhdmUgYSBuZ01vZGVsIG9yIGZvcm1Db250cm9sIGRpcmVjdGl2ZSB3aGVuIG11bHRpcGxlPXRydWUnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBpZiA8bWF0LXNlbGVjdCBbbXVsdGlwbGVdPVwidHJ1ZVwiPlxuICAgIC8vIHN0b3JlIHByZXZpb3VzbHkgc2VsZWN0ZWQgdmFsdWVzIGFuZCByZXN0b3JlIHRoZW0gd2hlbiB0aGV5IGFyZSBkZXNlbGVjdGVkXG4gICAgLy8gYmVjYXVzZSB0aGUgb3B0aW9uIGlzIG5vdCBhdmFpbGFibGUgd2hpbGUgd2UgYXJlIGN1cnJlbnRseSBmaWx0ZXJpbmdcbiAgICB0aGlzLnByZXZpb3VzU2VsZWN0ZWRWYWx1ZXMgPSB0aGlzLm1hdFNlbGVjdC5uZ0NvbnRyb2wudmFsdWU7XG5cbiAgICB0aGlzLm1hdFNlbGVjdC5uZ0NvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSkpXG4gICAgICAuc3Vic2NyaWJlKHZhbHVlcyA9PiB7XG4gICAgICAgIGxldCByZXN0b3JlU2VsZWN0ZWRWYWx1ZXMgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMubWF0U2VsZWN0Lm11bHRpcGxlKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKHRoaXMuYWx3YXlzUmVzdG9yZVNlbGVjdGVkT3B0aW9uc011bHRpIHx8XG4gICAgICAgICAgICAgICh0aGlzLl9mb3JtQ29udHJvbC52YWx1ZSAmJiB0aGlzLl9mb3JtQ29udHJvbC52YWx1ZS5sZW5ndGgpKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2aW91c1NlbGVjdGVkVmFsdWVzICYmXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KHRoaXMucHJldmlvdXNTZWxlY3RlZFZhbHVlcylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICghdmFsdWVzIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgdmFsdWVzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvcHRpb25WYWx1ZXMgPSB0aGlzLm1hdFNlbGVjdC5vcHRpb25zLm1hcChcbiAgICAgICAgICAgICAgb3B0aW9uID0+IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzU2VsZWN0ZWRWYWx1ZXMuZm9yRWFjaChwcmV2aW91c1ZhbHVlID0+IHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICF2YWx1ZXMuc29tZSgodjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgdGhpcy5tYXRTZWxlY3QuY29tcGFyZVdpdGgodiwgcHJldmlvdXNWYWx1ZSksXG4gICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgICFvcHRpb25WYWx1ZXMuc29tZSh2ID0+XG4gICAgICAgICAgICAgICAgICB0aGlzLm1hdFNlbGVjdC5jb21wYXJlV2l0aCh2LCBwcmV2aW91c1ZhbHVlKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGlmIGEgdmFsdWUgdGhhdCB3YXMgc2VsZWN0ZWQgYmVmb3JlIGlzIGRlc2VsZWN0ZWQgYW5kIG5vdCBmb3VuZCBpbiB0aGUgb3B0aW9ucywgaXQgd2FzIGRlc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAvLyBkdWUgdG8gdGhlIGZpbHRlcmluZywgc28gd2UgcmVzdG9yZSBpdC5cbiAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChwcmV2aW91c1ZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXN0b3JlU2VsZWN0ZWRWYWx1ZXMgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmV2aW91c1NlbGVjdGVkVmFsdWVzID0gdmFsdWVzO1xuXG4gICAgICAgIGlmIChyZXN0b3JlU2VsZWN0ZWRWYWx1ZXMpIHtcbiAgICAgICAgICB0aGlzLm1hdFNlbGVjdC5fb25DaGFuZ2UodmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogIFNldCB0aGUgd2lkdGggb2YgdGhlIGlubmVyU2VsZWN0U2VhcmNoIHRvIGZpdCBldmVuIGN1c3RvbSBzY3JvbGxiYXJzXG4gICAqICBBbmQgc3VwcG9ydCBhbGwgT3BlcmF0aW9uIFN5c3RlbXNcbiAgICovXG4gIHB1YmxpYyB1cGRhdGVJbnB1dFdpZHRoKCkge1xuICAgIGlmICghdGhpcy5pbm5lclNlbGVjdFNlYXJjaCB8fCAhdGhpcy5pbm5lclNlbGVjdFNlYXJjaC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuaW5uZXJTZWxlY3RTZWFyY2gubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICBsZXQgcGFuZWxFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgICAgd2hpbGUgKChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KSkge1xuICAgICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ21hdC1zZWxlY3QtcGFuZWwnKSkge1xuICAgICAgICAgIHBhbmVsRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwYW5lbEVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5pbm5lclNlbGVjdFNlYXJjaC5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID1cbiAgICAgICAgICBwYW5lbEVsZW1lbnQuY2xpZW50V2lkdGggKyAncHgnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIG9mZnNldCB0byBsZW5ndGggdGhhdCBjYW4gYmUgY2F1c2VkIGJ5IHRoZSBvcHRpb25hbCBtYXRPcHRpb24gdXNlZCBhcyBhIHNlYXJjaCBpbnB1dC5cbiAgICovXG4gIHByaXZhdGUgZ2V0T3B0aW9uc0xlbmd0aE9mZnNldCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLm1hdE9wdGlvbikge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdW5zZWxlY3RBY3RpdmVEZXNjZW5kYW50KCkge1xuICAgIHRoaXMuYWN0aXZlRGVzY2VuZGFudD8ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJyk7XG4gICAgdGhpcy5zZWFyY2hTZWxlY3RJbnB1dD8ubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXG4gICAgICAnYXJpYS1hY3RpdmVkZXNjZW5kYW50JyxcbiAgICApO1xuICB9XG59XG4iLCI8IS0tXG5Db3B5cmlnaHQgKGMpIDIwMTggQml0aG9zdCBHbWJIIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cblVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG5mb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4tLT5cbjwhLS0gUGxhY2Vob2xkZXIgdG8gYWRqdXN0IHZlcnRpY2FsIG9mZnNldCBvZiB0aGUgbWF0LW9wdGlvbiBlbGVtZW50cyAtLT5cbjxpbnB1dCBtYXRJbnB1dCBjbGFzcz1cIm1hdC1zZWxlY3Qtc2VhcmNoLWlucHV0IG1hdC1zZWxlY3Qtc2VhcmNoLWhpZGRlblwiIC8+XG5cbjwhLS0gTm90ZTogdGhlICBtYXQtZGF0ZXBpY2tlci1jb250ZW50IG1hdC10YWItaGVhZGVyIGFyZSBuZWVkZWQgdG8gaW5oZXJpdCB0aGUgbWF0ZXJpYWwgdGhlbWUgY29sb3JzLCBzZWUgUFIgIzIyIC0tPlxuPGRpdlxuICAjaW5uZXJTZWxlY3RTZWFyY2hcbiAgY2xhc3M9XCJtYXQtc2VsZWN0LXNlYXJjaC1pbm5lciBtYXQtdHlwb2dyYXBoeSBtYXQtZGF0ZXBpY2tlci1jb250ZW50IG1hdC10YWItaGVhZGVyXCJcbiAgW25nQ2xhc3NdPVwie1xuICAgICdtYXQtc2VsZWN0LXNlYXJjaC1pbm5lci1tdWx0aXBsZSc6IG1hdFNlbGVjdC5tdWx0aXBsZSxcbiAgICAnbWF0LXNlbGVjdC1zZWFyY2gtaW5uZXItdG9nZ2xlLWFsbCc6IF9pc1RvZ2dsZUFsbENoZWNrYm94VmlzaWJsZSgpLFxuICB9XCJcbj5cbiAgPG1hdC1jaGVja2JveFxuICAgICpuZ0lmPVwiX2lzVG9nZ2xlQWxsQ2hlY2tib3hWaXNpYmxlKClcIlxuICAgIFtjb2xvcl09XCJtYXRGb3JtRmllbGQuY29sb3JcIlxuICAgIGNsYXNzPVwibWF0LXNlbGVjdC1zZWFyY2gtdG9nZ2xlLWFsbC1jaGVja2JveFwiXG4gICAgW2NoZWNrZWRdPVwidG9nZ2xlQWxsQ2hlY2tib3hDaGVja2VkXCJcbiAgICBbaW5kZXRlcm1pbmF0ZV09XCJ0b2dnbGVBbGxDaGVja2JveEluZGV0ZXJtaW5hdGVcIlxuICAgIFttYXRUb29sdGlwXT1cInRvZ2dsZUFsbENoZWNrYm94VG9vbHRpcE1lc3NhZ2VcIlxuICAgIG1hdFRvb2x0aXBDbGFzcz1cIm5neC1tYXQtc2VsZWN0LXNlYXJjaC10b2dnbGUtYWxsLXRvb2x0aXBcIlxuICAgIFttYXRUb29sdGlwUG9zaXRpb25dPVwidG9nZ2xlQWxsQ2hlY2tib3hUb29sdGlwUG9zaXRpb25cIlxuICAgIChjaGFuZ2UpPVwiX2VtaXRTZWxlY3RBbGxCb29sZWFuVG9QYXJlbnQoJGV2ZW50LmNoZWNrZWQpXCJcbiAgPjwvbWF0LWNoZWNrYm94PlxuXG4gIDxpbnB1dFxuICAgIGNsYXNzPVwibWF0LXNlbGVjdC1zZWFyY2gtaW5wdXRcIlxuICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgW3R5cGVdPVwidHlwZVwiXG4gICAgW2Zvcm1Db250cm9sXT1cIl9mb3JtQ29udHJvbFwiXG4gICAgI3NlYXJjaFNlbGVjdElucHV0XG4gICAgKGtleWRvd24pPVwiX2hhbmRsZUtleWRvd24oJGV2ZW50KVwiXG4gICAgKGtleXVwKT1cIl9oYW5kbGVLZXl1cCgkZXZlbnQpXCJcbiAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyTGFiZWxcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgLz5cbiAgPG1hdC1pY29uICpuZ0lmPVwidmFsdWUgPT09ICcnICYmICFzZWFyY2hpbmdcIiBjbGFzcz1cInN1ZmZpeFwiPnNlYXJjaDwvbWF0LWljb24+XG4gIDxtYXQtc3Bpbm5lclxuICAgICpuZ0lmPVwic2VhcmNoaW5nXCJcbiAgICBjbGFzcz1cIm1hdC1zZWxlY3Qtc2VhcmNoLXNwaW5uZXJcIlxuICAgIGRpYW1ldGVyPVwiMTZcIlxuICA+PC9tYXQtc3Bpbm5lcj5cblxuICA8YnV0dG9uXG4gICAgKm5nSWY9XCIhaGlkZUNsZWFyU2VhcmNoQnV0dG9uICYmIHZhbHVlICYmICFzZWFyY2hpbmdcIlxuICAgIG1hdC1pY29uLWJ1dHRvblxuICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXG4gICAgKGNsaWNrKT1cIl9yZXNldCh0cnVlKVwiXG4gICAgY2xhc3M9XCJtYXQtc2VsZWN0LXNlYXJjaC1jbGVhclwiXG4gID5cbiAgICA8bmctY29udGVudFxuICAgICAgKm5nSWY9XCJjbGVhckljb247IGVsc2UgZGVmYXVsdEljb25cIlxuICAgICAgc2VsZWN0PVwiW21hdFNlbGVjdFNlYXJjaENsZWFyXVwiXG4gICAgPjwvbmctY29udGVudD5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRJY29uPlxuICAgICAgPG1hdC1pY29uIFtzdmdJY29uXT1cImNsb3NlU3ZnSWNvblwiPlxuICAgICAgICB7eyAhY2xvc2VTdmdJY29uID8gY2xvc2VJY29uIDogbnVsbCB9fVxuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2J1dHRvbj5cblxuICA8bmctY29udGVudCBzZWxlY3Q9XCIubWF0LXNlbGVjdC1zZWFyY2gtY3VzdG9tLWhlYWRlci1jb250ZW50XCI+PC9uZy1jb250ZW50PlxuXG4gIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuPC9kaXY+XG5cbjxkaXZcbiAgKm5nSWY9XCJfc2hvd05vRW50cmllc0ZvdW5kJCB8IGFzeW5jXCJcbiAgY2xhc3M9XCJtYXQtc2VsZWN0LXNlYXJjaC1uby1lbnRyaWVzLWZvdW5kXCJcbj5cbiAgPG5nLWNvbnRlbnRcbiAgICAqbmdJZj1cIm5vRW50cmllc0ZvdW5kOyBlbHNlIGRlZmF1bHROb0VudHJpZXNGb3VuZFwiXG4gICAgc2VsZWN0PVwiW21hdFNlbGVjdE5vRW50cmllc0ZvdW5kXVwiXG4gID48L25nLWNvbnRlbnQ+XG4gIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdE5vRW50cmllc0ZvdW5kPnt7IG5vRW50cmllc0ZvdW5kTGFiZWwgfX08L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=