@ardium-ui/ui 1.0.3 → 2.0.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 (445) hide show
  1. package/README.md +25 -25
  2. package/esm2022/lib/_internal/boolean-component.mjs +28 -42
  3. package/esm2022/lib/_internal/clear-button/clear-button.component.mjs +5 -5
  4. package/esm2022/lib/_internal/clear-button/clear-button.module.mjs +5 -5
  5. package/esm2022/lib/_internal/disablable-component.mjs +24 -22
  6. package/esm2022/lib/_internal/focusable-component.mjs +12 -25
  7. package/esm2022/lib/_internal/item-storages/dropdown-item-storage.mjs +172 -169
  8. package/esm2022/lib/_internal/item-storages/simple-item-storage.mjs +115 -120
  9. package/esm2022/lib/_internal/item-storages/simplest-item-storage.mjs +56 -53
  10. package/esm2022/lib/_internal/models/pagination.model.mjs +72 -106
  11. package/esm2022/lib/_internal/ngmodel-component.mjs +5 -5
  12. package/esm2022/lib/_internal/queue.mjs +1 -1
  13. package/esm2022/lib/_internal/selectable-list-component.mjs +74 -98
  14. package/esm2022/lib/badge/badge.directive.mjs +70 -99
  15. package/esm2022/lib/badge/badge.module.mjs +5 -5
  16. package/esm2022/lib/badge/badge.types.mjs +1 -1
  17. package/esm2022/lib/badge/index.mjs +4 -0
  18. package/esm2022/lib/buttons/_button-base.mjs +13 -35
  19. package/esm2022/lib/buttons/button/button.component.mjs +22 -37
  20. package/esm2022/lib/buttons/button/button.module.mjs +5 -5
  21. package/esm2022/lib/buttons/button/index.mjs +3 -0
  22. package/esm2022/lib/buttons/fab/fab.component.mjs +16 -28
  23. package/esm2022/lib/buttons/fab/fab.module.mjs +5 -5
  24. package/esm2022/lib/buttons/fab/index.mjs +3 -0
  25. package/esm2022/lib/buttons/general-button.types.mjs +1 -1
  26. package/esm2022/lib/buttons/icon-button/icon-button.component.mjs +17 -25
  27. package/esm2022/lib/buttons/icon-button/icon-button.module.mjs +5 -5
  28. package/esm2022/lib/buttons/icon-button/index.mjs +3 -0
  29. package/esm2022/lib/card/card.children.mjs +32 -33
  30. package/esm2022/lib/card/card.component.mjs +14 -17
  31. package/esm2022/lib/card/card.module.mjs +5 -5
  32. package/esm2022/lib/card/card.types.mjs +1 -1
  33. package/esm2022/lib/card/index.mjs +5 -0
  34. package/esm2022/lib/checkbox/checkbox.component.mjs +33 -46
  35. package/esm2022/lib/checkbox/checkbox.module.mjs +5 -5
  36. package/esm2022/lib/checkbox/checkbox.types.mjs +1 -1
  37. package/esm2022/lib/checkbox/index.mjs +4 -0
  38. package/esm2022/lib/checkbox-list/checkbox-list.component.mjs +31 -57
  39. package/esm2022/lib/checkbox-list/checkbox-list.module.mjs +5 -5
  40. package/esm2022/lib/checkbox-list/checkbox-list.types.mjs +1 -1
  41. package/esm2022/lib/checkbox-list/index.mjs +4 -0
  42. package/esm2022/lib/chip/chip.component.mjs +22 -42
  43. package/esm2022/lib/chip/chip.module.mjs +5 -5
  44. package/esm2022/lib/chip/deletable-chip/deletable-chip.component.mjs +28 -53
  45. package/esm2022/lib/chip/index.mjs +5 -0
  46. package/esm2022/lib/chip/selectable-chip/selectable-chip.component.mjs +25 -49
  47. package/esm2022/lib/color/color-display/color-display.component.mjs +15 -32
  48. package/esm2022/lib/color/color-display/color-display.module.mjs +5 -5
  49. package/esm2022/lib/color/color-display/color-display.types.mjs +1 -1
  50. package/esm2022/lib/color/color-display/index.mjs +4 -0
  51. package/esm2022/lib/color/color-picker/color-picker.types.mjs +1 -1
  52. package/esm2022/lib/dialog/dialog.component.mjs +54 -130
  53. package/esm2022/lib/dialog/dialog.directives.mjs +4 -4
  54. package/esm2022/lib/dialog/dialog.module.mjs +5 -5
  55. package/esm2022/lib/dialog/dialog.types.mjs +1 -1
  56. package/esm2022/lib/dialog/index.mjs +5 -0
  57. package/esm2022/lib/divider/divider.component.mjs +9 -14
  58. package/esm2022/lib/divider/divider.module.mjs +5 -5
  59. package/esm2022/lib/divider/index.mjs +3 -0
  60. package/esm2022/lib/dropdown-panel/dropdown-panel.component.mjs +40 -59
  61. package/esm2022/lib/dropdown-panel/dropdown-panel.module.mjs +5 -5
  62. package/esm2022/lib/dropdown-panel/dropdown-panel.types.mjs +1 -1
  63. package/esm2022/lib/dropdown-panel/index.mjs +4 -0
  64. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.component.mjs +12 -17
  65. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.directives.mjs +10 -10
  66. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.module.mjs +6 -6
  67. package/esm2022/lib/file-inputs/file-drop-area/index.mjs +4 -0
  68. package/esm2022/lib/file-inputs/file-input/file-input.component.mjs +24 -50
  69. package/esm2022/lib/file-inputs/file-input/file-input.directives.mjs +19 -19
  70. package/esm2022/lib/file-inputs/file-input/file-input.module.mjs +5 -5
  71. package/esm2022/lib/file-inputs/file-input/index.mjs +4 -0
  72. package/esm2022/lib/file-inputs/file-input-base.mjs +38 -72
  73. package/esm2022/lib/file-inputs/file-input-types.mjs +1 -1
  74. package/esm2022/lib/form-field-frame/form-field-frame.component.mjs +20 -47
  75. package/esm2022/lib/form-field-frame/form-field-frame.directives.mjs +7 -7
  76. package/esm2022/lib/form-field-frame/form-field-frame.module.mjs +5 -5
  77. package/esm2022/lib/form-field-frame/index.mjs +4 -0
  78. package/esm2022/lib/icon/icon.component.mjs +32 -67
  79. package/esm2022/lib/icon/icon.module.mjs +5 -5
  80. package/esm2022/lib/icon/icon.pipe.mjs +4 -4
  81. package/esm2022/lib/icon/index.mjs +4 -0
  82. package/esm2022/lib/inputs/color-input/color-input.directives.mjs +25 -25
  83. package/esm2022/lib/inputs/color-input/color-input.types.mjs +1 -1
  84. package/esm2022/lib/inputs/digit-input/digit-input.component.mjs +65 -115
  85. package/esm2022/lib/inputs/digit-input/digit-input.model.mjs +83 -92
  86. package/esm2022/lib/inputs/digit-input/digit-input.module.mjs +5 -5
  87. package/esm2022/lib/inputs/digit-input/digit-input.types.mjs +1 -1
  88. package/esm2022/lib/inputs/digit-input/digit-input.utils.mjs +1 -1
  89. package/esm2022/lib/inputs/digit-input/index.mjs +4 -0
  90. package/esm2022/lib/inputs/hex-input/hex-input.component.mjs +59 -122
  91. package/esm2022/lib/inputs/hex-input/hex-input.directives.mjs +10 -10
  92. package/esm2022/lib/inputs/hex-input/hex-input.module.mjs +24 -8
  93. package/esm2022/lib/inputs/hex-input/index.mjs +4 -0
  94. package/esm2022/lib/inputs/hex-input.model.mjs +24 -33
  95. package/esm2022/lib/inputs/input/index.mjs +4 -0
  96. package/esm2022/lib/inputs/input/input.component.mjs +95 -154
  97. package/esm2022/lib/inputs/input/input.directives.mjs +16 -16
  98. package/esm2022/lib/inputs/input/input.module.mjs +21 -7
  99. package/esm2022/lib/inputs/input-transformers.mjs +6 -6
  100. package/esm2022/lib/inputs/input-types.mjs +1 -1
  101. package/esm2022/lib/inputs/input-utils.mjs +75 -94
  102. package/esm2022/lib/inputs/number-input/index.mjs +4 -0
  103. package/esm2022/lib/inputs/number-input/number-input.component.mjs +106 -170
  104. package/esm2022/lib/inputs/number-input/number-input.directives.mjs +4 -4
  105. package/esm2022/lib/inputs/number-input/number-input.module.mjs +5 -5
  106. package/esm2022/lib/inputs/password-input/index.mjs +5 -0
  107. package/esm2022/lib/inputs/password-input/password-input.component.mjs +74 -144
  108. package/esm2022/lib/inputs/password-input/password-input.directives.mjs +13 -13
  109. package/esm2022/lib/inputs/password-input/password-input.module.mjs +5 -5
  110. package/esm2022/lib/inputs/password-input/password-input.types.mjs +1 -1
  111. package/esm2022/lib/inputs/simple-input/index.mjs +4 -0
  112. package/esm2022/lib/inputs/simple-input/simple-input.component.mjs +57 -110
  113. package/esm2022/lib/inputs/simple-input/simple-input.directives.mjs +10 -10
  114. package/esm2022/lib/inputs/simple-input/simple-input.module.mjs +5 -5
  115. package/esm2022/lib/kbd/index.mjs +4 -0
  116. package/esm2022/lib/kbd/kbd.component.mjs +15 -29
  117. package/esm2022/lib/kbd/kbd.module.mjs +5 -5
  118. package/esm2022/lib/kbd/kbd.pipe.mjs +4 -4
  119. package/esm2022/lib/kbd-shortcut/index.mjs +3 -0
  120. package/esm2022/lib/kbd-shortcut/kbd-shortcut.component.mjs +23 -40
  121. package/esm2022/lib/kbd-shortcut/kbd-shortcut.module.mjs +5 -5
  122. package/esm2022/lib/modal/index.mjs +3 -0
  123. package/esm2022/lib/modal/modal.component.mjs +42 -83
  124. package/esm2022/lib/modal/modal.module.mjs +5 -5
  125. package/esm2022/lib/option/index.mjs +3 -0
  126. package/esm2022/lib/option/option.component.mjs +24 -46
  127. package/esm2022/lib/option/option.module.mjs +5 -5
  128. package/esm2022/lib/progress-bar/index.mjs +5 -0
  129. package/esm2022/lib/progress-bar/progress-bar.component.mjs +43 -81
  130. package/esm2022/lib/progress-bar/progress-bar.directive.mjs +4 -4
  131. package/esm2022/lib/progress-bar/progress-bar.module.mjs +5 -5
  132. package/esm2022/lib/progress-bar/progress-bar.types.mjs +1 -1
  133. package/esm2022/lib/progress-circle/index.mjs +5 -0
  134. package/esm2022/lib/progress-circle/progress-circle.component.mjs +33 -78
  135. package/esm2022/lib/progress-circle/progress-circle.directive.mjs +4 -4
  136. package/esm2022/lib/progress-circle/progress-circle.module.mjs +5 -5
  137. package/esm2022/lib/progress-circle/progress-circle.types.mjs +1 -1
  138. package/esm2022/lib/radio/index.mjs +4 -0
  139. package/esm2022/lib/radio/radio/radio.component.mjs +16 -25
  140. package/esm2022/lib/radio/radio-group.component.mjs +71 -85
  141. package/esm2022/lib/radio/radio.module.mjs +5 -5
  142. package/esm2022/lib/search-functions.mjs +7 -7
  143. package/esm2022/lib/segment/index.mjs +5 -0
  144. package/esm2022/lib/segment/segment.component.mjs +70 -137
  145. package/esm2022/lib/segment/segment.directives.mjs +4 -4
  146. package/esm2022/lib/segment/segment.module.mjs +5 -5
  147. package/esm2022/lib/segment/segment.types.mjs +1 -1
  148. package/esm2022/lib/select/index.mjs +5 -0
  149. package/esm2022/lib/select/select.component.mjs +348 -655
  150. package/esm2022/lib/select/select.directive.mjs +46 -46
  151. package/esm2022/lib/select/select.module.mjs +5 -5
  152. package/esm2022/lib/select/select.types.mjs +1 -1
  153. package/esm2022/lib/slide-toggle/index.mjs +4 -0
  154. package/esm2022/lib/slide-toggle/slide-toggle.component.mjs +19 -24
  155. package/esm2022/lib/slide-toggle/slide-toggle.module.mjs +5 -5
  156. package/esm2022/lib/slide-toggle/slide-toggle.types.mjs +5 -0
  157. package/esm2022/lib/slider/abstract-slider.mjs +111 -200
  158. package/esm2022/lib/slider/index.mjs +7 -0
  159. package/esm2022/lib/slider/range-slider/range-slider.component.mjs +26 -23
  160. package/esm2022/lib/slider/range-slider/range-slider.module.mjs +5 -5
  161. package/esm2022/lib/slider/slider.component.mjs +13 -10
  162. package/esm2022/lib/slider/slider.directive.mjs +4 -4
  163. package/esm2022/lib/slider/slider.module.mjs +7 -7
  164. package/esm2022/lib/slider/slider.types.mjs +1 -1
  165. package/esm2022/lib/snackbar/index.mjs +1 -1
  166. package/esm2022/lib/snackbar/snackbar-ref.mjs +1 -1
  167. package/esm2022/lib/snackbar/snackbar.component.mjs +8 -8
  168. package/esm2022/lib/snackbar/snackbar.service.mjs +13 -12
  169. package/esm2022/lib/snackbar/snackbar.token.mjs +1 -1
  170. package/esm2022/lib/snackbar/snackbar.types.mjs +1 -1
  171. package/esm2022/lib/spinner/index.mjs +3 -0
  172. package/esm2022/lib/spinner/spinner.component.mjs +9 -13
  173. package/esm2022/lib/spinner/spinner.module.mjs +5 -5
  174. package/esm2022/lib/star/index.mjs +4 -0
  175. package/esm2022/lib/star/star-button/index.mjs +3 -0
  176. package/esm2022/lib/star/star-button/star-button.component.mjs +17 -26
  177. package/esm2022/lib/star/star-button/star-button.module.mjs +5 -5
  178. package/esm2022/lib/star/star-display/index.mjs +3 -0
  179. package/esm2022/lib/star/star-display/star-display.component.mjs +48 -55
  180. package/esm2022/lib/star/star-display/star-display.module.mjs +5 -5
  181. package/esm2022/lib/star/star-input/index.mjs +3 -0
  182. package/esm2022/lib/star/star-input/star-input.component.mjs +70 -106
  183. package/esm2022/lib/star/star-input/star-input.module.mjs +5 -5
  184. package/esm2022/lib/star/star.component.mjs +12 -20
  185. package/esm2022/lib/star/star.module.mjs +5 -5
  186. package/esm2022/lib/star/star.types.mjs +1 -1
  187. package/esm2022/lib/statebox/index.mjs +3 -0
  188. package/esm2022/lib/statebox/statebox.component.mjs +64 -102
  189. package/esm2022/lib/statebox/statebox.module.mjs +5 -5
  190. package/esm2022/lib/statebox/statebox.types.mjs +1 -1
  191. package/esm2022/lib/tabber/index.mjs +4 -0
  192. package/esm2022/lib/tabber/tab/tab.component.mjs +42 -0
  193. package/esm2022/lib/tabber/tabber.component.mjs +83 -0
  194. package/esm2022/lib/tabber/tabber.module.mjs +19 -0
  195. package/esm2022/lib/table/index.mjs +5 -0
  196. package/esm2022/lib/table/table-item-storage.mjs +204 -200
  197. package/esm2022/lib/table/table.component.mjs +184 -304
  198. package/esm2022/lib/table/table.directives.mjs +19 -21
  199. package/esm2022/lib/table/table.module.mjs +5 -5
  200. package/esm2022/lib/table/table.types.mjs +1 -1
  201. package/esm2022/lib/table/utils.mjs +1 -1
  202. package/esm2022/lib/table-from-csv/index.mjs +3 -0
  203. package/esm2022/lib/table-from-csv/table-from-csv.component.mjs +85 -29
  204. package/esm2022/lib/table-from-csv/table-from-csv.module.mjs +5 -5
  205. package/esm2022/lib/table-pagination/index.mjs +4 -0
  206. package/esm2022/lib/table-pagination/table-pagination.component.mjs +46 -114
  207. package/esm2022/lib/table-pagination/table-pagination.module.mjs +5 -5
  208. package/esm2022/lib/table-pagination/table-pagination.types.mjs +1 -1
  209. package/esm2022/lib/types/alignment.types.mjs +1 -1
  210. package/esm2022/lib/types/colors.types.mjs +1 -1
  211. package/esm2022/lib/types/item-storage.types.mjs +1 -1
  212. package/esm2022/lib/types/theming.types.mjs +1 -1
  213. package/esm2022/lib/types/utility.types.mjs +2 -2
  214. package/esm2022/public-api.mjs +58 -182
  215. package/fesm2022/ardium-ui-ui.mjs +7847 -11692
  216. package/fesm2022/ardium-ui-ui.mjs.map +1 -1
  217. package/lib/_internal/boolean-component.d.ts +8 -9
  218. package/lib/_internal/clear-button/clear-button.component.d.ts +1 -1
  219. package/lib/_internal/disablable-component.d.ts +12 -7
  220. package/lib/_internal/focusable-component.d.ts +5 -7
  221. package/lib/_internal/item-storages/dropdown-item-storage.d.ts +43 -41
  222. package/lib/_internal/item-storages/simple-item-storage.d.ts +28 -25
  223. package/lib/_internal/item-storages/simplest-item-storage.d.ts +14 -9
  224. package/lib/_internal/models/pagination.model.d.ts +38 -42
  225. package/lib/_internal/ngmodel-component.d.ts +1 -1
  226. package/lib/_internal/selectable-list-component.d.ts +30 -30
  227. package/lib/badge/badge.directive.d.ts +15 -20
  228. package/lib/badge/index.d.ts +3 -0
  229. package/lib/buttons/_button-base.d.ts +9 -12
  230. package/lib/buttons/button/button.component.d.ts +6 -8
  231. package/lib/buttons/button/index.d.ts +2 -0
  232. package/lib/buttons/fab/fab.component.d.ts +4 -6
  233. package/lib/buttons/fab/index.d.ts +2 -0
  234. package/lib/buttons/icon-button/icon-button.component.d.ts +6 -7
  235. package/lib/buttons/icon-button/index.d.ts +2 -0
  236. package/lib/card/card.children.d.ts +4 -3
  237. package/lib/card/card.component.d.ts +5 -4
  238. package/lib/card/index.d.ts +4 -0
  239. package/lib/checkbox/checkbox.component.d.ts +8 -12
  240. package/lib/checkbox/index.d.ts +3 -0
  241. package/lib/checkbox-list/checkbox-list.component.d.ts +22 -21
  242. package/lib/checkbox-list/index.d.ts +3 -0
  243. package/lib/chip/chip.component.d.ts +8 -10
  244. package/lib/chip/deletable-chip/deletable-chip.component.d.ts +11 -14
  245. package/lib/chip/index.d.ts +4 -0
  246. package/lib/chip/selectable-chip/selectable-chip.component.d.ts +10 -12
  247. package/lib/color/color-display/color-display.component.d.ts +6 -9
  248. package/lib/color/color-display/index.d.ts +3 -0
  249. package/lib/color/color-picker/color-picker.types.d.ts +4 -4
  250. package/lib/dialog/dialog.component.d.ts +25 -35
  251. package/lib/dialog/dialog.types.d.ts +2 -2
  252. package/lib/dialog/index.d.ts +4 -0
  253. package/lib/divider/divider.component.d.ts +3 -4
  254. package/lib/divider/index.d.ts +2 -0
  255. package/lib/dropdown-panel/dropdown-panel.component.d.ts +17 -20
  256. package/lib/dropdown-panel/index.d.ts +3 -0
  257. package/lib/file-inputs/file-drop-area/file-drop-area.component.d.ts +5 -4
  258. package/lib/file-inputs/file-drop-area/index.d.ts +3 -0
  259. package/lib/file-inputs/file-input/file-input.component.d.ts +13 -17
  260. package/lib/file-inputs/file-input/index.d.ts +3 -0
  261. package/lib/file-inputs/file-input-base.d.ts +13 -18
  262. package/lib/form-field-frame/form-field-frame.component.d.ts +12 -16
  263. package/lib/form-field-frame/index.d.ts +3 -0
  264. package/lib/icon/icon.component.d.ts +10 -19
  265. package/lib/icon/index.d.ts +3 -0
  266. package/lib/inputs/color-input/color-input.types.d.ts +2 -2
  267. package/lib/inputs/digit-input/digit-input.component.d.ts +22 -30
  268. package/lib/inputs/digit-input/digit-input.model.d.ts +8 -12
  269. package/lib/inputs/digit-input/digit-input.types.d.ts +4 -4
  270. package/lib/inputs/digit-input/digit-input.utils.d.ts +4 -5
  271. package/lib/inputs/digit-input/index.d.ts +3 -0
  272. package/lib/inputs/hex-input/hex-input.component.d.ts +32 -38
  273. package/lib/inputs/hex-input/index.d.ts +3 -0
  274. package/lib/inputs/hex-input.model.d.ts +10 -11
  275. package/lib/inputs/input/index.d.ts +3 -0
  276. package/lib/inputs/input/input.component.d.ts +34 -40
  277. package/lib/inputs/input/input.directives.d.ts +3 -3
  278. package/lib/inputs/input-utils.d.ts +24 -27
  279. package/lib/inputs/number-input/index.d.ts +3 -0
  280. package/lib/inputs/number-input/number-input.component.d.ts +38 -48
  281. package/lib/inputs/password-input/index.d.ts +4 -0
  282. package/lib/inputs/password-input/password-input.component.d.ts +28 -40
  283. package/lib/inputs/password-input/password-input.types.d.ts +2 -2
  284. package/lib/inputs/simple-input/index.d.ts +3 -0
  285. package/lib/inputs/simple-input/simple-input.component.d.ts +30 -35
  286. package/lib/kbd/index.d.ts +3 -0
  287. package/lib/kbd/kbd.component.d.ts +6 -8
  288. package/lib/kbd-shortcut/index.d.ts +2 -0
  289. package/lib/kbd-shortcut/kbd-shortcut.component.d.ts +7 -10
  290. package/lib/modal/index.d.ts +2 -0
  291. package/lib/modal/modal.component.d.ts +22 -30
  292. package/lib/option/index.d.ts +2 -0
  293. package/lib/option/option.component.d.ts +11 -16
  294. package/lib/progress-bar/index.d.ts +4 -0
  295. package/lib/progress-bar/progress-bar.component.d.ts +14 -20
  296. package/lib/progress-bar/progress-bar.types.d.ts +2 -2
  297. package/lib/progress-circle/index.d.ts +4 -0
  298. package/lib/progress-circle/progress-circle.component.d.ts +12 -20
  299. package/lib/progress-circle/progress-circle.types.d.ts +2 -2
  300. package/lib/radio/index.d.ts +3 -0
  301. package/lib/radio/radio/radio.component.d.ts +7 -8
  302. package/lib/radio/radio-group.component.d.ts +13 -16
  303. package/lib/segment/index.d.ts +4 -0
  304. package/lib/segment/segment.component.d.ts +22 -34
  305. package/lib/segment/segment.directives.d.ts +2 -3
  306. package/lib/select/index.d.ts +4 -0
  307. package/lib/select/select.component.d.ts +114 -160
  308. package/lib/select/select.directive.d.ts +3 -3
  309. package/lib/select/select.types.d.ts +2 -76
  310. package/lib/slide-toggle/index.d.ts +3 -0
  311. package/lib/slide-toggle/slide-toggle.component.d.ts +9 -7
  312. package/lib/slide-toggle/slide-toggle.types.d.ts +5 -0
  313. package/lib/slider/abstract-slider.d.ts +38 -55
  314. package/lib/slider/index.d.ts +6 -0
  315. package/lib/slider/range-slider/range-slider.component.d.ts +3 -1
  316. package/lib/slider/slider.component.d.ts +2 -0
  317. package/lib/slider/slider.types.d.ts +8 -8
  318. package/lib/snackbar/snackbar-ref.d.ts +1 -2
  319. package/lib/snackbar/snackbar.component.d.ts +3 -3
  320. package/lib/snackbar/snackbar.service.d.ts +2 -2
  321. package/lib/snackbar/snackbar.types.d.ts +4 -4
  322. package/lib/spinner/index.d.ts +2 -0
  323. package/lib/spinner/spinner.component.d.ts +3 -3
  324. package/lib/star/index.d.ts +3 -0
  325. package/lib/star/star-button/index.d.ts +2 -0
  326. package/lib/star/star-button/star-button.component.d.ts +7 -7
  327. package/lib/star/star-display/index.d.ts +2 -0
  328. package/lib/star/star-display/star-display.component.d.ts +8 -12
  329. package/lib/star/star-input/index.d.ts +2 -0
  330. package/lib/star/star-input/star-input.component.d.ts +17 -22
  331. package/lib/star/star.component.d.ts +5 -5
  332. package/lib/statebox/index.d.ts +3 -0
  333. package/lib/statebox/statebox.component.d.ts +15 -21
  334. package/lib/statebox/statebox.types.d.ts +12 -8
  335. package/lib/tabber/index.d.ts +3 -0
  336. package/lib/tabber/tab/tab.component.d.ts +18 -0
  337. package/lib/tabber/tabber.component.d.ts +25 -0
  338. package/lib/tabber/tabber.module.d.ts +9 -0
  339. package/lib/table/index.d.ts +4 -0
  340. package/lib/table/table-item-storage.d.ts +70 -58
  341. package/lib/table/table.component.d.ts +59 -78
  342. package/lib/table/table.directives.d.ts +4 -3
  343. package/lib/table-from-csv/index.d.ts +2 -0
  344. package/lib/table-from-csv/table-from-csv.component.d.ts +46 -9
  345. package/lib/table-pagination/index.d.ts +3 -0
  346. package/lib/table-pagination/table-pagination.component.d.ts +21 -30
  347. package/lib/types/item-storage.types.d.ts +19 -18
  348. package/lib/types/utility.types.d.ts +2 -1
  349. package/package.json +8 -9
  350. package/prebuilt-themes/default/badge.css +5 -5
  351. package/prebuilt-themes/default/buttons/fab.css +4 -3
  352. package/prebuilt-themes/default/buttons/fab.css.map +1 -1
  353. package/prebuilt-themes/default/card.css +7 -7
  354. package/prebuilt-themes/default/chips.css +3 -8
  355. package/prebuilt-themes/default/chips.css.map +1 -1
  356. package/prebuilt-themes/default/core.css +6 -3
  357. package/prebuilt-themes/default/core.css.map +1 -1
  358. package/prebuilt-themes/default/inputs/color-input.css +1 -1
  359. package/prebuilt-themes/default/inputs/digit-input.css +1 -1
  360. package/prebuilt-themes/default/inputs/file-input.css +139 -2
  361. package/prebuilt-themes/default/inputs/file-input.css.map +1 -1
  362. package/prebuilt-themes/default/inputs/hex-input.css +2 -2
  363. package/prebuilt-themes/default/inputs/input.css +1 -1
  364. package/prebuilt-themes/default/inputs/search-bar.css +1 -1
  365. package/prebuilt-themes/default/inputs/simple-input.css +1 -1
  366. package/prebuilt-themes/default/modal.css +1 -1
  367. package/prebuilt-themes/default/segment.css +2 -2
  368. package/prebuilt-themes/default/segment.css.map +1 -1
  369. package/prebuilt-themes/default/select.css +5 -3
  370. package/prebuilt-themes/default/select.css.map +1 -1
  371. package/prebuilt-themes/default/snackbar.css +0 -1
  372. package/prebuilt-themes/default/snackbar.css.map +1 -1
  373. package/prebuilt-themes/default/tabber.css +207 -0
  374. package/prebuilt-themes/default/tabber.css.map +1 -0
  375. package/public-api.d.ts +43 -136
  376. package/themes/_variables.scss +121 -121
  377. package/themes/default/_clear-button.scss +73 -73
  378. package/themes/default/_coloring.scss +137 -137
  379. package/themes/default/_dropdown-arrow.scss +12 -12
  380. package/themes/default/_mixins.scss +70 -70
  381. package/themes/default/badge.scss +94 -94
  382. package/themes/default/buttons/_button-mixins.scss +144 -144
  383. package/themes/default/buttons/button.scss +62 -62
  384. package/themes/default/buttons/fab.scss +74 -72
  385. package/themes/default/buttons/icon-button.scss +59 -59
  386. package/themes/default/calendar.scss +182 -182
  387. package/themes/default/card.scss +126 -126
  388. package/themes/default/checkbox-list.scss +83 -83
  389. package/themes/default/checkbox.scss +109 -109
  390. package/themes/default/chips.scss +200 -206
  391. package/themes/default/color-display.scss +41 -41
  392. package/themes/default/color-picker.scss +111 -111
  393. package/themes/default/core.scss +99 -96
  394. package/themes/default/dialog.scss +16 -16
  395. package/themes/default/divider.scss +13 -13
  396. package/themes/default/dropdown-panel.scss +45 -45
  397. package/themes/default/file-drop-area.scss +162 -162
  398. package/themes/default/form-field-frame.scss +78 -78
  399. package/themes/default/inputs/_shared.scss +46 -46
  400. package/themes/default/inputs/color-input.scss +46 -46
  401. package/themes/default/inputs/digit-input.scss +56 -56
  402. package/themes/default/inputs/file-input.scss +85 -78
  403. package/themes/default/inputs/hex-input.scss +27 -27
  404. package/themes/default/inputs/input.scss +52 -52
  405. package/themes/default/inputs/number-input.scss +121 -121
  406. package/themes/default/inputs/password-input.scss +43 -43
  407. package/themes/default/inputs/search-bar.scss +19 -19
  408. package/themes/default/inputs/simple-input.scss +19 -19
  409. package/themes/default/kbd-shortcut.scss +13 -13
  410. package/themes/default/kbd.scss +20 -20
  411. package/themes/default/modal.scss +93 -93
  412. package/themes/default/progress-bar.scss +166 -166
  413. package/themes/default/progress-circle.scss +56 -56
  414. package/themes/default/radio.scss +112 -112
  415. package/themes/default/segment.scss +340 -339
  416. package/themes/default/select.scss +255 -253
  417. package/themes/default/slide-toggle.scss +151 -151
  418. package/themes/default/slider.scss +224 -224
  419. package/themes/default/snackbar.scss +58 -60
  420. package/themes/default/spinner.scss +21 -21
  421. package/themes/default/stars.scss +122 -122
  422. package/themes/default/statebox.scss +109 -109
  423. package/themes/default/tabber.scss +86 -0
  424. package/themes/default/table-pagination.scss +56 -56
  425. package/themes/default/table.scss +403 -403
  426. package/esm2022/lib/calendar/calendar.component.mjs +0 -979
  427. package/esm2022/lib/calendar/calendar.directives.mjs +0 -107
  428. package/esm2022/lib/calendar/calendar.helpers.mjs +0 -47
  429. package/esm2022/lib/calendar/calendar.module.mjs +0 -21
  430. package/esm2022/lib/calendar/calendar.types.mjs +0 -11
  431. package/esm2022/lib/color/color-picker/color-picker.component.mjs +0 -484
  432. package/esm2022/lib/color/color-picker/color-picker.directives.mjs +0 -55
  433. package/esm2022/lib/color/color-picker/color-picker.module.mjs +0 -43
  434. package/esm2022/lib/inputs/color-input/color-input.component.mjs +0 -421
  435. package/esm2022/lib/inputs/color-input/color-input.module.mjs +0 -85
  436. package/lib/calendar/calendar.component.d.ts +0 -155
  437. package/lib/calendar/calendar.directives.d.ts +0 -51
  438. package/lib/calendar/calendar.helpers.d.ts +0 -15
  439. package/lib/calendar/calendar.module.d.ts +0 -11
  440. package/lib/calendar/calendar.types.d.ts +0 -80
  441. package/lib/color/color-picker/color-picker.component.d.ts +0 -125
  442. package/lib/color/color-picker/color-picker.directives.d.ts +0 -27
  443. package/lib/color/color-picker/color-picker.module.d.ts +0 -13
  444. package/lib/inputs/color-input/color-input.component.d.ts +0 -147
  445. package/lib/inputs/color-input/color-input.module.d.ts +0 -16
@@ -1,14 +1,14 @@
1
1
  import { OverlayConfig } from '@angular/cdk/overlay';
2
2
  import { TemplatePortal } from '@angular/cdk/portal';
3
- import { ChangeDetectionStrategy, Component, ContentChild, ElementRef, EventEmitter, forwardRef, HostListener, Input, Output, TemplateRef, ViewChild, ViewEncapsulation, } from '@angular/core';
3
+ import { ChangeDetectionStrategy, Component, HostListener, Input, TemplateRef, ViewEncapsulation, computed, contentChild, forwardRef, input, output, signal, viewChild } from '@angular/core';
4
4
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
5
  import { coerceArrayProperty, coerceBooleanProperty } from '@ardium-ui/devkit';
6
6
  import { isString } from 'simple-bool';
7
+ import { SimplestItemStorage } from '../../_internal/item-storages/simplest-item-storage';
7
8
  import { DropdownPanelAppearance, DropdownPanelVariant } from '../../dropdown-panel/dropdown-panel.types';
8
9
  import { FormElementAppearance, FormElementVariant } from '../../types/theming.types';
9
- import { SimplestItemStorage } from '../../_internal/item-storages/simplest-item-storage';
10
10
  import { ArdiumSimpleInputComponent } from '../simple-input/simple-input.component';
11
- import { escapeAndCreateRegex, InputModel } from './../input-utils';
11
+ import { InputModel, escapeAndCreateRegex } from './../input-utils';
12
12
  import { ArdInputLoadingTemplateDirective, ArdInputPlaceholderTemplateDirective, ArdInputPrefixTemplateDirective, ArdInputSuffixTemplateDirective, ArdSuggestionTemplateDirective, } from './input.directives';
13
13
  import * as i0 from "@angular/core";
14
14
  import * as i1 from "@angular/cdk/overlay";
@@ -29,70 +29,80 @@ export class ArdiumInputComponent extends ArdiumSimpleInputComponent {
29
29
  labelFrom: 'label',
30
30
  suggestionsLoadingText: 'Loading...',
31
31
  };
32
- this._charlistCaseInsensitive = false;
32
+ //! input view
33
+ this.inputModel = new InputModel(this);
34
+ //! allowlist/denylist of characters
35
+ //use standard string for denylist, prepend with ^ for allowlist
36
+ this.charlistFromInput = input(undefined, {
37
+ alias: 'charlist',
38
+ transform: v => {
39
+ if (!isString(v)) {
40
+ throw new Error('ARD-FT0033: [charlist] must be a non-empty string, got "".');
41
+ }
42
+ const negated = v.startsWith('^');
43
+ return escapeAndCreateRegex(v, '', !negated);
44
+ },
45
+ });
46
+ this.charlistCaseInsensitive = input(false, { transform: v => coerceBooleanProperty(v) });
47
+ this.charlist = computed(() => {
48
+ const c = this.charlistFromInput();
49
+ if (!this.charlistCaseInsensitive() || !c) {
50
+ return c;
51
+ }
52
+ return new RegExp(c.source, 'i');
53
+ });
54
+ //! autocomplete
55
+ this.autocomplete = input(undefined);
56
+ this.shouldDisplayAutocomplete = computed(() => !this.disabled() && Boolean(this.autocomplete()));
33
57
  //autocomplete event
34
- this.acceptAutocompleteEvent = new EventEmitter();
58
+ this.acceptAutocompleteEvent = output({ alias: 'acceptAutocomplete' });
59
+ //! prefix & suffix
60
+ this.prefixTemplate = contentChild(ArdInputPrefixTemplateDirective);
61
+ this.suffixTemplate = contentChild(ArdInputSuffixTemplateDirective);
62
+ //! placeholder
63
+ this.placeholderTemplate = contentChild(ArdInputPlaceholderTemplateDirective);
35
64
  //! suggestions
36
65
  this.suggestionStorage = new SimplestItemStorage(this);
37
- this.acceptSuggestionEvent = new EventEmitter();
38
- this._suggestionDropdowOpen = false;
39
- this.areSuggestionsLoading = false;
40
- this.suggestionsLoadingText = this.DEFAULTS.suggestionsLoadingText;
66
+ this.valueFrom = input(undefined, { alias: 'suggValueFrom' });
67
+ this.labelFrom = input(undefined, { alias: 'suggLabelFrom' });
68
+ this.acceptSuggestionEvent = output({ alias: 'acceptSuggestion' });
69
+ this.suggestionItems = this.suggestionStorage.items;
70
+ this._suggestionDropdowOpen = signal(false);
71
+ this.shouldDisplaySuggestions = computed(() => !this.disabled() && (this.suggestionItems().length > 0 || this.areSuggestionsLoading()) && this._suggestionDropdowOpen());
72
+ this.areSuggestionsLoading = input(false, { transform: v => coerceBooleanProperty(v) });
73
+ this.suggestionsLoadingText = input(this.DEFAULTS.suggestionsLoadingText);
74
+ this.suggestionTemplate = contentChild(ArdSuggestionTemplateDirective);
75
+ this.suggestionLoadingTemplate = contentChild(ArdInputLoadingTemplateDirective);
76
+ //! suggestions overlay
77
+ this.dropdownHost = viewChild('suggestionsHost');
78
+ this.dropdownTemplate = viewChild('suggestionsTemplate', { read: TemplateRef });
41
79
  //! suggestion-highligh-related
42
80
  this._isMouseBeingUsed = false;
43
81
  //! suggestion appearance
44
- this._dropdownAppearance = undefined;
45
- this._dropdownVariant = undefined;
82
+ this.dropdownAppearance = input(undefined);
83
+ this.dropdownAppearanceOrDefault = computed(() => {
84
+ if (this.dropdownAppearance())
85
+ return this.dropdownAppearance();
86
+ if (this.appearance() === FormElementAppearance.Outlined)
87
+ return DropdownPanelAppearance.Outlined;
88
+ return DropdownPanelAppearance.Raised;
89
+ });
90
+ this.dropdownVariant = input(undefined);
91
+ this.dropdownVariantOrDefault = computed(() => {
92
+ if (this.dropdownVariant())
93
+ return this.dropdownVariant();
94
+ const variant = this.variant();
95
+ if (variant === FormElementVariant.Pill)
96
+ return DropdownPanelVariant.Rounded;
97
+ return variant;
98
+ });
46
99
  this.element = viewContainerRef.element.nativeElement;
47
100
  }
48
- ngOnInit() {
49
- this.inputModel = new InputModel(this.textInputEl.nativeElement, this);
50
- this._setInputAttributes();
51
- //set the value
52
- if (this._valueBeforeInit) {
53
- this.writeValue(this._valueBeforeInit);
54
- delete this._valueBeforeInit;
55
- }
56
- }
57
- get charlist() {
58
- return this._charlistRegExp;
59
- }
60
- set charlist(v) {
61
- if (!isString(v)) {
62
- throw new Error('charlistRegExp must be a non-empty string.');
63
- }
64
- let flags = this._charlistCaseInsensitive ? 'i' : '';
65
- let negated = v.startsWith('^');
66
- this._charlistRegExp = escapeAndCreateRegex(v, flags, !negated);
67
- }
68
- get charlistCaseInsensitive() {
69
- return this._charlistCaseInsensitive;
70
- }
71
- set charlistCaseInsensitive(v) {
72
- this._charlistCaseInsensitive = coerceBooleanProperty(v);
73
- if (this._charlistRegExp) {
74
- let flags = this._charlistCaseInsensitive ? 'i' : '';
75
- this._charlistRegExp = new RegExp(this._charlistRegExp.source, flags);
76
- }
77
- }
78
- set autocomplete(v) {
79
- this._autocomplete = v;
80
- }
81
- get autocomplete() {
82
- return this._autocomplete ?? '';
83
- }
84
- //should show autocomplete
85
- get shouldDisplayAutocomplete() {
86
- return !this.disabled && Boolean(this.autocomplete);
87
- }
88
- get suggestionItems() {
89
- return this.suggestionStorage.items;
90
- }
91
101
  set suggestions(value) {
92
102
  if (!Array.isArray(value))
93
103
  value = coerceArrayProperty(value);
94
- let shouldPrintErrors = this.suggestionStorage.setItems(value);
95
- this._suggestionDropdowOpen = true;
104
+ const shouldPrintErrors = this.suggestionStorage.setItems(value);
105
+ this._suggestionDropdowOpen.set(true);
96
106
  this.suggestionStorage.highlightFirstItem();
97
107
  if (shouldPrintErrors) {
98
108
  this._printPrimitiveWarnings();
@@ -100,22 +110,20 @@ export class ArdiumInputComponent extends ArdiumSimpleInputComponent {
100
110
  }
101
111
  _printPrimitiveWarnings() {
102
112
  function makeWarning(str) {
103
- console.warn(`Skipped using [${str}] property bound to <ard-input>, as some provided suggestion items are of primitive type`);
113
+ console.warn(`ARD-WA0031: Skipped using [${str}] property bound to <ard-input>, as some provided suggestion items are of primitive type`);
104
114
  }
105
- if (this.valueFrom) {
115
+ if (this.valueFrom()) {
106
116
  makeWarning('valueFrom');
107
117
  }
108
- if (this.labelFrom) {
118
+ if (this.labelFrom()) {
109
119
  makeWarning('labelFrom');
110
120
  }
111
121
  }
112
- get shouldDisplaySuggestions() {
113
- return !this.disabled && (this.suggestionItems.length > 0 || this.areSuggestionsLoading) && this._suggestionDropdowOpen;
114
- }
115
122
  ngAfterViewInit() {
123
+ super.ngAfterViewInit();
116
124
  const strategy = this.overlay
117
125
  .position()
118
- .flexibleConnectedTo(this.dropdownHost)
126
+ .flexibleConnectedTo(this.dropdownHost())
119
127
  .withPositions([
120
128
  {
121
129
  originX: 'start',
@@ -131,14 +139,13 @@ export class ArdiumInputComponent extends ArdiumSimpleInputComponent {
131
139
  hasBackdrop: false,
132
140
  });
133
141
  this.dropdownOverlay = this.overlay.create(config);
134
- this.dropdownOverlay;
135
- const portal = new TemplatePortal(this.dropdownTemplate, this.viewContainerRef);
142
+ const portal = new TemplatePortal(this.dropdownTemplate(), this.viewContainerRef);
136
143
  this.dropdownOverlay.attach(portal);
137
144
  this.setOverlaySize();
138
145
  }
139
146
  setOverlaySize() {
140
- const rect = this.dropdownHost.nativeElement.getBoundingClientRect();
141
- this.dropdownOverlay.updateSize({ width: rect.width });
147
+ const rect = this.dropdownHost()?.nativeElement.getBoundingClientRect();
148
+ this.dropdownOverlay.updateSize({ width: rect?.width });
142
149
  }
143
150
  onWindowResize() {
144
151
  this.setOverlaySize();
@@ -173,43 +180,23 @@ export class ArdiumInputComponent extends ArdiumSimpleInputComponent {
173
180
  _selectSuggestion(item) {
174
181
  const selected = this.suggestionStorage.selectItem(item);
175
182
  this.writeValue(selected ?? '');
176
- this.acceptSuggestionEvent.next(selected);
183
+ this.acceptSuggestionEvent.emit(selected);
177
184
  //important to do those two things in this exact order
178
185
  this.focus();
179
- this._suggestionDropdowOpen = false;
186
+ this._suggestionDropdowOpen.set(false);
180
187
  }
181
188
  handleSuggestionClickOutside(event) {
182
- if (!this.shouldDisplaySuggestions)
189
+ if (!this.shouldDisplaySuggestions())
183
190
  return;
184
191
  const target = event.target;
185
192
  if (this.element.contains(target))
186
193
  return;
187
- this._suggestionDropdowOpen = false;
188
- }
189
- set dropdowonAppearance(v) {
190
- this._dropdownAppearance = v;
191
- }
192
- get dropdownAppearance() {
193
- if (this._dropdownAppearance)
194
- return this._dropdownAppearance;
195
- if (this.appearance == FormElementAppearance.Outlined)
196
- return DropdownPanelAppearance.Outlined;
197
- return DropdownPanelAppearance.Raised;
198
- }
199
- set dropdowonVariant(v) {
200
- this._dropdownVariant = v;
201
- }
202
- get dropdownVariant() {
203
- if (this._dropdownVariant)
204
- return this._dropdownVariant;
205
- if (this.variant == FormElementVariant.Pill)
206
- return DropdownPanelVariant.Rounded;
207
- return this.variant;
194
+ this._suggestionDropdowOpen.set(false);
208
195
  }
209
196
  //! focus override
210
197
  onFocus(event) {
211
- this._suggestionDropdowOpen = true;
212
- if (!this.suggestionStorage.highlightedItem)
198
+ this._suggestionDropdowOpen.set(true);
199
+ if (!this.suggestionStorage.highlightedItem())
213
200
  this.suggestionStorage.highlightFirstItem();
214
201
  super.onFocus(event);
215
202
  }
@@ -236,44 +223,45 @@ export class ArdiumInputComponent extends ArdiumSimpleInputComponent {
236
223
  }
237
224
  }
238
225
  _onTabOrEnterPress(event) {
239
- if (!this.shouldDisplayAutocomplete)
226
+ if (!this.shouldDisplayAutocomplete())
240
227
  return;
241
228
  event.preventDefault();
242
- this.onInput(this.autocomplete ?? '');
229
+ this.onInput(this.autocomplete() ?? '');
243
230
  this.acceptAutocompleteEvent.emit();
244
231
  }
245
232
  _onEnterPress(event) {
246
- if (!this.shouldDisplaySuggestions)
233
+ if (!this.shouldDisplaySuggestions())
247
234
  return;
248
- if (!this.suggestionStorage.highlightedItem)
235
+ const item = this.suggestionStorage.highlightedItem();
236
+ if (!item)
249
237
  return;
250
238
  event.preventDefault();
251
- this._selectSuggestion(this.suggestionStorage.highlightedItem);
239
+ this._selectSuggestion(item);
252
240
  }
253
241
  _onArrowDownPress(event) {
254
- if (!this.shouldDisplaySuggestions)
242
+ if (!this.shouldDisplaySuggestions())
255
243
  return;
256
244
  event.preventDefault();
257
245
  this._isMouseBeingUsed = false;
258
246
  this.suggestionStorage.highlightNextItem(+1);
259
247
  }
260
248
  _onArrowUpPress(event) {
261
- if (!this.shouldDisplaySuggestions)
249
+ if (!this.shouldDisplaySuggestions())
262
250
  return;
263
251
  event.preventDefault();
264
252
  this._isMouseBeingUsed = false;
265
253
  this.suggestionStorage.highlightNextItem(-1);
266
254
  }
267
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: ArdiumInputComponent, deps: [{ token: i0.ViewContainerRef }, { token: i1.Overlay }, { token: i1.ScrollStrategyOptions }], target: i0.ɵɵFactoryTarget.Component }); }
268
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: ArdiumInputComponent, selector: "ard-input", inputs: { charlist: "charlist", charlistCaseInsensitive: "charlistCaseInsensitive", autocomplete: "autocomplete", valueFrom: ["suggValueFrom", "valueFrom"], labelFrom: ["suggLabelFrom", "labelFrom"], suggestions: "suggestions", areSuggestionsLoading: "areSuggestionsLoading", suggestionsLoadingText: "suggestionsLoadingText", dropdowonAppearance: "dropdowonAppearance", dropdowonVariant: "dropdowonVariant" }, outputs: { acceptAutocompleteEvent: "acceptAutocomplete", acceptSuggestionEvent: "acceptSuggestion" }, host: { listeners: { "window:resize": "onWindowResize()", "mousemove": "onMouseMove()", "keydown": "onKeyPress($event)" } }, providers: [
255
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ArdiumInputComponent, deps: [{ token: i0.ViewContainerRef }, { token: i1.Overlay }, { token: i1.ScrollStrategyOptions }], target: i0.ɵɵFactoryTarget.Component }); }
256
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: ArdiumInputComponent, selector: "ard-input", inputs: { charlistFromInput: { classPropertyName: "charlistFromInput", publicName: "charlist", isSignal: true, isRequired: false, transformFunction: null }, charlistCaseInsensitive: { classPropertyName: "charlistCaseInsensitive", publicName: "charlistCaseInsensitive", isSignal: true, isRequired: false, transformFunction: null }, autocomplete: { classPropertyName: "autocomplete", publicName: "autocomplete", isSignal: true, isRequired: false, transformFunction: null }, valueFrom: { classPropertyName: "valueFrom", publicName: "suggValueFrom", isSignal: true, isRequired: false, transformFunction: null }, labelFrom: { classPropertyName: "labelFrom", publicName: "suggLabelFrom", isSignal: true, isRequired: false, transformFunction: null }, suggestions: { classPropertyName: "suggestions", publicName: "suggestions", isSignal: false, isRequired: false, transformFunction: null }, areSuggestionsLoading: { classPropertyName: "areSuggestionsLoading", publicName: "areSuggestionsLoading", isSignal: true, isRequired: false, transformFunction: null }, suggestionsLoadingText: { classPropertyName: "suggestionsLoadingText", publicName: "suggestionsLoadingText", isSignal: true, isRequired: false, transformFunction: null }, dropdownAppearance: { classPropertyName: "dropdownAppearance", publicName: "dropdownAppearance", isSignal: true, isRequired: false, transformFunction: null }, dropdownVariant: { classPropertyName: "dropdownVariant", publicName: "dropdownVariant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { acceptAutocompleteEvent: "acceptAutocomplete", acceptSuggestionEvent: "acceptSuggestion" }, host: { listeners: { "window:resize": "onWindowResize()", "mousemove": "onMouseMove()", "keydown": "onKeyPress($event)" } }, providers: [
269
257
  {
270
258
  provide: NG_VALUE_ACCESSOR,
271
259
  useExisting: forwardRef(() => ArdiumInputComponent),
272
260
  multi: true,
273
261
  },
274
- ], queries: [{ propertyName: "prefixTemplate", first: true, predicate: ArdInputPrefixTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "suffixTemplate", first: true, predicate: ArdInputSuffixTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "placeholderTemplate", first: true, predicate: ArdInputPlaceholderTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "suggestionTemplate", first: true, predicate: ArdSuggestionTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "suggestionLoadingTemplate", first: true, predicate: ArdInputLoadingTemplateDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "dropdownHost", first: true, predicate: ["suggestionsHost"], descendants: true, read: ElementRef }, { propertyName: "dropdownTemplate", first: true, predicate: ["suggestionsTemplate"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<ard-form-field-frame\r\n [appearance]=\"appearance\"\r\n [variant]=\"variant\"\r\n [compact]=\"compact\"\r\n [isFocused]=\"isFocused\"\r\n [prefixTemplate]=\"prefixTemplate\"\r\n [suffixTemplate]=\"suffixTemplate\"\r\n>\r\n <div class=\"ard-input\"\r\n #suggestionsHost\r\n [ngClass]=\"ngClasses\"\r\n [class.ard-has-value]=\"value\"\r\n (click)=\"focus()\"\r\n >\r\n <div class=\"ard-input-container\">\r\n <div class=\"ard-autocomplete\" *ngIf=\"shouldDisplayAutocomplete\">{{ autocomplete }}</div>\r\n\r\n <ng-container *ngIf=\"shouldDisplayPlaceholder\">\r\n <ng-template #defaultPlaceholderTemplate>\r\n <div class=\"ard-placeholder\">{{ placeholder }}</div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate || defaultPlaceholderTemplate\"></ng-template>\r\n </ng-container>\r\n \r\n <input #textInput\r\n #focusableElement\r\n type=\"text\"\r\n [attr.id]=\"inputId\"\r\n [attr.tabindex]=\"tabIndex\"\r\n [readonly]=\"readonly\"\r\n [disabled]=\"disabled\"\r\n (input)=\"onInput(textInput.value)\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (copy)=\"onCopy($event)\"\r\n >\r\n </div>\r\n\r\n <ard-_clear-button\r\n *ngIf=\"shouldShowClearButton\"\r\n [title]=\"clearButtonTitle\"\r\n (click)=\"onClearButtonClick($event)\"\r\n ></ard-_clear-button>\r\n </div>\r\n</ard-form-field-frame>\r\n\r\n<ng-template #suggestionsTemplate>\r\n <ard-dropdown-panel\r\n class=\"ard-dropdown-panel ard-input-suggestions-panel\"\r\n role=\"listbox\"\r\n [compact]=\"compact\"\r\n aria-label=\"Suggestions\"\r\n [appearance]=\"dropdownAppearance\"\r\n [variant]=\"dropdownVariant\"\r\n [isOpen]=\"shouldDisplaySuggestions\"\r\n (ardClickOutside)=\"handleSuggestionClickOutside($event)\"\r\n (mousemove)=\"onMouseMove()\"\r\n >\r\n <div\r\n class=\"ard-option\"\r\n role=\"option\"\r\n *ngFor=\"let item of suggestionItems\"\r\n [class.ard-option-disabled]=\"item.disabled\"\r\n [class.ard-option-selected]=\"item.selected\"\r\n [class.ard-option-highlighted]=\"item.highlighted\"\r\n [class.ard-option-highlighted-recent]=\"item.highlighted_recently\"\r\n [attr.aria-selected]=\"item.selected\"\r\n (click)=\"selectSuggestion(item, $event)\"\r\n (mouseenter)=\"onSuggestionMouseEnter(item, $event)\"\r\n (mouseleave)=\"onSuggestionMouseLeave(item, $event)\"\r\n >\r\n <span class=\"ard-option-label\">\r\n <ng-template #defaultOptionTemplate>\r\n {{item.label}}\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"suggestionTemplate || defaultOptionTemplate\"\r\n [ngTemplateOutletContext]=\"getOptionContext(item)\"\r\n ></ng-template>\r\n </span>\r\n </div>\r\n\r\n <ng-container *ngIf=\"areSuggestionsLoading\">\r\n <ng-template #defaultLoadingPlaceholderTemplate>\r\n <div class=\"ard-option ard-option-disabled\">{{suggestionsLoadingText}}</div>\r\n </ng-template>\r\n \r\n <ng-template [ngTemplateOutlet]=\"suggestionLoadingTemplate || defaultLoadingPlaceholderTemplate\"></ng-template>\r\n </ng-container>\r\n </ard-dropdown-panel>\r\n</ng-template>", styles: ["@import\"@angular/cdk/overlay-prebuilt.css\";.ard-input-container{position:relative}.ard-placeholder{position:absolute;left:0;right:0}.ard-text-align-left input,.ard-text-align-left .ard-placeholder{text-align:left}.ard-text-align-center input,.ard-text-align-center .ard-placeholder{text-align:center}.ard-text-align-right input,.ard-text-align-right .ard-placeholder{text-align:right}.ard-autocomplete{position:absolute}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.ArdiumFormFieldFrameComponent, selector: "ard-form-field-frame", inputs: ["isFocused", "appearance", "variant", "compact", "prefixTemplate", "suffixTemplate"] }, { kind: "component", type: i4._ClearButtonComponent, selector: "ard-_clear-button" }, { kind: "component", type: i5.ArdiumDropdownPanelComponent, selector: "ard-dropdown-panel", inputs: ["panelId", "headerTemplate", "footerTemplate", "filterValue", "appearance", "variant", "compact", "isOpen"], outputs: ["scroll", "scrollToEnd"] }, { kind: "directive", type: i6.ClickOutsideDirective, selector: "[ardClickOutside]", outputs: ["ardClickOutside"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
262
+ ], queries: [{ propertyName: "prefixTemplate", first: true, predicate: ArdInputPrefixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "suffixTemplate", first: true, predicate: ArdInputSuffixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "placeholderTemplate", first: true, predicate: ArdInputPlaceholderTemplateDirective, descendants: true, isSignal: true }, { propertyName: "suggestionTemplate", first: true, predicate: ArdSuggestionTemplateDirective, descendants: true, isSignal: true }, { propertyName: "suggestionLoadingTemplate", first: true, predicate: ArdInputLoadingTemplateDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "dropdownHost", first: true, predicate: ["suggestionsHost"], descendants: true, isSignal: true }, { propertyName: "dropdownTemplate", first: true, predicate: ["suggestionsTemplate"], descendants: true, read: TemplateRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ard-form-field-frame\n [appearance]=\"appearance()\"\n [variant]=\"variant()\"\n [compact]=\"compact()\"\n [isFocused]=\"isFocused\"\n [prefixTemplate]=\"prefixTemplate()?.template\"\n [suffixTemplate]=\"suffixTemplate()?.template\"\n>\n <div\n class=\"ard-input\"\n #suggestionsHost\n [ngClass]=\"ngClasses()\"\n [class.ard-has-value]=\"value\"\n (click)=\"focus()\"\n >\n <div class=\"ard-input-container\">\n @if (shouldDisplayAutocomplete()) {\n <div class=\"ard-autocomplete\">{{ autocomplete() }}</div>\n }\n @if (shouldDisplayPlaceholder()) {\n <ng-template\n #defaultPlaceholderTemplate\n >\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\"></ng-template>\n }\n <input\n #textInput\n #focusableElement\n type=\"text\"\n [attr.id]=\"inputId()\"\n [attr.tabindex]=\"tabIndex()\"\n [readonly]=\"readonly()\"\n [disabled]=\"disabled()\"\n (input)=\"onInput(textInput.value)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (copy)=\"onCopy($event)\"\n />\n </div>\n\n @if (shouldShowClearButton()) {\n <ard-clear-button\n [title]=\"clearButtonTitle()\"\n (click)=\"onClearButtonClick($event)\"\n />\n }\n </div>\n</ard-form-field-frame>\n\n<ng-template #suggestionsTemplate>\n <ard-dropdown-panel\n class=\"ard-dropdown-panel ard-input-suggestions-panel\"\n role=\"listbox\"\n [compact]=\"compact\"\n aria-label=\"Suggestions\"\n [appearance]=\"dropdownAppearanceOrDefault()\"\n [variant]=\"dropdownVariantOrDefault()\"\n [isOpen]=\"shouldDisplaySuggestions()\"\n (ardClickOutside)=\"handleSuggestionClickOutside($event)\"\n (mousemove)=\"onMouseMove()\"\n >\n @for (item of suggestionItems(); track item.index()) {\n <div\n class=\"ard-option\"\n role=\"option\"\n [class.ard-option-selected]=\"item.selected()\"\n [class.ard-option-highlighted]=\"item.highlighted()\"\n [attr.aria-selected]=\"item.selected()\"\n (click)=\"selectSuggestion(item, $event)\"\n (mouseenter)=\"onSuggestionMouseEnter(item, $event)\"\n (mouseleave)=\"onSuggestionMouseLeave(item, $event)\"\n >\n <span class=\"ard-option-label\">\n <ng-template #defaultOptionTemplate>\n {{ item.label() }}\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"suggestionTemplate()?.template || defaultOptionTemplate\"\n [ngTemplateOutletContext]=\"getOptionContext(item)\"\n ></ng-template>\n </span>\n </div>\n }\n @if (areSuggestionsLoading()) {\n <ng-template #defaultLoadingPlaceholderTemplate>\n <div class=\"ard-option ard-option-disabled\">{{ suggestionsLoadingText() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"suggestionLoadingTemplate()?.template || defaultLoadingPlaceholderTemplate\"></ng-template>\n }\n </ard-dropdown-panel>\n</ng-template>\n", styles: [".ard-input-container{position:relative}.ard-placeholder{position:absolute;left:0;right:0}.ard-text-align-left input,.ard-text-align-left .ard-placeholder{text-align:left}.ard-text-align-center input,.ard-text-align-center .ard-placeholder{text-align:center}.ard-text-align-right input,.ard-text-align-right .ard-placeholder{text-align:right}.ard-autocomplete{position:absolute}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.ArdiumFormFieldFrameComponent, selector: "ard-form-field-frame", inputs: ["isFocused", "appearance", "variant", "compact", "prefixTemplate", "suffixTemplate"] }, { kind: "component", type: i4._ClearButtonComponent, selector: "ard-clear-button" }, { kind: "component", type: i5.ArdiumDropdownPanelComponent, selector: "ard-dropdown-panel", inputs: ["panelId", "headerTemplate", "footerTemplate", "filterValue", "appearance", "variant", "compact", "isOpen"], outputs: ["scroll", "scrollToEnd"] }, { kind: "directive", type: i6.ClickOutsideDirective, selector: "[ardClickOutside]", outputs: ["ardClickOutside"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
275
263
  }
276
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: ArdiumInputComponent, decorators: [{
264
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ArdiumInputComponent, decorators: [{
277
265
  type: Component,
278
266
  args: [{ selector: 'ard-input', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
279
267
  {
@@ -281,64 +269,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
281
269
  useExisting: forwardRef(() => ArdiumInputComponent),
282
270
  multi: true,
283
271
  },
284
- ], template: "<ard-form-field-frame\r\n [appearance]=\"appearance\"\r\n [variant]=\"variant\"\r\n [compact]=\"compact\"\r\n [isFocused]=\"isFocused\"\r\n [prefixTemplate]=\"prefixTemplate\"\r\n [suffixTemplate]=\"suffixTemplate\"\r\n>\r\n <div class=\"ard-input\"\r\n #suggestionsHost\r\n [ngClass]=\"ngClasses\"\r\n [class.ard-has-value]=\"value\"\r\n (click)=\"focus()\"\r\n >\r\n <div class=\"ard-input-container\">\r\n <div class=\"ard-autocomplete\" *ngIf=\"shouldDisplayAutocomplete\">{{ autocomplete }}</div>\r\n\r\n <ng-container *ngIf=\"shouldDisplayPlaceholder\">\r\n <ng-template #defaultPlaceholderTemplate>\r\n <div class=\"ard-placeholder\">{{ placeholder }}</div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate || defaultPlaceholderTemplate\"></ng-template>\r\n </ng-container>\r\n \r\n <input #textInput\r\n #focusableElement\r\n type=\"text\"\r\n [attr.id]=\"inputId\"\r\n [attr.tabindex]=\"tabIndex\"\r\n [readonly]=\"readonly\"\r\n [disabled]=\"disabled\"\r\n (input)=\"onInput(textInput.value)\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (copy)=\"onCopy($event)\"\r\n >\r\n </div>\r\n\r\n <ard-_clear-button\r\n *ngIf=\"shouldShowClearButton\"\r\n [title]=\"clearButtonTitle\"\r\n (click)=\"onClearButtonClick($event)\"\r\n ></ard-_clear-button>\r\n </div>\r\n</ard-form-field-frame>\r\n\r\n<ng-template #suggestionsTemplate>\r\n <ard-dropdown-panel\r\n class=\"ard-dropdown-panel ard-input-suggestions-panel\"\r\n role=\"listbox\"\r\n [compact]=\"compact\"\r\n aria-label=\"Suggestions\"\r\n [appearance]=\"dropdownAppearance\"\r\n [variant]=\"dropdownVariant\"\r\n [isOpen]=\"shouldDisplaySuggestions\"\r\n (ardClickOutside)=\"handleSuggestionClickOutside($event)\"\r\n (mousemove)=\"onMouseMove()\"\r\n >\r\n <div\r\n class=\"ard-option\"\r\n role=\"option\"\r\n *ngFor=\"let item of suggestionItems\"\r\n [class.ard-option-disabled]=\"item.disabled\"\r\n [class.ard-option-selected]=\"item.selected\"\r\n [class.ard-option-highlighted]=\"item.highlighted\"\r\n [class.ard-option-highlighted-recent]=\"item.highlighted_recently\"\r\n [attr.aria-selected]=\"item.selected\"\r\n (click)=\"selectSuggestion(item, $event)\"\r\n (mouseenter)=\"onSuggestionMouseEnter(item, $event)\"\r\n (mouseleave)=\"onSuggestionMouseLeave(item, $event)\"\r\n >\r\n <span class=\"ard-option-label\">\r\n <ng-template #defaultOptionTemplate>\r\n {{item.label}}\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"suggestionTemplate || defaultOptionTemplate\"\r\n [ngTemplateOutletContext]=\"getOptionContext(item)\"\r\n ></ng-template>\r\n </span>\r\n </div>\r\n\r\n <ng-container *ngIf=\"areSuggestionsLoading\">\r\n <ng-template #defaultLoadingPlaceholderTemplate>\r\n <div class=\"ard-option ard-option-disabled\">{{suggestionsLoadingText}}</div>\r\n </ng-template>\r\n \r\n <ng-template [ngTemplateOutlet]=\"suggestionLoadingTemplate || defaultLoadingPlaceholderTemplate\"></ng-template>\r\n </ng-container>\r\n </ard-dropdown-panel>\r\n</ng-template>", styles: ["@import\"@angular/cdk/overlay-prebuilt.css\";.ard-input-container{position:relative}.ard-placeholder{position:absolute;left:0;right:0}.ard-text-align-left input,.ard-text-align-left .ard-placeholder{text-align:left}.ard-text-align-center input,.ard-text-align-center .ard-placeholder{text-align:center}.ard-text-align-right input,.ard-text-align-right .ard-placeholder{text-align:right}.ard-autocomplete{position:absolute}\n"] }]
285
- }], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i1.Overlay }, { type: i1.ScrollStrategyOptions }], propDecorators: { charlist: [{
286
- type: Input
287
- }], charlistCaseInsensitive: [{
288
- type: Input
289
- }], autocomplete: [{
290
- type: Input
291
- }], acceptAutocompleteEvent: [{
292
- type: Output,
293
- args: ['acceptAutocomplete']
294
- }], prefixTemplate: [{
295
- type: ContentChild,
296
- args: [ArdInputPrefixTemplateDirective, { read: TemplateRef }]
297
- }], suffixTemplate: [{
298
- type: ContentChild,
299
- args: [ArdInputSuffixTemplateDirective, { read: TemplateRef }]
300
- }], placeholderTemplate: [{
301
- type: ContentChild,
302
- args: [ArdInputPlaceholderTemplateDirective, { read: TemplateRef }]
303
- }], valueFrom: [{
304
- type: Input,
305
- args: ['suggValueFrom']
306
- }], labelFrom: [{
307
- type: Input,
308
- args: ['suggLabelFrom']
309
- }], acceptSuggestionEvent: [{
310
- type: Output,
311
- args: ['acceptSuggestion']
312
- }], suggestions: [{
272
+ ], template: "<ard-form-field-frame\n [appearance]=\"appearance()\"\n [variant]=\"variant()\"\n [compact]=\"compact()\"\n [isFocused]=\"isFocused\"\n [prefixTemplate]=\"prefixTemplate()?.template\"\n [suffixTemplate]=\"suffixTemplate()?.template\"\n>\n <div\n class=\"ard-input\"\n #suggestionsHost\n [ngClass]=\"ngClasses()\"\n [class.ard-has-value]=\"value\"\n (click)=\"focus()\"\n >\n <div class=\"ard-input-container\">\n @if (shouldDisplayAutocomplete()) {\n <div class=\"ard-autocomplete\">{{ autocomplete() }}</div>\n }\n @if (shouldDisplayPlaceholder()) {\n <ng-template\n #defaultPlaceholderTemplate\n >\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\"></ng-template>\n }\n <input\n #textInput\n #focusableElement\n type=\"text\"\n [attr.id]=\"inputId()\"\n [attr.tabindex]=\"tabIndex()\"\n [readonly]=\"readonly()\"\n [disabled]=\"disabled()\"\n (input)=\"onInput(textInput.value)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (copy)=\"onCopy($event)\"\n />\n </div>\n\n @if (shouldShowClearButton()) {\n <ard-clear-button\n [title]=\"clearButtonTitle()\"\n (click)=\"onClearButtonClick($event)\"\n />\n }\n </div>\n</ard-form-field-frame>\n\n<ng-template #suggestionsTemplate>\n <ard-dropdown-panel\n class=\"ard-dropdown-panel ard-input-suggestions-panel\"\n role=\"listbox\"\n [compact]=\"compact\"\n aria-label=\"Suggestions\"\n [appearance]=\"dropdownAppearanceOrDefault()\"\n [variant]=\"dropdownVariantOrDefault()\"\n [isOpen]=\"shouldDisplaySuggestions()\"\n (ardClickOutside)=\"handleSuggestionClickOutside($event)\"\n (mousemove)=\"onMouseMove()\"\n >\n @for (item of suggestionItems(); track item.index()) {\n <div\n class=\"ard-option\"\n role=\"option\"\n [class.ard-option-selected]=\"item.selected()\"\n [class.ard-option-highlighted]=\"item.highlighted()\"\n [attr.aria-selected]=\"item.selected()\"\n (click)=\"selectSuggestion(item, $event)\"\n (mouseenter)=\"onSuggestionMouseEnter(item, $event)\"\n (mouseleave)=\"onSuggestionMouseLeave(item, $event)\"\n >\n <span class=\"ard-option-label\">\n <ng-template #defaultOptionTemplate>\n {{ item.label() }}\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"suggestionTemplate()?.template || defaultOptionTemplate\"\n [ngTemplateOutletContext]=\"getOptionContext(item)\"\n ></ng-template>\n </span>\n </div>\n }\n @if (areSuggestionsLoading()) {\n <ng-template #defaultLoadingPlaceholderTemplate>\n <div class=\"ard-option ard-option-disabled\">{{ suggestionsLoadingText() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"suggestionLoadingTemplate()?.template || defaultLoadingPlaceholderTemplate\"></ng-template>\n }\n </ard-dropdown-panel>\n</ng-template>\n", styles: [".ard-input-container{position:relative}.ard-placeholder{position:absolute;left:0;right:0}.ard-text-align-left input,.ard-text-align-left .ard-placeholder{text-align:left}.ard-text-align-center input,.ard-text-align-center .ard-placeholder{text-align:center}.ard-text-align-right input,.ard-text-align-right .ard-placeholder{text-align:right}.ard-autocomplete{position:absolute}\n"] }]
273
+ }], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i1.Overlay }, { type: i1.ScrollStrategyOptions }], propDecorators: { suggestions: [{
313
274
  type: Input
314
- }], areSuggestionsLoading: [{
315
- type: Input
316
- }], suggestionsLoadingText: [{
317
- type: Input
318
- }], suggestionTemplate: [{
319
- type: ContentChild,
320
- args: [ArdSuggestionTemplateDirective, { read: TemplateRef }]
321
- }], suggestionLoadingTemplate: [{
322
- type: ContentChild,
323
- args: [ArdInputLoadingTemplateDirective, { read: TemplateRef }]
324
- }], dropdownHost: [{
325
- type: ViewChild,
326
- args: ['suggestionsHost', { read: ElementRef }]
327
- }], dropdownTemplate: [{
328
- type: ViewChild,
329
- args: ['suggestionsTemplate', { read: TemplateRef }]
330
275
  }], onWindowResize: [{
331
276
  type: HostListener,
332
277
  args: ['window:resize']
333
278
  }], onMouseMove: [{
334
279
  type: HostListener,
335
280
  args: ['mousemove']
336
- }], dropdowonAppearance: [{
337
- type: Input
338
- }], dropdowonVariant: [{
339
- type: Input
340
281
  }], onKeyPress: [{
341
282
  type: HostListener,
342
283
  args: ['keydown', ['$event']]
343
284
  }] } });
344
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9pbnB1dHMvaW5wdXQvaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9pbnB1dHMvaW5wdXQvaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE4QixhQUFhLEVBQXFDLE1BQU0sc0JBQXNCLENBQUM7QUFDcEgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxFQUVULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRTFHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBMkIsTUFBTSxxREFBcUQsQ0FBQztBQUNuSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUVwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBQ3BGLE9BQU8sRUFD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RGpCLFlBQVk7dUJBQUMsOEJBQThCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUduRSx5QkFBeUI7c0JBRHhCLFlBQVk7dUJBQUMsZ0NBQWdDLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUtyRSxZQUFZO3NCQURYLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUdsRCxnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBeUN2RCxjQUFjO3NCQURiLFlBQVk7dUJBQUMsZUFBZTtnQkFnQjdCLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxXQUFXO2dCQTRDckIsbUJBQW1CO3NCQUR0QixLQUFLO2dCQVdGLGdCQUFnQjtzQkFEbkIsS0FBSztnQkFvQk4sVUFBVTtzQkFEVCxZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbm5lY3RlZFBvc2l0aW9uLCBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBPdmVybGF5UmVmLCBTY3JvbGxTdHJhdGVneU9wdGlvbnMgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBjb2VyY2VBcnJheVByb3BlcnR5LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYXJkaXVtLXVpL2RldmtpdCc7XHJcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnc2ltcGxlLWJvb2wnO1xyXG5pbXBvcnQgeyBEcm9wZG93blBhbmVsQXBwZWFyYW5jZSwgRHJvcGRvd25QYW5lbFZhcmlhbnQgfSBmcm9tICcuLi8uLi9kcm9wZG93bi1wYW5lbC9kcm9wZG93bi1wYW5lbC50eXBlcyc7XHJcbmltcG9ydCB7IEFyZFNpbXBsZXN0U3RvcmFnZUl0ZW0gfSBmcm9tICcuLi8uLi90eXBlcy9pdGVtLXN0b3JhZ2UudHlwZXMnO1xyXG5pbXBvcnQgeyBGb3JtRWxlbWVudEFwcGVhcmFuY2UsIEZvcm1FbGVtZW50VmFyaWFudCB9IGZyb20gJy4uLy4uL3R5cGVzL3RoZW1pbmcudHlwZXMnO1xyXG5pbXBvcnQgeyBTaW1wbGVzdEl0ZW1TdG9yYWdlLCBTaW1wbGVzdEl0ZW1TdG9yYWdlSG9zdCB9IGZyb20gJy4uLy4uL19pbnRlcm5hbC9pdGVtLXN0b3JhZ2VzL3NpbXBsZXN0LWl0ZW0tc3RvcmFnZSc7XHJcbmltcG9ydCB7IEFyZGl1bVNpbXBsZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vc2ltcGxlLWlucHV0L3NpbXBsZS1pbnB1dC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBPcHRpb25Db250ZXh0IH0gZnJvbSAnLi8uLi8uLi90eXBlcy9pdGVtLXN0b3JhZ2UudHlwZXMnO1xyXG5pbXBvcnQgeyBlc2NhcGVBbmRDcmVhdGVSZWdleCwgSW5wdXRNb2RlbCwgSW5wdXRNb2RlbEhvc3QgfSBmcm9tICcuLy4uL2lucHV0LXV0aWxzJztcclxuaW1wb3J0IHtcclxuICBBcmRJbnB1dExvYWRpbmdUZW1wbGF0ZURpcmVjdGl2ZSxcclxuICBBcmRJbnB1dFBsYWNlaG9sZGVyVGVtcGxhdGVEaXJlY3RpdmUsXHJcbiAgQXJkSW5wdXRQcmVmaXhUZW1wbGF0ZURpcmVjdGl2ZSxcclxuICBBcmRJbnB1dFN1ZmZpeFRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZFN1Z2dlc3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSxcclxufSBmcm9tICcuL2lucHV0LmRpcmVjdGl2ZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcmQtaW5wdXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQXJkaXVtSW5wdXRDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFyZGl1bUlucHV0Q29tcG9uZW50IGV4dGVuZHMgQXJkaXVtU2ltcGxlSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBJbnB1dE1vZGVsSG9zdCwgT25Jbml0LCBTaW1wbGVzdEl0ZW1TdG9yYWdlSG9zdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50ITogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgcHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5LFxyXG4gICAgcHJpdmF0ZSBzY3JvbGxTdHJhdGVneU9wdHM6IFNjcm9sbFN0cmF0ZWd5T3B0aW9uc1xyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuXHJcbiAgICB0aGlzLmVsZW1lbnQgPSB2aWV3Q29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHJlYWRvbmx5IERFRkFVTFRTID0ge1xyXG4gICAgY2xlYXJCdXR0b25UaXRsZTogJ0NsZWFyJyxcclxuICAgIHZhbHVlRnJvbTogJ3ZhbHVlJyxcclxuICAgIGxhYmVsRnJvbTogJ2xhYmVsJyxcclxuICAgIHN1Z2dlc3Rpb25zTG9hZGluZ1RleHQ6ICdMb2FkaW5nLi4uJyxcclxuICB9O1xyXG4gIC8vISBpbnB1dCB2aWV3XHJcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGlucHV0TW9kZWwhOiBJbnB1dE1vZGVsO1xyXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbnB1dE1vZGVsID0gbmV3IElucHV0TW9kZWwodGhpcy50ZXh0SW5wdXRFbC5uYXRpdmVFbGVtZW50LCB0aGlzKTtcclxuICAgIHRoaXMuX3NldElucHV0QXR0cmlidXRlcygpO1xyXG4gICAgLy9zZXQgdGhlIHZhbHVlXHJcbiAgICBpZiAodGhpcy5fdmFsdWVCZWZvcmVJbml0KSB7XHJcbiAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLl92YWx1ZUJlZm9yZUluaXQpO1xyXG4gICAgICBkZWxldGUgdGhpcy5fdmFsdWVCZWZvcmVJbml0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8hIGFsbG93bGlzdC9kZW55bGlzdCBvZiBjaGFyYWN0ZXJzXHJcbiAgLy91c2Ugc3RhbmRhcmQgc3RyaW5nIGZvciBkZW55bGlzdCwgcHJlcGVuZCB3aXRoIF4gZm9yIGFsbG93bGlzdFxyXG4gIHByaXZhdGUgX2NoYXJsaXN0UmVnRXhwPzogUmVnRXhwO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGNoYXJsaXN0KCk6IFJlZ0V4cCB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hhcmxpc3RSZWdFeHA7XHJcbiAgfVxyXG4gIHNldCBjaGFybGlzdCh2OiBhbnkpIHtcclxuICAgIGlmICghaXNTdHJpbmcodikpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjaGFybGlzdFJlZ0V4cCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy4nKTtcclxuICAgIH1cclxuICAgIGxldCBmbGFncyA9IHRoaXMuX2NoYXJsaXN0Q2FzZUluc2Vuc2l0aXZlID8gJ2knIDogJyc7XHJcbiAgICBsZXQgbmVnYXRlZCA9IHYuc3RhcnRzV2l0aCgnXicpO1xyXG4gICAgdGhpcy5fY2hhcmxpc3RSZWdFeHAgPSBlc2NhcGVBbmRDcmVhdGVSZWdleCh2LCBmbGFncywgIW5lZ2F0ZWQpO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgX2NoYXJsaXN0Q2FzZUluc2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBnZXQgY2hhcmxpc3RDYXNlSW5zZW5zaXRpdmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hhcmxpc3RDYXNlSW5zZW5zaXRpdmU7XHJcbiAgfVxyXG4gIHNldCBjaGFybGlzdENhc2VJbnNlbnNpdGl2ZSh2OiBhbnkpIHtcclxuICAgIHRoaXMuX2NoYXJsaXN0Q2FzZUluc2Vuc2l0aXZlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xyXG4gICAgaWYgKHRoaXMuX2NoYXJsaXN0UmVnRXhwKSB7XHJcbiAgICAgIGxldCBmbGFncyA9IHRoaXMuX2NoYXJsaXN0Q2FzZUluc2Vuc2l0aXZlID8gJ2knIDogJyc7XHJcbiAgICAgIHRoaXMuX2NoYXJsaXN0UmVnRXhwID0gbmV3IFJlZ0V4cCh0aGlzLl9jaGFybGlzdFJlZ0V4cC5zb3VyY2UsIGZsYWdzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vISBhdXRvY29tcGxldGVcclxuICBwcm90ZWN0ZWQgX2F1dG9jb21wbGV0ZT86IHN0cmluZyB8IG51bGw7XHJcbiAgQElucHV0KClcclxuICBzZXQgYXV0b2NvbXBsZXRlKHY6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2F1dG9jb21wbGV0ZSA9IHY7XHJcbiAgfVxyXG4gIGdldCBhdXRvY29tcGxldGUoKTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXV0b2NvbXBsZXRlID8/ICcnO1xyXG4gIH1cclxuICAvL3Nob3VsZCBzaG93IGF1dG9jb21wbGV0ZVxyXG4gIGdldCBzaG91bGREaXNwbGF5QXV0b2NvbXBsZXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLmRpc2FibGVkICYmIEJvb2xlYW4odGhpcy5hdXRvY29tcGxldGUpO1xyXG4gIH1cclxuICAvL2F1dG9jb21wbGV0ZSBldmVudFxyXG4gIEBPdXRwdXQoJ2FjY2VwdEF1dG9jb21wbGV0ZScpIGFjY2VwdEF1dG9jb21wbGV0ZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyEgcHJlZml4ICYgc3VmZml4XHJcbiAgQENvbnRlbnRDaGlsZChBcmRJbnB1dFByZWZpeFRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXHJcbiAgb3ZlcnJpZGUgcHJlZml4VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoQXJkSW5wdXRTdWZmaXhUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxyXG4gIG92ZXJyaWRlIHN1ZmZpeFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLy8hIHBsYWNlaG9sZGVyXHJcbiAgQENvbnRlbnRDaGlsZChBcmRJbnB1dFBsYWNlaG9sZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBvdmVycmlkZSBwbGFjZWhvbGRlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLy8hIHN1Z2dlc3Rpb25zXHJcbiAgc3VnZ2VzdGlvblN0b3JhZ2UgPSBuZXcgU2ltcGxlc3RJdGVtU3RvcmFnZSh0aGlzKTtcclxuXHJcbiAgQElucHV0KCdzdWdnVmFsdWVGcm9tJykgdmFsdWVGcm9tPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgnc3VnZ0xhYmVsRnJvbScpIGxhYmVsRnJvbT86IHN0cmluZztcclxuXHJcbiAgQE91dHB1dCgnYWNjZXB0U3VnZ2VzdGlvbicpIGFjY2VwdFN1Z2dlc3Rpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBnZXQgc3VnZ2VzdGlvbkl0ZW1zKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLnN1Z2dlc3Rpb25TdG9yYWdlLml0ZW1zO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIHNldCBzdWdnZXN0aW9ucyh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB2YWx1ZSA9IGNvZXJjZUFycmF5UHJvcGVydHkodmFsdWUpO1xyXG5cclxuICAgIGxldCBzaG91bGRQcmludEVycm9ycyA9IHRoaXMuc3VnZ2VzdGlvblN0b3JhZ2Uuc2V0SXRlbXModmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX3N1Z2dlc3Rpb25Ecm9wZG93T3BlbiA9IHRydWU7XHJcbiAgICB0aGlzLnN1Z2dlc3Rpb25TdG9yYWdlLmhpZ2hsaWdodEZpcnN0SXRlbSgpO1xyXG5cclxuICAgIGlmIChzaG91bGRQcmludEVycm9ycykge1xyXG4gICAgICB0aGlzLl9wcmludFByaW1pdGl2ZVdhcm5pbmdzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX3ByaW50UHJpbWl0aXZlV2FybmluZ3MoKSB7XHJcbiAgICBmdW5jdGlvbiBtYWtlV2FybmluZyhzdHI6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICBjb25zb2xlLndhcm4oYFNraXBwZWQgdXNpbmcgWyR7c3RyfV0gcHJvcGVydHkgYm91bmQgdG8gPGFyZC1pbnB1dD4sIGFzIHNvbWUgcHJvdmlkZWQgc3VnZ2VzdGlvbiBpdGVtcyBhcmUgb2YgcHJpbWl0aXZlIHR5cGVgKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnZhbHVlRnJvbSkge1xyXG4gICAgICBtYWtlV2FybmluZygndmFsdWVGcm9tJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5sYWJlbEZyb20pIHtcclxuICAgICAgbWFrZVdhcm5pbmcoJ2xhYmVsRnJvbScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc3VnZ2VzdGlvbkRyb3Bkb3dPcGVuOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGdldCBzaG91bGREaXNwbGF5U3VnZ2VzdGlvbnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIXRoaXMuZGlzYWJsZWQgJiYgKHRoaXMuc3VnZ2VzdGlvbkl0ZW1zLmxlbmd0aCA+IDAgfHwgdGhpcy5hcmVTdWdnZXN0aW9uc0xvYWRpbmcpICYmIHRoaXMuX3N1Z2dlc3Rpb25Ecm9wZG93T3BlbjtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGFyZVN1Z2dlc3Rpb25zTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHN1Z2dlc3Rpb25zTG9hZGluZ1RleHQ6IHN0cmluZyA9IHRoaXMuREVGQVVMVFMuc3VnZ2VzdGlvbnNMb2FkaW5nVGV4dDtcclxuXHJcbiAgQENvbnRlbnRDaGlsZChBcmRTdWdnZXN0aW9uVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBzdWdnZXN0aW9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoQXJkSW5wdXRMb2FkaW5nVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBzdWdnZXN0aW9uTG9hZGluZ1RlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLy8hIHN1Z2dlc3Rpb25zIG92ZXJsYXlcclxuICBAVmlld0NoaWxkKCdzdWdnZXN0aW9uc0hvc3QnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcclxuICBkcm9wZG93bkhvc3QhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuICBAVmlld0NoaWxkKCdzdWdnZXN0aW9uc1RlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxyXG4gIGRyb3Bkb3duVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBwcml2YXRlIGRyb3Bkb3duT3ZlcmxheSE6IE92ZXJsYXlSZWY7XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5XHJcbiAgICAgIC5wb3NpdGlvbigpXHJcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuZHJvcGRvd25Ib3N0KVxyXG4gICAgICAud2l0aFBvc2l0aW9ucyhbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcclxuICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxyXG4gICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXHJcbiAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXHJcbiAgICAgICAgfSBhcyBDb25uZWN0ZWRQb3NpdGlvbixcclxuICAgICAgXSlcclxuICAgICAgLndpdGhQdXNoKGZhbHNlKTtcclxuXHJcbiAgICBjb25zdCBjb25maWcgPSBuZXcgT3ZlcmxheUNvbmZpZyh7XHJcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHN0cmF0ZWd5LFxyXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5zY3JvbGxTdHJhdGVneU9wdHMuYmxvY2soKSxcclxuICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5kcm9wZG93bk92ZXJsYXkgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKGNvbmZpZyk7XHJcblxyXG4gICAgdGhpcy5kcm9wZG93bk92ZXJsYXk7XHJcblxyXG4gICAgY29uc3QgcG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMuZHJvcGRvd25UZW1wbGF0ZSwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcclxuICAgIHRoaXMuZHJvcGRvd25PdmVybGF5LmF0dGFjaChwb3J0YWwpO1xyXG5cclxuICAgIHRoaXMuc2V0T3ZlcmxheVNpemUoKTtcclxuICB9XHJcblxyXG4gIHNldE92ZXJsYXlTaXplKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcmVjdCA9IHRoaXMuZHJvcGRvd25Ib3N0Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICB0aGlzLmRyb3Bkb3duT3ZlcmxheS51cGRhdGVTaXplKHsgd2lkdGg6IHJlY3Qud2lkdGggfSk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICBvbldpbmRvd1Jlc2l6ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0T3ZlcmxheVNpemUoKTtcclxuICB9XHJcblxyXG4gIGdldE9wdGlvbkNvbnRleHQoaXRlbTogQXJkU2ltcGxlc3RTdG9yYWdlSXRlbSk6IE9wdGlvbkNvbnRleHQge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJGltcGxpY2l0OiBpdGVtLFxyXG4gICAgICBpdGVtLFxyXG4gICAgICBpdGVtRGF0YTogaXRlbS5pdGVtRGF0YSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvLyEgc3VnZ2VzdGlvbi1oaWdobGlnaC1yZWxhdGVkXHJcbiAgcHJpdmF0ZSBfaXNNb3VzZUJlaW5nVXNlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlbW92ZScpXHJcbiAgb25Nb3VzZU1vdmUoKSB7XHJcbiAgICB0aGlzLl9pc01vdXNlQmVpbmdVc2VkID0gdHJ1ZTtcclxuICB9XHJcbiAgb25TdWdnZXN0aW9uTW91c2VFbnRlcihpdGVtOiBBcmRTaW1wbGVzdFN0b3JhZ2VJdGVtLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9pc01vdXNlQmVpbmdVc2VkKSByZXR1cm47XHJcbiAgICB0aGlzLnN1Z2dlc3Rpb25TdG9yYWdlLmhpZ2hsaWdodEl0ZW0oaXRlbSk7XHJcblxyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG4gIG9uU3VnZ2VzdGlvbk1vdXNlTGVhdmUoaXRlbTogQXJkU2ltcGxlc3RTdG9yYWdlSXRlbSwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5faXNNb3VzZUJlaW5nVXNlZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5zdWdnZXN0aW9uU3RvcmFnZS51bmhpZ2hsaWdodEl0ZW0oaXRlbSk7XHJcblxyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyEgc3VnZ2VzdGlvbiBzZWxlY3Rpb25cclxuICBzZWxlY3RTdWdnZXN0aW9uKGl0ZW06IEFyZFNpbXBsZXN0U3RvcmFnZUl0ZW0sIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICB0aGlzLl9zZWxlY3RTdWdnZXN0aW9uKGl0ZW0pO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZWxlY3RTdWdnZXN0aW9uKGl0ZW06IEFyZFNpbXBsZXN0U3RvcmFnZUl0ZW0pOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zdWdnZXN0aW9uU3RvcmFnZS5zZWxlY3RJdGVtKGl0ZW0pO1xyXG4gICAgdGhpcy53cml0ZVZhbHVlKHNlbGVjdGVkID8/ICcnKTtcclxuXHJcbiAgICB0aGlzLmFjY2VwdFN1Z2dlc3Rpb25FdmVudC5uZXh0KHNlbGVjdGVkKTtcclxuXHJcbiAgICAvL2ltcG9ydGFudCB0byBkbyB0aG9zZSB0d28gdGhpbmdzIGluIHRoaXMgZXhhY3Qgb3JkZXJcclxuICAgIHRoaXMuZm9jdXMoKTtcclxuICAgIHRoaXMuX3N1Z2dlc3Rpb25Ecm9wZG93T3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2tPdXRzaWRlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2hvdWxkRGlzcGxheVN1Z2dlc3Rpb25zKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKHRoaXMuZWxlbWVudC5jb250YWlucyh0YXJnZXQpKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fc3VnZ2VzdGlvbkRyb3Bkb3dPcGVuID0gZmFsc2U7XHJcbiAgfVxyXG4gIC8vISBzdWdnZXN0aW9uIGFwcGVhcmFuY2VcclxuICBwcml2YXRlIF9kcm9wZG93bkFwcGVhcmFuY2U/OiBEcm9wZG93blBhbmVsQXBwZWFyYW5jZSA9IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKVxyXG4gIHNldCBkcm9wZG93b25BcHBlYXJhbmNlKHY6IERyb3Bkb3duUGFuZWxBcHBlYXJhbmNlKSB7XHJcbiAgICB0aGlzLl9kcm9wZG93bkFwcGVhcmFuY2UgPSB2O1xyXG4gIH1cclxuICBnZXQgZHJvcGRvd25BcHBlYXJhbmNlKCk6IERyb3Bkb3duUGFuZWxBcHBlYXJhbmNlIHtcclxuICAgIGlmICh0aGlzLl9kcm9wZG93bkFwcGVhcmFuY2UpIHJldHVybiB0aGlzLl9kcm9wZG93bkFwcGVhcmFuY2U7XHJcbiAgICBpZiAodGhpcy5hcHBlYXJhbmNlID09IEZvcm1FbGVtZW50QXBwZWFyYW5jZS5PdXRsaW5lZCkgcmV0dXJuIERyb3Bkb3duUGFuZWxBcHBlYXJhbmNlLk91dGxpbmVkO1xyXG4gICAgcmV0dXJuIERyb3Bkb3duUGFuZWxBcHBlYXJhbmNlLlJhaXNlZDtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZHJvcGRvd25WYXJpYW50PzogRHJvcGRvd25QYW5lbFZhcmlhbnQgPSB1bmRlZmluZWQ7XHJcbiAgQElucHV0KClcclxuICBzZXQgZHJvcGRvd29uVmFyaWFudCh2OiBEcm9wZG93blBhbmVsVmFyaWFudCkge1xyXG4gICAgdGhpcy5fZHJvcGRvd25WYXJpYW50ID0gdjtcclxuICB9XHJcbiAgZ2V0IGRyb3Bkb3duVmFyaWFudCgpOiBEcm9wZG93blBhbmVsVmFyaWFudCB7XHJcbiAgICBpZiAodGhpcy5fZHJvcGRvd25WYXJpYW50KSByZXR1cm4gdGhpcy5fZHJvcGRvd25WYXJpYW50O1xyXG4gICAgaWYgKHRoaXMudmFyaWFudCA9PSBGb3JtRWxlbWVudFZhcmlhbnQuUGlsbCkgcmV0dXJuIERyb3Bkb3duUGFuZWxWYXJpYW50LlJvdW5kZWQ7XHJcbiAgICByZXR1cm4gdGhpcy52YXJpYW50O1xyXG4gIH1cclxuXHJcbiAgLy8hIGZvY3VzIG92ZXJyaWRlXHJcbiAgb3ZlcnJpZGUgb25Gb2N1cyhldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3VnZ2VzdGlvbkRyb3Bkb3dPcGVuID0gdHJ1ZTtcclxuICAgIGlmICghdGhpcy5zdWdnZXN0aW9uU3RvcmFnZS5oaWdobGlnaHRlZEl0ZW0pIHRoaXMuc3VnZ2VzdGlvblN0b3JhZ2UuaGlnaGxpZ2h0Rmlyc3RJdGVtKCk7XHJcblxyXG4gICAgc3VwZXIub25Gb2N1cyhldmVudCk7XHJcbiAgfVxyXG5cclxuICAvLyEga2V5IHByZXNzIGhhbmRsZXJzXHJcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgb25LZXlQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgc3dpdGNoIChldmVudC5jb2RlKSB7XHJcbiAgICAgIGNhc2UgJ0VudGVyJzoge1xyXG4gICAgICAgIHRoaXMuX29uVGFiT3JFbnRlclByZXNzKGV2ZW50KTtcclxuICAgICAgICB0aGlzLl9vbkVudGVyUHJlc3MoZXZlbnQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdUYWInOiB7XHJcbiAgICAgICAgdGhpcy5fb25UYWJPckVudGVyUHJlc3MoZXZlbnQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBcnJvd0Rvd24nOiB7XHJcbiAgICAgICAgdGhpcy5fb25BcnJvd0Rvd25QcmVzcyhldmVudCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0Fycm93VXAnOiB7XHJcbiAgICAgICAgdGhpcy5fb25BcnJvd1VwUHJlc3MoZXZlbnQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBwcm90ZWN0ZWQgX29uVGFiT3JFbnRlclByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2hvdWxkRGlzcGxheUF1dG9jb21wbGV0ZSkgcmV0dXJuO1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICB0aGlzLm9uSW5wdXQodGhpcy5hdXRvY29tcGxldGUgPz8gJycpO1xyXG4gICAgdGhpcy5hY2NlcHRBdXRvY29tcGxldGVFdmVudC5lbWl0KCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX29uRW50ZXJQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnNob3VsZERpc3BsYXlTdWdnZXN0aW9ucykgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLnN1Z2dlc3Rpb25TdG9yYWdlLmhpZ2hsaWdodGVkSXRlbSkgcmV0dXJuO1xyXG5cclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLl9zZWxlY3RTdWdnZXN0aW9uKHRoaXMuc3VnZ2VzdGlvblN0b3JhZ2UuaGlnaGxpZ2h0ZWRJdGVtKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfb25BcnJvd0Rvd25QcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnNob3VsZERpc3BsYXlTdWdnZXN0aW9ucykgcmV0dXJuO1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICB0aGlzLl9pc01vdXNlQmVpbmdVc2VkID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zdWdnZXN0aW9uU3RvcmFnZS5oaWdobGlnaHROZXh0SXRlbSgrMSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX29uQXJyb3dVcFByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2hvdWxkRGlzcGxheVN1Z2dlc3Rpb25zKSByZXR1cm47XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIHRoaXMuX2lzTW91c2VCZWluZ1VzZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnN1Z2dlc3Rpb25TdG9yYWdlLmhpZ2hsaWdodE5leHRJdGVtKC0xKTtcclxuICB9XHJcbn1cclxuIiwiPGFyZC1mb3JtLWZpZWxkLWZyYW1lXHJcbiAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcclxuICAgIFt2YXJpYW50XT1cInZhcmlhbnRcIlxyXG4gICAgW2NvbXBhY3RdPVwiY29tcGFjdFwiXHJcbiAgICBbaXNGb2N1c2VkXT1cImlzRm9jdXNlZFwiXHJcbiAgICBbcHJlZml4VGVtcGxhdGVdPVwicHJlZml4VGVtcGxhdGVcIlxyXG4gICAgW3N1ZmZpeFRlbXBsYXRlXT1cInN1ZmZpeFRlbXBsYXRlXCJcclxuPlxyXG4gICAgPGRpdiBjbGFzcz1cImFyZC1pbnB1dFwiXHJcbiAgICAgICAgI3N1Z2dlc3Rpb25zSG9zdFxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIm5nQ2xhc3Nlc1wiXHJcbiAgICAgICAgW2NsYXNzLmFyZC1oYXMtdmFsdWVdPVwidmFsdWVcIlxyXG4gICAgICAgIChjbGljayk9XCJmb2N1cygpXCJcclxuICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLWlucHV0LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLWF1dG9jb21wbGV0ZVwiICpuZ0lmPVwic2hvdWxkRGlzcGxheUF1dG9jb21wbGV0ZVwiPnt7IGF1dG9jb21wbGV0ZSB9fTwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3VsZERpc3BsYXlQbGFjZWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0UGxhY2Vob2xkZXJUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLXBsYWNlaG9sZGVyXCI+e3sgcGxhY2Vob2xkZXIgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBsYWNlaG9sZGVyVGVtcGxhdGUgfHwgZGVmYXVsdFBsYWNlaG9sZGVyVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxpbnB1dCAjdGV4dElucHV0XHJcbiAgICAgICAgICAgICAgICAjZm9jdXNhYmxlRWxlbWVudFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiaW5wdXRJZFwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJ0YWJJbmRleFwiXHJcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbklucHV0KHRleHRJbnB1dC52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoY29weSk9XCJvbkNvcHkoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGFyZC1fY2xlYXItYnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwic2hvdWxkU2hvd0NsZWFyQnV0dG9uXCJcclxuICAgICAgICAgICAgW3RpdGxlXT1cImNsZWFyQnV0dG9uVGl0bGVcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25DbGVhckJ1dHRvbkNsaWNrKCRldmVudClcIlxyXG4gICAgICAgID48L2FyZC1fY2xlYXItYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvYXJkLWZvcm0tZmllbGQtZnJhbWU+XHJcblxyXG48bmctdGVtcGxhdGUgI3N1Z2dlc3Rpb25zVGVtcGxhdGU+XHJcbiAgICA8YXJkLWRyb3Bkb3duLXBhbmVsXHJcbiAgICAgICAgY2xhc3M9XCJhcmQtZHJvcGRvd24tcGFuZWwgYXJkLWlucHV0LXN1Z2dlc3Rpb25zLXBhbmVsXCJcclxuICAgICAgICByb2xlPVwibGlzdGJveFwiXHJcbiAgICAgICAgW2NvbXBhY3RdPVwiY29tcGFjdFwiXHJcbiAgICAgICAgYXJpYS1sYWJlbD1cIlN1Z2dlc3Rpb25zXCJcclxuICAgICAgICBbYXBwZWFyYW5jZV09XCJkcm9wZG93bkFwcGVhcmFuY2VcIlxyXG4gICAgICAgIFt2YXJpYW50XT1cImRyb3Bkb3duVmFyaWFudFwiXHJcbiAgICAgICAgW2lzT3Blbl09XCJzaG91bGREaXNwbGF5U3VnZ2VzdGlvbnNcIlxyXG4gICAgICAgIChhcmRDbGlja091dHNpZGUpPVwiaGFuZGxlU3VnZ2VzdGlvbkNsaWNrT3V0c2lkZSgkZXZlbnQpXCJcclxuICAgICAgICAobW91c2Vtb3ZlKT1cIm9uTW91c2VNb3ZlKClcIlxyXG4gICAgPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJhcmQtb3B0aW9uXCJcclxuICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHN1Z2dlc3Rpb25JdGVtc1wiXHJcbiAgICAgICAgICAgIFtjbGFzcy5hcmQtb3B0aW9uLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICBbY2xhc3MuYXJkLW9wdGlvbi1zZWxlY3RlZF09XCJpdGVtLnNlbGVjdGVkXCJcclxuICAgICAgICAgICAgW2NsYXNzLmFyZC1vcHRpb24taGlnaGxpZ2h0ZWRdPVwiaXRlbS5oaWdobGlnaHRlZFwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5hcmQtb3B0aW9uLWhpZ2hsaWdodGVkLXJlY2VudF09XCJpdGVtLmhpZ2hsaWdodGVkX3JlY2VudGx5XCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpdGVtLnNlbGVjdGVkXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFN1Z2dlc3Rpb24oaXRlbSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm9uU3VnZ2VzdGlvbk1vdXNlRW50ZXIoaXRlbSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9uU3VnZ2VzdGlvbk1vdXNlTGVhdmUoaXRlbSwgJGV2ZW50KVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFyZC1vcHRpb24tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdE9wdGlvblRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7aXRlbS5sYWJlbH19XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInN1Z2dlc3Rpb25UZW1wbGF0ZSB8fCBkZWZhdWx0T3B0aW9uVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRPcHRpb25Db250ZXh0KGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhcmVTdWdnZXN0aW9uc0xvYWRpbmdcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TG9hZGluZ1BsYWNlaG9sZGVyVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLW9wdGlvbiBhcmQtb3B0aW9uLWRpc2FibGVkXCI+e3tzdWdnZXN0aW9uc0xvYWRpbmdUZXh0fX08L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICBcclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInN1Z2dlc3Rpb25Mb2FkaW5nVGVtcGxhdGUgfHwgZGVmYXVsdExvYWRpbmdQbGFjZWhvbGRlclRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvYXJkLWRyb3Bkb3duLXBhbmVsPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9pbnB1dHMvaW5wdXQvaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9pbnB1dHMvaW5wdXQvaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE4QixhQUFhLEVBQXFDLE1BQU0sc0JBQXNCLENBQUM7QUFDcEgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsV0FBVyxFQUVYLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsbUJBQW1CLEVBQTJCLE1BQU0scURBQXFELENBQUM7QUFDbkgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFMUcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFcEYsT0FBTyxFQUFFLFVBQVUsRUFBa0Isb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNw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QUFXO3NCQURkLEtBQUs7Z0JBa0ZOLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxlQUFlO2dCQWdCN0IsV0FBVztzQkFEVixZQUFZO3VCQUFDLFdBQVc7Z0JBa0V6QixVQUFVO3NCQURULFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29ubmVjdGVkUG9zaXRpb24sIE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYsIFNjcm9sbFN0cmF0ZWd5T3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGNvbXB1dGVkLFxuICBjb250ZW50Q2hpbGQsXG4gIGZvcndhcmRSZWYsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjb2VyY2VBcnJheVByb3BlcnR5LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYXJkaXVtLXVpL2RldmtpdCc7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ3NpbXBsZS1ib29sJztcbmltcG9ydCB7IFNpbXBsZXN0SXRlbVN0b3JhZ2UsIFNpbXBsZXN0SXRlbVN0b3JhZ2VIb3N0IH0gZnJvbSAnLi4vLi4vX2ludGVybmFsL2l0ZW0tc3RvcmFnZXMvc2ltcGxlc3QtaXRlbS1zdG9yYWdlJztcbmltcG9ydCB7IERyb3Bkb3duUGFuZWxBcHBlYXJhbmNlLCBEcm9wZG93blBhbmVsVmFyaWFudCB9IGZyb20gJy4uLy4uL2Ryb3Bkb3duLXBhbmVsL2Ryb3Bkb3duLXBhbmVsLnR5cGVzJztcbmltcG9ydCB7IEFyZFNpbXBsZXN0U3RvcmFnZUl0ZW0gfSBmcm9tICcuLi8uLi90eXBlcy9pdGVtLXN0b3JhZ2UudHlwZXMnO1xuaW1wb3J0IHsgRm9ybUVsZW1lbnRBcHBlYXJhbmNlLCBGb3JtRWxlbWVudFZhcmlhbnQgfSBmcm9tICcuLi8uLi90eXBlcy90aGVtaW5nLnR5cGVzJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMvdXRpbGl0eS50eXBlcyc7XG5pbXBvcnQgeyBBcmRpdW1TaW1wbGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL3NpbXBsZS1pbnB1dC9zaW1wbGUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IE9wdGlvbkNvbnRleHQgfSBmcm9tICcuLy4uLy4uL3R5cGVzL2l0ZW0tc3RvcmFnZS50eXBlcyc7XG5pbXBvcnQgeyBJbnB1dE1vZGVsLCBJbnB1dE1vZGVsSG9zdCwgZXNjYXBlQW5kQ3JlYXRlUmVnZXggfSBmcm9tICcuLy4uL2lucHV0LXV0aWxzJztcbmltcG9ydCB7XG4gIEFyZElucHV0TG9hZGluZ1RlbXBsYXRlRGlyZWN0aXZlLFxuICBBcmRJbnB1dFBsYWNlaG9sZGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gIEFyZElucHV0UHJlZml4VGVtcGxhdGVEaXJlY3RpdmUsXG4gIEFyZElucHV0U3VmZml4VGVtcGxhdGVEaXJlY3RpdmUsXG4gIEFyZFN1Z2dlc3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSxcbn0gZnJvbSAnLi9pbnB1dC5kaXJlY3RpdmVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXJkLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQXJkaXVtSW5wdXRDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQXJkaXVtSW5wdXRDb21wb25lbnRcbiAgZXh0ZW5kcyBBcmRpdW1TaW1wbGVJbnB1dENvbXBvbmVudFxuICBpbXBsZW1lbnRzIElucHV0TW9kZWxIb3N0LCBTaW1wbGVzdEl0ZW1TdG9yYWdlSG9zdCwgQWZ0ZXJWaWV3SW5pdFxue1xuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnQhOiBIVE1MRWxlbWVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5LFxuICAgIHByaXZhdGUgc2Nyb2xsU3RyYXRlZ3lPcHRzOiBTY3JvbGxTdHJhdGVneU9wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuZWxlbWVudCA9IHZpZXdDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgb3ZlcnJpZGUgcmVhZG9ubHkgREVGQVVMVFMgPSB7XG4gICAgY2xlYXJCdXR0b25UaXRsZTogJ0NsZWFyJyxcbiAgICB2YWx1ZUZyb206ICd2YWx1ZScsXG4gICAgbGFiZWxGcm9tOiAnbGFiZWwnLFxuICAgIHN1Z2dlc3Rpb25zTG9hZGluZ1RleHQ6ICdMb2FkaW5nLi4uJyxcbiAgfTtcbiAgLy8hIGlucHV0IHZpZXdcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlYWRvbmx5IGlucHV0TW9kZWwgPSBuZXcgSW5wdXRNb2RlbCh0aGlzKTtcblxuICAvLyEgYWxsb3dsaXN0L2RlbnlsaXN0IG9mIGNoYXJhY3RlcnNcbiAgLy91c2Ugc3RhbmRhcmQgc3RyaW5nIGZvciBkZW55bGlzdCwgcHJlcGVuZCB3aXRoIF4gZm9yIGFsbG93bGlzdFxuICByZWFkb25seSBjaGFybGlzdEZyb21JbnB1dCA9IGlucHV0PFJlZ0V4cCB8IHVuZGVmaW5lZCwgc3RyaW5nPih1bmRlZmluZWQsIHtcbiAgICBhbGlhczogJ2NoYXJsaXN0JyxcbiAgICB0cmFuc2Zvcm06IHYgPT4ge1xuICAgICAgaWYgKCFpc1N0cmluZyh2KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FSRC1GVDAwMzM6IFtjaGFybGlzdF0gbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcsIGdvdCBcIlwiLicpO1xuICAgICAgfVxuICAgICAgY29uc3QgbmVnYXRlZCA9IHYuc3RhcnRzV2l0aCgnXicpO1xuICAgICAgcmV0dXJuIGVzY2FwZUFuZENyZWF0ZVJlZ2V4KHYsICcnLCAhbmVnYXRlZCk7XG4gICAgfSxcbiAgfSk7XG4gIHJlYWRvbmx5IGNoYXJsaXN0Q2FzZUluc2Vuc2l0aXZlID0gaW5wdXQ8Ym9vbGVhbiwgYW55PihmYWxzZSwgeyB0cmFuc2Zvcm06IHYgPT4gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpIH0pO1xuXG4gIHJlYWRvbmx5IGNoYXJsaXN0ID0gY29tcHV0ZWQ8UmVnRXhwIHwgdW5kZWZpbmVkPigoKSA9PiB7XG4gICAgY29uc3QgYyA9IHRoaXMuY2hhcmxpc3RGcm9tSW5wdXQoKTtcbiAgICBpZiAoIXRoaXMuY2hhcmxpc3RDYXNlSW5zZW5zaXRpdmUoKSB8fCAhYykge1xuICAgICAgcmV0dXJuIGM7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUmVnRXhwKGMuc291cmNlLCAnaScpO1xuICB9KTtcblxuICAvLyEgYXV0b2NvbXBsZXRlXG4gIHJlYWRvbmx5IGF1dG9jb21wbGV0ZSA9IGlucHV0PE51bGxhYmxlPHN0cmluZz4+KHVuZGVmaW5lZCk7XG5cbiAgcmVhZG9ubHkgc2hvdWxkRGlzcGxheUF1dG9jb21wbGV0ZSA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+ICF0aGlzLmRpc2FibGVkKCkgJiYgQm9vbGVhbih0aGlzLmF1dG9jb21wbGV0ZSgpKSk7XG5cbiAgLy9hdXRvY29tcGxldGUgZXZlbnRcbiAgcmVhZG9ubHkgYWNjZXB0QXV0b2NvbXBsZXRlRXZlbnQgPSBvdXRwdXQoeyBhbGlhczogJ2FjY2VwdEF1dG9jb21wbGV0ZScgfSk7XG5cbiAgLy8hIHByZWZpeCAmIHN1ZmZpeFxuICBvdmVycmlkZSByZWFkb25seSBwcmVmaXhUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChBcmRJbnB1dFByZWZpeFRlbXBsYXRlRGlyZWN0aXZlKTtcbiAgb3ZlcnJpZGUgcmVhZG9ubHkgc3VmZml4VGVtcGxhdGUgPSBjb250ZW50Q2hpbGQoQXJkSW5wdXRTdWZmaXhUZW1wbGF0ZURpcmVjdGl2ZSk7XG5cbiAgLy8hIHBsYWNlaG9sZGVyXG4gIG92ZXJyaWRlIHJlYWRvbmx5IHBsYWNlaG9sZGVyVGVtcGxhdGUgPSBjb250ZW50Q2hpbGQoQXJkSW5wdXRQbGFjZWhvbGRlclRlbXBsYXRlRGlyZWN0aXZlKTtcblxuICAvLyEgc3VnZ2VzdGlvbnNcbiAgcmVhZG9ubHkgc3VnZ2VzdGlvblN0b3JhZ2UgPSBuZXcgU2ltcGxlc3RJdGVtU3RvcmFnZSh0aGlzKTtcblxuICByZWFkb25seSB2YWx1ZUZyb20gPSBpbnB1dDxOdWxsYWJsZTxzdHJpbmc+Pih1bmRlZmluZWQsIHsgYWxpYXM6ICdzdWdnVmFsdWVGcm9tJyB9KTtcbiAgcmVhZG9ubHkgbGFiZWxGcm9tID0gaW5wdXQ8TnVsbGFibGU8c3RyaW5nPj4odW5kZWZpbmVkLCB7IGFsaWFzOiAnc3VnZ0xhYmVsRnJvbScgfSk7XG5cbiAgcmVhZG9ubHkgYWNjZXB0U3VnZ2VzdGlvbkV2ZW50ID0gb3V0cHV0PGFueT4oeyBhbGlhczogJ2FjY2VwdFN1Z2dlc3Rpb24nIH0pO1xuXG4gIHJlYWRvbmx5IHN1Z2dlc3Rpb25JdGVtcyA9IHRoaXMuc3VnZ2VzdGlvblN0b3JhZ2UuaXRlbXM7XG5cbiAgQElucHV0KClcbiAgc2V0IHN1Z2dlc3Rpb25zKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB2YWx1ZSA9IGNvZXJjZUFycmF5UHJvcGVydHkodmFsdWUpO1xuXG4gICAgY29uc3Qgc2hvdWxkUHJpbnRFcnJvcnMgPSB0aGlzLnN1Z2dlc3Rpb25TdG9yYWdlLnNldEl0ZW1zKHZhbHVlKTtcblxuICAgIHRoaXMuX3N1Z2dlc3Rpb25Ecm9wZG93T3Blbi5zZXQodHJ1ZSk7XG4gICAgdGhpcy5zdWdnZXN0aW9uU3RvcmFnZS5oaWdobGlnaHRGaXJzdEl0ZW0oKTtcblxuICAgIGlmIChzaG91bGRQcmludEVycm9ycykge1xuICAgICAgdGhpcy5fcHJpbnRQcmltaXRpdmVXYXJuaW5ncygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3ByaW50UHJpbWl0aXZlV2FybmluZ3MoKSB7XG4gICAgZnVuY3Rpb24gbWFrZVdhcm5pbmcoc3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYEFSRC1XQTAwMzE6IFNraXBwZWQgdXNpbmcgWyR7c3RyfV0gcHJvcGVydHkgYm91bmQgdG8gPGFyZC1pbnB1dD4sIGFzIHNvbWUgcHJvdmlkZWQgc3VnZ2VzdGlvbiBpdGVtcyBhcmUgb2YgcHJpbWl0aXZlIHR5cGVgXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy52YWx1ZUZyb20oKSkge1xuICAgICAgbWFrZVdhcm5pbmcoJ3ZhbHVlRnJvbScpO1xuICAgIH1cbiAgICBpZiAodGhpcy5sYWJlbEZyb20oKSkge1xuICAgICAgbWFrZVdhcm5pbmcoJ2xhYmVsRnJvbScpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1Z2dlc3Rpb25Ecm9wZG93T3BlbiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgcmVhZG9ubHkgc2hvdWxkRGlzcGxheVN1Z2dlc3Rpb25zID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gIXRoaXMuZGlzYWJsZWQoKSAmJiAodGhpcy5zdWdnZXN0aW9uSXRlbXMoKS5sZW5ndGggPiAwIHx8IHRoaXMuYXJlU3VnZ2VzdGlvbnNMb2FkaW5nKCkpICYmIHRoaXMuX3N1Z2dlc3Rpb25Ecm9wZG93T3BlbigpXG4gICk7XG5cbiAgcmVhZG9ubHkgYXJlU3VnZ2VzdGlvbnNMb2FkaW5nID0gaW5wdXQ8Ym9vbGVhbiwgYW55PihmYWxzZSwgeyB0cmFuc2Zvcm06IHYgPT4gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpIH0pO1xuICByZWFkb25seSBzdWdnZXN0aW9uc0xvYWRpbmdUZXh0ID0gaW5wdXQ8c3RyaW5nPih0aGlzLkRFRkFVTFRTLnN1Z2dlc3Rpb25zTG9hZGluZ1RleHQpO1xuXG4gIHJlYWRvbmx5IHN1Z2dlc3Rpb25UZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChBcmRTdWdnZXN0aW9uVGVtcGxhdGVEaXJlY3RpdmUpO1xuICByZWFkb25seSBzdWdnZXN0aW9uTG9hZGluZ1RlbXBsYXRlID0gY29udGVudENoaWxkKEFyZElucHV0TG9hZGluZ1RlbXBsYXRlRGlyZWN0aXZlKTtcblxuICAvLyEgc3VnZ2VzdGlvbnMgb3ZlcmxheVxuICByZWFkb25seSBkcm9wZG93bkhvc3QgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KCdzdWdnZXN0aW9uc0hvc3QnKTtcbiAgcmVhZG9ubHkgZHJvcGRvd25UZW1wbGF0ZSA9IHZpZXdDaGlsZCgnc3VnZ2VzdGlvbnNUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSk7XG5cbiAgcHJpdmF0ZSBkcm9wZG93bk92ZXJsYXkhOiBPdmVybGF5UmVmO1xuXG4gIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcblxuICAgIGNvbnN0IHN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5XG4gICAgICAucG9zaXRpb24oKVxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5kcm9wZG93bkhvc3QoKSEpXG4gICAgICAud2l0aFBvc2l0aW9ucyhbXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgICAgfSBhcyBDb25uZWN0ZWRQb3NpdGlvbixcbiAgICAgIF0pXG4gICAgICAud2l0aFB1c2goZmFsc2UpO1xuXG4gICAgY29uc3QgY29uZmlnID0gbmV3IE92ZXJsYXlDb25maWcoe1xuICAgICAgcG9zaXRpb25TdHJhdGVneTogc3RyYXRlZ3ksXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5zY3JvbGxTdHJhdGVneU9wdHMuYmxvY2soKSxcbiAgICAgIGhhc0JhY2tkcm9wOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIHRoaXMuZHJvcGRvd25PdmVybGF5ID0gdGhpcy5vdmVybGF5LmNyZWF0ZShjb25maWcpO1xuXG4gICAgY29uc3QgcG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMuZHJvcGRvd25UZW1wbGF0ZSgpISwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcbiAgICB0aGlzLmRyb3Bkb3duT3ZlcmxheS5hdHRhY2gocG9ydGFsKTtcblxuICAgIHRoaXMuc2V0T3ZlcmxheVNpemUoKTtcbiAgfVxuXG4gIHNldE92ZXJsYXlTaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlY3QgPSB0aGlzLmRyb3Bkb3duSG9zdCgpPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRoaXMuZHJvcGRvd25PdmVybGF5LnVwZGF0ZVNpemUoeyB3aWR0aDogcmVjdD8ud2lkdGggfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgb25XaW5kb3dSZXNpemUoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRPdmVybGF5U2l6ZSgpO1xuICB9XG5cbiAgZ2V0T3B0aW9uQ29udGV4dChpdGVtOiBBcmRTaW1wbGVzdFN0b3JhZ2VJdGVtKTogT3B0aW9uQ29udGV4dDxBcmRTaW1wbGVzdFN0b3JhZ2VJdGVtPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogaXRlbSxcbiAgICAgIGl0ZW0sXG4gICAgICBpdGVtRGF0YTogaXRlbS5pdGVtRGF0YSxcbiAgICB9O1xuICB9XG5cbiAgLy8hIHN1Z2dlc3Rpb24taGlnaGxpZ2gtcmVsYXRlZFxuICBwcml2YXRlIF9pc01vdXNlQmVpbmdVc2VkID0gZmFsc2U7XG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlbW92ZScpXG4gIG9uTW91c2VNb3ZlKCkge1xuICAgIHRoaXMuX2lzTW91c2VCZWluZ1VzZWQgPSB0cnVlO1xuICB9XG4gIG9uU3VnZ2VzdGlvbk1vdXNlRW50ZXIoaXRlbTogQXJkU2ltcGxlc3RTdG9yYWdlSXRlbSwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lzTW91c2VCZWluZ1VzZWQpIHJldHVybjtcbiAgICB0aGlzLnN1Z2dlc3Rpb25TdG9yYWdlLmhpZ2hsaWdodEl0ZW0oaXRlbSk7XG5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuICBvblN1Z2dlc3Rpb25Nb3VzZUxlYXZlKGl0ZW06IEFyZFNpbXBsZXN0U3RvcmFnZUl0ZW0sIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pc01vdXNlQmVpbmdVc2VkKSByZXR1cm47XG4gICAgdGhpcy5zdWdnZXN0aW9uU3RvcmFnZS51bmhpZ2hsaWdodEl0ZW0oaXRlbSk7XG5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8vISBzdWdnZXN0aW9uIHNlbGVjdGlvblxuICBzZWxlY3RTdWdnZXN0aW9uKGl0ZW06IEFyZFNpbXBsZXN0U3RvcmFnZUl0ZW0sIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICB0aGlzLl9zZWxlY3RTdWdnZXN0aW9uKGl0ZW0pO1xuICB9XG4gIHByaXZhdGUgX3NlbGVjdFN1Z2dlc3Rpb24oaXRlbTogQXJkU2ltcGxlc3RTdG9yYWdlSXRlbSk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zdWdnZXN0aW9uU3RvcmFnZS5zZWxlY3RJdGVtKGl0ZW0pO1xuICAgIHRoaXMud3JpdGVWYWx1ZShzZWxlY3RlZCA/PyAnJyk7XG5cbiAgICB0aGlzLmFjY2VwdFN1Z2dlc3Rpb25FdmVudC5lbWl0KHNlbGVjdGVkKTtcblxuICAgIC8vaW1wb3J0YW50IHRvIGRvIHRob3NlIHR3byB0aGluZ3MgaW4gdGhpcyBleGFjdCBvcmRlclxuICAgIHRoaXMuZm9jdXMoKTtcbiAgICB0aGlzLl9zdWdnZXN0aW9uRHJvcGRvd09wZW4uc2V0KGZhbHNlKTtcbiAgfVxuICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2tPdXRzaWRlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3VsZERpc3BsYXlTdWdnZXN0aW9ucygpKSByZXR1cm47XG5cbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHRoaXMuZWxlbWVudC5jb250YWlucyh0YXJnZXQpKSByZXR1cm47XG5cbiAgICB0aGlzLl9zdWdnZXN0aW9uRHJvcGRvd09wZW4uc2V0KGZhbHNlKTtcbiAgfVxuICAvLyEgc3VnZ2VzdGlvbiBhcHBlYXJhbmNlXG4gIHJlYWRvbmx5IGRyb3Bkb3duQXBwZWFyYW5jZSA9IGlucHV0PE51bGxhYmxlPERyb3Bkb3duUGFuZWxBcHBlYXJhbmNlPj4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgZHJvcGRvd25BcHBlYXJhbmNlT3JEZWZhdWx0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLmRyb3Bkb3duQXBwZWFyYW5jZSgpKSByZXR1cm4gdGhpcy5kcm9wZG93bkFwcGVhcmFuY2UoKSE7XG4gICAgaWYgKHRoaXMuYXBwZWFyYW5jZSgpID09PSBGb3JtRWxlbWVudEFwcGVhcmFuY2UuT3V0bGluZWQpIHJldHVybiBEcm9wZG93blBhbmVsQXBwZWFyYW5jZS5PdXRsaW5lZDtcbiAgICByZXR1cm4gRHJvcGRvd25QYW5lbEFwcGVhcmFuY2UuUmFpc2VkO1xuICB9KTtcbiAgcmVhZG9ubHkgZHJvcGRvd25WYXJpYW50ID0gaW5wdXQ8TnVsbGFibGU8RHJvcGRvd25QYW5lbFZhcmlhbnQ+Pih1bmRlZmluZWQpO1xuICByZWFkb25seSBkcm9wZG93blZhcmlhbnRPckRlZmF1bHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKHRoaXMuZHJvcGRvd25WYXJpYW50KCkpIHJldHVybiB0aGlzLmRyb3Bkb3duVmFyaWFudCgpITtcbiAgICBjb25zdCB2YXJpYW50ID0gdGhpcy52YXJpYW50KCk7XG4gICAgaWYgKHZhcmlhbnQgPT09IEZvcm1FbGVtZW50VmFyaWFudC5QaWxsKSByZXR1cm4gRHJvcGRvd25QYW5lbFZhcmlhbnQuUm91bmRlZDtcbiAgICByZXR1cm4gdmFyaWFudDtcbiAgfSk7XG5cbiAgLy8hIGZvY3VzIG92ZXJyaWRlXG4gIG92ZXJyaWRlIG9uRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWdnZXN0aW9uRHJvcGRvd09wZW4uc2V0KHRydWUpO1xuICAgIGlmICghdGhpcy5zdWdnZXN0aW9uU3RvcmFnZS5oaWdobGlnaHRlZEl0ZW0oKSkgdGhpcy5zdWdnZXN0aW9uU3RvcmFnZS5oaWdobGlnaHRGaXJzdEl0ZW0oKTtcblxuICAgIHN1cGVyLm9uRm9jdXMoZXZlbnQpO1xuICB9XG5cbiAgLy8hIGtleSBwcmVzcyBoYW5kbGVyc1xuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgb25LZXlQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xuICAgICAgY2FzZSAnRW50ZXInOiB7XG4gICAgICAgIHRoaXMuX29uVGFiT3JFbnRlclByZXNzKGV2ZW50KTtcbiAgICAgICAgdGhpcy5fb25FbnRlclByZXNzKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAnVGFiJzoge1xuICAgICAgICB0aGlzLl9vblRhYk9yRW50ZXJQcmVzcyhldmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0Fycm93RG93bic6IHtcbiAgICAgICAgdGhpcy5fb25BcnJvd0Rvd25QcmVzcyhldmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0Fycm93VXAnOiB7XG4gICAgICAgIHRoaXMuX29uQXJyb3dVcFByZXNzKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgX29uVGFiT3JFbnRlclByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3VsZERpc3BsYXlBdXRvY29tcGxldGUoKSkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICB0aGlzLm9uSW5wdXQodGhpcy5hdXRvY29tcGxldGUoKSA/PyAnJyk7XG4gICAgdGhpcy5hY2NlcHRBdXRvY29tcGxldGVFdmVudC5lbWl0KCk7XG4gIH1cbiAgcHJpdmF0ZSBfb25FbnRlclByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3VsZERpc3BsYXlTdWdnZXN0aW9ucygpKSByZXR1cm47XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuc3VnZ2VzdGlvblN0b3JhZ2UuaGlnaGxpZ2h0ZWRJdGVtKCk7XG4gICAgaWYgKCFpdGVtKSByZXR1cm47XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuX3NlbGVjdFN1Z2dlc3Rpb24oaXRlbSk7XG4gIH1cbiAgcHJpdmF0ZSBfb25BcnJvd0Rvd25QcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG91bGREaXNwbGF5U3VnZ2VzdGlvbnMoKSkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICB0aGlzLl9pc01vdXNlQmVpbmdVc2VkID0gZmFsc2U7XG5cbiAgICB0aGlzLnN1Z2dlc3Rpb25TdG9yYWdlLmhpZ2hsaWdodE5leHRJdGVtKCsxKTtcbiAgfVxuICBwcml2YXRlIF9vbkFycm93VXBQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG91bGREaXNwbGF5U3VnZ2VzdGlvbnMoKSkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICB0aGlzLl9pc01vdXNlQmVpbmdVc2VkID0gZmFsc2U7XG5cbiAgICB0aGlzLnN1Z2dlc3Rpb25TdG9yYWdlLmhpZ2hsaWdodE5leHRJdGVtKC0xKTtcbiAgfVxufVxuIiwiPGFyZC1mb3JtLWZpZWxkLWZyYW1lXG4gIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2UoKVwiXG4gIFt2YXJpYW50XT1cInZhcmlhbnQoKVwiXG4gIFtjb21wYWN0XT1cImNvbXBhY3QoKVwiXG4gIFtpc0ZvY3VzZWRdPVwiaXNGb2N1c2VkXCJcbiAgW3ByZWZpeFRlbXBsYXRlXT1cInByZWZpeFRlbXBsYXRlKCk/LnRlbXBsYXRlXCJcbiAgW3N1ZmZpeFRlbXBsYXRlXT1cInN1ZmZpeFRlbXBsYXRlKCk/LnRlbXBsYXRlXCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiYXJkLWlucHV0XCJcbiAgICAjc3VnZ2VzdGlvbnNIb3N0XG4gICAgW25nQ2xhc3NdPVwibmdDbGFzc2VzKClcIlxuICAgIFtjbGFzcy5hcmQtaGFzLXZhbHVlXT1cInZhbHVlXCJcbiAgICAoY2xpY2spPVwiZm9jdXMoKVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiYXJkLWlucHV0LWNvbnRhaW5lclwiPlxuICAgICAgQGlmIChzaG91bGREaXNwbGF5QXV0b2NvbXBsZXRlKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImFyZC1hdXRvY29tcGxldGVcIj57eyBhdXRvY29tcGxldGUoKSB9fTwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChzaG91bGREaXNwbGF5UGxhY2Vob2xkZXIoKSkge1xuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAjZGVmYXVsdFBsYWNlaG9sZGVyVGVtcGxhdGVcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtcGxhY2Vob2xkZXJcIj57eyBwbGFjZWhvbGRlcigpIH19PC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBsYWNlaG9sZGVyVGVtcGxhdGUoKT8udGVtcGxhdGUgfHwgZGVmYXVsdFBsYWNlaG9sZGVyVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgfVxuICAgICAgPGlucHV0XG4gICAgICAgICN0ZXh0SW5wdXRcbiAgICAgICAgI2ZvY3VzYWJsZUVsZW1lbnRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBbYXR0ci5pZF09XCJpbnB1dElkKClcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJ0YWJJbmRleCgpXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgICAgIChpbnB1dCk9XCJvbklucHV0KHRleHRJbnB1dC52YWx1ZSlcIlxuICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAgICAgICAoY29weSk9XCJvbkNvcHkoJGV2ZW50KVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgQGlmIChzaG91bGRTaG93Q2xlYXJCdXR0b24oKSkge1xuICAgICAgPGFyZC1jbGVhci1idXR0b25cbiAgICAgICAgW3RpdGxlXT1cImNsZWFyQnV0dG9uVGl0bGUoKVwiXG4gICAgICAgIChjbGljayk9XCJvbkNsZWFyQnV0dG9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICAvPlxuICAgIH1cbiAgPC9kaXY+XG48L2FyZC1mb3JtLWZpZWxkLWZyYW1lPlxuXG48bmctdGVtcGxhdGUgI3N1Z2dlc3Rpb25zVGVtcGxhdGU+XG4gIDxhcmQtZHJvcGRvd24tcGFuZWxcbiAgICBjbGFzcz1cImFyZC1kcm9wZG93bi1wYW5lbCBhcmQtaW5wdXQtc3VnZ2VzdGlvbnMtcGFuZWxcIlxuICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICBbY29tcGFjdF09XCJjb21wYWN0XCJcbiAgICBhcmlhLWxhYmVsPVwiU3VnZ2VzdGlvbnNcIlxuICAgIFthcHBlYXJhbmNlXT1cImRyb3Bkb3duQXBwZWFyYW5jZU9yRGVmYXVsdCgpXCJcbiAgICBbdmFyaWFudF09XCJkcm9wZG93blZhcmlhbnRPckRlZmF1bHQoKVwiXG4gICAgW2lzT3Blbl09XCJzaG91bGREaXNwbGF5U3VnZ2VzdGlvbnMoKVwiXG4gICAgKGFyZENsaWNrT3V0c2lkZSk9XCJoYW5kbGVTdWdnZXN0aW9uQ2xpY2tPdXRzaWRlKCRldmVudClcIlxuICAgIChtb3VzZW1vdmUpPVwib25Nb3VzZU1vdmUoKVwiXG4gID5cbiAgICBAZm9yIChpdGVtIG9mIHN1Z2dlc3Rpb25JdGVtcygpOyB0cmFjayBpdGVtLmluZGV4KCkpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJhcmQtb3B0aW9uXCJcbiAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgIFtjbGFzcy5hcmQtb3B0aW9uLXNlbGVjdGVkXT1cIml0ZW0uc2VsZWN0ZWQoKVwiXG4gICAgICAgIFtjbGFzcy5hcmQtb3B0aW9uLWhpZ2hsaWdodGVkXT1cIml0ZW0uaGlnaGxpZ2h0ZWQoKVwiXG4gICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXRlbS5zZWxlY3RlZCgpXCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFN1Z2dlc3Rpb24oaXRlbSwgJGV2ZW50KVwiXG4gICAgICAgIChtb3VzZWVudGVyKT1cIm9uU3VnZ2VzdGlvbk1vdXNlRW50ZXIoaXRlbSwgJGV2ZW50KVwiXG4gICAgICAgIChtb3VzZWxlYXZlKT1cIm9uU3VnZ2VzdGlvbk1vdXNlTGVhdmUoaXRlbSwgJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYXJkLW9wdGlvbi1sYWJlbFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdE9wdGlvblRlbXBsYXRlPlxuICAgICAgICAgICAge3sgaXRlbS5sYWJlbCgpIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwic3VnZ2VzdGlvblRlbXBsYXRlKCk/LnRlbXBsYXRlIHx8IGRlZmF1bHRPcHRpb25UZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0T3B0aW9uQ29udGV4dChpdGVtKVwiXG4gICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKGFyZVN1Z2dlc3Rpb25zTG9hZGluZygpKSB7XG4gICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRMb2FkaW5nUGxhY2Vob2xkZXJUZW1wbGF0ZT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFyZC1vcHRpb24gYXJkLW9wdGlvbi1kaXNhYmxlZFwiPnt7IHN1Z2dlc3Rpb25zTG9hZGluZ1RleHQoKSB9fTwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInN1Z2dlc3Rpb25Mb2FkaW5nVGVtcGxhdGUoKT8udGVtcGxhdGUgfHwgZGVmYXVsdExvYWRpbmdQbGFjZWhvbGRlclRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICB9XG4gIDwvYXJkLWRyb3Bkb3duLXBhbmVsPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==