@sumaris-net/ngx-components 2.6.4-alpha5 → 2.6.4-alpha6

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 (1179) hide show
  1. package/esm2020/public_api.mjs +313 -0
  2. package/esm2020/src/app/admin/admin-routing.module.mjs +41 -0
  3. package/esm2020/src/app/admin/admin.module.mjs +34 -0
  4. package/esm2020/src/app/admin/services/filter/person.filter.mjs +59 -0
  5. package/esm2020/src/app/admin/services/person.service.mjs +161 -0
  6. package/esm2020/src/app/admin/services/validator/person.validator.mjs +34 -0
  7. package/esm2020/src/app/admin/users/users.mjs +234 -0
  8. package/esm2020/src/app/admin/users/users.module.mjs +54 -0
  9. package/esm2020/src/app/core/about/about.modal.mjs +71 -0
  10. package/esm2020/src/app/core/about/about.module.mjs +34 -0
  11. package/esm2020/src/app/core/account/account.module.mjs +61 -0
  12. package/esm2020/src/app/core/account/account.page.mjs +316 -0
  13. package/esm2020/src/app/core/account/new-token.modal.mjs +115 -0
  14. package/esm2020/src/app/core/account/token.table.mjs +137 -0
  15. package/esm2020/src/app/core/auth/auth.form.mjs +131 -0
  16. package/esm2020/src/app/core/auth/auth.modal.mjs +72 -0
  17. package/esm2020/src/app/core/auth/auth.module.mjs +47 -0
  18. package/esm2020/src/app/core/core.module.mjs +184 -0
  19. package/esm2020/src/app/core/core.testing.module.mjs +86 -0
  20. package/esm2020/src/app/core/form/buttons/form-buttons-bar.component.mjs +71 -0
  21. package/esm2020/src/app/core/form/buttons/form-buttons-bar.module.mjs +35 -0
  22. package/esm2020/src/app/core/form/entity/editor.class.mjs +679 -0
  23. package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +421 -0
  24. package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +687 -0
  25. package/esm2020/src/app/core/form/entity/entity-metadata.component.mjs +25 -0
  26. package/esm2020/src/app/core/form/entity/entity.module.mjs +38 -0
  27. package/esm2020/src/app/core/form/form.class.mjs +340 -0
  28. package/esm2020/src/app/core/form/form.module.mjs +66 -0
  29. package/esm2020/src/app/core/form/form.utils.mjs +473 -0
  30. package/esm2020/src/app/core/form/list/list.form.mjs +222 -0
  31. package/esm2020/src/app/core/form/list/list.module.mjs +35 -0
  32. package/esm2020/src/app/core/form/properties/properties.form.mjs +132 -0
  33. package/esm2020/src/app/core/form/properties/properties.module.mjs +43 -0
  34. package/esm2020/src/app/core/form/properties/properties.table.mjs +264 -0
  35. package/esm2020/src/app/core/form/properties/property.validator.mjs +23 -0
  36. package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +90 -0
  37. package/esm2020/src/app/core/form/properties/testing/properties-form.testing.module.mjs +39 -0
  38. package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.mjs +70 -0
  39. package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +45 -0
  40. package/esm2020/src/app/core/form/text-popover/text-form.component.mjs +89 -0
  41. package/esm2020/src/app/core/form/text-popover/text-popover.component.mjs +146 -0
  42. package/esm2020/src/app/core/form/text-popover/text-popover.module.mjs +40 -0
  43. package/esm2020/src/app/core/graphql/graphql.module.mjs +22 -0
  44. package/esm2020/src/app/core/graphql/graphql.service.mjs +762 -0
  45. package/esm2020/src/app/core/graphql/graphql.utils.mjs +117 -0
  46. package/esm2020/src/app/core/home/home.mjs +257 -0
  47. package/esm2020/src/app/core/home/home.module.mjs +48 -0
  48. package/esm2020/src/app/core/icon/icon.component.mjs +41 -0
  49. package/esm2020/src/app/core/icon/icon.module.mjs +29 -0
  50. package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +343 -0
  51. package/esm2020/src/app/core/install/install-upgrade-card.module.mjs +35 -0
  52. package/esm2020/src/app/core/menu/menu.component.mjs +329 -0
  53. package/esm2020/src/app/core/menu/menu.model.mjs +35 -0
  54. package/esm2020/src/app/core/menu/menu.module.mjs +44 -0
  55. package/esm2020/src/app/core/menu/menu.service.mjs +55 -0
  56. package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +27 -0
  57. package/esm2020/src/app/core/offline/update-offline-mode-card.module.mjs +35 -0
  58. package/esm2020/src/app/core/peer/select-peer.modal.mjs +182 -0
  59. package/esm2020/src/app/core/peer/select-peer.module.mjs +42 -0
  60. package/esm2020/src/app/core/register/register-confirm.page.mjs +81 -0
  61. package/esm2020/src/app/core/register/register.form.mjs +181 -0
  62. package/esm2020/src/app/core/register/register.modal.mjs +52 -0
  63. package/esm2020/src/app/core/register/register.module.mjs +44 -0
  64. package/esm2020/src/app/core/services/account.service.mjs +1212 -0
  65. package/esm2020/src/app/core/services/auth-guard.service.mjs +71 -0
  66. package/esm2020/src/app/core/services/base-entity-service.class.mjs +444 -0
  67. package/esm2020/src/app/core/services/base-graphql-service.class.mjs +219 -0
  68. package/esm2020/src/app/core/services/base58.mjs +78 -0
  69. package/esm2020/src/app/core/services/config/core.config.mjs +175 -0
  70. package/esm2020/src/app/core/services/config.service.mjs +354 -0
  71. package/esm2020/src/app/core/services/crypto.service.mjs +114 -0
  72. package/esm2020/src/app/core/services/errors.mjs +50 -0
  73. package/esm2020/src/app/core/services/local-settings.service.mjs +449 -0
  74. package/esm2020/src/app/core/services/model/account.model.mjs +122 -0
  75. package/esm2020/src/app/core/services/model/config.model.mjs +92 -0
  76. package/esm2020/src/app/core/services/model/department.model.mjs +30 -0
  77. package/esm2020/src/app/core/services/model/entity.decorators.mjs +97 -0
  78. package/esm2020/src/app/core/services/model/entity.model.mjs +240 -0
  79. package/esm2020/src/app/core/services/model/filter.model.mjs +94 -0
  80. package/esm2020/src/app/core/services/model/history.model.mjs +2 -0
  81. package/esm2020/src/app/core/services/model/model.enum.mjs +11 -0
  82. package/esm2020/src/app/core/services/model/peer.model.mjs +68 -0
  83. package/esm2020/src/app/core/services/model/person.model.mjs +83 -0
  84. package/esm2020/src/app/core/services/model/referential.model.mjs +164 -0
  85. package/esm2020/src/app/core/services/model/settings.model.mjs +3 -0
  86. package/esm2020/src/app/core/services/model/token.model.mjs +48 -0
  87. package/esm2020/src/app/core/services/network.service.mjs +589 -0
  88. package/esm2020/src/app/core/services/network.types.mjs +20 -0
  89. package/esm2020/src/app/core/services/network.utils.mjs +15 -0
  90. package/esm2020/src/app/core/services/pipes/account.pipes.mjs +38 -0
  91. package/esm2020/src/app/core/services/pipes/department-to-string.pipe.mjs +23 -0
  92. package/esm2020/src/app/core/services/pipes/person-to-string.pipe.mjs +23 -0
  93. package/esm2020/src/app/core/services/pipes/usage-mode.pipes.mjs +37 -0
  94. package/esm2020/src/app/core/services/platform.service.mjs +525 -0
  95. package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +428 -0
  96. package/esm2020/src/app/core/services/storage/entity-store.class.mjs +449 -0
  97. package/esm2020/src/app/core/services/testing/referential-filter.model.mjs +23 -0
  98. package/esm2020/src/app/core/services/testing/referential.validator.mjs +45 -0
  99. package/esm2020/src/app/core/services/validator/account.validator.mjs +56 -0
  100. package/esm2020/src/app/core/services/validator/base.validator.class.mjs +47 -0
  101. package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +66 -0
  102. package/esm2020/src/app/core/services/validator/user-settings.validator.mjs +27 -0
  103. package/esm2020/src/app/core/services/validator/user-token.validator.mjs +52 -0
  104. package/esm2020/src/app/core/settings/settings.module.mjs +34 -0
  105. package/esm2020/src/app/core/settings/settings.page.mjs +312 -0
  106. package/esm2020/src/app/core/table/actions-column.component.mjs +102 -0
  107. package/esm2020/src/app/core/table/async-table.class.mjs +1697 -0
  108. package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +384 -0
  109. package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +399 -0
  110. package/esm2020/src/app/core/table/memory-table.class.mjs +53 -0
  111. package/esm2020/src/app/core/table/table-select-columns.component.mjs +43 -0
  112. package/esm2020/src/app/core/table/table.class.mjs +1728 -0
  113. package/esm2020/src/app/core/table/table.model.mjs +12 -0
  114. package/esm2020/src/app/core/table/table.module.mjs +40 -0
  115. package/esm2020/src/app/core/table/table.utils.mjs +30 -0
  116. package/esm2020/src/app/core/table/testing/table-validator.service.mjs +27 -0
  117. package/esm2020/src/app/core/table/testing/table.testing.mjs +280 -0
  118. package/esm2020/src/app/core/table/testing/table.testing.module.mjs +38 -0
  119. package/esm2020/src/app/shared/alerts.mjs +239 -0
  120. package/esm2020/src/app/shared/audio/audio.mjs +248 -0
  121. package/esm2020/src/app/shared/audio/audio.testing.mjs +31 -0
  122. package/esm2020/src/app/shared/audio/audio.testing.module.mjs +45 -0
  123. package/esm2020/src/app/shared/capacitor/keyboard.mjs +40 -0
  124. package/esm2020/src/app/shared/capacitor/plugins.mjs +9 -0
  125. package/esm2020/src/app/shared/constants.mjs +10 -0
  126. package/esm2020/src/app/shared/dates.mjs +147 -0
  127. package/esm2020/src/app/shared/debug/debug-service.class.mjs +3 -0
  128. package/esm2020/src/app/shared/debug/debug.component.mjs +39 -0
  129. package/esm2020/src/app/shared/debug/debug.module.mjs +44 -0
  130. package/esm2020/src/app/shared/directives/autofocus.directive.mjs +92 -0
  131. package/esm2020/src/app/shared/directives/autotitle.directive.mjs +30 -0
  132. package/esm2020/src/app/shared/directives/directives.module.mjs +43 -0
  133. package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +53 -0
  134. package/esm2020/src/app/shared/directives/ng-var.directive.mjs +31 -0
  135. package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +59 -0
  136. package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +40 -0
  137. package/esm2020/src/app/shared/directives/resizable/resizable.module.mjs +17 -0
  138. package/esm2020/src/app/shared/events.mjs +64 -0
  139. package/esm2020/src/app/shared/file/csv.utils.mjs +74 -0
  140. package/esm2020/src/app/shared/file/file.service.mjs +117 -0
  141. package/esm2020/src/app/shared/file/file.utils.mjs +113 -0
  142. package/esm2020/src/app/shared/file/images.utils.mjs +161 -0
  143. package/esm2020/src/app/shared/file/json.utils.mjs +51 -0
  144. package/esm2020/src/app/shared/file/uri.utils.mjs +23 -0
  145. package/esm2020/src/app/shared/focusable.mjs +6 -0
  146. package/esm2020/src/app/shared/form/field.component.mjs +307 -0
  147. package/esm2020/src/app/shared/form/field.model.mjs +25 -0
  148. package/esm2020/src/app/shared/form/loading-spinner.mjs +36 -0
  149. package/esm2020/src/app/shared/forms.mjs +391 -0
  150. package/esm2020/src/app/shared/functions.mjs +477 -0
  151. package/esm2020/src/app/shared/geolocation/geolocation.utils.mjs +80 -0
  152. package/esm2020/src/app/shared/gesture/gesture-config.mjs +49 -0
  153. package/esm2020/src/app/shared/gesture/hammer.utils.mjs +2 -0
  154. package/esm2020/src/app/shared/graph/colors.utils.mjs +64 -0
  155. package/esm2020/src/app/shared/graph/graph-colors.mjs +212 -0
  156. package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +57 -0
  157. package/esm2020/src/app/shared/help/help.modal.mjs +53 -0
  158. package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +23 -0
  159. package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +84 -0
  160. package/esm2020/src/app/shared/hotkeys/shared-hotkeys.module.mjs +42 -0
  161. package/esm2020/src/app/shared/http/http.utils.mjs +52 -0
  162. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +365 -0
  163. package/esm2020/src/app/shared/image/gallery/image-gallery.module.mjs +59 -0
  164. package/esm2020/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +27 -0
  165. package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +90 -0
  166. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +39 -0
  167. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +56 -0
  168. package/esm2020/src/app/shared/image/image.model.mjs +2 -0
  169. package/esm2020/src/app/shared/image/image.module.mjs +29 -0
  170. package/esm2020/src/app/shared/image/image.service.mjs +98 -0
  171. package/esm2020/src/app/shared/inputs.mjs +231 -0
  172. package/esm2020/src/app/shared/interceptors/progess.interceptor.mjs +27 -0
  173. package/esm2020/src/app/shared/logging/log-level.model.mjs +48 -0
  174. package/esm2020/src/app/shared/logging/logger.model.mjs +47 -0
  175. package/esm2020/src/app/shared/logging/logging-service.class.mjs +121 -0
  176. package/esm2020/src/app/shared/logging/logging-service.config.mjs +2 -0
  177. package/esm2020/src/app/shared/logging/logging-service.module.mjs +30 -0
  178. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +47 -0
  179. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +916 -0
  180. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +78 -0
  181. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +19 -0
  182. package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +209 -0
  183. package/esm2020/src/app/shared/material/badge/badge.directive.mjs +194 -0
  184. package/esm2020/src/app/shared/material/badge/badge.module.mjs +32 -0
  185. package/esm2020/src/app/shared/material/badge/badge.test.mjs +41 -0
  186. package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +68 -0
  187. package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +253 -0
  188. package/esm2020/src/app/shared/material/chips/chips.module.mjs +76 -0
  189. package/esm2020/src/app/shared/material/chips/material.chips.mjs +697 -0
  190. package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +143 -0
  191. package/esm2020/src/app/shared/material/datetime/datetime.module.mjs +91 -0
  192. package/esm2020/src/app/shared/material/datetime/material.date.mjs +376 -0
  193. package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +385 -0
  194. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +499 -0
  195. package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +108 -0
  196. package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +110 -0
  197. package/esm2020/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +103 -0
  198. package/esm2020/src/app/shared/material/duration/duration.module.mjs +67 -0
  199. package/esm2020/src/app/shared/material/duration/duration.utils.mjs +36 -0
  200. package/esm2020/src/app/shared/material/duration/material.duration.mjs +257 -0
  201. package/esm2020/src/app/shared/material/latlong/latlong.utils.mjs +266 -0
  202. package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +381 -0
  203. package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +67 -0
  204. package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +102 -0
  205. package/esm2020/src/app/shared/material/material.animations.mjs +104 -0
  206. package/esm2020/src/app/shared/material/material.module.mjs +224 -0
  207. package/esm2020/src/app/shared/material/material.testing.module.mjs +168 -0
  208. package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +98 -0
  209. package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +80 -0
  210. package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +190 -0
  211. package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +17 -0
  212. package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +162 -0
  213. package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +37 -0
  214. package/esm2020/src/app/shared/material/numpad/numpad.model.mjs +15 -0
  215. package/esm2020/src/app/shared/material/numpad/numpad.module.mjs +60 -0
  216. package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +46 -0
  217. package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +46 -0
  218. package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +22 -0
  219. package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +344 -0
  220. package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +52 -0
  221. package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +64 -0
  222. package/esm2020/src/app/shared/modules.mjs +11 -0
  223. package/esm2020/src/app/shared/observables.mjs +103 -0
  224. package/esm2020/src/app/shared/pipes/arrays.pipe.mjs +141 -0
  225. package/esm2020/src/app/shared/pipes/colors.pipe.mjs +23 -0
  226. package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +48 -0
  227. package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +66 -0
  228. package/esm2020/src/app/shared/pipes/date-from-now.pipe.mjs +27 -0
  229. package/esm2020/src/app/shared/pipes/duration.pipe.mjs +34 -0
  230. package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +62 -0
  231. package/esm2020/src/app/shared/pipes/form.pipes.mjs +187 -0
  232. package/esm2020/src/app/shared/pipes/highlight.pipe.mjs +48 -0
  233. package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +46 -0
  234. package/esm2020/src/app/shared/pipes/maps.pipe.mjs +63 -0
  235. package/esm2020/src/app/shared/pipes/math.pipes.mjs +59 -0
  236. package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +21 -0
  237. package/esm2020/src/app/shared/pipes/number-format.pipe.mjs +30 -0
  238. package/esm2020/src/app/shared/pipes/pipes.module.mjs +239 -0
  239. package/esm2020/src/app/shared/pipes/property.pipes.mjs +93 -0
  240. package/esm2020/src/app/shared/pipes/string.pipes.mjs +121 -0
  241. package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +43 -0
  242. package/esm2020/src/app/shared/pipes/types.pipes.mjs +45 -0
  243. package/esm2020/src/app/shared/platforms.mjs +43 -0
  244. package/esm2020/src/app/shared/services/entity-service.class.mjs +7 -0
  245. package/esm2020/src/app/shared/services/job.utils.mjs +92 -0
  246. package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +337 -0
  247. package/esm2020/src/app/shared/services/progress-bar.service.mjs +33 -0
  248. package/esm2020/src/app/shared/services/startable-observable-service.class.mjs +119 -0
  249. package/esm2020/src/app/shared/services/startable-service.class.mjs +110 -0
  250. package/esm2020/src/app/shared/services/translate-context.service.mjs +105 -0
  251. package/esm2020/src/app/shared/services/validator-service.class.mjs +2 -0
  252. package/esm2020/src/app/shared/services.mjs +62 -0
  253. package/esm2020/src/app/shared/shared-routing.module.mjs +70 -0
  254. package/esm2020/src/app/shared/shared.module.mjs +208 -0
  255. package/esm2020/src/app/shared/shared.testing.module.mjs +84 -0
  256. package/esm2020/src/app/shared/storage/storage-explorer.component.mjs +268 -0
  257. package/esm2020/src/app/shared/storage/storage-explorer.module.mjs +60 -0
  258. package/esm2020/src/app/shared/storage/storage.service.mjs +132 -0
  259. package/esm2020/src/app/shared/storage/storage.utils.mjs +13 -0
  260. package/esm2020/src/app/shared/testing/observable.test.mjs +95 -0
  261. package/esm2020/src/app/shared/testing/tests.page.mjs +33 -0
  262. package/esm2020/src/app/shared/toast/toast.testing.mjs +51 -0
  263. package/esm2020/src/app/shared/toast/toast.testing.module.mjs +45 -0
  264. package/esm2020/src/app/shared/toast/toasts.mjs +144 -0
  265. package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +58 -0
  266. package/esm2020/src/app/shared/toolbar/toolbar.mjs +251 -0
  267. package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +53 -0
  268. package/esm2020/src/app/shared/types.mjs +2 -0
  269. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +57 -0
  270. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +45 -0
  271. package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +97 -0
  272. package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +204 -0
  273. package/esm2020/src/app/shared/upload-file/upload-file.model.mjs +20 -0
  274. package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +104 -0
  275. package/esm2020/src/app/shared/validator/validators.mjs +573 -0
  276. package/esm2020/src/app/shared/version/versions.mjs +81 -0
  277. package/esm2020/src/app/social/job/job.module.mjs +42 -0
  278. package/esm2020/src/app/social/job/progression/job-progression.component.mjs +20 -0
  279. package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +216 -0
  280. package/esm2020/src/app/social/job/progression/job-progression.list.mjs +43 -0
  281. package/esm2020/src/app/social/job/progression/job-progression.model.mjs +23 -0
  282. package/esm2020/src/app/social/job/progression/job-progression.service.mjs +71 -0
  283. package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +52 -0
  284. package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +55 -0
  285. package/esm2020/src/app/social/job/testing/job.testing.module.mjs +35 -0
  286. package/esm2020/src/app/social/message/message.form.mjs +81 -0
  287. package/esm2020/src/app/social/message/message.modal.mjs +93 -0
  288. package/esm2020/src/app/social/message/message.model.mjs +65 -0
  289. package/esm2020/src/app/social/message/message.module.mjs +35 -0
  290. package/esm2020/src/app/social/message/message.service.mjs +84 -0
  291. package/esm2020/src/app/social/social.errors.mjs +10 -0
  292. package/esm2020/src/app/social/social.module.mjs +47 -0
  293. package/esm2020/src/app/social/social.testing.module.mjs +51 -0
  294. package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +114 -0
  295. package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +246 -0
  296. package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +227 -0
  297. package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +112 -0
  298. package/esm2020/src/app/social/user-event/testing/user-event.testing.module.mjs +35 -0
  299. package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +111 -0
  300. package/esm2020/src/app/social/user-event/user-event.model.mjs +2 -0
  301. package/esm2020/src/app/social/user-event/user-event.module.mjs +39 -0
  302. package/esm2020/src/app/social/user-event/user-event.service.mjs +487 -0
  303. package/esm2020/src/environments/environment.class.mjs +5 -0
  304. package/esm2020/src/environments/environment.mjs +94 -0
  305. package/esm2020/sumaris-net.ngx-components.mjs +5 -0
  306. package/fesm2015/sumaris-net.ngx-components.mjs +38842 -0
  307. package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -0
  308. package/fesm2020/sumaris-net.ngx-components.mjs +37941 -0
  309. package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -0
  310. package/index.d.ts +5 -0
  311. package/package.json +23 -137
  312. package/public_api.d.ts +286 -0
  313. package/src/app/admin/admin-routing.module.d.ts +9 -0
  314. package/src/app/admin/admin.module.d.ts +10 -0
  315. package/src/app/admin/services/filter/person.filter.d.ts +21 -0
  316. package/src/app/admin/services/person.service.d.ts +44 -0
  317. package/src/app/admin/services/validator/person.validator.d.ts +14 -0
  318. package/src/app/admin/users/users.d.ts +44 -0
  319. package/src/app/admin/users/users.module.d.ts +13 -0
  320. package/src/app/core/about/about.modal.d.ts +32 -0
  321. package/src/app/core/about/about.module.d.ts +10 -0
  322. package/src/app/core/account/account.module.d.ts +15 -0
  323. package/src/app/core/account/account.page.d.ts +68 -0
  324. package/src/app/core/account/new-token.modal.d.ts +41 -0
  325. package/src/app/core/account/token.table.d.ts +25 -0
  326. package/src/app/core/auth/auth.form.d.ts +36 -0
  327. package/src/app/core/auth/auth.modal.d.ts +24 -0
  328. package/src/app/core/auth/auth.module.d.ts +11 -0
  329. package/src/app/core/core.module.d.ts +31 -0
  330. package/src/app/core/core.testing.module.d.ts +14 -0
  331. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +26 -0
  332. package/src/app/core/form/buttons/form-buttons-bar.module.d.ts +9 -0
  333. package/src/app/core/form/entity/editor.class.d.ts +243 -0
  334. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +128 -0
  335. package/src/app/core/form/entity/entity-editor.class.d.ts +205 -0
  336. package/src/app/core/form/entity/entity-metadata.component.d.ts +13 -0
  337. package/src/app/core/form/entity/entity.module.d.ts +10 -0
  338. package/src/app/core/form/form.class.d.ts +155 -0
  339. package/src/app/core/form/form.module.d.ts +13 -0
  340. package/src/app/core/form/form.utils.d.ts +336 -0
  341. package/src/app/core/form/list/list.form.d.ts +81 -0
  342. package/src/app/core/form/list/list.module.d.ts +9 -0
  343. package/src/app/core/form/properties/properties.form.d.ts +44 -0
  344. package/src/app/core/form/properties/properties.module.d.ts +11 -0
  345. package/src/app/core/form/properties/properties.table.d.ts +78 -0
  346. package/src/app/core/form/properties/property.validator.d.ts +13 -0
  347. package/src/app/core/form/properties/testing/properties-form.test.d.ts +19 -0
  348. package/src/app/core/form/properties/testing/properties-form.testing.module.d.ts +12 -0
  349. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +14 -0
  350. package/src/app/core/form/text-popover/testing/text-popover.testing.module.d.ts +11 -0
  351. package/src/app/core/form/text-popover/text-form.component.d.ts +32 -0
  352. package/src/app/core/form/text-popover/text-popover.component.d.ts +70 -0
  353. package/src/app/core/form/text-popover/text-popover.module.d.ts +10 -0
  354. package/src/app/core/graphql/graphql.module.d.ts +8 -0
  355. package/src/app/core/graphql/graphql.service.d.ts +148 -0
  356. package/src/app/core/graphql/graphql.utils.d.ts +42 -0
  357. package/src/app/core/home/home.d.ts +74 -0
  358. package/src/app/core/home/home.module.d.ts +12 -0
  359. package/src/app/core/icon/icon.component.d.ts +13 -0
  360. package/src/app/core/icon/icon.module.d.ts +9 -0
  361. package/src/app/core/install/install-upgrade-card.component.d.ts +63 -0
  362. package/src/app/core/install/install-upgrade-card.module.d.ts +9 -0
  363. package/src/app/core/menu/menu.component.d.ts +62 -0
  364. package/src/app/core/menu/menu.model.d.ts +28 -0
  365. package/src/app/core/menu/menu.module.d.ts +10 -0
  366. package/src/app/core/menu/menu.service.d.ts +21 -0
  367. package/src/app/core/offline/update-offline-mode-card.component.d.ts +11 -0
  368. package/src/app/core/offline/update-offline-mode-card.module.d.ts +9 -0
  369. package/src/app/core/peer/select-peer.modal.d.ts +53 -0
  370. package/src/app/core/peer/select-peer.module.d.ts +11 -0
  371. package/src/app/core/register/register-confirm.page.d.ts +24 -0
  372. package/src/app/core/register/register.form.d.ts +48 -0
  373. package/src/app/core/register/register.modal.d.ts +14 -0
  374. package/src/app/core/register/register.module.d.ts +12 -0
  375. package/src/app/core/services/account.service.d.ts +191 -0
  376. package/src/app/core/services/auth-guard.service.d.ts +17 -0
  377. package/src/app/core/services/base-entity-service.class.d.ts +104 -0
  378. package/src/app/core/services/base-graphql-service.class.d.ts +77 -0
  379. package/src/app/core/services/base58.d.ts +7 -0
  380. package/src/app/core/services/config/core.config.d.ts +29 -0
  381. package/src/app/core/services/config.service.d.ts +60 -0
  382. package/src/app/core/services/crypto.service.d.ts +44 -0
  383. package/src/app/core/services/errors.d.ts +51 -0
  384. package/src/app/core/services/local-settings.service.d.ts +90 -0
  385. package/src/app/core/services/model/account.model.d.ts +35 -0
  386. package/src/app/core/services/model/config.model.d.ts +36 -0
  387. package/src/app/core/services/model/department.model.d.ts +11 -0
  388. package/src/app/core/services/model/entity.decorators.d.ts +17 -0
  389. package/src/app/core/services/model/entity.model.d.ts +89 -0
  390. package/src/app/core/services/model/filter.model.d.ts +43 -0
  391. package/src/app/core/services/model/history.model.d.ts +20 -0
  392. package/src/app/core/services/model/model.enum.d.ts +7 -0
  393. package/src/app/core/services/model/peer.model.d.ts +29 -0
  394. package/src/app/core/services/model/person.model.d.ts +31 -0
  395. package/src/app/core/services/model/referential.model.d.ts +77 -0
  396. package/src/app/core/services/model/settings.model.d.ts +26 -0
  397. package/src/app/core/services/model/token.model.d.ts +21 -0
  398. package/src/app/core/services/network.service.d.ts +149 -0
  399. package/src/app/core/services/network.types.d.ts +5 -0
  400. package/src/app/core/services/network.utils.d.ts +31 -0
  401. package/src/app/core/services/pipes/account.pipes.d.ts +15 -0
  402. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +9 -0
  403. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +9 -0
  404. package/src/app/core/services/pipes/usage-mode.pipes.d.ts +15 -0
  405. package/src/app/core/services/platform.service.d.ts +96 -0
  406. package/src/app/core/services/storage/entities-storage.service.d.ts +108 -0
  407. package/src/app/core/services/storage/entity-store.class.d.ts +113 -0
  408. package/src/app/core/services/testing/referential-filter.model.d.ts +9 -0
  409. package/src/app/core/services/testing/referential.validator.d.ts +22 -0
  410. package/src/app/core/services/validator/account.validator.d.ts +17 -0
  411. package/src/app/core/services/validator/base.validator.class.d.ts +21 -0
  412. package/src/app/core/services/validator/local-settings.validator.d.ts +18 -0
  413. package/src/app/core/services/validator/user-settings.validator.d.ts +10 -0
  414. package/src/app/core/services/validator/user-token.validator.d.ts +13 -0
  415. package/src/app/core/settings/settings.module.d.ts +10 -0
  416. package/src/app/core/settings/settings.page.d.ts +68 -0
  417. package/src/app/core/table/actions-column.component.d.ts +48 -0
  418. package/src/app/core/table/async-table.class.d.ts +383 -0
  419. package/src/app/core/table/entities-async-table-datasource.class.d.ts +80 -0
  420. package/src/app/core/table/entities-table-datasource.class.d.ts +94 -0
  421. package/src/app/core/table/memory-table.class.d.ts +25 -0
  422. package/src/app/core/table/table-select-columns.component.d.ts +22 -0
  423. package/src/app/core/table/table.class.d.ts +386 -0
  424. package/src/app/core/table/table.model.d.ts +26 -0
  425. package/src/app/core/table/table.module.d.ts +10 -0
  426. package/src/app/core/table/table.utils.d.ts +11 -0
  427. package/src/app/core/table/testing/table-validator.service.d.ts +17 -0
  428. package/src/app/core/table/testing/table.testing.d.ts +53 -0
  429. package/src/app/core/table/testing/table.testing.module.d.ts +11 -0
  430. package/src/app/shared/alerts.d.ts +53 -0
  431. package/src/app/shared/audio/audio.d.ts +44 -0
  432. package/src/app/shared/audio/audio.testing.d.ts +13 -0
  433. package/src/app/shared/audio/audio.testing.module.d.ts +11 -0
  434. package/src/app/shared/capacitor/keyboard.d.ts +16 -0
  435. package/src/app/shared/capacitor/plugins.d.ts +7 -0
  436. package/src/app/shared/constants.d.ts +7 -0
  437. package/src/app/shared/dates.d.ts +39 -0
  438. package/src/app/shared/debug/debug-service.class.d.ts +5 -0
  439. package/src/app/shared/debug/debug.component.d.ts +13 -0
  440. package/src/app/shared/debug/debug.module.d.ts +12 -0
  441. package/src/app/shared/directives/autofocus.directive.d.ts +19 -0
  442. package/src/app/shared/directives/autotitle.directive.d.ts +10 -0
  443. package/src/app/shared/directives/directives.module.d.ts +12 -0
  444. package/src/app/shared/directives/drag-and-drop.directive.d.ts +17 -0
  445. package/src/app/shared/directives/ng-var.directive.d.ts +12 -0
  446. package/src/app/shared/directives/resizable/resizable.component.d.ts +21 -0
  447. package/src/app/shared/directives/resizable/resizable.directive.d.ts +12 -0
  448. package/src/app/shared/directives/resizable/resizable.module.d.ts +8 -0
  449. package/src/app/shared/events.d.ts +27 -0
  450. package/src/app/shared/file/csv.utils.d.ts +19 -0
  451. package/src/app/shared/file/file.service.d.ts +23 -0
  452. package/src/app/shared/file/file.utils.d.ts +20 -0
  453. package/src/app/shared/file/images.utils.d.ts +19 -0
  454. package/src/app/shared/file/json.utils.d.ts +16 -0
  455. package/src/app/shared/file/uri.utils.d.ts +7 -0
  456. package/src/app/shared/focusable.d.ts +4 -0
  457. package/src/app/shared/form/field.component.d.ts +71 -0
  458. package/src/app/shared/form/field.model.d.ts +37 -0
  459. package/src/app/shared/form/loading-spinner.d.ts +8 -0
  460. package/src/app/shared/forms.d.ts +89 -0
  461. package/src/app/shared/functions.d.ts +132 -0
  462. package/src/app/shared/geolocation/geolocation.utils.d.ts +19 -0
  463. package/src/app/shared/gesture/gesture-config.d.ts +15 -0
  464. package/src/app/shared/gesture/hammer.utils.d.ts +16 -0
  465. package/src/app/shared/graph/colors.utils.d.ts +17 -0
  466. package/src/app/shared/graph/graph-colors.d.ts +63 -0
  467. package/src/app/shared/guard/component-dirty.guard.d.ts +19 -0
  468. package/src/app/shared/help/help.modal.d.ts +33 -0
  469. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +10 -0
  470. package/src/app/shared/hotkeys/hotkeys.service.d.ts +28 -0
  471. package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +11 -0
  472. package/src/app/shared/http/http.utils.d.ts +27 -0
  473. package/src/app/shared/image/gallery/image-gallery.component.d.ts +98 -0
  474. package/src/app/shared/image/gallery/image-gallery.module.d.ts +14 -0
  475. package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +12 -0
  476. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +33 -0
  477. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +16 -0
  478. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +12 -0
  479. package/src/app/shared/image/image.model.d.ts +5 -0
  480. package/src/app/shared/image/image.module.d.ts +8 -0
  481. package/src/app/shared/image/image.service.d.ts +32 -0
  482. package/src/app/shared/inputs.d.ts +32 -0
  483. package/src/app/shared/interceptors/progess.interceptor.d.ts +8 -0
  484. package/src/app/shared/logging/log-level.model.d.ts +38 -0
  485. package/src/app/shared/logging/logger.model.d.ts +68 -0
  486. package/src/app/shared/logging/logging-service.class.d.ts +39 -0
  487. package/src/app/shared/logging/logging-service.config.d.ts +25 -0
  488. package/src/app/shared/logging/logging-service.module.d.ts +9 -0
  489. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +36 -0
  490. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +138 -0
  491. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +21 -0
  492. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +4 -0
  493. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +45 -0
  494. package/src/app/shared/material/badge/badge.directive.d.ts +37 -0
  495. package/src/app/shared/material/badge/badge.module.d.ts +10 -0
  496. package/src/app/shared/material/badge/badge.test.d.ts +21 -0
  497. package/src/app/shared/material/boolean/boolean.module.d.ts +19 -0
  498. package/src/app/shared/material/boolean/material.boolean.d.ts +66 -0
  499. package/src/app/shared/material/chips/chips.module.d.ts +21 -0
  500. package/src/app/shared/material/chips/material.chips.d.ts +126 -0
  501. package/src/app/shared/material/chips/testing/chips.test.d.ts +31 -0
  502. package/src/app/shared/material/datetime/datetime.module.d.ts +24 -0
  503. package/src/app/shared/material/datetime/material.date.d.ts +74 -0
  504. package/src/app/shared/material/datetime/material.dateshort.d.ts +75 -0
  505. package/src/app/shared/material/datetime/material.datetime.d.ts +100 -0
  506. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +31 -0
  507. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +30 -0
  508. package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +29 -0
  509. package/src/app/shared/material/duration/duration.module.d.ts +18 -0
  510. package/src/app/shared/material/duration/duration.utils.d.ts +3 -0
  511. package/src/app/shared/material/duration/material.duration.d.ts +57 -0
  512. package/src/app/shared/material/latlong/latlong.utils.d.ts +13 -0
  513. package/src/app/shared/material/latlong/material.latlong.d.ts +65 -0
  514. package/src/app/shared/material/latlong/material.latlong.module.d.ts +19 -0
  515. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +21 -0
  516. package/src/app/shared/material/material.animations.d.ts +4 -0
  517. package/src/app/shared/material/material.module.d.ts +45 -0
  518. package/src/app/shared/material/material.testing.module.d.ts +25 -0
  519. package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +22 -0
  520. package/src/app/shared/material/numpad/numpad.component.d.ts +26 -0
  521. package/src/app/shared/material/numpad/numpad.container.d.ts +40 -0
  522. package/src/app/shared/material/numpad/numpad.content.d.ts +7 -0
  523. package/src/app/shared/material/numpad/numpad.directive.d.ts +35 -0
  524. package/src/app/shared/material/numpad/numpad.dom-service.d.ts +16 -0
  525. package/src/app/shared/material/numpad/numpad.model.d.ts +30 -0
  526. package/src/app/shared/material/numpad/numpad.module.d.ts +16 -0
  527. package/src/app/shared/material/numpad/testing/numpad.test.d.ts +13 -0
  528. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +15 -0
  529. package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +10 -0
  530. package/src/app/shared/material/swipe/material.swipe.d.ts +89 -0
  531. package/src/app/shared/material/swipe/swipe.module.d.ts +15 -0
  532. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +22 -0
  533. package/src/app/shared/modules.d.ts +8 -0
  534. package/src/app/shared/observables.d.ts +29 -0
  535. package/src/app/shared/pipes/arrays.pipe.d.ts +54 -0
  536. package/src/app/shared/pipes/colors.pipe.d.ts +9 -0
  537. package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +23 -0
  538. package/src/app/shared/pipes/date-format.pipe.d.ts +34 -0
  539. package/src/app/shared/pipes/date-from-now.pipe.d.ts +12 -0
  540. package/src/app/shared/pipes/duration.pipe.d.ts +13 -0
  541. package/src/app/shared/pipes/file-size.pipe.d.ts +30 -0
  542. package/src/app/shared/pipes/form.pipes.d.ts +59 -0
  543. package/src/app/shared/pipes/highlight.pipe.d.ts +11 -0
  544. package/src/app/shared/pipes/latlong-format.pipe.d.ts +20 -0
  545. package/src/app/shared/pipes/maps.pipe.d.ts +22 -0
  546. package/src/app/shared/pipes/math.pipes.d.ts +20 -0
  547. package/src/app/shared/pipes/ng-init.pipe.d.ts +8 -0
  548. package/src/app/shared/pipes/number-format.pipe.d.ts +10 -0
  549. package/src/app/shared/pipes/pipes.module.d.ts +27 -0
  550. package/src/app/shared/pipes/property.pipes.d.ts +26 -0
  551. package/src/app/shared/pipes/string.pipes.d.ts +47 -0
  552. package/src/app/shared/pipes/translate-context.pipe.d.ts +17 -0
  553. package/src/app/shared/pipes/types.pipes.d.ts +18 -0
  554. package/src/app/shared/platforms.d.ts +8 -0
  555. package/src/app/shared/services/entity-service.class.d.ts +73 -0
  556. package/src/app/shared/services/job.utils.d.ts +20 -0
  557. package/src/app/shared/services/memory-entity-service.class.d.ts +71 -0
  558. package/src/app/shared/services/progress-bar.service.d.ts +20 -0
  559. package/src/app/shared/services/startable-observable-service.class.d.ts +33 -0
  560. package/src/app/shared/services/startable-service.class.d.ts +34 -0
  561. package/src/app/shared/services/translate-context.service.d.ts +29 -0
  562. package/src/app/shared/services/validator-service.class.d.ts +10 -0
  563. package/src/app/shared/services.d.ts +9 -0
  564. package/src/app/shared/shared-routing.module.d.ts +22 -0
  565. package/src/app/shared/shared.module.d.ts +31 -0
  566. package/src/app/shared/shared.testing.module.d.ts +17 -0
  567. package/src/app/shared/storage/storage-explorer.component.d.ts +58 -0
  568. package/src/app/shared/storage/storage-explorer.module.d.ts +16 -0
  569. package/src/app/shared/storage/storage.service.d.ts +23 -0
  570. package/src/app/shared/storage/storage.utils.d.ts +19 -0
  571. package/src/app/shared/testing/observable.test.d.ts +25 -0
  572. package/src/app/shared/testing/tests.page.d.ts +20 -0
  573. package/src/app/shared/toast/toast.testing.d.ts +15 -0
  574. package/src/app/shared/toast/toast.testing.module.d.ts +11 -0
  575. package/src/app/shared/toast/toasts.d.ts +17 -0
  576. package/src/app/shared/toolbar/modal-toolbar.d.ts +21 -0
  577. package/src/app/shared/toolbar/toolbar.d.ts +63 -0
  578. package/src/app/shared/toolbar/toolbar.module.d.ts +15 -0
  579. package/src/app/shared/types.d.ts +26 -0
  580. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +20 -0
  581. package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +11 -0
  582. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +39 -0
  583. package/src/app/shared/upload-file/upload-file.component.d.ts +48 -0
  584. package/src/app/shared/upload-file/upload-file.model.d.ts +30 -0
  585. package/src/app/shared/validator/form-error-adapter.class.d.ts +27 -0
  586. package/src/app/shared/validator/validators.d.ts +115 -0
  587. package/src/app/shared/version/versions.d.ts +26 -0
  588. package/src/app/social/job/job.module.d.ts +12 -0
  589. package/src/app/social/job/progression/job-progression.component.d.ts +9 -0
  590. package/src/app/social/job/progression/job-progression.icon.d.ts +49 -0
  591. package/src/app/social/job/progression/job-progression.list.d.ts +21 -0
  592. package/src/app/social/job/progression/job-progression.model.d.ts +11 -0
  593. package/src/app/social/job/progression/job-progression.service.d.ts +34 -0
  594. package/src/app/social/job/testing/job-progression.testing.d.ts +17 -0
  595. package/src/app/social/job/testing/job-progression.testing.service.d.ts +17 -0
  596. package/src/app/social/job/testing/job.testing.module.d.ts +11 -0
  597. package/src/app/social/message/message.form.d.ts +30 -0
  598. package/src/app/social/message/message.modal.d.ts +39 -0
  599. package/src/app/social/message/message.model.d.ts +31 -0
  600. package/src/app/social/message/message.module.d.ts +11 -0
  601. package/src/app/social/message/message.service.d.ts +27 -0
  602. package/src/app/social/social.errors.d.ts +9 -0
  603. package/src/app/social/social.module.d.ts +20 -0
  604. package/src/app/social/social.testing.module.d.ts +13 -0
  605. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +31 -0
  606. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +71 -0
  607. package/src/app/social/user-event/testing/user-event.testing.d.ts +34 -0
  608. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +44 -0
  609. package/src/app/social/user-event/testing/user-event.testing.module.d.ts +11 -0
  610. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +41 -0
  611. package/src/app/social/user-event/user-event.model.d.ts +45 -0
  612. package/src/app/social/user-event/user-event.module.d.ts +12 -0
  613. package/src/app/social/user-event/user-event.service.d.ts +124 -0
  614. package/src/environments/environment.class.d.ts +57 -0
  615. package/src/environments/environment.d.ts +3 -0
  616. package/.editorconfig +0 -24
  617. package/.eslintrc.json +0 -74
  618. package/.gitattribute +0 -1
  619. package/.github/CONTRIBUTING.md +0 -10
  620. package/.github/ISSUE_TEMPLATE.md +0 -6
  621. package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
  622. package/.github/github_disclaimer.md +0 -14
  623. package/.gitlab-ci.yml +0 -46
  624. package/.graphqlconfig +0 -15
  625. package/angular.json +0 -230
  626. package/capacitor.config.json +0 -9
  627. package/ionic.config.json +0 -7
  628. package/karma.conf.js +0 -32
  629. package/ng-package.json +0 -19
  630. package/ngcc.config.js +0 -14
  631. package/public_api.ts +0 -343
  632. package/resources/android/build/tools/android-accept-licenses.sh +0 -14
  633. package/resources/android/icon/drawable-hdpi-icon.png +0 -0
  634. package/resources/android/icon/drawable-ldpi-icon.png +0 -0
  635. package/resources/android/icon/drawable-mdpi-icon.png +0 -0
  636. package/resources/android/icon/drawable-xhdpi-icon.png +0 -0
  637. package/resources/android/icon/drawable-xxhdpi-icon.png +0 -0
  638. package/resources/android/icon/drawable-xxxhdpi-icon.png +0 -0
  639. package/resources/android/splash/drawable-land-hdpi-screen.png +0 -0
  640. package/resources/android/splash/drawable-land-ldpi-screen.png +0 -0
  641. package/resources/android/splash/drawable-land-mdpi-screen.png +0 -0
  642. package/resources/android/splash/drawable-land-xhdpi-screen.png +0 -0
  643. package/resources/android/splash/drawable-land-xxhdpi-screen.png +0 -0
  644. package/resources/android/splash/drawable-land-xxxhdpi-screen.png +0 -0
  645. package/resources/android/splash/drawable-port-hdpi-screen.png +0 -0
  646. package/resources/android/splash/drawable-port-ldpi-screen.png +0 -0
  647. package/resources/android/splash/drawable-port-mdpi-screen.png +0 -0
  648. package/resources/android/splash/drawable-port-xhdpi-screen.png +0 -0
  649. package/resources/android/splash/drawable-port-xxhdpi-screen.png +0 -0
  650. package/resources/android/splash/drawable-port-xxxhdpi-screen.png +0 -0
  651. package/resources/android/splash/drawable-xxxhdpi-screen.png +0 -0
  652. package/resources/icon/TODO.md +0 -11
  653. package/resources/icon.png +0 -0
  654. package/resources/icon.png.md5 +0 -1
  655. package/resources/icon.xcf +0 -0
  656. package/resources/ios/icon/icon-1024.png +0 -0
  657. package/resources/ios/icon/icon-108@2x.png +0 -0
  658. package/resources/ios/icon/icon-20.png +0 -0
  659. package/resources/ios/icon/icon-20@2x.png +0 -0
  660. package/resources/ios/icon/icon-20@3x.png +0 -0
  661. package/resources/ios/icon/icon-24@2x.png +0 -0
  662. package/resources/ios/icon/icon-27.5@2x.png +0 -0
  663. package/resources/ios/icon/icon-29.png +0 -0
  664. package/resources/ios/icon/icon-29@2x.png +0 -0
  665. package/resources/ios/icon/icon-29@3x.png +0 -0
  666. package/resources/ios/icon/icon-40.png +0 -0
  667. package/resources/ios/icon/icon-40@2x.png +0 -0
  668. package/resources/ios/icon/icon-40@3x.png +0 -0
  669. package/resources/ios/icon/icon-44@2x.png +0 -0
  670. package/resources/ios/icon/icon-50.png +0 -0
  671. package/resources/ios/icon/icon-50@2x.png +0 -0
  672. package/resources/ios/icon/icon-60.png +0 -0
  673. package/resources/ios/icon/icon-60@2x.png +0 -0
  674. package/resources/ios/icon/icon-60@3x.png +0 -0
  675. package/resources/ios/icon/icon-72.png +0 -0
  676. package/resources/ios/icon/icon-72@2x.png +0 -0
  677. package/resources/ios/icon/icon-76.png +0 -0
  678. package/resources/ios/icon/icon-76@2x.png +0 -0
  679. package/resources/ios/icon/icon-83.5@2x.png +0 -0
  680. package/resources/ios/icon/icon-86@2x.png +0 -0
  681. package/resources/ios/icon/icon-98@2x.png +0 -0
  682. package/resources/ios/icon/icon-small.png +0 -0
  683. package/resources/ios/icon/icon-small@2x.png +0 -0
  684. package/resources/ios/icon/icon-small@3x.png +0 -0
  685. package/resources/ios/icon/icon.png +0 -0
  686. package/resources/ios/icon/icon@2x.png +0 -0
  687. package/resources/ios/splash/Default-1792h~iphone.png +0 -0
  688. package/resources/ios/splash/Default-2436h.png +0 -0
  689. package/resources/ios/splash/Default-2688h~iphone.png +0 -0
  690. package/resources/ios/splash/Default-568h@2x~iphone.png +0 -0
  691. package/resources/ios/splash/Default-667h.png +0 -0
  692. package/resources/ios/splash/Default-736h.png +0 -0
  693. package/resources/ios/splash/Default-Landscape-1792h~iphone.png +0 -0
  694. package/resources/ios/splash/Default-Landscape-2436h.png +0 -0
  695. package/resources/ios/splash/Default-Landscape-2688h~iphone.png +0 -0
  696. package/resources/ios/splash/Default-Landscape-736h.png +0 -0
  697. package/resources/ios/splash/Default-Landscape@2x~ipad.png +0 -0
  698. package/resources/ios/splash/Default-Landscape@~ipadpro.png +0 -0
  699. package/resources/ios/splash/Default-Landscape~ipad.png +0 -0
  700. package/resources/ios/splash/Default-Portrait@2x~ipad.png +0 -0
  701. package/resources/ios/splash/Default-Portrait@~ipadpro.png +0 -0
  702. package/resources/ios/splash/Default-Portrait~ipad.png +0 -0
  703. package/resources/ios/splash/Default@2x~iphone.png +0 -0
  704. package/resources/ios/splash/Default@2x~universal~anyany.png +0 -0
  705. package/resources/ios/splash/Default~iphone.png +0 -0
  706. package/resources/splash.png +0 -0
  707. package/resources/splash.png.md5 +0 -1
  708. package/scripts/build-android.sh +0 -18
  709. package/scripts/build-i18n.js +0 -24
  710. package/scripts/docker-start.sh +0 -6
  711. package/scripts/emulate-android.sh +0 -17
  712. package/scripts/env-android.sh +0 -83
  713. package/scripts/env-clean.sh +0 -23
  714. package/scripts/env-global.sh +0 -156
  715. package/scripts/install-android-sdk-tools.sh +0 -73
  716. package/scripts/ionic-update.sh +0 -24
  717. package/scripts/node/playground.ts +0 -9
  718. package/scripts/node/resources.js +0 -90
  719. package/scripts/release.sh +0 -149
  720. package/scripts/run-android.sh +0 -59
  721. package/scripts/test.sh +0 -19
  722. package/src/app/admin/admin-routing.module.ts +0 -30
  723. package/src/app/admin/admin.module.ts +0 -23
  724. package/src/app/admin/services/filter/person.filter.ts +0 -77
  725. package/src/app/admin/services/person.service.ts +0 -212
  726. package/src/app/admin/services/validator/person.validator.ts +0 -37
  727. package/src/app/admin/users/users.html +0 -427
  728. package/src/app/admin/users/users.module.ts +0 -34
  729. package/src/app/admin/users/users.scss +0 -59
  730. package/src/app/admin/users/users.ts +0 -257
  731. package/src/app/app-routing.module.ts +0 -126
  732. package/src/app/app.component.html +0 -12
  733. package/src/app/app.component.scss +0 -4
  734. package/src/app/app.component.ts +0 -205
  735. package/src/app/app.module.ts +0 -326
  736. package/src/app/core/about/about.modal.html +0 -140
  737. package/src/app/core/about/about.modal.scss +0 -23
  738. package/src/app/core/about/about.modal.ts +0 -71
  739. package/src/app/core/about/about.module.ts +0 -24
  740. package/src/app/core/account/account.module.ts +0 -38
  741. package/src/app/core/account/account.page.html +0 -241
  742. package/src/app/core/account/account.page.scss +0 -21
  743. package/src/app/core/account/account.page.ts +0 -366
  744. package/src/app/core/account/new-token.modal.html +0 -120
  745. package/src/app/core/account/new-token.modal.ts +0 -138
  746. package/src/app/core/account/token.table.html +0 -177
  747. package/src/app/core/account/token.table.scss +0 -7
  748. package/src/app/core/account/token.table.ts +0 -141
  749. package/src/app/core/auth/auth.form.html +0 -77
  750. package/src/app/core/auth/auth.form.scss +0 -1
  751. package/src/app/core/auth/auth.form.ts +0 -145
  752. package/src/app/core/auth/auth.modal.html +0 -57
  753. package/src/app/core/auth/auth.modal.scss +0 -1
  754. package/src/app/core/auth/auth.modal.ts +0 -80
  755. package/src/app/core/auth/auth.module.ts +0 -33
  756. package/src/app/core/core.module.ts +0 -100
  757. package/src/app/core/core.testing.module.ts +0 -64
  758. package/src/app/core/form/buttons/form-buttons-bar.component.html +0 -59
  759. package/src/app/core/form/buttons/form-buttons-bar.component.scss +0 -14
  760. package/src/app/core/form/buttons/form-buttons-bar.component.ts +0 -70
  761. package/src/app/core/form/buttons/form-buttons-bar.module.ts +0 -24
  762. package/src/app/core/form/entity/editor.class.ts +0 -803
  763. package/src/app/core/form/entity/entity-editor-modal.class.ts +0 -537
  764. package/src/app/core/form/entity/entity-editor.class.ts +0 -885
  765. package/src/app/core/form/entity/entity-metadata.component.html +0 -53
  766. package/src/app/core/form/entity/entity-metadata.component.scss +0 -28
  767. package/src/app/core/form/entity/entity-metadata.component.ts +0 -19
  768. package/src/app/core/form/entity/entity.module.ts +0 -25
  769. package/src/app/core/form/form.class.ts +0 -401
  770. package/src/app/core/form/form.module.ts +0 -37
  771. package/src/app/core/form/form.utils.ts +0 -639
  772. package/src/app/core/form/list/list.form.html +0 -67
  773. package/src/app/core/form/list/list.form.scss +0 -40
  774. package/src/app/core/form/list/list.form.ts +0 -278
  775. package/src/app/core/form/list/list.module.ts +0 -25
  776. package/src/app/core/form/properties/properties.form.html +0 -129
  777. package/src/app/core/form/properties/properties.form.ts +0 -147
  778. package/src/app/core/form/properties/properties.module.ts +0 -30
  779. package/src/app/core/form/properties/properties.table.html +0 -219
  780. package/src/app/core/form/properties/properties.table.scss +0 -0
  781. package/src/app/core/form/properties/properties.table.ts +0 -291
  782. package/src/app/core/form/properties/property.validator.ts +0 -22
  783. package/src/app/core/form/properties/testing/properties-form.test.html +0 -21
  784. package/src/app/core/form/properties/testing/properties-form.test.ts +0 -102
  785. package/src/app/core/form/properties/testing/properties-form.testing.module.ts +0 -25
  786. package/src/app/core/form/text-popover/testing/text-popover.testing.html +0 -45
  787. package/src/app/core/form/text-popover/testing/text-popover.testing.module.ts +0 -32
  788. package/src/app/core/form/text-popover/testing/text-popover.testing.ts +0 -77
  789. package/src/app/core/form/text-popover/text-form.component.html +0 -44
  790. package/src/app/core/form/text-popover/text-form.component.scss +0 -8
  791. package/src/app/core/form/text-popover/text-form.component.ts +0 -65
  792. package/src/app/core/form/text-popover/text-popover.component.html +0 -86
  793. package/src/app/core/form/text-popover/text-popover.component.scss +0 -7
  794. package/src/app/core/form/text-popover/text-popover.component.ts +0 -165
  795. package/src/app/core/form/text-popover/text-popover.module.ts +0 -27
  796. package/src/app/core/graphql/graphql.module.ts +0 -17
  797. package/src/app/core/graphql/graphql.service.ts +0 -969
  798. package/src/app/core/graphql/graphql.utils.ts +0 -167
  799. package/src/app/core/home/home.html +0 -211
  800. package/src/app/core/home/home.module.ts +0 -32
  801. package/src/app/core/home/home.scss +0 -242
  802. package/src/app/core/home/home.ts +0 -298
  803. package/src/app/core/icon/icon.component.html +0 -15
  804. package/src/app/core/icon/icon.component.ts +0 -23
  805. package/src/app/core/icon/icon.module.ts +0 -22
  806. package/src/app/core/install/install-upgrade-card.component.html +0 -144
  807. package/src/app/core/install/install-upgrade-card.component.scss +0 -4
  808. package/src/app/core/install/install-upgrade-card.component.ts +0 -412
  809. package/src/app/core/install/install-upgrade-card.module.ts +0 -23
  810. package/src/app/core/menu/menu.component.html +0 -135
  811. package/src/app/core/menu/menu.component.scss +0 -225
  812. package/src/app/core/menu/menu.component.ts +0 -352
  813. package/src/app/core/menu/menu.model.ts +0 -64
  814. package/src/app/core/menu/menu.module.ts +0 -27
  815. package/src/app/core/menu/menu.service.ts +0 -62
  816. package/src/app/core/offline/update-offline-mode-card.component.html +0 -45
  817. package/src/app/core/offline/update-offline-mode-card.component.scss +0 -4
  818. package/src/app/core/offline/update-offline-mode-card.component.ts +0 -28
  819. package/src/app/core/offline/update-offline-mode-card.module.ts +0 -24
  820. package/src/app/core/peer/select-peer.modal.html +0 -123
  821. package/src/app/core/peer/select-peer.modal.scss +0 -20
  822. package/src/app/core/peer/select-peer.modal.ts +0 -197
  823. package/src/app/core/peer/select-peer.module.ts +0 -28
  824. package/src/app/core/register/register-confirm.page.html +0 -55
  825. package/src/app/core/register/register-confirm.page.scss +0 -121
  826. package/src/app/core/register/register-confirm.page.ts +0 -94
  827. package/src/app/core/register/register.form.html +0 -125
  828. package/src/app/core/register/register.form.scss +0 -10
  829. package/src/app/core/register/register.form.ts +0 -213
  830. package/src/app/core/register/register.modal.html +0 -70
  831. package/src/app/core/register/register.modal.ts +0 -52
  832. package/src/app/core/register/register.module.ts +0 -31
  833. package/src/app/core/services/account.service.ts +0 -1431
  834. package/src/app/core/services/auth-guard.service.ts +0 -70
  835. package/src/app/core/services/base-entity-service.class.ts +0 -598
  836. package/src/app/core/services/base-graphql-service.class.ts +0 -298
  837. package/src/app/core/services/base58.ts +0 -83
  838. package/src/app/core/services/config/account.config.ts +0 -35
  839. package/src/app/core/services/config/core.config.ts +0 -180
  840. package/src/app/core/services/config.service.ts +0 -414
  841. package/src/app/core/services/crypto.service.ts +0 -126
  842. package/src/app/core/services/errors.ts +0 -67
  843. package/src/app/core/services/local-settings.service.spec.ts +0 -32
  844. package/src/app/core/services/local-settings.service.ts +0 -548
  845. package/src/app/core/services/model/account.model.ts +0 -141
  846. package/src/app/core/services/model/config.model.ts +0 -122
  847. package/src/app/core/services/model/department.model.ts +0 -34
  848. package/src/app/core/services/model/entity.decorators.ts +0 -112
  849. package/src/app/core/services/model/entity.model.ts +0 -326
  850. package/src/app/core/services/model/filter.model.ts +0 -139
  851. package/src/app/core/services/model/history.model.ts +0 -25
  852. package/src/app/core/services/model/model.enum.ts +0 -11
  853. package/src/app/core/services/model/peer.model.ts +0 -86
  854. package/src/app/core/services/model/person.model.ts +0 -112
  855. package/src/app/core/services/model/referential.model.ts +0 -244
  856. package/src/app/core/services/model/settings.model.ts +0 -32
  857. package/src/app/core/services/model/token.model.ts +0 -54
  858. package/src/app/core/services/network.service.spec.ts +0 -49
  859. package/src/app/core/services/network.service.ts +0 -729
  860. package/src/app/core/services/network.types.ts +0 -26
  861. package/src/app/core/services/network.utils.ts +0 -57
  862. package/src/app/core/services/pipes/account.pipes.ts +0 -25
  863. package/src/app/core/services/pipes/department-to-string.pipe.ts +0 -15
  864. package/src/app/core/services/pipes/person-to-string.pipe.ts +0 -15
  865. package/src/app/core/services/pipes/usage-mode.pipes.ts +0 -26
  866. package/src/app/core/services/platform.service.spec.ts +0 -56
  867. package/src/app/core/services/platform.service.ts +0 -605
  868. package/src/app/core/services/storage/entities-storage.service.ts +0 -542
  869. package/src/app/core/services/storage/entity-store.class.ts +0 -598
  870. package/src/app/core/services/testing/referential-filter.model.ts +0 -28
  871. package/src/app/core/services/testing/referential.validator.ts +0 -57
  872. package/src/app/core/services/validator/account.validator.ts +0 -58
  873. package/src/app/core/services/validator/base.validator.class.ts +0 -54
  874. package/src/app/core/services/validator/local-settings.validator.ts +0 -72
  875. package/src/app/core/services/validator/user-settings.validator.ts +0 -25
  876. package/src/app/core/services/validator/user-token.validator.ts +0 -55
  877. package/src/app/core/settings/settings.module.ts +0 -24
  878. package/src/app/core/settings/settings.page.html +0 -264
  879. package/src/app/core/settings/settings.page.ts +0 -365
  880. package/src/app/core/table/actions-column.component.html +0 -91
  881. package/src/app/core/table/actions-column.component.ts +0 -70
  882. package/src/app/core/table/async-table.class.ts +0 -1934
  883. package/src/app/core/table/entities-async-table-datasource.class.ts +0 -482
  884. package/src/app/core/table/entities-table-datasource.class.ts +0 -496
  885. package/src/app/core/table/memory-table.class.ts +0 -65
  886. package/src/app/core/table/table-select-columns.component.html +0 -58
  887. package/src/app/core/table/table-select-columns.component.ts +0 -50
  888. package/src/app/core/table/table.class.ts +0 -1973
  889. package/src/app/core/table/table.model.ts +0 -35
  890. package/src/app/core/table/table.module.ts +0 -26
  891. package/src/app/core/table/table.utils.ts +0 -38
  892. package/src/app/core/table/testing/multi-table.testing.ts +0 -261
  893. package/src/app/core/table/testing/table-validator.service.ts +0 -25
  894. package/src/app/core/table/testing/table.testing.html +0 -396
  895. package/src/app/core/table/testing/table.testing.module.ts +0 -25
  896. package/src/app/core/table/testing/table.testing.scss +0 -23
  897. package/src/app/core/table/testing/table.testing.ts +0 -292
  898. package/src/app/shared/alerts.ts +0 -292
  899. package/src/app/shared/audio/audio.testing.html +0 -33
  900. package/src/app/shared/audio/audio.testing.module.ts +0 -32
  901. package/src/app/shared/audio/audio.testing.ts +0 -31
  902. package/src/app/shared/audio/audio.ts +0 -278
  903. package/src/app/shared/base64.utils.ts +0 -66
  904. package/src/app/shared/capacitor/keyboard.ts +0 -40
  905. package/src/app/shared/capacitor/plugins.ts +0 -12
  906. package/src/app/shared/constants.ts +0 -12
  907. package/src/app/shared/dates.ts +0 -163
  908. package/src/app/shared/debug/debug-service.class.ts +0 -8
  909. package/src/app/shared/debug/debug.component.html +0 -13
  910. package/src/app/shared/debug/debug.component.scss +0 -24
  911. package/src/app/shared/debug/debug.component.spec.ts +0 -25
  912. package/src/app/shared/debug/debug.component.ts +0 -27
  913. package/src/app/shared/debug/debug.module.ts +0 -28
  914. package/src/app/shared/directives/autofocus.directive.ts +0 -109
  915. package/src/app/shared/directives/autotitle.directive.ts +0 -24
  916. package/src/app/shared/directives/directives.module.ts +0 -29
  917. package/src/app/shared/directives/drag-and-drop.directive.ts +0 -47
  918. package/src/app/shared/directives/ng-var.directive.ts +0 -32
  919. package/src/app/shared/directives/resizable/resizable.component.ts +0 -47
  920. package/src/app/shared/directives/resizable/resizable.directive.ts +0 -43
  921. package/src/app/shared/directives/resizable/resizable.module.ts +0 -9
  922. package/src/app/shared/directives/resizable/resizable.style.scss +0 -44
  923. package/src/app/shared/directives/resizable/resizable.template.html +0 -6
  924. package/src/app/shared/events.ts +0 -96
  925. package/src/app/shared/file/csv.utils.ts +0 -94
  926. package/src/app/shared/file/file.service.ts +0 -132
  927. package/src/app/shared/file/file.utils.ts +0 -138
  928. package/src/app/shared/file/images.utils.ts +0 -198
  929. package/src/app/shared/file/json.utils.ts +0 -73
  930. package/src/app/shared/file/uri.utils.ts +0 -25
  931. package/src/app/shared/focusable.ts +0 -10
  932. package/src/app/shared/form/field.component.html +0 -261
  933. package/src/app/shared/form/field.component.scss +0 -7
  934. package/src/app/shared/form/field.component.ts +0 -318
  935. package/src/app/shared/form/field.model.ts +0 -64
  936. package/src/app/shared/form/loading-spinner.ts +0 -16
  937. package/src/app/shared/forms.ts +0 -458
  938. package/src/app/shared/functions.ts +0 -492
  939. package/src/app/shared/geolocation/geolocation.utils.ts +0 -101
  940. package/src/app/shared/gesture/gesture-config.ts +0 -45
  941. package/src/app/shared/gesture/hammer.utils.ts +0 -14
  942. package/src/app/shared/graph/colors.utils.ts +0 -74
  943. package/src/app/shared/graph/graph-colors.ts +0 -295
  944. package/src/app/shared/guard/component-dirty.guard.ts +0 -70
  945. package/src/app/shared/help/help.modal.html +0 -42
  946. package/src/app/shared/help/help.modal.ts +0 -61
  947. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.html +0 -11
  948. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.scss +0 -39
  949. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.ts +0 -16
  950. package/src/app/shared/hotkeys/hotkeys.service.ts +0 -89
  951. package/src/app/shared/hotkeys/shared-hotkeys.module.ts +0 -27
  952. package/src/app/shared/http/http.utils.ts +0 -89
  953. package/src/app/shared/image/gallery/image-gallery.component.html +0 -231
  954. package/src/app/shared/image/gallery/image-gallery.component.scss +0 -196
  955. package/src/app/shared/image/gallery/image-gallery.component.ts +0 -389
  956. package/src/app/shared/image/gallery/image-gallery.module.ts +0 -34
  957. package/src/app/shared/image/gallery/testing/gallegry.model.testing.ts +0 -27
  958. package/src/app/shared/image/gallery/testing/gallery.service.testing.ts +0 -102
  959. package/src/app/shared/image/gallery/testing/gallery.testing.html +0 -15
  960. package/src/app/shared/image/gallery/testing/gallery.testing.module.ts +0 -39
  961. package/src/app/shared/image/gallery/testing/gallery.testing.ts +0 -38
  962. package/src/app/shared/image/image.model.ts +0 -6
  963. package/src/app/shared/image/image.module.ts +0 -16
  964. package/src/app/shared/image/image.service.ts +0 -94
  965. package/src/app/shared/image/image.testing.module.ts +0 -23
  966. package/src/app/shared/inputs.ts +0 -282
  967. package/src/app/shared/interceptors/progess.interceptor.ts +0 -25
  968. package/src/app/shared/logging/log-level.model.ts +0 -53
  969. package/src/app/shared/logging/logger.model.ts +0 -120
  970. package/src/app/shared/logging/logging-service.class.ts +0 -134
  971. package/src/app/shared/logging/logging-service.config.ts +0 -29
  972. package/src/app/shared/logging/logging-service.module.ts +0 -22
  973. package/src/app/shared/material/autocomplete/material.autocomplete.config.ts +0 -83
  974. package/src/app/shared/material/autocomplete/material.autocomplete.html +0 -262
  975. package/src/app/shared/material/autocomplete/material.autocomplete.module.ts +0 -45
  976. package/src/app/shared/material/autocomplete/material.autocomplete.scss +0 -21
  977. package/src/app/shared/material/autocomplete/material.autocomplete.ts +0 -1022
  978. package/src/app/shared/material/autocomplete/material.autocomplete.utils.ts +0 -20
  979. package/src/app/shared/material/autocomplete/testing/autocomplete.test.html +0 -876
  980. package/src/app/shared/material/autocomplete/testing/autocomplete.test.spec.ts +0 -38
  981. package/src/app/shared/material/autocomplete/testing/autocomplete.test.ts +0 -247
  982. package/src/app/shared/material/badge/badge.directive.ts +0 -164
  983. package/src/app/shared/material/badge/badge.module.ts +0 -22
  984. package/src/app/shared/material/badge/badge.test.html +0 -261
  985. package/src/app/shared/material/badge/badge.test.ts +0 -36
  986. package/src/app/shared/material/boolean/boolean.module.ts +0 -40
  987. package/src/app/shared/material/boolean/material.boolean.html +0 -155
  988. package/src/app/shared/material/boolean/material.boolean.scss +0 -34
  989. package/src/app/shared/material/boolean/material.boolean.ts +0 -239
  990. package/src/app/shared/material/chips/chips.module.ts +0 -44
  991. package/src/app/shared/material/chips/material.chips.html +0 -146
  992. package/src/app/shared/material/chips/material.chips.scss +0 -65
  993. package/src/app/shared/material/chips/material.chips.ts +0 -768
  994. package/src/app/shared/material/chips/testing/chips.test.html +0 -137
  995. package/src/app/shared/material/chips/testing/chips.test.ts +0 -175
  996. package/src/app/shared/material/datetime/datetime.module.ts +0 -52
  997. package/src/app/shared/material/datetime/material.date.html +0 -132
  998. package/src/app/shared/material/datetime/material.date.scss +0 -17
  999. package/src/app/shared/material/datetime/material.date.ts +0 -408
  1000. package/src/app/shared/material/datetime/material.dateshort.html +0 -134
  1001. package/src/app/shared/material/datetime/material.dateshort.scss +0 -23
  1002. package/src/app/shared/material/datetime/material.dateshort.ts +0 -422
  1003. package/src/app/shared/material/datetime/material.datetime.html +0 -224
  1004. package/src/app/shared/material/datetime/material.datetime.scss +0 -90
  1005. package/src/app/shared/material/datetime/material.datetime.ts +0 -575
  1006. package/src/app/shared/material/datetime/testing/mat-date-time.test.html +0 -354
  1007. package/src/app/shared/material/datetime/testing/mat-date-time.test.ts +0 -134
  1008. package/src/app/shared/material/datetime/testing/mat-date.test.html +0 -418
  1009. package/src/app/shared/material/datetime/testing/mat-date.test.ts +0 -135
  1010. package/src/app/shared/material/datetime/testing/mat-dateshort.test.html +0 -370
  1011. package/src/app/shared/material/datetime/testing/mat-dateshort.test.ts +0 -127
  1012. package/src/app/shared/material/duration/duration.module.ts +0 -39
  1013. package/src/app/shared/material/duration/duration.utils.ts +0 -41
  1014. package/src/app/shared/material/duration/material.duration.html +0 -44
  1015. package/src/app/shared/material/duration/material.duration.scss +0 -28
  1016. package/src/app/shared/material/duration/material.duration.ts +0 -294
  1017. package/src/app/shared/material/latlong/latlong.utils.ts +0 -300
  1018. package/src/app/shared/material/latlong/material.latlong.html +0 -127
  1019. package/src/app/shared/material/latlong/material.latlong.module.ts +0 -40
  1020. package/src/app/shared/material/latlong/material.latlong.scss +0 -48
  1021. package/src/app/shared/material/latlong/material.latlong.ts +0 -421
  1022. package/src/app/shared/material/latlong/testing/latlong.test.html +0 -341
  1023. package/src/app/shared/material/latlong/testing/latlong.test.ts +0 -121
  1024. package/src/app/shared/material/material.animations.ts +0 -129
  1025. package/src/app/shared/material/material.module.ts +0 -94
  1026. package/src/app/shared/material/material.testing.module.ts +0 -135
  1027. package/src/app/shared/material/memory/memory.utils.ts +0 -54
  1028. package/src/app/shared/material/numpad/numpad.animation.ts +0 -1
  1029. package/src/app/shared/material/numpad/numpad.append-to-input.directive.ts +0 -109
  1030. package/src/app/shared/material/numpad/numpad.component.ts +0 -78
  1031. package/src/app/shared/material/numpad/numpad.container.html +0 -32
  1032. package/src/app/shared/material/numpad/numpad.container.scss +0 -50
  1033. package/src/app/shared/material/numpad/numpad.container.ts +0 -176
  1034. package/src/app/shared/material/numpad/numpad.content.html +0 -13
  1035. package/src/app/shared/material/numpad/numpad.content.ts +0 -10
  1036. package/src/app/shared/material/numpad/numpad.directive.ts +0 -173
  1037. package/src/app/shared/material/numpad/numpad.dom-service.ts +0 -46
  1038. package/src/app/shared/material/numpad/numpad.model.ts +0 -55
  1039. package/src/app/shared/material/numpad/numpad.module.ts +0 -38
  1040. package/src/app/shared/material/numpad/testing/numpad.test.html +0 -146
  1041. package/src/app/shared/material/numpad/testing/numpad.test.ts +0 -55
  1042. package/src/app/shared/material/paginator/material.paginator-i18n.ts +0 -49
  1043. package/src/app/shared/material/stepper/material.stepper-i18n.ts +0 -18
  1044. package/src/app/shared/material/swipe/material.swipe.html +0 -63
  1045. package/src/app/shared/material/swipe/material.swipe.scss +0 -39
  1046. package/src/app/shared/material/swipe/material.swipe.ts +0 -350
  1047. package/src/app/shared/material/swipe/swipe.module.ts +0 -33
  1048. package/src/app/shared/material/swipe/testing/swipe.test.html +0 -128
  1049. package/src/app/shared/material/swipe/testing/swipe.test.ts +0 -81
  1050. package/src/app/shared/modules.ts +0 -11
  1051. package/src/app/shared/observables.ts +0 -132
  1052. package/src/app/shared/pipes/arrays.pipe.ts +0 -111
  1053. package/src/app/shared/pipes/colors.pipe.ts +0 -19
  1054. package/src/app/shared/pipes/date-diff-duration.pipe.ts +0 -48
  1055. package/src/app/shared/pipes/date-format.pipe.ts +0 -78
  1056. package/src/app/shared/pipes/date-from-now.pipe.ts +0 -20
  1057. package/src/app/shared/pipes/duration.pipe.spec.ts +0 -51
  1058. package/src/app/shared/pipes/duration.pipe.ts +0 -34
  1059. package/src/app/shared/pipes/file-size.pipe.ts +0 -58
  1060. package/src/app/shared/pipes/form.pipes.ts +0 -204
  1061. package/src/app/shared/pipes/highlight.pipe.ts +0 -37
  1062. package/src/app/shared/pipes/latlong-format.pipe.ts +0 -30
  1063. package/src/app/shared/pipes/maps.pipe.ts +0 -39
  1064. package/src/app/shared/pipes/math.pipes.ts +0 -39
  1065. package/src/app/shared/pipes/ng-init.pipe.ts +0 -14
  1066. package/src/app/shared/pipes/number-format.pipe.ts +0 -21
  1067. package/src/app/shared/pipes/pipes.module.ts +0 -134
  1068. package/src/app/shared/pipes/property.pipes.ts +0 -87
  1069. package/src/app/shared/pipes/string.pipes.ts +0 -85
  1070. package/src/app/shared/pipes/translate-context.pipe.ts +0 -33
  1071. package/src/app/shared/pipes/types.pipes.ts +0 -31
  1072. package/src/app/shared/platforms.ts +0 -58
  1073. package/src/app/shared/services/entity-service.class.ts +0 -127
  1074. package/src/app/shared/services/job.utils.ts +0 -121
  1075. package/src/app/shared/services/memory-entity-service.class.ts +0 -447
  1076. package/src/app/shared/services/progress-bar.service.ts +0 -42
  1077. package/src/app/shared/services/startable-observable-service.class.ts +0 -137
  1078. package/src/app/shared/services/startable-service.class.ts +0 -131
  1079. package/src/app/shared/services/storage.utils.ts +0 -47
  1080. package/src/app/shared/services/translate-context.service.ts +0 -116
  1081. package/src/app/shared/services/validator-service.class.ts +0 -14
  1082. package/src/app/shared/services.ts +0 -91
  1083. package/src/app/shared/shared-routing.module.ts +0 -66
  1084. package/src/app/shared/shared.module.spec.ts +0 -13
  1085. package/src/app/shared/shared.module.ts +0 -146
  1086. package/src/app/shared/shared.testing.module.ts +0 -50
  1087. package/src/app/shared/storage/storage-explorer.component.html +0 -175
  1088. package/src/app/shared/storage/storage-explorer.component.scss +0 -39
  1089. package/src/app/shared/storage/storage-explorer.component.spec.ts +0 -24
  1090. package/src/app/shared/storage/storage-explorer.component.ts +0 -292
  1091. package/src/app/shared/storage/storage-explorer.module.ts +0 -44
  1092. package/src/app/shared/storage/storage.service.ts +0 -133
  1093. package/src/app/shared/storage/storage.utils.ts +0 -25
  1094. package/src/app/shared/testing/observable.test.html +0 -53
  1095. package/src/app/shared/testing/observable.test.scss +0 -3
  1096. package/src/app/shared/testing/observable.test.ts +0 -117
  1097. package/src/app/shared/testing/tests.page.html +0 -30
  1098. package/src/app/shared/testing/tests.page.ts +0 -34
  1099. package/src/app/shared/toast/toast.testing.html +0 -42
  1100. package/src/app/shared/toast/toast.testing.module.ts +0 -32
  1101. package/src/app/shared/toast/toast.testing.ts +0 -58
  1102. package/src/app/shared/toast/toasts.ts +0 -183
  1103. package/src/app/shared/toolbar/modal-toolbar.html +0 -32
  1104. package/src/app/shared/toolbar/modal-toolbar.scss +0 -0
  1105. package/src/app/shared/toolbar/modal-toolbar.ts +0 -63
  1106. package/src/app/shared/toolbar/toolbar.html +0 -71
  1107. package/src/app/shared/toolbar/toolbar.module.ts +0 -35
  1108. package/src/app/shared/toolbar/toolbar.scss +0 -0
  1109. package/src/app/shared/toolbar/toolbar.ts +0 -254
  1110. package/src/app/shared/types.ts +0 -31
  1111. package/src/app/shared/upload-file/testing/upload-file.testing.html +0 -25
  1112. package/src/app/shared/upload-file/testing/upload-file.testing.module.ts +0 -32
  1113. package/src/app/shared/upload-file/testing/upload-file.testing.ts +0 -68
  1114. package/src/app/shared/upload-file/upload-file-popover.component.html +0 -43
  1115. package/src/app/shared/upload-file/upload-file-popover.component.scss +0 -6
  1116. package/src/app/shared/upload-file/upload-file-popover.component.ts +0 -115
  1117. package/src/app/shared/upload-file/upload-file.component.html +0 -46
  1118. package/src/app/shared/upload-file/upload-file.component.scss +0 -130
  1119. package/src/app/shared/upload-file/upload-file.component.ts +0 -218
  1120. package/src/app/shared/upload-file/upload-file.model.ts +0 -41
  1121. package/src/app/shared/validator/form-error-adapter.class.ts +0 -123
  1122. package/src/app/shared/validator/validators.ts +0 -639
  1123. package/src/app/shared/version/versions.ts +0 -91
  1124. package/src/app/social/job/job.module.ts +0 -26
  1125. package/src/app/social/job/progression/job-progression.component.html +0 -22
  1126. package/src/app/social/job/progression/job-progression.component.scss +0 -15
  1127. package/src/app/social/job/progression/job-progression.component.ts +0 -17
  1128. package/src/app/social/job/progression/job-progression.icon.html +0 -28
  1129. package/src/app/social/job/progression/job-progression.icon.scss +0 -5
  1130. package/src/app/social/job/progression/job-progression.icon.ts +0 -238
  1131. package/src/app/social/job/progression/job-progression.list.html +0 -21
  1132. package/src/app/social/job/progression/job-progression.list.scss +0 -17
  1133. package/src/app/social/job/progression/job-progression.list.ts +0 -49
  1134. package/src/app/social/job/progression/job-progression.model.ts +0 -28
  1135. package/src/app/social/job/progression/job-progression.service.ts +0 -86
  1136. package/src/app/social/job/testing/job-progression.testing.html +0 -20
  1137. package/src/app/social/job/testing/job-progression.testing.service.ts +0 -60
  1138. package/src/app/social/job/testing/job-progression.testing.ts +0 -51
  1139. package/src/app/social/job/testing/job.testing.module.ts +0 -22
  1140. package/src/app/social/message/message.form.html +0 -60
  1141. package/src/app/social/message/message.form.scss +0 -6
  1142. package/src/app/social/message/message.form.ts +0 -79
  1143. package/src/app/social/message/message.modal.html +0 -65
  1144. package/src/app/social/message/message.modal.ts +0 -118
  1145. package/src/app/social/message/message.model.ts +0 -81
  1146. package/src/app/social/message/message.module.ts +0 -22
  1147. package/src/app/social/message/message.service.ts +0 -88
  1148. package/src/app/social/social.errors.ts +0 -11
  1149. package/src/app/social/social.module.ts +0 -36
  1150. package/src/app/social/social.testing.module.ts +0 -40
  1151. package/src/app/social/user-event/notification/user-event-notification.icon.html +0 -16
  1152. package/src/app/social/user-event/notification/user-event-notification.icon.ts +0 -108
  1153. package/src/app/social/user-event/notification/user-event-notification.list.html +0 -135
  1154. package/src/app/social/user-event/notification/user-event-notification.list.scss +0 -73
  1155. package/src/app/social/user-event/notification/user-event-notification.list.ts +0 -287
  1156. package/src/app/social/user-event/testing/user-event.testing.html +0 -27
  1157. package/src/app/social/user-event/testing/user-event.testing.model.ts +0 -146
  1158. package/src/app/social/user-event/testing/user-event.testing.module.ts +0 -22
  1159. package/src/app/social/user-event/testing/user-event.testing.service.ts +0 -141
  1160. package/src/app/social/user-event/testing/user-event.testing.ts +0 -253
  1161. package/src/app/social/user-event/user-event.model.ts +0 -73
  1162. package/src/app/social/user-event/user-event.module.ts +0 -25
  1163. package/src/app/social/user-event/user-event.service.ts +0 -679
  1164. package/src/browserslist +0 -9
  1165. package/src/environments/environment.class.ts +0 -83
  1166. package/src/environments/environment.prod.ts +0 -47
  1167. package/src/environments/environment.test.ts +0 -90
  1168. package/src/environments/environment.ts +0 -108
  1169. package/src/favicon.ico +0 -0
  1170. package/src/global.scss +0 -27
  1171. package/src/index.html +0 -80
  1172. package/src/main.ts +0 -17
  1173. package/src/polyfills.ts +0 -68
  1174. package/src/schema.graphql +0 -3112
  1175. package/src/service-worker.js +0 -31
  1176. package/src/zone-flags.ts +0 -31
  1177. package/tsconfig.app.json +0 -15
  1178. package/tsconfig.json +0 -47
  1179. package/tsconfig.spec.json +0 -19
@@ -0,0 +1,234 @@
1
+ import { ChangeDetectionStrategy, Component, Inject, Input, ViewChild } from '@angular/core';
2
+ import { Person, PRIORITIZED_AUTHORITIES } from '../../core/services/model/person.model';
3
+ import { StatusById, StatusList } from '../../core/services/model/referential.model';
4
+ import { PersonValidatorService } from '../services/validator/person.validator';
5
+ import { AppTable } from '../../core/table/table.class';
6
+ import { ValidatorService } from '@e-is/ngx-material-table';
7
+ import { debounceTime, filter, tap } from 'rxjs/operators';
8
+ import { EntitiesTableDataSource } from '../../core/table/entities-table-datasource.class';
9
+ import { isNotNil } from '../../shared/functions';
10
+ import { ENVIRONMENT } from '../../../environments/environment.class';
11
+ import { PersonFilter } from '../services/filter/person.filter';
12
+ import { CORE_CONFIG_OPTIONS } from '../../core/services/config/core.config';
13
+ import { MatExpansionPanel } from '@angular/material/expansion';
14
+ import { slideUpDownAnimation } from '../../shared/material/material.animations';
15
+ import { MessageModal } from '../../social/message/message.modal';
16
+ import { Message } from '../../social/message/message.model';
17
+ import { RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, SETTINGS_FILTER } from '../../core/table/table.model';
18
+ import * as i0 from "@angular/core";
19
+ import * as i1 from "@angular/forms";
20
+ import * as i2 from "../../core/services/account.service";
21
+ import * as i3 from "@e-is/ngx-material-table";
22
+ import * as i4 from "../../core/services/config.service";
23
+ import * as i5 from "../services/person.service";
24
+ import * as i6 from "../../social/message/message.service";
25
+ import * as i7 from "ngx-jdenticon";
26
+ import * as i8 from "@ngx-translate/core";
27
+ import * as i9 from "@angular/common";
28
+ import * as i10 from "@ionic/angular";
29
+ import * as i11 from "@angular/material/table";
30
+ import * as i12 from "@angular/material/sort";
31
+ import * as i13 from "@angular/material/paginator";
32
+ import * as i14 from "@angular/material/form-field";
33
+ import * as i15 from "@angular/material/input";
34
+ import * as i16 from "@angular/material/checkbox";
35
+ import * as i17 from "@angular/material/expansion";
36
+ import * as i18 from "@angular/material/icon";
37
+ import * as i19 from "@angular/material/button";
38
+ import * as i20 from "@angular/material/select";
39
+ import * as i21 from "@angular/material/core";
40
+ import * as i22 from "@angular/material/badge";
41
+ import * as i23 from "@angular/cdk/a11y";
42
+ import * as i24 from "../../shared/directives/autofocus.directive";
43
+ import * as i25 from "../../shared/toolbar/toolbar";
44
+ import * as i26 from "../../shared/form/field.component";
45
+ import * as i27 from "../../core/form/buttons/form-buttons-bar.component";
46
+ import * as i28 from "../../core/table/actions-column.component";
47
+ import * as i29 from "../../shared/debug/debug.component";
48
+ import * as i30 from "../../shared/pipes/number-format.pipe";
49
+ export class UsersPage extends AppTable {
50
+ constructor(injector, formBuilder, accountService, validatorService, configService, dataService, messageService, cd, environment) {
51
+ super(injector, RESERVED_START_COLUMNS
52
+ .concat([
53
+ 'avatar',
54
+ 'lastName',
55
+ 'firstName',
56
+ 'email',
57
+ 'profile',
58
+ 'status',
59
+ 'username',
60
+ 'usernameExtranet',
61
+ 'pubkey'
62
+ ])
63
+ .concat(accountService.additionalFields.map(field => field.key))
64
+ .concat(RESERVED_END_COLUMNS), new EntitiesTableDataSource(Person, dataService, validatorService, {
65
+ prependNewElements: false,
66
+ suppressErrors: environment.production,
67
+ dataServiceOptions: {
68
+ saveOnlyDirtyRows: true
69
+ }
70
+ }), null);
71
+ this.accountService = accountService;
72
+ this.validatorService = validatorService;
73
+ this.configService = configService;
74
+ this.dataService = dataService;
75
+ this.messageService = messageService;
76
+ this.cd = cd;
77
+ this.profiles = [...PRIORITIZED_AUTHORITIES].reverse();
78
+ this.statusList = StatusList;
79
+ this.statusById = StatusById;
80
+ this.filterCriteriaCount = 0;
81
+ this.useSticky = false;
82
+ this.canEdit = accountService.isAdmin();
83
+ this.canSendMessage = this.canEdit;
84
+ this.inlineEdition = this.canEdit;
85
+ this.confirmBeforeDelete = true;
86
+ this.autoLoad = false; // Wait config loading
87
+ this.i18nColumnPrefix = 'USER.';
88
+ this.defaultSortBy = 'lastName';
89
+ this.defaultSortDirection = 'asc';
90
+ this.filterForm = formBuilder.group({
91
+ searchText: [null],
92
+ statusId: [null]
93
+ });
94
+ this.additionalFields = (this.accountService.additionalFields || [])
95
+ .filter(field => isNotNil(field.autocomplete))
96
+ .map(field => {
97
+ // Make sure to get the final autocomplete config (e.g. with a suggestFn function)
98
+ field.autocomplete = this.registerAutocompleteField(field.key, {
99
+ ...field.autocomplete // Copy, to be sure the original config is unchanged
100
+ });
101
+ return field;
102
+ });
103
+ // For DEV only --
104
+ this.debug = !environment.production;
105
+ }
106
+ set showUsernameColumn(value) {
107
+ this.setShowColumn('username', value);
108
+ }
109
+ set showUsernameExtranetColumn(value) {
110
+ this.setShowColumn('usernameExtranet', value);
111
+ }
112
+ get firstUserColumn() {
113
+ const columnName = this.displayedColumns[RESERVED_START_COLUMNS.length];
114
+ // Skip avatar column, if present
115
+ return columnName === 'avatar' && this.displayedColumns[RESERVED_START_COLUMNS.length + 1] || columnName;
116
+ }
117
+ ngOnInit() {
118
+ super.ngOnInit();
119
+ this.registerSubscription(this.configService.config.subscribe(config => {
120
+ const authTokenType = config.getProperty(CORE_CONFIG_OPTIONS.AUTH_TOKEN_TYPE);
121
+ console.debug('[users] AuthTokenType=' + authTokenType);
122
+ switch (authTokenType) {
123
+ case "basic":
124
+ this.setShowColumn('pubkey', false, { emitEvent: false });
125
+ case "basic-and-token":
126
+ this.setShowColumn('username', true, { emitEvent: false });
127
+ this.setShowColumn('usernameExtranet', true, { emitEvent: false });
128
+ break;
129
+ case "token":
130
+ this.setShowColumn('pubkey', true, { emitEvent: false });
131
+ this.setShowColumn('username', false, { emitEvent: false });
132
+ this.setShowColumn('usernameExtranet', false, { emitEvent: false });
133
+ }
134
+ this.updateColumns();
135
+ this.onRefresh.emit();
136
+ }));
137
+ this.registerSubscription(this.onRefresh.subscribe(() => {
138
+ this.filterForm.markAsUntouched();
139
+ this.filterForm.markAsPristine();
140
+ }));
141
+ // Update filter when changes
142
+ this.registerSubscription(this.filterForm.valueChanges
143
+ .pipe(debounceTime(250), filter(() => this.filterForm.valid), tap(json => {
144
+ const filter = PersonFilter.fromObject(json);
145
+ this.filterCriteriaCount = filter.countNotEmptyCriteria();
146
+ this.markForCheck();
147
+ // Update the filter, without reloading the content
148
+ this.setFilter(filter, { emitEvent: false });
149
+ }),
150
+ // Save filter in settings (after a debounce time)
151
+ debounceTime(500), tap(json => this.settings.savePageSetting(this.settingsId, json, SETTINGS_FILTER)))
152
+ .subscribe());
153
+ // Restore filter from settings, or load all
154
+ this.restoreFilterOrLoad();
155
+ }
156
+ applyFilterAndClosePanel(event) {
157
+ this.onRefresh.emit(event);
158
+ this.filterExpansionPanel.close();
159
+ }
160
+ resetFilter(event) {
161
+ this.totalRowCount = undefined;
162
+ this.filterCriteriaCount = 0;
163
+ this.markAsLoading();
164
+ this.filterForm.reset();
165
+ this.setFilter(null);
166
+ }
167
+ async restoreFilterOrLoad() {
168
+ this.markAsLoading();
169
+ console.debug("[users] Restoring filter from settings...");
170
+ const json = this.settings.getPageSettings(this.settingsId, SETTINGS_FILTER) || {};
171
+ const filter = PersonFilter.fromObject(json);
172
+ this.filterForm.patchValue(json);
173
+ this.setFilter(filter, { emitEvent: true });
174
+ }
175
+ clearControlValue(event, formControl) {
176
+ if (event)
177
+ event.stopPropagation(); // Avoid to enter input the field
178
+ formControl.setValue(null);
179
+ return false;
180
+ }
181
+ async openComposeMessageModal(event) {
182
+ // Get recipients
183
+ const recipients = (this.selection.selected || [])
184
+ .map(row => row.currentData)
185
+ .map(Person.fromObject)
186
+ .map(p => {
187
+ const target = p.asObject({ minify: true });
188
+ target.department = p.department?.asObject();
189
+ return target;
190
+ });
191
+ const hasTopModal = !!(await this.modalCtrl.getTop());
192
+ const modal = await this.modalCtrl.create({
193
+ component: MessageModal,
194
+ componentProps: {
195
+ suggestFn: (value, filter, sortBy, sortDirection) => this.dataService.suggest(value, filter, sortBy, sortDirection),
196
+ data: {
197
+ recipients
198
+ }
199
+ },
200
+ cssClass: hasTopModal && 'stack-modal'
201
+ });
202
+ // Open the modal
203
+ await modal.present();
204
+ // On dismiss
205
+ const { data } = await modal.onDidDismiss();
206
+ if (!data || !(data instanceof Message))
207
+ return; // CANCELLED
208
+ console.info('[users] received message to send: ', data);
209
+ await this.messageService.send(data);
210
+ }
211
+ /* -- protected methods -- */
212
+ markForCheck() {
213
+ this.cd.markForCheck();
214
+ }
215
+ }
216
+ UsersPage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UsersPage, deps: [{ token: i0.Injector }, { token: i1.UntypedFormBuilder }, { token: i2.AccountService }, { token: i3.ValidatorService }, { token: i4.ConfigService }, { token: i5.PersonService }, { token: i6.MessageService }, { token: i0.ChangeDetectorRef }, { token: ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Component });
217
+ UsersPage.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: UsersPage, selector: "app-users-table", inputs: { useSticky: "useSticky" }, providers: [
218
+ { provide: ValidatorService, useExisting: PersonValidatorService }
219
+ ], viewQueries: [{ propertyName: "filterExpansionPanel", first: true, predicate: MatExpansionPanel, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<app-toolbar [title]=\"'USER.LIST.TITLE'|translate\"\n color=\"primary\"\n [canGoBack]=\"false\"\n [hasValidate]=\"!(loadingSubject|async) && dirty\"\n (onValidate)=\"save()\">\n <ion-buttons slot=\"end\">\n\n <!-- Compose message -->\n <button mat-icon-button *ngIf=\"canSendMessage\"\n [title]=\"'USER.LIST.BTN_SEND_MESSAGE'|translate\"\n (click)=\"openComposeMessageModal($event)\">\n <ion-icon name=\"mail\" slot=\"icon-only\"></ion-icon>\n </button>\n\n <ng-container *ngIf=\"!selection.hasValue(); else hasSelection\">\n <!-- Add -->\n <button mat-icon-button\n *ngIf=\"canEdit && !mobile\"\n [title]=\"'COMMON.BTN_ADD'|translate\"\n (click)=\"addRow()\">\n <mat-icon>add</mat-icon>\n </button>\n\n <!-- Refresh -->\n <button mat-icon-button *ngIf=\"!mobile\"\n [title]=\"'COMMON.BTN_REFRESH'|translate\"\n (click)=\"onRefresh.emit()\">\n <mat-icon>refresh</mat-icon>\n </button>\n\n <!-- reset filter -->\n <button mat-icon-button (click)=\"resetFilter()\"\n *ngIf=\"filterCriteriaCount\">\n <mat-icon color=\"accent\">filter_list_alt</mat-icon>\n <mat-icon class=\"icon-secondary\" style=\"left: 16px; top: 5px; font-weight: bold;\">close</mat-icon>\n </button>\n\n <!-- show filter -->\n <button mat-icon-button (click)=\"filterExpansionPanel.toggle()\">\n <mat-icon *ngIf=\"filterCriteriaCount; else emptyFilter\"\n [matBadge]=\"filterCriteriaCount\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\">filter_list_alt\n </mat-icon>\n <ng-template #emptyFilter>\n <mat-icon>filter_list_alt</mat-icon>\n </ng-template>\n </button>\n </ng-container>\n\n <ng-template #hasSelection>\n\n <!-- delete -->\n <button mat-icon-button\n class=\"hidden-xs hidden-sm\"\n [title]=\"'COMMON.BTN_DELETE'|translate\"\n (click)=\"deleteSelection($event)\">\n <mat-icon>delete</mat-icon>\n </button>\n </ng-template>\n </ion-buttons>\n</app-toolbar>\n\n<ion-content class=\"ion-no-padding\">\n\n <!-- error -->\n <ion-item *ngIf=\"errorSubject|async ; let error\" lines=\"none\" @slideUpDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <!-- debug -->\n <app-debug *ngIf=\"debug\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n focusColumn: {{focusColumn}}<br/>\n </ion-col>\n </ion-row>\n </ion-grid>\n </app-debug>\n\n <!-- search -->\n <mat-expansion-panel #filterExpansionPanel class=\"ion-no-padding filter-panel filter-panel-floating\">\n <form class=\"form-container ion-padding\" [formGroup]=\"filterForm\" (ngSubmit)=\"onRefresh.emit()\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <!-- search -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.LIST.FILTER.SEARCH'|translate\" formControlName=\"searchText\">\n\n <button mat-icon-button matSuffix tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearControlValue($event, filterForm.controls.searchText)\"\n [hidden]=\"filterForm.controls.searchText.disabled || !filterForm.controls.searchText.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <!-- status -->\n <mat-form-field>\n <mat-select formControlName=\"statusId\" [placeholder]=\"'USER.STATUS'|translate\">\n <mat-option [value]=\"null\"><i><span translate>COMMON.EMPTY_OPTION</span></i></mat-option>\n <mat-option *ngFor=\"let item of statusList\" [value]=\"item.id\">\n <ion-icon [name]=\"item.icon\"></ion-icon>\n {{ item.label |translate }}\n </mat-option>\n </mat-select>\n\n <button mat-icon-button matSuffix tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearControlValue($event, filterForm.controls.statusId)\"\n [hidden]=\"filterForm.controls.statusId.disabled || !filterForm.controls.statusId.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n\n <mat-action-row>\n <!-- Counter -->\n <ion-label [hidden]=\"(loadingSubject|async) || filterForm.dirty\"\n [color]=\"empty && 'danger'\"\n class=\"ion-padding\">\n {{ (totalRowCount ? 'COMMON.RESULT_COUNT' : 'COMMON.NO_RESULT') | translate: {\n count: (totalRowCount |\n numberFormat)\n } }}\n </ion-label>\n\n <div class=\"toolbar-spacer\"></div>\n\n <!-- Close panel -->\n <ion-button mat-button fill=\"clear\" color=\"dark\"\n (click)=\"filterExpansionPanel.close()\"\n [disabled]=\"loadingSubject|async\">\n <ion-text translate>COMMON.BTN_CLOSE</ion-text>\n </ion-button>\n\n <!-- Search button -->\n <ion-button mat-button\n [color]=\"filterForm.dirty ? 'tertiary' : 'dark'\"\n [fill]=\"filterForm.dirty ? 'solid' : 'clear'\"\n (click)=\"applyFilterAndClosePanel($event)\"\n [disabled]=\"loadingSubject|async\">\n <ion-text translate>COMMON.BTN_APPLY</ion-text>\n </ion-button>\n\n </mat-action-row>\n </mat-expansion-panel>\n\n <!-- error -->\n <ion-item *ngIf=\"errorSubject|async ; let error\" visible-xs visible-sm visible-mobile lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <div class=\"table-container\">\n <table #table mat-table matSort\n [dataSource]=\"dataSource\"\n [matSortActive]=\"defaultSortBy\" [matSortDirection]=\"defaultSortDirection\"\n matSortDisableClear [trackBy]=\"trackByFn\">\n\n <ng-container matColumnDef=\"select\" [sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef [class.cdk-visually-hidden]=\"!inlineEdition\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class.cdk-visually-hidden]=\"!inlineEdition\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(row) : null\" [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </td>\n </ng-container>\n\n <!-- Id Column -->\n <ng-container matColumnDef=\"id\" [sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label>#</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\">{{ row.currentData.id }}</td>\n </ng-container>\n\n <!-- avatar Column -->\n <ng-container matColumnDef=\"avatar\" [sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let row\">\n <div class=\"avatar\" *ngIf=\"row.currentData.avatar; else generateIcon\"\n [ngStyle]=\"{'background-image':'url('+row.currentData.avatar+')'}\"></div>\n <ng-template #generateIcon>\n <div class=\"avatar\">\n <svg width=\"38\" width=\"38\" [data-jdenticon-value]=\"row.currentData.id\"></svg>\n </div>\n </ng-template>\n </td>\n </ng-container>\n\n <!-- lastName -->\n <ng-container matColumnDef=\"lastName\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.LAST_NAME</span>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"focusColumn='lastName'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput\n [formControl]=\"row.validator.controls['lastName']\"\n [placeholder]=\"'USER.LAST_NAME'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='lastName'\">\n <mat-error *ngIf=\"row.validator.controls['lastName'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls['lastName'].hasError('minlength')\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 2} }}</span>\n </mat-error>\n </mat-form-field>\n </td>\n\n </ng-container>\n\n <!-- firstname -->\n <ng-container matColumnDef=\"firstName\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.FIRST_NAME</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='firstName'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls['firstName']\"\n [placeholder]=\"'USER.FIRST_NAME'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='firstName'\">\n <mat-error *ngIf=\"row.validator.controls['firstName'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls['firstName'].hasError('minlength')\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 2} }}</span>\n </mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- email -->\n <ng-container matColumnDef=\"email\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.EMAIL</span>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"focusColumn='email'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls['email']\"\n [placeholder]=\"'USER.EMAIL'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='email'\">\n <mat-error *ngIf=\"row.validator.controls['email'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls['email'].hasError('email')\">\n <span translate>ERROR.FIELD_NOT_VALID_EMAIL</span>\n </mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- additional fields -->\n <ng-container *ngFor=\"let definition of additionalFields\" [matColumnDef]=\"definition.key\">\n <th mat-header-cell *matHeaderCellDef>\n <span>{{definition.label|translate}}</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn=definition.key\">\n <app-form-field floatLabel=\"never\"\n [definition]=\"definition\"\n [formControl]=\"row.validator.controls[definition.key]\"\n [required]=\"definition.extra?.account?.required\"\n [autofocus]=\"row.editing && focusColumn===definition.key\">\n </app-form-field>\n </td>\n </ng-container>\n\n <!-- profile column -->\n <ng-container matColumnDef=\"profile\">\n <th mat-header-cell *matHeaderCellDef>\n <span translate>USER.PROFILE</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='profile'\">\n <mat-form-field floatLabel=\"never\">\n <mat-select [formControl]=\"row.validator.controls['mainProfile']\"\n [placeholder]=\"'USER.PROFILE'|translate\">\n <mat-option *ngFor=\"let item of profiles\" [value]=\"item\">\n {{ ('USER.PROFILE_ENUM.' + item) | uppercase |translate }}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"row.validator.controls['mainProfile'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- Status column -->\n <ng-container matColumnDef=\"status\">\n <th mat-header-cell *matHeaderCellDef>\n <span translate>USER.STATUS</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='status'\">\n <mat-form-field floatLabel=\"never\">\n <ion-icon matPrefix *ngIf=\"row.validator.controls['statusId'].value &gt;=0\" [name]=\"statusById[row.validator.controls['statusId'].value]?.icon\"></ion-icon>\n\n <mat-select [formControl]=\"row.validator.controls['statusId']\"\n [placeholder]=\"'REFERENTIAL.STATUS'|translate\">\n <mat-select-trigger>\n <span *ngIf=\"row.validator.controls['statusId'].value &gt;=0\">\n {{ statusById[row.validator.controls['statusId'].value]?.label | translate}}</span>\n </mat-select-trigger>\n <mat-option *ngFor=\"let item of statusList\" [value]=\"item.id\">\n <ion-icon [name]=\"item.icon\"></ion-icon>\n {{ item.label |translate }}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"row.validator.controls['statusId'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- username -->\n <ng-container matColumnDef=\"username\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.USERNAME</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='username'\">\n <mat-form-field floatLabel=\"never\" >\n <input matInput [formControl]=\"row.validator.controls.username\"\n [placeholder]=\"'USER.USERNAME'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='username'\">\n <mat-error *ngIf=\"row.validator.controls.username.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- username extranet -->\n <ng-container matColumnDef=\"usernameExtranet\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.USERNAME_EXTRANET</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='usernameExtranet'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls.usernameExtranet\"\n [placeholder]=\"'USER.USERNAME_EXTRANET'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='usernameExtranet'\">\n <mat-error *ngIf=\"row.validator.controls.usernameExtranet.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- pubkey -->\n <ng-container matColumnDef=\"pubkey\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.PUBKEY</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n [title]=\"row.validator.controls.pubkey.valueChanges|async\"\n (click)=\"focusColumn='pubkey'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls['pubkey']\" [placeholder]=\"'USER.PUBKEY'|translate\"\n [readonly]=\"!row.editing\" autocomplete=\"off\">\n <mat-error *ngIf=\"row.validator.controls.pubkey.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls.pubkey.hasError('pubkey')\">\n <span translate>ERROR.FIELD_NOT_VALID_PUBKEY</span>\n </mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- Actions buttons column -->\n <app-actions-column [stickyEnd]=\"useSticky\"\n (optionsClick)=\"openSelectColumnsModal($event)\"\n (cancelOrDeleteClick)=\"cancelOrDelete($event.event, $event.row)\"\n (confirmEditCreateClick)=\"confirmEditCreate($event.event, $event.row)\"\n (confirmAndAddClick)=\"confirmAndAdd($event.event, $event.row)\"\n (backward)=\"confirmAndBackward($event.event, $event.row)\"\n (forward)=\"confirmAndForward($event.event, $event.row)\"\n [canCancel]=\"false\">\n </app-actions-column>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"\n [class.mat-row-error]=\"row.validator.invalid\"\n [class.mat-row-dirty]=\"row.currentData.dirty\"\n [class.mat-row-disabled]=\"!row.editing\"\n (click)=\"clickRow($event, row)\"\n (keydown.escape)=\"escapeEditingRow($event)\"\n [cdkTrapFocus]=\"!row.validator?.valid\"></tr>\n </table>\n\n <ng-container *ngIf=\"loadingSubject|async; else noResult\">\n <ion-item>\n <ion-skeleton-text animated></ion-skeleton-text>\n </ion-item>\n </ng-container>\n\n <ng-template #noResult>\n <ion-item *ngIf=\"totalRowCount === 0\">\n <ion-text color=\"danger\" class=\"text-italic\" translate>COMMON.NO_RESULT</ion-text>\n </ion-item>\n </ng-template>\n </div>\n</ion-content>\n\n<ion-footer>\n <mat-paginator class=\"mat-paginator-footer\"\n [length]=\"totalRowCount\" [pageSize]=\"defaultPageSize\"\n [pageSizeOptions]=\"defaultPageSizeOptions\" showFirstLastButtons>\n </mat-paginator>\n\n <app-form-buttons-bar *ngIf=\"!mobile && inlineEdition\"\n (onCancel)=\"onRefresh.emit()\" (onSave)=\"save()\" [disabled]=\"(loadingSubject|async) || !dirty\"></app-form-buttons-bar>\n</ion-footer>\n\n<ion-fab slot=\"fixed\" vertical=\"bottom\" horizontal=\"end\" *ngIf=\"mobile\">\n <ion-fab-button color=\"tertiary\" (click)=\"addRow()\">\n <ion-icon name=\"add\"></ion-icon>\n </ion-fab-button>\n</ion-fab>\n", styles: [".mat-expansion-panel{margin-bottom:5px}.mat-expansion-panel .form-container mat-form-field{width:100%}.mat-expansion-panel mat-action-row ion-label{line-height:36px}.table-container{height:100%}.mat-table .mat-cell .avatar{height:40px;width:40px;margin:2px 0 0;background-size:cover;background-repeat:no-repeat;background-position:center}.mat-table .mat-column-id{width:30px}.mat-table .mat-column-avatar{width:50px}.mat-table .mat-column-avatar .avatar{border-radius:5px;border:solid 1px rgba(var(--ion-color-secondary-rgb),.5)}.mat-table .mat-column-lastName,.mat-table .mat-column-firstName{min-width:80px}.mat-table .mat-column-email,.mat-table .mat-column-pubkey,.mat-table .mat-column-department{min-width:180px}.mat-table .mat-column-profile{min-width:110px}.mat-table .mat-column-status{min-width:130px}\n"], dependencies: [{ kind: "directive", type: i7.SvgJdenticonDirective, selector: "svg[data-jdenticon-hash],svg[data-jdenticon-value]", inputs: ["data-jdenticon-hash", "data-jdenticon-value", "width", "height"] }, { kind: "directive", type: i8.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i10.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i10.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i10.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i10.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i10.IonFab, selector: "ion-fab", inputs: ["activated", "edge", "horizontal", "vertical"] }, { kind: "component", type: i10.IonFabButton, selector: "ion-fab-button", inputs: ["activated", "closeIcon", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "show", "size", "target", "translucent", "type"] }, { kind: "component", type: i10.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i10.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i10.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i10.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i10.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i10.IonRow, selector: "ion-row" }, { kind: "component", type: i10.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i10.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i11.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i11.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i11.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i11.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i11.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i11.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i11.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i11.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i11.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i11.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i12.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i12.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i13.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "directive", type: i14.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i14.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i14.MatPrefix, selector: "[matPrefix]" }, { kind: "directive", type: i14.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i15.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i16.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i17.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "directive", type: i17.MatExpansionPanelActionRow, selector: "mat-action-row" }, { kind: "component", type: i18.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i19.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i20.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "directive", type: i20.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i21.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i22.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: i23.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i24.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "component", type: i25.ToolbarComponent, selector: "app-toolbar", inputs: ["progressBarMode", "title", "color", "class", "backHref", "defaultBackHref", "hasValidate", "hasClose", "hasSearch", "canGoBack", "canShowMenu"], outputs: ["onValidate", "onClose", "onValidateAndClose", "onBackClick", "onSearch"] }, { kind: "component", type: i26.AppFormField, selector: "app-form-field", inputs: ["definition", "required", "readonly", "disabled", "formControl", "formControlName", "placeholder", "compact", "floatLabel", "tabindex", "autofocus", "clearable", "chipColor", "debug", "class"], outputs: ["keyup.enter"] }, { kind: "component", type: i27.FormButtonsBarComponent, selector: "app-form-buttons-bar", inputs: ["disabled", "disabledCancel", "classList"], outputs: ["onCancel", "onSave", "onNext", "onBack"] }, { kind: "component", type: i28.ActionsColumnComponent, selector: "app-actions-column", inputs: ["stickyEnd", "canCancel", "canConfirm", "canDelete", "canBackward", "canForward", "canConfirmAndAdd", "dirtyIcon", "optionsTitle", "class", "cellTemplate"], outputs: ["optionsClick", "cancelOrDeleteClick", "confirmEditCreateClick", "confirmAndAddClick", "backward", "forward"] }, { kind: "component", type: i29.DebugComponent, selector: "app-debug", inputs: ["title", "enable", "expanded"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i30.NumberFormatPipe, name: "numberFormat" }], animations: [slideUpDownAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
220
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UsersPage, decorators: [{
221
+ type: Component,
222
+ args: [{ selector: 'app-users-table', providers: [
223
+ { provide: ValidatorService, useExisting: PersonValidatorService }
224
+ ], animations: [slideUpDownAnimation], changeDetection: ChangeDetectionStrategy.OnPush, template: "<app-toolbar [title]=\"'USER.LIST.TITLE'|translate\"\n color=\"primary\"\n [canGoBack]=\"false\"\n [hasValidate]=\"!(loadingSubject|async) && dirty\"\n (onValidate)=\"save()\">\n <ion-buttons slot=\"end\">\n\n <!-- Compose message -->\n <button mat-icon-button *ngIf=\"canSendMessage\"\n [title]=\"'USER.LIST.BTN_SEND_MESSAGE'|translate\"\n (click)=\"openComposeMessageModal($event)\">\n <ion-icon name=\"mail\" slot=\"icon-only\"></ion-icon>\n </button>\n\n <ng-container *ngIf=\"!selection.hasValue(); else hasSelection\">\n <!-- Add -->\n <button mat-icon-button\n *ngIf=\"canEdit && !mobile\"\n [title]=\"'COMMON.BTN_ADD'|translate\"\n (click)=\"addRow()\">\n <mat-icon>add</mat-icon>\n </button>\n\n <!-- Refresh -->\n <button mat-icon-button *ngIf=\"!mobile\"\n [title]=\"'COMMON.BTN_REFRESH'|translate\"\n (click)=\"onRefresh.emit()\">\n <mat-icon>refresh</mat-icon>\n </button>\n\n <!-- reset filter -->\n <button mat-icon-button (click)=\"resetFilter()\"\n *ngIf=\"filterCriteriaCount\">\n <mat-icon color=\"accent\">filter_list_alt</mat-icon>\n <mat-icon class=\"icon-secondary\" style=\"left: 16px; top: 5px; font-weight: bold;\">close</mat-icon>\n </button>\n\n <!-- show filter -->\n <button mat-icon-button (click)=\"filterExpansionPanel.toggle()\">\n <mat-icon *ngIf=\"filterCriteriaCount; else emptyFilter\"\n [matBadge]=\"filterCriteriaCount\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\">filter_list_alt\n </mat-icon>\n <ng-template #emptyFilter>\n <mat-icon>filter_list_alt</mat-icon>\n </ng-template>\n </button>\n </ng-container>\n\n <ng-template #hasSelection>\n\n <!-- delete -->\n <button mat-icon-button\n class=\"hidden-xs hidden-sm\"\n [title]=\"'COMMON.BTN_DELETE'|translate\"\n (click)=\"deleteSelection($event)\">\n <mat-icon>delete</mat-icon>\n </button>\n </ng-template>\n </ion-buttons>\n</app-toolbar>\n\n<ion-content class=\"ion-no-padding\">\n\n <!-- error -->\n <ion-item *ngIf=\"errorSubject|async ; let error\" lines=\"none\" @slideUpDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <!-- debug -->\n <app-debug *ngIf=\"debug\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n focusColumn: {{focusColumn}}<br/>\n </ion-col>\n </ion-row>\n </ion-grid>\n </app-debug>\n\n <!-- search -->\n <mat-expansion-panel #filterExpansionPanel class=\"ion-no-padding filter-panel filter-panel-floating\">\n <form class=\"form-container ion-padding\" [formGroup]=\"filterForm\" (ngSubmit)=\"onRefresh.emit()\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <!-- search -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.LIST.FILTER.SEARCH'|translate\" formControlName=\"searchText\">\n\n <button mat-icon-button matSuffix tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearControlValue($event, filterForm.controls.searchText)\"\n [hidden]=\"filterForm.controls.searchText.disabled || !filterForm.controls.searchText.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <!-- status -->\n <mat-form-field>\n <mat-select formControlName=\"statusId\" [placeholder]=\"'USER.STATUS'|translate\">\n <mat-option [value]=\"null\"><i><span translate>COMMON.EMPTY_OPTION</span></i></mat-option>\n <mat-option *ngFor=\"let item of statusList\" [value]=\"item.id\">\n <ion-icon [name]=\"item.icon\"></ion-icon>\n {{ item.label |translate }}\n </mat-option>\n </mat-select>\n\n <button mat-icon-button matSuffix tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearControlValue($event, filterForm.controls.statusId)\"\n [hidden]=\"filterForm.controls.statusId.disabled || !filterForm.controls.statusId.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n\n <mat-action-row>\n <!-- Counter -->\n <ion-label [hidden]=\"(loadingSubject|async) || filterForm.dirty\"\n [color]=\"empty && 'danger'\"\n class=\"ion-padding\">\n {{ (totalRowCount ? 'COMMON.RESULT_COUNT' : 'COMMON.NO_RESULT') | translate: {\n count: (totalRowCount |\n numberFormat)\n } }}\n </ion-label>\n\n <div class=\"toolbar-spacer\"></div>\n\n <!-- Close panel -->\n <ion-button mat-button fill=\"clear\" color=\"dark\"\n (click)=\"filterExpansionPanel.close()\"\n [disabled]=\"loadingSubject|async\">\n <ion-text translate>COMMON.BTN_CLOSE</ion-text>\n </ion-button>\n\n <!-- Search button -->\n <ion-button mat-button\n [color]=\"filterForm.dirty ? 'tertiary' : 'dark'\"\n [fill]=\"filterForm.dirty ? 'solid' : 'clear'\"\n (click)=\"applyFilterAndClosePanel($event)\"\n [disabled]=\"loadingSubject|async\">\n <ion-text translate>COMMON.BTN_APPLY</ion-text>\n </ion-button>\n\n </mat-action-row>\n </mat-expansion-panel>\n\n <!-- error -->\n <ion-item *ngIf=\"errorSubject|async ; let error\" visible-xs visible-sm visible-mobile lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <div class=\"table-container\">\n <table #table mat-table matSort\n [dataSource]=\"dataSource\"\n [matSortActive]=\"defaultSortBy\" [matSortDirection]=\"defaultSortDirection\"\n matSortDisableClear [trackBy]=\"trackByFn\">\n\n <ng-container matColumnDef=\"select\" [sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef [class.cdk-visually-hidden]=\"!inlineEdition\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class.cdk-visually-hidden]=\"!inlineEdition\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(row) : null\" [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </td>\n </ng-container>\n\n <!-- Id Column -->\n <ng-container matColumnDef=\"id\" [sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label>#</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\">{{ row.currentData.id }}</td>\n </ng-container>\n\n <!-- avatar Column -->\n <ng-container matColumnDef=\"avatar\" [sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let row\">\n <div class=\"avatar\" *ngIf=\"row.currentData.avatar; else generateIcon\"\n [ngStyle]=\"{'background-image':'url('+row.currentData.avatar+')'}\"></div>\n <ng-template #generateIcon>\n <div class=\"avatar\">\n <svg width=\"38\" width=\"38\" [data-jdenticon-value]=\"row.currentData.id\"></svg>\n </div>\n </ng-template>\n </td>\n </ng-container>\n\n <!-- lastName -->\n <ng-container matColumnDef=\"lastName\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.LAST_NAME</span>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"focusColumn='lastName'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput\n [formControl]=\"row.validator.controls['lastName']\"\n [placeholder]=\"'USER.LAST_NAME'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='lastName'\">\n <mat-error *ngIf=\"row.validator.controls['lastName'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls['lastName'].hasError('minlength')\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 2} }}</span>\n </mat-error>\n </mat-form-field>\n </td>\n\n </ng-container>\n\n <!-- firstname -->\n <ng-container matColumnDef=\"firstName\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.FIRST_NAME</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='firstName'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls['firstName']\"\n [placeholder]=\"'USER.FIRST_NAME'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='firstName'\">\n <mat-error *ngIf=\"row.validator.controls['firstName'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls['firstName'].hasError('minlength')\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 2} }}</span>\n </mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- email -->\n <ng-container matColumnDef=\"email\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.EMAIL</span>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"focusColumn='email'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls['email']\"\n [placeholder]=\"'USER.EMAIL'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='email'\">\n <mat-error *ngIf=\"row.validator.controls['email'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls['email'].hasError('email')\">\n <span translate>ERROR.FIELD_NOT_VALID_EMAIL</span>\n </mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- additional fields -->\n <ng-container *ngFor=\"let definition of additionalFields\" [matColumnDef]=\"definition.key\">\n <th mat-header-cell *matHeaderCellDef>\n <span>{{definition.label|translate}}</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn=definition.key\">\n <app-form-field floatLabel=\"never\"\n [definition]=\"definition\"\n [formControl]=\"row.validator.controls[definition.key]\"\n [required]=\"definition.extra?.account?.required\"\n [autofocus]=\"row.editing && focusColumn===definition.key\">\n </app-form-field>\n </td>\n </ng-container>\n\n <!-- profile column -->\n <ng-container matColumnDef=\"profile\">\n <th mat-header-cell *matHeaderCellDef>\n <span translate>USER.PROFILE</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='profile'\">\n <mat-form-field floatLabel=\"never\">\n <mat-select [formControl]=\"row.validator.controls['mainProfile']\"\n [placeholder]=\"'USER.PROFILE'|translate\">\n <mat-option *ngFor=\"let item of profiles\" [value]=\"item\">\n {{ ('USER.PROFILE_ENUM.' + item) | uppercase |translate }}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"row.validator.controls['mainProfile'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- Status column -->\n <ng-container matColumnDef=\"status\">\n <th mat-header-cell *matHeaderCellDef>\n <span translate>USER.STATUS</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='status'\">\n <mat-form-field floatLabel=\"never\">\n <ion-icon matPrefix *ngIf=\"row.validator.controls['statusId'].value &gt;=0\" [name]=\"statusById[row.validator.controls['statusId'].value]?.icon\"></ion-icon>\n\n <mat-select [formControl]=\"row.validator.controls['statusId']\"\n [placeholder]=\"'REFERENTIAL.STATUS'|translate\">\n <mat-select-trigger>\n <span *ngIf=\"row.validator.controls['statusId'].value &gt;=0\">\n {{ statusById[row.validator.controls['statusId'].value]?.label | translate}}</span>\n </mat-select-trigger>\n <mat-option *ngFor=\"let item of statusList\" [value]=\"item.id\">\n <ion-icon [name]=\"item.icon\"></ion-icon>\n {{ item.label |translate }}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"row.validator.controls['statusId'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- username -->\n <ng-container matColumnDef=\"username\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.USERNAME</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='username'\">\n <mat-form-field floatLabel=\"never\" >\n <input matInput [formControl]=\"row.validator.controls.username\"\n [placeholder]=\"'USER.USERNAME'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='username'\">\n <mat-error *ngIf=\"row.validator.controls.username.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- username extranet -->\n <ng-container matColumnDef=\"usernameExtranet\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.USERNAME_EXTRANET</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='usernameExtranet'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls.usernameExtranet\"\n [placeholder]=\"'USER.USERNAME_EXTRANET'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='usernameExtranet'\">\n <mat-error *ngIf=\"row.validator.controls.usernameExtranet.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- pubkey -->\n <ng-container matColumnDef=\"pubkey\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.PUBKEY</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n [title]=\"row.validator.controls.pubkey.valueChanges|async\"\n (click)=\"focusColumn='pubkey'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls['pubkey']\" [placeholder]=\"'USER.PUBKEY'|translate\"\n [readonly]=\"!row.editing\" autocomplete=\"off\">\n <mat-error *ngIf=\"row.validator.controls.pubkey.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls.pubkey.hasError('pubkey')\">\n <span translate>ERROR.FIELD_NOT_VALID_PUBKEY</span>\n </mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- Actions buttons column -->\n <app-actions-column [stickyEnd]=\"useSticky\"\n (optionsClick)=\"openSelectColumnsModal($event)\"\n (cancelOrDeleteClick)=\"cancelOrDelete($event.event, $event.row)\"\n (confirmEditCreateClick)=\"confirmEditCreate($event.event, $event.row)\"\n (confirmAndAddClick)=\"confirmAndAdd($event.event, $event.row)\"\n (backward)=\"confirmAndBackward($event.event, $event.row)\"\n (forward)=\"confirmAndForward($event.event, $event.row)\"\n [canCancel]=\"false\">\n </app-actions-column>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"\n [class.mat-row-error]=\"row.validator.invalid\"\n [class.mat-row-dirty]=\"row.currentData.dirty\"\n [class.mat-row-disabled]=\"!row.editing\"\n (click)=\"clickRow($event, row)\"\n (keydown.escape)=\"escapeEditingRow($event)\"\n [cdkTrapFocus]=\"!row.validator?.valid\"></tr>\n </table>\n\n <ng-container *ngIf=\"loadingSubject|async; else noResult\">\n <ion-item>\n <ion-skeleton-text animated></ion-skeleton-text>\n </ion-item>\n </ng-container>\n\n <ng-template #noResult>\n <ion-item *ngIf=\"totalRowCount === 0\">\n <ion-text color=\"danger\" class=\"text-italic\" translate>COMMON.NO_RESULT</ion-text>\n </ion-item>\n </ng-template>\n </div>\n</ion-content>\n\n<ion-footer>\n <mat-paginator class=\"mat-paginator-footer\"\n [length]=\"totalRowCount\" [pageSize]=\"defaultPageSize\"\n [pageSizeOptions]=\"defaultPageSizeOptions\" showFirstLastButtons>\n </mat-paginator>\n\n <app-form-buttons-bar *ngIf=\"!mobile && inlineEdition\"\n (onCancel)=\"onRefresh.emit()\" (onSave)=\"save()\" [disabled]=\"(loadingSubject|async) || !dirty\"></app-form-buttons-bar>\n</ion-footer>\n\n<ion-fab slot=\"fixed\" vertical=\"bottom\" horizontal=\"end\" *ngIf=\"mobile\">\n <ion-fab-button color=\"tertiary\" (click)=\"addRow()\">\n <ion-icon name=\"add\"></ion-icon>\n </ion-fab-button>\n</ion-fab>\n", styles: [".mat-expansion-panel{margin-bottom:5px}.mat-expansion-panel .form-container mat-form-field{width:100%}.mat-expansion-panel mat-action-row ion-label{line-height:36px}.table-container{height:100%}.mat-table .mat-cell .avatar{height:40px;width:40px;margin:2px 0 0;background-size:cover;background-repeat:no-repeat;background-position:center}.mat-table .mat-column-id{width:30px}.mat-table .mat-column-avatar{width:50px}.mat-table .mat-column-avatar .avatar{border-radius:5px;border:solid 1px rgba(var(--ion-color-secondary-rgb),.5)}.mat-table .mat-column-lastName,.mat-table .mat-column-firstName{min-width:80px}.mat-table .mat-column-email,.mat-table .mat-column-pubkey,.mat-table .mat-column-department{min-width:180px}.mat-table .mat-column-profile{min-width:110px}.mat-table .mat-column-status{min-width:130px}\n"] }]
225
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.UntypedFormBuilder }, { type: i2.AccountService }, { type: i3.ValidatorService }, { type: i4.ConfigService }, { type: i5.PersonService }, { type: i6.MessageService }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
226
+ type: Inject,
227
+ args: [ENVIRONMENT]
228
+ }] }]; }, propDecorators: { useSticky: [{
229
+ type: Input
230
+ }], filterExpansionPanel: [{
231
+ type: ViewChild,
232
+ args: [MatExpansionPanel, { static: true }]
233
+ }] } });
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2FkbWluL3VzZXJzL3VzZXJzLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9hZG1pbi91c2Vycy91c2Vycy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBWSxLQUFLLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xJLE9BQU8sRUFBRSxNQUFNLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN6RixPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBR2hGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxF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QUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBQztLQUNqRSxnRkEyRlUsaUJBQWlCLHFGQzFIOUIsaTNsQkEyYUEsMjlVRDNZYyxDQUFDLG9CQUFvQixDQUFDOzJGQUd2QixTQUFTO2tCQVZyQixTQUFTOytCQUNFLGlCQUFpQixhQUdoQjt3QkFDVCxFQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUM7cUJBQ2pFLGNBQ1csQ0FBQyxvQkFBb0IsQ0FBQyxtQkFDakIsdUJBQXVCLENBQUMsTUFBTTs7MEJBaUM1QyxNQUFNOzJCQUFDLFdBQVc7NENBWFosU0FBUztzQkFBakIsS0FBSztnQkFtRXdDLG9CQUFvQjtzQkFBakUsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0LCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQZXJzb24sIFBSSU9SSVRJWkVEX0FVVEhPUklUSUVTIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9tb2RlbC9wZXJzb24ubW9kZWwnO1xuaW1wb3J0IHsgU3RhdHVzQnlJZCwgU3RhdHVzTGlzdCB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbW9kZWwvcmVmZXJlbnRpYWwubW9kZWwnO1xuaW1wb3J0IHsgUGVyc29uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BlcnNvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBlcnNvblZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy92YWxpZGF0b3IvcGVyc29uLnZhbGlkYXRvcic7XG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQXBwVGFibGUgfSBmcm9tICcuLi8uLi9jb3JlL3RhYmxlL3RhYmxlLmNsYXNzJztcbmltcG9ydCB7IFZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICdAZS1pcy9uZ3gtbWF0ZXJpYWwtdGFibGUnO1xuaW1wb3J0IHsgRm9ybUZpZWxkRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9mb3JtL2ZpZWxkLm1vZGVsJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2NvcmUvdGFibGUvZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZS5jbGFzcyc7XG5pbXBvcnQgeyBpc05vdE5pbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgUGVyc29uRmlsdGVyIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsdGVyL3BlcnNvbi5maWx0ZXInO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ09SRV9DT05GSUdfT1BUSU9OUyB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvY29uZmlnL2NvcmUuY29uZmlnJztcbmltcG9ydCB7IEF1dGhUb2tlblR5cGUgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL25ldHdvcmsudHlwZXMnO1xuaW1wb3J0IHsgTWF0RXhwYW5zaW9uUGFuZWwgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xuaW1wb3J0IHsgc2xpZGVVcERvd25BbmltYXRpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvbWF0ZXJpYWwvbWF0ZXJpYWwuYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBNZXNzYWdlTW9kYWwsIE1lc3NhZ2VNb2RhbE9wdGlvbnMgfSBmcm9tICcuLi8uLi9zb2NpYWwvbWVzc2FnZS9tZXNzYWdlLm1vZGFsJztcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuLi8uLi9zb2NpYWwvbWVzc2FnZS9tZXNzYWdlLm1vZGVsJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc29jaWFsL21lc3NhZ2UvbWVzc2FnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJFU0VSVkVEX0VORF9DT0xVTU5TLCBSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLCBTRVRUSU5HU19GSUxURVIgfSBmcm9tICcuLi8uLi9jb3JlL3RhYmxlL3RhYmxlLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXVzZXJzLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICd1c2Vycy5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdXNlcnMuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7cHJvdmlkZTogVmFsaWRhdG9yU2VydmljZSwgdXNlRXhpc3Rpbmc6IFBlcnNvblZhbGlkYXRvclNlcnZpY2V9XG4gIF0sXG4gIGFuaW1hdGlvbnM6IFtzbGlkZVVwRG93bkFuaW1hdGlvbl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJzUGFnZSBleHRlbmRzIEFwcFRhYmxlPFBlcnNvbiwgUGVyc29uRmlsdGVyPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcmVhZG9ubHkgY2FuRWRpdDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2FuU2VuZE1lc3NhZ2U6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGZpbHRlckZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gIHJlYWRvbmx5IHByb2ZpbGVzID0gWy4uLlBSSU9SSVRJWkVEX0FVVEhPUklUSUVTXS5yZXZlcnNlKCk7XG4gIHJlYWRvbmx5IHN0YXR1c0xpc3QgPSBTdGF0dXNMaXN0O1xuICByZWFkb25seSBzdGF0dXNCeUlkID0gU3RhdHVzQnlJZDtcblxuICBhZGRpdGlvbmFsRmllbGRzOiBGb3JtRmllbGREZWZpbml0aW9uW107XG4gIGZpbHRlckNyaXRlcmlhQ291bnQgPSAwO1xuXG4gIHNldCBzaG93VXNlcm5hbWVDb2x1bW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFNob3dDb2x1bW4oJ3VzZXJuYW1lJywgdmFsdWUpO1xuICB9XG5cbiAgc2V0IHNob3dVc2VybmFtZUV4dHJhbmV0Q29sdW1uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRTaG93Q29sdW1uKCd1c2VybmFtZUV4dHJhbmV0JywgdmFsdWUpO1xuICB9XG5cbiAgQElucHV0KCkgdXNlU3RpY2t5ID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJvdGVjdGVkIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdG9yU2VydmljZTogVmFsaWRhdG9yU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IFBlcnNvblNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIGVudmlyb25tZW50XG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yLFxuICAgICAgUkVTRVJWRURfU1RBUlRfQ09MVU1OU1xuICAgICAgICAuY29uY2F0KFtcbiAgICAgICAgICAnYXZhdGFyJyxcbiAgICAgICAgICAnbGFzdE5hbWUnLFxuICAgICAgICAgICdmaXJzdE5hbWUnLFxuICAgICAgICAgICdlbWFpbCcsXG4gICAgICAgICAgJ3Byb2ZpbGUnLFxuICAgICAgICAgICdzdGF0dXMnLFxuICAgICAgICAgICd1c2VybmFtZScsXG4gICAgICAgICAgJ3VzZXJuYW1lRXh0cmFuZXQnLFxuICAgICAgICAgICdwdWJrZXknXG4gICAgICAgIF0pXG4gICAgICAgIC5jb25jYXQoYWNjb3VudFNlcnZpY2UuYWRkaXRpb25hbEZpZWxkcy5tYXAoZmllbGQgPT4gZmllbGQua2V5KSlcbiAgICAgICAgLmNvbmNhdChSRVNFUlZFRF9FTkRfQ09MVU1OUyksXG4gICAgICBuZXcgRW50aXRpZXNUYWJsZURhdGFTb3VyY2UoUGVyc29uLCBkYXRhU2VydmljZSwgdmFsaWRhdG9yU2VydmljZSwge1xuICAgICAgICBwcmVwZW5kTmV3RWxlbWVudHM6IGZhbHNlLFxuICAgICAgICBzdXBwcmVzc0Vycm9yczogZW52aXJvbm1lbnQucHJvZHVjdGlvbixcbiAgICAgICAgZGF0YVNlcnZpY2VPcHRpb25zOiB7XG4gICAgICAgICAgc2F2ZU9ubHlEaXJ0eVJvd3M6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBudWxsXG4gICAgKTtcblxuXG4gICAgdGhpcy5jYW5FZGl0ID0gYWNjb3VudFNlcnZpY2UuaXNBZG1pbigpO1xuICAgIHRoaXMuY2FuU2VuZE1lc3NhZ2UgPSB0aGlzLmNhbkVkaXQ7XG4gICAgdGhpcy5pbmxpbmVFZGl0aW9uID0gdGhpcy5jYW5FZGl0O1xuICAgIHRoaXMuY29uZmlybUJlZm9yZURlbGV0ZSA9IHRydWU7XG4gICAgdGhpcy5hdXRvTG9hZCA9IGZhbHNlOyAvLyBXYWl0IGNvbmZpZyBsb2FkaW5nXG4gICAgdGhpcy5pMThuQ29sdW1uUHJlZml4ID0gJ1VTRVIuJztcbiAgICB0aGlzLmRlZmF1bHRTb3J0QnkgPSAnbGFzdE5hbWUnO1xuICAgIHRoaXMuZGVmYXVsdFNvcnREaXJlY3Rpb24gPSAnYXNjJztcblxuICAgIHRoaXMuZmlsdGVyRm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIHNlYXJjaFRleHQ6IFtudWxsXSxcbiAgICAgIHN0YXR1c0lkOiBbbnVsbF1cbiAgICB9KTtcblxuICAgIHRoaXMuYWRkaXRpb25hbEZpZWxkcyA9ICh0aGlzLmFjY291bnRTZXJ2aWNlLmFkZGl0aW9uYWxGaWVsZHMgfHwgW10pXG4gICAgICAuZmlsdGVyKGZpZWxkID0+IGlzTm90TmlsKGZpZWxkLmF1dG9jb21wbGV0ZSkpXG4gICAgICAubWFwKGZpZWxkID0+IHtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRvIGdldCB0aGUgZmluYWwgYXV0b2NvbXBsZXRlIGNvbmZpZyAoZS5nLiB3aXRoIGEgc3VnZ2VzdEZuIGZ1bmN0aW9uKVxuICAgICAgICBmaWVsZC5hdXRvY29tcGxldGUgPSB0aGlzLnJlZ2lzdGVyQXV0b2NvbXBsZXRlRmllbGQoZmllbGQua2V5LCB7XG4gICAgICAgICAgLi4uZmllbGQuYXV0b2NvbXBsZXRlIC8vIENvcHksIHRvIGJlIHN1cmUgdGhlIG9yaWdpbmFsIGNvbmZpZyBpcyB1bmNoYW5nZWRcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH0pO1xuXG4gICAgLy8gRm9yIERFViBvbmx5IC0tXG4gICAgdGhpcy5kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICB9XG5cbiAgQFZpZXdDaGlsZChNYXRFeHBhbnNpb25QYW5lbCwge3N0YXRpYzogdHJ1ZX0pIGZpbHRlckV4cGFuc2lvblBhbmVsOiBNYXRFeHBhbnNpb25QYW5lbDtcblxuICBnZXQgZmlyc3RVc2VyQ29sdW1uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY29sdW1uTmFtZSA9IHRoaXMuZGlzcGxheWVkQ29sdW1uc1tSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmxlbmd0aF07XG4gICAgLy8gU2tpcCBhdmF0YXIgY29sdW1uLCBpZiBwcmVzZW50XG4gICAgcmV0dXJuIGNvbHVtbk5hbWUgPT09ICdhdmF0YXInICYmIHRoaXMuZGlzcGxheWVkQ29sdW1uc1tSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmxlbmd0aCsxXSB8fCBjb2x1bW5OYW1lO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLnN1YnNjcmliZShjb25maWcgPT4ge1xuICAgICAgICBjb25zdCBhdXRoVG9rZW5UeXBlID0gY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuQVVUSF9UT0tFTl9UWVBFKSBhcyBBdXRoVG9rZW5UeXBlO1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdbdXNlcnNdIEF1dGhUb2tlblR5cGU9JyArIGF1dGhUb2tlblR5cGUpXG4gICAgICAgIHN3aXRjaCAoYXV0aFRva2VuVHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJiYXNpY1wiOlxuICAgICAgICAgICAgdGhpcy5zZXRTaG93Q29sdW1uKCdwdWJrZXknLCBmYWxzZSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgICAgICBjYXNlIFwiYmFzaWMtYW5kLXRva2VuXCI6XG4gICAgICAgICAgICB0aGlzLnNldFNob3dDb2x1bW4oJ3VzZXJuYW1lJywgdHJ1ZSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2hvd0NvbHVtbigndXNlcm5hbWVFeHRyYW5ldCcsIHRydWUsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwidG9rZW5cIjpcbiAgICAgICAgICAgIHRoaXMuc2V0U2hvd0NvbHVtbigncHVia2V5JywgdHJ1ZSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2hvd0NvbHVtbigndXNlcm5hbWUnLCBmYWxzZSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2hvd0NvbHVtbigndXNlcm5hbWVFeHRyYW5ldCcsIGZhbHNlLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1ucygpO1xuICAgICAgICB0aGlzLm9uUmVmcmVzaC5lbWl0KCk7XG4gICAgICB9KVxuICAgIClcblxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLm9uUmVmcmVzaC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmZpbHRlckZvcm0ubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgfSkpO1xuXG4gICAgLy8gVXBkYXRlIGZpbHRlciB3aGVuIGNoYW5nZXNcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5maWx0ZXJGb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMjUwKSxcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5maWx0ZXJGb3JtLnZhbGlkKSxcbiAgICAgICAgICB0YXAoanNvbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBQZXJzb25GaWx0ZXIuZnJvbU9iamVjdChqc29uKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQ3JpdGVyaWFDb3VudCA9IGZpbHRlci5jb3VudE5vdEVtcHR5Q3JpdGVyaWEoKTtcbiAgICAgICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGZpbHRlciwgd2l0aG91dCByZWxvYWRpbmcgdGhlIGNvbnRlbnRcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyKGZpbHRlciwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAvLyBTYXZlIGZpbHRlciBpbiBzZXR0aW5ncyAoYWZ0ZXIgYSBkZWJvdW5jZSB0aW1lKVxuICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxuICAgICAgICAgIHRhcChqc29uID0+IHRoaXMuc2V0dGluZ3Muc2F2ZVBhZ2VTZXR0aW5nKHRoaXMuc2V0dGluZ3NJZCwganNvbiwgU0VUVElOR1NfRklMVEVSKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCkpO1xuXG4gICAgLy8gUmVzdG9yZSBmaWx0ZXIgZnJvbSBzZXR0aW5ncywgb3IgbG9hZCBhbGxcbiAgICB0aGlzLnJlc3RvcmVGaWx0ZXJPckxvYWQoKTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVyQW5kQ2xvc2VQYW5lbChldmVudD86IEV2ZW50KSB7XG4gICAgdGhpcy5vblJlZnJlc2guZW1pdChldmVudCk7XG4gICAgdGhpcy5maWx0ZXJFeHBhbnNpb25QYW5lbC5jbG9zZSgpO1xuICB9XG5cbiAgcmVzZXRGaWx0ZXIoZXZlbnQ/OiBFdmVudCkge1xuICAgIHRoaXMudG90YWxSb3dDb3VudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmZpbHRlckNyaXRlcmlhQ291bnQgPSAwO1xuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuICAgIHRoaXMuZmlsdGVyRm9ybS5yZXNldCgpO1xuICAgIHRoaXMuc2V0RmlsdGVyKG51bGwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc3RvcmVGaWx0ZXJPckxvYWQoKSB7XG4gICAgdGhpcy5tYXJrQXNMb2FkaW5nKCk7XG5cbiAgICBjb25zb2xlLmRlYnVnKFwiW3VzZXJzXSBSZXN0b3JpbmcgZmlsdGVyIGZyb20gc2V0dGluZ3MuLi5cIik7XG5cbiAgICBjb25zdCBqc29uID0gdGhpcy5zZXR0aW5ncy5nZXRQYWdlU2V0dGluZ3ModGhpcy5zZXR0aW5nc0lkLCBTRVRUSU5HU19GSUxURVIpIHx8IHt9O1xuICAgIGNvbnN0IGZpbHRlciA9IFBlcnNvbkZpbHRlci5mcm9tT2JqZWN0KGpzb24pO1xuXG4gICAgdGhpcy5maWx0ZXJGb3JtLnBhdGNoVmFsdWUoanNvbik7XG4gICAgdGhpcy5zZXRGaWx0ZXIoZmlsdGVyLCB7ZW1pdEV2ZW50OiB0cnVlfSk7XG4gIH1cblxuICBjbGVhckNvbnRyb2xWYWx1ZShldmVudDogRXZlbnQsIGZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuIHtcbiAgICBpZiAoZXZlbnQpIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyBBdm9pZCB0byBlbnRlciBpbnB1dCB0aGUgZmllbGRcbiAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyBvcGVuQ29tcG9zZU1lc3NhZ2VNb2RhbChldmVudD86IEV2ZW50KTogUHJvbWlzZTxhbnk+IHtcblxuICAgIC8vIEdldCByZWNpcGllbnRzXG4gICAgY29uc3QgcmVjaXBpZW50cyA9ICh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCB8fCBbXSlcbiAgICAgIC5tYXAocm93ID0+IHJvdy5jdXJyZW50RGF0YSlcbiAgICAgIC5tYXAoUGVyc29uLmZyb21PYmplY3QpXG4gICAgICAubWFwKHAgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBwLmFzT2JqZWN0KHttaW5pZnk6IHRydWV9KTtcbiAgICAgICAgdGFyZ2V0LmRlcGFydG1lbnQgPSBwLmRlcGFydG1lbnQ/LmFzT2JqZWN0KCk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IGhhc1RvcE1vZGFsID0gISEoYXdhaXQgdGhpcy5tb2RhbEN0cmwuZ2V0VG9wKCkpO1xuICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5tb2RhbEN0cmwuY3JlYXRlKHtcbiAgICAgIGNvbXBvbmVudDogTWVzc2FnZU1vZGFsLFxuICAgICAgY29tcG9uZW50UHJvcHM6IDxNZXNzYWdlTW9kYWxPcHRpb25zPntcbiAgICAgICAgc3VnZ2VzdEZuOiAodmFsdWUsIGZpbHRlciwgc29ydEJ5LCBzb3J0RGlyZWN0aW9uKSA9PiB0aGlzLmRhdGFTZXJ2aWNlLnN1Z2dlc3QodmFsdWUsIGZpbHRlciwgc29ydEJ5LCBzb3J0RGlyZWN0aW9uKSxcbiAgICAgICAgZGF0YTogPE1lc3NhZ2U+e1xuICAgICAgICAgIHJlY2lwaWVudHNcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNzc0NsYXNzOiBoYXNUb3BNb2RhbCAmJiAnc3RhY2stbW9kYWwnXG4gICAgfSk7XG5cbiAgICAvLyBPcGVuIHRoZSBtb2RhbFxuICAgIGF3YWl0IG1vZGFsLnByZXNlbnQoKTtcblxuICAgIC8vIE9uIGRpc21pc3NcbiAgICBjb25zdCB7ZGF0YX0gPSBhd2FpdCBtb2RhbC5vbkRpZERpc21pc3MoKTtcbiAgICBpZiAoIWRhdGEgfHwgIShkYXRhIGluc3RhbmNlb2YgTWVzc2FnZSkpIHJldHVybjsgLy8gQ0FOQ0VMTEVEXG5cbiAgICBjb25zb2xlLmluZm8oJ1t1c2Vyc10gcmVjZWl2ZWQgbWVzc2FnZSB0byBzZW5kOiAnLCBkYXRhKTtcbiAgICBhd2FpdCB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnNlbmQoZGF0YSk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG59XG5cbiIsIjxhcHAtdG9vbGJhciBbdGl0bGVdPVwiJ1VTRVIuTElTVC5USVRMRSd8dHJhbnNsYXRlXCJcbiAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgIFtjYW5Hb0JhY2tdPVwiZmFsc2VcIlxuICAgICAgICAgICAgIFtoYXNWYWxpZGF0ZV09XCIhKGxvYWRpbmdTdWJqZWN0fGFzeW5jKSAmJiBkaXJ0eVwiXG4gICAgICAgICAgICAgKG9uVmFsaWRhdGUpPVwic2F2ZSgpXCI+XG4gIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG5cbiAgICA8IS0tIENvbXBvc2UgbWVzc2FnZSAtLT5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAqbmdJZj1cImNhblNlbmRNZXNzYWdlXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInVVNFUi5MSVNULkJUTl9TRU5EX01FU1NBR0UnfHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlbkNvbXBvc2VNZXNzYWdlTW9kYWwoJGV2ZW50KVwiPlxuICAgICAgPGlvbi1pY29uIG5hbWU9XCJtYWlsXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNlbGVjdGlvbi5oYXNWYWx1ZSgpOyBlbHNlIGhhc1NlbGVjdGlvblwiPlxuICAgICAgPCEtLSBBZGQgLS0+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImNhbkVkaXQgJiYgIW1vYmlsZVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9BREQnfHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhZGRSb3coKVwiPlxuICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8IS0tIFJlZnJlc2ggLS0+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAqbmdJZj1cIiFtb2JpbGVcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fUkVGUkVTSCd8dHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVmcmVzaC5lbWl0KClcIj5cbiAgICAgICAgPG1hdC1pY29uPnJlZnJlc2g8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDwhLS0gcmVzZXQgZmlsdGVyIC0tPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0RmlsdGVyKClcIlxuICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlckNyaXRlcmlhQ291bnRcIj5cbiAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwiYWNjZW50XCI+ZmlsdGVyX2xpc3RfYWx0PC9tYXQtaWNvbj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbi1zZWNvbmRhcnlcIiBzdHlsZT1cImxlZnQ6IDE2cHg7IHRvcDogNXB4OyBmb250LXdlaWdodDogYm9sZDtcIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPCEtLSBzaG93IGZpbHRlciAtLT5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJmaWx0ZXJFeHBhbnNpb25QYW5lbC50b2dnbGUoKVwiPlxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJmaWx0ZXJDcml0ZXJpYUNvdW50OyBlbHNlIGVtcHR5RmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgIFttYXRCYWRnZV09XCJmaWx0ZXJDcml0ZXJpYUNvdW50XCJcbiAgICAgICAgICAgICAgICAgIG1hdEJhZGdlQ29sb3I9XCJhY2NlbnRcIlxuICAgICAgICAgICAgICAgICAgbWF0QmFkZ2VTaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgbWF0QmFkZ2VQb3NpdGlvbj1cImFib3ZlIGFmdGVyXCI+ZmlsdGVyX2xpc3RfYWx0XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlGaWx0ZXI+XG4gICAgICAgICAgPG1hdC1pY29uPmZpbHRlcl9saXN0X2FsdDwvbWF0LWljb24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjaGFzU2VsZWN0aW9uPlxuXG4gICAgICA8IS0tIGRlbGV0ZSAtLT5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuLXhzIGhpZGRlbi1zbVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9ERUxFVEUnfHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVTZWxlY3Rpb24oJGV2ZW50KVwiPlxuICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvaW9uLWJ1dHRvbnM+XG48L2FwcC10b29sYmFyPlxuXG48aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuXG4gIDwhLS0gZXJyb3IgLS0+XG4gIDxpb24taXRlbSAqbmdJZj1cImVycm9yU3ViamVjdHxhc3luYyA7IGxldCBlcnJvclwiIGxpbmVzPVwibm9uZVwiIEBzbGlkZVVwRG93bkFuaW1hdGlvbj5cbiAgICA8aW9uLWljb24gY29sb3I9XCJkYW5nZXJcIiBzbG90PVwic3RhcnRcIiBuYW1lPVwiYWxlcnQtY2lyY2xlXCI+PC9pb24taWNvbj5cbiAgICA8aW9uLWxhYmVsIGNvbG9yPVwiZGFuZ2VyXCIgY2xhc3M9XCJlcnJvclwiIFtpbm5lckhUTUxdPVwiZXJyb3J8dHJhbnNsYXRlXCI+PC9pb24tbGFiZWw+XG4gIDwvaW9uLWl0ZW0+XG5cbiAgPCEtLSBkZWJ1ZyAtLT5cbiAgPGFwcC1kZWJ1ZyAqbmdJZj1cImRlYnVnXCI+XG4gICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgIDxpb24tcm93PlxuICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICBmb2N1c0NvbHVtbjoge3tmb2N1c0NvbHVtbn19PGJyLz5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLWdyaWQ+XG4gIDwvYXBwLWRlYnVnPlxuXG4gIDwhLS0gc2VhcmNoIC0tPlxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAjZmlsdGVyRXhwYW5zaW9uUGFuZWwgY2xhc3M9XCJpb24tbm8tcGFkZGluZyBmaWx0ZXItcGFuZWwgZmlsdGVyLXBhbmVsLWZsb2F0aW5nXCI+XG4gICAgPGZvcm0gY2xhc3M9XCJmb3JtLWNvbnRhaW5lciBpb24tcGFkZGluZ1wiIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybVwiIChuZ1N1Ym1pdCk9XCJvblJlZnJlc2guZW1pdCgpXCI+XG4gICAgICA8aW9uLWdyaWQ+XG4gICAgICAgIDxpb24tcm93PlxuICAgICAgICAgIDxpb24tY29sPlxuICAgICAgICAgICAgPCEtLSBzZWFyY2ggLS0+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbcGxhY2Vob2xkZXJdPVwiJ1VTRVIuTElTVC5GSUxURVIuU0VBUkNIJ3x0cmFuc2xhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hUZXh0XCI+XG5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckNvbnRyb2xWYWx1ZSgkZXZlbnQsIGZpbHRlckZvcm0uY29udHJvbHMuc2VhcmNoVGV4dClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiZmlsdGVyRm9ybS5jb250cm9scy5zZWFyY2hUZXh0LmRpc2FibGVkIHx8ICFmaWx0ZXJGb3JtLmNvbnRyb2xzLnNlYXJjaFRleHQudmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICA8IS0tIHN0YXR1cyAtLT5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwic3RhdHVzSWRcIiBbcGxhY2Vob2xkZXJdPVwiJ1VTRVIuU1RBVFVTJ3x0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwibnVsbFwiPjxpPjxzcGFuIHRyYW5zbGF0ZT5DT01NT04uRU1QVFlfT1BUSU9OPC9zcGFuPjwvaT48L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc3RhdHVzTGlzdFwiIFt2YWx1ZV09XCJpdGVtLmlkXCI+XG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwiaXRlbS5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJDb250cm9sVmFsdWUoJGV2ZW50LCBmaWx0ZXJGb3JtLmNvbnRyb2xzLnN0YXR1c0lkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCJmaWx0ZXJGb3JtLmNvbnRyb2xzLnN0YXR1c0lkLmRpc2FibGVkIHx8ICFmaWx0ZXJGb3JtLmNvbnRyb2xzLnN0YXR1c0lkLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgPC9pb24tcm93PlxuICAgICAgPC9pb24tZ3JpZD5cbiAgICA8L2Zvcm0+XG5cbiAgICA8bWF0LWFjdGlvbi1yb3c+XG4gICAgICA8IS0tIENvdW50ZXIgIC0tPlxuICAgICAgPGlvbi1sYWJlbCBbaGlkZGVuXT1cIihsb2FkaW5nU3ViamVjdHxhc3luYykgfHwgZmlsdGVyRm9ybS5kaXJ0eVwiXG4gICAgICAgICAgICAgICAgIFtjb2xvcl09XCJlbXB0eSAmJiAnZGFuZ2VyJ1wiXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgICAge3sgKHRvdGFsUm93Q291bnQgPyAnQ09NTU9OLlJFU1VMVF9DT1VOVCcgOiAnQ09NTU9OLk5PX1JFU1VMVCcpIHwgdHJhbnNsYXRlOiB7XG4gICAgICAgIGNvdW50OiAodG90YWxSb3dDb3VudCB8XG4gICAgICAgICAgbnVtYmVyRm9ybWF0KVxuICAgICAgfSB9fVxuICAgICAgPC9pb24tbGFiZWw+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyLXNwYWNlclwiPjwvZGl2PlxuXG4gICAgICA8IS0tIENsb3NlIHBhbmVsIC0tPlxuICAgICAgPGlvbi1idXR0b24gbWF0LWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiBjb2xvcj1cImRhcmtcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbHRlckV4cGFuc2lvblBhbmVsLmNsb3NlKClcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdTdWJqZWN0fGFzeW5jXCI+XG4gICAgICAgIDxpb24tdGV4dCB0cmFuc2xhdGU+Q09NTU9OLkJUTl9DTE9TRTwvaW9uLXRleHQ+XG4gICAgICA8L2lvbi1idXR0b24+XG5cbiAgICAgIDwhLS0gU2VhcmNoIGJ1dHRvbiAtLT5cbiAgICAgIDxpb24tYnV0dG9uIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJmaWx0ZXJGb3JtLmRpcnR5ID8gJ3RlcnRpYXJ5JyA6ICdkYXJrJ1wiXG4gICAgICAgICAgICAgICAgICBbZmlsbF09XCJmaWx0ZXJGb3JtLmRpcnR5ID8gJ3NvbGlkJyA6ICdjbGVhcidcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFwcGx5RmlsdGVyQW5kQ2xvc2VQYW5lbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nU3ViamVjdHxhc3luY1wiPlxuICAgICAgICA8aW9uLXRleHQgdHJhbnNsYXRlPkNPTU1PTi5CVE5fQVBQTFk8L2lvbi10ZXh0PlxuICAgICAgPC9pb24tYnV0dG9uPlxuXG4gICAgPC9tYXQtYWN0aW9uLXJvdz5cbiAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gIDwhLS0gZXJyb3IgLS0+XG4gIDxpb24taXRlbSAqbmdJZj1cImVycm9yU3ViamVjdHxhc3luYyA7IGxldCBlcnJvclwiIHZpc2libGUteHMgdmlzaWJsZS1zbSB2aXNpYmxlLW1vYmlsZSBsaW5lcz1cIm5vbmVcIj5cbiAgICA8aW9uLWljb24gY29sb3I9XCJkYW5nZXJcIiBzbG90PVwic3RhcnRcIiBuYW1lPVwiYWxlcnQtY2lyY2xlXCI+PC9pb24taWNvbj5cbiAgICA8aW9uLWxhYmVsIGNvbG9yPVwiZGFuZ2VyXCIgY2xhc3M9XCJlcnJvclwiIFtpbm5lckhUTUxdPVwiZXJyb3J8dHJhbnNsYXRlXCI+PC9pb24tbGFiZWw+XG4gIDwvaW9uLWl0ZW0+XG5cbiAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiPlxuICAgIDx0YWJsZSAjdGFibGUgbWF0LXRhYmxlIG1hdFNvcnRcbiAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgICAgICAgIFttYXRTb3J0QWN0aXZlXT1cImRlZmF1bHRTb3J0QnlcIiBbbWF0U29ydERpcmVjdGlvbl09XCJkZWZhdWx0U29ydERpcmVjdGlvblwiXG4gICAgICAgICAgIG1hdFNvcnREaXNhYmxlQ2xlYXIgW3RyYWNrQnldPVwidHJhY2tCeUZuXCI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0XCIgW3N0aWNreV09XCJ1c2VTdGlja3lcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCIhaW5saW5lRWRpdGlvblwiPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCIkZXZlbnQgPyBtYXN0ZXJUb2dnbGUoKSA6IG51bGxcIiBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiBpc0FsbFNlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiPlxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiIWlubGluZUVkaXRpb25cIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoY2hhbmdlKT1cIiRldmVudCA/IHNlbGVjdGlvbi50b2dnbGUocm93KSA6IG51bGxcIiBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaXNTZWxlY3RlZChyb3cpXCI+XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBJZCBDb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImlkXCIgW3N0aWNreV09XCJ1c2VTdGlja3lcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+XG4gICAgICAgICAgPGlvbi1sYWJlbD4jPC9pb24tbGFiZWw+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj57eyByb3cuY3VycmVudERhdGEuaWQgfX08L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gYXZhdGFyIENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiYXZhdGFyXCIgW3N0aWNreV09XCJ1c2VTdGlja3lcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj48L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhclwiICpuZ0lmPVwicm93LmN1cnJlbnREYXRhLmF2YXRhcjsgZWxzZSBnZW5lcmF0ZUljb25cIlxuICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kLWltYWdlJzondXJsKCcrcm93LmN1cnJlbnREYXRhLmF2YXRhcisnKSd9XCI+PC9kaXY+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNnZW5lcmF0ZUljb24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyXCI+XG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIzOFwiIHdpZHRoPVwiMzhcIiBbZGF0YS1qZGVudGljb24tdmFsdWVdPVwicm93LmN1cnJlbnREYXRhLmlkXCI+PC9zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gbGFzdE5hbWUgIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJsYXN0TmFtZVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj5cbiAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+VVNFUi5MQVNUX05BTUU8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiAoY2xpY2spPVwiZm9jdXNDb2x1bW49J2xhc3ROYW1lJ1wiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmbG9hdExhYmVsPVwibmV2ZXJcIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzWydsYXN0TmFtZSddXCJcbiAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1VTRVIuTEFTVF9OQU1FJ3x0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhcm93LmVkaXRpbmdcIlxuICAgICAgICAgICAgICAgICAgIFthcHBBdXRvZm9jdXNdPVwicm93LmVkaXRpbmcgJiYgZm9jdXNDb2x1bW49PT0nbGFzdE5hbWUnXCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicm93LnZhbGlkYXRvci5jb250cm9sc1snbGFzdE5hbWUnXS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInJvdy52YWxpZGF0b3IuY29udHJvbHNbJ2xhc3ROYW1lJ10uaGFzRXJyb3IoJ21pbmxlbmd0aCcpXCI+XG4gICAgICAgICAgICAgIDxzcGFuPnt7J0VSUk9SLkZJRUxEX01JTl9MRU5HVEgnIHwgdHJhbnNsYXRlOiB7bWluTGVuZ3RoOiAyfSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvdGQ+XG5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIGZpcnN0bmFtZSAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZmlyc3ROYW1lXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPlxuICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5VU0VSLkZJUlNUX05BTUU8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImZvY3VzQ29sdW1uPSdmaXJzdE5hbWUnXCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZsb2F0TGFiZWw9XCJuZXZlclwiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzWydmaXJzdE5hbWUnXVwiXG4gICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidVU0VSLkZJUlNUX05BTUUnfHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiFyb3cuZWRpdGluZ1wiXG4gICAgICAgICAgICAgICAgICAgW2FwcEF1dG9mb2N1c109XCJyb3cuZWRpdGluZyAmJiBmb2N1c0NvbHVtbj09PSdmaXJzdE5hbWUnXCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicm93LnZhbGlkYXRvci5jb250cm9sc1snZmlyc3ROYW1lJ10uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzWydmaXJzdE5hbWUnXS5oYXNFcnJvcignbWlubGVuZ3RoJylcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3snRVJST1IuRklFTERfTUlOX0xFTkdUSCcgfCB0cmFuc2xhdGU6IHttaW5MZW5ndGg6IDJ9IH19PC9zcGFuPlxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIGVtYWlsICAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZW1haWxcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlVTRVIuRU1BSUw8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiAoY2xpY2spPVwiZm9jdXNDb2x1bW49J2VtYWlsJ1wiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmbG9hdExhYmVsPVwibmV2ZXJcIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwicm93LnZhbGlkYXRvci5jb250cm9sc1snZW1haWwnXVwiXG4gICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidVU0VSLkVNQUlMJ3x0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhcm93LmVkaXRpbmdcIlxuICAgICAgICAgICAgICAgICAgIFthcHBBdXRvZm9jdXNdPVwicm93LmVkaXRpbmcgJiYgZm9jdXNDb2x1bW49PT0nZW1haWwnXCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicm93LnZhbGlkYXRvci5jb250cm9sc1snZW1haWwnXS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInJvdy52YWxpZGF0b3IuY29udHJvbHNbJ2VtYWlsJ10uaGFzRXJyb3IoJ2VtYWlsJylcIj5cbiAgICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPkVSUk9SLkZJRUxEX05PVF9WQUxJRF9FTUFJTDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBhZGRpdGlvbmFsIGZpZWxkcyAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRlZmluaXRpb24gb2YgYWRkaXRpb25hbEZpZWxkc1wiIFttYXRDb2x1bW5EZWZdPVwiZGVmaW5pdGlvbi5rZXlcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICA8c3Bhbj57e2RlZmluaXRpb24ubGFiZWx8dHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImZvY3VzQ29sdW1uPWRlZmluaXRpb24ua2V5XCI+XG4gICAgICAgICAgPGFwcC1mb3JtLWZpZWxkIGZsb2F0TGFiZWw9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZpbml0aW9uXT1cImRlZmluaXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicm93LnZhbGlkYXRvci5jb250cm9sc1tkZWZpbml0aW9uLmtleV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZGVmaW5pdGlvbi5leHRyYT8uYWNjb3VudD8ucmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cInJvdy5lZGl0aW5nICYmIGZvY3VzQ29sdW1uPT09ZGVmaW5pdGlvbi5rZXlcIj5cbiAgICAgICAgICA8L2FwcC1mb3JtLWZpZWxkPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gcHJvZmlsZSBjb2x1bW4gIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJwcm9maWxlXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlVTRVIuUFJPRklMRTwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiZm9jdXNDb2x1bW49J3Byb2ZpbGUnXCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZsb2F0TGFiZWw9XCJuZXZlclwiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cInJvdy52YWxpZGF0b3IuY29udHJvbHNbJ21haW5Qcm9maWxlJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidVU0VSLlBST0ZJTEUnfHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBwcm9maWxlc1wiIFt2YWx1ZV09XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAge3sgKCdVU0VSLlBST0ZJTEVfRU5VTS4nICsgaXRlbSkgfCB1cHBlcmNhc2UgfHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicm93LnZhbGlkYXRvci5jb250cm9sc1snbWFpblByb2ZpbGUnXS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBTdGF0dXMgY29sdW1uICAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3RhdHVzXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlVTRVIuU1RBVFVTPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCJcbiAgICAgICAgICAgIChjbGljayk9XCJmb2N1c0NvbHVtbj0nc3RhdHVzJ1wiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmbG9hdExhYmVsPVwibmV2ZXJcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBtYXRQcmVmaXggKm5nSWY9XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzWydzdGF0dXNJZCddLnZhbHVlICZndDs9MFwiIFtuYW1lXT1cInN0YXR1c0J5SWRbcm93LnZhbGlkYXRvci5jb250cm9sc1snc3RhdHVzSWQnXS52YWx1ZV0/Lmljb25cIj48L2lvbi1pY29uPlxuXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwicm93LnZhbGlkYXRvci5jb250cm9sc1snc3RhdHVzSWQnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1JFRkVSRU5USUFMLlNUQVRVUyd8dHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzWydzdGF0dXNJZCddLnZhbHVlICZndDs9MFwiPlxuICAgICAgICAgICAgICAgICAge3sgc3RhdHVzQnlJZFtyb3cudmFsaWRhdG9yLmNvbnRyb2xzWydzdGF0dXNJZCddLnZhbHVlXT8ubGFiZWwgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIHN0YXR1c0xpc3RcIiBbdmFsdWVdPVwiaXRlbS5pZFwiPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBbbmFtZV09XCJpdGVtLmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicm93LnZhbGlkYXRvci5jb250cm9sc1snc3RhdHVzSWQnXS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSB1c2VybmFtZSAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwidXNlcm5hbWVcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlVTRVIuVVNFUk5BTUU8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImZvY3VzQ29sdW1uPSd1c2VybmFtZSdcIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZmxvYXRMYWJlbD1cIm5ldmVyXCIgPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzLnVzZXJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1VTRVIuVVNFUk5BTUUnfHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiFyb3cuZWRpdGluZ1wiXG4gICAgICAgICAgICAgICAgICAgW2FwcEF1dG9mb2N1c109XCJyb3cuZWRpdGluZyAmJiBmb2N1c0NvbHVtbj09PSd1c2VybmFtZSdcIj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzLnVzZXJuYW1lLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX1JFUVVJUkVEPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIHVzZXJuYW1lIGV4dHJhbmV0IC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ1c2VybmFtZUV4dHJhbmV0XCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPlxuICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5VU0VSLlVTRVJOQU1FX0VYVFJBTkVUPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCJcbiAgICAgICAgICAgIChjbGljayk9XCJmb2N1c0NvbHVtbj0ndXNlcm5hbWVFeHRyYW5ldCdcIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZmxvYXRMYWJlbD1cIm5ldmVyXCI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cInJvdy52YWxpZGF0b3IuY29udHJvbHMudXNlcm5hbWVFeHRyYW5ldFwiXG4gICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidVU0VSLlVTRVJOQU1FX0VYVFJBTkVUJ3x0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhcm93LmVkaXRpbmdcIlxuICAgICAgICAgICAgICAgICAgIFthcHBBdXRvZm9jdXNdPVwicm93LmVkaXRpbmcgJiYgZm9jdXNDb2x1bW49PT0ndXNlcm5hbWVFeHRyYW5ldCdcIj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzLnVzZXJuYW1lRXh0cmFuZXQuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gcHVia2V5ICAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicHVia2V5XCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPlxuICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5VU0VSLlBVQktFWTwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiXG4gICAgICAgICAgICBbdGl0bGVdPVwicm93LnZhbGlkYXRvci5jb250cm9scy5wdWJrZXkudmFsdWVDaGFuZ2VzfGFzeW5jXCJcbiAgICAgICAgICAgIChjbGljayk9XCJmb2N1c0NvbHVtbj0ncHVia2V5J1wiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmbG9hdExhYmVsPVwibmV2ZXJcIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwicm93LnZhbGlkYXRvci5jb250cm9sc1sncHVia2V5J11cIiBbcGxhY2Vob2xkZXJdPVwiJ1VTRVIuUFVCS0VZJ3x0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhcm93LmVkaXRpbmdcIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzLnB1YmtleS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInJvdy52YWxpZGF0b3IuY29udHJvbHMucHVia2V5Lmhhc0Vycm9yKCdwdWJrZXknKVwiPlxuICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+RVJST1IuRklFTERfTk9UX1ZBTElEX1BVQktFWTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBBY3Rpb25zIGJ1dHRvbnMgY29sdW1uIC0tPlxuICAgICAgPGFwcC1hY3Rpb25zLWNvbHVtbiBbc3RpY2t5RW5kXT1cInVzZVN0aWNreVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25zQ2xpY2spPVwib3BlblNlbGVjdENvbHVtbnNNb2RhbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhbmNlbE9yRGVsZXRlQ2xpY2spPVwiY2FuY2VsT3JEZWxldGUoJGV2ZW50LmV2ZW50LCAkZXZlbnQucm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjb25maXJtRWRpdENyZWF0ZUNsaWNrKT1cImNvbmZpcm1FZGl0Q3JlYXRlKCRldmVudC5ldmVudCwgJGV2ZW50LnJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uZmlybUFuZEFkZENsaWNrKT1cImNvbmZpcm1BbmRBZGQoJGV2ZW50LmV2ZW50LCAkZXZlbnQucm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChiYWNrd2FyZCk9XCJjb25maXJtQW5kQmFja3dhcmQoJGV2ZW50LmV2ZW50LCAkZXZlbnQucm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChmb3J3YXJkKT1cImNvbmZpcm1BbmRGb3J3YXJkKCRldmVudC5ldmVudCwgJGV2ZW50LnJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuQ2FuY2VsXT1cImZhbHNlXCI+XG4gICAgICA8L2FwcC1hY3Rpb25zLWNvbHVtbj5cblxuICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWVcIj48L3RyPlxuICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCJcbiAgICAgICAgICBbY2xhc3MubWF0LXJvdy1lcnJvcl09XCJyb3cudmFsaWRhdG9yLmludmFsaWRcIlxuICAgICAgICAgIFtjbGFzcy5tYXQtcm93LWRpcnR5XT1cInJvdy5jdXJyZW50RGF0YS5kaXJ0eVwiXG4gICAgICAgICAgW2NsYXNzLm1hdC1yb3ctZGlzYWJsZWRdPVwiIXJvdy5lZGl0aW5nXCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xpY2tSb3coJGV2ZW50LCByb3cpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lc2NhcGUpPVwiZXNjYXBlRWRpdGluZ1JvdygkZXZlbnQpXCJcbiAgICAgICAgICBbY2RrVHJhcEZvY3VzXT1cIiFyb3cudmFsaWRhdG9yPy52YWxpZFwiPjwvdHI+XG4gICAgPC90YWJsZT5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nU3ViamVjdHxhc3luYzsgZWxzZSBub1Jlc3VsdFwiPlxuICAgICAgPGlvbi1pdGVtPlxuICAgICAgICA8aW9uLXNrZWxldG9uLXRleHQgYW5pbWF0ZWQ+PC9pb24tc2tlbGV0b24tdGV4dD5cbiAgICAgIDwvaW9uLWl0ZW0+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGUgI25vUmVzdWx0PlxuICAgICAgPGlvbi1pdGVtICpuZ0lmPVwidG90YWxSb3dDb3VudCA9PT0gMFwiPlxuICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJkYW5nZXJcIiBjbGFzcz1cInRleHQtaXRhbGljXCIgdHJhbnNsYXRlPkNPTU1PTi5OT19SRVNVTFQ8L2lvbi10ZXh0PlxuICAgICAgPC9pb24taXRlbT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbjwvaW9uLWNvbnRlbnQ+XG5cbjxpb24tZm9vdGVyPlxuICA8bWF0LXBhZ2luYXRvciBjbGFzcz1cIm1hdC1wYWdpbmF0b3ItZm9vdGVyXCJcbiAgICAgICAgICAgICAgICAgW2xlbmd0aF09XCJ0b3RhbFJvd0NvdW50XCIgW3BhZ2VTaXplXT1cImRlZmF1bHRQYWdlU2l6ZVwiXG4gICAgICAgICAgICAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwiZGVmYXVsdFBhZ2VTaXplT3B0aW9uc1wiIHNob3dGaXJzdExhc3RCdXR0b25zPlxuICA8L21hdC1wYWdpbmF0b3I+XG5cbiAgPGFwcC1mb3JtLWJ1dHRvbnMtYmFyICpuZ0lmPVwiIW1vYmlsZSAmJiBpbmxpbmVFZGl0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkNhbmNlbCk9XCJvblJlZnJlc2guZW1pdCgpXCIgKG9uU2F2ZSk9XCJzYXZlKClcIiBbZGlzYWJsZWRdPVwiKGxvYWRpbmdTdWJqZWN0fGFzeW5jKSB8fCAhZGlydHlcIj48L2FwcC1mb3JtLWJ1dHRvbnMtYmFyPlxuPC9pb24tZm9vdGVyPlxuXG48aW9uLWZhYiBzbG90PVwiZml4ZWRcIiB2ZXJ0aWNhbD1cImJvdHRvbVwiIGhvcml6b250YWw9XCJlbmRcIiAqbmdJZj1cIm1vYmlsZVwiPlxuICA8aW9uLWZhYi1idXR0b24gY29sb3I9XCJ0ZXJ0aWFyeVwiIChjbGljayk9XCJhZGRSb3coKVwiPlxuICAgIDxpb24taWNvbiBuYW1lPVwiYWRkXCI+PC9pb24taWNvbj5cbiAgPC9pb24tZmFiLWJ1dHRvbj5cbjwvaW9uLWZhYj5cbiJdfQ==
@@ -0,0 +1,54 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CoreModule } from '../../core/core.module';
3
+ import { UsersPage } from './users';
4
+ import { SocialModule } from '../../social/social.module';
5
+ import { NgxJdenticonModule } from 'ngx-jdenticon';
6
+ import { TranslateModule } from '@ngx-translate/core';
7
+ import { SharedMaterialModule } from '../../shared/material/material.module';
8
+ import { SharedDebugModule } from '../../shared/debug/debug.module';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@ngx-translate/core";
11
+ export class AdminUsersModule {
12
+ }
13
+ AdminUsersModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AdminUsersModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
+ AdminUsersModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: AdminUsersModule, declarations: [UsersPage], imports: [NgxJdenticonModule, i1.TranslateModule,
15
+ // App modules
16
+ CoreModule,
17
+ SocialModule,
18
+ SharedMaterialModule,
19
+ SharedDebugModule], exports: [SocialModule,
20
+ TranslateModule,
21
+ // Components
22
+ UsersPage] });
23
+ AdminUsersModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AdminUsersModule, imports: [NgxJdenticonModule,
24
+ TranslateModule.forChild(),
25
+ // App modules
26
+ CoreModule,
27
+ SocialModule,
28
+ SharedMaterialModule,
29
+ SharedDebugModule, SocialModule,
30
+ TranslateModule] });
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AdminUsersModule, decorators: [{
32
+ type: NgModule,
33
+ args: [{
34
+ imports: [
35
+ NgxJdenticonModule,
36
+ TranslateModule.forChild(),
37
+ // App modules
38
+ CoreModule,
39
+ SocialModule,
40
+ SharedMaterialModule,
41
+ SharedDebugModule
42
+ ],
43
+ declarations: [
44
+ UsersPage
45
+ ],
46
+ exports: [
47
+ SocialModule,
48
+ TranslateModule,
49
+ // Components
50
+ UsersPage
51
+ ]
52
+ }]
53
+ }] });
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9hZG1pbi91c2Vycy91c2Vycy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQzs7O0FBd0JsRSxNQUFNLE9BQU8sZ0JBQWdCOzs2R0FBaEIsZ0JBQWdCOzhHQUFoQixnQkFBZ0IsaUJBVnpCLFNBQVMsYUFWVCxrQkFBa0I7UUFHbEIsY0FBYztRQUNkLFVBQVU7UUFDVixZQUFZO1FBQ1osb0JBQW9CO1FBQ3BCLGlCQUFpQixhQU1qQixZQUFZO1FBQ1osZUFBZTtRQUVmLGFBQWE7UUFDYixTQUFTOzhHQUdBLGdCQUFnQixZQXBCekIsa0JBQWtCO1FBQ2xCLGVBQWUsQ0FBQyxRQUFRLEVBQUU7UUFFMUIsY0FBYztRQUNkLFVBQVU7UUFDVixZQUFZO1FBQ1osb0JBQW9CO1FBQ3BCLGlCQUFpQixFQU1qQixZQUFZO1FBQ1osZUFBZTsyRkFNTixnQkFBZ0I7a0JBdEI1QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxrQkFBa0I7d0JBQ2xCLGVBQWUsQ0FBQyxRQUFRLEVBQUU7d0JBRTFCLGNBQWM7d0JBQ2QsVUFBVTt3QkFDVixZQUFZO3dCQUNaLG9CQUFvQjt3QkFDcEIsaUJBQWlCO3FCQUNsQjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osU0FBUztxQkFDVjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixlQUFlO3dCQUVmLGFBQWE7d0JBQ2IsU0FBUztxQkFDVjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0NvcmVNb2R1bGV9IGZyb20gJy4uLy4uL2NvcmUvY29yZS5tb2R1bGUnO1xuaW1wb3J0IHtVc2Vyc1BhZ2V9IGZyb20gJy4vdXNlcnMnO1xuaW1wb3J0IHtTb2NpYWxNb2R1bGV9IGZyb20gJy4uLy4uL3NvY2lhbC9zb2NpYWwubW9kdWxlJztcbmltcG9ydCB7Tmd4SmRlbnRpY29uTW9kdWxlfSBmcm9tICduZ3gtamRlbnRpY29uJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7U2hhcmVkTWF0ZXJpYWxNb2R1bGV9IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9tYXRlcmlhbC5tb2R1bGUnO1xuaW1wb3J0IHtTaGFyZWREZWJ1Z01vZHVsZX0gZnJvbSAnLi4vLi4vc2hhcmVkL2RlYnVnL2RlYnVnLm1vZHVsZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBOZ3hKZGVudGljb25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLmZvckNoaWxkKCksXG5cbiAgICAvLyBBcHAgbW9kdWxlc1xuICAgIENvcmVNb2R1bGUsXG4gICAgU29jaWFsTW9kdWxlLFxuICAgIFNoYXJlZE1hdGVyaWFsTW9kdWxlLFxuICAgIFNoYXJlZERlYnVnTW9kdWxlXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFVzZXJzUGFnZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgU29jaWFsTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcblxuICAgIC8vIENvbXBvbmVudHNcbiAgICBVc2Vyc1BhZ2VcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBBZG1pblVzZXJzTW9kdWxlIHtcbn1cbiJdfQ==