@sumaris-net/ngx-components 18.24.7 → 21.0.0-rc2

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 (797) hide show
  1. package/README.md +2 -0
  2. package/doc/build.md +2 -2
  3. package/fesm2022/sumaris-net.ngx-components.mjs +2440 -2229
  4. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  5. package/package.json +19 -19
  6. package/src/assets/environments/environment-test.json +2 -2
  7. package/src/assets/i18n/fr.json +6 -5
  8. package/src/assets/manifest.json +1 -1
  9. package/src/theme/_icons.scss +8 -12
  10. package/src/theme/_ionic.globals.scss +8 -1
  11. package/src/theme/_material.globals.scss +4 -1
  12. package/src/theme/_material.scss +16 -13
  13. package/src/theme/_mixins.scss +7 -1
  14. package/src/theme/_ngx-components.forms.scss +87 -84
  15. package/src/theme/_ngx-components.globals.scss +2 -0
  16. package/src/theme/_ngx-components.scss +19 -4
  17. package/src/theme/_ngx-components.table.scss +31 -26
  18. package/src/theme/_ngx-components.tabs.scss +16 -14
  19. package/src/theme/_responsive.scss +2 -0
  20. package/src/theme/_roboto.scss +3 -0
  21. package/src/theme/_theme.scss +11 -14
  22. package/src/theme/_theme.variables.scss +6 -1
  23. package/src/theme/ionic/ionic.functions.color.scss +13 -5
  24. package/src/theme/ionic/ionic.globals.scss +4 -4
  25. package/src/theme/ionic/ionic.theme.default.scss +2 -0
  26. package/types/sumaris-net.ngx-components.d.ts +14159 -0
  27. package/esm2022/public_api.mjs +0 -403
  28. package/esm2022/src/app/admin/admin-routing.module.mjs +0 -34
  29. package/esm2022/src/app/admin/admin.module.mjs +0 -32
  30. package/esm2022/src/app/admin/users/person.filter.mjs +0 -157
  31. package/esm2022/src/app/admin/users/person.service.mjs +0 -226
  32. package/esm2022/src/app/admin/users/person.validator.mjs +0 -78
  33. package/esm2022/src/app/admin/users/users-select.modal.mjs +0 -167
  34. package/esm2022/src/app/admin/users/users.mjs +0 -502
  35. package/esm2022/src/app/admin/users/users.module.mjs +0 -59
  36. package/esm2022/src/app/admin/users/users.utils.mjs +0 -29
  37. package/esm2022/src/app/core/about/about.modal.mjs +0 -119
  38. package/esm2022/src/app/core/about/about.module.mjs +0 -22
  39. package/esm2022/src/app/core/account/account.module.mjs +0 -75
  40. package/esm2022/src/app/core/account/account.page.mjs +0 -426
  41. package/esm2022/src/app/core/account/new-token.form.mjs +0 -109
  42. package/esm2022/src/app/core/account/new-token.modal.mjs +0 -66
  43. package/esm2022/src/app/core/account/password/change-password.form.mjs +0 -63
  44. package/esm2022/src/app/core/account/password/change-password.module.mjs +0 -22
  45. package/esm2022/src/app/core/account/password/change-password.page.mjs +0 -150
  46. package/esm2022/src/app/core/account/token.table.mjs +0 -160
  47. package/esm2022/src/app/core/auth/auth.form.mjs +0 -159
  48. package/esm2022/src/app/core/auth/auth.modal.mjs +0 -76
  49. package/esm2022/src/app/core/auth/auth.module.mjs +0 -56
  50. package/esm2022/src/app/core/auth/reset-password.modal.mjs +0 -89
  51. package/esm2022/src/app/core/core.module.mjs +0 -157
  52. package/esm2022/src/app/core/core.testing.module.mjs +0 -128
  53. package/esm2022/src/app/core/form/array/form-array.mjs +0 -328
  54. package/esm2022/src/app/core/form/array/testing/form-array-test.module.mjs +0 -23
  55. package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +0 -97
  56. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +0 -111
  57. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +0 -31
  58. package/esm2022/src/app/core/form/entity/editor.class.mjs +0 -268
  59. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +0 -420
  60. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +0 -748
  61. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +0 -25
  62. package/esm2022/src/app/core/form/entity/entity.module.mjs +0 -33
  63. package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +0 -190
  64. package/esm2022/src/app/core/form/form-container.class.mjs +0 -371
  65. package/esm2022/src/app/core/form/form.class.mjs +0 -342
  66. package/esm2022/src/app/core/form/form.module.mjs +0 -77
  67. package/esm2022/src/app/core/form/form.utils.mjs +0 -238
  68. package/esm2022/src/app/core/form/list/list.form.mjs +0 -243
  69. package/esm2022/src/app/core/form/list/list.module.mjs +0 -31
  70. package/esm2022/src/app/core/form/properties/properties-file.service.mjs +0 -133
  71. package/esm2022/src/app/core/form/properties/properties.form.mjs +0 -397
  72. package/esm2022/src/app/core/form/properties/properties.module.mjs +0 -85
  73. package/esm2022/src/app/core/form/properties/properties.table.mjs +0 -267
  74. package/esm2022/src/app/core/form/properties/properties.utils.mjs +0 -304
  75. package/esm2022/src/app/core/form/properties/property.validator.mjs +0 -70
  76. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +0 -103
  77. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +0 -23
  78. package/esm2022/src/app/core/form/text/testing/text-form.testing.mjs +0 -42
  79. package/esm2022/src/app/core/form/text/testing/text-form.testing.module.mjs +0 -25
  80. package/esm2022/src/app/core/form/text/text-form.component.mjs +0 -205
  81. package/esm2022/src/app/core/form/text/text-form.module.mjs +0 -31
  82. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +0 -73
  83. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +0 -22
  84. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +0 -164
  85. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +0 -32
  86. package/esm2022/src/app/core/form/username/username.form.mjs +0 -55
  87. package/esm2022/src/app/core/form/username/username.module.mjs +0 -20
  88. package/esm2022/src/app/core/graphql/graphql.module.mjs +0 -14
  89. package/esm2022/src/app/core/graphql/graphql.service.mjs +0 -781
  90. package/esm2022/src/app/core/graphql/graphql.utils.mjs +0 -119
  91. package/esm2022/src/app/core/home/home.mjs +0 -472
  92. package/esm2022/src/app/core/home/home.module.mjs +0 -54
  93. package/esm2022/src/app/core/icon/icon.component.mjs +0 -40
  94. package/esm2022/src/app/core/icon/icon.module.mjs +0 -20
  95. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +0 -394
  96. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +0 -31
  97. package/esm2022/src/app/core/menu/menu.component.mjs +0 -273
  98. package/esm2022/src/app/core/menu/menu.model.mjs +0 -327
  99. package/esm2022/src/app/core/menu/menu.module.mjs +0 -47
  100. package/esm2022/src/app/core/menu/menu.service.mjs +0 -666
  101. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +0 -113
  102. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +0 -51
  103. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +0 -165
  104. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +0 -60
  105. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +0 -28
  106. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +0 -31
  107. package/esm2022/src/app/core/peer/select-peer.modal.mjs +0 -350
  108. package/esm2022/src/app/core/peer/select-peer.module.mjs +0 -36
  109. package/esm2022/src/app/core/register/register-confirm.page.mjs +0 -90
  110. package/esm2022/src/app/core/register/register.form.mjs +0 -197
  111. package/esm2022/src/app/core/register/register.modal.mjs +0 -55
  112. package/esm2022/src/app/core/register/register.module.mjs +0 -23
  113. package/esm2022/src/app/core/services/account.service.mjs +0 -1403
  114. package/esm2022/src/app/core/services/auth-guard.service.mjs +0 -74
  115. package/esm2022/src/app/core/services/base-entity-service.class.mjs +0 -499
  116. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +0 -224
  117. package/esm2022/src/app/core/services/base58.mjs +0 -83
  118. package/esm2022/src/app/core/services/config/core.config.mjs +0 -293
  119. package/esm2022/src/app/core/services/config.service.mjs +0 -384
  120. package/esm2022/src/app/core/services/crypto.service.mjs +0 -107
  121. package/esm2022/src/app/core/services/errors.mjs +0 -54
  122. package/esm2022/src/app/core/services/local-settings.service.mjs +0 -540
  123. package/esm2022/src/app/core/services/model/account.model.mjs +0 -192
  124. package/esm2022/src/app/core/services/model/config.model.mjs +0 -111
  125. package/esm2022/src/app/core/services/model/department.model.mjs +0 -35
  126. package/esm2022/src/app/core/services/model/entity.decorators.mjs +0 -97
  127. package/esm2022/src/app/core/services/model/entity.model.mjs +0 -347
  128. package/esm2022/src/app/core/services/model/filter.model.mjs +0 -169
  129. package/esm2022/src/app/core/services/model/history.model.mjs +0 -2
  130. package/esm2022/src/app/core/services/model/model.enum.mjs +0 -11
  131. package/esm2022/src/app/core/services/model/node-feature.model.mjs +0 -31
  132. package/esm2022/src/app/core/services/model/peer.model.mjs +0 -114
  133. package/esm2022/src/app/core/services/model/person.model.mjs +0 -118
  134. package/esm2022/src/app/core/services/model/referential.model.mjs +0 -207
  135. package/esm2022/src/app/core/services/model/settings.model.mjs +0 -6
  136. package/esm2022/src/app/core/services/model/token.model.mjs +0 -57
  137. package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +0 -234
  138. package/esm2022/src/app/core/services/network.service.mjs +0 -759
  139. package/esm2022/src/app/core/services/network.types.mjs +0 -2
  140. package/esm2022/src/app/core/services/network.utils.mjs +0 -35
  141. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +0 -38
  142. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +0 -23
  143. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +0 -23
  144. package/esm2022/src/app/core/services/pipes/pipes.module.mjs +0 -58
  145. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +0 -36
  146. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +0 -37
  147. package/esm2022/src/app/core/services/platform.service.mjs +0 -780
  148. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +0 -427
  149. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +0 -450
  150. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +0 -25
  151. package/esm2022/src/app/core/services/testing/referential.validator.mjs +0 -46
  152. package/esm2022/src/app/core/services/validator/account.validator.mjs +0 -46
  153. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +0 -49
  154. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +0 -57
  155. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +0 -27
  156. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +0 -55
  157. package/esm2022/src/app/core/settings/settings.module.mjs +0 -23
  158. package/esm2022/src/app/core/settings/settings.page.mjs +0 -406
  159. package/esm2022/src/app/core/table/async-table.class.mjs +0 -1882
  160. package/esm2022/src/app/core/table/column/actions-column.component.mjs +0 -137
  161. package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +0 -120
  162. package/esm2022/src/app/core/table/column/row-field.component.mjs +0 -116
  163. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +0 -415
  164. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +0 -407
  165. package/esm2022/src/app/core/table/memory-table.class.mjs +0 -57
  166. package/esm2022/src/app/core/table/table-select-columns.component.mjs +0 -46
  167. package/esm2022/src/app/core/table/table.class.mjs +0 -1918
  168. package/esm2022/src/app/core/table/table.model.mjs +0 -21
  169. package/esm2022/src/app/core/table/table.module.mjs +0 -51
  170. package/esm2022/src/app/core/table/table.pipes.mjs +0 -76
  171. package/esm2022/src/app/core/table/table.utils.mjs +0 -34
  172. package/esm2022/src/app/core/table/testing/nested-table.testing.mjs +0 -326
  173. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +0 -32
  174. package/esm2022/src/app/core/table/testing/table.testing.mjs +0 -342
  175. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +0 -47
  176. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +0 -25
  177. package/esm2022/src/app/core/table/testing/table2.testing.mjs +0 -322
  178. package/esm2022/src/app/shared/alerts.mjs +0 -243
  179. package/esm2022/src/app/shared/audio/audio.mjs +0 -255
  180. package/esm2022/src/app/shared/audio/audio.testing.mjs +0 -32
  181. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +0 -30
  182. package/esm2022/src/app/shared/base64.utils.mjs +0 -59
  183. package/esm2022/src/app/shared/capacitor/keyboard.mjs +0 -42
  184. package/esm2022/src/app/shared/capacitor/plugins.mjs +0 -10
  185. package/esm2022/src/app/shared/constants.mjs +0 -18
  186. package/esm2022/src/app/shared/dates.mjs +0 -214
  187. package/esm2022/src/app/shared/debug/debug-service.class.mjs +0 -3
  188. package/esm2022/src/app/shared/debug/debug.component.mjs +0 -44
  189. package/esm2022/src/app/shared/debug/debug.module.mjs +0 -23
  190. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +0 -91
  191. package/esm2022/src/app/shared/directives/autoresize.directive.mjs +0 -75
  192. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +0 -30
  193. package/esm2022/src/app/shared/directives/autotooltip.directive.mjs +0 -35
  194. package/esm2022/src/app/shared/directives/cell-selection/cell-identifier.directive.mjs +0 -55
  195. package/esm2022/src/app/shared/directives/cell-selection/cell-selection.directive.mjs +0 -206
  196. package/esm2022/src/app/shared/directives/cell-selection/cell-selection.service.mjs +0 -204
  197. package/esm2022/src/app/shared/directives/directives.module.mjs +0 -53
  198. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +0 -52
  199. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +0 -33
  200. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +0 -62
  201. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +0 -96
  202. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +0 -17
  203. package/esm2022/src/app/shared/directives/throttled-click.directive.mjs +0 -43
  204. package/esm2022/src/app/shared/events.mjs +0 -64
  205. package/esm2022/src/app/shared/file/csv.utils.mjs +0 -97
  206. package/esm2022/src/app/shared/file/file.service.mjs +0 -118
  207. package/esm2022/src/app/shared/file/file.utils.mjs +0 -117
  208. package/esm2022/src/app/shared/file/images.utils.mjs +0 -186
  209. package/esm2022/src/app/shared/file/json.utils.mjs +0 -58
  210. package/esm2022/src/app/shared/file/uri.utils.mjs +0 -29
  211. package/esm2022/src/app/shared/file/url.utils.mjs +0 -213
  212. package/esm2022/src/app/shared/focusable.mjs +0 -6
  213. package/esm2022/src/app/shared/form/field.component.mjs +0 -388
  214. package/esm2022/src/app/shared/form/field.model.mjs +0 -100
  215. package/esm2022/src/app/shared/form/loading-spinner.mjs +0 -35
  216. package/esm2022/src/app/shared/forms.mjs +0 -593
  217. package/esm2022/src/app/shared/functions.mjs +0 -900
  218. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +0 -94
  219. package/esm2022/src/app/shared/gesture/gesture-config.mjs +0 -46
  220. package/esm2022/src/app/shared/gesture/hammer.utils.mjs +0 -2
  221. package/esm2022/src/app/shared/graph/colors.utils.mjs +0 -85
  222. package/esm2022/src/app/shared/graph/graph-colors.mjs +0 -214
  223. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +0 -68
  224. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +0 -23
  225. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +0 -147
  226. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +0 -24
  227. package/esm2022/src/app/shared/html.utils.mjs +0 -35
  228. package/esm2022/src/app/shared/http/http.utils.mjs +0 -56
  229. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +0 -452
  230. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +0 -62
  231. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +0 -26
  232. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +0 -92
  233. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +0 -37
  234. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +0 -59
  235. package/esm2022/src/app/shared/image/image.model.mjs +0 -2
  236. package/esm2022/src/app/shared/image/image.module.mjs +0 -24
  237. package/esm2022/src/app/shared/image/image.service.mjs +0 -117
  238. package/esm2022/src/app/shared/inputs.mjs +0 -281
  239. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +0 -27
  240. package/esm2022/src/app/shared/logging/log-level.model.mjs +0 -48
  241. package/esm2022/src/app/shared/logging/logger.model.mjs +0 -47
  242. package/esm2022/src/app/shared/logging/logging-service.class.mjs +0 -125
  243. package/esm2022/src/app/shared/logging/logging-service.config.mjs +0 -2
  244. package/esm2022/src/app/shared/logging/logging-service.module.mjs +0 -30
  245. package/esm2022/src/app/shared/markdown/markdown.component.mjs +0 -321
  246. package/esm2022/src/app/shared/markdown/markdown.directive.mjs +0 -34
  247. package/esm2022/src/app/shared/markdown/markdown.modal.mjs +0 -99
  248. package/esm2022/src/app/shared/markdown/markdown.module.mjs +0 -87
  249. package/esm2022/src/app/shared/markdown/markdown.service.mjs +0 -204
  250. package/esm2022/src/app/shared/markdown/markdown.utils.mjs +0 -87
  251. package/esm2022/src/app/shared/markdown/testing/markdown.test.mjs +0 -55
  252. package/esm2022/src/app/shared/markdown/testing/markdown.testing.module.mjs +0 -30
  253. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +0 -46
  254. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +0 -1356
  255. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +0 -81
  256. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +0 -18
  257. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +0 -242
  258. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +0 -251
  259. package/esm2022/src/app/shared/material/badge/badge.module.mjs +0 -20
  260. package/esm2022/src/app/shared/material/badge/badge.test.mjs +0 -42
  261. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +0 -70
  262. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +0 -374
  263. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +0 -83
  264. package/esm2022/src/app/shared/material/chips/chips.module.mjs +0 -74
  265. package/esm2022/src/app/shared/material/chips/material.chips.mjs +0 -843
  266. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +0 -151
  267. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +0 -79
  268. package/esm2022/src/app/shared/material/datetime/material.date.mjs +0 -473
  269. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +0 -457
  270. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +0 -852
  271. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +0 -140
  272. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +0 -127
  273. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +0 -118
  274. package/esm2022/src/app/shared/material/duration/duration.module.mjs +0 -61
  275. package/esm2022/src/app/shared/material/duration/duration.utils.mjs +0 -16
  276. package/esm2022/src/app/shared/material/duration/material.duration.mjs +0 -283
  277. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +0 -85
  278. package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +0 -319
  279. package/esm2022/src/app/shared/material/latlong/material.latlong-input.mjs +0 -471
  280. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +0 -231
  281. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +0 -68
  282. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +0 -138
  283. package/esm2022/src/app/shared/material/material.animations.mjs +0 -200
  284. package/esm2022/src/app/shared/material/material.config.mjs +0 -3
  285. package/esm2022/src/app/shared/material/material.module.mjs +0 -224
  286. package/esm2022/src/app/shared/material/material.testing.module.mjs +0 -234
  287. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +0 -51
  288. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +0 -23
  289. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +0 -379
  290. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +0 -52
  291. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +0 -67
  292. package/esm2022/src/app/shared/material/test/test-component.mjs +0 -264
  293. package/esm2022/src/app/shared/material/testing/common.test.mjs +0 -111
  294. package/esm2022/src/app/shared/modules.mjs +0 -12
  295. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +0 -306
  296. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +0 -49
  297. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +0 -24
  298. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +0 -69
  299. package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +0 -74
  300. package/esm2022/src/app/shared/named-filter/testing/named-filter.testing.module.mjs +0 -28
  301. package/esm2022/src/app/shared/observables.mjs +0 -104
  302. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +0 -251
  303. package/esm2022/src/app/shared/pipes/badge.pipes.mjs +0 -25
  304. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +0 -29
  305. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +0 -50
  306. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +0 -72
  307. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +0 -28
  308. package/esm2022/src/app/shared/pipes/date-from.pipe.mjs +0 -29
  309. package/esm2022/src/app/shared/pipes/dates.pipe.mjs +0 -18
  310. package/esm2022/src/app/shared/pipes/display-with.pipe.mjs +0 -23
  311. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +0 -34
  312. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +0 -53
  313. package/esm2022/src/app/shared/pipes/form.pipes.mjs +0 -232
  314. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +0 -50
  315. package/esm2022/src/app/shared/pipes/html.pipes.mjs +0 -102
  316. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +0 -42
  317. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +0 -65
  318. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +0 -67
  319. package/esm2022/src/app/shared/pipes/math.pipes.mjs +0 -77
  320. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +0 -19
  321. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +0 -17
  322. package/esm2022/src/app/shared/pipes/observable.pipes.mjs +0 -63
  323. package/esm2022/src/app/shared/pipes/pipes.module.mjs +0 -310
  324. package/esm2022/src/app/shared/pipes/property.pipes.mjs +0 -148
  325. package/esm2022/src/app/shared/pipes/selection.pipes.mjs +0 -177
  326. package/esm2022/src/app/shared/pipes/string.pipes.mjs +0 -196
  327. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +0 -44
  328. package/esm2022/src/app/shared/pipes/types.pipes.mjs +0 -74
  329. package/esm2022/src/app/shared/pipes/url.pipes.mjs +0 -35
  330. package/esm2022/src/app/shared/platforms.mjs +0 -81
  331. package/esm2022/src/app/shared/print/print.service.mjs +0 -305
  332. package/esm2022/src/app/shared/regexps.mjs +0 -103
  333. package/esm2022/src/app/shared/rx-state/rx-state.decorators.mjs +0 -193
  334. package/esm2022/src/app/shared/rx-state/rx-state.module.mjs +0 -19
  335. package/esm2022/src/app/shared/rx-state/rx-state.types.mjs +0 -2
  336. package/esm2022/src/app/shared/services/entity-service.class.mjs +0 -44
  337. package/esm2022/src/app/shared/services/job.utils.mjs +0 -92
  338. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +0 -362
  339. package/esm2022/src/app/shared/services/progress-bar.service.mjs +0 -31
  340. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +0 -144
  341. package/esm2022/src/app/shared/services/startable-service.class.mjs +0 -118
  342. package/esm2022/src/app/shared/services/translate-context.service.mjs +0 -107
  343. package/esm2022/src/app/shared/services/validator-service.class.mjs +0 -2
  344. package/esm2022/src/app/shared/services.mjs +0 -85
  345. package/esm2022/src/app/shared/shared-routing.module.mjs +0 -72
  346. package/esm2022/src/app/shared/shared.module.mjs +0 -229
  347. package/esm2022/src/app/shared/shared.testing.module.mjs +0 -108
  348. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +0 -281
  349. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +0 -42
  350. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +0 -27
  351. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +0 -25
  352. package/esm2022/src/app/shared/storage/storage.service.mjs +0 -134
  353. package/esm2022/src/app/shared/storage/storage.utils.mjs +0 -13
  354. package/esm2022/src/app/shared/testing/maskito.test.mjs +0 -41
  355. package/esm2022/src/app/shared/testing/observable.test.mjs +0 -94
  356. package/esm2022/src/app/shared/testing/tests.page.mjs +0 -37
  357. package/esm2022/src/app/shared/toast/toast.testing.mjs +0 -54
  358. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +0 -31
  359. package/esm2022/src/app/shared/toast/toasts.mjs +0 -134
  360. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +0 -62
  361. package/esm2022/src/app/shared/toolbar/toolbar.mjs +0 -272
  362. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +0 -26
  363. package/esm2022/src/app/shared/types.mjs +0 -2
  364. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +0 -59
  365. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +0 -30
  366. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +0 -108
  367. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +0 -216
  368. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +0 -26
  369. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +0 -122
  370. package/esm2022/src/app/shared/validator/validators.mjs +0 -658
  371. package/esm2022/src/app/shared/version/versions.mjs +0 -81
  372. package/esm2022/src/app/social/config/social.config.mjs +0 -9
  373. package/esm2022/src/app/social/feed/feed.component.mjs +0 -317
  374. package/esm2022/src/app/social/feed/feed.directive.mjs +0 -151
  375. package/esm2022/src/app/social/feed/feed.model.mjs +0 -60
  376. package/esm2022/src/app/social/feed/feed.module.mjs +0 -24
  377. package/esm2022/src/app/social/feed/feed.page.mjs +0 -67
  378. package/esm2022/src/app/social/feed/feed.service.mjs +0 -222
  379. package/esm2022/src/app/social/feed/testing/feed.testing.mjs +0 -66
  380. package/esm2022/src/app/social/feed/testing/feed.testing.module.mjs +0 -23
  381. package/esm2022/src/app/social/job/job.module.mjs +0 -23
  382. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +0 -38
  383. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +0 -241
  384. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +0 -50
  385. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +0 -29
  386. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +0 -91
  387. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +0 -38
  388. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +0 -34
  389. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +0 -22
  390. package/esm2022/src/app/social/message/message.form.mjs +0 -149
  391. package/esm2022/src/app/social/message/message.modal.mjs +0 -116
  392. package/esm2022/src/app/social/message/message.model.mjs +0 -86
  393. package/esm2022/src/app/social/message/message.module.mjs +0 -25
  394. package/esm2022/src/app/social/message/message.service.mjs +0 -198
  395. package/esm2022/src/app/social/social.errors.mjs +0 -11
  396. package/esm2022/src/app/social/social.module.mjs +0 -22
  397. package/esm2022/src/app/social/social.testing.module.mjs +0 -72
  398. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +0 -191
  399. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +0 -280
  400. package/esm2022/src/app/social/user-event/notification/user-event-notification.modal.mjs +0 -84
  401. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +0 -273
  402. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +0 -129
  403. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +0 -22
  404. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +0 -128
  405. package/esm2022/src/app/social/user-event/user-event.model.mjs +0 -2
  406. package/esm2022/src/app/social/user-event/user-event.module.mjs +0 -24
  407. package/esm2022/src/app/social/user-event/user-event.service.mjs +0 -512
  408. package/esm2022/src/environments/environment.class.mjs +0 -69
  409. package/esm2022/src/environments/environment.loader.mjs +0 -77
  410. package/esm2022/src/environments/environment.mjs +0 -133
  411. package/esm2022/sumaris-net.ngx-components.mjs +0 -5
  412. package/index.d.ts +0 -5
  413. package/public_api.d.ts +0 -364
  414. package/src/app/admin/admin-routing.module.d.ts +0 -9
  415. package/src/app/admin/admin.module.d.ts +0 -10
  416. package/src/app/admin/users/person.filter.d.ts +0 -37
  417. package/src/app/admin/users/person.service.d.ts +0 -61
  418. package/src/app/admin/users/person.validator.d.ts +0 -23
  419. package/src/app/admin/users/users-select.modal.d.ts +0 -73
  420. package/src/app/admin/users/users.d.ts +0 -89
  421. package/src/app/admin/users/users.module.d.ts +0 -15
  422. package/src/app/admin/users/users.utils.d.ts +0 -6
  423. package/src/app/core/about/about.modal.d.ts +0 -44
  424. package/src/app/core/about/about.module.d.ts +0 -11
  425. package/src/app/core/account/account.module.d.ts +0 -18
  426. package/src/app/core/account/account.page.d.ts +0 -93
  427. package/src/app/core/account/new-token.form.d.ts +0 -30
  428. package/src/app/core/account/new-token.modal.d.ts +0 -29
  429. package/src/app/core/account/password/change-password.form.d.ts +0 -19
  430. package/src/app/core/account/password/change-password.module.d.ts +0 -11
  431. package/src/app/core/account/password/change-password.page.d.ts +0 -36
  432. package/src/app/core/account/token.table.d.ts +0 -28
  433. package/src/app/core/auth/auth.form.d.ts +0 -38
  434. package/src/app/core/auth/auth.modal.d.ts +0 -24
  435. package/src/app/core/auth/auth.module.d.ts +0 -13
  436. package/src/app/core/auth/reset-password.modal.d.ts +0 -29
  437. package/src/app/core/core.module.d.ts +0 -28
  438. package/src/app/core/core.testing.module.d.ts +0 -16
  439. package/src/app/core/form/array/form-array.d.ts +0 -147
  440. package/src/app/core/form/array/testing/form-array-test.module.d.ts +0 -12
  441. package/src/app/core/form/array/testing/form-array.test.d.ts +0 -27
  442. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +0 -38
  443. package/src/app/core/form/buttons/form-buttons-bar.module.d.ts +0 -9
  444. package/src/app/core/form/entity/editor.class.d.ts +0 -86
  445. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +0 -126
  446. package/src/app/core/form/entity/entity-editor.class.d.ts +0 -211
  447. package/src/app/core/form/entity/entity-metadata.component.d.ts +0 -13
  448. package/src/app/core/form/entity/entity.module.d.ts +0 -11
  449. package/src/app/core/form/entity/tab-editor.class.d.ts +0 -66
  450. package/src/app/core/form/form-container.class.d.ts +0 -132
  451. package/src/app/core/form/form.class.d.ts +0 -148
  452. package/src/app/core/form/form.module.d.ts +0 -15
  453. package/src/app/core/form/form.utils.d.ts +0 -301
  454. package/src/app/core/form/list/list.form.d.ts +0 -83
  455. package/src/app/core/form/list/list.module.d.ts +0 -9
  456. package/src/app/core/form/properties/properties-file.service.d.ts +0 -26
  457. package/src/app/core/form/properties/properties.form.d.ts +0 -109
  458. package/src/app/core/form/properties/properties.module.d.ts +0 -18
  459. package/src/app/core/form/properties/properties.table.d.ts +0 -73
  460. package/src/app/core/form/properties/properties.utils.d.ts +0 -59
  461. package/src/app/core/form/properties/property.validator.d.ts +0 -27
  462. package/src/app/core/form/properties/testing/properties-form.test.d.ts +0 -22
  463. package/src/app/core/form/properties/testing/properties-form.testing.module.d.ts +0 -12
  464. package/src/app/core/form/text/testing/text-form.testing.d.ts +0 -19
  465. package/src/app/core/form/text/testing/text-form.testing.module.d.ts +0 -14
  466. package/src/app/core/form/text/text-form.component.d.ts +0 -66
  467. package/src/app/core/form/text/text-form.module.d.ts +0 -9
  468. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +0 -16
  469. package/src/app/core/form/text-popover/testing/text-popover.testing.module.d.ts +0 -11
  470. package/src/app/core/form/text-popover/text-popover.component.d.ts +0 -81
  471. package/src/app/core/form/text-popover/text-popover.module.d.ts +0 -10
  472. package/src/app/core/form/username/username.form.d.ts +0 -19
  473. package/src/app/core/form/username/username.module.d.ts +0 -9
  474. package/src/app/core/graphql/graphql.module.d.ts +0 -7
  475. package/src/app/core/graphql/graphql.service.d.ts +0 -138
  476. package/src/app/core/graphql/graphql.utils.d.ts +0 -47
  477. package/src/app/core/home/home.d.ts +0 -135
  478. package/src/app/core/home/home.module.d.ts +0 -16
  479. package/src/app/core/icon/icon.component.d.ts +0 -13
  480. package/src/app/core/icon/icon.module.d.ts +0 -9
  481. package/src/app/core/install/install-upgrade-card.component.d.ts +0 -63
  482. package/src/app/core/install/install-upgrade-card.module.d.ts +0 -9
  483. package/src/app/core/menu/menu.component.d.ts +0 -69
  484. package/src/app/core/menu/menu.model.d.ts +0 -163
  485. package/src/app/core/menu/menu.module.d.ts +0 -12
  486. package/src/app/core/menu/menu.service.d.ts +0 -93
  487. package/src/app/core/menu/sub-menu-tab.directive.d.ts +0 -29
  488. package/src/app/core/menu/testing/menu-other.testing.d.ts +0 -15
  489. package/src/app/core/menu/testing/menu.testing.d.ts +0 -53
  490. package/src/app/core/menu/testing/menu.testing.module.d.ts +0 -12
  491. package/src/app/core/offline/update-offline-mode-card.component.d.ts +0 -11
  492. package/src/app/core/offline/update-offline-mode-card.module.d.ts +0 -9
  493. package/src/app/core/peer/select-peer.modal.d.ts +0 -108
  494. package/src/app/core/peer/select-peer.module.d.ts +0 -12
  495. package/src/app/core/register/register-confirm.page.d.ts +0 -24
  496. package/src/app/core/register/register.form.d.ts +0 -49
  497. package/src/app/core/register/register.modal.d.ts +0 -14
  498. package/src/app/core/register/register.module.d.ts +0 -12
  499. package/src/app/core/services/account.service.d.ts +0 -236
  500. package/src/app/core/services/auth-guard.service.d.ts +0 -17
  501. package/src/app/core/services/base-entity-service.class.d.ts +0 -134
  502. package/src/app/core/services/base-graphql-service.class.d.ts +0 -77
  503. package/src/app/core/services/base58.d.ts +0 -7
  504. package/src/app/core/services/config/core.config.d.ts +0 -52
  505. package/src/app/core/services/config.service.d.ts +0 -63
  506. package/src/app/core/services/crypto.service.d.ts +0 -44
  507. package/src/app/core/services/errors.d.ts +0 -65
  508. package/src/app/core/services/local-settings.service.d.ts +0 -130
  509. package/src/app/core/services/model/account.model.d.ts +0 -66
  510. package/src/app/core/services/model/config.model.d.ts +0 -37
  511. package/src/app/core/services/model/department.model.d.ts +0 -11
  512. package/src/app/core/services/model/entity.decorators.d.ts +0 -17
  513. package/src/app/core/services/model/entity.model.d.ts +0 -133
  514. package/src/app/core/services/model/filter.model.d.ts +0 -37
  515. package/src/app/core/services/model/history.model.d.ts +0 -20
  516. package/src/app/core/services/model/model.enum.d.ts +0 -7
  517. package/src/app/core/services/model/node-feature.model.d.ts +0 -14
  518. package/src/app/core/services/model/peer.model.d.ts +0 -35
  519. package/src/app/core/services/model/person.model.d.ts +0 -39
  520. package/src/app/core/services/model/referential.model.d.ts +0 -85
  521. package/src/app/core/services/model/settings.model.d.ts +0 -29
  522. package/src/app/core/services/model/token.model.d.ts +0 -22
  523. package/src/app/core/services/model/tree-item-entity.model.d.ts +0 -62
  524. package/src/app/core/services/network.service.d.ts +0 -184
  525. package/src/app/core/services/network.types.d.ts +0 -4
  526. package/src/app/core/services/network.utils.d.ts +0 -39
  527. package/src/app/core/services/pipes/account.pipes.d.ts +0 -15
  528. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +0 -9
  529. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +0 -11
  530. package/src/app/core/services/pipes/pipes.module.d.ts +0 -11
  531. package/src/app/core/services/pipes/referential-to-string.pipe.d.ts +0 -23
  532. package/src/app/core/services/pipes/usage-mode.pipes.d.ts +0 -15
  533. package/src/app/core/services/platform.service.d.ts +0 -126
  534. package/src/app/core/services/storage/entities-storage.service.d.ts +0 -108
  535. package/src/app/core/services/storage/entity-store.class.d.ts +0 -113
  536. package/src/app/core/services/testing/referential-filter.model.d.ts +0 -9
  537. package/src/app/core/services/testing/referential.validator.d.ts +0 -22
  538. package/src/app/core/services/validator/account.validator.d.ts +0 -24
  539. package/src/app/core/services/validator/base.validator.class.d.ts +0 -21
  540. package/src/app/core/services/validator/local-settings.validator.d.ts +0 -18
  541. package/src/app/core/services/validator/user-settings.validator.d.ts +0 -10
  542. package/src/app/core/services/validator/user-token.validator.d.ts +0 -13
  543. package/src/app/core/settings/settings.module.d.ts +0 -12
  544. package/src/app/core/settings/settings.page.d.ts +0 -89
  545. package/src/app/core/table/async-table.class.d.ts +0 -443
  546. package/src/app/core/table/column/actions-column.component.d.ts +0 -65
  547. package/src/app/core/table/column/nav-actions-column.component.d.ts +0 -47
  548. package/src/app/core/table/column/row-field.component.d.ts +0 -41
  549. package/src/app/core/table/entities-async-table-datasource.class.d.ts +0 -103
  550. package/src/app/core/table/entities-table-datasource.class.d.ts +0 -102
  551. package/src/app/core/table/memory-table.class.d.ts +0 -25
  552. package/src/app/core/table/table-select-columns.component.d.ts +0 -22
  553. package/src/app/core/table/table.class.d.ts +0 -427
  554. package/src/app/core/table/table.model.d.ts +0 -31
  555. package/src/app/core/table/table.module.d.ts +0 -14
  556. package/src/app/core/table/table.pipes.d.ts +0 -30
  557. package/src/app/core/table/table.utils.d.ts +0 -13
  558. package/src/app/core/table/testing/nested-table.testing.d.ts +0 -54
  559. package/src/app/core/table/testing/table-validator.service.d.ts +0 -17
  560. package/src/app/core/table/testing/table.testing.d.ts +0 -55
  561. package/src/app/core/table/testing/table.testing.module.d.ts +0 -17
  562. package/src/app/core/table/testing/table2-validator.service.d.ts +0 -15
  563. package/src/app/core/table/testing/table2.testing.d.ts +0 -53
  564. package/src/app/shared/alerts.d.ts +0 -55
  565. package/src/app/shared/audio/audio.d.ts +0 -45
  566. package/src/app/shared/audio/audio.testing.d.ts +0 -13
  567. package/src/app/shared/audio/audio.testing.module.d.ts +0 -11
  568. package/src/app/shared/base64.utils.d.ts +0 -7
  569. package/src/app/shared/capacitor/keyboard.d.ts +0 -16
  570. package/src/app/shared/capacitor/plugins.d.ts +0 -8
  571. package/src/app/shared/constants.d.ts +0 -15
  572. package/src/app/shared/dates.d.ts +0 -85
  573. package/src/app/shared/debug/debug-service.class.d.ts +0 -5
  574. package/src/app/shared/debug/debug.component.d.ts +0 -14
  575. package/src/app/shared/debug/debug.module.d.ts +0 -12
  576. package/src/app/shared/directives/autofocus.directive.d.ts +0 -18
  577. package/src/app/shared/directives/autoresize.directive.d.ts +0 -20
  578. package/src/app/shared/directives/autotitle.directive.d.ts +0 -11
  579. package/src/app/shared/directives/autotooltip.directive.d.ts +0 -14
  580. package/src/app/shared/directives/cell-selection/cell-identifier.directive.d.ts +0 -17
  581. package/src/app/shared/directives/cell-selection/cell-selection.directive.d.ts +0 -29
  582. package/src/app/shared/directives/cell-selection/cell-selection.service.d.ts +0 -67
  583. package/src/app/shared/directives/directives.module.d.ts +0 -15
  584. package/src/app/shared/directives/drag-and-drop.directive.d.ts +0 -17
  585. package/src/app/shared/directives/ng-var.directive.d.ts +0 -12
  586. package/src/app/shared/directives/resizable/resizable.component.d.ts +0 -21
  587. package/src/app/shared/directives/resizable/resizable.directive.d.ts +0 -24
  588. package/src/app/shared/directives/resizable/resizable.module.d.ts +0 -8
  589. package/src/app/shared/directives/throttled-click.directive.d.ts +0 -16
  590. package/src/app/shared/events.d.ts +0 -29
  591. package/src/app/shared/file/csv.utils.d.ts +0 -30
  592. package/src/app/shared/file/file.service.d.ts +0 -23
  593. package/src/app/shared/file/file.utils.d.ts +0 -20
  594. package/src/app/shared/file/images.utils.d.ts +0 -36
  595. package/src/app/shared/file/json.utils.d.ts +0 -19
  596. package/src/app/shared/file/uri.utils.d.ts +0 -8
  597. package/src/app/shared/file/url.utils.d.ts +0 -108
  598. package/src/app/shared/focusable.d.ts +0 -4
  599. package/src/app/shared/form/field.component.d.ts +0 -83
  600. package/src/app/shared/form/field.model.d.ts +0 -88
  601. package/src/app/shared/form/loading-spinner.d.ts +0 -8
  602. package/src/app/shared/forms.d.ts +0 -170
  603. package/src/app/shared/functions.d.ts +0 -325
  604. package/src/app/shared/geolocation/geolocation.utils.d.ts +0 -25
  605. package/src/app/shared/gesture/gesture-config.d.ts +0 -15
  606. package/src/app/shared/gesture/hammer.utils.d.ts +0 -16
  607. package/src/app/shared/graph/colors.utils.d.ts +0 -34
  608. package/src/app/shared/graph/graph-colors.d.ts +0 -63
  609. package/src/app/shared/guard/component-dirty.guard.d.ts +0 -14
  610. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +0 -8
  611. package/src/app/shared/hotkeys/hotkeys.service.d.ts +0 -48
  612. package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +0 -11
  613. package/src/app/shared/html.utils.d.ts +0 -17
  614. package/src/app/shared/http/http.utils.d.ts +0 -28
  615. package/src/app/shared/image/gallery/image-gallery.component.d.ts +0 -139
  616. package/src/app/shared/image/gallery/image-gallery.module.d.ts +0 -15
  617. package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +0 -12
  618. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +0 -33
  619. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +0 -16
  620. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +0 -13
  621. package/src/app/shared/image/image.model.d.ts +0 -7
  622. package/src/app/shared/image/image.module.d.ts +0 -8
  623. package/src/app/shared/image/image.service.d.ts +0 -37
  624. package/src/app/shared/inputs.d.ts +0 -37
  625. package/src/app/shared/interceptors/progess.interceptor.d.ts +0 -8
  626. package/src/app/shared/logging/log-level.model.d.ts +0 -38
  627. package/src/app/shared/logging/logger.model.d.ts +0 -68
  628. package/src/app/shared/logging/logging-service.class.d.ts +0 -39
  629. package/src/app/shared/logging/logging-service.config.d.ts +0 -25
  630. package/src/app/shared/logging/logging-service.module.d.ts +0 -9
  631. package/src/app/shared/markdown/markdown.component.d.ts +0 -86
  632. package/src/app/shared/markdown/markdown.directive.d.ts +0 -13
  633. package/src/app/shared/markdown/markdown.modal.d.ts +0 -49
  634. package/src/app/shared/markdown/markdown.module.d.ts +0 -17
  635. package/src/app/shared/markdown/markdown.service.d.ts +0 -37
  636. package/src/app/shared/markdown/markdown.utils.d.ts +0 -26
  637. package/src/app/shared/markdown/testing/markdown.test.d.ts +0 -18
  638. package/src/app/shared/markdown/testing/markdown.testing.module.d.ts +0 -12
  639. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +0 -74
  640. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +0 -224
  641. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +0 -23
  642. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +0 -5
  643. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +0 -48
  644. package/src/app/shared/material/badge/badge.directive.d.ts +0 -43
  645. package/src/app/shared/material/badge/badge.module.d.ts +0 -10
  646. package/src/app/shared/material/badge/badge.test.d.ts +0 -21
  647. package/src/app/shared/material/boolean/boolean.module.d.ts +0 -21
  648. package/src/app/shared/material/boolean/material.boolean.d.ts +0 -94
  649. package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +0 -31
  650. package/src/app/shared/material/chips/chips.module.d.ts +0 -22
  651. package/src/app/shared/material/chips/material.chips.d.ts +0 -167
  652. package/src/app/shared/material/chips/testing/chips.test.d.ts +0 -32
  653. package/src/app/shared/material/datetime/datetime.module.d.ts +0 -25
  654. package/src/app/shared/material/datetime/material.date.d.ts +0 -90
  655. package/src/app/shared/material/datetime/material.dateshort.d.ts +0 -89
  656. package/src/app/shared/material/datetime/material.datetime.d.ts +0 -136
  657. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +0 -38
  658. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +0 -32
  659. package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +0 -31
  660. package/src/app/shared/material/duration/duration.module.d.ts +0 -18
  661. package/src/app/shared/material/duration/duration.utils.d.ts +0 -2
  662. package/src/app/shared/material/duration/material.duration.d.ts +0 -64
  663. package/src/app/shared/material/duration/testing/mat-duration.test.d.ts +0 -23
  664. package/src/app/shared/material/latlong/latlong.utils.d.ts +0 -59
  665. package/src/app/shared/material/latlong/material.latlong-input.d.ts +0 -93
  666. package/src/app/shared/material/latlong/material.latlong.d.ts +0 -90
  667. package/src/app/shared/material/latlong/material.latlong.module.d.ts +0 -21
  668. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +0 -30
  669. package/src/app/shared/material/material.animations.d.ts +0 -8
  670. package/src/app/shared/material/material.config.d.ts +0 -3
  671. package/src/app/shared/material/material.module.d.ts +0 -44
  672. package/src/app/shared/material/material.testing.module.d.ts +0 -31
  673. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +0 -12
  674. package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +0 -10
  675. package/src/app/shared/material/swipe/material.swipe.d.ts +0 -89
  676. package/src/app/shared/material/swipe/swipe.module.d.ts +0 -16
  677. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +0 -22
  678. package/src/app/shared/material/test/test-component.d.ts +0 -75
  679. package/src/app/shared/material/testing/common.test.d.ts +0 -25
  680. package/src/app/shared/modules.d.ts +0 -9
  681. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +0 -63
  682. package/src/app/shared/named-filter/named-filter.model.d.ts +0 -32
  683. package/src/app/shared/named-filter/named-filter.module.d.ts +0 -13
  684. package/src/app/shared/named-filter/named-filter.service.d.ts +0 -32
  685. package/src/app/shared/named-filter/testing/named-filter-selector.testing.d.ts +0 -34
  686. package/src/app/shared/named-filter/testing/named-filter.testing.module.d.ts +0 -10
  687. package/src/app/shared/observables.d.ts +0 -32
  688. package/src/app/shared/pipes/arrays.pipe.d.ts +0 -93
  689. package/src/app/shared/pipes/badge.pipes.d.ts +0 -7
  690. package/src/app/shared/pipes/colors.pipe.d.ts +0 -9
  691. package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +0 -25
  692. package/src/app/shared/pipes/date-format.pipe.d.ts +0 -35
  693. package/src/app/shared/pipes/date-from-now.pipe.d.ts +0 -14
  694. package/src/app/shared/pipes/date-from.pipe.d.ts +0 -14
  695. package/src/app/shared/pipes/dates.pipe.d.ts +0 -10
  696. package/src/app/shared/pipes/display-with.pipe.d.ts +0 -8
  697. package/src/app/shared/pipes/duration.pipe.d.ts +0 -23
  698. package/src/app/shared/pipes/file-size.pipe.d.ts +0 -30
  699. package/src/app/shared/pipes/form.pipes.d.ts +0 -74
  700. package/src/app/shared/pipes/highlight.pipe.d.ts +0 -11
  701. package/src/app/shared/pipes/html.pipes.d.ts +0 -50
  702. package/src/app/shared/pipes/latlong-format.pipe.d.ts +0 -20
  703. package/src/app/shared/pipes/maps.pipe.d.ts +0 -23
  704. package/src/app/shared/pipes/maskito.pipe.d.ts +0 -14
  705. package/src/app/shared/pipes/math.pipes.d.ts +0 -26
  706. package/src/app/shared/pipes/ng-init.pipe.d.ts +0 -8
  707. package/src/app/shared/pipes/number-format.pipe.d.ts +0 -9
  708. package/src/app/shared/pipes/observable.pipes.d.ts +0 -25
  709. package/src/app/shared/pipes/pipes.module.d.ts +0 -36
  710. package/src/app/shared/pipes/property.pipes.d.ts +0 -46
  711. package/src/app/shared/pipes/selection.pipes.d.ts +0 -62
  712. package/src/app/shared/pipes/string.pipes.d.ts +0 -72
  713. package/src/app/shared/pipes/translate-context.pipe.d.ts +0 -17
  714. package/src/app/shared/pipes/types.pipes.d.ts +0 -30
  715. package/src/app/shared/pipes/url.pipes.d.ts +0 -27
  716. package/src/app/shared/platforms.d.ts +0 -16
  717. package/src/app/shared/print/print.service.d.ts +0 -94
  718. package/src/app/shared/regexps.d.ts +0 -32
  719. package/src/app/shared/rx-state/rx-state.decorators.d.ts +0 -33
  720. package/src/app/shared/rx-state/rx-state.module.d.ts +0 -10
  721. package/src/app/shared/rx-state/rx-state.types.d.ts +0 -5
  722. package/src/app/shared/services/entity-service.class.d.ts +0 -117
  723. package/src/app/shared/services/job.utils.d.ts +0 -20
  724. package/src/app/shared/services/memory-entity-service.class.d.ts +0 -87
  725. package/src/app/shared/services/progress-bar.service.d.ts +0 -20
  726. package/src/app/shared/services/startable-observable-service.class.d.ts +0 -51
  727. package/src/app/shared/services/startable-service.class.d.ts +0 -38
  728. package/src/app/shared/services/translate-context.service.d.ts +0 -29
  729. package/src/app/shared/services/validator-service.class.d.ts +0 -11
  730. package/src/app/shared/services.d.ts +0 -17
  731. package/src/app/shared/shared-routing.module.d.ts +0 -23
  732. package/src/app/shared/shared.module.d.ts +0 -33
  733. package/src/app/shared/shared.testing.module.d.ts +0 -20
  734. package/src/app/shared/storage/storage-explorer.component.d.ts +0 -60
  735. package/src/app/shared/storage/storage-explorer.module.d.ts +0 -13
  736. package/src/app/shared/storage/storage-explorer.testing-routing.module.d.ts +0 -9
  737. package/src/app/shared/storage/storage-explorer.testing.module.d.ts +0 -10
  738. package/src/app/shared/storage/storage.service.d.ts +0 -22
  739. package/src/app/shared/storage/storage.utils.d.ts +0 -19
  740. package/src/app/shared/testing/maskito.test.d.ts +0 -10
  741. package/src/app/shared/testing/observable.test.d.ts +0 -25
  742. package/src/app/shared/testing/tests.page.d.ts +0 -20
  743. package/src/app/shared/toast/toast.testing.d.ts +0 -15
  744. package/src/app/shared/toast/toast.testing.module.d.ts +0 -12
  745. package/src/app/shared/toast/toasts.d.ts +0 -16
  746. package/src/app/shared/toolbar/modal-toolbar.d.ts +0 -21
  747. package/src/app/shared/toolbar/toolbar.d.ts +0 -70
  748. package/src/app/shared/toolbar/toolbar.module.d.ts +0 -16
  749. package/src/app/shared/types.d.ts +0 -45
  750. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +0 -21
  751. package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +0 -11
  752. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +0 -41
  753. package/src/app/shared/upload-file/upload-file.component.d.ts +0 -50
  754. package/src/app/shared/upload-file/upload-file.model.d.ts +0 -30
  755. package/src/app/shared/validator/form-error-adapter.class.d.ts +0 -33
  756. package/src/app/shared/validator/validators.d.ts +0 -145
  757. package/src/app/shared/version/versions.d.ts +0 -26
  758. package/src/app/social/config/social.config.d.ts +0 -4
  759. package/src/app/social/feed/feed.component.d.ts +0 -91
  760. package/src/app/social/feed/feed.directive.d.ts +0 -32
  761. package/src/app/social/feed/feed.model.d.ts +0 -69
  762. package/src/app/social/feed/feed.module.d.ts +0 -13
  763. package/src/app/social/feed/feed.page.d.ts +0 -24
  764. package/src/app/social/feed/feed.service.d.ts +0 -85
  765. package/src/app/social/feed/testing/feed.testing.d.ts +0 -23
  766. package/src/app/social/feed/testing/feed.testing.module.d.ts +0 -12
  767. package/src/app/social/job/job.module.d.ts +0 -12
  768. package/src/app/social/job/progression/job-progression.component.d.ts +0 -24
  769. package/src/app/social/job/progression/job-progression.icon.d.ts +0 -63
  770. package/src/app/social/job/progression/job-progression.list.d.ts +0 -20
  771. package/src/app/social/job/progression/job-progression.model.d.ts +0 -10
  772. package/src/app/social/job/progression/job-progression.service.d.ts +0 -33
  773. package/src/app/social/job/testing/job-progression.testing.d.ts +0 -13
  774. package/src/app/social/job/testing/job-progression.testing.service.d.ts +0 -9
  775. package/src/app/social/job/testing/job.testing.module.d.ts +0 -11
  776. package/src/app/social/message/message.form.d.ts +0 -36
  777. package/src/app/social/message/message.modal.d.ts +0 -47
  778. package/src/app/social/message/message.model.d.ts +0 -36
  779. package/src/app/social/message/message.module.d.ts +0 -14
  780. package/src/app/social/message/message.service.d.ts +0 -44
  781. package/src/app/social/social.errors.d.ts +0 -10
  782. package/src/app/social/social.module.d.ts +0 -20
  783. package/src/app/social/social.testing.module.d.ts +0 -14
  784. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +0 -47
  785. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +0 -77
  786. package/src/app/social/user-event/notification/user-event-notification.modal.d.ts +0 -37
  787. package/src/app/social/user-event/testing/user-event.testing.d.ts +0 -44
  788. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +0 -42
  789. package/src/app/social/user-event/testing/user-event.testing.module.d.ts +0 -11
  790. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +0 -41
  791. package/src/app/social/user-event/user-event.model.d.ts +0 -44
  792. package/src/app/social/user-event/user-event.module.d.ts +0 -14
  793. package/src/app/social/user-event/user-event.service.d.ts +0 -124
  794. package/src/environments/environment.class.d.ts +0 -86
  795. package/src/environments/environment.d.ts +0 -2
  796. package/src/environments/environment.loader.d.ts +0 -24
  797. package/src/theme/_globals.scss +0 -5
@@ -1,280 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, inject, Inject, InjectionToken, Input, Optional, Output, ViewChild, ViewChildren, } from '@angular/core';
2
- import { BehaviorSubject, Subscription } from 'rxjs';
3
- import { IonContent, IonItem } from '@ionic/angular';
4
- import { APP_USER_EVENT_SERVICE } from '../user-event.service';
5
- import { isNotEmptyArray, removeDuplicatesFromArray } from '../../../shared/functions';
6
- import { fromScrollEndEvent } from '../../../shared/events';
7
- import { waitFor } from '../../../shared/observables';
8
- import { debounceTime, distinctUntilChanged, filter, first, map, switchMap } from 'rxjs/operators';
9
- import { APP_SHOW_TOOLTIP } from '../../../shared/constants';
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "@ionic/angular";
12
- import * as i2 from "../../../core/services/local-settings.service";
13
- import * as i3 from "@angular/common";
14
- import * as i4 from "ngx-jdenticon";
15
- import * as i5 from "@angular/material/icon";
16
- import * as i6 from "@angular/material/tooltip";
17
- import * as i7 from "../../../core/icon/icon.component";
18
- import * as i8 from "@ngx-translate/core";
19
- import * as i9 from "../../../shared/pipes/date-format.pipe";
20
- import * as i10 from "../../../shared/pipes/date-from-now.pipe";
21
- import * as i11 from "../../../shared/pipes/arrays.pipe";
22
- export const APP_USER_EVENT_LIST_INFINITE_SCROLL_THRESHOLD = new InjectionToken('infiniteScrollThreshold');
23
- export class UserEventNotificationList {
24
- cd;
25
- popoverController;
26
- settings;
27
- userEventService;
28
- infiniteScrollThresholdFromToken;
29
- fetchingMore = false;
30
- $items = new BehaviorSubject(undefined);
31
- _subscriptions = new Subscription();
32
- _fetchMoreFn;
33
- _fetchMoreSubscription;
34
- _$pageSize = new BehaviorSubject(20);
35
- _panelElement = null;
36
- titleI18n = 'SOCIAL.USER_EVENT.NOTIFICATION.TITLE';
37
- sortBy = 'creationDate';
38
- sortDirection = 'desc';
39
- filter;
40
- enableInfiniteScroll = true;
41
- infiniteScrollThreshold;
42
- headerActions;
43
- footerActions;
44
- showHeader = true;
45
- showFooter = true;
46
- mobile;
47
- debug = false;
48
- set pageSize(value) {
49
- if (value > 0 && value !== this._$pageSize.value)
50
- this._$pageSize.next(value);
51
- }
52
- $itemCount = new BehaviorSubject(undefined);
53
- get pageSize() {
54
- return this._$pageSize.value;
55
- }
56
- get hasItem$() {
57
- return this.$items.pipe(map(isNotEmptyArray));
58
- }
59
- get itemCount$() {
60
- return this.$itemCount.pipe(map((value) => value ?? 0));
61
- }
62
- readEvent;
63
- readEvents;
64
- dismiss = new EventEmitter();
65
- ionContent;
66
- ionItems;
67
- get canFetchMore() {
68
- return this.enableInfiniteScroll && !!this._fetchMoreFn;
69
- }
70
- showTooltip = inject(APP_SHOW_TOOLTIP, { optional: true });
71
- constructor(cd, popoverController, settings, userEventService, infiniteScrollThresholdFromToken) {
72
- this.cd = cd;
73
- this.popoverController = popoverController;
74
- this.settings = settings;
75
- this.userEventService = userEventService;
76
- this.infiniteScrollThresholdFromToken = infiniteScrollThresholdFromToken;
77
- this.mobile = this.settings?.mobile || false;
78
- this.infiniteScrollThreshold = infiniteScrollThresholdFromToken;
79
- }
80
- ngOnInit() {
81
- // Watch all user events
82
- if (this.userEventService) {
83
- this._subscriptions.add(this._$pageSize
84
- .pipe(distinctUntilChanged(), switchMap((pageSize) => this.userEventService.watchAll(0, pageSize, this.sortBy, this.sortDirection, this.filter)), first())
85
- .subscribe((result) => {
86
- if (this.debug)
87
- console.debug(`[user-event-notification-list] Receiving ${result.total} user events`, result.data);
88
- this.$items.next(result.data);
89
- this.$itemCount.next(result.total ?? result.data?.length ?? 0);
90
- this._fetchMoreFn = result.fetchMore;
91
- this.fetchingMore = false; // Allow to refetch more
92
- this.markForCheck();
93
- }));
94
- // Listen changes
95
- this._subscriptions.add(this.userEventService
96
- .listenAllChanges(this.filter)
97
- .pipe(filter(isNotEmptyArray))
98
- .subscribe((data) => {
99
- if (this.debug)
100
- console.debug(`[user-event-notification-list] Receiving ${data.length} new user events (by WS)`, data);
101
- const oldItemsCount = this.$itemCount.value || 0;
102
- const items = removeDuplicatesFromArray([...data, ...(this.$items.value || [])], 'id');
103
- // Compute delta count
104
- // When an existing event is update, the delta count should be = 0
105
- const deltaCount = items.length - oldItemsCount;
106
- // Update observables
107
- this.$items.next(items);
108
- if (deltaCount !== 0)
109
- this.$itemCount.next(oldItemsCount + deltaCount);
110
- }));
111
- if (this.enableInfiniteScroll)
112
- this.initInfiniteScroll(this.infiniteScrollThreshold);
113
- }
114
- }
115
- ngOnDestroy() {
116
- this._subscriptions.unsubscribe();
117
- this.$items.complete();
118
- this.$itemCount.complete();
119
- }
120
- async click(event, userEvent) {
121
- if (!userEvent)
122
- return; // Skip
123
- // MarkAsRead
124
- this.markAsRead(event, userEvent);
125
- // Get the default action (if any)
126
- const defaultAction = (userEvent?.actions || []).find((a) => a.default);
127
- if (defaultAction) {
128
- await this.executeAction(event, defaultAction, userEvent);
129
- }
130
- }
131
- isDefaultAction(action) {
132
- return (action && action.default) || false;
133
- }
134
- markAsRead(event, userEvent) {
135
- if (userEvent?.readDate)
136
- return;
137
- this.readEvent?.emit(userEvent);
138
- }
139
- markAllAsRead(event) {
140
- const unreadUserEvents = (this.$items.value || []).filter((value) => !value.readDate);
141
- if (!unreadUserEvents.length)
142
- return;
143
- this.readEvents?.emit(unreadUserEvents);
144
- }
145
- async executeAction(event, action, userEvent) {
146
- if (event?.defaultPrevented)
147
- return; // Skip if prevented
148
- // Disable default action (.e.g avoid to call click() function)
149
- if (event)
150
- event.preventDefault();
151
- // Execute then close popover
152
- try {
153
- const res = action.executeAction(userEvent);
154
- this.close();
155
- if (res instanceof Promise)
156
- await res;
157
- }
158
- catch (err) {
159
- console.error(err);
160
- }
161
- }
162
- close() {
163
- if (this.dismiss.observed) {
164
- this.dismiss.emit();
165
- }
166
- else {
167
- this.popoverController.dismiss();
168
- }
169
- // Reset counter (need if event has been received while popover if open)
170
- this.userEventService?.resetCount();
171
- }
172
- async fetchMore(event) {
173
- if (!this._fetchMoreFn || this.fetchingMore)
174
- return;
175
- console.debug('[user-event-notification-list] Fetching more notifications...', event);
176
- this.fetchingMore = true;
177
- const fetchMoreFn = this._fetchMoreFn;
178
- try {
179
- const result = await fetchMoreFn();
180
- let data = [...(this.$items.value || []), ...result.data];
181
- // Remove duplication (e.g. when new user event was added by subscription)
182
- data = removeDuplicatesFromArray(data, 'id');
183
- // fetch more changes (e.g. if watchAll observable as been refreshed)
184
- if (fetchMoreFn !== this._fetchMoreFn)
185
- return; // Skip
186
- this.$items.next(data);
187
- this.$itemCount.next(result.total ?? result.data?.length ?? 0);
188
- this._fetchMoreFn = result.fetchMore;
189
- // Update the page size, to keep same scroll height, after the next refresh
190
- //this.pageSize = Math.max(this.pageSize, data.length);
191
- }
192
- catch (err) {
193
- console.error(err);
194
- this._fetchMoreFn = undefined; // Forget the function
195
- }
196
- finally {
197
- this.markForCheck();
198
- this.fetchingMore = false;
199
- }
200
- }
201
- async initInfiniteScroll(threshold) {
202
- console.debug('[user-event-notification-list] Init infinite loop');
203
- if (this._fetchMoreSubscription)
204
- this._fetchMoreSubscription.unsubscribe();
205
- threshold = threshold || (this.mobile ? '15%' : '2%');
206
- await waitFor(() => !!this.ionContent, { dueTime: 250, timeout: 1000 });
207
- const panel = await this.getPanelElement();
208
- // Trigger fetch more, end end scroll reached
209
- this._fetchMoreSubscription = this.$items
210
- .pipe(debounceTime(250), filter(() => this.canFetchMore), switchMap(() => fromScrollEndEvent(panel, threshold, 250 /*force to check when no scrollbar - e.g. in large screen*/)))
211
- .subscribe(() => this.fetchMore());
212
- this._subscriptions.add(this._fetchMoreSubscription);
213
- }
214
- markForCheck() {
215
- this.cd.markForCheck();
216
- }
217
- async getPanelElement() {
218
- if (!this._panelElement) {
219
- this._panelElement = await this.ionContent.getScrollElement();
220
- }
221
- return this._panelElement;
222
- }
223
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UserEventNotificationList, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.PopoverController }, { token: i2.LocalSettingsService, optional: true }, { token: APP_USER_EVENT_SERVICE, optional: true }, { token: APP_USER_EVENT_LIST_INFINITE_SCROLL_THRESHOLD, optional: true }], target: i0.ɵɵFactoryTarget.Component });
224
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: UserEventNotificationList, selector: "app-user-event-notification-list", inputs: { titleI18n: "titleI18n", sortBy: "sortBy", sortDirection: "sortDirection", filter: "filter", enableInfiniteScroll: "enableInfiniteScroll", infiniteScrollThreshold: "infiniteScrollThreshold", headerActions: "headerActions", footerActions: "footerActions", showHeader: "showHeader", showFooter: "showFooter", mobile: "mobile", debug: "debug", pageSize: "pageSize" }, outputs: { readEvent: "readEvent", readEvents: "readEvents", dismiss: "dismiss" }, viewQueries: [{ propertyName: "ionContent", first: true, predicate: IonContent, descendants: true }, { propertyName: "ionItems", predicate: IonItem, descendants: true }], ngImport: i0, template: "<ion-content>\n <ion-list class=\"ion-list-popover\">\n <!-- header -->\n @if (showHeader) {\n <ion-row class=\"ion-list-header column\">\n <ion-col>\n @if (titleI18n) {\n <ion-label>{{ titleI18n | translate }}</ion-label>\n }\n </ion-col>\n <ion-col size=\"auto\" class=\"header-action\" *ngIf=\"$items | async | isNotEmptyArray\">\n <ion-text color=\"primary\">\n <a\n (click)=\"markAllAsRead($event)\"\n [title]=\"!showTooltip ? ('SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL' | translate) : ''\"\n >\n {{ 'SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL' | translate }}\n </a>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\" class=\"header-action\">\n <ion-text *ngFor=\"let action of headerActions\">\n <a\n (click)=\"executeAction($event, action, undefined)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n {{ action.name | translate }}\n </a>\n </ion-text>\n </ion-col>\n </ion-row>\n }\n\n @for (item of $items | async; track item.id; let last = $last) {\n <ion-item\n [lines]=\"last ? 'none' : undefined\"\n [class.unread]=\"!item.readDate\"\n [class.tappable]=\"item.actions | arrayFilter: isDefaultAction | isNotEmptyArray\"\n (click)=\"click($event, item)\"\n >\n <ion-avatar slot=\"start\">\n <ion-img *ngIf=\"item.avatar; else avatarIcon\" [src]=\"item.avatar\" />\n\n <ng-template #avatarIcon>\n <app-icon\n *ngIf=\"item.avatarIcon; else generateIcon\"\n [ref]=\"item.avatarIcon\"\n height=\"40\"\n width=\"40\"\n ></app-icon>\n </ng-template>\n\n <ng-template #generateIcon>\n <div class=\"avatar\" *ngIf=\"item.avatarJdenticon\">\n <svg width=\"40\" width=\"40\" [data-jdenticon-value]=\"item.avatarJdenticon\"></svg>\n </div>\n </ng-template>\n </ion-avatar>\n\n <ion-grid class=\"ion-no-margin ion-no-padding message\">\n <ion-row>\n <ion-col size=\"12\">\n <ion-text class=\"ion-text-wrap\">\n <p [class.unread]=\"!item.readDate\" [innerHTML]=\"item.message\"></p>\n </ion-text>\n </ion-col>\n </ion-row>\n\n <!-- date -->\n <ion-row>\n <ion-col size=\"12\">\n <app-icon\n *ngIf=\"item.icon\"\n [ref]=\"item.icon\"\n height=\"16\"\n width=\"16\"\n style=\"vertical-align: sub; margin-right: 3px\"\n ></app-icon>\n <small>\n <span>{{ item.creationDate | dateFromNow }}</span>\n <span style=\"color: gray\">{{ ' | ' + (item.creationDate | dateFormat: { time: true }) }}</span>\n </small>\n </ion-col>\n </ion-row>\n\n <!-- actions -->\n <ion-row *ngIf=\"item.actions | isNotEmptyArray\">\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ng-container *ngFor=\"let action of item.actions\">\n <a\n *ngIf=\"!action.default\"\n class=\"action\"\n (click)=\"executeAction($event, action, item)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n <app-icon\n *ngIf=\"action.iconRef\"\n slot=\"start\"\n height=\"20\"\n width=\"20\"\n [ref]=\"action.iconRef\"\n ></app-icon>\n <span>{{ action.name | translate }}</span>\n </a>\n </ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <mat-icon slot=\"end\" *ngIf=\"item.actions | arrayFilter: isDefaultAction | isNotEmptyArray\">\n chevron_right\n </mat-icon>\n </ion-item>\n }\n <!-- loading -->\n <ng-container *ngIf=\"($items | async) === undefined; else notLoading\">\n <ng-container *ngTemplateOutlet=\"loadingItem\"></ng-container>\n </ng-container>\n\n <ng-template #notLoading>\n <!-- no result -->\n <ion-item *ngIf=\"$items | async | isEmptyArray\" lines=\"none\">\n <ion-text color=\"dark\" class=\"text-italic\">{{ 'SOCIAL.USER_EVENT.NOTIFICATION.EMPTY' | translate }}</ion-text>\n </ion-item>\n\n <!-- Fetching more -->\n <ng-container *ngIf=\"fetchingMore; else infiniteLoop\" lines=\"none\" disabled>\n <ng-container *ngTemplateOutlet=\"loadingItem\"></ng-container>\n </ng-container>\n\n <!-- Infinite loop -->\n <ng-template #infiniteLoop>\n <ng-container *ngIf=\"canFetchMore\" lines=\"none\" disabled [ngTemplateOutlet]=\"loadingItem\"></ng-container>\n </ng-template>\n </ng-template>\n\n <!-- footer -->\n @if (showFooter) {\n <ion-row class=\"ion-list-footer column\">\n <ion-col size=\"auto\" class=\"footer-action\">\n <ion-text *ngFor=\"let action of footerActions\">\n <a\n (click)=\"executeAction($event, action, undefined)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n {{ action.name | translate }}\n </a>\n </ion-text>\n </ion-col>\n <ion-col>\n <ion-text *ngIf=\"$itemCount | async; let count\" class=\"ion-float-end ion-padding-end\">\n <i>{{ 'COMMON.RESULT_COUNT' | translate: { count: count } }}</i>\n </ion-text>\n </ion-col>\n </ion-row>\n }\n </ion-list>\n</ion-content>\n\n<!-- loading -->\n<ng-template #loadingItem>\n <ion-item lines=\"none\" [disabled]>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </ion-item>\n</ng-template>\n", styles: [":host(.popover-viewport) ion-content{overflow-y:auto;-webkit-user-select:none;user-select:none;max-height:var(--max-height)}ion-list ion-item.tappable{cursor:pointer}ion-list ion-item.tappable:hover{--ion-item-background: var(--ion-item-background-color-hover)}.message{font-size:.9em}.message p{margin-top:5px;margin-bottom:5px}.header-action{text-align:end;margin-right:8px}.header-action a{cursor:pointer;color:var(--ion-color-contrast)}.header-action a:hover{text-decoration:underline}.footer-action{text-align:start;margin-left:8px}.footer-action a{cursor:pointer;color:var(--ion-color-contrast)}.footer-action a:hover{text-decoration:underline}a.action{font-size:.9em;margin-right:10px;cursor:pointer}a.action:hover span{text-decoration:underline}a.action app-icon{vertical-align:middle}ion-avatar img,ion-avatar .avatar svg{border:1px solid rgba(var(--ion-color-secondary-rgb, .5));border-radius:50%}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1.IonAvatar, selector: "ion-avatar" }, { kind: "component", type: i1.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: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i1.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i1.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: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i4.SvgJdenticonDirective, selector: "svg[data-jdenticon-hash],svg[data-jdenticon-value]", inputs: ["data-jdenticon-hash", "data-jdenticon-value", "width", "height"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i7.AppIconComponent, selector: "app-icon", inputs: ["icon", "matIcon", "matSvgIcon", "color", "height", "width", "ref"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }, { kind: "pipe", type: i9.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i10.DateFromNowPipe, name: "dateFromNow" }, { kind: "pipe", type: i11.NotEmptyArrayPipe, name: "isNotEmptyArray" }, { kind: "pipe", type: i11.EmptyArrayPipe, name: "isEmptyArray" }, { kind: "pipe", type: i11.ArrayFilterPipe, name: "arrayFilter" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
225
- }
226
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UserEventNotificationList, decorators: [{
227
- type: Component,
228
- args: [{ selector: 'app-user-event-notification-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-content>\n <ion-list class=\"ion-list-popover\">\n <!-- header -->\n @if (showHeader) {\n <ion-row class=\"ion-list-header column\">\n <ion-col>\n @if (titleI18n) {\n <ion-label>{{ titleI18n | translate }}</ion-label>\n }\n </ion-col>\n <ion-col size=\"auto\" class=\"header-action\" *ngIf=\"$items | async | isNotEmptyArray\">\n <ion-text color=\"primary\">\n <a\n (click)=\"markAllAsRead($event)\"\n [title]=\"!showTooltip ? ('SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL' | translate) : ''\"\n >\n {{ 'SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL' | translate }}\n </a>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\" class=\"header-action\">\n <ion-text *ngFor=\"let action of headerActions\">\n <a\n (click)=\"executeAction($event, action, undefined)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n {{ action.name | translate }}\n </a>\n </ion-text>\n </ion-col>\n </ion-row>\n }\n\n @for (item of $items | async; track item.id; let last = $last) {\n <ion-item\n [lines]=\"last ? 'none' : undefined\"\n [class.unread]=\"!item.readDate\"\n [class.tappable]=\"item.actions | arrayFilter: isDefaultAction | isNotEmptyArray\"\n (click)=\"click($event, item)\"\n >\n <ion-avatar slot=\"start\">\n <ion-img *ngIf=\"item.avatar; else avatarIcon\" [src]=\"item.avatar\" />\n\n <ng-template #avatarIcon>\n <app-icon\n *ngIf=\"item.avatarIcon; else generateIcon\"\n [ref]=\"item.avatarIcon\"\n height=\"40\"\n width=\"40\"\n ></app-icon>\n </ng-template>\n\n <ng-template #generateIcon>\n <div class=\"avatar\" *ngIf=\"item.avatarJdenticon\">\n <svg width=\"40\" width=\"40\" [data-jdenticon-value]=\"item.avatarJdenticon\"></svg>\n </div>\n </ng-template>\n </ion-avatar>\n\n <ion-grid class=\"ion-no-margin ion-no-padding message\">\n <ion-row>\n <ion-col size=\"12\">\n <ion-text class=\"ion-text-wrap\">\n <p [class.unread]=\"!item.readDate\" [innerHTML]=\"item.message\"></p>\n </ion-text>\n </ion-col>\n </ion-row>\n\n <!-- date -->\n <ion-row>\n <ion-col size=\"12\">\n <app-icon\n *ngIf=\"item.icon\"\n [ref]=\"item.icon\"\n height=\"16\"\n width=\"16\"\n style=\"vertical-align: sub; margin-right: 3px\"\n ></app-icon>\n <small>\n <span>{{ item.creationDate | dateFromNow }}</span>\n <span style=\"color: gray\">{{ ' | ' + (item.creationDate | dateFormat: { time: true }) }}</span>\n </small>\n </ion-col>\n </ion-row>\n\n <!-- actions -->\n <ion-row *ngIf=\"item.actions | isNotEmptyArray\">\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ng-container *ngFor=\"let action of item.actions\">\n <a\n *ngIf=\"!action.default\"\n class=\"action\"\n (click)=\"executeAction($event, action, item)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n <app-icon\n *ngIf=\"action.iconRef\"\n slot=\"start\"\n height=\"20\"\n width=\"20\"\n [ref]=\"action.iconRef\"\n ></app-icon>\n <span>{{ action.name | translate }}</span>\n </a>\n </ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <mat-icon slot=\"end\" *ngIf=\"item.actions | arrayFilter: isDefaultAction | isNotEmptyArray\">\n chevron_right\n </mat-icon>\n </ion-item>\n }\n <!-- loading -->\n <ng-container *ngIf=\"($items | async) === undefined; else notLoading\">\n <ng-container *ngTemplateOutlet=\"loadingItem\"></ng-container>\n </ng-container>\n\n <ng-template #notLoading>\n <!-- no result -->\n <ion-item *ngIf=\"$items | async | isEmptyArray\" lines=\"none\">\n <ion-text color=\"dark\" class=\"text-italic\">{{ 'SOCIAL.USER_EVENT.NOTIFICATION.EMPTY' | translate }}</ion-text>\n </ion-item>\n\n <!-- Fetching more -->\n <ng-container *ngIf=\"fetchingMore; else infiniteLoop\" lines=\"none\" disabled>\n <ng-container *ngTemplateOutlet=\"loadingItem\"></ng-container>\n </ng-container>\n\n <!-- Infinite loop -->\n <ng-template #infiniteLoop>\n <ng-container *ngIf=\"canFetchMore\" lines=\"none\" disabled [ngTemplateOutlet]=\"loadingItem\"></ng-container>\n </ng-template>\n </ng-template>\n\n <!-- footer -->\n @if (showFooter) {\n <ion-row class=\"ion-list-footer column\">\n <ion-col size=\"auto\" class=\"footer-action\">\n <ion-text *ngFor=\"let action of footerActions\">\n <a\n (click)=\"executeAction($event, action, undefined)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n {{ action.name | translate }}\n </a>\n </ion-text>\n </ion-col>\n <ion-col>\n <ion-text *ngIf=\"$itemCount | async; let count\" class=\"ion-float-end ion-padding-end\">\n <i>{{ 'COMMON.RESULT_COUNT' | translate: { count: count } }}</i>\n </ion-text>\n </ion-col>\n </ion-row>\n }\n </ion-list>\n</ion-content>\n\n<!-- loading -->\n<ng-template #loadingItem>\n <ion-item lines=\"none\" [disabled]>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </ion-item>\n</ng-template>\n", styles: [":host(.popover-viewport) ion-content{overflow-y:auto;-webkit-user-select:none;user-select:none;max-height:var(--max-height)}ion-list ion-item.tappable{cursor:pointer}ion-list ion-item.tappable:hover{--ion-item-background: var(--ion-item-background-color-hover)}.message{font-size:.9em}.message p{margin-top:5px;margin-bottom:5px}.header-action{text-align:end;margin-right:8px}.header-action a{cursor:pointer;color:var(--ion-color-contrast)}.header-action a:hover{text-decoration:underline}.footer-action{text-align:start;margin-left:8px}.footer-action a{cursor:pointer;color:var(--ion-color-contrast)}.footer-action a:hover{text-decoration:underline}a.action{font-size:.9em;margin-right:10px;cursor:pointer}a.action:hover span{text-decoration:underline}a.action app-icon{vertical-align:middle}ion-avatar img,ion-avatar .avatar svg{border:1px solid rgba(var(--ion-color-secondary-rgb, .5));border-radius:50%}\n"] }]
229
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.PopoverController }, { type: i2.LocalSettingsService, decorators: [{
230
- type: Optional
231
- }] }, { type: undefined, decorators: [{
232
- type: Optional
233
- }, {
234
- type: Inject,
235
- args: [APP_USER_EVENT_SERVICE]
236
- }] }, { type: undefined, decorators: [{
237
- type: Optional
238
- }, {
239
- type: Inject,
240
- args: [APP_USER_EVENT_LIST_INFINITE_SCROLL_THRESHOLD]
241
- }] }], propDecorators: { titleI18n: [{
242
- type: Input
243
- }], sortBy: [{
244
- type: Input
245
- }], sortDirection: [{
246
- type: Input
247
- }], filter: [{
248
- type: Input
249
- }], enableInfiniteScroll: [{
250
- type: Input
251
- }], infiniteScrollThreshold: [{
252
- type: Input
253
- }], headerActions: [{
254
- type: Input
255
- }], footerActions: [{
256
- type: Input
257
- }], showHeader: [{
258
- type: Input
259
- }], showFooter: [{
260
- type: Input
261
- }], mobile: [{
262
- type: Input
263
- }], debug: [{
264
- type: Input
265
- }], pageSize: [{
266
- type: Input
267
- }], readEvent: [{
268
- type: Output
269
- }], readEvents: [{
270
- type: Output
271
- }], dismiss: [{
272
- type: Output
273
- }], ionContent: [{
274
- type: ViewChild,
275
- args: [IonContent]
276
- }], ionItems: [{
277
- type: ViewChildren,
278
- args: [IonItem]
279
- }] } });
280
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1ldmVudC1ub3RpZmljYXRpb24ubGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc29jaWFsL3VzZXItZXZlbnQvbm90aWZpY2F0aW9uL3VzZXItZXZlbnQtbm90aWZpY2F0aW9uLmxpc3QudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NvY2lhbC91c2VyLWV2ZW50L25vdGlmaWNhdGlvbi91c2VyLWV2ZW50LW5vdGlmaWNhdGlvbi5saXN0Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUVOLFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBYyxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQXFCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEUsT0FBTyxFQUFFLHNCQUFzQixFQUFxQixNQUFNLHVCQUF1QixDQUFDO0FBR2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQUU3RCxNQUFNLENBQUMs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QkFDekMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyw2Q0FBNkM7eUNBakQxRCxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFTyxRQUFRO3NCQUFwQixLQUFLO2dCQWtCSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFFZ0IsVUFBVTtzQkFBaEMsU0FBUzt1QkFBQyxVQUFVO2dCQUNFLFFBQVE7c0JBQTlCLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIGluamVjdCxcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElVc2VyRXZlbnQsIElVc2VyRXZlbnRBY3Rpb24sIElVc2VyRXZlbnRGaWx0ZXIgfSBmcm9tICcuLi91c2VyLWV2ZW50Lm1vZGVsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJb25Db250ZW50LCBJb25JdGVtLCBQb3BvdmVyQ29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEFQUF9VU0VSX0VWRU5UX1NFUlZJQ0UsIElVc2VyRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vdXNlci1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IEZldGNoTW9yZUZuLCBMb2FkUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IGlzTm90RW1wdHlBcnJheSwgcmVtb3ZlRHVwbGljYXRlc0Zyb21BcnJheSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgZnJvbVNjcm9sbEVuZEV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2V2ZW50cyc7XG5pbXBvcnQgeyB3YWl0Rm9yIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7IFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZmlyc3QsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBBUFBfU0hPV19UT09MVElQIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBBUFBfVVNFUl9FVkVOVF9MSVNUX0lORklOSVRFX1NDUk9MTF9USFJFU0hPTEQgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignaW5maW5pdGVTY3JvbGxUaHJlc2hvbGQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBVc2VyRXZlbnROb3RpZmljYXRpb25MaXN0T3B0aW9uczxcbiAgRSBleHRlbmRzIElVc2VyRXZlbnQ8YW55PiA9IElVc2VyRXZlbnQ8YW55PixcbiAgRiBleHRlbmRzIElVc2VyRXZlbnRGaWx0ZXI8YW55PiA9IElVc2VyRXZlbnRGaWx0ZXI8YW55Pixcbj4ge1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIHRpdGxlSTE4bj86IHN0cmluZztcbiAgcmVhZEV2ZW50PzogRXZlbnRFbWl0dGVyPEU+O1xuICByZWFkRXZlbnRzPzogRXZlbnRFbWl0dGVyPEVbXT47XG4gIGZpbHRlcj86IFBhcnRpYWw8Rj47XG4gIGhlYWRlckFjdGlvbnM/OiBJVXNlckV2ZW50QWN0aW9uW107XG4gIGZvb3RlckFjdGlvbnM/OiBJVXNlckV2ZW50QWN0aW9uW107XG4gIHNob3dUb29sdGlwPzogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXVzZXItZXZlbnQtbm90aWZpY2F0aW9uLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1ldmVudC1ub3RpZmljYXRpb24ubGlzdC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdXNlci1ldmVudC1ub3RpZmljYXRpb24ubGlzdC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBVc2VyRXZlbnROb3RpZmljYXRpb25MaXN0PEUgZXh0ZW5kcyBJVXNlckV2ZW50PGFueT4gPSBJVXNlckV2ZW50PGFueT4sIEYgZXh0ZW5kcyBJVXNlckV2ZW50RmlsdGVyPGFueT4gPSBJVXNlckV2ZW50RmlsdGVyPGFueT4+XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIFVzZXJFdmVudE5vdGlmaWNhdGlvbkxpc3RPcHRpb25zPEUsIEY+XG57XG4gIHByb3RlY3RlZCBmZXRjaGluZ01vcmUgPSBmYWxzZTtcbiAgcHJvdGVjdGVkICRpdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RVtdPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByb3RlY3RlZCBfZmV0Y2hNb3JlRm46IEZldGNoTW9yZUZuPExvYWRSZXN1bHQ8RT4+O1xuICBwcm90ZWN0ZWQgX2ZldGNoTW9yZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgXyRwYWdlU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigyMCk7XG4gIHByb3RlY3RlZCBfcGFuZWxFbGVtZW50OiBIVE1MRWxlbWVudCA9IG51bGw7XG5cbiAgQElucHV0KCkgdGl0bGVJMThuOiBzdHJpbmcgPSAnU09DSUFMLlVTRVJfRVZFTlQuTk9USUZJQ0FUSU9OLlRJVExFJztcbiAgQElucHV0KCkgc29ydEJ5ID0gJ2NyZWF0aW9uRGF0ZSc7XG4gIEBJbnB1dCgpIHNvcnREaXJlY3Rpb246IFNvcnREaXJlY3Rpb24gPSAnZGVzYyc7XG4gIEBJbnB1dCgpIGZpbHRlcjogUGFydGlhbDxGPjtcbiAgQElucHV0KCkgZW5hYmxlSW5maW5pdGVTY3JvbGwgPSB0cnVlO1xuICBASW5wdXQoKSBpbmZpbml0ZVNjcm9sbFRocmVzaG9sZDogc3RyaW5nO1xuICBASW5wdXQoKSBoZWFkZXJBY3Rpb25zOiBJVXNlckV2ZW50QWN0aW9uW107XG4gIEBJbnB1dCgpIGZvb3RlckFjdGlvbnM6IElVc2VyRXZlbnRBY3Rpb25bXTtcbiAgQElucHV0KCkgc2hvd0hlYWRlciA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dGb290ZXIgPSB0cnVlO1xuICBASW5wdXQoKSBtb2JpbGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRlYnVnID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2V0IHBhZ2VTaXplKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgPiAwICYmIHZhbHVlICE9PSB0aGlzLl8kcGFnZVNpemUudmFsdWUpIHRoaXMuXyRwYWdlU2l6ZS5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gICRpdGVtQ291bnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4odW5kZWZpbmVkKTtcblxuICBnZXQgcGFnZVNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fJHBhZ2VTaXplLnZhbHVlO1xuICB9XG5cbiAgZ2V0IGhhc0l0ZW0kKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLiRpdGVtcy5waXBlKG1hcChpc05vdEVtcHR5QXJyYXkpKTtcbiAgfVxuXG4gIGdldCBpdGVtQ291bnQkKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuJGl0ZW1Db3VudC5waXBlKG1hcCgodmFsdWUpID0+IHZhbHVlID8/IDApKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSByZWFkRXZlbnQ6IEV2ZW50RW1pdHRlcjxFPjtcbiAgQE91dHB1dCgpIHJlYWRFdmVudHM6IEV2ZW50RW1pdHRlcjxFW10+O1xuICBAT3V0cHV0KCkgZGlzbWlzcyA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG5cbiAgQFZpZXdDaGlsZChJb25Db250ZW50KSBpb25Db250ZW50OiBJb25Db250ZW50O1xuICBAVmlld0NoaWxkcmVuKElvbkl0ZW0pIGlvbkl0ZW1zOiBRdWVyeUxpc3Q8SW9uSXRlbT47XG5cbiAgZ2V0IGNhbkZldGNoTW9yZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVJbmZpbml0ZVNjcm9sbCAmJiAhIXRoaXMuX2ZldGNoTW9yZUZuO1xuICB9XG5cbiAgc2hvd1Rvb2x0aXAgPSBpbmplY3QoQVBQX1NIT1dfVE9PTFRJUCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCBwb3BvdmVyQ29udHJvbGxlcjogUG9wb3ZlckNvbnRyb2xsZXIsXG4gICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9VU0VSX0VWRU5UX1NFUlZJQ0UpIHB1YmxpYyB1c2VyRXZlbnRTZXJ2aWNlOiBJVXNlckV2ZW50U2VydmljZTxFLCBJVXNlckV2ZW50RmlsdGVyPGFueT4+LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX1VTRVJfRVZFTlRfTElTVF9JTkZJTklURV9TQ1JPTExfVEhSRVNIT0xEKSBwdWJsaWMgaW5maW5pdGVTY3JvbGxUaHJlc2hvbGRGcm9tVG9rZW46IHN0cmluZ1xuICApIHtcbiAgICB0aGlzLm1vYmlsZSA9IHRoaXMuc2V0dGluZ3M/Lm1vYmlsZSB8fCBmYWxzZTtcbiAgICB0aGlzLmluZmluaXRlU2Nyb2xsVGhyZXNob2xkID0gaW5maW5pdGVTY3JvbGxUaHJlc2hvbGRGcm9tVG9rZW47XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBXYXRjaCBhbGwgdXNlciBldmVudHNcbiAgICBpZiAodGhpcy51c2VyRXZlbnRTZXJ2aWNlKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgdGhpcy5fJHBhZ2VTaXplXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKChwYWdlU2l6ZSkgPT4gdGhpcy51c2VyRXZlbnRTZXJ2aWNlLndhdGNoQWxsKDAsIHBhZ2VTaXplLCB0aGlzLnNvcnRCeSwgdGhpcy5zb3J0RGlyZWN0aW9uLCB0aGlzLmZpbHRlcikpLFxuICAgICAgICAgICAgZmlyc3QoKVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbdXNlci1ldmVudC1ub3RpZmljYXRpb24tbGlzdF0gUmVjZWl2aW5nICR7cmVzdWx0LnRvdGFsfSB1c2VyIGV2ZW50c2AsIHJlc3VsdC5kYXRhKTtcbiAgICAgICAgICAgIHRoaXMuJGl0ZW1zLm5leHQocmVzdWx0LmRhdGEpO1xuICAgICAgICAgICAgdGhpcy4kaXRlbUNvdW50Lm5leHQocmVzdWx0LnRvdGFsID8/IHJlc3VsdC5kYXRhPy5sZW5ndGggPz8gMCk7XG4gICAgICAgICAgICB0aGlzLl9mZXRjaE1vcmVGbiA9IHJlc3VsdC5mZXRjaE1vcmU7XG4gICAgICAgICAgICB0aGlzLmZldGNoaW5nTW9yZSA9IGZhbHNlOyAvLyBBbGxvdyB0byByZWZldGNoIG1vcmVcbiAgICAgICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIC8vIExpc3RlbiBjaGFuZ2VzXG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgdGhpcy51c2VyRXZlbnRTZXJ2aWNlXG4gICAgICAgICAgLmxpc3RlbkFsbENoYW5nZXModGhpcy5maWx0ZXIpXG4gICAgICAgICAgLnBpcGUoZmlsdGVyKGlzTm90RW1wdHlBcnJheSkpXG4gICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFt1c2VyLWV2ZW50LW5vdGlmaWNhdGlvbi1saXN0XSBSZWNlaXZpbmcgJHtkYXRhLmxlbmd0aH0gbmV3IHVzZXIgZXZlbnRzIChieSBXUylgLCBkYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IG9sZEl0ZW1zQ291bnQgPSB0aGlzLiRpdGVtQ291bnQudmFsdWUgfHwgMDtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gcmVtb3ZlRHVwbGljYXRlc0Zyb21BcnJheShbLi4uZGF0YSwgLi4uKHRoaXMuJGl0ZW1zLnZhbHVlIHx8IFtdKV0sICdpZCcpO1xuXG4gICAgICAgICAgICAvLyBDb21wdXRlIGRlbHRhIGNvdW50XG4gICAgICAgICAgICAvLyBXaGVuIGFuIGV4aXN0aW5nIGV2ZW50IGlzIHVwZGF0ZSwgdGhlIGRlbHRhIGNvdW50IHNob3VsZCBiZSA9IDBcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhQ291bnQgPSBpdGVtcy5sZW5ndGggLSBvbGRJdGVtc0NvdW50O1xuXG4gICAgICAgICAgICAvLyBVcGRhdGUgb2JzZXJ2YWJsZXNcbiAgICAgICAgICAgIHRoaXMuJGl0ZW1zLm5leHQoaXRlbXMpO1xuICAgICAgICAgICAgaWYgKGRlbHRhQ291bnQgIT09IDApIHRoaXMuJGl0ZW1Db3VudC5uZXh0KG9sZEl0ZW1zQ291bnQgKyBkZWx0YUNvdW50KTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgaWYgKHRoaXMuZW5hYmxlSW5maW5pdGVTY3JvbGwpIHRoaXMuaW5pdEluZmluaXRlU2Nyb2xsKHRoaXMuaW5maW5pdGVTY3JvbGxUaHJlc2hvbGQpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLiRpdGVtcy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuJGl0ZW1Db3VudC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgYXN5bmMgY2xpY2soZXZlbnQ6IEV2ZW50LCB1c2VyRXZlbnQ6IEUpIHtcbiAgICBpZiAoIXVzZXJFdmVudCkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICAvLyBNYXJrQXNSZWFkXG4gICAgdGhpcy5tYXJrQXNSZWFkKGV2ZW50LCB1c2VyRXZlbnQpO1xuXG4gICAgLy8gR2V0IHRoZSBkZWZhdWx0IGFjdGlvbiAoaWYgYW55KVxuICAgIGNvbnN0IGRlZmF1bHRBY3Rpb24gPSAodXNlckV2ZW50Py5hY3Rpb25zIHx8IFtdKS5maW5kKChhKSA9PiBhLmRlZmF1bHQpO1xuXG4gICAgaWYgKGRlZmF1bHRBY3Rpb24pIHtcbiAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZUFjdGlvbihldmVudCwgZGVmYXVsdEFjdGlvbiwgdXNlckV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBpc0RlZmF1bHRBY3Rpb24oYWN0aW9uOiBJVXNlckV2ZW50QWN0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChhY3Rpb24gJiYgYWN0aW9uLmRlZmF1bHQpIHx8IGZhbHNlO1xuICB9XG5cbiAgbWFya0FzUmVhZChldmVudDogRXZlbnQsIHVzZXJFdmVudDogRSkge1xuICAgIGlmICh1c2VyRXZlbnQ/LnJlYWREYXRlKSByZXR1cm47XG4gICAgdGhpcy5yZWFkRXZlbnQ/LmVtaXQodXNlckV2ZW50KTtcbiAgfVxuXG4gIG1hcmtBbGxBc1JlYWQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgdW5yZWFkVXNlckV2ZW50cyA9ICh0aGlzLiRpdGVtcy52YWx1ZSB8fCBbXSkuZmlsdGVyKCh2YWx1ZSkgPT4gIXZhbHVlLnJlYWREYXRlKTtcbiAgICBpZiAoIXVucmVhZFVzZXJFdmVudHMubGVuZ3RoKSByZXR1cm47XG4gICAgdGhpcy5yZWFkRXZlbnRzPy5lbWl0KHVucmVhZFVzZXJFdmVudHMpO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUFjdGlvbihldmVudDogRXZlbnQsIGFjdGlvbjogSVVzZXJFdmVudEFjdGlvbiwgdXNlckV2ZW50OiBJVXNlckV2ZW50PGFueT4pIHtcbiAgICBpZiAoZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjsgLy8gU2tpcCBpZiBwcmV2ZW50ZWRcblxuICAgIC8vIERpc2FibGUgZGVmYXVsdCBhY3Rpb24gKC5lLmcgYXZvaWQgdG8gY2FsbCBjbGljaygpIGZ1bmN0aW9uKVxuICAgIGlmIChldmVudCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIC8vIEV4ZWN1dGUgdGhlbiBjbG9zZSBwb3BvdmVyXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGFjdGlvbi5leGVjdXRlQWN0aW9uKHVzZXJFdmVudCk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICBpZiAocmVzIGluc3RhbmNlb2YgUHJvbWlzZSkgYXdhaXQgcmVzO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLmRpc21pc3Mub2JzZXJ2ZWQpIHtcbiAgICAgIHRoaXMuZGlzbWlzcy5lbWl0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucG9wb3ZlckNvbnRyb2xsZXIuZGlzbWlzcygpO1xuICAgIH1cblxuICAgIC8vIFJlc2V0IGNvdW50ZXIgKG5lZWQgaWYgZXZlbnQgaGFzIGJlZW4gcmVjZWl2ZWQgd2hpbGUgcG9wb3ZlciBpZiBvcGVuKVxuICAgIHRoaXMudXNlckV2ZW50U2VydmljZT8ucmVzZXRDb3VudCgpO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hNb3JlKGV2ZW50PzogQ3VzdG9tRXZlbnQgJiB7IHRhcmdldD86IEV2ZW50VGFyZ2V0ICYgeyBjb21wbGV0ZT86ICgpID0+IHZvaWQgfSB9KSB7XG4gICAgaWYgKCF0aGlzLl9mZXRjaE1vcmVGbiB8fCB0aGlzLmZldGNoaW5nTW9yZSkgcmV0dXJuO1xuXG4gICAgY29uc29sZS5kZWJ1ZygnW3VzZXItZXZlbnQtbm90aWZpY2F0aW9uLWxpc3RdIEZldGNoaW5nIG1vcmUgbm90aWZpY2F0aW9ucy4uLicsIGV2ZW50KTtcbiAgICB0aGlzLmZldGNoaW5nTW9yZSA9IHRydWU7XG4gICAgY29uc3QgZmV0Y2hNb3JlRm4gPSB0aGlzLl9mZXRjaE1vcmVGbjtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaE1vcmVGbigpO1xuICAgICAgbGV0IGRhdGEgPSBbLi4uKHRoaXMuJGl0ZW1zLnZhbHVlIHx8IFtdKSwgLi4ucmVzdWx0LmRhdGFdO1xuXG4gICAgICAvLyBSZW1vdmUgZHVwbGljYXRpb24gKGUuZy4gd2hlbiBuZXcgdXNlciBldmVudCB3YXMgYWRkZWQgYnkgc3Vic2NyaXB0aW9uKVxuICAgICAgZGF0YSA9IHJlbW92ZUR1cGxpY2F0ZXNGcm9tQXJyYXkoZGF0YSwgJ2lkJyk7XG5cbiAgICAgIC8vIGZldGNoIG1vcmUgY2hhbmdlcyAoZS5nLiBpZiB3YXRjaEFsbCBvYnNlcnZhYmxlIGFzIGJlZW4gcmVmcmVzaGVkKVxuICAgICAgaWYgKGZldGNoTW9yZUZuICE9PSB0aGlzLl9mZXRjaE1vcmVGbikgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICAgIHRoaXMuJGl0ZW1zLm5leHQoZGF0YSk7XG4gICAgICB0aGlzLiRpdGVtQ291bnQubmV4dChyZXN1bHQudG90YWwgPz8gcmVzdWx0LmRhdGE/Lmxlbmd0aCA/PyAwKTtcbiAgICAgIHRoaXMuX2ZldGNoTW9yZUZuID0gcmVzdWx0LmZldGNoTW9yZTtcblxuICAgICAgLy8gVXBkYXRlIHRoZSBwYWdlIHNpemUsIHRvIGtlZXAgc2FtZSBzY3JvbGwgaGVpZ2h0LCBhZnRlciB0aGUgbmV4dCByZWZyZXNoXG4gICAgICAvL3RoaXMucGFnZVNpemUgPSBNYXRoLm1heCh0aGlzLnBhZ2VTaXplLCBkYXRhLmxlbmd0aCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB0aGlzLl9mZXRjaE1vcmVGbiA9IHVuZGVmaW5lZDsgLy8gRm9yZ2V0IHRoZSBmdW5jdGlvblxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5mZXRjaGluZ01vcmUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaW5pdEluZmluaXRlU2Nyb2xsKHRocmVzaG9sZD86IHN0cmluZykge1xuICAgIGNvbnNvbGUuZGVidWcoJ1t1c2VyLWV2ZW50LW5vdGlmaWNhdGlvbi1saXN0XSBJbml0IGluZmluaXRlIGxvb3AnKTtcbiAgICBpZiAodGhpcy5fZmV0Y2hNb3JlU3Vic2NyaXB0aW9uKSB0aGlzLl9mZXRjaE1vcmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblxuICAgIHRocmVzaG9sZCA9IHRocmVzaG9sZCB8fCAodGhpcy5tb2JpbGUgPyAnMTUlJyA6ICcyJScpO1xuICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4gISF0aGlzLmlvbkNvbnRlbnQsIHsgZHVlVGltZTogMjUwLCB0aW1lb3V0OiAxMDAwIH0pO1xuICAgIGNvbnN0IHBhbmVsID0gYXdhaXQgdGhpcy5nZXRQYW5lbEVsZW1lbnQoKTtcblxuICAgIC8vIFRyaWdnZXIgZmV0Y2ggbW9yZSwgZW5kIGVuZCBzY3JvbGwgcmVhY2hlZFxuICAgIHRoaXMuX2ZldGNoTW9yZVN1YnNjcmlwdGlvbiA9IHRoaXMuJGl0ZW1zXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDI1MCksXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmNhbkZldGNoTW9yZSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiBmcm9tU2Nyb2xsRW5kRXZlbnQocGFuZWwsIHRocmVzaG9sZCwgMjUwIC8qZm9yY2UgdG8gY2hlY2sgd2hlbiBubyBzY3JvbGxiYXIgLSBlLmcuIGluIGxhcmdlIHNjcmVlbiovKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5mZXRjaE1vcmUoKSk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZCh0aGlzLl9mZXRjaE1vcmVTdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFBhbmVsRWxlbWVudCgpOiBQcm9taXNlPEhUTUxFbGVtZW50PiB7XG4gICAgaWYgKCF0aGlzLl9wYW5lbEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX3BhbmVsRWxlbWVudCA9IGF3YWl0IHRoaXMuaW9uQ29udGVudC5nZXRTY3JvbGxFbGVtZW50KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9wYW5lbEVsZW1lbnQ7XG4gIH1cbn1cbiIsIjxpb24tY29udGVudD5cbiAgPGlvbi1saXN0IGNsYXNzPVwiaW9uLWxpc3QtcG9wb3ZlclwiPlxuICAgIDwhLS0gaGVhZGVyIC0tPlxuICAgIEBpZiAoc2hvd0hlYWRlcikge1xuICAgICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tbGlzdC1oZWFkZXIgY29sdW1uXCI+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIEBpZiAodGl0bGVJMThuKSB7XG4gICAgICAgICAgICA8aW9uLWxhYmVsPnt7IHRpdGxlSTE4biB8IHRyYW5zbGF0ZSB9fTwvaW9uLWxhYmVsPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiIGNsYXNzPVwiaGVhZGVyLWFjdGlvblwiICpuZ0lmPVwiJGl0ZW1zIHwgYXN5bmMgfCBpc05vdEVtcHR5QXJyYXlcIj5cbiAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAoY2xpY2spPVwibWFya0FsbEFzUmVhZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIiFzaG93VG9vbHRpcCA/ICgnU09DSUFMLlVTRVJfRVZFTlQuTk9USUZJQ0FUSU9OLlJFQURfQUxMJyB8IHRyYW5zbGF0ZSkgOiAnJ1wiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cInNob3dUb29sdGlwID8gKCdTT0NJQUwuVVNFUl9FVkVOVC5OT1RJRklDQVRJT04uUkVBRF9BTEwnIHwgdHJhbnNsYXRlKSA6ICcnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ1NPQ0lBTC5VU0VSX0VWRU5ULk5PVElGSUNBVElPTi5SRUFEX0FMTCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCIgY2xhc3M9XCJoZWFkZXItYWN0aW9uXCI+XG4gICAgICAgICAgPGlvbi10ZXh0ICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgaGVhZGVyQWN0aW9uc1wiPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImV4ZWN1dGVBY3Rpb24oJGV2ZW50LCBhY3Rpb24sIHVuZGVmaW5lZClcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiIXNob3dUb29sdGlwID8gKGFjdGlvbi50aXRsZSB8fCBhY3Rpb24ubmFtZSB8IHRyYW5zbGF0ZSkgOiAnJ1wiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cInNob3dUb29sdGlwID8gKGFjdGlvbi50aXRsZSB8fCBhY3Rpb24ubmFtZSB8IHRyYW5zbGF0ZSkgOiAnJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGFjdGlvbi5uYW1lIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgIH1cblxuICAgIEBmb3IgKGl0ZW0gb2YgJGl0ZW1zIHwgYXN5bmM7IHRyYWNrIGl0ZW0uaWQ7IGxldCBsYXN0ID0gJGxhc3QpIHtcbiAgICAgIDxpb24taXRlbVxuICAgICAgICBbbGluZXNdPVwibGFzdCA/ICdub25lJyA6IHVuZGVmaW5lZFwiXG4gICAgICAgIFtjbGFzcy51bnJlYWRdPVwiIWl0ZW0ucmVhZERhdGVcIlxuICAgICAgICBbY2xhc3MudGFwcGFibGVdPVwiaXRlbS5hY3Rpb25zIHwgYXJyYXlGaWx0ZXI6IGlzRGVmYXVsdEFjdGlvbiB8IGlzTm90RW1wdHlBcnJheVwiXG4gICAgICAgIChjbGljayk9XCJjbGljaygkZXZlbnQsIGl0ZW0pXCJcbiAgICAgID5cbiAgICAgICAgPGlvbi1hdmF0YXIgc2xvdD1cInN0YXJ0XCI+XG4gICAgICAgICAgPGlvbi1pbWcgKm5nSWY9XCJpdGVtLmF2YXRhcjsgZWxzZSBhdmF0YXJJY29uXCIgW3NyY109XCJpdGVtLmF2YXRhclwiIC8+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2F2YXRhckljb24+XG4gICAgICAgICAgICA8YXBwLWljb25cbiAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmF2YXRhckljb247IGVsc2UgZ2VuZXJhdGVJY29uXCJcbiAgICAgICAgICAgICAgW3JlZl09XCJpdGVtLmF2YXRhckljb25cIlxuICAgICAgICAgICAgICBoZWlnaHQ9XCI0MFwiXG4gICAgICAgICAgICAgIHdpZHRoPVwiNDBcIlxuICAgICAgICAgICAgPjwvYXBwLWljb24+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZ2VuZXJhdGVJY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhclwiICpuZ0lmPVwiaXRlbS5hdmF0YXJKZGVudGljb25cIj5cbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQwXCIgd2lkdGg9XCI0MFwiIFtkYXRhLWpkZW50aWNvbi12YWx1ZV09XCJpdGVtLmF2YXRhckpkZW50aWNvblwiPjwvc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9pb24tYXZhdGFyPlxuXG4gICAgICAgIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1tYXJnaW4gaW9uLW5vLXBhZGRpbmcgbWVzc2FnZVwiPlxuICAgICAgICAgIDxpb24tcm93PlxuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjEyXCI+XG4gICAgICAgICAgICAgIDxpb24tdGV4dCBjbGFzcz1cImlvbi10ZXh0LXdyYXBcIj5cbiAgICAgICAgICAgICAgICA8cCBbY2xhc3MudW5yZWFkXT1cIiFpdGVtLnJlYWREYXRlXCIgW2lubmVySFRNTF09XCJpdGVtLm1lc3NhZ2VcIj48L3A+XG4gICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgPC9pb24tcm93PlxuXG4gICAgICAgICAgPCEtLSBkYXRlIC0tPlxuICAgICAgICAgIDxpb24tcm93PlxuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjEyXCI+XG4gICAgICAgICAgICAgIDxhcHAtaWNvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5pY29uXCJcbiAgICAgICAgICAgICAgICBbcmVmXT1cIml0ZW0uaWNvblwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwidmVydGljYWwtYWxpZ246IHN1YjsgbWFyZ2luLXJpZ2h0OiAzcHhcIlxuICAgICAgICAgICAgICA+PC9hcHAtaWNvbj5cbiAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0uY3JlYXRpb25EYXRlIHwgZGF0ZUZyb21Ob3cgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJjb2xvcjogZ3JheVwiPnt7ICcgfCAnICsgKGl0ZW0uY3JlYXRpb25EYXRlIHwgZGF0ZUZvcm1hdDogeyB0aW1lOiB0cnVlIH0pIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgIDwvaW9uLXJvdz5cblxuICAgICAgICAgIDwhLS0gYWN0aW9ucyAtLT5cbiAgICAgICAgICA8aW9uLXJvdyAqbmdJZj1cIml0ZW0uYWN0aW9ucyB8IGlzTm90RW1wdHlBcnJheVwiPlxuICAgICAgICAgICAgPGlvbi1jb2w+PC9pb24tY29sPlxuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGl0ZW0uYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFhY3Rpb24uZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhlY3V0ZUFjdGlvbigkZXZlbnQsIGFjdGlvbiwgaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIiFzaG93VG9vbHRpcCA/IChhY3Rpb24udGl0bGUgfHwgYWN0aW9uLm5hbWUgfCB0cmFuc2xhdGUpIDogJydcIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwic2hvd1Rvb2x0aXAgPyAoYWN0aW9uLnRpdGxlIHx8IGFjdGlvbi5uYW1lIHwgdHJhbnNsYXRlKSA6ICcnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YXBwLWljb25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uaWNvblJlZlwiXG4gICAgICAgICAgICAgICAgICAgIHNsb3Q9XCJzdGFydFwiXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjIwXCJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiXG4gICAgICAgICAgICAgICAgICAgIFtyZWZdPVwiYWN0aW9uLmljb25SZWZcIlxuICAgICAgICAgICAgICAgICAgPjwvYXBwLWljb24+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBhY3Rpb24ubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgPC9pb24tZ3JpZD5cblxuICAgICAgICA8bWF0LWljb24gc2xvdD1cImVuZFwiICpuZ0lmPVwiaXRlbS5hY3Rpb25zIHwgYXJyYXlGaWx0ZXI6IGlzRGVmYXVsdEFjdGlvbiB8IGlzTm90RW1wdHlBcnJheVwiPlxuICAgICAgICAgIGNoZXZyb25fcmlnaHRcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvaW9uLWl0ZW0+XG4gICAgfVxuICAgIDwhLS0gbG9hZGluZyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKCRpdGVtcyB8IGFzeW5jKSA9PT0gdW5kZWZpbmVkOyBlbHNlIG5vdExvYWRpbmdcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nSXRlbVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLXRlbXBsYXRlICNub3RMb2FkaW5nPlxuICAgICAgPCEtLSBubyByZXN1bHQgLS0+XG4gICAgICA8aW9uLWl0ZW0gKm5nSWY9XCIkaXRlbXMgfCBhc3luYyB8IGlzRW1wdHlBcnJheVwiIGxpbmVzPVwibm9uZVwiPlxuICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJkYXJrXCIgY2xhc3M9XCJ0ZXh0LWl0YWxpY1wiPnt7ICdTT0NJQUwuVVNFUl9FVkVOVC5OT1RJRklDQVRJT04uRU1QVFknIHwgdHJhbnNsYXRlIH19PC9pb24tdGV4dD5cbiAgICAgIDwvaW9uLWl0ZW0+XG5cbiAgICAgIDwhLS0gRmV0Y2hpbmcgbW9yZSAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmZXRjaGluZ01vcmU7IGVsc2UgaW5maW5pdGVMb29wXCIgbGluZXM9XCJub25lXCIgZGlzYWJsZWQ+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nSXRlbVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gSW5maW5pdGUgbG9vcCAtLT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjaW5maW5pdGVMb29wPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FuRmV0Y2hNb3JlXCIgbGluZXM9XCJub25lXCIgZGlzYWJsZWQgW25nVGVtcGxhdGVPdXRsZXRdPVwibG9hZGluZ0l0ZW1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gZm9vdGVyIC0tPlxuICAgIEBpZiAoc2hvd0Zvb3Rlcikge1xuICAgICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tbGlzdC1mb290ZXIgY29sdW1uXCI+XG4gICAgICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCIgY2xhc3M9XCJmb290ZXItYWN0aW9uXCI+XG4gICAgICAgICAgPGlvbi10ZXh0ICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgZm9vdGVyQWN0aW9uc1wiPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImV4ZWN1dGVBY3Rpb24oJGV2ZW50LCBhY3Rpb24sIHVuZGVmaW5lZClcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiIXNob3dUb29sdGlwID8gKGFjdGlvbi50aXRsZSB8fCBhY3Rpb24ubmFtZSB8IHRyYW5zbGF0ZSkgOiAnJ1wiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cInNob3dUb29sdGlwID8gKGFjdGlvbi50aXRsZSB8fCBhY3Rpb24ubmFtZSB8IHRyYW5zbGF0ZSkgOiAnJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGFjdGlvbi5uYW1lIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICA8aW9uLXRleHQgKm5nSWY9XCIkaXRlbUNvdW50IHwgYXN5bmM7IGxldCBjb3VudFwiIGNsYXNzPVwiaW9uLWZsb2F0LWVuZCBpb24tcGFkZGluZy1lbmRcIj5cbiAgICAgICAgICAgIDxpPnt7ICdDT01NT04uUkVTVUxUX0NPVU5UJyB8IHRyYW5zbGF0ZTogeyBjb3VudDogY291bnQgfSB9fTwvaT5cbiAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICA8L2lvbi1yb3c+XG4gICAgfVxuICA8L2lvbi1saXN0PlxuPC9pb24tY29udGVudD5cblxuPCEtLSBsb2FkaW5nIC0tPlxuPG5nLXRlbXBsYXRlICNsb2FkaW5nSXRlbT5cbiAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiIFtkaXNhYmxlZF0+XG4gICAgPGlvbi1za2VsZXRvbi10ZXh0IFthbmltYXRlZF09XCJ0cnVlXCIgc3R5bGU9XCJ3aWR0aDogMTAwJVwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gIDwvaW9uLWl0ZW0+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -1,84 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, inject, Inject, Input, Optional, ViewChild } from '@angular/core';
2
- import { APP_USER_EVENT_SERVICE } from '../user-event.service';
3
- import { APP_SHOW_TOOLTIP } from '../../../shared/constants';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "../../../core/services/local-settings.service";
6
- import * as i2 from "@ionic/angular";
7
- import * as i3 from "@ngx-translate/core";
8
- import * as i4 from "@angular/material/tooltip";
9
- import * as i5 from "./user-event-notification.list";
10
- import * as i6 from "@angular/common";
11
- export class UserEventNotificationModal {
12
- cd;
13
- settings;
14
- modalController;
15
- userEventService;
16
- itemCount$;
17
- titleI18n = 'SOCIAL.USER_EVENT.NOTIFICATION.TITLE';
18
- sortBy = 'creationDate';
19
- sortDirection = 'desc';
20
- filter;
21
- enableInfiniteScroll = true;
22
- infiniteScrollThreshold;
23
- headerActions;
24
- footerActions;
25
- pageSize;
26
- mobile;
27
- debug = false;
28
- list;
29
- showTooltip = inject(APP_SHOW_TOOLTIP, { optional: true });
30
- constructor(cd, settings, modalController, userEventService) {
31
- this.cd = cd;
32
- this.settings = settings;
33
- this.modalController = modalController;
34
- this.userEventService = userEventService;
35
- this.mobile = settings.mobile;
36
- }
37
- ngOnInit() {
38
- this.itemCount$ = this.list.itemCount$;
39
- }
40
- close() {
41
- this.modalController.dismiss();
42
- this.userEventService?.resetCount();
43
- }
44
- markForCheck() {
45
- this.cd.markForCheck();
46
- }
47
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UserEventNotificationModal, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.LocalSettingsService }, { token: i2.ModalController }, { token: APP_USER_EVENT_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Component });
48
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: UserEventNotificationModal, selector: "app-user-event-notification-modal", inputs: { titleI18n: "titleI18n", sortBy: "sortBy", sortDirection: "sortDirection", filter: "filter", enableInfiniteScroll: "enableInfiniteScroll", infiniteScrollThreshold: "infiniteScrollThreshold", headerActions: "headerActions", footerActions: "footerActions", pageSize: "pageSize", mobile: "mobile", debug: "debug" }, viewQueries: [{ propertyName: "list", first: true, predicate: ["list"], descendants: true, static: true }], ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"secondary\">\n @if (mobile) {\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"close()\" visible-xs visible-sm>\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n </ion-buttons>\n }\n\n <ion-title>\n {{ titleI18n | translate }}\n @if (itemCount$ | async; as count) {\n <i>({{ count }})</i>\n }\n </ion-title>\n\n <ion-buttons slot=\"end\">\n @for (action of headerActions; track $index) {\n <ion-button\n (click)=\"list.executeAction($event, action, undefined)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n {{ action.name | translate }}\n </ion-button>\n }\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-not-padding\">\n <app-user-event-notification-list\n #list\n [showHeader]=\"false\"\n [showFooter]=\"false\"\n [sortBy]=\"sortBy\"\n [sortDirection]=\"sortDirection\"\n [filter]=\"filter\"\n [enableInfiniteScroll]=\"enableInfiniteScroll\"\n [infiniteScrollThreshold]=\"infiniteScrollThreshold\"\n [mobile]=\"mobile\"\n [debug]=\"debug\"\n (dismiss)=\"close()\"\n ></app-user-event-notification-list>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-row>\n <ion-col>\n @if (list.hasItem$ | async) {\n <ion-button fill=\"clear\" (click)=\"list.markAllAsRead($event)\">\n <ion-label translate>SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL</ion-label>\n </ion-button>\n }\n @for (action of footerActions; track $index) {\n <ion-button\n fill=\"clear\"\n (click)=\"list.executeAction($event, action, undefined)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n {{ action.name | translate }}\n </ion-button>\n }\n </ion-col>\n @if (!mobile) {\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\" hidden-xs hidden-sm>\n {{ 'COMMON.BTN_CLOSE' | translate }}\n </ion-button>\n </ion-col>\n }\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", dependencies: [{ kind: "component", type: i2.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: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.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: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i5.UserEventNotificationList, selector: "app-user-event-notification-list", inputs: ["titleI18n", "sortBy", "sortDirection", "filter", "enableInfiniteScroll", "infiniteScrollThreshold", "headerActions", "footerActions", "showHeader", "showFooter", "mobile", "debug", "pageSize"], outputs: ["readEvent", "readEvents", "dismiss"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
49
- }
50
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UserEventNotificationModal, decorators: [{
51
- type: Component,
52
- args: [{ selector: 'app-user-event-notification-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header>\n <ion-toolbar color=\"secondary\">\n @if (mobile) {\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"close()\" visible-xs visible-sm>\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n </ion-buttons>\n }\n\n <ion-title>\n {{ titleI18n | translate }}\n @if (itemCount$ | async; as count) {\n <i>({{ count }})</i>\n }\n </ion-title>\n\n <ion-buttons slot=\"end\">\n @for (action of headerActions; track $index) {\n <ion-button\n (click)=\"list.executeAction($event, action, undefined)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n {{ action.name | translate }}\n </ion-button>\n }\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-not-padding\">\n <app-user-event-notification-list\n #list\n [showHeader]=\"false\"\n [showFooter]=\"false\"\n [sortBy]=\"sortBy\"\n [sortDirection]=\"sortDirection\"\n [filter]=\"filter\"\n [enableInfiniteScroll]=\"enableInfiniteScroll\"\n [infiniteScrollThreshold]=\"infiniteScrollThreshold\"\n [mobile]=\"mobile\"\n [debug]=\"debug\"\n (dismiss)=\"close()\"\n ></app-user-event-notification-list>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-row>\n <ion-col>\n @if (list.hasItem$ | async) {\n <ion-button fill=\"clear\" (click)=\"list.markAllAsRead($event)\">\n <ion-label translate>SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL</ion-label>\n </ion-button>\n }\n @for (action of footerActions; track $index) {\n <ion-button\n fill=\"clear\"\n (click)=\"list.executeAction($event, action, undefined)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n {{ action.name | translate }}\n </ion-button>\n }\n </ion-col>\n @if (!mobile) {\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\" hidden-xs hidden-sm>\n {{ 'COMMON.BTN_CLOSE' | translate }}\n </ion-button>\n </ion-col>\n }\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n" }]
53
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.LocalSettingsService }, { type: i2.ModalController }, { type: undefined, decorators: [{
54
- type: Optional
55
- }, {
56
- type: Inject,
57
- args: [APP_USER_EVENT_SERVICE]
58
- }] }], propDecorators: { titleI18n: [{
59
- type: Input
60
- }], sortBy: [{
61
- type: Input
62
- }], sortDirection: [{
63
- type: Input
64
- }], filter: [{
65
- type: Input
66
- }], enableInfiniteScroll: [{
67
- type: Input
68
- }], infiniteScrollThreshold: [{
69
- type: Input
70
- }], headerActions: [{
71
- type: Input
72
- }], footerActions: [{
73
- type: Input
74
- }], pageSize: [{
75
- type: Input
76
- }], mobile: [{
77
- type: Input
78
- }], debug: [{
79
- type: Input
80
- }], list: [{
81
- type: ViewChild,
82
- args: ['list', { static: true }]
83
- }] } });
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1ldmVudC1ub3RpZmljYXRpb24ubW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NvY2lhbC91c2VyLWV2ZW50L25vdGlmaWNhdGlvbi91c2VyLWV2ZW50LW5vdGlmaWNhdGlvbi5tb2RhbC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc29jaWFsL3VzZXItZXZlbnQvbm90aWZpY2F0aW9uL3VzZXItZXZlbnQtbm90aWZpY2F0aW9uLm1vZGFsLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUsxSSxPQUFPLEVBQUUsc0JBQXNCLEVBQXFCLE1BQU0sdUJBQXVCLENBQUM7QUFJbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7O0FBWTdELE1BQU0sT0FBTywwQkFBMEI7SUFzQnpCO0lBQ0E7SUFDQTtJQUN5QztJQXRCM0MsVUFBVSxDQUFxQjtJQUVoQyxTQUFTLEdBQVcsc0NBQXNDLENBQUM7SUFDM0QsTUFBTSxHQUFHLGNBQWMsQ0FBQztJQUN4QixhQUFhLEdBQWtCLE1BQU0sQ0FBQztJQUN0QyxNQUFNLENBQWE7SUFDbkIsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0lBQzVCLHVCQUF1QixDQUFTO0lBQ2hDLGFBQWEsQ0FBcUI7SUFDbEMsYUFBYSxDQUFxQjtJQUNsQyxRQUFRLENBQVM7SUFDakIsTUFBTSxDQUFVO0lBQ2hCLEtBQUssR0FBRyxLQUFLLENBQUM7SUFFYyxJQUFJLENBQWtDO0lBRTNFLFdBQVcsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUUzRCxZQUNZLEVBQXFCLEVBQ3JCLFFBQThCLEVBQzlCLGVBQWdDLEVBQ1MsZ0JBQTZEO1FBSHRHLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQXNCO1FBQzlCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNTLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBNkM7UUFFaEgsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QyxDQUFDO0lBRVMsS0FBSztRQUNiLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFUyxZQUFZO1FBQ3BCLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekIsQ0FBQzt3R0F6Q1UsMEJBQTBCLHNIQXlCZixzQkFBc0I7NEZBekJqQywwQkFBMEIsdWZDckJ2QyxpOEVBNkVBOzs0RkR4RGEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLG1DQUFtQyxtQkFFNUIsdUJBQXVCLENBQUMsTUFBTTs7MEJBMkI1QyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHNCQUFzQjt5Q0FwQm5DLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFK0IsSUFBSTtzQkFBeEMsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGluamVjdCwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJVXNlckV2ZW50LCBJVXNlckV2ZW50QWN0aW9uLCBJVXNlckV2ZW50RmlsdGVyIH0gZnJvbSAnLi4vdXNlci1ldmVudC5tb2RlbCc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBVc2VyRXZlbnROb3RpZmljYXRpb25MaXN0LCBVc2VyRXZlbnROb3RpZmljYXRpb25MaXN0T3B0aW9ucyB9IGZyb20gJy4vdXNlci1ldmVudC1ub3RpZmljYXRpb24ubGlzdCc7XG5pbXBvcnQgeyBBUFBfVVNFUl9FVkVOVF9TRVJWSUNFLCBJVXNlckV2ZW50U2VydmljZSB9IGZyb20gJy4uL3VzZXItZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBMb2NhbFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFQUF9TSE9XX1RPT0xUSVAgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvY29uc3RhbnRzJztcblxuZXhwb3J0IGludGVyZmFjZSBVc2VyRXZlbnROb3RpZmljYXRpb25Nb2RhbE9wdGlvbnM8XG4gIEUgZXh0ZW5kcyBJVXNlckV2ZW50PGFueT4gPSBJVXNlckV2ZW50PGFueT4sXG4gIEYgZXh0ZW5kcyBJVXNlckV2ZW50RmlsdGVyPGFueT4gPSBJVXNlckV2ZW50RmlsdGVyPGFueT4sXG4+IGV4dGVuZHMgVXNlckV2ZW50Tm90aWZpY2F0aW9uTGlzdE9wdGlvbnM8RSwgRj4ge31cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXVzZXItZXZlbnQtbm90aWZpY2F0aW9uLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItZXZlbnQtbm90aWZpY2F0aW9uLm1vZGFsLmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVXNlckV2ZW50Tm90aWZpY2F0aW9uTW9kYWw8RSBleHRlbmRzIElVc2VyRXZlbnQ8YW55PiA9IElVc2VyRXZlbnQ8YW55PiwgRiBleHRlbmRzIElVc2VyRXZlbnRGaWx0ZXI8YW55PiA9IElVc2VyRXZlbnRGaWx0ZXI8YW55Pj5cbiAgaW1wbGVtZW50cyBVc2VyRXZlbnROb3RpZmljYXRpb25Nb2RhbE9wdGlvbnM8RSwgRj4sIE9uSW5pdFxue1xuICBwcm90ZWN0ZWQgaXRlbUNvdW50JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuXG4gIEBJbnB1dCgpIHRpdGxlSTE4bjogc3RyaW5nID0gJ1NPQ0lBTC5VU0VSX0VWRU5ULk5PVElGSUNBVElPTi5USVRMRSc7XG4gIEBJbnB1dCgpIHNvcnRCeSA9ICdjcmVhdGlvbkRhdGUnO1xuICBASW5wdXQoKSBzb3J0RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uID0gJ2Rlc2MnO1xuICBASW5wdXQoKSBmaWx0ZXI6IFBhcnRpYWw8Rj47XG4gIEBJbnB1dCgpIGVuYWJsZUluZmluaXRlU2Nyb2xsID0gdHJ1ZTtcbiAgQElucHV0KCkgaW5maW5pdGVTY3JvbGxUaHJlc2hvbGQ6IHN0cmluZztcbiAgQElucHV0KCkgaGVhZGVyQWN0aW9uczogSVVzZXJFdmVudEFjdGlvbltdO1xuICBASW5wdXQoKSBmb290ZXJBY3Rpb25zOiBJVXNlckV2ZW50QWN0aW9uW107XG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXI7XG4gIEBJbnB1dCgpIG1vYmlsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgZGVidWcgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdsaXN0JywgeyBzdGF0aWM6IHRydWUgfSkgbGlzdDogVXNlckV2ZW50Tm90aWZpY2F0aW9uTGlzdDxFLCBGPjtcblxuICBzaG93VG9vbHRpcCA9IGluamVjdChBUFBfU0hPV19UT09MVElQLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgbW9kYWxDb250cm9sbGVyOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfVVNFUl9FVkVOVF9TRVJWSUNFKSBwdWJsaWMgdXNlckV2ZW50U2VydmljZTogSVVzZXJFdmVudFNlcnZpY2U8RSwgSVVzZXJFdmVudEZpbHRlcjxhbnk+PlxuICApIHtcbiAgICB0aGlzLm1vYmlsZSA9IHNldHRpbmdzLm1vYmlsZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaXRlbUNvdW50JCA9IHRoaXMubGlzdC5pdGVtQ291bnQkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsb3NlKCkge1xuICAgIHRoaXMubW9kYWxDb250cm9sbGVyLmRpc21pc3MoKTtcbiAgICB0aGlzLnVzZXJFdmVudFNlcnZpY2U/LnJlc2V0Q291bnQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPGlvbi1oZWFkZXI+XG4gIDxpb24tdG9vbGJhciBjb2xvcj1cInNlY29uZGFyeVwiPlxuICAgIEBpZiAobW9iaWxlKSB7XG4gICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XG4gICAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJjbG9zZSgpXCIgdmlzaWJsZS14cyB2aXNpYmxlLXNtPlxuICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImFycm93LWJhY2tcIj48L2lvbi1pY29uPlxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2lvbi1idXR0b25zPlxuICAgIH1cblxuICAgIDxpb24tdGl0bGU+XG4gICAgICB7eyB0aXRsZUkxOG4gfCB0cmFuc2xhdGUgfX1cbiAgICAgIEBpZiAoaXRlbUNvdW50JCB8IGFzeW5jOyBhcyBjb3VudCkge1xuICAgICAgICA8aT4oe3sgY291bnQgfX0pPC9pPlxuICAgICAgfVxuICAgIDwvaW9uLXRpdGxlPlxuXG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgIEBmb3IgKGFjdGlvbiBvZiBoZWFkZXJBY3Rpb25zOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAoY2xpY2spPVwibGlzdC5leGVjdXRlQWN0aW9uKCRldmVudCwgYWN0aW9uLCB1bmRlZmluZWQpXCJcbiAgICAgICAgICBbdGl0bGVdPVwiIXNob3dUb29sdGlwID8gKGFjdGlvbi50aXRsZSB8fCBhY3Rpb24ubmFtZSB8IHRyYW5zbGF0ZSkgOiAnJ1wiXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwic2hvd1Rvb2x0aXAgPyAoYWN0aW9uLnRpdGxlIHx8IGFjdGlvbi5uYW1lIHwgdHJhbnNsYXRlKSA6ICcnXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGFjdGlvbi5uYW1lIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIH1cbiAgICA8L2lvbi1idXR0b25zPlxuICA8L2lvbi10b29sYmFyPlxuPC9pb24taGVhZGVyPlxuXG48aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tbm90LXBhZGRpbmdcIj5cbiAgPGFwcC11c2VyLWV2ZW50LW5vdGlmaWNhdGlvbi1saXN0XG4gICAgI2xpc3RcbiAgICBbc2hvd0hlYWRlcl09XCJmYWxzZVwiXG4gICAgW3Nob3dGb290ZXJdPVwiZmFsc2VcIlxuICAgIFtzb3J0QnldPVwic29ydEJ5XCJcbiAgICBbc29ydERpcmVjdGlvbl09XCJzb3J0RGlyZWN0aW9uXCJcbiAgICBbZmlsdGVyXT1cImZpbHRlclwiXG4gICAgW2VuYWJsZUluZmluaXRlU2Nyb2xsXT1cImVuYWJsZUluZmluaXRlU2Nyb2xsXCJcbiAgICBbaW5maW5pdGVTY3JvbGxUaHJlc2hvbGRdPVwiaW5maW5pdGVTY3JvbGxUaHJlc2hvbGRcIlxuICAgIFttb2JpbGVdPVwibW9iaWxlXCJcbiAgICBbZGVidWddPVwiZGVidWdcIlxuICAgIChkaXNtaXNzKT1cImNsb3NlKClcIlxuICA+PC9hcHAtdXNlci1ldmVudC1ub3RpZmljYXRpb24tbGlzdD5cbjwvaW9uLWNvbnRlbnQ+XG5cbjxpb24tZm9vdGVyPlxuICA8aW9uLXRvb2xiYXI+XG4gICAgPGlvbi1yb3c+XG4gICAgICA8aW9uLWNvbD5cbiAgICAgICAgQGlmIChsaXN0Lmhhc0l0ZW0kIHwgYXN5bmMpIHtcbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiAoY2xpY2spPVwibGlzdC5tYXJrQWxsQXNSZWFkKCRldmVudClcIj5cbiAgICAgICAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPlNPQ0lBTC5VU0VSX0VWRU5ULk5PVElGSUNBVElPTi5SRUFEX0FMTDwvaW9uLWxhYmVsPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgICBAZm9yIChhY3Rpb24gb2YgZm9vdGVyQWN0aW9uczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgICAgICAoY2xpY2spPVwibGlzdC5leGVjdXRlQWN0aW9uKCRldmVudCwgYWN0aW9uLCB1bmRlZmluZWQpXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCIhc2hvd1Rvb2x0aXAgPyAoYWN0aW9uLnRpdGxlIHx8IGFjdGlvbi5uYW1lIHwgdHJhbnNsYXRlKSA6ICcnXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cInNob3dUb29sdGlwID8gKGFjdGlvbi50aXRsZSB8fCBhY3Rpb24ubmFtZSB8IHRyYW5zbGF0ZSkgOiAnJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgYWN0aW9uLm5hbWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIH1cbiAgICAgIDwvaW9uLWNvbD5cbiAgICAgIEBpZiAoIW1vYmlsZSkge1xuICAgICAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJzb2xpZFwiIGNvbG9yPVwidGVydGlhcnlcIiAoY2xpY2spPVwiY2xvc2UoKVwiIGhpZGRlbi14cyBoaWRkZW4tc20+XG4gICAgICAgICAgICB7eyAnQ09NTU9OLkJUTl9DTE9TRScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIH1cbiAgICA8L2lvbi1yb3c+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1mb290ZXI+XG4iXX0=