@mediusinc/mng-commons 0.10.3-rc.2 → 0.12.0

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