@mediusinc/mng-commons 1.4.0 → 2.0.0-rc.1-b808fba6

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 (419) hide show
  1. package/esm2020/lib/api/models/builders/query-param.builder.mjs +58 -58
  2. package/esm2020/lib/api/models/filter-match-type.model.mjs +24 -24
  3. package/esm2020/lib/api/models/filter-param.model.mjs +32 -32
  4. package/esm2020/lib/api/models/index.mjs +8 -8
  5. package/esm2020/lib/api/models/mappers.mjs +12 -12
  6. package/esm2020/lib/api/models/query-mode.model.mjs +17 -17
  7. package/esm2020/lib/api/models/query-param.model.mjs +67 -67
  8. package/esm2020/lib/api/models/query-result.model.mjs +23 -23
  9. package/esm2020/lib/api/models/serialization.model.mjs +1 -1
  10. package/esm2020/lib/api/services/api.abstract.service.mjs +57 -57
  11. package/esm2020/lib/api/services/crud-api.abstract.service.mjs +74 -74
  12. package/esm2020/lib/api/services/get-all-api.abstract.service.mjs +29 -29
  13. package/esm2020/lib/api/services/index.mjs +3 -3
  14. package/esm2020/lib/api/utils/index.mjs +2 -2
  15. package/esm2020/lib/api/utils/medius-rest.util.mjs +213 -213
  16. package/esm2020/lib/api/utils/object-serializer.util.mjs +247 -247
  17. package/esm2020/lib/components/action/action.component.mjs +281 -275
  18. package/esm2020/lib/components/action/editor/action-editor.component.mjs +303 -303
  19. package/esm2020/lib/components/action/index.mjs +4 -4
  20. package/esm2020/lib/components/action/localization/data-language-dropdown.component.mjs +45 -45
  21. package/esm2020/lib/components/action/models/action-component.model.mjs +2 -2
  22. package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +2 -2
  23. package/esm2020/lib/components/action/models/action-execution.model.mjs +249 -249
  24. package/esm2020/lib/components/action/models/index.mjs +4 -4
  25. package/esm2020/lib/components/action/models/tableview-action-default-categories.model.mjs +10 -10
  26. package/esm2020/lib/components/action/route/action-route.component.mjs +131 -130
  27. package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +301 -300
  28. package/esm2020/lib/components/form/date-range/date-range.component.mjs +110 -109
  29. package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +209 -194
  30. package/esm2020/lib/components/form/editor/form-editor.component.mjs +246 -243
  31. package/esm2020/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.mjs +43 -39
  32. package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +51 -50
  33. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +46 -45
  34. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +28 -26
  35. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +180 -150
  36. package/esm2020/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +24 -24
  37. package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +191 -186
  38. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +198 -197
  39. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +158 -154
  40. package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +19 -17
  41. package/esm2020/lib/components/form/formly/fields/index.mjs +10 -10
  42. package/esm2020/lib/components/form/formly/formly.config.mjs +211 -211
  43. package/esm2020/lib/components/form/formly/index.mjs +1 -1
  44. package/esm2020/lib/components/form/formly/models/formly-config.model.mjs +1 -1
  45. package/esm2020/lib/components/form/formly/models/formly-field.model.mjs +2 -2
  46. package/esm2020/lib/components/form/formly/models/index.mjs +2 -2
  47. package/esm2020/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +16 -15
  48. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +84 -83
  49. package/esm2020/lib/components/form/formly/wrappers/index.mjs +2 -2
  50. package/esm2020/lib/components/form/index.mjs +4 -4
  51. package/esm2020/lib/components/form/models/field-action-context.model.mjs +2 -2
  52. package/esm2020/lib/components/form/models/form-editor.event.mjs +33 -33
  53. package/esm2020/lib/components/form/models/form-editor.interface.mjs +1 -1
  54. package/esm2020/lib/components/form/models/index.mjs +2 -2
  55. package/esm2020/lib/components/layout/breadcrumb.component.mjs +18 -17
  56. package/esm2020/lib/components/layout/footer.component.mjs +18 -17
  57. package/esm2020/lib/components/layout/index.mjs +9 -8
  58. package/esm2020/lib/components/layout/main-layout.component.mjs +56 -52
  59. package/esm2020/lib/components/layout/menu-item.component.mjs +292 -272
  60. package/esm2020/lib/components/layout/menu.component.mjs +32 -21
  61. package/esm2020/lib/components/layout/services/index.mjs +1 -1
  62. package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +194 -194
  63. package/esm2020/lib/components/layout/topbar-user.component.mjs +41 -0
  64. package/esm2020/lib/components/layout/topbar.component.mjs +64 -65
  65. package/esm2020/lib/components/layout/version.component.mjs +58 -58
  66. package/esm2020/lib/components/tableview/index.mjs +6 -6
  67. package/esm2020/lib/components/tableview/models/index.mjs +1 -1
  68. package/esm2020/lib/components/tableview/models/table.event.mjs +16 -16
  69. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +150 -147
  70. package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +52 -53
  71. package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +121 -120
  72. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +101 -84
  73. package/esm2020/lib/components/tableview/table/table.component.mjs +611 -595
  74. package/esm2020/lib/components/tableview/tableview.component.mjs +115 -113
  75. package/esm2020/lib/data-providers/base.data-provider.mjs +16 -16
  76. package/esm2020/lib/data-providers/editor.data-provider.mjs +36 -36
  77. package/esm2020/lib/data-providers/index.mjs +6 -6
  78. package/esm2020/lib/data-providers/lookup.data-provider.mjs +15 -15
  79. package/esm2020/lib/data-providers/table.data-provider.mjs +37 -37
  80. package/esm2020/lib/data-providers/tableview-crud.data-provider.mjs +23 -23
  81. package/esm2020/lib/data-providers/tableview.data-provider.mjs +44 -44
  82. package/esm2020/lib/descriptors/action/action-button.descriptor.mjs +60 -0
  83. package/esm2020/lib/descriptors/action/action-confirmation.descriptor.mjs +77 -77
  84. package/esm2020/lib/descriptors/action/action.descriptor.mjs +579 -0
  85. package/esm2020/lib/descriptors/action/index.mjs +4 -0
  86. package/esm2020/lib/descriptors/editor/editor.descriptor.mjs +291 -0
  87. package/esm2020/lib/descriptors/editor/field-validation.descriptor.mjs +25 -0
  88. package/esm2020/lib/descriptors/editor/field.descriptor.mjs +990 -0
  89. package/esm2020/lib/descriptors/editor/index.mjs +4 -0
  90. package/esm2020/lib/descriptors/filter/filter.descriptor.mjs +370 -0
  91. package/esm2020/lib/descriptors/filter/index.mjs +2 -0
  92. package/esm2020/lib/descriptors/index.mjs +2 -12
  93. package/esm2020/lib/descriptors/interfaces/field-config.interface.mjs +1 -1
  94. package/esm2020/lib/descriptors/interfaces/index.mjs +2 -2
  95. package/esm2020/lib/descriptors/interfaces/lookup-descriptor.interface.mjs +1 -1
  96. package/esm2020/lib/descriptors/model.descriptor.mjs +44 -44
  97. package/esm2020/lib/descriptors/table/column.descriptor.mjs +406 -0
  98. package/esm2020/lib/descriptors/table/index.mjs +3 -0
  99. package/esm2020/lib/descriptors/table/table.descriptor.mjs +497 -0
  100. package/esm2020/lib/descriptors/tableview/index.mjs +2 -0
  101. package/esm2020/lib/descriptors/tableview/tableview.descriptor.mjs +346 -0
  102. package/esm2020/lib/descriptors/types/action.type.mjs +25 -25
  103. package/esm2020/lib/descriptors/types/column.type.mjs +20 -20
  104. package/esm2020/lib/descriptors/types/editor.type.mjs +7 -7
  105. package/esm2020/lib/descriptors/types/field.type.mjs +55 -55
  106. package/esm2020/lib/descriptors/types/filter.type.mjs +30 -30
  107. package/esm2020/lib/descriptors/types/index.mjs +6 -6
  108. package/esm2020/lib/descriptors/types/table.type.mjs +26 -26
  109. package/esm2020/lib/directives/component.directive.mjs +62 -44
  110. package/esm2020/lib/directives/index.mjs +2 -2
  111. package/esm2020/lib/directives/template.directive.mjs +29 -28
  112. package/esm2020/lib/mng-commons.module.mjs +450 -485
  113. package/esm2020/lib/models/column-value.model.mjs +2 -2
  114. package/esm2020/lib/models/config.model.mjs +2 -2
  115. package/esm2020/lib/models/enum.model.mjs +1 -1
  116. package/esm2020/lib/models/error.model.mjs +1 -1
  117. package/esm2020/lib/models/index.mjs +9 -9
  118. package/esm2020/lib/models/menu.model.mjs +2 -2
  119. package/esm2020/lib/models/tableview-attr.model.mjs +1 -1
  120. package/esm2020/lib/models/user.model.mjs +1 -1
  121. package/esm2020/lib/models/version.model.mjs +1 -1
  122. package/esm2020/lib/models/view-container.model.mjs +2 -2
  123. package/esm2020/lib/pipes/boolean.pipe.mjs +28 -27
  124. package/esm2020/lib/pipes/class-map.pipe.mjs +23 -22
  125. package/esm2020/lib/pipes/enum.pipe.mjs +26 -25
  126. package/esm2020/lib/pipes/enumerate-async.pipe.mjs +39 -38
  127. package/esm2020/lib/pipes/enumerate.pipe.mjs +56 -55
  128. package/esm2020/lib/pipes/getter.pipe.mjs +21 -20
  129. package/esm2020/lib/pipes/i18n-property.pipe.mjs +19 -18
  130. package/esm2020/lib/pipes/index.mjs +11 -11
  131. package/esm2020/lib/pipes/json-path.pipe.mjs +80 -79
  132. package/esm2020/lib/pipes/locale-default-row-class.pipe.mjs +27 -26
  133. package/esm2020/lib/pipes/models/internal/enumrate-pipe-i18n.model.mjs +1 -1
  134. package/esm2020/lib/pipes/models/internal/index.mjs +1 -1
  135. package/esm2020/lib/pipes/parametrize.pipe.mjs +86 -85
  136. package/esm2020/lib/pipes/template.pipe.mjs +25 -24
  137. package/esm2020/lib/provide-commons.mjs +73 -0
  138. package/esm2020/lib/router/index.mjs +4 -3
  139. package/esm2020/lib/router/models/index.mjs +1 -1
  140. package/esm2020/lib/router/models/router.model.mjs +2 -2
  141. package/esm2020/lib/router/route-builder.mjs +293 -426
  142. package/esm2020/lib/router/routes-builder.mjs +67 -0
  143. package/esm2020/lib/router/tableview-route-builder.mjs +184 -187
  144. package/esm2020/lib/security/authorization.guard.mjs +29 -26
  145. package/esm2020/lib/security/authorization.service.mjs +50 -47
  146. package/esm2020/lib/security/authorization.util.mjs +15 -15
  147. package/esm2020/lib/security/index.mjs +3 -3
  148. package/esm2020/lib/security/model/authorization.type.mjs +7 -7
  149. package/esm2020/lib/security/model/index.mjs +3 -3
  150. package/esm2020/lib/security/model/permission-service.interface.mjs +1 -1
  151. package/esm2020/lib/security/model/permissions.model.mjs +86 -86
  152. package/esm2020/lib/services/action-executor.service.mjs +558 -555
  153. package/esm2020/lib/services/commons.service.mjs +464 -461
  154. package/esm2020/lib/services/configuration.service.mjs +149 -142
  155. package/esm2020/lib/services/error-mapper.service.mjs +13 -13
  156. package/esm2020/lib/services/index.mjs +6 -6
  157. package/esm2020/lib/services/internal/commons-init.provider.mjs +3 -3
  158. package/esm2020/lib/services/internal/commons-init.service.mjs +50 -44
  159. package/esm2020/lib/services/internal/index.mjs +2 -2
  160. package/esm2020/lib/services/navigation.service.mjs +51 -48
  161. package/esm2020/lib/services/providers/config-service.provider.mjs +31 -30
  162. package/esm2020/lib/services/providers/formly-config.provider.mjs +30 -30
  163. package/esm2020/lib/services/providers/index.mjs +2 -2
  164. package/esm2020/lib/services/router.service.mjs +97 -0
  165. package/esm2020/lib/services/tokens/browser-storage.token.mjs +5 -5
  166. package/esm2020/lib/services/tokens/commons-init.token.mjs +2 -2
  167. package/esm2020/lib/services/tokens/default-setting.token.mjs +2 -2
  168. package/esm2020/lib/services/tokens/index.mjs +4 -4
  169. package/esm2020/lib/services/tokens/module-config.token.mjs +2 -2
  170. package/esm2020/lib/services/version.service.mjs +42 -39
  171. package/esm2020/lib/services/view-container.component.service.mjs +55 -55
  172. package/esm2020/lib/styles/button-style.builder.mjs +164 -164
  173. package/esm2020/lib/styles/index.mjs +2 -2
  174. package/esm2020/lib/styles/models/index.mjs +2 -2
  175. package/esm2020/lib/styles/models/style-level.enum.mjs +11 -11
  176. package/esm2020/lib/styles/models/style-size.enum.mjs +8 -8
  177. package/esm2020/lib/styles/styles.util.mjs +42 -42
  178. package/esm2020/lib/types/index.mjs +2 -2
  179. package/esm2020/lib/types/type.decorator.mjs +21 -21
  180. package/esm2020/lib/types/type.model.mjs +1 -1
  181. package/esm2020/lib/utils/action-data-provider.util.mjs +145 -145
  182. package/esm2020/lib/utils/date.util.mjs +117 -117
  183. package/esm2020/lib/utils/editor-formly.util.mjs +288 -288
  184. package/esm2020/lib/utils/enum.util.mjs +81 -81
  185. package/esm2020/lib/utils/export.util.mjs +20 -20
  186. package/esm2020/lib/utils/i18n.util.mjs +233 -233
  187. package/esm2020/lib/utils/index.mjs +10 -10
  188. package/esm2020/lib/utils/model.util.mjs +68 -68
  189. package/esm2020/lib/utils/notification.util.mjs +51 -51
  190. package/esm2020/lib/utils/route.util.mjs +36 -24
  191. package/esm2020/lib/utils/string.util.mjs +26 -26
  192. package/esm2020/lib/utils/tableview.util.mjs +160 -160
  193. package/esm2020/lib/utils/type.util.mjs +92 -92
  194. package/esm2020/mediusinc-mng-commons.mjs +4 -4
  195. package/esm2020/public-api.mjs +61 -55
  196. package/fesm2015/mediusinc-mng-commons.mjs +14198 -13932
  197. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  198. package/fesm2020/mediusinc-mng-commons.mjs +14024 -13769
  199. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  200. package/index.d.ts +5 -5
  201. package/lib/api/models/builders/query-param.builder.d.ts +13 -13
  202. package/lib/api/models/filter-match-type.model.d.ts +23 -23
  203. package/lib/api/models/filter-param.model.d.ts +23 -23
  204. package/lib/api/models/index.d.ts +8 -8
  205. package/lib/api/models/mappers.d.ts +6 -6
  206. package/lib/api/models/query-mode.model.d.ts +16 -16
  207. package/lib/api/models/query-param.model.d.ts +31 -31
  208. package/lib/api/models/query-result.model.d.ts +24 -24
  209. package/lib/api/models/serialization.model.d.ts +8 -8
  210. package/lib/api/services/api.abstract.service.d.ts +24 -24
  211. package/lib/api/services/crud-api.abstract.service.d.ts +22 -22
  212. package/lib/api/services/get-all-api.abstract.service.d.ts +14 -14
  213. package/lib/api/services/index.d.ts +3 -3
  214. package/lib/api/utils/index.d.ts +2 -2
  215. package/lib/api/utils/medius-rest.util.d.ts +16 -16
  216. package/lib/api/utils/object-serializer.util.d.ts +33 -33
  217. package/lib/components/action/action.component.d.ts +79 -79
  218. package/lib/components/action/editor/action-editor.component.d.ts +69 -69
  219. package/lib/components/action/index.d.ts +4 -4
  220. package/lib/components/action/localization/data-language-dropdown.component.d.ts +25 -25
  221. package/lib/components/action/models/action-component.model.d.ts +15 -15
  222. package/lib/components/action/models/action-confirmation-service.model.d.ts +6 -6
  223. package/lib/components/action/models/action-execution.model.d.ts +135 -135
  224. package/lib/components/action/models/index.d.ts +4 -4
  225. package/lib/components/action/models/tableview-action-default-categories.model.d.ts +10 -10
  226. package/lib/components/action/route/action-route.component.d.ts +31 -31
  227. package/lib/components/form/autocomplete/autocomplete.component.d.ts +61 -61
  228. package/lib/components/form/date-range/date-range.component.d.ts +28 -28
  229. package/lib/components/form/dropdown/dropdown.component.d.ts +59 -52
  230. package/lib/components/form/editor/form-editor.component.d.ts +52 -52
  231. package/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.d.ts +13 -13
  232. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +16 -16
  233. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +15 -15
  234. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +14 -14
  235. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +29 -29
  236. package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +11 -11
  237. package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +46 -46
  238. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +25 -24
  239. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +37 -37
  240. package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +7 -7
  241. package/lib/components/form/formly/fields/index.d.ts +10 -10
  242. package/lib/components/form/formly/formly.config.d.ts +14 -14
  243. package/lib/components/form/formly/index.d.ts +1 -1
  244. package/lib/components/form/formly/models/formly-config.model.d.ts +11 -11
  245. package/lib/components/form/formly/models/formly-field.model.d.ts +16 -16
  246. package/lib/components/form/formly/models/index.d.ts +2 -2
  247. package/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +6 -6
  248. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +11 -11
  249. package/lib/components/form/formly/wrappers/index.d.ts +2 -2
  250. package/lib/components/form/index.d.ts +4 -4
  251. package/lib/components/form/models/field-action-context.model.d.ts +17 -17
  252. package/lib/components/form/models/form-editor.event.d.ts +37 -37
  253. package/lib/components/form/models/form-editor.interface.d.ts +10 -10
  254. package/lib/components/form/models/index.d.ts +2 -2
  255. package/lib/components/layout/breadcrumb.component.d.ts +8 -8
  256. package/lib/components/layout/footer.component.d.ts +9 -9
  257. package/lib/components/layout/index.d.ts +8 -7
  258. package/lib/components/layout/main-layout.component.d.ts +22 -20
  259. package/lib/components/layout/menu-item.component.d.ts +56 -52
  260. package/lib/components/layout/menu.component.d.ts +16 -10
  261. package/lib/components/layout/services/index.d.ts +1 -1
  262. package/lib/components/layout/services/main-layout.component.service.d.ts +65 -65
  263. package/lib/components/layout/topbar-user.component.d.ts +21 -0
  264. package/lib/components/layout/topbar.component.d.ts +26 -28
  265. package/lib/components/layout/version.component.d.ts +19 -19
  266. package/lib/components/tableview/index.d.ts +6 -6
  267. package/lib/components/tableview/models/index.d.ts +1 -1
  268. package/lib/components/tableview/models/table.event.d.ts +17 -17
  269. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +36 -33
  270. package/lib/components/tableview/route/tableview-route.component.d.ts +19 -18
  271. package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +38 -38
  272. package/lib/components/tableview/table/column-value/column-value.component.d.ts +35 -35
  273. package/lib/components/tableview/table/table.component.d.ts +117 -115
  274. package/lib/components/tableview/tableview.component.d.ts +49 -48
  275. package/lib/data-providers/base.data-provider.d.ts +14 -14
  276. package/lib/data-providers/editor.data-provider.d.ts +25 -25
  277. package/lib/data-providers/index.d.ts +6 -6
  278. package/lib/data-providers/lookup.data-provider.d.ts +14 -14
  279. package/lib/data-providers/table.data-provider.d.ts +27 -27
  280. package/lib/data-providers/tableview-crud.data-provider.d.ts +8 -8
  281. package/lib/data-providers/tableview.data-provider.d.ts +33 -33
  282. package/lib/descriptors/{action-button.descriptor.d.ts → action/action-button.descriptor.d.ts} +22 -22
  283. package/lib/descriptors/action/action-confirmation.descriptor.d.ts +36 -36
  284. package/lib/descriptors/{action.descriptor.d.ts → action/action.descriptor.d.ts} +225 -223
  285. package/lib/descriptors/action/index.d.ts +3 -0
  286. package/lib/descriptors/{editor.descriptor.d.ts → editor/editor.descriptor.d.ts} +119 -116
  287. package/lib/descriptors/{field-validation.descriptor.d.ts → editor/field-validation.descriptor.d.ts} +19 -19
  288. package/lib/descriptors/{field.descriptor.d.ts → editor/field.descriptor.d.ts} +349 -345
  289. package/lib/descriptors/editor/index.d.ts +3 -0
  290. package/lib/descriptors/{filter.descriptor.d.ts → filter/filter.descriptor.d.ts} +120 -118
  291. package/lib/descriptors/filter/index.d.ts +1 -0
  292. package/lib/descriptors/index.d.ts +1 -11
  293. package/lib/descriptors/interfaces/field-config.interface.d.ts +9 -9
  294. package/lib/descriptors/interfaces/index.d.ts +2 -2
  295. package/lib/descriptors/interfaces/lookup-descriptor.interface.d.ts +17 -17
  296. package/lib/descriptors/model.descriptor.d.ts +18 -18
  297. package/lib/descriptors/{column.descriptor.d.ts → table/column.descriptor.d.ts} +130 -130
  298. package/lib/descriptors/table/index.d.ts +2 -0
  299. package/lib/descriptors/{table.descriptor.d.ts → table/table.descriptor.d.ts} +193 -193
  300. package/lib/descriptors/tableview/index.d.ts +1 -0
  301. package/lib/descriptors/{tableview.descriptor.d.ts → tableview/tableview.descriptor.d.ts} +131 -129
  302. package/lib/descriptors/types/action.type.d.ts +21 -21
  303. package/lib/descriptors/types/column.type.d.ts +18 -18
  304. package/lib/descriptors/types/editor.type.d.ts +6 -6
  305. package/lib/descriptors/types/field.type.d.ts +47 -47
  306. package/lib/descriptors/types/filter.type.d.ts +27 -27
  307. package/lib/descriptors/types/index.d.ts +6 -6
  308. package/lib/descriptors/types/table.type.d.ts +22 -22
  309. package/lib/directives/component.directive.d.ts +20 -16
  310. package/lib/directives/index.d.ts +2 -2
  311. package/lib/directives/template.directive.d.ts +13 -13
  312. package/lib/mng-commons.module.d.ts +100 -99
  313. package/lib/models/column-value.model.d.ts +4 -4
  314. package/lib/models/config.model.d.ts +51 -40
  315. package/lib/models/enum.model.d.ts +6 -6
  316. package/lib/models/error.model.d.ts +14 -14
  317. package/lib/models/index.d.ts +9 -9
  318. package/lib/models/menu.model.d.ts +30 -30
  319. package/lib/models/tableview-attr.model.d.ts +10 -10
  320. package/lib/models/user.model.d.ts +8 -8
  321. package/lib/models/version.model.d.ts +18 -18
  322. package/lib/models/view-container.model.d.ts +43 -43
  323. package/lib/pipes/boolean.pipe.d.ts +7 -7
  324. package/lib/pipes/class-map.pipe.d.ts +7 -7
  325. package/lib/pipes/enum.pipe.d.ts +8 -8
  326. package/lib/pipes/enumerate-async.pipe.d.ts +14 -14
  327. package/lib/pipes/enumerate.pipe.d.ts +21 -21
  328. package/lib/pipes/getter.pipe.d.ts +7 -7
  329. package/lib/pipes/i18n-property.pipe.d.ts +8 -8
  330. package/lib/pipes/index.d.ts +11 -11
  331. package/lib/pipes/json-path.pipe.d.ts +13 -13
  332. package/lib/pipes/locale-default-row-class.pipe.d.ts +10 -10
  333. package/lib/pipes/models/internal/enumrate-pipe-i18n.model.d.ts +5 -5
  334. package/lib/pipes/models/internal/index.d.ts +1 -1
  335. package/lib/pipes/parametrize.pipe.d.ts +13 -13
  336. package/lib/pipes/template.pipe.d.ts +10 -10
  337. package/lib/provide-commons.d.ts +3 -0
  338. package/lib/router/index.d.ts +3 -2
  339. package/lib/router/models/index.d.ts +1 -1
  340. package/lib/router/models/router.model.d.ts +31 -33
  341. package/lib/router/route-builder.d.ts +60 -98
  342. package/lib/router/routes-builder.d.ts +28 -0
  343. package/lib/router/tableview-route-builder.d.ts +44 -37
  344. package/lib/security/authorization.guard.d.ts +11 -11
  345. package/lib/security/authorization.service.d.ts +19 -19
  346. package/lib/security/authorization.util.d.ts +5 -5
  347. package/lib/security/index.d.ts +3 -3
  348. package/lib/security/model/authorization.type.d.ts +6 -6
  349. package/lib/security/model/index.d.ts +3 -3
  350. package/lib/security/model/permission-service.interface.d.ts +6 -6
  351. package/lib/security/model/permissions.model.d.ts +37 -37
  352. package/lib/services/action-executor.service.d.ts +150 -149
  353. package/lib/services/commons.service.d.ts +93 -93
  354. package/lib/services/configuration.service.d.ts +60 -57
  355. package/lib/services/error-mapper.service.d.ts +7 -7
  356. package/lib/services/index.d.ts +6 -6
  357. package/lib/services/internal/commons-init.provider.d.ts +3 -3
  358. package/lib/services/internal/commons-init.service.d.ts +18 -16
  359. package/lib/services/internal/index.d.ts +2 -2
  360. package/lib/services/navigation.service.d.ts +14 -14
  361. package/lib/services/providers/config-service.provider.d.ts +6 -6
  362. package/lib/services/providers/formly-config.provider.d.ts +4 -4
  363. package/lib/services/providers/index.d.ts +2 -2
  364. package/lib/services/router.service.d.ts +22 -0
  365. package/lib/services/tokens/browser-storage.token.d.ts +2 -2
  366. package/lib/services/tokens/commons-init.token.d.ts +3 -3
  367. package/lib/services/tokens/default-setting.token.d.ts +2 -2
  368. package/lib/services/tokens/index.d.ts +4 -4
  369. package/lib/services/tokens/module-config.token.d.ts +3 -3
  370. package/lib/services/version.service.d.ts +13 -13
  371. package/lib/services/view-container.component.service.d.ts +31 -31
  372. package/lib/styles/button-style.builder.d.ts +67 -67
  373. package/lib/styles/index.d.ts +2 -2
  374. package/lib/styles/models/index.d.ts +2 -2
  375. package/lib/styles/models/style-level.enum.d.ts +10 -10
  376. package/lib/styles/models/style-size.enum.d.ts +7 -7
  377. package/lib/styles/styles.util.d.ts +15 -14
  378. package/lib/types/index.d.ts +2 -2
  379. package/lib/types/type.decorator.d.ts +4 -4
  380. package/lib/types/type.model.d.ts +23 -23
  381. package/lib/utils/action-data-provider.util.d.ts +20 -20
  382. package/lib/utils/date.util.d.ts +7 -7
  383. package/lib/utils/editor-formly.util.d.ts +12 -12
  384. package/lib/utils/enum.util.d.ts +50 -50
  385. package/lib/utils/export.util.d.ts +5 -5
  386. package/lib/utils/i18n.util.d.ts +57 -56
  387. package/lib/utils/index.d.ts +10 -10
  388. package/lib/utils/model.util.d.ts +8 -8
  389. package/lib/utils/notification.util.d.ts +13 -12
  390. package/lib/utils/route.util.d.ts +59 -4
  391. package/lib/utils/string.util.d.ts +4 -4
  392. package/lib/utils/tableview.util.d.ts +40 -40
  393. package/lib/utils/type.util.d.ts +57 -57
  394. package/package.json +6 -6
  395. package/public-api.d.ts +40 -34
  396. package/scss/common/layout/_breadcrumb.scss +12 -2
  397. package/scss/common/layout/_exception.scss +1 -1
  398. package/scss/common/layout/_inlinemenu.scss +13 -0
  399. package/scss/common/layout/_login.scss +1 -0
  400. package/scss/common/layout/_rightmenu.scss +5 -0
  401. package/scss/common/layout/menu/_menu_common.scss +1 -1
  402. package/scss/common/theme/designer/_mixins.scss +29 -0
  403. package/scss/common/theme/extensions/_datatable.scss +2 -2
  404. package/scss/common/variables/layout/_layout_dark.scss +0 -1
  405. package/scss/common/variables/layout/_layout_light.scss +0 -1
  406. package/scss/common/variables/theme/_theme_dark.scss +72 -46
  407. package/scss/common/variables/theme/_theme_light.scss +70 -33
  408. package/scss/theme/default/_mng-variables-theme-light.scss +2 -0
  409. package/version-info.json +7 -7
  410. package/esm2020/lib/descriptors/action-button.descriptor.mjs +0 -60
  411. package/esm2020/lib/descriptors/action.descriptor.mjs +0 -577
  412. package/esm2020/lib/descriptors/column.descriptor.mjs +0 -405
  413. package/esm2020/lib/descriptors/editor.descriptor.mjs +0 -290
  414. package/esm2020/lib/descriptors/field-validation.descriptor.mjs +0 -25
  415. package/esm2020/lib/descriptors/field.descriptor.mjs +0 -987
  416. package/esm2020/lib/descriptors/filter.descriptor.mjs +0 -368
  417. package/esm2020/lib/descriptors/table.descriptor.mjs +0 -497
  418. package/esm2020/lib/descriptors/tableview.descriptor.mjs +0 -344
  419. package/mediusinc-mng-commons-1.4.0.tgz +0 -0
@@ -1,300 +1,301 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Optional, 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 "../formly/wrappers";
10
- import * as i3 from "@angular/forms";
11
- import * as i4 from "primeng/autocomplete";
12
- import * as i5 from "@angular/common";
13
- export const MNG_AUTOCOMPLETE_VALUE_ACCESSOR = {
14
- provide: NG_VALUE_ACCESSOR,
15
- useExisting: forwardRef(() => MngAutocompleteComponent),
16
- multi: true
17
- };
18
- export class MngAutocompleteComponent {
19
- constructor(injector, translate, formlyWrapper) {
20
- this.injector = injector;
21
- this.translate = translate;
22
- this.formlyWrapper = formlyWrapper;
23
- this.itemsLabelTranslate = false;
24
- this.inlineSearch = false;
25
- this.openOnFocus = false;
26
- this.multiselect = false;
27
- this.className = null;
28
- this.dropdownClassName = null;
29
- this.showClear = false;
30
- this.autoClear = false;
31
- this.selectFirst = false; //on every input field change return first given value (or null)
32
- this.valueChangeEventEmitter = new EventEmitter();
33
- this.isInited = false;
34
- this.suggestionsSubject = new BehaviorSubject([]);
35
- this.searchSubscription = null;
36
- this.dataProviderService = null;
37
- // eslint-disable-next-line @typescript-eslint/no-empty-function
38
- this.onChangeFn = () => { };
39
- // eslint-disable-next-line @typescript-eslint/no-empty-function
40
- this.onTouchedFn = () => { };
41
- this.autocompleteFormControl = new FormControl();
42
- this.suggestions$ = this.suggestionsSubject.asObservable();
43
- }
44
- ngOnInit() {
45
- this.setItemsAndDataProvider();
46
- if (this.selectFirst) {
47
- this.suggestionSubscription = this.suggestions$.subscribe(e => this.valueChangeEventEmitter.emit(e.length === 0 ? null : e[0]));
48
- }
49
- }
50
- ngOnDestroy() {
51
- this.searchSubscription?.unsubscribe();
52
- this.suggestionSubscription?.unsubscribe();
53
- }
54
- onSearch(event) {
55
- this.searchSubscription?.unsubscribe();
56
- if (this.dataProvider) {
57
- const queryParamBuilder = MediusQueryParamBuilder.create();
58
- if (this.itemsLabelProperty) {
59
- queryParamBuilder.withSort(this.itemsLabelProperty);
60
- }
61
- if (event.query && event.query.length > 0 && this.itemsLabelProperty) {
62
- queryParamBuilder.withFilter(this.itemsLabelProperty, event.query, undefined, MediusFilterMatchType.StartsWith);
63
- }
64
- this.searchSubscription = this.getLookup(queryParamBuilder.build(), event.query).subscribe({
65
- next: items => {
66
- this.setSuggestionsFromItems(items, event.query);
67
- }
68
- });
69
- }
70
- }
71
- onSelect(value) {
72
- let outputValue = value;
73
- if (this.itemsValueProperty && typeof value === 'object') {
74
- outputValue = value[this.itemsValueProperty];
75
- }
76
- this.onChangeFn(outputValue);
77
- this.valueChangeEventEmitter.next(outputValue);
78
- }
79
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
80
- onFocus(event) {
81
- if (this.openOnFocus) {
82
- this.primeAutocomplete?.show();
83
- }
84
- }
85
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
86
- onBlur(event) {
87
- this.formlyWrapper?.formControl?.markAsTouched();
88
- }
89
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
90
- onClear(event) {
91
- this.onChangeFn();
92
- this.valueChangeEventEmitter.next(null);
93
- }
94
- registerOnChange(fn) {
95
- this.onChangeFn = fn;
96
- }
97
- registerOnTouched(fn) {
98
- this.onTouchedFn = fn;
99
- }
100
- setDisabledState(isDisabled) {
101
- if (isDisabled) {
102
- this.autocompleteFormControl.disable();
103
- }
104
- else {
105
- this.autocompleteFormControl.enable();
106
- }
107
- }
108
- writeValue(value) {
109
- this.setItemsAndDataProvider();
110
- if (this.itemsValuePropertyInit && value != null && typeof value !== 'object') {
111
- const defaultItem = { [this.itemsValuePropertyInit]: value };
112
- if (this.itemsLabelProperty) {
113
- defaultItem[this.itemsLabelProperty] = value;
114
- }
115
- const matchedItem = this.suggestionsSubject.value.find(i => i[this.itemsValuePropertyInit] === value);
116
- if (matchedItem) {
117
- this.autocompleteFormControl.setValue(matchedItem, { emitEvent: false });
118
- }
119
- else if (this.dataProvider) {
120
- const queryParamBuilder = MediusQueryParamBuilder.create();
121
- queryParamBuilder.withFilter(this.itemsValuePropertyInit, value, undefined, MediusFilterMatchType.Equals);
122
- this.getLookup(queryParamBuilder.build())
123
- .pipe(first())
124
- .subscribe({
125
- next: items => {
126
- let isMatch = false;
127
- if (items.length === 1) {
128
- this.autocompleteFormControl.setValue(items[0]);
129
- isMatch = true;
130
- }
131
- else if (items.length > 1) {
132
- // for lookup data providers not using query params
133
- const matchedItem = items.find(i => i[this.itemsValuePropertyInit] === value);
134
- if (matchedItem) {
135
- this.setAutocompleteValueFromWrite(matchedItem);
136
- isMatch = true;
137
- }
138
- }
139
- if (!isMatch) {
140
- this.setAutocompleteValueFromWrite(defaultItem);
141
- }
142
- },
143
- error: () => {
144
- this.setAutocompleteValueFromWrite(defaultItem);
145
- }
146
- });
147
- }
148
- else {
149
- this.setAutocompleteValueFromWrite(defaultItem);
150
- }
151
- }
152
- else {
153
- this.setAutocompleteValueFromWrite(value);
154
- }
155
- }
156
- setItemsAndDataProvider() {
157
- if (this.isInited) {
158
- return;
159
- }
160
- this.itemsLabelProperty = this.itemsLabelPropertyInit;
161
- this.itemsValueProperty = this.itemsValuePropertyInit;
162
- if (this.dataProvider) {
163
- this.dataProviderService = this.dataProvider.serviceType ? this.injector.get(this.dataProvider.serviceType) : null;
164
- if (this.itemsLabelTranslate) {
165
- // setup translation properties
166
- if (this.itemsLabelPropertyInit) {
167
- this.itemsLabelProperty = `${this.itemsLabelPropertyInit}_i18n`;
168
- }
169
- else if (!this.itemsLabelProperty && !this.itemsValuePropertyInit) {
170
- this.itemsLabelProperty = 'title_i18n';
171
- this.itemsValueProperty = 'value';
172
- }
173
- else {
174
- throw new Error(`Invalid use with value (${this.itemsLabelPropertyInit}) and label (${this.itemsLabelPropertyInit}) property setup.`);
175
- }
176
- }
177
- }
178
- else {
179
- console.warn(`Data provider should be provided for MngAutocompleteComponent.`);
180
- }
181
- if (this.openOnFocus) {
182
- this.onSearch({ query: '' });
183
- }
184
- this.isInited = true;
185
- }
186
- setAutocompleteValueFromWrite(value) {
187
- if (value && this.itemsLabelTranslate) {
188
- value = this.i18nPopulateItems([value], this.translate.instant(this.i18nGetItemsKeys([value])))[0];
189
- }
190
- this.autocompleteFormControl.setValue(value, { emitEvent: false });
191
- }
192
- getLookup(qp, query) {
193
- if (this.dataProvider) {
194
- return this.dataProvider.lookup(qp, this.dataProviderService, query).pipe(switchMap(items => {
195
- if (this.itemsLabelTranslate) {
196
- const translatedItems = this.i18nGetItemsKeys(items);
197
- if (translatedItems.length === 0) {
198
- return of([]);
199
- }
200
- return this.translate.stream(translatedItems).pipe(map(translations => this.i18nPopulateItems(items, translations)));
201
- }
202
- else {
203
- return of(items);
204
- }
205
- }));
206
- }
207
- else {
208
- return of([]);
209
- }
210
- }
211
- i18nGetItemsKeys(items) {
212
- return items.map(item => (typeof item === 'object' && this.itemsLabelPropertyInit ? item[this.itemsLabelPropertyInit] : item));
213
- }
214
- i18nPopulateItems(items, i18nMap) {
215
- return items.map(item => {
216
- if (typeof item === 'object' && this.itemsLabelPropertyInit) {
217
- const label = item[this.itemsLabelPropertyInit];
218
- const translation = i18nMap[label];
219
- if (translation) {
220
- return { ...item, [this.itemsLabelProperty]: translation };
221
- }
222
- return { ...item };
223
- }
224
- else {
225
- const translation = i18nMap[item];
226
- return {
227
- [this.itemsLabelProperty]: translation ?? item,
228
- [this.itemsValueProperty]: item
229
- };
230
- }
231
- });
232
- }
233
- setSuggestionsFromItems(items, query) {
234
- if (this.inlineSearch) {
235
- const queryLowerCase = query?.toLowerCase() ?? '';
236
- const filteredItems = items.filter(i => {
237
- let itemLabel = i;
238
- if (this.itemsLabelProperty && typeof i === 'object') {
239
- itemLabel = i[this.itemsLabelProperty];
240
- }
241
- if (itemLabel == null) {
242
- return queryLowerCase == null || !queryLowerCase.length;
243
- }
244
- if (typeof itemLabel !== 'string') {
245
- itemLabel = itemLabel.toString();
246
- }
247
- return itemLabel.toLowerCase().startsWith(queryLowerCase);
248
- });
249
- this.suggestionsSubject.next([...filteredItems]);
250
- }
251
- else {
252
- this.suggestionsSubject.next([...items]);
253
- }
254
- }
255
- }
256
- MngAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngAutocompleteComponent, deps: [{ token: i0.Injector }, { token: i1.TranslateService }, { token: i2.MngFormlyFieldWrapperComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component });
257
- MngAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", 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", showClear: "showClear", autoClear: "autoClear", selectFirst: "selectFirst" }, 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 [showClear]=\"showClear\"\n [forceSelection]=\"autoClear\"\n (completeMethod)=\"onSearch($event)\"\n (onSelect)=\"onSelect($event)\"\n (onBlur)=\"onBlur($event)\"\n (onClear)=\"onClear($event)\"\n appendTo=\"body\"\n dropdownMode=\"current\">\n</p-autoComplete>\n", dependencies: [{ kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "itemSize", "suggestions"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
258
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngAutocompleteComponent, decorators: [{
259
- type: Component,
260
- 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 [showClear]=\"showClear\"\n [forceSelection]=\"autoClear\"\n (completeMethod)=\"onSearch($event)\"\n (onSelect)=\"onSelect($event)\"\n (onBlur)=\"onBlur($event)\"\n (onClear)=\"onClear($event)\"\n appendTo=\"body\"\n dropdownMode=\"current\">\n</p-autoComplete>\n" }]
261
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.TranslateService }, { type: i2.MngFormlyFieldWrapperComponent, decorators: [{
262
- type: Optional
263
- }] }]; }, propDecorators: { dataProvider: [{
264
- type: Input
265
- }], dataKeyProperty: [{
266
- type: Input
267
- }], itemsValuePropertyInit: [{
268
- type: Input,
269
- args: ['itemsValueProperty']
270
- }], itemsLabelPropertyInit: [{
271
- type: Input,
272
- args: ['itemsLabelProperty']
273
- }], itemsLabelTranslate: [{
274
- type: Input
275
- }], inlineSearch: [{
276
- type: Input
277
- }], openOnFocus: [{
278
- type: Input
279
- }], multiselect: [{
280
- type: Input
281
- }], placeholder: [{
282
- type: Input
283
- }], className: [{
284
- type: Input
285
- }], dropdownClassName: [{
286
- type: Input
287
- }], showClear: [{
288
- type: Input
289
- }], autoClear: [{
290
- type: Input
291
- }], selectFirst: [{
292
- type: Input
293
- }], valueChangeEventEmitter: [{
294
- type: Output,
295
- args: ['valueChange']
296
- }], primeAutocomplete: [{
297
- type: ViewChild,
298
- args: [AutoComplete]
299
- }] } });
300
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBOEIsS0FBSyxFQUFxQixRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUssT0FBTyxFQUF1QixXQUFXLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdwRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGVBQWUsRUFBNEIsRUFBRSxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUMsS0FBSyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLE9BQU8sRUFBQyxxQkFBcUIsRUFBb0IsdUJBQXVCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7OztBQUlyRyxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBcUI7SUFDN0QsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHdCQUF3QixDQUFDO0lBQ3ZELEtBQUssRUFBRSxJQUFJO0NBQ2QsQ0FBQztBQVFGLE1BQU0sT0FBTyx3QkFBd0I7SUFtQ2pDLFlBQW9CLFFBQWtCLEVBQVUsU0FBMkIsRUFBc0IsYUFBNkM7UUFBMUgsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQXNCLGtCQUFhLEdBQWIsYUFBYSxDQUFnQztRQTlCOUgsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQzVCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXBCLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBQ2hDLHNCQUFpQixHQUFrQixJQUFJLENBQUM7UUFDeEMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGdCQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsZ0VBQWdFO1FBRXZFLDRCQUF1QixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFJbkUsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQix1QkFBa0IsR0FBZ0MsSUFBSSxlQUFlLENBQWEsRUFBRSxDQUFDLENBQUM7UUFDdEYsdUJBQWtCLEdBQXdCLElBQUksQ0FBQztRQUMvQyx3QkFBbUIsR0FBUSxJQUFJLENBQUM7UUFDeEMsZ0VBQWdFO1FBQ3hELGVBQVUsR0FBUSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDbkMsZ0VBQWdFO1FBQ3hELGdCQUFXLEdBQVEsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBSTdCLDRCQUF1QixHQUFnQixJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ3pELGlCQUFZLEdBQTJCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUc0RCxDQUFDO0lBRWxKLFFBQVE7UUFDSixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25JO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBVTtRQUNmLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUV2QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsTUFBTSxpQkFBaUIsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDekIsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2FBQ3ZEO1lBQ0QsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ2xFLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDbkg7WUFDRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUN2RixJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ1YsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JELENBQUM7YUFDSixDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBVTtRQUNmLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDdEQsV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUNoRDtRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsNkRBQTZEO0lBQzdELE9BQU8sQ0FBQyxLQUFZO1FBQ2hCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDbEM7SUFDTCxDQUFDO0lBRUQsNkRBQTZEO0lBQzdELE1BQU0sQ0FBQyxLQUFVO1FBQ2IsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELDZEQUE2RDtJQUM3RCxPQUFPLENBQUMsS0FBWTtRQUNoQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBTztRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBbUI7UUFDaEMsSUFBSSxVQUFVLEVBQUU7WUFDWixJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDMUM7YUFBTTtZQUNILElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUN6QztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVTtRQUNqQixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUUvQixJQUFJLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUMzRSxNQUFNLFdBQVcsR0FBUSxFQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsS0FBSyxFQUFDLENBQUM7WUFDaEUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ3pCLFdBQVcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7YUFDaEQ7WUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXVCLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztZQUN2RyxJQUFJLFdBQVcsRUFBRTtnQkFDYixJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO2FBQzFFO2lCQUFNLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDMUIsTUFBTSxpQkFBaUIsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDM0QsaUJBQWlCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUUxRyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO3FCQUNwQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7cUJBQ2IsU0FBUyxDQUFDO29CQUNQLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRTt3QkFDVixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7d0JBQ3BCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7NEJBQ3BCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ2hELE9BQU8sR0FBRyxJQUFJLENBQUM7eUJBQ2xCOzZCQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQ3pCLG1EQUFtRDs0QkFDbkQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXVCLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQzs0QkFDL0UsSUFBSSxXQUFXLEVBQUU7Z0NBQ2IsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFdBQVcsQ0FBQyxDQUFDO2dDQUNoRCxPQUFPLEdBQUcsSUFBSSxDQUFDOzZCQUNsQjt5QkFDSjt3QkFFRCxJQUFJLENBQUMsT0FBTyxFQUFFOzRCQUNWLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxXQUFXLENBQUMsQ0FBQzt5QkFDbkQ7b0JBQ0wsQ0FBQztvQkFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO3dCQUNSLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDcEQsQ0FBQztpQkFDSixDQUFDLENBQUM7YUFDVjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsNkJBQTZCLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDbkQ7U0FDSjthQUFNO1lBQ0gsSUFBSSxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzdDO0lBQ0wsQ0FBQztJQUVPLHVCQUF1QjtRQUMzQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1FBQ3RELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFFdEQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBRXhILElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUMxQiwrQkFBK0I7Z0JBQy9CLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO29CQUM3QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLE9BQU8sQ0FBQztpQkFDbkU7cUJBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtvQkFDakUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFlBQVksQ0FBQztvQkFDdkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQztpQkFDckM7cUJBQU07b0JBQ0gsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsSUFBSSxDQUFDLHNCQUFzQixnQkFBZ0IsSUFBSSxDQUFDLHNCQUFzQixtQkFBbUIsQ0FBQyxDQUFDO2lCQUN6STthQUNKO1NBQ0o7YUFBTTtZQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztTQUNsRjtRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUMsS0FBSyxFQUFFLEVBQUUsRUFBQyxDQUFDLENBQUM7U0FDOUI7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRU8sNkJBQTZCLENBQUMsS0FBVTtRQUM1QyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDbkMsS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RHO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRU8sU0FBUyxDQUFDLEVBQW9CLEVBQUUsS0FBYztRQUNsRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDckUsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNkLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO29CQUMxQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3JELElBQUksZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7d0JBQzlCLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUNqQjtvQkFFRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDeEg7cUJBQU07b0JBQ0gsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3BCO1lBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztTQUNMO2FBQU07WUFDSCxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNqQjtJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFpQjtRQUN0QyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNDLENBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFXLENBQUMsQ0FBQztJQUN6SyxDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBaUIsRUFBRSxPQUFZO1FBQ3JELE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwQixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7Z0JBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNDLENBQVcsQ0FBQztnQkFDMUUsTUFBTSxXQUFXLEdBQXVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxXQUFXLEVBQUU7b0JBQ2IsT0FBTyxFQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFtQixDQUFDLEVBQUUsV0FBVyxFQUFDLENBQUM7aUJBQzdEO2dCQUNELE9BQU8sRUFBQyxHQUFHLElBQUksRUFBQyxDQUFDO2FBQ3BCO2lCQUFNO2dCQUNILE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEMsT0FBTztvQkFDSCxDQUFDLElBQUksQ0FBQyxrQkFBbUIsQ0FBQyxFQUFFLFdBQVcsSUFBSSxJQUFJO29CQUMvQyxDQUFDLElBQUksQ0FBQyxrQkFBbUIsQ0FBQyxFQUFFLElBQUk7aUJBQ25DLENBQUM7YUFDTDtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLHVCQUF1QixDQUFDLEtBQWlCLEVBQUUsS0FBYztRQUM3RCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsTUFBTSxjQUFjLEdBQUcsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNsRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNuQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBQ2xCLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtvQkFDbEQsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztpQkFDMUM7Z0JBQ0QsSUFBSSxTQUFTLElBQUksSUFBSSxFQUFFO29CQUNuQixPQUFPLGNBQWMsSUFBSSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO2lCQUMzRDtnQkFDRCxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRTtvQkFDL0IsU0FBUyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztpQkFDcEM7Z0JBQ0QsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzlELENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUNwRDthQUFNO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUM1QztJQUNMLENBQUM7O3FIQXhRUSx3QkFBd0I7eUdBQXhCLHdCQUF3Qiw0bUJBSHRCLENBQUMsK0JBQStCLENBQUMsNkVBcUJqQyxZQUFZLGdEQzFDM0IsaTFCQXVCQTsyRkRDYSx3QkFBd0I7a0JBTnBDLFNBQVM7K0JBQ0ksa0JBQWtCLGFBRWpCLENBQUMsK0JBQStCLENBQUMsbUJBQzNCLHVCQUF1QixDQUFDLE1BQU07OzBCQXFDK0IsUUFBUTs0Q0FsQ3RFLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1UsZUFBZTtzQkFBOUIsS0FBSztnQkFDOEIsc0JBQXNCO3NCQUF6RCxLQUFLO3VCQUFDLG9CQUFvQjtnQkFDUyxzQkFBc0I7c0JBQXpELEtBQUs7dUJBQUMsb0JBQW9CO2dCQUNYLG1CQUFtQjtzQkFBbEMsS0FBSztnQkFDVSxZQUFZO3NCQUEzQixLQUFLO2dCQUNVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBQ1UsV0FBVztzQkFBMUIsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsaUJBQWlCO3NCQUFoQyxLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQUV3Qix1QkFBdUI7c0JBQXBELE1BQU07dUJBQUMsYUFBYTtnQkFFVyxpQkFBaUI7c0JBQWhELFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBFeGlzdGluZ1Byb3ZpZGVyLCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBWaWV3Q2hpbGQsIGZvcndhcmRSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0F1dG9Db21wbGV0ZX0gZnJvbSAncHJpbWVuZy9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgb2YsIHN3aXRjaE1hcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpcnN0LCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtNZWRpdXNGaWx0ZXJNYXRjaFR5cGUsIE1lZGl1c1F1ZXJ5UGFyYW0sIE1lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyfSBmcm9tICcuLi8uLi8uLi9hcGkvbW9kZWxzJztcbmltcG9ydCB7SUxvb2t1cERhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtNbmdGb3JtbHlGaWVsZFdyYXBwZXJDb21wb25lbnR9IGZyb20gJy4uL2Zvcm1seS93cmFwcGVycyc7XG5cbmV4cG9ydCBjb25zdCBNTkdfQVVUT0NPTVBMRVRFX1ZBTFVFX0FDQ0VTU09SOiBFeGlzdGluZ1Byb3ZpZGVyID0ge1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1uZ0F1dG9jb21wbGV0ZUNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbW5nLWF1dG9jb21wbGV0ZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbTU5HX0FVVE9DT01QTEVURV9WQUxVRV9BQ0NFU1NPUl0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTW5nQXV0b2NvbXBsZXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBASW5wdXQoKSBwdWJsaWMgZGF0YVByb3ZpZGVyPzogSUxvb2t1cERhdGFQcm92aWRlcjxhbnksIGFueT47XG4gICAgQElucHV0KCkgcHVibGljIGRhdGFLZXlQcm9wZXJ0eT86IHN0cmluZztcbiAgICBASW5wdXQoJ2l0ZW1zVmFsdWVQcm9wZXJ0eScpIHB1YmxpYyBpdGVtc1ZhbHVlUHJvcGVydHlJbml0Pzogc3RyaW5nO1xuICAgIEBJbnB1dCgnaXRlbXNMYWJlbFByb3BlcnR5JykgcHVibGljIGl0ZW1zTGFiZWxQcm9wZXJ0eUluaXQ/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGl0ZW1zTGFiZWxUcmFuc2xhdGUgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaW5saW5lU2VhcmNoID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIG9wZW5PbkZvY3VzID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIG11bHRpc2VsZWN0ID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBjbGFzc05hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkcm9wZG93bkNsYXNzTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgQElucHV0KCkgcHVibGljIHNob3dDbGVhciA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhdXRvQ2xlYXIgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0Rmlyc3QgPSBmYWxzZTsgLy9vbiBldmVyeSBpbnB1dCBmaWVsZCBjaGFuZ2UgcmV0dXJuIGZpcnN0IGdpdmVuIHZhbHVlIChvciBudWxsKVxuXG4gICAgQE91dHB1dCgndmFsdWVDaGFuZ2UnKSBwdWJsaWMgdmFsdWVDaGFuZ2VFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAVmlld0NoaWxkKEF1dG9Db21wbGV0ZSkgcHVibGljIHByaW1lQXV0b2NvbXBsZXRlPzogQXV0b0NvbXBsZXRlO1xuXG4gICAgcHJpdmF0ZSBpc0luaXRlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgc3VnZ2VzdGlvbnNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8QXJyYXk8YW55Pj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PGFueT4+KFtdKTtcbiAgICBwcml2YXRlIHNlYXJjaFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBkYXRhUHJvdmlkZXJTZXJ2aWNlOiBhbnkgPSBudWxsO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICBwcml2YXRlIG9uQ2hhbmdlRm46IGFueSA9ICgpID0+IHt9O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICBwcml2YXRlIG9uVG91Y2hlZEZuOiBhbnkgPSAoKSA9PiB7fTtcblxuICAgIHB1YmxpYyBpdGVtc0xhYmVsUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHVibGljIGl0ZW1zVmFsdWVQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwdWJsaWMgYXV0b2NvbXBsZXRlRm9ybUNvbnRyb2w6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gICAgcHVibGljIHN1Z2dlc3Rpb25zJDogT2JzZXJ2YWJsZTxBcnJheTxhbnk+PiA9IHRoaXMuc3VnZ2VzdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBzdWdnZXN0aW9uU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1seVdyYXBwZXI6IE1uZ0Zvcm1seUZpZWxkV3JhcHBlckNvbXBvbmVudCkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnNldEl0ZW1zQW5kRGF0YVByb3ZpZGVyKCk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdEZpcnN0KSB7XG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25TdWJzY3JpcHRpb24gPSB0aGlzLnN1Z2dlc3Rpb25zJC5zdWJzY3JpYmUoZSA9PiB0aGlzLnZhbHVlQ2hhbmdlRXZlbnRFbWl0dGVyLmVtaXQoZS5sZW5ndGggPT09IDAgPyBudWxsIDogZVswXSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgb25TZWFyY2goZXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcblxuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1CdWlsZGVyID0gTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtc0xhYmVsUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtQnVpbGRlci53aXRoU29ydCh0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZlbnQucXVlcnkgJiYgZXZlbnQucXVlcnkubGVuZ3RoID4gMCAmJiB0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1CdWlsZGVyLndpdGhGaWx0ZXIodGhpcy5pdGVtc0xhYmVsUHJvcGVydHksIGV2ZW50LnF1ZXJ5LCB1bmRlZmluZWQsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5TdGFydHNXaXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID0gdGhpcy5nZXRMb29rdXAocXVlcnlQYXJhbUJ1aWxkZXIuYnVpbGQoKSwgZXZlbnQucXVlcnkpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogaXRlbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN1Z2dlc3Rpb25zRnJvbUl0ZW1zKGl0ZW1zLCBldmVudC5xdWVyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNlbGVjdCh2YWx1ZTogYW55KSB7XG4gICAgICAgIGxldCBvdXRwdXRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5pdGVtc1ZhbHVlUHJvcGVydHkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgb3V0cHV0VmFsdWUgPSB2YWx1ZVt0aGlzLml0ZW1zVmFsdWVQcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZUZuKG91dHB1dFZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZUV2ZW50RW1pdHRlci5uZXh0KG91dHB1dFZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgb25Gb2N1cyhldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMub3Blbk9uRm9jdXMpIHtcbiAgICAgICAgICAgIHRoaXMucHJpbWVBdXRvY29tcGxldGU/LnNob3coKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBvbkJsdXIoZXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLmZvcm1seVdyYXBwZXI/LmZvcm1Db250cm9sPy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIG9uQ2xlYXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2VGbigpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlRXZlbnRFbWl0dGVyLm5leHQobnVsbCk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2VGbiA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWRGbiA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVGb3JtQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUZvcm1Db250cm9sLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0SXRlbXNBbmREYXRhUHJvdmlkZXIoKTtcblxuICAgICAgICBpZiAodGhpcy5pdGVtc1ZhbHVlUHJvcGVydHlJbml0ICYmIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEl0ZW06IGFueSA9IHtbdGhpcy5pdGVtc1ZhbHVlUHJvcGVydHlJbml0XTogdmFsdWV9O1xuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNMYWJlbFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdEl0ZW1bdGhpcy5pdGVtc0xhYmVsUHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRJdGVtID0gdGhpcy5zdWdnZXN0aW9uc1N1YmplY3QudmFsdWUuZmluZChpID0+IGlbdGhpcy5pdGVtc1ZhbHVlUHJvcGVydHlJbml0IV0gPT09IHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVkSXRlbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRm9ybUNvbnRyb2wuc2V0VmFsdWUobWF0Y2hlZEl0ZW0sIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnlQYXJhbUJ1aWxkZXIgPSBNZWRpdXNRdWVyeVBhcmFtQnVpbGRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtQnVpbGRlci53aXRoRmlsdGVyKHRoaXMuaXRlbXNWYWx1ZVByb3BlcnR5SW5pdCwgdmFsdWUsIHVuZGVmaW5lZCwgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkVxdWFscyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmdldExvb2t1cChxdWVyeVBhcmFtQnVpbGRlci5idWlsZCgpKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IGl0ZW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVGb3JtQ29udHJvbC5zZXRWYWx1ZShpdGVtc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgbG9va3VwIGRhdGEgcHJvdmlkZXJzIG5vdCB1c2luZyBxdWVyeSBwYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZEl0ZW0gPSBpdGVtcy5maW5kKGkgPT4gaVt0aGlzLml0ZW1zVmFsdWVQcm9wZXJ0eUluaXQhXSA9PT0gdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXV0b2NvbXBsZXRlVmFsdWVGcm9tV3JpdGUobWF0Y2hlZEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBdXRvY29tcGxldGVWYWx1ZUZyb21Xcml0ZShkZWZhdWx0SXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBdXRvY29tcGxldGVWYWx1ZUZyb21Xcml0ZShkZWZhdWx0SXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEF1dG9jb21wbGV0ZVZhbHVlRnJvbVdyaXRlKGRlZmF1bHRJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QXV0b2NvbXBsZXRlVmFsdWVGcm9tV3JpdGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJdGVtc0FuZERhdGFQcm92aWRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbml0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXRlbXNMYWJlbFByb3BlcnR5ID0gdGhpcy5pdGVtc0xhYmVsUHJvcGVydHlJbml0O1xuICAgICAgICB0aGlzLml0ZW1zVmFsdWVQcm9wZXJ0eSA9IHRoaXMuaXRlbXNWYWx1ZVByb3BlcnR5SW5pdDtcblxuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyU2VydmljZSA9IHRoaXMuZGF0YVByb3ZpZGVyLnNlcnZpY2VUeXBlID8gdGhpcy5pbmplY3Rvci5nZXQ8YW55Pih0aGlzLmRhdGFQcm92aWRlci5zZXJ2aWNlVHlwZSkgOiBudWxsO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtc0xhYmVsVHJhbnNsYXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0dXAgdHJhbnNsYXRpb24gcHJvcGVydGllc1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eUluaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtc0xhYmVsUHJvcGVydHkgPSBgJHt0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eUluaXR9X2kxOG5gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXRlbXNMYWJlbFByb3BlcnR5ICYmICF0aGlzLml0ZW1zVmFsdWVQcm9wZXJ0eUluaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtc0xhYmVsUHJvcGVydHkgPSAndGl0bGVfaTE4bic7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNWYWx1ZVByb3BlcnR5ID0gJ3ZhbHVlJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdXNlIHdpdGggdmFsdWUgKCR7dGhpcy5pdGVtc0xhYmVsUHJvcGVydHlJbml0fSkgYW5kIGxhYmVsICgke3RoaXMuaXRlbXNMYWJlbFByb3BlcnR5SW5pdH0pIHByb3BlcnR5IHNldHVwLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgRGF0YSBwcm92aWRlciBzaG91bGQgYmUgcHJvdmlkZWQgZm9yIE1uZ0F1dG9jb21wbGV0ZUNvbXBvbmVudC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wZW5PbkZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoKHtxdWVyeTogJyd9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNJbml0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0QXV0b2NvbXBsZXRlVmFsdWVGcm9tV3JpdGUodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodmFsdWUgJiYgdGhpcy5pdGVtc0xhYmVsVHJhbnNsYXRlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuaTE4blBvcHVsYXRlSXRlbXMoW3ZhbHVlXSwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0aGlzLmkxOG5HZXRJdGVtc0tleXMoW3ZhbHVlXSkpKVswXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TG9va3VwKHFwOiBNZWRpdXNRdWVyeVBhcmFtLCBxdWVyeT86IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8YW55Pj4ge1xuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFQcm92aWRlci5sb29rdXAocXAsIHRoaXMuZGF0YVByb3ZpZGVyU2VydmljZSwgcXVlcnkpLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGl0ZW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNMYWJlbFRyYW5zbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZEl0ZW1zID0gdGhpcy5pMThuR2V0SXRlbXNLZXlzKGl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGVkSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLnN0cmVhbSh0cmFuc2xhdGVkSXRlbXMpLnBpcGUobWFwKHRyYW5zbGF0aW9ucyA9PiB0aGlzLmkxOG5Qb3B1bGF0ZUl0ZW1zKGl0ZW1zLCB0cmFuc2xhdGlvbnMpKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoaXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpMThuR2V0SXRlbXNLZXlzKGl0ZW1zOiBBcnJheTxhbnk+KTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBpdGVtcy5tYXAoaXRlbSA9PiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIHRoaXMuaXRlbXNMYWJlbFByb3BlcnR5SW5pdCA/IChpdGVtW3RoaXMuaXRlbXNMYWJlbFByb3BlcnR5SW5pdCBhcyBrZXlvZiBvYmplY3RdIGFzIHN0cmluZykgOiBpdGVtKSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaTE4blBvcHVsYXRlSXRlbXMoaXRlbXM6IEFycmF5PGFueT4sIGkxOG5NYXA6IGFueSk6IEFycmF5PGFueT4ge1xuICAgICAgICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiB0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eUluaXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1bdGhpcy5pdGVtc0xhYmVsUHJvcGVydHlJbml0IGFzIGtleW9mIG9iamVjdF0gYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBpMThuTWFwW2xhYmVsXTtcbiAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsuLi5pdGVtLCBbdGhpcy5pdGVtc0xhYmVsUHJvcGVydHkhXTogdHJhbnNsYXRpb259O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gey4uLml0ZW19O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IGkxOG5NYXBbaXRlbV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgW3RoaXMuaXRlbXNMYWJlbFByb3BlcnR5IV06IHRyYW5zbGF0aW9uID8/IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIFt0aGlzLml0ZW1zVmFsdWVQcm9wZXJ0eSFdOiBpdGVtXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTdWdnZXN0aW9uc0Zyb21JdGVtcyhpdGVtczogQXJyYXk8YW55PiwgcXVlcnk/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5saW5lU2VhcmNoKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeUxvd2VyQ2FzZSA9IHF1ZXJ5Py50b0xvd2VyQ2FzZSgpID8/ICcnO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9IGl0ZW1zLmZpbHRlcihpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgaXRlbUxhYmVsID0gaTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pdGVtc0xhYmVsUHJvcGVydHkgJiYgdHlwZW9mIGkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1MYWJlbCA9IGlbdGhpcy5pdGVtc0xhYmVsUHJvcGVydHldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXRlbUxhYmVsID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5TG93ZXJDYXNlID09IG51bGwgfHwgIXF1ZXJ5TG93ZXJDYXNlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtTGFiZWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1MYWJlbCA9IGl0ZW1MYWJlbC50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbUxhYmVsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChxdWVyeUxvd2VyQ2FzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNTdWJqZWN0Lm5leHQoWy4uLmZpbHRlcmVkSXRlbXNdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNTdWJqZWN0Lm5leHQoWy4uLml0ZW1zXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8cC1hdXRvQ29tcGxldGVcbiAgICAob25Gb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIlxuICAgIFtmb3JtQ29udHJvbF09XCJhdXRvY29tcGxldGVGb3JtQ29udHJvbFwiXG4gICAgW3BsYWNlaG9sZGVyXT1cIiRhbnkocGxhY2Vob2xkZXIpXCJcbiAgICBbZHJvcGRvd25dPVwidHJ1ZVwiXG4gICAgW2RhdGFLZXldPVwiJGFueShkYXRhS2V5UHJvcGVydHkpXCJcbiAgICBbZmllbGRdPVwiJGFueShpdGVtc0xhYmVsUHJvcGVydHkpXCJcbiAgICBbc3VnZ2VzdGlvbnNdPVwiKHN1Z2dlc3Rpb25zJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgW211bHRpcGxlXT1cIm11bHRpc2VsZWN0XCJcbiAgICBbc2hvd0VtcHR5TWVzc2FnZV09XCJ0cnVlXCJcbiAgICBbZW1wdHlNZXNzYWdlXT1cIidtbmdBdXRvY29tcGxldGUubm9NYXRjaGVzJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3N0eWxlQ2xhc3NdPVwiJGFueShjbGFzc05hbWUpXCJcbiAgICBbcGFuZWxTdHlsZUNsYXNzXT1cIiRhbnkoZHJvcGRvd25DbGFzc05hbWUpXCJcbiAgICBbbWluTGVuZ3RoXT1cIm9wZW5PbkZvY3VzID8gMCA6IDFcIlxuICAgIFtzaG93Q2xlYXJdPVwic2hvd0NsZWFyXCJcbiAgICBbZm9yY2VTZWxlY3Rpb25dPVwiYXV0b0NsZWFyXCJcbiAgICAoY29tcGxldGVNZXRob2QpPVwib25TZWFyY2goJGV2ZW50KVwiXG4gICAgKG9uU2VsZWN0KT1cIm9uU2VsZWN0KCRldmVudClcIlxuICAgIChvbkJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAgIChvbkNsZWFyKT1cIm9uQ2xlYXIoJGV2ZW50KVwiXG4gICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICBkcm9wZG93bk1vZGU9XCJjdXJyZW50XCI+XG48L3AtYXV0b0NvbXBsZXRlPlxuIl19
1
+ import { AsyncPipe } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Optional, Output, ViewChild, forwardRef } from '@angular/core';
3
+ import { FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
4
+ import { TranslateModule } from '@ngx-translate/core';
5
+ import { AutoComplete, AutoCompleteModule } from 'primeng/autocomplete';
6
+ import { BehaviorSubject, of, switchMap } from 'rxjs';
7
+ import { first, map } from 'rxjs/operators';
8
+ import { MediusFilterMatchType, MediusQueryParamBuilder } from '../../../api/models';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@ngx-translate/core";
11
+ import * as i2 from "../formly/wrappers";
12
+ import * as i3 from "primeng/autocomplete";
13
+ import * as i4 from "@angular/forms";
14
+ export const MNG_AUTOCOMPLETE_VALUE_ACCESSOR = {
15
+ provide: NG_VALUE_ACCESSOR,
16
+ useExisting: forwardRef(() => MngAutocompleteComponent),
17
+ multi: true
18
+ };
19
+ export class MngAutocompleteComponent {
20
+ constructor(injector, translate, formlyWrapper) {
21
+ this.injector = injector;
22
+ this.translate = translate;
23
+ this.formlyWrapper = formlyWrapper;
24
+ this.itemsLabelTranslate = false;
25
+ this.inlineSearch = false;
26
+ this.openOnFocus = false;
27
+ this.multiselect = false;
28
+ this.className = null;
29
+ this.dropdownClassName = null;
30
+ this.showClear = false;
31
+ this.autoClear = false;
32
+ this.selectFirst = false; //on every input field change return first given value (or null)
33
+ this.valueChangeEventEmitter = new EventEmitter();
34
+ this.isInited = false;
35
+ this.suggestionsSubject = new BehaviorSubject([]);
36
+ this.searchSubscription = null;
37
+ this.dataProviderService = null;
38
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
39
+ this.onChangeFn = () => { };
40
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
41
+ this.onTouchedFn = () => { };
42
+ this.autocompleteFormControl = new FormControl();
43
+ this.suggestions$ = this.suggestionsSubject.asObservable();
44
+ }
45
+ ngOnInit() {
46
+ this.setItemsAndDataProvider();
47
+ if (this.selectFirst) {
48
+ this.suggestionSubscription = this.suggestions$.subscribe(e => this.valueChangeEventEmitter.emit(e.length === 0 ? null : e[0]));
49
+ }
50
+ }
51
+ ngOnDestroy() {
52
+ this.searchSubscription?.unsubscribe();
53
+ this.suggestionSubscription?.unsubscribe();
54
+ }
55
+ onSearch(event) {
56
+ this.searchSubscription?.unsubscribe();
57
+ if (this.dataProvider) {
58
+ const queryParamBuilder = MediusQueryParamBuilder.create();
59
+ if (this.itemsLabelProperty) {
60
+ queryParamBuilder.withSort(this.itemsLabelProperty);
61
+ }
62
+ if (event.query && event.query.length > 0 && this.itemsLabelProperty) {
63
+ queryParamBuilder.withFilter(this.itemsLabelProperty, event.query, undefined, MediusFilterMatchType.StartsWith);
64
+ }
65
+ this.searchSubscription = this.getLookup(queryParamBuilder.build(), event.query).subscribe({
66
+ next: items => {
67
+ this.setSuggestionsFromItems(items, event.query);
68
+ }
69
+ });
70
+ }
71
+ }
72
+ onSelect(value) {
73
+ let outputValue = value;
74
+ if (this.itemsValueProperty && typeof value === 'object') {
75
+ outputValue = value[this.itemsValueProperty];
76
+ }
77
+ this.onChangeFn(outputValue);
78
+ this.valueChangeEventEmitter.next(outputValue);
79
+ }
80
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
81
+ onFocus(event) {
82
+ if (this.openOnFocus) {
83
+ this.primeAutocomplete?.show();
84
+ }
85
+ }
86
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
87
+ onBlur(event) {
88
+ this.formlyWrapper?.formControl?.markAsTouched();
89
+ }
90
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
91
+ onClear(event) {
92
+ this.onChangeFn();
93
+ this.valueChangeEventEmitter.next(null);
94
+ }
95
+ registerOnChange(fn) {
96
+ this.onChangeFn = fn;
97
+ }
98
+ registerOnTouched(fn) {
99
+ this.onTouchedFn = fn;
100
+ }
101
+ setDisabledState(isDisabled) {
102
+ if (isDisabled) {
103
+ this.autocompleteFormControl.disable();
104
+ }
105
+ else {
106
+ this.autocompleteFormControl.enable();
107
+ }
108
+ }
109
+ writeValue(value) {
110
+ this.setItemsAndDataProvider();
111
+ if (this.itemsValuePropertyInit && value != null && typeof value !== 'object') {
112
+ const defaultItem = { [this.itemsValuePropertyInit]: value };
113
+ if (this.itemsLabelProperty) {
114
+ defaultItem[this.itemsLabelProperty] = value;
115
+ }
116
+ const matchedItem = this.suggestionsSubject.value.find(i => i[this.itemsValuePropertyInit] === value);
117
+ if (matchedItem) {
118
+ this.autocompleteFormControl.setValue(matchedItem, { emitEvent: false });
119
+ }
120
+ else if (this.dataProvider) {
121
+ const queryParamBuilder = MediusQueryParamBuilder.create();
122
+ queryParamBuilder.withFilter(this.itemsValuePropertyInit, value, undefined, MediusFilterMatchType.Equals);
123
+ this.getLookup(queryParamBuilder.build())
124
+ .pipe(first())
125
+ .subscribe({
126
+ next: items => {
127
+ let isMatch = false;
128
+ if (items.length === 1) {
129
+ this.autocompleteFormControl.setValue(items[0]);
130
+ isMatch = true;
131
+ }
132
+ else if (items.length > 1) {
133
+ // for lookup data providers not using query params
134
+ const matchedItem = items.find(i => i[this.itemsValuePropertyInit] === value);
135
+ if (matchedItem) {
136
+ this.setAutocompleteValueFromWrite(matchedItem);
137
+ isMatch = true;
138
+ }
139
+ }
140
+ if (!isMatch) {
141
+ this.setAutocompleteValueFromWrite(defaultItem);
142
+ }
143
+ },
144
+ error: () => {
145
+ this.setAutocompleteValueFromWrite(defaultItem);
146
+ }
147
+ });
148
+ }
149
+ else {
150
+ this.setAutocompleteValueFromWrite(defaultItem);
151
+ }
152
+ }
153
+ else {
154
+ this.setAutocompleteValueFromWrite(value);
155
+ }
156
+ }
157
+ setItemsAndDataProvider() {
158
+ if (this.isInited) {
159
+ return;
160
+ }
161
+ this.itemsLabelProperty = this.itemsLabelPropertyInit;
162
+ this.itemsValueProperty = this.itemsValuePropertyInit;
163
+ if (this.dataProvider) {
164
+ this.dataProviderService = this.dataProvider.serviceType ? this.injector.get(this.dataProvider.serviceType) : null;
165
+ if (this.itemsLabelTranslate) {
166
+ // setup translation properties
167
+ if (this.itemsLabelPropertyInit) {
168
+ this.itemsLabelProperty = `${this.itemsLabelPropertyInit}_i18n`;
169
+ }
170
+ else if (!this.itemsLabelProperty && !this.itemsValuePropertyInit) {
171
+ this.itemsLabelProperty = 'title_i18n';
172
+ this.itemsValueProperty = 'value';
173
+ }
174
+ else {
175
+ throw new Error(`Invalid use with value (${this.itemsLabelPropertyInit}) and label (${this.itemsLabelPropertyInit}) property setup.`);
176
+ }
177
+ }
178
+ }
179
+ else {
180
+ console.warn(`Data provider should be provided for MngAutocompleteComponent.`);
181
+ }
182
+ if (this.openOnFocus) {
183
+ this.onSearch({ query: '' });
184
+ }
185
+ this.isInited = true;
186
+ }
187
+ setAutocompleteValueFromWrite(value) {
188
+ if (value && this.itemsLabelTranslate) {
189
+ value = this.i18nPopulateItems([value], this.translate.instant(this.i18nGetItemsKeys([value])))[0];
190
+ }
191
+ this.autocompleteFormControl.setValue(value, { emitEvent: false });
192
+ }
193
+ getLookup(qp, query) {
194
+ if (this.dataProvider) {
195
+ return this.dataProvider.lookup(qp, this.dataProviderService, query).pipe(switchMap(items => {
196
+ if (this.itemsLabelTranslate) {
197
+ const translatedItems = this.i18nGetItemsKeys(items);
198
+ if (translatedItems.length === 0) {
199
+ return of([]);
200
+ }
201
+ return this.translate.stream(translatedItems).pipe(map(translations => this.i18nPopulateItems(items, translations)));
202
+ }
203
+ else {
204
+ return of(items);
205
+ }
206
+ }));
207
+ }
208
+ else {
209
+ return of([]);
210
+ }
211
+ }
212
+ i18nGetItemsKeys(items) {
213
+ return items.map(item => (typeof item === 'object' && this.itemsLabelPropertyInit ? item[this.itemsLabelPropertyInit] : item));
214
+ }
215
+ i18nPopulateItems(items, i18nMap) {
216
+ return items.map(item => {
217
+ if (typeof item === 'object' && this.itemsLabelPropertyInit) {
218
+ const label = item[this.itemsLabelPropertyInit];
219
+ const translation = i18nMap[label];
220
+ if (translation) {
221
+ return { ...item, [this.itemsLabelProperty]: translation };
222
+ }
223
+ return { ...item };
224
+ }
225
+ else {
226
+ const translation = i18nMap[item];
227
+ return {
228
+ [this.itemsLabelProperty]: translation ?? item,
229
+ [this.itemsValueProperty]: item
230
+ };
231
+ }
232
+ });
233
+ }
234
+ setSuggestionsFromItems(items, query) {
235
+ if (this.inlineSearch) {
236
+ const queryLowerCase = query?.toLowerCase() ?? '';
237
+ const filteredItems = items.filter(i => {
238
+ let itemLabel = i;
239
+ if (this.itemsLabelProperty && typeof i === 'object') {
240
+ itemLabel = i[this.itemsLabelProperty];
241
+ }
242
+ if (itemLabel == null) {
243
+ return queryLowerCase == null || !queryLowerCase.length;
244
+ }
245
+ if (typeof itemLabel !== 'string') {
246
+ itemLabel = itemLabel.toString();
247
+ }
248
+ return itemLabel.toLowerCase().startsWith(queryLowerCase);
249
+ });
250
+ this.suggestionsSubject.next([...filteredItems]);
251
+ }
252
+ else {
253
+ this.suggestionsSubject.next([...items]);
254
+ }
255
+ }
256
+ }
257
+ MngAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: MngAutocompleteComponent, deps: [{ token: i0.Injector }, { token: i1.TranslateService }, { token: i2.MngFormlyFieldWrapperComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component });
258
+ MngAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: MngAutocompleteComponent, isStandalone: true, 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", showClear: "showClear", autoClear: "autoClear", selectFirst: "selectFirst" }, 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 [showClear]=\"showClear\"\n [forceSelection]=\"autoClear\"\n (completeMethod)=\"onSearch($event)\"\n (onSelect)=\"onSelect($event)\"\n (onBlur)=\"onBlur($event)\"\n (onClear)=\"onClear($event)\"\n appendTo=\"body\"\n dropdownMode=\"current\">\n</p-autoComplete>\n", dependencies: [{ kind: "ngmodule", type: AutoCompleteModule }, { kind: "component", type: i3.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "itemSize", "suggestions"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
259
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: MngAutocompleteComponent, decorators: [{
260
+ type: Component,
261
+ args: [{ standalone: true, selector: 'mng-autocomplete', providers: [MNG_AUTOCOMPLETE_VALUE_ACCESSOR], imports: [AutoCompleteModule, ReactiveFormsModule, AsyncPipe, TranslateModule], 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 [showClear]=\"showClear\"\n [forceSelection]=\"autoClear\"\n (completeMethod)=\"onSearch($event)\"\n (onSelect)=\"onSelect($event)\"\n (onBlur)=\"onBlur($event)\"\n (onClear)=\"onClear($event)\"\n appendTo=\"body\"\n dropdownMode=\"current\">\n</p-autoComplete>\n" }]
262
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.TranslateService }, { type: i2.MngFormlyFieldWrapperComponent, decorators: [{
263
+ type: Optional
264
+ }] }]; }, propDecorators: { dataProvider: [{
265
+ type: Input
266
+ }], dataKeyProperty: [{
267
+ type: Input
268
+ }], itemsValuePropertyInit: [{
269
+ type: Input,
270
+ args: ['itemsValueProperty']
271
+ }], itemsLabelPropertyInit: [{
272
+ type: Input,
273
+ args: ['itemsLabelProperty']
274
+ }], itemsLabelTranslate: [{
275
+ type: Input
276
+ }], inlineSearch: [{
277
+ type: Input
278
+ }], openOnFocus: [{
279
+ type: Input
280
+ }], multiselect: [{
281
+ type: Input
282
+ }], placeholder: [{
283
+ type: Input
284
+ }], className: [{
285
+ type: Input
286
+ }], dropdownClassName: [{
287
+ type: Input
288
+ }], showClear: [{
289
+ type: Input
290
+ }], autoClear: [{
291
+ type: Input
292
+ }], selectFirst: [{
293
+ type: Input
294
+ }], valueChangeEventEmitter: [{
295
+ type: Output,
296
+ args: ['valueChange']
297
+ }], primeAutocomplete: [{
298
+ type: ViewChild,
299
+ args: [AutoComplete]
300
+ }] } });
301
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQThCLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlLLE9BQU8sRUFBdUIsV0FBVyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFekcsT0FBTyxFQUFDLGVBQWUsRUFBbUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdEUsT0FBTyxFQUFDLGVBQWUsRUFBNEIsRUFBRSxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUMsS0FBSyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLE9BQU8sRUFBQyxxQkFBcUIsRUFBb0IsdUJBQXVCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7O0FBSXJHLE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFxQjtJQUM3RCxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUM7SUFDdkQsS0FBSyxFQUFFLElBQUk7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QywrQkFBK0IsQ0FBQyxXQUNuQyxDQUFDLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxlQUFlLENBQUMsbUJBQzdELHVCQUF1QixDQUFDLE1BQU07OzBCQXFDK0IsUUFBUTs0Q0FsQ3RFLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1UsZUFBZTtzQkFBOUIsS0FBSztnQkFDOEIsc0JBQXNCO3NCQUF6RCxLQUFLO3VCQUFDLG9CQUFvQjtnQkFDUyxzQkFBc0I7c0JBQXpELEtBQUs7dUJBQUMsb0JBQW9CO2dCQUNYLG1CQUFtQjtzQkFBbEMsS0FBSztnQkFDVSxZQUFZO3NCQUEzQixLQUFLO2dCQUNVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBQ1UsV0FBVztzQkFBMUIsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsaUJBQWlCO3NCQUFoQyxLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQUV3Qix1QkFBdUI7c0JBQXBELE1BQU07dUJBQUMsYUFBYTtnQkFFVyxpQkFBaUI7c0JBQWhELFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXN5bmNQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEV4aXN0aW5nUHJvdmlkZXIsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQsIFZpZXdDaGlsZCwgZm9yd2FyZFJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBdXRvQ29tcGxldGUsIEF1dG9Db21wbGV0ZU1vZHVsZX0gZnJvbSAncHJpbWVuZy9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgb2YsIHN3aXRjaE1hcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpcnN0LCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtNZWRpdXNGaWx0ZXJNYXRjaFR5cGUsIE1lZGl1c1F1ZXJ5UGFyYW0sIE1lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyfSBmcm9tICcuLi8uLi8uLi9hcGkvbW9kZWxzJztcbmltcG9ydCB7SUxvb2t1cERhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtNbmdGb3JtbHlGaWVsZFdyYXBwZXJDb21wb25lbnR9IGZyb20gJy4uL2Zvcm1seS93cmFwcGVycyc7XG5cbmV4cG9ydCBjb25zdCBNTkdfQVVUT0NPTVBMRVRFX1ZBTFVFX0FDQ0VTU09SOiBFeGlzdGluZ1Byb3ZpZGVyID0ge1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1uZ0F1dG9jb21wbGV0ZUNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdtbmctYXV0b2NvbXBsZXRlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtNTkdfQVVUT0NPTVBMRVRFX1ZBTFVFX0FDQ0VTU09SXSxcbiAgICBpbXBvcnRzOiBbQXV0b0NvbXBsZXRlTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBBc3luY1BpcGUsIFRyYW5zbGF0ZU1vZHVsZV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTW5nQXV0b2NvbXBsZXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBASW5wdXQoKSBwdWJsaWMgZGF0YVByb3ZpZGVyPzogSUxvb2t1cERhdGFQcm92aWRlcjxhbnksIGFueT47XG4gICAgQElucHV0KCkgcHVibGljIGRhdGFLZXlQcm9wZXJ0eT86IHN0cmluZztcbiAgICBASW5wdXQoJ2l0ZW1zVmFsdWVQcm9wZXJ0eScpIHB1YmxpYyBpdGVtc1ZhbHVlUHJvcGVydHlJbml0Pzogc3RyaW5nO1xuICAgIEBJbnB1dCgnaXRlbXNMYWJlbFByb3BlcnR5JykgcHVibGljIGl0ZW1zTGFiZWxQcm9wZXJ0eUluaXQ/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGl0ZW1zTGFiZWxUcmFuc2xhdGUgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaW5saW5lU2VhcmNoID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIG9wZW5PbkZvY3VzID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIG11bHRpc2VsZWN0ID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBjbGFzc05hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkcm9wZG93bkNsYXNzTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgQElucHV0KCkgcHVibGljIHNob3dDbGVhciA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhdXRvQ2xlYXIgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0Rmlyc3QgPSBmYWxzZTsgLy9vbiBldmVyeSBpbnB1dCBmaWVsZCBjaGFuZ2UgcmV0dXJuIGZpcnN0IGdpdmVuIHZhbHVlIChvciBudWxsKVxuXG4gICAgQE91dHB1dCgndmFsdWVDaGFuZ2UnKSBwdWJsaWMgdmFsdWVDaGFuZ2VFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAVmlld0NoaWxkKEF1dG9Db21wbGV0ZSkgcHVibGljIHByaW1lQXV0b2NvbXBsZXRlPzogQXV0b0NvbXBsZXRlO1xuXG4gICAgcHJpdmF0ZSBpc0luaXRlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgc3VnZ2VzdGlvbnNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8QXJyYXk8YW55Pj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PGFueT4+KFtdKTtcbiAgICBwcml2YXRlIHNlYXJjaFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBkYXRhUHJvdmlkZXJTZXJ2aWNlOiBhbnkgPSBudWxsO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICBwcml2YXRlIG9uQ2hhbmdlRm46IGFueSA9ICgpID0+IHt9O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICBwcml2YXRlIG9uVG91Y2hlZEZuOiBhbnkgPSAoKSA9PiB7fTtcblxuICAgIHB1YmxpYyBpdGVtc0xhYmVsUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHVibGljIGl0ZW1zVmFsdWVQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwdWJsaWMgYXV0b2NvbXBsZXRlRm9ybUNvbnRyb2w6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gICAgcHVibGljIHN1Z2dlc3Rpb25zJDogT2JzZXJ2YWJsZTxBcnJheTxhbnk+PiA9IHRoaXMuc3VnZ2VzdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBzdWdnZXN0aW9uU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1seVdyYXBwZXI6IE1uZ0Zvcm1seUZpZWxkV3JhcHBlckNvbXBvbmVudCkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnNldEl0ZW1zQW5kRGF0YVByb3ZpZGVyKCk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdEZpcnN0KSB7XG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25TdWJzY3JpcHRpb24gPSB0aGlzLnN1Z2dlc3Rpb25zJC5zdWJzY3JpYmUoZSA9PiB0aGlzLnZhbHVlQ2hhbmdlRXZlbnRFbWl0dGVyLmVtaXQoZS5sZW5ndGggPT09IDAgPyBudWxsIDogZVswXSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgb25TZWFyY2goZXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcblxuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1CdWlsZGVyID0gTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtc0xhYmVsUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtQnVpbGRlci53aXRoU29ydCh0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZlbnQucXVlcnkgJiYgZXZlbnQucXVlcnkubGVuZ3RoID4gMCAmJiB0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1CdWlsZGVyLndpdGhGaWx0ZXIodGhpcy5pdGVtc0xhYmVsUHJvcGVydHksIGV2ZW50LnF1ZXJ5LCB1bmRlZmluZWQsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5TdGFydHNXaXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID0gdGhpcy5nZXRMb29rdXAocXVlcnlQYXJhbUJ1aWxkZXIuYnVpbGQoKSwgZXZlbnQucXVlcnkpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogaXRlbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN1Z2dlc3Rpb25zRnJvbUl0ZW1zKGl0ZW1zLCBldmVudC5xdWVyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNlbGVjdCh2YWx1ZTogYW55KSB7XG4gICAgICAgIGxldCBvdXRwdXRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5pdGVtc1ZhbHVlUHJvcGVydHkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgb3V0cHV0VmFsdWUgPSB2YWx1ZVt0aGlzLml0ZW1zVmFsdWVQcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZUZuKG91dHB1dFZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZUV2ZW50RW1pdHRlci5uZXh0KG91dHB1dFZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgb25Gb2N1cyhldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMub3Blbk9uRm9jdXMpIHtcbiAgICAgICAgICAgIHRoaXMucHJpbWVBdXRvY29tcGxldGU/LnNob3coKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBvbkJsdXIoZXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLmZvcm1seVdyYXBwZXI/LmZvcm1Db250cm9sPy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIG9uQ2xlYXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2VGbigpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlRXZlbnRFbWl0dGVyLm5leHQobnVsbCk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2VGbiA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWRGbiA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVGb3JtQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUZvcm1Db250cm9sLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0SXRlbXNBbmREYXRhUHJvdmlkZXIoKTtcblxuICAgICAgICBpZiAodGhpcy5pdGVtc1ZhbHVlUHJvcGVydHlJbml0ICYmIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEl0ZW06IGFueSA9IHtbdGhpcy5pdGVtc1ZhbHVlUHJvcGVydHlJbml0XTogdmFsdWV9O1xuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNMYWJlbFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdEl0ZW1bdGhpcy5pdGVtc0xhYmVsUHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRJdGVtID0gdGhpcy5zdWdnZXN0aW9uc1N1YmplY3QudmFsdWUuZmluZChpID0+IGlbdGhpcy5pdGVtc1ZhbHVlUHJvcGVydHlJbml0IV0gPT09IHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVkSXRlbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRm9ybUNvbnRyb2wuc2V0VmFsdWUobWF0Y2hlZEl0ZW0sIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnlQYXJhbUJ1aWxkZXIgPSBNZWRpdXNRdWVyeVBhcmFtQnVpbGRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtQnVpbGRlci53aXRoRmlsdGVyKHRoaXMuaXRlbXNWYWx1ZVByb3BlcnR5SW5pdCwgdmFsdWUsIHVuZGVmaW5lZCwgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkVxdWFscyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmdldExvb2t1cChxdWVyeVBhcmFtQnVpbGRlci5idWlsZCgpKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IGl0ZW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVGb3JtQ29udHJvbC5zZXRWYWx1ZShpdGVtc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgbG9va3VwIGRhdGEgcHJvdmlkZXJzIG5vdCB1c2luZyBxdWVyeSBwYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZEl0ZW0gPSBpdGVtcy5maW5kKGkgPT4gaVt0aGlzLml0ZW1zVmFsdWVQcm9wZXJ0eUluaXQhXSA9PT0gdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXV0b2NvbXBsZXRlVmFsdWVGcm9tV3JpdGUobWF0Y2hlZEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBdXRvY29tcGxldGVWYWx1ZUZyb21Xcml0ZShkZWZhdWx0SXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBdXRvY29tcGxldGVWYWx1ZUZyb21Xcml0ZShkZWZhdWx0SXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEF1dG9jb21wbGV0ZVZhbHVlRnJvbVdyaXRlKGRlZmF1bHRJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QXV0b2NvbXBsZXRlVmFsdWVGcm9tV3JpdGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJdGVtc0FuZERhdGFQcm92aWRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbml0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXRlbXNMYWJlbFByb3BlcnR5ID0gdGhpcy5pdGVtc0xhYmVsUHJvcGVydHlJbml0O1xuICAgICAgICB0aGlzLml0ZW1zVmFsdWVQcm9wZXJ0eSA9IHRoaXMuaXRlbXNWYWx1ZVByb3BlcnR5SW5pdDtcblxuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyU2VydmljZSA9IHRoaXMuZGF0YVByb3ZpZGVyLnNlcnZpY2VUeXBlID8gdGhpcy5pbmplY3Rvci5nZXQ8YW55Pih0aGlzLmRhdGFQcm92aWRlci5zZXJ2aWNlVHlwZSkgOiBudWxsO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtc0xhYmVsVHJhbnNsYXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0dXAgdHJhbnNsYXRpb24gcHJvcGVydGllc1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eUluaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtc0xhYmVsUHJvcGVydHkgPSBgJHt0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eUluaXR9X2kxOG5gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXRlbXNMYWJlbFByb3BlcnR5ICYmICF0aGlzLml0ZW1zVmFsdWVQcm9wZXJ0eUluaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtc0xhYmVsUHJvcGVydHkgPSAndGl0bGVfaTE4bic7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNWYWx1ZVByb3BlcnR5ID0gJ3ZhbHVlJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdXNlIHdpdGggdmFsdWUgKCR7dGhpcy5pdGVtc0xhYmVsUHJvcGVydHlJbml0fSkgYW5kIGxhYmVsICgke3RoaXMuaXRlbXNMYWJlbFByb3BlcnR5SW5pdH0pIHByb3BlcnR5IHNldHVwLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgRGF0YSBwcm92aWRlciBzaG91bGQgYmUgcHJvdmlkZWQgZm9yIE1uZ0F1dG9jb21wbGV0ZUNvbXBvbmVudC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wZW5PbkZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoKHtxdWVyeTogJyd9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNJbml0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0QXV0b2NvbXBsZXRlVmFsdWVGcm9tV3JpdGUodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodmFsdWUgJiYgdGhpcy5pdGVtc0xhYmVsVHJhbnNsYXRlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuaTE4blBvcHVsYXRlSXRlbXMoW3ZhbHVlXSwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0aGlzLmkxOG5HZXRJdGVtc0tleXMoW3ZhbHVlXSkpKVswXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TG9va3VwKHFwOiBNZWRpdXNRdWVyeVBhcmFtLCBxdWVyeT86IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8YW55Pj4ge1xuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFQcm92aWRlci5sb29rdXAocXAsIHRoaXMuZGF0YVByb3ZpZGVyU2VydmljZSwgcXVlcnkpLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGl0ZW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNMYWJlbFRyYW5zbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZEl0ZW1zID0gdGhpcy5pMThuR2V0SXRlbXNLZXlzKGl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGVkSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLnN0cmVhbSh0cmFuc2xhdGVkSXRlbXMpLnBpcGUobWFwKHRyYW5zbGF0aW9ucyA9PiB0aGlzLmkxOG5Qb3B1bGF0ZUl0ZW1zKGl0ZW1zLCB0cmFuc2xhdGlvbnMpKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoaXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpMThuR2V0SXRlbXNLZXlzKGl0ZW1zOiBBcnJheTxhbnk+KTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBpdGVtcy5tYXAoaXRlbSA9PiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIHRoaXMuaXRlbXNMYWJlbFByb3BlcnR5SW5pdCA/IChpdGVtW3RoaXMuaXRlbXNMYWJlbFByb3BlcnR5SW5pdCBhcyBrZXlvZiBvYmplY3RdIGFzIHN0cmluZykgOiBpdGVtKSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaTE4blBvcHVsYXRlSXRlbXMoaXRlbXM6IEFycmF5PGFueT4sIGkxOG5NYXA6IGFueSk6IEFycmF5PGFueT4ge1xuICAgICAgICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiB0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eUluaXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1bdGhpcy5pdGVtc0xhYmVsUHJvcGVydHlJbml0IGFzIGtleW9mIG9iamVjdF0gYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBpMThuTWFwW2xhYmVsXTtcbiAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsuLi5pdGVtLCBbdGhpcy5pdGVtc0xhYmVsUHJvcGVydHkhXTogdHJhbnNsYXRpb259O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gey4uLml0ZW19O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IGkxOG5NYXBbaXRlbV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgW3RoaXMuaXRlbXNMYWJlbFByb3BlcnR5IV06IHRyYW5zbGF0aW9uID8/IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIFt0aGlzLml0ZW1zVmFsdWVQcm9wZXJ0eSFdOiBpdGVtXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTdWdnZXN0aW9uc0Zyb21JdGVtcyhpdGVtczogQXJyYXk8YW55PiwgcXVlcnk/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5saW5lU2VhcmNoKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeUxvd2VyQ2FzZSA9IHF1ZXJ5Py50b0xvd2VyQ2FzZSgpID8/ICcnO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9IGl0ZW1zLmZpbHRlcihpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgaXRlbUxhYmVsID0gaTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pdGVtc0xhYmVsUHJvcGVydHkgJiYgdHlwZW9mIGkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1MYWJlbCA9IGlbdGhpcy5pdGVtc0xhYmVsUHJvcGVydHldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXRlbUxhYmVsID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5TG93ZXJDYXNlID09IG51bGwgfHwgIXF1ZXJ5TG93ZXJDYXNlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtTGFiZWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1MYWJlbCA9IGl0ZW1MYWJlbC50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbUxhYmVsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChxdWVyeUxvd2VyQ2FzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNTdWJqZWN0Lm5leHQoWy4uLmZpbHRlcmVkSXRlbXNdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNTdWJqZWN0Lm5leHQoWy4uLml0ZW1zXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8cC1hdXRvQ29tcGxldGVcbiAgICAob25Gb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIlxuICAgIFtmb3JtQ29udHJvbF09XCJhdXRvY29tcGxldGVGb3JtQ29udHJvbFwiXG4gICAgW3BsYWNlaG9sZGVyXT1cIiRhbnkocGxhY2Vob2xkZXIpXCJcbiAgICBbZHJvcGRvd25dPVwidHJ1ZVwiXG4gICAgW2RhdGFLZXldPVwiJGFueShkYXRhS2V5UHJvcGVydHkpXCJcbiAgICBbZmllbGRdPVwiJGFueShpdGVtc0xhYmVsUHJvcGVydHkpXCJcbiAgICBbc3VnZ2VzdGlvbnNdPVwiKHN1Z2dlc3Rpb25zJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgW211bHRpcGxlXT1cIm11bHRpc2VsZWN0XCJcbiAgICBbc2hvd0VtcHR5TWVzc2FnZV09XCJ0cnVlXCJcbiAgICBbZW1wdHlNZXNzYWdlXT1cIidtbmdBdXRvY29tcGxldGUubm9NYXRjaGVzJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3N0eWxlQ2xhc3NdPVwiJGFueShjbGFzc05hbWUpXCJcbiAgICBbcGFuZWxTdHlsZUNsYXNzXT1cIiRhbnkoZHJvcGRvd25DbGFzc05hbWUpXCJcbiAgICBbbWluTGVuZ3RoXT1cIm9wZW5PbkZvY3VzID8gMCA6IDFcIlxuICAgIFtzaG93Q2xlYXJdPVwic2hvd0NsZWFyXCJcbiAgICBbZm9yY2VTZWxlY3Rpb25dPVwiYXV0b0NsZWFyXCJcbiAgICAoY29tcGxldGVNZXRob2QpPVwib25TZWFyY2goJGV2ZW50KVwiXG4gICAgKG9uU2VsZWN0KT1cIm9uU2VsZWN0KCRldmVudClcIlxuICAgIChvbkJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAgIChvbkNsZWFyKT1cIm9uQ2xlYXIoJGV2ZW50KVwiXG4gICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICBkcm9wZG93bk1vZGU9XCJjdXJyZW50XCI+XG48L3AtYXV0b0NvbXBsZXRlPlxuIl19