@mediusinc/mng-commons 0.8.0-rc.3 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/assets/i18n/en.json +3 -1
  2. package/esm2020/lib/api/models/builders/query-param.builder.mjs +58 -58
  3. package/esm2020/lib/api/models/filter-match-type.model.mjs +24 -24
  4. package/esm2020/lib/api/models/filter-param.model.mjs +32 -32
  5. package/esm2020/lib/api/models/index.mjs +8 -8
  6. package/esm2020/lib/api/models/mappers.mjs +12 -12
  7. package/esm2020/lib/api/models/query-mode.model.mjs +17 -17
  8. package/esm2020/lib/api/models/query-param.model.mjs +67 -67
  9. package/esm2020/lib/api/models/query-result.model.mjs +17 -17
  10. package/esm2020/lib/api/models/serialization.model.mjs +1 -1
  11. package/esm2020/lib/api/services/api.abstract.service.mjs +55 -55
  12. package/esm2020/lib/api/services/crud-api.abstract.service.mjs +66 -66
  13. package/esm2020/lib/api/services/get-all-api.abstract.service.mjs +22 -22
  14. package/esm2020/lib/api/services/index.mjs +3 -3
  15. package/esm2020/lib/api/utils/index.mjs +2 -2
  16. package/esm2020/lib/api/utils/medius-rest.util.mjs +151 -151
  17. package/esm2020/lib/api/utils/object-serializer.util.mjs +243 -243
  18. package/esm2020/lib/components/action/action.component.mjs +176 -176
  19. package/esm2020/lib/components/action/editor/action-editor.component.mjs +247 -230
  20. package/esm2020/lib/components/action/index.mjs +3 -3
  21. package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +1 -1
  22. package/esm2020/lib/components/action/models/action-execution.model.mjs +234 -234
  23. package/esm2020/lib/components/action/models/index.mjs +2 -2
  24. package/esm2020/lib/components/action/route/action-route.component.mjs +124 -124
  25. package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +268 -268
  26. package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +160 -160
  27. package/esm2020/lib/components/form/editor/form-editor.component.mjs +189 -189
  28. package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +18 -18
  29. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +42 -42
  30. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +24 -24
  31. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +95 -95
  32. package/esm2020/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +16 -16
  33. package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +178 -178
  34. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +155 -155
  35. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +126 -126
  36. package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +16 -16
  37. package/esm2020/lib/components/form/formly/fields/index.mjs +9 -9
  38. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +14 -14
  39. package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +14 -14
  40. package/esm2020/lib/components/form/formly/wrappers/index.mjs +2 -2
  41. package/esm2020/lib/components/form/index.mjs +3 -3
  42. package/esm2020/lib/components/form/models/form-editor.event.mjs +33 -33
  43. package/esm2020/lib/components/form/models/index.mjs +1 -1
  44. package/esm2020/lib/components/layout/breadcrumb.component.mjs +16 -16
  45. package/esm2020/lib/components/layout/footer.component.mjs +16 -16
  46. package/esm2020/lib/components/layout/index.mjs +6 -6
  47. package/esm2020/lib/components/layout/main-layout.component.mjs +51 -51
  48. package/esm2020/lib/components/layout/menu-item.component.mjs +216 -216
  49. package/esm2020/lib/components/layout/menu.component.mjs +19 -19
  50. package/esm2020/lib/components/layout/services/index.mjs +1 -1
  51. package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +192 -192
  52. package/esm2020/lib/components/layout/topbar.component.mjs +57 -57
  53. package/esm2020/lib/components/tableview/index.mjs +6 -6
  54. package/esm2020/lib/components/tableview/models/index.mjs +1 -1
  55. package/esm2020/lib/components/tableview/models/table.event.mjs +15 -15
  56. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +56 -56
  57. package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +53 -53
  58. package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +101 -101
  59. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +70 -70
  60. package/esm2020/lib/components/tableview/table/table.component.mjs +429 -429
  61. package/esm2020/lib/components/tableview/tableview.component.mjs +91 -91
  62. package/esm2020/lib/config/formly.config.mjs +180 -180
  63. package/esm2020/lib/config/index.mjs +1 -1
  64. package/esm2020/lib/config/models/index.mjs +1 -1
  65. package/esm2020/lib/config/models/mng-config.model.mjs +1 -1
  66. package/esm2020/lib/data-providers/base.data-provider.mjs +16 -16
  67. package/esm2020/lib/data-providers/editor.data-provider.mjs +36 -36
  68. package/esm2020/lib/data-providers/index.mjs +5 -5
  69. package/esm2020/lib/data-providers/lookup.data-provider.mjs +15 -15
  70. package/esm2020/lib/data-providers/table.data-provider.mjs +16 -16
  71. package/esm2020/lib/data-providers/tableview.data-provider.mjs +16 -16
  72. package/esm2020/lib/descriptors/action.descriptor.mjs +622 -622
  73. package/esm2020/lib/descriptors/column.descriptor.mjs +271 -271
  74. package/esm2020/lib/descriptors/editor.descriptor.mjs +154 -154
  75. package/esm2020/lib/descriptors/field-validation.descriptor.mjs +20 -20
  76. package/esm2020/lib/descriptors/field.descriptor.interface.mjs +1 -1
  77. package/esm2020/lib/descriptors/field.descriptor.mjs +863 -863
  78. package/esm2020/lib/descriptors/filter.descriptor.mjs +294 -294
  79. package/esm2020/lib/descriptors/index.mjs +11 -11
  80. package/esm2020/lib/descriptors/lookup.descriptor.mjs +1 -1
  81. package/esm2020/lib/descriptors/model.descriptor.mjs +33 -33
  82. package/esm2020/lib/descriptors/table.descriptor.mjs +213 -213
  83. package/esm2020/lib/descriptors/tableview.descriptor.mjs +134 -134
  84. package/esm2020/lib/directives/component.directive.mjs +43 -43
  85. package/esm2020/lib/directives/index.mjs +2 -2
  86. package/esm2020/lib/directives/template.directive.mjs +27 -27
  87. package/esm2020/lib/mng-commons.module.mjs +426 -426
  88. package/esm2020/lib/models/column-value.model.mjs +1 -1
  89. package/esm2020/lib/models/enum.model.mjs +1 -1
  90. package/esm2020/lib/models/error.model.mjs +1 -1
  91. package/esm2020/lib/models/index.mjs +6 -6
  92. package/esm2020/lib/models/menu.model.mjs +1 -1
  93. package/esm2020/lib/models/user.model.mjs +1 -1
  94. package/esm2020/lib/models/view-container.model.mjs +1 -1
  95. package/esm2020/lib/pipes/boolean.pipe.mjs +26 -26
  96. package/esm2020/lib/pipes/enum.pipe.mjs +24 -24
  97. package/esm2020/lib/pipes/i18n-property.pipe.mjs +17 -17
  98. package/esm2020/lib/pipes/index.mjs +5 -5
  99. package/esm2020/lib/pipes/json-path.pipe.mjs +79 -79
  100. package/esm2020/lib/pipes/link-formatter.pipe.mjs +38 -38
  101. package/esm2020/lib/router/index.mjs +1 -1
  102. package/esm2020/lib/router/models/index.mjs +1 -1
  103. package/esm2020/lib/router/models/router.model.mjs +1 -1
  104. package/esm2020/lib/router/route-builder.mjs +431 -431
  105. package/esm2020/lib/services/action-executor.service.mjs +535 -535
  106. package/esm2020/lib/services/commons.service.mjs +343 -343
  107. package/esm2020/lib/services/configuration.service.mjs +110 -110
  108. package/esm2020/lib/services/error-mapper.service.mjs +13 -13
  109. package/esm2020/lib/services/index.mjs +6 -6
  110. package/esm2020/lib/services/internal/commons-init.provider.mjs +3 -3
  111. package/esm2020/lib/services/internal/commons-init.service.mjs +43 -43
  112. package/esm2020/lib/services/internal/index.mjs +2 -2
  113. package/esm2020/lib/services/navigation.service.mjs +47 -47
  114. package/esm2020/lib/services/providers/config-service.provider.mjs +29 -29
  115. package/esm2020/lib/services/providers/formly-config.provider.mjs +30 -30
  116. package/esm2020/lib/services/providers/index.mjs +2 -2
  117. package/esm2020/lib/services/tokens/browser-storage.token.mjs +5 -5
  118. package/esm2020/lib/services/tokens/commons-init.token.mjs +2 -2
  119. package/esm2020/lib/services/tokens/default-setting.token.mjs +2 -2
  120. package/esm2020/lib/services/tokens/index.mjs +4 -4
  121. package/esm2020/lib/services/tokens/module-config.token.mjs +2 -2
  122. package/esm2020/lib/services/view-container.component.service.mjs +34 -34
  123. package/esm2020/lib/types/index.mjs +2 -2
  124. package/esm2020/lib/types/type.decorator.mjs +12 -12
  125. package/esm2020/lib/types/type.model.mjs +1 -1
  126. package/esm2020/lib/utils/action-data-provider.util.mjs +144 -144
  127. package/esm2020/lib/utils/editor-formly.util.mjs +209 -209
  128. package/esm2020/lib/utils/enum.util.mjs +81 -81
  129. package/esm2020/lib/utils/i18n.util.mjs +232 -232
  130. package/esm2020/lib/utils/index.mjs +7 -7
  131. package/esm2020/lib/utils/model.util.mjs +59 -59
  132. package/esm2020/lib/utils/notification.util.mjs +45 -45
  133. package/esm2020/lib/utils/route.util.mjs +23 -23
  134. package/esm2020/lib/utils/styles.util.mjs +40 -40
  135. package/esm2020/lib/utils/type.util.mjs +76 -76
  136. package/esm2020/mediusinc-mng-commons.mjs +4 -4
  137. package/esm2020/public-api.mjs +39 -39
  138. package/fesm2015/mediusinc-mng-commons.mjs +9908 -9891
  139. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  140. package/fesm2020/mediusinc-mng-commons.mjs +9774 -9757
  141. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  142. package/lib/api/models/builders/query-param.builder.d.ts +13 -13
  143. package/lib/api/models/filter-match-type.model.d.ts +23 -23
  144. package/lib/api/models/filter-param.model.d.ts +23 -23
  145. package/lib/api/models/index.d.ts +8 -8
  146. package/lib/api/models/mappers.d.ts +6 -6
  147. package/lib/api/models/query-mode.model.d.ts +16 -16
  148. package/lib/api/models/query-param.model.d.ts +31 -31
  149. package/lib/api/models/query-result.model.d.ts +23 -23
  150. package/lib/api/models/serialization.model.d.ts +8 -8
  151. package/lib/api/services/api.abstract.service.d.ts +24 -24
  152. package/lib/api/services/crud-api.abstract.service.d.ts +22 -22
  153. package/lib/api/services/get-all-api.abstract.service.d.ts +14 -14
  154. package/lib/api/services/index.d.ts +3 -3
  155. package/lib/api/utils/index.d.ts +2 -2
  156. package/lib/api/utils/medius-rest.util.d.ts +14 -14
  157. package/lib/api/utils/object-serializer.util.d.ts +33 -33
  158. package/lib/components/action/action.component.d.ts +68 -68
  159. package/lib/components/action/editor/action-editor.component.d.ts +64 -62
  160. package/lib/components/action/index.d.ts +3 -3
  161. package/lib/components/action/models/action-confirmation-service.model.d.ts +6 -6
  162. package/lib/components/action/models/action-execution.model.d.ts +129 -129
  163. package/lib/components/action/models/index.d.ts +2 -2
  164. package/lib/components/action/route/action-route.component.d.ts +31 -31
  165. package/lib/components/form/autocomplete/autocomplete.component.d.ts +53 -53
  166. package/lib/components/form/dropdown/dropdown.component.d.ts +44 -44
  167. package/lib/components/form/editor/form-editor.component.d.ts +45 -45
  168. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +12 -12
  169. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +14 -14
  170. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +12 -12
  171. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +21 -21
  172. package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +6 -6
  173. package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +44 -44
  174. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +22 -22
  175. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +37 -37
  176. package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +6 -6
  177. package/lib/components/form/formly/fields/index.d.ts +9 -9
  178. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +6 -6
  179. package/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.d.ts +6 -6
  180. package/lib/components/form/formly/wrappers/index.d.ts +2 -2
  181. package/lib/components/form/index.d.ts +3 -3
  182. package/lib/components/form/models/form-editor.event.d.ts +37 -37
  183. package/lib/components/form/models/index.d.ts +1 -1
  184. package/lib/components/layout/breadcrumb.component.d.ts +8 -8
  185. package/lib/components/layout/footer.component.d.ts +9 -9
  186. package/lib/components/layout/index.d.ts +6 -6
  187. package/lib/components/layout/main-layout.component.d.ts +20 -20
  188. package/lib/components/layout/menu-item.component.d.ts +37 -37
  189. package/lib/components/layout/menu.component.d.ts +10 -10
  190. package/lib/components/layout/services/index.d.ts +1 -1
  191. package/lib/components/layout/services/main-layout.component.service.d.ts +65 -65
  192. package/lib/components/layout/topbar.component.d.ts +24 -24
  193. package/lib/components/tableview/index.d.ts +6 -6
  194. package/lib/components/tableview/models/index.d.ts +1 -1
  195. package/lib/components/tableview/models/table.event.d.ts +17 -17
  196. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +20 -20
  197. package/lib/components/tableview/route/tableview-route.component.d.ts +18 -18
  198. package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +31 -31
  199. package/lib/components/tableview/table/column-value/column-value.component.d.ts +28 -28
  200. package/lib/components/tableview/table/table.component.d.ts +104 -104
  201. package/lib/components/tableview/tableview.component.d.ts +41 -41
  202. package/lib/config/formly.config.d.ts +15 -15
  203. package/lib/config/index.d.ts +1 -1
  204. package/lib/config/models/index.d.ts +1 -1
  205. package/lib/config/models/mng-config.model.d.ts +34 -34
  206. package/lib/data-providers/base.data-provider.d.ts +14 -14
  207. package/lib/data-providers/editor.data-provider.d.ts +25 -25
  208. package/lib/data-providers/index.d.ts +5 -5
  209. package/lib/data-providers/lookup.data-provider.d.ts +14 -14
  210. package/lib/data-providers/table.data-provider.d.ts +14 -14
  211. package/lib/data-providers/tableview.data-provider.d.ts +15 -15
  212. package/lib/descriptors/action.descriptor.d.ts +277 -277
  213. package/lib/descriptors/column.descriptor.d.ts +91 -91
  214. package/lib/descriptors/editor.descriptor.d.ts +44 -44
  215. package/lib/descriptors/field-validation.descriptor.d.ts +18 -18
  216. package/lib/descriptors/field.descriptor.d.ts +342 -342
  217. package/lib/descriptors/field.descriptor.interface.d.ts +9 -9
  218. package/lib/descriptors/filter.descriptor.d.ts +127 -127
  219. package/lib/descriptors/index.d.ts +11 -11
  220. package/lib/descriptors/lookup.descriptor.d.ts +17 -17
  221. package/lib/descriptors/model.descriptor.d.ts +15 -15
  222. package/lib/descriptors/table.descriptor.d.ts +80 -80
  223. package/lib/descriptors/tableview.descriptor.d.ts +42 -42
  224. package/lib/directives/component.directive.d.ts +16 -16
  225. package/lib/directives/index.d.ts +2 -2
  226. package/lib/directives/template.directive.d.ts +13 -13
  227. package/lib/mng-commons.module.d.ts +86 -86
  228. package/lib/models/column-value.model.d.ts +4 -4
  229. package/lib/models/enum.model.d.ts +6 -6
  230. package/lib/models/error.model.d.ts +14 -14
  231. package/lib/models/index.d.ts +6 -6
  232. package/lib/models/menu.model.d.ts +25 -25
  233. package/lib/models/user.model.d.ts +8 -8
  234. package/lib/models/view-container.model.d.ts +6 -6
  235. package/lib/pipes/boolean.pipe.d.ts +7 -7
  236. package/lib/pipes/enum.pipe.d.ts +8 -8
  237. package/lib/pipes/i18n-property.pipe.d.ts +8 -8
  238. package/lib/pipes/index.d.ts +5 -5
  239. package/lib/pipes/json-path.pipe.d.ts +13 -13
  240. package/lib/pipes/link-formatter.pipe.d.ts +11 -11
  241. package/lib/router/index.d.ts +1 -1
  242. package/lib/router/models/index.d.ts +1 -1
  243. package/lib/router/models/router.model.d.ts +22 -22
  244. package/lib/router/route-builder.d.ts +86 -86
  245. package/lib/services/action-executor.service.d.ts +149 -149
  246. package/lib/services/commons.service.d.ts +72 -72
  247. package/lib/services/configuration.service.d.ts +36 -36
  248. package/lib/services/error-mapper.service.d.ts +7 -7
  249. package/lib/services/index.d.ts +6 -6
  250. package/lib/services/internal/commons-init.provider.d.ts +3 -3
  251. package/lib/services/internal/commons-init.service.d.ts +16 -16
  252. package/lib/services/internal/index.d.ts +2 -2
  253. package/lib/services/navigation.service.d.ts +14 -14
  254. package/lib/services/providers/config-service.provider.d.ts +6 -6
  255. package/lib/services/providers/formly-config.provider.d.ts +4 -4
  256. package/lib/services/providers/index.d.ts +2 -2
  257. package/lib/services/tokens/browser-storage.token.d.ts +2 -2
  258. package/lib/services/tokens/commons-init.token.d.ts +3 -3
  259. package/lib/services/tokens/default-setting.token.d.ts +2 -2
  260. package/lib/services/tokens/index.d.ts +4 -4
  261. package/lib/services/tokens/module-config.token.d.ts +3 -3
  262. package/lib/services/view-container.component.service.d.ts +22 -22
  263. package/lib/types/index.d.ts +2 -2
  264. package/lib/types/type.decorator.d.ts +4 -4
  265. package/lib/types/type.model.d.ts +20 -20
  266. package/lib/utils/action-data-provider.util.d.ts +20 -20
  267. package/lib/utils/editor-formly.util.d.ts +10 -10
  268. package/lib/utils/enum.util.d.ts +50 -50
  269. package/lib/utils/i18n.util.d.ts +56 -56
  270. package/lib/utils/index.d.ts +7 -7
  271. package/lib/utils/model.util.d.ts +8 -8
  272. package/lib/utils/notification.util.d.ts +11 -11
  273. package/lib/utils/route.util.d.ts +4 -4
  274. package/lib/utils/styles.util.d.ts +14 -14
  275. package/lib/utils/type.util.d.ts +36 -36
  276. package/mediusinc-mng-commons.d.ts +5 -5
  277. package/package.json +3 -3
  278. package/public-api.d.ts +28 -28
  279. package/mediusinc-mng-commons-0.8.0-rc.3.tgz +0 -0
@@ -1,269 +1,269 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, forwardRef } from '@angular/core';
2
- import { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { AutoComplete } from 'primeng/autocomplete';
4
- import { BehaviorSubject, of, switchMap } from 'rxjs';
5
- import { first, map } from 'rxjs/operators';
6
- import { MediusFilterMatchType, MediusQueryParamBuilder } from '../../../api/models';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@ngx-translate/core";
9
- import * as i2 from "primeng/autocomplete";
10
- import * as i3 from "@angular/forms";
11
- import * as i4 from "@angular/common";
12
- export const MNG_AUTOCOMPLETE_VALUE_ACCESSOR = {
13
- provide: NG_VALUE_ACCESSOR,
14
- useExisting: forwardRef(() => MngAutocompleteComponent),
15
- multi: true
16
- };
17
- export class MngAutocompleteComponent {
18
- constructor(injector, translate) {
19
- this.injector = injector;
20
- this.translate = translate;
21
- this.itemsLabelTranslate = false;
22
- this.inlineSearch = false;
23
- this.openOnFocus = false;
24
- this.multiselect = false;
25
- this.className = null;
26
- this.dropdownClassName = null;
27
- this.valueChangeEventEmitter = new EventEmitter();
28
- this.isInited = false;
29
- this.suggestionsSubject = new BehaviorSubject([]);
30
- this.searchSubscription = null;
31
- this.dataProviderService = null;
32
- // eslint-disable-next-line @typescript-eslint/no-empty-function
33
- this.onChangeFn = () => { };
34
- // eslint-disable-next-line @typescript-eslint/no-empty-function
35
- this.onTouchedFn = () => { };
36
- this.autocompleteFormControl = new FormControl();
37
- this.suggestions$ = this.suggestionsSubject.asObservable();
38
- }
39
- ngOnInit() {
40
- this.setItemsAndDataProvider();
41
- }
42
- ngOnDestroy() {
43
- this.searchSubscription?.unsubscribe();
44
- }
45
- onSearch(event) {
46
- this.searchSubscription?.unsubscribe();
47
- if (this.dataProvider) {
48
- const queryParamBuilder = MediusQueryParamBuilder.create();
49
- if (this.itemsLabelProperty) {
50
- queryParamBuilder.withSort(this.itemsLabelProperty);
51
- }
52
- if (event.query && event.query.length > 0 && this.itemsLabelProperty) {
53
- queryParamBuilder.withFilter(this.itemsLabelProperty, event.query, undefined, MediusFilterMatchType.StartsWith);
54
- }
55
- this.searchSubscription = this.getLookup(queryParamBuilder.build(), event.query).subscribe({
56
- next: items => {
57
- this.setSuggestionsFromItems(items, event.query);
58
- }
59
- });
60
- }
61
- }
62
- onSelect(value) {
63
- let outputValue = value;
64
- if (this.itemsValueProperty && typeof value === 'object') {
65
- outputValue = value[this.itemsValueProperty];
66
- }
67
- this.onChangeFn(outputValue);
68
- this.valueChangeEventEmitter.next(outputValue);
69
- }
70
- onFocus(event) {
71
- if (this.openOnFocus) {
72
- this.primeAutocomplete?.show();
73
- }
74
- }
75
- registerOnChange(fn) {
76
- this.onChangeFn = fn;
77
- }
78
- registerOnTouched(fn) {
79
- this.onTouchedFn = fn;
80
- }
81
- setDisabledState(isDisabled) {
82
- if (isDisabled) {
83
- this.autocompleteFormControl.disable();
84
- }
85
- else {
86
- this.autocompleteFormControl.enable();
87
- }
88
- }
89
- writeValue(value) {
90
- this.setItemsAndDataProvider();
91
- if (this.itemsValuePropertyInit && value != null && typeof value !== 'object') {
92
- const defaultItem = { [this.itemsValuePropertyInit]: value };
93
- if (this.itemsLabelProperty) {
94
- defaultItem[this.itemsLabelProperty] = value;
95
- }
96
- const matchedItem = this.suggestionsSubject.value.find(i => i[this.itemsValuePropertyInit] === value);
97
- if (matchedItem) {
98
- this.autocompleteFormControl.setValue(matchedItem, { emitEvent: false });
99
- }
100
- else if (this.dataProvider) {
101
- const queryParamBuilder = MediusQueryParamBuilder.create();
102
- queryParamBuilder.withFilter(this.itemsValuePropertyInit, value, undefined, MediusFilterMatchType.Equals);
103
- this.getLookup(queryParamBuilder.build())
104
- .pipe(first())
105
- .subscribe({
106
- next: items => {
107
- let isMatch = false;
108
- if (items.length === 1) {
109
- this.autocompleteFormControl.setValue(items[0]);
110
- isMatch = true;
111
- }
112
- else if (items.length > 1) {
113
- // for lookup data providers not using query params
114
- const matchedItem = items.find(i => i[this.itemsValuePropertyInit] === value);
115
- if (matchedItem) {
116
- this.setAutocompleteValueFromWrite(matchedItem);
117
- isMatch = true;
118
- }
119
- }
120
- if (!isMatch) {
121
- this.setAutocompleteValueFromWrite(defaultItem);
122
- }
123
- },
124
- error: () => {
125
- this.setAutocompleteValueFromWrite(defaultItem);
126
- }
127
- });
128
- }
129
- else {
130
- this.setAutocompleteValueFromWrite(defaultItem);
131
- }
132
- }
133
- else {
134
- this.setAutocompleteValueFromWrite(value);
135
- }
136
- }
137
- setItemsAndDataProvider() {
138
- if (this.isInited) {
139
- return;
140
- }
141
- this.itemsLabelProperty = this.itemsLabelPropertyInit;
142
- this.itemsValueProperty = this.itemsValuePropertyInit;
143
- if (this.dataProvider) {
144
- this.dataProviderService = this.dataProvider.serviceType ? this.injector.get(this.dataProvider.serviceType) : null;
145
- if (this.itemsLabelTranslate) {
146
- // setup translation properties
147
- if (this.itemsLabelPropertyInit) {
148
- this.itemsLabelProperty = `${this.itemsLabelPropertyInit}_i18n`;
149
- }
150
- else if (!this.itemsLabelProperty && !this.itemsValuePropertyInit) {
151
- this.itemsLabelProperty = 'title_i18n';
152
- this.itemsValueProperty = 'value';
153
- }
154
- else {
155
- throw new Error(`Invalid use with value (${this.itemsLabelPropertyInit}) and label (${this.itemsLabelPropertyInit}) property setup.`);
156
- }
157
- }
158
- }
159
- else {
160
- console.warn(`Data provider should be provided for MngAutocompleteComponent.`);
161
- }
162
- if (this.openOnFocus) {
163
- this.onSearch({ query: '' });
164
- }
165
- this.isInited = true;
166
- }
167
- setAutocompleteValueFromWrite(value) {
168
- if (value && this.itemsLabelTranslate) {
169
- value = this.i18nPopulateItems([value], this.translate.instant(this.i18nGetItemsKeys([value])))[0];
170
- }
171
- this.autocompleteFormControl.setValue(value, { emitEvent: false });
172
- }
173
- getLookup(qp, query) {
174
- if (this.dataProvider) {
175
- return this.dataProvider.lookup(qp, this.dataProviderService, query).pipe(switchMap(items => {
176
- if (this.itemsLabelTranslate) {
177
- return this.translate.stream(this.i18nGetItemsKeys(items)).pipe(map(translations => this.i18nPopulateItems(items, translations)));
178
- }
179
- else {
180
- return of(items);
181
- }
182
- }));
183
- }
184
- else {
185
- return of([]);
186
- }
187
- }
188
- i18nGetItemsKeys(items) {
189
- return items.map(item => (typeof item === 'object' && this.itemsLabelPropertyInit ? item[this.itemsLabelPropertyInit] : item));
190
- }
191
- i18nPopulateItems(items, i18nMap) {
192
- return items.map(item => {
193
- if (typeof item === 'object' && this.itemsLabelPropertyInit) {
194
- const label = item[this.itemsLabelPropertyInit];
195
- const translation = i18nMap[label];
196
- if (translation) {
197
- return { ...item, [this.itemsLabelProperty]: translation };
198
- }
199
- return { ...item };
200
- }
201
- else {
202
- const translation = i18nMap[item];
203
- return {
204
- [this.itemsLabelProperty]: translation ?? item,
205
- [this.itemsValueProperty]: item
206
- };
207
- }
208
- });
209
- }
210
- setSuggestionsFromItems(items, query) {
211
- if (this.inlineSearch) {
212
- const queryLowerCase = query?.toLowerCase() ?? '';
213
- const filteredItems = items.filter(i => {
214
- let itemLabel = i;
215
- if (this.itemsLabelProperty && typeof i === 'object') {
216
- itemLabel = i[this.itemsLabelProperty];
217
- }
218
- if (itemLabel == null) {
219
- return queryLowerCase == null || !queryLowerCase.length;
220
- }
221
- if (typeof itemLabel !== 'string') {
222
- itemLabel = itemLabel.toString();
223
- }
224
- return itemLabel.toLowerCase().startsWith(queryLowerCase);
225
- });
226
- this.suggestionsSubject.next([...filteredItems]);
227
- }
228
- else {
229
- this.suggestionsSubject.next([...items]);
230
- }
231
- }
232
- }
233
- MngAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: MngAutocompleteComponent, deps: [{ token: i0.Injector }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
234
- MngAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: MngAutocompleteComponent, selector: "mng-autocomplete", inputs: { dataProvider: "dataProvider", dataKeyProperty: "dataKeyProperty", itemsValuePropertyInit: ["itemsValueProperty", "itemsValuePropertyInit"], itemsLabelPropertyInit: ["itemsLabelProperty", "itemsLabelPropertyInit"], itemsLabelTranslate: "itemsLabelTranslate", inlineSearch: "inlineSearch", openOnFocus: "openOnFocus", multiselect: "multiselect", placeholder: "placeholder", className: "className", dropdownClassName: "dropdownClassName" }, outputs: { valueChangeEventEmitter: "valueChange" }, providers: [MNG_AUTOCOMPLETE_VALUE_ACCESSOR], viewQueries: [{ propertyName: "primeAutocomplete", first: true, predicate: AutoComplete, descendants: true }], ngImport: i0, template: "<p-autoComplete\n (onFocus)=\"onFocus($event)\"\n [formControl]=\"autocompleteFormControl\"\n [placeholder]=\"$any(placeholder)\"\n [dropdown]=\"true\"\n [dataKey]=\"$any(dataKeyProperty)\"\n [field]=\"$any(itemsLabelProperty)\"\n [suggestions]=\"(suggestions$ | async) ?? []\"\n [multiple]=\"multiselect\"\n [showEmptyMessage]=\"true\"\n [emptyMessage]=\"'mngAutocomplete.noMatches' | translate\"\n [styleClass]=\"$any(className)\"\n [panelStyleClass]=\"$any(dropdownClassName)\"\n [minLength]=\"openOnFocus ? 0 : 1\"\n (completeMethod)=\"onSearch($event)\"\n (onSelect)=\"onSelect($event)\"\n appendTo=\"body\"\n dropdownMode=\"current\">\n</p-autoComplete>\n", components: [{ type: i2.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "virtualScroll", "itemSize", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "field", "scrollHeight", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "suggestions"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide"] }], directives: [{ type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], pipes: { "async": i4.AsyncPipe, "translate": i1.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
235
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: MngAutocompleteComponent, decorators: [{
236
- type: Component,
237
- args: [{ selector: 'mng-autocomplete', providers: [MNG_AUTOCOMPLETE_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-autoComplete\n (onFocus)=\"onFocus($event)\"\n [formControl]=\"autocompleteFormControl\"\n [placeholder]=\"$any(placeholder)\"\n [dropdown]=\"true\"\n [dataKey]=\"$any(dataKeyProperty)\"\n [field]=\"$any(itemsLabelProperty)\"\n [suggestions]=\"(suggestions$ | async) ?? []\"\n [multiple]=\"multiselect\"\n [showEmptyMessage]=\"true\"\n [emptyMessage]=\"'mngAutocomplete.noMatches' | translate\"\n [styleClass]=\"$any(className)\"\n [panelStyleClass]=\"$any(dropdownClassName)\"\n [minLength]=\"openOnFocus ? 0 : 1\"\n (completeMethod)=\"onSearch($event)\"\n (onSelect)=\"onSelect($event)\"\n appendTo=\"body\"\n dropdownMode=\"current\">\n</p-autoComplete>\n" }]
238
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.TranslateService }]; }, propDecorators: { dataProvider: [{
239
- type: Input
240
- }], dataKeyProperty: [{
241
- type: Input
242
- }], itemsValuePropertyInit: [{
243
- type: Input,
244
- args: ['itemsValueProperty']
245
- }], itemsLabelPropertyInit: [{
246
- type: Input,
247
- args: ['itemsLabelProperty']
248
- }], itemsLabelTranslate: [{
249
- type: Input
250
- }], inlineSearch: [{
251
- type: Input
252
- }], openOnFocus: [{
253
- type: Input
254
- }], multiselect: [{
255
- type: Input
256
- }], placeholder: [{
257
- type: Input
258
- }], className: [{
259
- type: Input
260
- }], dropdownClassName: [{
261
- type: Input
262
- }], valueChangeEventEmitter: [{
263
- type: Output,
264
- args: ['valueChange']
265
- }], primeAutocomplete: [{
266
- type: ViewChild,
267
- args: [AutoComplete]
268
- }] } });
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, forwardRef } from '@angular/core';
2
+ import { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { AutoComplete } from 'primeng/autocomplete';
4
+ import { BehaviorSubject, of, switchMap } from 'rxjs';
5
+ import { first, map } from 'rxjs/operators';
6
+ import { MediusFilterMatchType, MediusQueryParamBuilder } from '../../../api/models';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@ngx-translate/core";
9
+ import * as i2 from "primeng/autocomplete";
10
+ import * as i3 from "@angular/forms";
11
+ import * as i4 from "@angular/common";
12
+ export const MNG_AUTOCOMPLETE_VALUE_ACCESSOR = {
13
+ provide: NG_VALUE_ACCESSOR,
14
+ useExisting: forwardRef(() => MngAutocompleteComponent),
15
+ multi: true
16
+ };
17
+ export class MngAutocompleteComponent {
18
+ constructor(injector, translate) {
19
+ this.injector = injector;
20
+ this.translate = translate;
21
+ this.itemsLabelTranslate = false;
22
+ this.inlineSearch = false;
23
+ this.openOnFocus = false;
24
+ this.multiselect = false;
25
+ this.className = null;
26
+ this.dropdownClassName = null;
27
+ this.valueChangeEventEmitter = new EventEmitter();
28
+ this.isInited = false;
29
+ this.suggestionsSubject = new BehaviorSubject([]);
30
+ this.searchSubscription = null;
31
+ this.dataProviderService = null;
32
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
33
+ this.onChangeFn = () => { };
34
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
35
+ this.onTouchedFn = () => { };
36
+ this.autocompleteFormControl = new FormControl();
37
+ this.suggestions$ = this.suggestionsSubject.asObservable();
38
+ }
39
+ ngOnInit() {
40
+ this.setItemsAndDataProvider();
41
+ }
42
+ ngOnDestroy() {
43
+ this.searchSubscription?.unsubscribe();
44
+ }
45
+ onSearch(event) {
46
+ this.searchSubscription?.unsubscribe();
47
+ if (this.dataProvider) {
48
+ const queryParamBuilder = MediusQueryParamBuilder.create();
49
+ if (this.itemsLabelProperty) {
50
+ queryParamBuilder.withSort(this.itemsLabelProperty);
51
+ }
52
+ if (event.query && event.query.length > 0 && this.itemsLabelProperty) {
53
+ queryParamBuilder.withFilter(this.itemsLabelProperty, event.query, undefined, MediusFilterMatchType.StartsWith);
54
+ }
55
+ this.searchSubscription = this.getLookup(queryParamBuilder.build(), event.query).subscribe({
56
+ next: items => {
57
+ this.setSuggestionsFromItems(items, event.query);
58
+ }
59
+ });
60
+ }
61
+ }
62
+ onSelect(value) {
63
+ let outputValue = value;
64
+ if (this.itemsValueProperty && typeof value === 'object') {
65
+ outputValue = value[this.itemsValueProperty];
66
+ }
67
+ this.onChangeFn(outputValue);
68
+ this.valueChangeEventEmitter.next(outputValue);
69
+ }
70
+ onFocus(event) {
71
+ if (this.openOnFocus) {
72
+ this.primeAutocomplete?.show();
73
+ }
74
+ }
75
+ registerOnChange(fn) {
76
+ this.onChangeFn = fn;
77
+ }
78
+ registerOnTouched(fn) {
79
+ this.onTouchedFn = fn;
80
+ }
81
+ setDisabledState(isDisabled) {
82
+ if (isDisabled) {
83
+ this.autocompleteFormControl.disable();
84
+ }
85
+ else {
86
+ this.autocompleteFormControl.enable();
87
+ }
88
+ }
89
+ writeValue(value) {
90
+ this.setItemsAndDataProvider();
91
+ if (this.itemsValuePropertyInit && value != null && typeof value !== 'object') {
92
+ const defaultItem = { [this.itemsValuePropertyInit]: value };
93
+ if (this.itemsLabelProperty) {
94
+ defaultItem[this.itemsLabelProperty] = value;
95
+ }
96
+ const matchedItem = this.suggestionsSubject.value.find(i => i[this.itemsValuePropertyInit] === value);
97
+ if (matchedItem) {
98
+ this.autocompleteFormControl.setValue(matchedItem, { emitEvent: false });
99
+ }
100
+ else if (this.dataProvider) {
101
+ const queryParamBuilder = MediusQueryParamBuilder.create();
102
+ queryParamBuilder.withFilter(this.itemsValuePropertyInit, value, undefined, MediusFilterMatchType.Equals);
103
+ this.getLookup(queryParamBuilder.build())
104
+ .pipe(first())
105
+ .subscribe({
106
+ next: items => {
107
+ let isMatch = false;
108
+ if (items.length === 1) {
109
+ this.autocompleteFormControl.setValue(items[0]);
110
+ isMatch = true;
111
+ }
112
+ else if (items.length > 1) {
113
+ // for lookup data providers not using query params
114
+ const matchedItem = items.find(i => i[this.itemsValuePropertyInit] === value);
115
+ if (matchedItem) {
116
+ this.setAutocompleteValueFromWrite(matchedItem);
117
+ isMatch = true;
118
+ }
119
+ }
120
+ if (!isMatch) {
121
+ this.setAutocompleteValueFromWrite(defaultItem);
122
+ }
123
+ },
124
+ error: () => {
125
+ this.setAutocompleteValueFromWrite(defaultItem);
126
+ }
127
+ });
128
+ }
129
+ else {
130
+ this.setAutocompleteValueFromWrite(defaultItem);
131
+ }
132
+ }
133
+ else {
134
+ this.setAutocompleteValueFromWrite(value);
135
+ }
136
+ }
137
+ setItemsAndDataProvider() {
138
+ if (this.isInited) {
139
+ return;
140
+ }
141
+ this.itemsLabelProperty = this.itemsLabelPropertyInit;
142
+ this.itemsValueProperty = this.itemsValuePropertyInit;
143
+ if (this.dataProvider) {
144
+ this.dataProviderService = this.dataProvider.serviceType ? this.injector.get(this.dataProvider.serviceType) : null;
145
+ if (this.itemsLabelTranslate) {
146
+ // setup translation properties
147
+ if (this.itemsLabelPropertyInit) {
148
+ this.itemsLabelProperty = `${this.itemsLabelPropertyInit}_i18n`;
149
+ }
150
+ else if (!this.itemsLabelProperty && !this.itemsValuePropertyInit) {
151
+ this.itemsLabelProperty = 'title_i18n';
152
+ this.itemsValueProperty = 'value';
153
+ }
154
+ else {
155
+ throw new Error(`Invalid use with value (${this.itemsLabelPropertyInit}) and label (${this.itemsLabelPropertyInit}) property setup.`);
156
+ }
157
+ }
158
+ }
159
+ else {
160
+ console.warn(`Data provider should be provided for MngAutocompleteComponent.`);
161
+ }
162
+ if (this.openOnFocus) {
163
+ this.onSearch({ query: '' });
164
+ }
165
+ this.isInited = true;
166
+ }
167
+ setAutocompleteValueFromWrite(value) {
168
+ if (value && this.itemsLabelTranslate) {
169
+ value = this.i18nPopulateItems([value], this.translate.instant(this.i18nGetItemsKeys([value])))[0];
170
+ }
171
+ this.autocompleteFormControl.setValue(value, { emitEvent: false });
172
+ }
173
+ getLookup(qp, query) {
174
+ if (this.dataProvider) {
175
+ return this.dataProvider.lookup(qp, this.dataProviderService, query).pipe(switchMap(items => {
176
+ if (this.itemsLabelTranslate) {
177
+ return this.translate.stream(this.i18nGetItemsKeys(items)).pipe(map(translations => this.i18nPopulateItems(items, translations)));
178
+ }
179
+ else {
180
+ return of(items);
181
+ }
182
+ }));
183
+ }
184
+ else {
185
+ return of([]);
186
+ }
187
+ }
188
+ i18nGetItemsKeys(items) {
189
+ return items.map(item => (typeof item === 'object' && this.itemsLabelPropertyInit ? item[this.itemsLabelPropertyInit] : item));
190
+ }
191
+ i18nPopulateItems(items, i18nMap) {
192
+ return items.map(item => {
193
+ if (typeof item === 'object' && this.itemsLabelPropertyInit) {
194
+ const label = item[this.itemsLabelPropertyInit];
195
+ const translation = i18nMap[label];
196
+ if (translation) {
197
+ return { ...item, [this.itemsLabelProperty]: translation };
198
+ }
199
+ return { ...item };
200
+ }
201
+ else {
202
+ const translation = i18nMap[item];
203
+ return {
204
+ [this.itemsLabelProperty]: translation ?? item,
205
+ [this.itemsValueProperty]: item
206
+ };
207
+ }
208
+ });
209
+ }
210
+ setSuggestionsFromItems(items, query) {
211
+ if (this.inlineSearch) {
212
+ const queryLowerCase = query?.toLowerCase() ?? '';
213
+ const filteredItems = items.filter(i => {
214
+ let itemLabel = i;
215
+ if (this.itemsLabelProperty && typeof i === 'object') {
216
+ itemLabel = i[this.itemsLabelProperty];
217
+ }
218
+ if (itemLabel == null) {
219
+ return queryLowerCase == null || !queryLowerCase.length;
220
+ }
221
+ if (typeof itemLabel !== 'string') {
222
+ itemLabel = itemLabel.toString();
223
+ }
224
+ return itemLabel.toLowerCase().startsWith(queryLowerCase);
225
+ });
226
+ this.suggestionsSubject.next([...filteredItems]);
227
+ }
228
+ else {
229
+ this.suggestionsSubject.next([...items]);
230
+ }
231
+ }
232
+ }
233
+ MngAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: MngAutocompleteComponent, deps: [{ token: i0.Injector }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
234
+ MngAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: MngAutocompleteComponent, selector: "mng-autocomplete", inputs: { dataProvider: "dataProvider", dataKeyProperty: "dataKeyProperty", itemsValuePropertyInit: ["itemsValueProperty", "itemsValuePropertyInit"], itemsLabelPropertyInit: ["itemsLabelProperty", "itemsLabelPropertyInit"], itemsLabelTranslate: "itemsLabelTranslate", inlineSearch: "inlineSearch", openOnFocus: "openOnFocus", multiselect: "multiselect", placeholder: "placeholder", className: "className", dropdownClassName: "dropdownClassName" }, outputs: { valueChangeEventEmitter: "valueChange" }, providers: [MNG_AUTOCOMPLETE_VALUE_ACCESSOR], viewQueries: [{ propertyName: "primeAutocomplete", first: true, predicate: AutoComplete, descendants: true }], ngImport: i0, template: "<p-autoComplete\n (onFocus)=\"onFocus($event)\"\n [formControl]=\"autocompleteFormControl\"\n [placeholder]=\"$any(placeholder)\"\n [dropdown]=\"true\"\n [dataKey]=\"$any(dataKeyProperty)\"\n [field]=\"$any(itemsLabelProperty)\"\n [suggestions]=\"(suggestions$ | async) ?? []\"\n [multiple]=\"multiselect\"\n [showEmptyMessage]=\"true\"\n [emptyMessage]=\"'mngAutocomplete.noMatches' | translate\"\n [styleClass]=\"$any(className)\"\n [panelStyleClass]=\"$any(dropdownClassName)\"\n [minLength]=\"openOnFocus ? 0 : 1\"\n (completeMethod)=\"onSearch($event)\"\n (onSelect)=\"onSelect($event)\"\n appendTo=\"body\"\n dropdownMode=\"current\">\n</p-autoComplete>\n", components: [{ type: i2.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "virtualScroll", "itemSize", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "field", "scrollHeight", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "suggestions"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide"] }], directives: [{ type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], pipes: { "async": i4.AsyncPipe, "translate": i1.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
235
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: MngAutocompleteComponent, decorators: [{
236
+ type: Component,
237
+ args: [{ selector: 'mng-autocomplete', providers: [MNG_AUTOCOMPLETE_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-autoComplete\n (onFocus)=\"onFocus($event)\"\n [formControl]=\"autocompleteFormControl\"\n [placeholder]=\"$any(placeholder)\"\n [dropdown]=\"true\"\n [dataKey]=\"$any(dataKeyProperty)\"\n [field]=\"$any(itemsLabelProperty)\"\n [suggestions]=\"(suggestions$ | async) ?? []\"\n [multiple]=\"multiselect\"\n [showEmptyMessage]=\"true\"\n [emptyMessage]=\"'mngAutocomplete.noMatches' | translate\"\n [styleClass]=\"$any(className)\"\n [panelStyleClass]=\"$any(dropdownClassName)\"\n [minLength]=\"openOnFocus ? 0 : 1\"\n (completeMethod)=\"onSearch($event)\"\n (onSelect)=\"onSelect($event)\"\n appendTo=\"body\"\n dropdownMode=\"current\">\n</p-autoComplete>\n" }]
238
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.TranslateService }]; }, propDecorators: { dataProvider: [{
239
+ type: Input
240
+ }], dataKeyProperty: [{
241
+ type: Input
242
+ }], itemsValuePropertyInit: [{
243
+ type: Input,
244
+ args: ['itemsValueProperty']
245
+ }], itemsLabelPropertyInit: [{
246
+ type: Input,
247
+ args: ['itemsLabelProperty']
248
+ }], itemsLabelTranslate: [{
249
+ type: Input
250
+ }], inlineSearch: [{
251
+ type: Input
252
+ }], openOnFocus: [{
253
+ type: Input
254
+ }], multiselect: [{
255
+ type: Input
256
+ }], placeholder: [{
257
+ type: Input
258
+ }], className: [{
259
+ type: Input
260
+ }], dropdownClassName: [{
261
+ type: Input
262
+ }], valueChangeEventEmitter: [{
263
+ type: Output,
264
+ args: ['valueChange']
265
+ }], primeAutocomplete: [{
266
+ type: ViewChild,
267
+ args: [AutoComplete]
268
+ }] } });
269
269
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBOEIsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNwSyxPQUFPLEVBQXVCLFdBQVcsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR3BGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsZUFBZSxFQUE0QixFQUFFLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzlFLE9BQU8sRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsT0FBTyxFQUFDLHFCQUFxQixFQUFvQix1QkFBdUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7QUFHckcsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQXFCO0lBQzdELE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztJQUN2RCxLQUFLLEVBQUUsSUFBSTtDQUNkLENBQUM7QUFRRixNQUFNLE9BQU8sd0JBQXdCO0lBK0JqQyxZQUFvQixRQUFrQixFQUFVLFNBQTJCO1FBQXZELGFBQVEsR0FBUixRQUFRLENBQVU7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQTFCM0Qsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQzVCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXBCLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBQ2hDLHNCQUFpQixHQUFrQixJQUFJLENBQUM7UUFFMUIsNEJBQXVCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUluRSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLHVCQUFrQixHQUFnQyxJQUFJLGVBQWUsQ0FBYSxFQUFFLENBQUMsQ0FBQztRQUN0Rix1QkFBa0IsR0FBd0IsSUFBSSxDQUFDO1FBQy9DLHdCQUFtQixHQUFRLElBQUksQ0FBQztRQUN4QyxnRUFBZ0U7UUFDeEQsZUFBVSxHQUFRLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUNuQyxnRUFBZ0U7UUFDeEQsZ0JBQVcsR0FBUSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFJN0IsNEJBQXVCLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFDekQsaUJBQVksR0FBMkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRVAsQ0FBQztJQUUvRSxRQUFRO1FBQ0osSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFVO1FBQ2YsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBRXZDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNuQixNQUFNLGlCQUFpQixHQUFHLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNELElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO2dCQUN6QixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7YUFDdkQ7WUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDbEUsaUJBQWlCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNuSDtZQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ3ZGLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDVixJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckQsQ0FBQzthQUNKLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFVO1FBQ2YsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUN0RCxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxPQUFPLENBQUMsS0FBWTtRQUNoQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDO1NBQ2xDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQU87UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2hDLElBQUksVUFBVSxFQUFFO1lBQ1osSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzFDO2FBQU07WUFDSCxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDekM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVU7UUFDakIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFFL0IsSUFBSSxJQUFJLENBQUMsc0JBQXNCLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDM0UsTUFBTSxXQUFXLEdBQVEsRUFBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEtBQUssRUFBQyxDQUFDO1lBQ2hFLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO2dCQUN6QixXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsS0FBSyxDQUFDO2FBQ2hEO1lBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUF1QixDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7WUFDdkcsSUFBSSxXQUFXLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQzthQUMxRTtpQkFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQzFCLE1BQU0saUJBQWlCLEdBQUcsdUJBQXVCLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzNELGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFFMUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztxQkFDcEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO3FCQUNiLFNBQVMsQ0FBQztvQkFDUCxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUU7d0JBQ1YsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO3dCQUNwQixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFOzRCQUNwQixJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUNoRCxPQUFPLEdBQUcsSUFBSSxDQUFDO3lCQUNsQjs2QkFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUN6QixtREFBbUQ7NEJBQ25ELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUF1QixDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7NEJBQy9FLElBQUksV0FBVyxFQUFFO2dDQUNiLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQ0FDaEQsT0FBTyxHQUFHLElBQUksQ0FBQzs2QkFDbEI7eUJBQ0o7d0JBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRTs0QkFDVixJQUFJLENBQUMsNkJBQTZCLENBQUMsV0FBVyxDQUFDLENBQUM7eUJBQ25EO29CQUNMLENBQUM7b0JBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTt3QkFDUixJQUFJLENBQUMsNkJBQTZCLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3BELENBQUM7aUJBQ0osQ0FBQyxDQUFDO2FBQ1Y7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ25EO1NBQ0o7YUFBTTtZQUNILElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM3QztJQUNMLENBQUM7SUFFTyx1QkFBdUI7UUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztRQUN0RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1FBRXRELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNuQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUV4SCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDMUIsK0JBQStCO2dCQUMvQixJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtvQkFDN0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixPQUFPLENBQUM7aUJBQ25FO3FCQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7b0JBQ2pFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxZQUFZLENBQUM7b0JBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUM7aUJBQ3JDO3FCQUFNO29CQUNILE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLElBQUksQ0FBQyxzQkFBc0IsZ0JBQWdCLElBQUksQ0FBQyxzQkFBc0IsbUJBQW1CLENBQUMsQ0FBQztpQkFDekk7YUFDSjtTQUNKO2FBQU07WUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLGdFQUFnRSxDQUFDLENBQUM7U0FDbEY7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLEtBQUssRUFBRSxFQUFFLEVBQUMsQ0FBQyxDQUFDO1NBQzlCO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQztJQUVPLDZCQUE2QixDQUFDLEtBQVU7UUFDNUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ25DLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0RztRQUNELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVPLFNBQVMsQ0FBQyxFQUFvQixFQUFFLEtBQWM7UUFDbEQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQ3JFLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDZCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtvQkFDMUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3JJO3FCQUFNO29CQUNILE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNwQjtZQUNMLENBQUMsQ0FBQyxDQUNMLENBQUM7U0FDTDthQUFNO1lBQ0gsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDakI7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsS0FBaUI7UUFDdEMsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQyxDQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBVyxDQUFDLENBQUM7SUFDekssQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQWlCLEVBQUUsT0FBWTtRQUNyRCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEIsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO2dCQUN6RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQyxDQUFXLENBQUM7Z0JBQzFFLE1BQU0sV0FBVyxHQUF1QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZELElBQUksV0FBVyxFQUFFO29CQUNiLE9BQU8sRUFBQyxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBbUIsQ0FBQyxFQUFFLFdBQVcsRUFBQyxDQUFDO2lCQUM3RDtnQkFDRCxPQUFPLEVBQUMsR0FBRyxJQUFJLEVBQUMsQ0FBQzthQUNwQjtpQkFBTTtnQkFDSCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xDLE9BQU87b0JBQ0gsQ0FBQyxJQUFJLENBQUMsa0JBQW1CLENBQUMsRUFBRSxXQUFXLElBQUksSUFBSTtvQkFDL0MsQ0FBQyxJQUFJLENBQUMsa0JBQW1CLENBQUMsRUFBRSxJQUFJO2lCQUNuQyxDQUFDO2FBQ0w7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxLQUFpQixFQUFFLEtBQWM7UUFDN0QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLE1BQU0sY0FBYyxHQUFHLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDbEQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbkMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7b0JBQ2xELFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7aUJBQzFDO2dCQUNELElBQUksU0FBUyxJQUFJLElBQUksRUFBRTtvQkFDbkIsT0FBTyxjQUFjLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztpQkFDM0Q7Z0JBQ0QsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUU7b0JBQy9CLFNBQVMsR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7aUJBQ3BDO2dCQUNELE9BQU8sU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM5RCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUM7U0FDcEQ7YUFBTTtZQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDNUM7SUFDTCxDQUFDOztxSEEvT1Esd0JBQXdCO3lHQUF4Qix3QkFBd0IsZ2lCQUh0QixDQUFDLCtCQUErQixDQUFDLDZFQWtCakMsWUFBWSxnREN0QzNCLDBzQkFtQkE7MkZESWEsd0JBQXdCO2tCQU5wQyxTQUFTOytCQUNJLGtCQUFrQixhQUVqQixDQUFDLCtCQUErQixDQUFDLG1CQUMzQix1QkFBdUIsQ0FBQyxNQUFNOzhIQUcvQixZQUFZO3NCQUEzQixLQUFLO2dCQUNVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBQzhCLHNCQUFzQjtzQkFBekQsS0FBSzt1QkFBQyxvQkFBb0I7Z0JBQ1Msc0JBQXNCO3NCQUF6RCxLQUFLO3VCQUFDLG9CQUFvQjtnQkFDWCxtQkFBbUI7c0JBQWxDLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBQ1UsV0FBVztzQkFBMUIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLGlCQUFpQjtzQkFBaEMsS0FBSztnQkFFd0IsdUJBQXVCO3NCQUFwRCxNQUFNO3VCQUFDLGFBQWE7Z0JBRVcsaUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgRXhpc3RpbmdQcm92aWRlciwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIGZvcndhcmRSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0F1dG9Db21wbGV0ZX0gZnJvbSAncHJpbWVuZy9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgb2YsIHN3aXRjaE1hcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpcnN0LCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtNZWRpdXNGaWx0ZXJNYXRjaFR5cGUsIE1lZGl1c1F1ZXJ5UGFyYW0sIE1lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyfSBmcm9tICcuLi8uLi8uLi9hcGkvbW9kZWxzJztcbmltcG9ydCB7SUxvb2t1cERhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vLi4vZGF0YS1wcm92aWRlcnMnO1xuXG5leHBvcnQgY29uc3QgTU5HX0FVVE9DT01QTEVURV9WQUxVRV9BQ0NFU1NPUjogRXhpc3RpbmdQcm92aWRlciA9IHtcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNbmdBdXRvY29tcGxldGVDb21wb25lbnQpLFxuICAgIG11bHRpOiB0cnVlXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ21uZy1hdXRvY29tcGxldGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW01OR19BVVRPQ09NUExFVEVfVkFMVUVfQUNDRVNTT1JdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE1uZ0F1dG9jb21wbGV0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgQElucHV0KCkgcHVibGljIGRhdGFQcm92aWRlcj86IElMb29rdXBEYXRhUHJvdmlkZXI8YW55LCBhbnk+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkYXRhS2V5UHJvcGVydHk/OiBzdHJpbmc7XG4gICAgQElucHV0KCdpdGVtc1ZhbHVlUHJvcGVydHknKSBwdWJsaWMgaXRlbXNWYWx1ZVByb3BlcnR5SW5pdD86IHN0cmluZztcbiAgICBASW5wdXQoJ2l0ZW1zTGFiZWxQcm9wZXJ0eScpIHB1YmxpYyBpdGVtc0xhYmVsUHJvcGVydHlJbml0Pzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpdGVtc0xhYmVsVHJhbnNsYXRlID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGlubGluZVNlYXJjaCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBvcGVuT25Gb2N1cyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtdWx0aXNlbGVjdCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBASW5wdXQoKSBwdWJsaWMgZHJvcGRvd25DbGFzc05hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgQE91dHB1dCgndmFsdWVDaGFuZ2UnKSBwdWJsaWMgdmFsdWVDaGFuZ2VFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAVmlld0NoaWxkKEF1dG9Db21wbGV0ZSkgcHVibGljIHByaW1lQXV0b2NvbXBsZXRlPzogQXV0b0NvbXBsZXRlO1xuXG4gICAgcHJpdmF0ZSBpc0luaXRlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgc3VnZ2VzdGlvbnNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8QXJyYXk8YW55Pj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PGFueT4+KFtdKTtcbiAgICBwcml2YXRlIHNlYXJjaFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBkYXRhUHJvdmlkZXJTZXJ2aWNlOiBhbnkgPSBudWxsO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICBwcml2YXRlIG9uQ2hhbmdlRm46IGFueSA9ICgpID0+IHt9O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICBwcml2YXRlIG9uVG91Y2hlZEZuOiBhbnkgPSAoKSA9PiB7fTtcblxuICAgIHB1YmxpYyBpdGVtc0xhYmVsUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHVibGljIGl0ZW1zVmFsdWVQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwdWJsaWMgYXV0b2NvbXBsZXRlRm9ybUNvbnRyb2w6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gICAgcHVibGljIHN1Z2dlc3Rpb25zJDogT2JzZXJ2YWJsZTxBcnJheTxhbnk+PiA9IHRoaXMuc3VnZ2VzdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc2V0SXRlbXNBbmREYXRhUHJvdmlkZXIoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgb25TZWFyY2goZXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcblxuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1CdWlsZGVyID0gTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtc0xhYmVsUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtQnVpbGRlci53aXRoU29ydCh0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZlbnQucXVlcnkgJiYgZXZlbnQucXVlcnkubGVuZ3RoID4gMCAmJiB0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1CdWlsZGVyLndpdGhGaWx0ZXIodGhpcy5pdGVtc0xhYmVsUHJvcGVydHksIGV2ZW50LnF1ZXJ5LCB1bmRlZmluZWQsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5TdGFydHNXaXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID0gdGhpcy5nZXRMb29rdXAocXVlcnlQYXJhbUJ1aWxkZXIuYnVpbGQoKSwgZXZlbnQucXVlcnkpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogaXRlbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN1Z2dlc3Rpb25zRnJvbUl0ZW1zKGl0ZW1zLCBldmVudC5xdWVyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNlbGVjdCh2YWx1ZTogYW55KSB7XG4gICAgICAgIGxldCBvdXRwdXRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5pdGVtc1ZhbHVlUHJvcGVydHkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgb3V0cHV0VmFsdWUgPSB2YWx1ZVt0aGlzLml0ZW1zVmFsdWVQcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZUZuKG91dHB1dFZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZUV2ZW50RW1pdHRlci5uZXh0KG91dHB1dFZhbHVlKTtcbiAgICB9XG5cbiAgICBvbkZvY3VzKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5vcGVuT25Gb2N1cykge1xuICAgICAgICAgICAgdGhpcy5wcmltZUF1dG9jb21wbGV0ZT8uc2hvdygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2VGbiA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWRGbiA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVGb3JtQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUZvcm1Db250cm9sLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0SXRlbXNBbmREYXRhUHJvdmlkZXIoKTtcblxuICAgICAgICBpZiAodGhpcy5pdGVtc1ZhbHVlUHJvcGVydHlJbml0ICYmIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEl0ZW06IGFueSA9IHtbdGhpcy5pdGVtc1ZhbHVlUHJvcGVydHlJbml0XTogdmFsdWV9O1xuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNMYWJlbFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdEl0ZW1bdGhpcy5pdGVtc0xhYmVsUHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRJdGVtID0gdGhpcy5zdWdnZXN0aW9uc1N1YmplY3QudmFsdWUuZmluZChpID0+IGlbdGhpcy5pdGVtc1ZhbHVlUHJvcGVydHlJbml0IV0gPT09IHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVkSXRlbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRm9ybUNvbnRyb2wuc2V0VmFsdWUobWF0Y2hlZEl0ZW0sIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnlQYXJhbUJ1aWxkZXIgPSBNZWRpdXNRdWVyeVBhcmFtQnVpbGRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtQnVpbGRlci53aXRoRmlsdGVyKHRoaXMuaXRlbXNWYWx1ZVByb3BlcnR5SW5pdCwgdmFsdWUsIHVuZGVmaW5lZCwgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkVxdWFscyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmdldExvb2t1cChxdWVyeVBhcmFtQnVpbGRlci5idWlsZCgpKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IGl0ZW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVGb3JtQ29udHJvbC5zZXRWYWx1ZShpdGVtc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgbG9va3VwIGRhdGEgcHJvdmlkZXJzIG5vdCB1c2luZyBxdWVyeSBwYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZEl0ZW0gPSBpdGVtcy5maW5kKGkgPT4gaVt0aGlzLml0ZW1zVmFsdWVQcm9wZXJ0eUluaXQhXSA9PT0gdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXV0b2NvbXBsZXRlVmFsdWVGcm9tV3JpdGUobWF0Y2hlZEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBdXRvY29tcGxldGVWYWx1ZUZyb21Xcml0ZShkZWZhdWx0SXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBdXRvY29tcGxldGVWYWx1ZUZyb21Xcml0ZShkZWZhdWx0SXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEF1dG9jb21wbGV0ZVZhbHVlRnJvbVdyaXRlKGRlZmF1bHRJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QXV0b2NvbXBsZXRlVmFsdWVGcm9tV3JpdGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJdGVtc0FuZERhdGFQcm92aWRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbml0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXRlbXNMYWJlbFByb3BlcnR5ID0gdGhpcy5pdGVtc0xhYmVsUHJvcGVydHlJbml0O1xuICAgICAgICB0aGlzLml0ZW1zVmFsdWVQcm9wZXJ0eSA9IHRoaXMuaXRlbXNWYWx1ZVByb3BlcnR5SW5pdDtcblxuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyU2VydmljZSA9IHRoaXMuZGF0YVByb3ZpZGVyLnNlcnZpY2VUeXBlID8gdGhpcy5pbmplY3Rvci5nZXQ8YW55Pih0aGlzLmRhdGFQcm92aWRlci5zZXJ2aWNlVHlwZSkgOiBudWxsO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtc0xhYmVsVHJhbnNsYXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0dXAgdHJhbnNsYXRpb24gcHJvcGVydGllc1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eUluaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtc0xhYmVsUHJvcGVydHkgPSBgJHt0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eUluaXR9X2kxOG5gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXRlbXNMYWJlbFByb3BlcnR5ICYmICF0aGlzLml0ZW1zVmFsdWVQcm9wZXJ0eUluaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtc0xhYmVsUHJvcGVydHkgPSAndGl0bGVfaTE4bic7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNWYWx1ZVByb3BlcnR5ID0gJ3ZhbHVlJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdXNlIHdpdGggdmFsdWUgKCR7dGhpcy5pdGVtc0xhYmVsUHJvcGVydHlJbml0fSkgYW5kIGxhYmVsICgke3RoaXMuaXRlbXNMYWJlbFByb3BlcnR5SW5pdH0pIHByb3BlcnR5IHNldHVwLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgRGF0YSBwcm92aWRlciBzaG91bGQgYmUgcHJvdmlkZWQgZm9yIE1uZ0F1dG9jb21wbGV0ZUNvbXBvbmVudC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wZW5PbkZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoKHtxdWVyeTogJyd9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNJbml0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0QXV0b2NvbXBsZXRlVmFsdWVGcm9tV3JpdGUodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodmFsdWUgJiYgdGhpcy5pdGVtc0xhYmVsVHJhbnNsYXRlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuaTE4blBvcHVsYXRlSXRlbXMoW3ZhbHVlXSwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0aGlzLmkxOG5HZXRJdGVtc0tleXMoW3ZhbHVlXSkpKVswXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TG9va3VwKHFwOiBNZWRpdXNRdWVyeVBhcmFtLCBxdWVyeT86IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8YW55Pj4ge1xuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFQcm92aWRlci5sb29rdXAocXAsIHRoaXMuZGF0YVByb3ZpZGVyU2VydmljZSwgcXVlcnkpLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGl0ZW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNMYWJlbFRyYW5zbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLnN0cmVhbSh0aGlzLmkxOG5HZXRJdGVtc0tleXMoaXRlbXMpKS5waXBlKG1hcCh0cmFuc2xhdGlvbnMgPT4gdGhpcy5pMThuUG9wdWxhdGVJdGVtcyhpdGVtcywgdHJhbnNsYXRpb25zKSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaTE4bkdldEl0ZW1zS2V5cyhpdGVtczogQXJyYXk8YW55Pik6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4gKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiB0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eUluaXQgPyAoaXRlbVt0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eUluaXQgYXMga2V5b2Ygb2JqZWN0XSBhcyBzdHJpbmcpIDogaXRlbSkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGkxOG5Qb3B1bGF0ZUl0ZW1zKGl0ZW1zOiBBcnJheTxhbnk+LCBpMThuTWFwOiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgdGhpcy5pdGVtc0xhYmVsUHJvcGVydHlJbml0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtW3RoaXMuaXRlbXNMYWJlbFByb3BlcnR5SW5pdCBhcyBrZXlvZiBvYmplY3RdIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gaTE4bk1hcFtsYWJlbF07XG4gICAgICAgICAgICAgICAgaWYgKHRyYW5zbGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7Li4uaXRlbSwgW3RoaXMuaXRlbXNMYWJlbFByb3BlcnR5IV06IHRyYW5zbGF0aW9ufTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsuLi5pdGVtfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSBpMThuTWFwW2l0ZW1dO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIFt0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eSFdOiB0cmFuc2xhdGlvbiA/PyBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBbdGhpcy5pdGVtc1ZhbHVlUHJvcGVydHkhXTogaXRlbVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U3VnZ2VzdGlvbnNGcm9tSXRlbXMoaXRlbXM6IEFycmF5PGFueT4sIHF1ZXJ5Pzogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmlubGluZVNlYXJjaCkge1xuICAgICAgICAgICAgY29uc3QgcXVlcnlMb3dlckNhc2UgPSBxdWVyeT8udG9Mb3dlckNhc2UoKSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSBpdGVtcy5maWx0ZXIoaSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGl0ZW1MYWJlbCA9IGk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNMYWJlbFByb3BlcnR5ICYmIHR5cGVvZiBpID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpdGVtTGFiZWwgPSBpW3RoaXMuaXRlbXNMYWJlbFByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1MYWJlbCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBxdWVyeUxvd2VyQ2FzZSA9PSBudWxsIHx8ICFxdWVyeUxvd2VyQ2FzZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbUxhYmVsICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBpdGVtTGFiZWwgPSBpdGVtTGFiZWwudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1MYWJlbC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocXVlcnlMb3dlckNhc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zU3ViamVjdC5uZXh0KFsuLi5maWx0ZXJlZEl0ZW1zXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zU3ViamVjdC5uZXh0KFsuLi5pdGVtc10pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPHAtYXV0b0NvbXBsZXRlXG4gICAgKG9uRm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcbiAgICBbZm9ybUNvbnRyb2xdPVwiYXV0b2NvbXBsZXRlRm9ybUNvbnRyb2xcIlxuICAgIFtwbGFjZWhvbGRlcl09XCIkYW55KHBsYWNlaG9sZGVyKVwiXG4gICAgW2Ryb3Bkb3duXT1cInRydWVcIlxuICAgIFtkYXRhS2V5XT1cIiRhbnkoZGF0YUtleVByb3BlcnR5KVwiXG4gICAgW2ZpZWxkXT1cIiRhbnkoaXRlbXNMYWJlbFByb3BlcnR5KVwiXG4gICAgW3N1Z2dlc3Rpb25zXT1cIihzdWdnZXN0aW9ucyQgfCBhc3luYykgPz8gW11cIlxuICAgIFttdWx0aXBsZV09XCJtdWx0aXNlbGVjdFwiXG4gICAgW3Nob3dFbXB0eU1lc3NhZ2VdPVwidHJ1ZVwiXG4gICAgW2VtcHR5TWVzc2FnZV09XCInbW5nQXV0b2NvbXBsZXRlLm5vTWF0Y2hlcycgfCB0cmFuc2xhdGVcIlxuICAgIFtzdHlsZUNsYXNzXT1cIiRhbnkoY2xhc3NOYW1lKVwiXG4gICAgW3BhbmVsU3R5bGVDbGFzc109XCIkYW55KGRyb3Bkb3duQ2xhc3NOYW1lKVwiXG4gICAgW21pbkxlbmd0aF09XCJvcGVuT25Gb2N1cyA/IDAgOiAxXCJcbiAgICAoY29tcGxldGVNZXRob2QpPVwib25TZWFyY2goJGV2ZW50KVwiXG4gICAgKG9uU2VsZWN0KT1cIm9uU2VsZWN0KCRldmVudClcIlxuICAgIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgZHJvcGRvd25Nb2RlPVwiY3VycmVudFwiPlxuPC9wLWF1dG9Db21wbGV0ZT5cbiJdfQ==