@sumaris-net/ngx-components 18.23.63 → 21.0.0-rc1

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 +3 -5
  3. package/fesm2022/sumaris-net.ngx-components.mjs +2382 -2150
  4. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  5. package/package.json +15 -15
  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 +14132 -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 -347
  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 -328
  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 -212
  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 -825
  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 -850
  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 -219
  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 -304
  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 -183
  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 -85
  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 -131
  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 -296
  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 -69
  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 -67
  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,394 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Inject, Input } from '@angular/core';
2
- import { firstValueFrom, from, Subscription } from 'rxjs';
3
- import { debounceTime, distinctUntilChanged, filter, map, switchMap } from 'rxjs/operators';
4
- import { CORE_CONFIG_OPTIONS } from '../services/config/core.config';
5
- import { VersionUtils } from '../../shared/version/versions';
6
- import { slideUpDownAnimation } from '../../shared/material/material.animations';
7
- import { isNilOrBlank, isNotEmptyArray, isNotNil, isNotNilOrBlank, sleep } from '../../shared/functions';
8
- import { ENVIRONMENT } from '../../../environments/environment.class';
9
- import { Toasts } from '../../shared/toast/toasts';
10
- import { Peer } from '../services/model/peer.model';
11
- import { MimeTypes } from '../../shared/file/file.utils';
12
- import { UriUtils } from '../../shared/file/uri.utils';
13
- import { isAndroid, isIOS } from '../../shared/platforms';
14
- import * as i0 from "@angular/core";
15
- import * as i1 from "../services/config.service";
16
- import * as i2 from "@ionic/angular";
17
- import * as i3 from "@ngx-translate/core";
18
- import * as i4 from "../services/platform.service";
19
- import * as i5 from "../services/network.service";
20
- import * as i6 from "@angular/common";
21
- import * as i7 from "../../../environments/environment.class";
22
- export class AppInstallUpgradeCard {
23
- configService;
24
- toastController;
25
- alertController;
26
- translate;
27
- cd;
28
- platform;
29
- network;
30
- environment;
31
- _subscription = new Subscription();
32
- loading = true;
33
- hasDownloader = false;
34
- downloading = false;
35
- waitingNetwork = false;
36
- installLinks;
37
- upgradeLinks;
38
- offline;
39
- isLogin;
40
- showUpgradeWarning = true;
41
- showOfflineWarning = true;
42
- showInstallButton = false;
43
- debug;
44
- constructor(configService, toastController, alertController, translate, cd, platform, network, environment) {
45
- this.configService = configService;
46
- this.toastController = toastController;
47
- this.alertController = alertController;
48
- this.translate = translate;
49
- this.cd = cd;
50
- this.platform = platform;
51
- this.network = network;
52
- this.environment = environment;
53
- this.debug = !environment.production;
54
- }
55
- ngOnInit() {
56
- this.offline = this.network.offline;
57
- // Listen pod config
58
- this._subscription.add(from(this.network.ready())
59
- .pipe(debounceTime(1000), switchMap(() => this.configService.config), filter(isNotNil))
60
- .subscribe((config) => this.checkNeedInstallOrUpdate(config)));
61
- // Listen network changes
62
- this._subscription.add(this.network.onNetworkStatusChanges
63
- .pipe(
64
- //debounceTime(450),
65
- //tap(() => this.waitingNetwork = false),
66
- map((connectionType) => connectionType === 'none'), distinctUntilChanged())
67
- .subscribe((offline) => {
68
- if (this.offline !== offline) {
69
- this.offline = offline;
70
- this.markForCheck();
71
- }
72
- }));
73
- }
74
- ngOnDestroy() {
75
- this._subscription.unsubscribe();
76
- this._subscription = null;
77
- this.installLinks = null;
78
- this.upgradeLinks = null;
79
- }
80
- async download(event, link) {
81
- if (!link || !link.url) {
82
- console.error("[install-upgrade-card] Missing required argument 'link.url'");
83
- return; // Skip
84
- }
85
- // Mark link as downloading
86
- link.downloading = true;
87
- this.markForCheck();
88
- this.listenDownloadJob(link.url, this.platform.download({
89
- uri: link.url,
90
- title: link.title,
91
- filename: link.filename,
92
- mimeType: link.mimeType,
93
- }))
94
- .then((location) => {
95
- if (this.platform.canOpenFile)
96
- link.location = location;
97
- link.downloading = false;
98
- })
99
- .catch(() => (link.downloading = false))
100
- .then(() => this.markForCheck());
101
- }
102
- async openFile(event, link) {
103
- if (!link || !link.location || !link.mimeType) {
104
- console.error("[install-upgrade-card] Missing required argument 'link.location' or 'link.mimeType'");
105
- return; // Skip
106
- }
107
- try {
108
- await this.platform.open(link.location);
109
- }
110
- catch (err) {
111
- console.error('[install-upgrade-card] Cannot open file: ' + ((err && err.message) || err), err);
112
- }
113
- }
114
- async tryOnline() {
115
- this.waitingNetwork = true;
116
- this.markForCheck();
117
- try {
118
- await this.network.tryOnline({
119
- showLoadingToast: false,
120
- showOnlineToast: true,
121
- showOfflineToast: false,
122
- });
123
- }
124
- finally {
125
- this.waitingNetwork = false;
126
- this.markForCheck();
127
- }
128
- }
129
- getPlatformName(platform) {
130
- switch (platform) {
131
- case 'android':
132
- return 'Android';
133
- case 'ios':
134
- return 'iOS';
135
- case 'electron':
136
- return 'desktop';
137
- default:
138
- return '';
139
- }
140
- }
141
- asLink(value) {
142
- return value;
143
- }
144
- /* -- private method -- */
145
- async checkNeedInstallOrUpdate(config) {
146
- if (!config)
147
- return; // Skip
148
- console.info('[install-upgrade-card] Check if need to install or upgrade...');
149
- this.hasDownloader = this.platform.canDownload;
150
- try {
151
- const links = this.getLinks(config);
152
- // Check for upgrade
153
- this.upgradeLinks = this.getCompatibleUpgradeLinks(links, config);
154
- if (isNotEmptyArray(this.upgradeLinks)) {
155
- console.info(`[install-upgrade-card] Find upgrade links: ${this.upgradeLinks.map((l) => l.url).join(',')}`);
156
- this.installLinks = null;
157
- this.listenDownloadJobs();
158
- }
159
- else {
160
- // Check for install links
161
- this.installLinks = this.getCompatibleInstallLinks(links);
162
- if (isNotEmptyArray(this.installLinks)) {
163
- console.info(`[install-upgrade-card] Find installation links ${this.installLinks.map((l) => l.url).join(',')}`);
164
- await sleep(1000); // Add a delay, for animation
165
- }
166
- else {
167
- console.info(`[install-upgrade-card] No installation or upgrade links to display.`);
168
- }
169
- }
170
- }
171
- finally {
172
- this.loading = false;
173
- this.markForCheck();
174
- }
175
- }
176
- getCompatibleInstallLinks(installLinks) {
177
- // Already an native App: not need to install
178
- if (this.platform.isApp())
179
- return undefined;
180
- // If mobile web: return all compatible, depending on the platform
181
- if (this.platform.isMobileWeb()) {
182
- return installLinks.filter((link) => !link.platform ||
183
- this.platform.is(link.platform) ||
184
- (link.platform === 'android' && isAndroid(window)) ||
185
- (link.platform === 'ios' && isIOS(window)));
186
- }
187
- return undefined;
188
- }
189
- getCompatibleUpgradeLinks(installLinks, config) {
190
- const appVersion = this.environment.version;
191
- const appMinVersionFromPod = config.getProperty(CORE_CONFIG_OPTIONS.APP_MIN_VERSION);
192
- if (!appVersion) {
193
- console.error("Missing value for 'environment.version': cannot check app compatibility!");
194
- return undefined;
195
- }
196
- const needUpgrade = appMinVersionFromPod && !VersionUtils.isCompatible(appMinVersionFromPod, appVersion);
197
- if (!needUpgrade)
198
- return undefined;
199
- // Filter on platform, if mobile App
200
- const upgradeLinks = (installLinks || []).filter((link) => link.platform && this.platform.is(link.platform));
201
- // Use min version as default version
202
- upgradeLinks.forEach((link) => {
203
- link.version = link.version || appMinVersionFromPod;
204
- });
205
- return isNotEmptyArray(upgradeLinks) ? upgradeLinks : undefined;
206
- }
207
- getLinks(config) {
208
- const result = [];
209
- // Compute App name
210
- const minVersion = config.getProperty(CORE_CONFIG_OPTIONS.APP_MIN_VERSION);
211
- const defaultAppName = this.environment.defaultAppName || 'SUMARiS';
212
- // Android
213
- {
214
- // Get URL (from config, or environment)
215
- let url = config.getProperty(CORE_CONFIG_OPTIONS.ANDROID_INSTALL_URL);
216
- if (isNilOrBlank(url))
217
- url = this.environment.defaultAndroidInstallUrl || null;
218
- // Resolve relative URL
219
- const peer = this.network.peer;
220
- if (peer && url && (url.startsWith('./') || url.startsWith('/'))) {
221
- url = Peer.path(peer, url);
222
- }
223
- // Compute App name (use config if URL is specific)
224
- const name = isNotNilOrBlank(url) ? config.label : defaultAppName;
225
- if (url) {
226
- let title;
227
- let mimeType;
228
- // Get file name
229
- let filename = UriUtils.getFilename(url);
230
- let version = minVersion || 'latest';
231
- // OK, this is a downloadable APK file (e.g. NOT a link to a playstore)
232
- if (filename?.toLowerCase().endsWith('.apk')) {
233
- // Define mime type
234
- mimeType = MimeTypes.ANDROID_APK;
235
- // Get the file version (if any)
236
- const versionMatches = /-v([1-9][0-9]*\.[0-9]+\.(:?(:?alpha|beta|rc)?[0-9]*))/i.exec(filename);
237
- version = (versionMatches && versionMatches[1]) || version;
238
- // Compute a new file name, with the version
239
- if (isNotNilOrBlank(name) && version !== 'latest') {
240
- filename = `${name}-v${version}.apk`.toLowerCase();
241
- title = `${name} v${version}`;
242
- }
243
- // Replace 'latest' with the app version, if present in the filename
244
- else if (filename.indexOf('latest') !== -1 && version !== 'latest') {
245
- filename = filename.replace('latest', version);
246
- }
247
- }
248
- result.push({ name, url, platform: 'android', version, filename, title, mimeType });
249
- }
250
- }
251
- // iOS
252
- {
253
- // Get URL (from config, or environment)
254
- let url = config.getProperty(CORE_CONFIG_OPTIONS.IOS_INSTALL_URL);
255
- if (isNilOrBlank(url))
256
- url = this.environment.defaultIOSInstallUrl || null;
257
- // Resolve relative URL
258
- const peer = this.network.peer;
259
- if (peer && url && (url.startsWith('./') || url.startsWith('/'))) {
260
- url = Peer.path(peer, url);
261
- }
262
- // Compute App name (use config if URL is specific)
263
- const name = isNotNilOrBlank(url) ? config.label : defaultAppName;
264
- if (url) {
265
- const version = minVersion || 'latest';
266
- const title = `${name} v${version}`;
267
- result.push({ name, url, platform: 'ios', version, title });
268
- }
269
- }
270
- // Desktop (Electron)
271
- {
272
- // Get URL (from config, or environment)
273
- let url = config.getProperty(CORE_CONFIG_OPTIONS.DESKTOP_INSTALL_URL);
274
- if (isNilOrBlank(url))
275
- url = this.environment.defaultDesktopInstallUrl || null;
276
- // Resolve relative URL
277
- const peer = this.network.peer;
278
- if (peer && url && (url.startsWith('./') || url.startsWith('/'))) {
279
- url = Peer.path(peer, url);
280
- }
281
- // Compute App name (use config if URL is specific)
282
- const name = isNotNilOrBlank(url) ? config.label : defaultAppName;
283
- if (url) {
284
- const version = minVersion || 'latest';
285
- const title = `${name} v${version}`;
286
- result.push({ name, url, platform: 'electron', version, title });
287
- }
288
- }
289
- return result;
290
- }
291
- listenDownloadJobs() {
292
- // Listening downloading promise, if exists
293
- (this.upgradeLinks || []).forEach((link) => {
294
- const job = this.platform.getDownloadingJob(link.url);
295
- if (job) {
296
- link.downloading = true;
297
- this.listenDownloadJob(link.url, job)
298
- .then((location) => {
299
- link.location = location;
300
- link.downloading = false;
301
- })
302
- .catch(() => (link.downloading = false))
303
- .then(() => this.markForCheck());
304
- }
305
- });
306
- }
307
- async listenDownloadJob(url, job) {
308
- if (!url || !job)
309
- return; // Skip
310
- try {
311
- // Mark as downloading
312
- if (!this.downloading) {
313
- console.info(`[install-upgrade-card] Asking platform to download '${url}'...`);
314
- this.downloading = true;
315
- this.markForCheck();
316
- }
317
- else {
318
- console.info(`[install-upgrade-card] Platform is already downloading!`);
319
- }
320
- const location = await firstValueFrom(job);
321
- if (location) {
322
- console.info('[install-upgrade-card] File downloaded at: ' + location);
323
- this.showDownloadCompleteDialog();
324
- }
325
- return location;
326
- }
327
- catch (err) {
328
- // Failed: display a toast
329
- console.error('[install-upgrade-card] Download failed: ' + ((err && err.message) || err));
330
- this.showDownloadFailedToast(err);
331
- throw err;
332
- }
333
- finally {
334
- this.downloading = false;
335
- this.markForCheck();
336
- }
337
- }
338
- showDownloadFailedToast(err) {
339
- return this.showToast({
340
- message: 'ERROR.DOWNLOAD_FAILED',
341
- messageParams: { error: err },
342
- type: 'error',
343
- showCloseButton: true,
344
- });
345
- }
346
- async showDownloadCompleteDialog() {
347
- if (!this._subscription)
348
- return; // Skip if component has been destroyed
349
- const translations = await this.translate.instant(['INFO.ALERT_HEADER', 'INFO.UPDATE_APP_DOWNLOADED', 'COMMON.BTN_CLOSE']);
350
- const alert = await this.alertController.create({
351
- header: translations['INFO.ALERT_HEADER'],
352
- message: translations['INFO.UPDATE_APP_DOWNLOADED'],
353
- buttons: [
354
- {
355
- text: translations['COMMON.BTN_CLOSE'],
356
- role: 'cancel',
357
- cssClass: 'secondary',
358
- },
359
- ],
360
- });
361
- await alert.present();
362
- await alert.onDidDismiss();
363
- }
364
- markForCheck() {
365
- if (!this._subscription)
366
- return; // Skip if destroyed
367
- this.cd.markForCheck();
368
- }
369
- async showToast(opts) {
370
- if (!this._subscription)
371
- return; // Skip if component has been destroyed
372
- await Toasts.show(this.toastController, this.translate, opts);
373
- }
374
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppInstallUpgradeCard, deps: [{ token: i1.ConfigService }, { token: i2.ToastController }, { token: i2.AlertController }, { token: i3.TranslateService }, { token: i0.ChangeDetectorRef }, { token: i4.PlatformService }, { token: i5.NetworkService }, { token: ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Component });
375
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AppInstallUpgradeCard, selector: "app-install-upgrade-card", inputs: { isLogin: "isLogin", showUpgradeWarning: "showUpgradeWarning", showOfflineWarning: "showOfflineWarning", showInstallButton: "showInstallButton", debug: "debug" }, ngImport: i0, template: "<!-- Offline mode card-->\n<ion-card\n *ngIf=\"showOfflineWarning && ((!loading && offline) || waitingNetwork)\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n @if (waitingNetwork) {\n <ion-text class=\"ion-text-wrap\" [innerHTML]=\"'NETWORK.INFO.RETRY_TO_CONNECT' | translate\"></ion-text>\n } @else {\n <ion-text class=\"ion-text-wrap\">\n <h4>\n @if (isLogin) {\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE_OR_UNAUTHORIZED' | translate\"></b>\n } @else {\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE' | translate\"></b>\n }\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.OFFLINE_HELP' | translate\"></small>\n </h3>\n </ion-text>\n }\n </ion-col>\n <ion-col size=\"auto\" class=\"ion-align-items-end\">\n <!-- Retry button -->\n @if (waitingNetwork) {\n <ion-spinner color=\"light\"></ion-spinner>\n } @else {\n <ion-button color=\"tertiary\" class=\"ion-float-end\" (click)=\"tryOnline()\">\n <span translate>NETWORK.BTN_CHECK_ALIVE</span>\n </ion-button>\n }\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Upgrade links -->\n<ion-card\n *ngIf=\"showUpgradeWarning && !loading && !offline && upgradeLinks\"\n color=\"accent\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of upgradeLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3>\n @if (link.version) {\n <span [innerHTML]=\"'INFO.UPDATE_APP_TO_VERSION' | translate: link\"></span>\n } @else {\n <span [innerHTML]=\"'INFO.UPDATE_APP' | translate: link\"></span>\n }\n </h3>\n <h4>\n @if (last) {\n <small [innerHTML]=\"'INFO.UPDATE_APP_HELP' | translate\"></small>\n }\n </h4>\n </ion-text>\n </ion-col>\n\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Install links -->\n<ion-card\n *ngIf=\"showInstallButton && !loading && !offline && installLinks\"\n color=\"secondary\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of installLinks; last as last\">\n <ion-col size=\"12\" size-sm=\"8\">\n <ion-text class=\"ion-text-wrap\">\n <h3\n [innerHTML]=\"\n 'INFO.DOWNLOAD_APP_TITLE' | translate: { name: link.name, platform: getPlatformName(link.platform) }\n \"\n ></h3>\n <h4><small *ngIf=\"last\" [innerHTML]=\"'INFO.DOWNLOAD_APP_HELP' | translate\"></small></h4>\n </ion-text>\n </ion-col>\n <ion-col size=\"12\" size-sm=\"4\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Display a download button, depending on the link URL, and the device platform -->\n<ng-template #downloadButton let-link>\n @if (link.filename) {\n @if (hasDownloader) {\n <!-- Download using platform -->\n @if (!link.location) {\n <ion-button\n (click)=\"download($event, asLink(link))\"\n [disabled]=\"link.downloading\"\n color=\"tertiary\"\n class=\"ion-float-end\"\n >\n <ion-icon slot=\"start\" *ngIf=\"!link.downloading\" name=\"download\"></ion-icon>\n <ion-spinner slot=\"start\" class=\"ion-no-padding\" *ngIf=\"link.downloading\"></ion-spinner>\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n } @else {\n <!-- Open APK button -->\n <ion-button (click)=\"openFile($event, link)\" color=\"tertiary\" class=\"ion-float-end\">\n <ion-label translate>COMMON.BTN_INSTALL</ion-label>\n </ion-button>\n }\n } @else {\n <!-- Web download button -->\n <ion-button [download]=\"link.filename\" [href]=\"link.url\" color=\"tertiary\" class=\"ion-float-end\">\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n }\n } @else {\n <!-- Web redirect button -->\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n @if (debug) {\n <ion-note>{{ link.url }}</ion-note>\n }\n }\n</ng-template>\n", styles: ["ion-text small{font-size:85%}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { 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.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { 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.IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], animations: [slideUpDownAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
376
- }
377
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppInstallUpgradeCard, decorators: [{
378
- type: Component,
379
- args: [{ selector: 'app-install-upgrade-card', changeDetection: ChangeDetectionStrategy.OnPush, animations: [slideUpDownAnimation], template: "<!-- Offline mode card-->\n<ion-card\n *ngIf=\"showOfflineWarning && ((!loading && offline) || waitingNetwork)\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n @if (waitingNetwork) {\n <ion-text class=\"ion-text-wrap\" [innerHTML]=\"'NETWORK.INFO.RETRY_TO_CONNECT' | translate\"></ion-text>\n } @else {\n <ion-text class=\"ion-text-wrap\">\n <h4>\n @if (isLogin) {\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE_OR_UNAUTHORIZED' | translate\"></b>\n } @else {\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE' | translate\"></b>\n }\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.OFFLINE_HELP' | translate\"></small>\n </h3>\n </ion-text>\n }\n </ion-col>\n <ion-col size=\"auto\" class=\"ion-align-items-end\">\n <!-- Retry button -->\n @if (waitingNetwork) {\n <ion-spinner color=\"light\"></ion-spinner>\n } @else {\n <ion-button color=\"tertiary\" class=\"ion-float-end\" (click)=\"tryOnline()\">\n <span translate>NETWORK.BTN_CHECK_ALIVE</span>\n </ion-button>\n }\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Upgrade links -->\n<ion-card\n *ngIf=\"showUpgradeWarning && !loading && !offline && upgradeLinks\"\n color=\"accent\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of upgradeLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3>\n @if (link.version) {\n <span [innerHTML]=\"'INFO.UPDATE_APP_TO_VERSION' | translate: link\"></span>\n } @else {\n <span [innerHTML]=\"'INFO.UPDATE_APP' | translate: link\"></span>\n }\n </h3>\n <h4>\n @if (last) {\n <small [innerHTML]=\"'INFO.UPDATE_APP_HELP' | translate\"></small>\n }\n </h4>\n </ion-text>\n </ion-col>\n\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Install links -->\n<ion-card\n *ngIf=\"showInstallButton && !loading && !offline && installLinks\"\n color=\"secondary\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of installLinks; last as last\">\n <ion-col size=\"12\" size-sm=\"8\">\n <ion-text class=\"ion-text-wrap\">\n <h3\n [innerHTML]=\"\n 'INFO.DOWNLOAD_APP_TITLE' | translate: { name: link.name, platform: getPlatformName(link.platform) }\n \"\n ></h3>\n <h4><small *ngIf=\"last\" [innerHTML]=\"'INFO.DOWNLOAD_APP_HELP' | translate\"></small></h4>\n </ion-text>\n </ion-col>\n <ion-col size=\"12\" size-sm=\"4\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Display a download button, depending on the link URL, and the device platform -->\n<ng-template #downloadButton let-link>\n @if (link.filename) {\n @if (hasDownloader) {\n <!-- Download using platform -->\n @if (!link.location) {\n <ion-button\n (click)=\"download($event, asLink(link))\"\n [disabled]=\"link.downloading\"\n color=\"tertiary\"\n class=\"ion-float-end\"\n >\n <ion-icon slot=\"start\" *ngIf=\"!link.downloading\" name=\"download\"></ion-icon>\n <ion-spinner slot=\"start\" class=\"ion-no-padding\" *ngIf=\"link.downloading\"></ion-spinner>\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n } @else {\n <!-- Open APK button -->\n <ion-button (click)=\"openFile($event, link)\" color=\"tertiary\" class=\"ion-float-end\">\n <ion-label translate>COMMON.BTN_INSTALL</ion-label>\n </ion-button>\n }\n } @else {\n <!-- Web download button -->\n <ion-button [download]=\"link.filename\" [href]=\"link.url\" color=\"tertiary\" class=\"ion-float-end\">\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n }\n } @else {\n <!-- Web redirect button -->\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n @if (debug) {\n <ion-note>{{ link.url }}</ion-note>\n }\n }\n</ng-template>\n", styles: ["ion-text small{font-size:85%}\n"] }]
380
- }], ctorParameters: () => [{ type: i1.ConfigService }, { type: i2.ToastController }, { type: i2.AlertController }, { type: i3.TranslateService }, { type: i0.ChangeDetectorRef }, { type: i4.PlatformService }, { type: i5.NetworkService }, { type: i7.Environment, decorators: [{
381
- type: Inject,
382
- args: [ENVIRONMENT]
383
- }] }], propDecorators: { isLogin: [{
384
- type: Input
385
- }], showUpgradeWarning: [{
386
- type: Input
387
- }], showOfflineWarning: [{
388
- type: Input
389
- }], showInstallButton: [{
390
- type: Input
391
- }], debug: [{
392
- type: Input
393
- }] } });
394
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2luc3RhbGwvaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2luc3RhbGwvaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFeEgsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQWMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSXRFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RyxPQUFPLEVBQWUsV0FBVyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDbkYsT0FBTyxFQUFvQixNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVyRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw2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QUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU8sQ0FBQyx1Q0FBdUM7UUFDeEUsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRSxDQUFDO3dHQW5aVSxxQkFBcUIsMk9BeUJ0QixXQUFXOzRGQXpCVixxQkFBcUIsNE9DeENsQyxzaktBZ0pBLDJyRUQxR2MsQ0FBQyxvQkFBb0IsQ0FBQzs7NEZBRXZCLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsQ0FBQyxvQkFBb0IsQ0FBQzs7MEJBMkIvQixNQUFNOzJCQUFDLFdBQVc7eUNBZFosT0FBTztzQkFBZixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWxlcnRDb250cm9sbGVyLCBNb2RhbENvbnRyb2xsZXIsIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBmcm9tLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFBsYXRmb3JtU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE5ldHdvcmtTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7IENPUkVfQ09ORklHX09QVElPTlMgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcvY29yZS5jb25maWcnO1xuaW1wb3J0IHsgVmVyc2lvblV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3ZlcnNpb24vdmVyc2lvbnMnO1xuaW1wb3J0IHsgc2xpZGVVcERvd25BbmltYXRpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvbWF0ZXJpYWwvbWF0ZXJpYWwuYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBpc05pbE9yQmxhbmssIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgc2xlZXAgfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IEVudmlyb25tZW50LCBFTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQgeyBTaG93VG9hc3RPcHRpb25zLCBUb2FzdHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdG9hc3QvdG9hc3RzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFBlZXIgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7IE1pbWVUeXBlcyB9IGZyb20gJy4uLy4uL3NoYXJlZC9maWxlL2ZpbGUudXRpbHMnO1xuaW1wb3J0IHsgVXJpVXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvZmlsZS91cmkudXRpbHMnO1xuaW1wb3J0IHsgaXNBbmRyb2lkLCBpc0lPUyB9IGZyb20gJy4uLy4uL3NoYXJlZC9wbGF0Zm9ybXMnO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSW5zdGFsbEFwcExpbmsge1xuICBuYW1lOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBwbGF0Zm9ybT86ICdhbmRyb2lkJyB8ICdpb3MnIHwgJ2VsZWN0cm9uJztcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgZmlsZW5hbWU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgbWltZVR5cGU/OiBzdHJpbmc7XG4gIGRvd25sb2FkaW5nPzogYm9vbGVhbjtcbiAgbG9jYXRpb24/OiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pbnN0YWxsLXVwZ3JhZGUtY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbnN0YWxsLXVwZ3JhZGUtY2FyZC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgYW5pbWF0aW9uczogW3NsaWRlVXBEb3duQW5pbWF0aW9uXSxcbn0pXG5leHBvcnQgY2xhc3MgQXBwSW5zdGFsbFVwZ3JhZGVDYXJkIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgbG9hZGluZyA9IHRydWU7XG4gIGhhc0Rvd25sb2FkZXIgPSBmYWxzZTtcbiAgZG93bmxvYWRpbmcgPSBmYWxzZTtcbiAgd2FpdGluZ05ldHdvcmsgPSBmYWxzZTtcbiAgaW5zdGFsbExpbmtzOiBJbnN0YWxsQXBwTGlua1tdO1xuICB1cGdyYWRlTGlua3M6IEluc3RhbGxBcHBMaW5rW107XG4gIG9mZmxpbmU6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgaXNMb2dpbjogYm9vbGVhbjtcbiAgQElucHV0KCkgc2hvd1VwZ3JhZGVXYXJuaW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd09mZmxpbmVXYXJuaW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0luc3RhbGxCdXR0b24gPSBmYWxzZTtcbiAgQElucHV0KCkgZGVidWc6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBhbGVydENvbnRyb2xsZXI6IEFsZXJ0Q29udHJvbGxlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgcGxhdGZvcm06IFBsYXRmb3JtU2VydmljZSxcbiAgICBwdWJsaWMgbmV0d29yazogTmV0d29ya1NlcnZpY2UsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50OiBFbnZpcm9ubWVudFxuICApIHtcbiAgICB0aGlzLmRlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm9mZmxpbmUgPSB0aGlzLm5ldHdvcmsub2ZmbGluZTtcblxuICAgIC8vIExpc3RlbiBwb2QgY29uZmlnXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIGZyb20odGhpcy5uZXR3b3JrLnJlYWR5KCkpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDAwKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZyksXG4gICAgICAgICAgZmlsdGVyKGlzTm90TmlsKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGNvbmZpZykgPT4gdGhpcy5jaGVja05lZWRJbnN0YWxsT3JVcGRhdGUoY29uZmlnKSlcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIG5ldHdvcmsgY2hhbmdlc1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLm5ldHdvcmsub25OZXR3b3JrU3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICAvL2RlYm91bmNlVGltZSg0NTApLFxuICAgICAgICAgIC8vdGFwKCgpID0+IHRoaXMud2FpdGluZ05ldHdvcmsgPSBmYWxzZSksXG4gICAgICAgICAgbWFwKChjb25uZWN0aW9uVHlwZSkgPT4gY29ubmVjdGlvblR5cGUgPT09ICdub25lJyksXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKG9mZmxpbmUpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5vZmZsaW5lICE9PSBvZmZsaW5lKSB7XG4gICAgICAgICAgICB0aGlzLm9mZmxpbmUgPSBvZmZsaW5lO1xuICAgICAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgdGhpcy5pbnN0YWxsTGlua3MgPSBudWxsO1xuICAgIHRoaXMudXBncmFkZUxpbmtzID0gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGRvd25sb2FkKGV2ZW50OiBFdmVudCwgbGluazogSW5zdGFsbEFwcExpbmspIHtcbiAgICBpZiAoIWxpbmsgfHwgIWxpbmsudXJsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW2luc3RhbGwtdXBncmFkZS1jYXJkXSBNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50ICdsaW5rLnVybCdcIik7XG4gICAgICByZXR1cm47IC8vIFNraXBcbiAgICB9XG5cbiAgICAvLyBNYXJrIGxpbmsgYXMgZG93bmxvYWRpbmdcbiAgICBsaW5rLmRvd25sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgdGhpcy5saXN0ZW5Eb3dubG9hZEpvYihcbiAgICAgIGxpbmsudXJsLFxuICAgICAgdGhpcy5wbGF0Zm9ybS5kb3dubG9hZCh7XG4gICAgICAgIHVyaTogbGluay51cmwsXG4gICAgICAgIHRpdGxlOiBsaW5rLnRpdGxlLFxuICAgICAgICBmaWxlbmFtZTogbGluay5maWxlbmFtZSxcbiAgICAgICAgbWltZVR5cGU6IGxpbmsubWltZVR5cGUsXG4gICAgICB9KVxuICAgIClcbiAgICAgIC50aGVuKChsb2NhdGlvbikgPT4ge1xuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5jYW5PcGVuRmlsZSkgbGluay5sb2NhdGlvbiA9IGxvY2F0aW9uO1xuICAgICAgICBsaW5rLmRvd25sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IChsaW5rLmRvd25sb2FkaW5nID0gZmFsc2UpKVxuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5tYXJrRm9yQ2hlY2soKSk7XG4gIH1cblxuICBhc3luYyBvcGVuRmlsZShldmVudDogRXZlbnQsIGxpbms6IEluc3RhbGxBcHBMaW5rKSB7XG4gICAgaWYgKCFsaW5rIHx8ICFsaW5rLmxvY2F0aW9uIHx8ICFsaW5rLm1pbWVUeXBlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW2luc3RhbGwtdXBncmFkZS1jYXJkXSBNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50ICdsaW5rLmxvY2F0aW9uJyBvciAnbGluay5taW1lVHlwZSdcIik7XG4gICAgICByZXR1cm47IC8vIFNraXBcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucGxhdGZvcm0ub3BlbihsaW5rLmxvY2F0aW9uKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tpbnN0YWxsLXVwZ3JhZGUtY2FyZF0gQ2Fubm90IG9wZW4gZmlsZTogJyArICgoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHRyeU9ubGluZSgpIHtcbiAgICB0aGlzLndhaXRpbmdOZXR3b3JrID0gdHJ1ZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubmV0d29yay50cnlPbmxpbmUoe1xuICAgICAgICBzaG93TG9hZGluZ1RvYXN0OiBmYWxzZSxcbiAgICAgICAgc2hvd09ubGluZVRvYXN0OiB0cnVlLFxuICAgICAgICBzaG93T2ZmbGluZVRvYXN0OiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLndhaXRpbmdOZXR3b3JrID0gZmFsc2U7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGdldFBsYXRmb3JtTmFtZShwbGF0Zm9ybTogJ2FuZHJvaWQnIHwgJ2lvcycgfCAnZWxlY3Ryb24nKSB7XG4gICAgc3dpdGNoIChwbGF0Zm9ybSkge1xuICAgICAgY2FzZSAnYW5kcm9pZCc6XG4gICAgICAgIHJldHVybiAnQW5kcm9pZCc7XG4gICAgICBjYXNlICdpb3MnOlxuICAgICAgICByZXR1cm4gJ2lPUyc7XG4gICAgICBjYXNlICdlbGVjdHJvbic6XG4gICAgICAgIHJldHVybiAnZGVza3RvcCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgYXNMaW5rKHZhbHVlOiBhbnkpOiBJbnN0YWxsQXBwTGluayB7XG4gICAgcmV0dXJuIHZhbHVlIGFzIEluc3RhbGxBcHBMaW5rO1xuICB9XG5cbiAgLyogLS0gcHJpdmF0ZSBtZXRob2QgIC0tICovXG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja05lZWRJbnN0YWxsT3JVcGRhdGUoY29uZmlnOiBDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKCFjb25maWcpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgY29uc29sZS5pbmZvKCdbaW5zdGFsbC11cGdyYWRlLWNhcmRdIENoZWNrIGlmIG5lZWQgdG8gaW5zdGFsbCBvciB1cGdyYWRlLi4uJyk7XG5cbiAgICB0aGlzLmhhc0Rvd25sb2FkZXIgPSB0aGlzLnBsYXRmb3JtLmNhbkRvd25sb2FkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxpbmtzID0gdGhpcy5nZXRMaW5rcyhjb25maWcpO1xuXG4gICAgICAvLyBDaGVjayBmb3IgdXBncmFkZVxuICAgICAgdGhpcy51cGdyYWRlTGlua3MgPSB0aGlzLmdldENvbXBhdGlibGVVcGdyYWRlTGlua3MobGlua3MsIGNvbmZpZyk7XG5cbiAgICAgIGlmIChpc05vdEVtcHR5QXJyYXkodGhpcy51cGdyYWRlTGlua3MpKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2luc3RhbGwtdXBncmFkZS1jYXJkXSBGaW5kIHVwZ3JhZGUgbGlua3M6ICR7dGhpcy51cGdyYWRlTGlua3MubWFwKChsKSA9PiBsLnVybCkuam9pbignLCcpfWApO1xuICAgICAgICB0aGlzLmluc3RhbGxMaW5rcyA9IG51bGw7XG4gICAgICAgIHRoaXMubGlzdGVuRG93bmxvYWRKb2JzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDaGVjayBmb3IgaW5zdGFsbCBsaW5rc1xuICAgICAgICB0aGlzLmluc3RhbGxMaW5rcyA9IHRoaXMuZ2V0Q29tcGF0aWJsZUluc3RhbGxMaW5rcyhsaW5rcyk7XG4gICAgICAgIGlmIChpc05vdEVtcHR5QXJyYXkodGhpcy5pbnN0YWxsTGlua3MpKSB7XG4gICAgICAgICAgY29uc29sZS5pbmZvKGBbaW5zdGFsbC11cGdyYWRlLWNhcmRdIEZpbmQgaW5zdGFsbGF0aW9uIGxpbmtzICR7dGhpcy5pbnN0YWxsTGlua3MubWFwKChsKSA9PiBsLnVybCkuam9pbignLCcpfWApO1xuICAgICAgICAgIGF3YWl0IHNsZWVwKDEwMDApOyAvLyBBZGQgYSBkZWxheSwgZm9yIGFuaW1hdGlvblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuaW5mbyhgW2luc3RhbGwtdXBncmFkZS1jYXJkXSBObyBpbnN0YWxsYXRpb24gb3IgdXBncmFkZSBsaW5rcyB0byBkaXNwbGF5LmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBhdGlibGVJbnN0YWxsTGlua3MoaW5zdGFsbExpbmtzOiBJbnN0YWxsQXBwTGlua1tdKTogSW5zdGFsbEFwcExpbmtbXSB7XG4gICAgLy8gQWxyZWFkeSBhbiBuYXRpdmUgQXBwOiBub3QgbmVlZCB0byBpbnN0YWxsXG4gICAgaWYgKHRoaXMucGxhdGZvcm0uaXNBcHAoKSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIC8vIElmIG1vYmlsZSB3ZWI6IHJldHVybiBhbGwgY29tcGF0aWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybVxuICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzTW9iaWxlV2ViKCkpIHtcbiAgICAgIHJldHVybiBpbnN0YWxsTGlua3MuZmlsdGVyKFxuICAgICAgICAobGluaykgPT5cbiAgICAgICAgICAhbGluay5wbGF0Zm9ybSB8fFxuICAgICAgICAgIHRoaXMucGxhdGZvcm0uaXMobGluay5wbGF0Zm9ybSkgfHxcbiAgICAgICAgICAobGluay5wbGF0Zm9ybSA9PT0gJ2FuZHJvaWQnICYmIGlzQW5kcm9pZCh3aW5kb3cpKSB8fFxuICAgICAgICAgIChsaW5rLnBsYXRmb3JtID09PSAnaW9zJyAmJiBpc0lPUyh3aW5kb3cpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb21wYXRpYmxlVXBncmFkZUxpbmtzKGluc3RhbGxMaW5rczogSW5zdGFsbEFwcExpbmtbXSwgY29uZmlnOiBDb25maWd1cmF0aW9uKTogSW5zdGFsbEFwcExpbmtbXSB7XG4gICAgY29uc3QgYXBwVmVyc2lvbiA9IHRoaXMuZW52aXJvbm1lbnQudmVyc2lvbjtcbiAgICBjb25zdCBhcHBNaW5WZXJzaW9uRnJvbVBvZCA9IGNvbmZpZy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLkFQUF9NSU5fVkVSU0lPTik7XG5cbiAgICBpZiAoIWFwcFZlcnNpb24pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJNaXNzaW5nIHZhbHVlIGZvciAnZW52aXJvbm1lbnQudmVyc2lvbic6IGNhbm5vdCBjaGVjayBhcHAgY29tcGF0aWJpbGl0eSFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IG5lZWRVcGdyYWRlID0gYXBwTWluVmVyc2lvbkZyb21Qb2QgJiYgIVZlcnNpb25VdGlscy5pc0NvbXBhdGlibGUoYXBwTWluVmVyc2lvbkZyb21Qb2QsIGFwcFZlcnNpb24pO1xuICAgIGlmICghbmVlZFVwZ3JhZGUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAvLyBGaWx0ZXIgb24gcGxhdGZvcm0sIGlmIG1vYmlsZSBBcHBcbiAgICBjb25zdCB1cGdyYWRlTGlua3MgPSAoaW5zdGFsbExpbmtzIHx8IFtdKS5maWx0ZXIoKGxpbmspID0+IGxpbmsucGxhdGZvcm0gJiYgdGhpcy5wbGF0Zm9ybS5pcyhsaW5rLnBsYXRmb3JtKSk7XG5cbiAgICAvLyBVc2UgbWluIHZlcnNpb24gYXMgZGVmYXVsdCB2ZXJzaW9uXG4gICAgdXBncmFkZUxpbmtzLmZvckVhY2goKGxpbmspID0+IHtcbiAgICAgIGxpbmsudmVyc2lvbiA9IGxpbmsudmVyc2lvbiB8fCBhcHBNaW5WZXJzaW9uRnJvbVBvZDtcbiAgICB9KTtcblxuICAgIHJldHVybiBpc05vdEVtcHR5QXJyYXkodXBncmFkZUxpbmtzKSA/IHVwZ3JhZGVMaW5rcyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGlua3MoY29uZmlnOiBDb25maWd1cmF0aW9uKTogSW5zdGFsbEFwcExpbmtbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBJbnN0YWxsQXBwTGlua1tdID0gW107XG5cbiAgICAvLyBDb21wdXRlIEFwcCBuYW1lXG4gICAgY29uc3QgbWluVmVyc2lvbiA9IGNvbmZpZy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLkFQUF9NSU5fVkVSU0lPTik7XG4gICAgY29uc3QgZGVmYXVsdEFwcE5hbWUgPSB0aGlzLmVudmlyb25tZW50LmRlZmF1bHRBcHBOYW1lIHx8ICdTVU1BUmlTJztcblxuICAgIC8vIEFuZHJvaWRcbiAgICB7XG4gICAgICAvLyBHZXQgVVJMIChmcm9tIGNvbmZpZywgb3IgZW52aXJvbm1lbnQpXG4gICAgICBsZXQgdXJsID0gY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuQU5EUk9JRF9JTlNUQUxMX1VSTCk7XG4gICAgICBpZiAoaXNOaWxPckJsYW5rKHVybCkpIHVybCA9IHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdEFuZHJvaWRJbnN0YWxsVXJsIHx8IG51bGw7XG5cbiAgICAgIC8vIFJlc29sdmUgcmVsYXRpdmUgVVJMXG4gICAgICBjb25zdCBwZWVyID0gdGhpcy5uZXR3b3JrLnBlZXI7XG4gICAgICBpZiAocGVlciAmJiB1cmwgJiYgKHVybC5zdGFydHNXaXRoKCcuLycpIHx8IHVybC5zdGFydHNXaXRoKCcvJykpKSB7XG4gICAgICAgIHVybCA9IFBlZXIucGF0aChwZWVyLCB1cmwpO1xuICAgICAgfVxuXG4gICAgICAvLyBDb21wdXRlIEFwcCBuYW1lICh1c2UgY29uZmlnIGlmIFVSTCBpcyBzcGVjaWZpYylcbiAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IGlzTm90TmlsT3JCbGFuayh1cmwpID8gY29uZmlnLmxhYmVsIDogZGVmYXVsdEFwcE5hbWU7XG5cbiAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgbGV0IHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIGxldCBtaW1lVHlwZTogc3RyaW5nO1xuXG4gICAgICAgIC8vIEdldCBmaWxlIG5hbWVcbiAgICAgICAgbGV0IGZpbGVuYW1lID0gVXJpVXRpbHMuZ2V0RmlsZW5hbWUodXJsKTtcbiAgICAgICAgbGV0IHZlcnNpb24gPSBtaW5WZXJzaW9uIHx8ICdsYXRlc3QnO1xuXG4gICAgICAgIC8vIE9LLCB0aGlzIGlzIGEgZG93bmxvYWRhYmxlIEFQSyBmaWxlIChlLmcuIE5PVCBhIGxpbmsgdG8gYSBwbGF5c3RvcmUpXG4gICAgICAgIGlmIChmaWxlbmFtZT8udG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnLmFwaycpKSB7XG4gICAgICAgICAgLy8gRGVmaW5lIG1pbWUgdHlwZVxuICAgICAgICAgIG1pbWVUeXBlID0gTWltZVR5cGVzLkFORFJPSURfQVBLO1xuXG4gICAgICAgICAgLy8gR2V0IHRoZSBmaWxlIHZlcnNpb24gKGlmIGFueSlcbiAgICAgICAgICBjb25zdCB2ZXJzaW9uTWF0Y2hlcyA9IC8tdihbMS05XVswLTldKlxcLlswLTldK1xcLig6Pyg6P2FscGhhfGJldGF8cmMpP1swLTldKikpL2kuZXhlYyhmaWxlbmFtZSk7XG4gICAgICAgICAgdmVyc2lvbiA9ICh2ZXJzaW9uTWF0Y2hlcyAmJiB2ZXJzaW9uTWF0Y2hlc1sxXSkgfHwgdmVyc2lvbjtcblxuICAgICAgICAgIC8vIENvbXB1dGUgYSBuZXcgZmlsZSBuYW1lLCB3aXRoIHRoZSB2ZXJzaW9uXG4gICAgICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhuYW1lKSAmJiB2ZXJzaW9uICE9PSAnbGF0ZXN0Jykge1xuICAgICAgICAgICAgZmlsZW5hbWUgPSBgJHtuYW1lfS12JHt2ZXJzaW9ufS5hcGtgLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB0aXRsZSA9IGAke25hbWV9IHYke3ZlcnNpb259YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBSZXBsYWNlICdsYXRlc3QnIHdpdGggdGhlIGFwcCB2ZXJzaW9uLCBpZiBwcmVzZW50IGluIHRoZSBmaWxlbmFtZVxuICAgICAgICAgIGVsc2UgaWYgKGZpbGVuYW1lLmluZGV4T2YoJ2xhdGVzdCcpICE9PSAtMSAmJiB2ZXJzaW9uICE9PSAnbGF0ZXN0Jykge1xuICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKCdsYXRlc3QnLCB2ZXJzaW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQucHVzaCh7IG5hbWUsIHVybCwgcGxhdGZvcm06ICdhbmRyb2lkJywgdmVyc2lvbiwgZmlsZW5hbWUsIHRpdGxlLCBtaW1lVHlwZSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpT1NcbiAgICB7XG4gICAgICAvLyBHZXQgVVJMIChmcm9tIGNvbmZpZywgb3IgZW52aXJvbm1lbnQpXG4gICAgICBsZXQgdXJsID0gY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuSU9TX0lOU1RBTExfVVJMKTtcbiAgICAgIGlmIChpc05pbE9yQmxhbmsodXJsKSkgdXJsID0gdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0SU9TSW5zdGFsbFVybCB8fCBudWxsO1xuXG4gICAgICAvLyBSZXNvbHZlIHJlbGF0aXZlIFVSTFxuICAgICAgY29uc3QgcGVlciA9IHRoaXMubmV0d29yay5wZWVyO1xuICAgICAgaWYgKHBlZXIgJiYgdXJsICYmICh1cmwuc3RhcnRzV2l0aCgnLi8nKSB8fCB1cmwuc3RhcnRzV2l0aCgnLycpKSkge1xuICAgICAgICB1cmwgPSBQZWVyLnBhdGgocGVlciwgdXJsKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ29tcHV0ZSBBcHAgbmFtZSAodXNlIGNvbmZpZyBpZiBVUkwgaXMgc3BlY2lmaWMpXG4gICAgICBjb25zdCBuYW1lOiBzdHJpbmcgPSBpc05vdE5pbE9yQmxhbmsodXJsKSA/IGNvbmZpZy5sYWJlbCA6IGRlZmF1bHRBcHBOYW1lO1xuXG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBtaW5WZXJzaW9uIHx8ICdsYXRlc3QnO1xuICAgICAgICBjb25zdCB0aXRsZSA9IGAke25hbWV9IHYke3ZlcnNpb259YDtcbiAgICAgICAgcmVzdWx0LnB1c2goeyBuYW1lLCB1cmwsIHBsYXRmb3JtOiAnaW9zJywgdmVyc2lvbiwgdGl0bGUgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVza3RvcCAoRWxlY3Ryb24pXG4gICAge1xuICAgICAgLy8gR2V0IFVSTCAoZnJvbSBjb25maWcsIG9yIGVudmlyb25tZW50KVxuICAgICAgbGV0IHVybCA9IGNvbmZpZy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLkRFU0tUT1BfSU5TVEFMTF9VUkwpO1xuICAgICAgaWYgKGlzTmlsT3JCbGFuayh1cmwpKSB1cmwgPSB0aGlzLmVudmlyb25tZW50LmRlZmF1bHREZXNrdG9wSW5zdGFsbFVybCB8fCBudWxsO1xuXG4gICAgICAvLyBSZXNvbHZlIHJlbGF0aXZlIFVSTFxuICAgICAgY29uc3QgcGVlciA9IHRoaXMubmV0d29yay5wZWVyO1xuICAgICAgaWYgKHBlZXIgJiYgdXJsICYmICh1cmwuc3RhcnRzV2l0aCgnLi8nKSB8fCB1cmwuc3RhcnRzV2l0aCgnLycpKSkge1xuICAgICAgICB1cmwgPSBQZWVyLnBhdGgocGVlciwgdXJsKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ29tcHV0ZSBBcHAgbmFtZSAodXNlIGNvbmZpZyBpZiBVUkwgaXMgc3BlY2lmaWMpXG4gICAgICBjb25zdCBuYW1lOiBzdHJpbmcgPSBpc05vdE5pbE9yQmxhbmsodXJsKSA/IGNvbmZpZy5sYWJlbCA6IGRlZmF1bHRBcHBOYW1lO1xuXG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBtaW5WZXJzaW9uIHx8ICdsYXRlc3QnO1xuICAgICAgICBjb25zdCB0aXRsZSA9IGAke25hbWV9IHYke3ZlcnNpb259YDtcbiAgICAgICAgcmVzdWx0LnB1c2goeyBuYW1lLCB1cmwsIHBsYXRmb3JtOiAnZWxlY3Ryb24nLCB2ZXJzaW9uLCB0aXRsZSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Eb3dubG9hZEpvYnMoKSB7XG4gICAgLy8gTGlzdGVuaW5nIGRvd25sb2FkaW5nIHByb21pc2UsIGlmIGV4aXN0c1xuICAgICh0aGlzLnVwZ3JhZGVMaW5rcyB8fCBbXSkuZm9yRWFjaCgobGluaykgPT4ge1xuICAgICAgY29uc3Qgam9iID0gdGhpcy5wbGF0Zm9ybS5nZXREb3dubG9hZGluZ0pvYihsaW5rLnVybCk7XG4gICAgICBpZiAoam9iKSB7XG4gICAgICAgIGxpbmsuZG93bmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmxpc3RlbkRvd25sb2FkSm9iKGxpbmsudXJsLCBqb2IpXG4gICAgICAgICAgLnRoZW4oKGxvY2F0aW9uKSA9PiB7XG4gICAgICAgICAgICBsaW5rLmxvY2F0aW9uID0gbG9jYXRpb247XG4gICAgICAgICAgICBsaW5rLmRvd25sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKCkgPT4gKGxpbmsuZG93bmxvYWRpbmcgPSBmYWxzZSkpXG4gICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5tYXJrRm9yQ2hlY2soKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxpc3RlbkRvd25sb2FkSm9iKHVybDogc3RyaW5nLCBqb2I6IE9ic2VydmFibGU8c3RyaW5nPik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCF1cmwgfHwgIWpvYikgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICB0cnkge1xuICAgICAgLy8gTWFyayBhcyBkb3dubG9hZGluZ1xuICAgICAgaWYgKCF0aGlzLmRvd25sb2FkaW5nKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2luc3RhbGwtdXBncmFkZS1jYXJkXSBBc2tpbmcgcGxhdGZvcm0gdG8gZG93bmxvYWQgJyR7dXJsfScuLi5gKTtcbiAgICAgICAgdGhpcy5kb3dubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmluZm8oYFtpbnN0YWxsLXVwZ3JhZGUtY2FyZF0gUGxhdGZvcm0gaXMgYWxyZWFkeSBkb3dubG9hZGluZyFgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbG9jYXRpb24gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShqb2IpO1xuICAgICAgaWYgKGxvY2F0aW9uKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbygnW2luc3RhbGwtdXBncmFkZS1jYXJkXSBGaWxlIGRvd25sb2FkZWQgYXQ6ICcgKyBsb2NhdGlvbik7XG4gICAgICAgIHRoaXMuc2hvd0Rvd25sb2FkQ29tcGxldGVEaWFsb2coKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsb2NhdGlvbjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIEZhaWxlZDogZGlzcGxheSBhIHRvYXN0XG4gICAgICBjb25zb2xlLmVycm9yKCdbaW5zdGFsbC11cGdyYWRlLWNhcmRdIERvd25sb2FkIGZhaWxlZDogJyArICgoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpKTtcbiAgICAgIHRoaXMuc2hvd0Rvd25sb2FkRmFpbGVkVG9hc3QoZXJyKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5kb3dubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3dEb3dubG9hZEZhaWxlZFRvYXN0KGVycikge1xuICAgIHJldHVybiB0aGlzLnNob3dUb2FzdCh7XG4gICAgICBtZXNzYWdlOiAnRVJST1IuRE9XTkxPQURfRkFJTEVEJyxcbiAgICAgIG1lc3NhZ2VQYXJhbXM6IHsgZXJyb3I6IGVyciB9LFxuICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2hvd0Rvd25sb2FkQ29tcGxldGVEaWFsb2coKSB7XG4gICAgaWYgKCF0aGlzLl9zdWJzY3JpcHRpb24pIHJldHVybjsgLy8gU2tpcCBpZiBjb21wb25lbnQgaGFzIGJlZW4gZGVzdHJveWVkXG5cbiAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFsnSU5GTy5BTEVSVF9IRUFERVInLCAnSU5GTy5VUERBVEVfQVBQX0RPV05MT0FERUQnLCAnQ09NTU9OLkJUTl9DTE9TRSddKTtcbiAgICBjb25zdCBhbGVydCA9IGF3YWl0IHRoaXMuYWxlcnRDb250cm9sbGVyLmNyZWF0ZSh7XG4gICAgICBoZWFkZXI6IHRyYW5zbGF0aW9uc1snSU5GTy5BTEVSVF9IRUFERVInXSxcbiAgICAgIG1lc3NhZ2U6IHRyYW5zbGF0aW9uc1snSU5GTy5VUERBVEVfQVBQX0RPV05MT0FERUQnXSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IHRyYW5zbGF0aW9uc1snQ09NTU9OLkJUTl9DTE9TRSddLFxuICAgICAgICAgIHJvbGU6ICdjYW5jZWwnLFxuICAgICAgICAgIGNzc0NsYXNzOiAnc2Vjb25kYXJ5JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBhd2FpdCBhbGVydC5wcmVzZW50KCk7XG4gICAgYXdhaXQgYWxlcnQub25EaWREaXNtaXNzKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcmtGb3JDaGVjaygpIHtcbiAgICBpZiAoIXRoaXMuX3N1YnNjcmlwdGlvbikgcmV0dXJuOyAvLyBTa2lwIGlmIGRlc3Ryb3llZFxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNob3dUb2FzdChvcHRzOiBTaG93VG9hc3RPcHRpb25zKSB7XG4gICAgaWYgKCF0aGlzLl9zdWJzY3JpcHRpb24pIHJldHVybjsgLy8gU2tpcCBpZiBjb21wb25lbnQgaGFzIGJlZW4gZGVzdHJveWVkXG4gICAgYXdhaXQgVG9hc3RzLnNob3codGhpcy50b2FzdENvbnRyb2xsZXIsIHRoaXMudHJhbnNsYXRlLCBvcHRzKTtcbiAgfVxufVxuIiwiPCEtLSBPZmZsaW5lIG1vZGUgY2FyZC0tPlxuPGlvbi1jYXJkXG4gICpuZ0lmPVwic2hvd09mZmxpbmVXYXJuaW5nICYmICgoIWxvYWRpbmcgJiYgb2ZmbGluZSkgfHwgd2FpdGluZ05ldHdvcmspXCJcbiAgY29sb3I9XCJhY2NlbnRcIlxuICBjbGFzcz1cIm1haW4gaW9uLW5vLW1hcmdpblwiXG4gIEBzbGlkZVVwRG93bkFuaW1hdGlvblxuPlxuICA8aW9uLWNhcmQtY29udGVudCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgPGlvbi1ncmlkPlxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIEBpZiAod2FpdGluZ05ldHdvcmspIHtcbiAgICAgICAgICAgIDxpb24tdGV4dCBjbGFzcz1cImlvbi10ZXh0LXdyYXBcIiBbaW5uZXJIVE1MXT1cIidORVRXT1JLLklORk8uUkVUUllfVE9fQ09OTkVDVCcgfCB0cmFuc2xhdGVcIj48L2lvbi10ZXh0PlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGlvbi10ZXh0IGNsYXNzPVwiaW9uLXRleHQtd3JhcFwiPlxuICAgICAgICAgICAgICA8aDQ+XG4gICAgICAgICAgICAgICAgQGlmIChpc0xvZ2luKSB7XG4gICAgICAgICAgICAgICAgICA8YiBbaW5uZXJIVE1MXT1cIidORVRXT1JLLklORk8uT0ZGTElORV9PUl9VTkFVVEhPUklaRUQnIHwgdHJhbnNsYXRlXCI+PC9iPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPGIgW2lubmVySFRNTF09XCInTkVUV09SSy5JTkZPLk9GRkxJTkUnIHwgdHJhbnNsYXRlXCI+PC9iPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgICAgPGgzPlxuICAgICAgICAgICAgICAgIDxzbWFsbCBbaW5uZXJIVE1MXT1cIidORVRXT1JLLklORk8uT0ZGTElORV9IRUxQJyB8IHRyYW5zbGF0ZVwiPjwvc21hbGw+XG4gICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiIGNsYXNzPVwiaW9uLWFsaWduLWl0ZW1zLWVuZFwiPlxuICAgICAgICAgIDwhLS0gUmV0cnkgYnV0dG9uIC0tPlxuICAgICAgICAgIEBpZiAod2FpdGluZ05ldHdvcmspIHtcbiAgICAgICAgICAgIDxpb24tc3Bpbm5lciBjb2xvcj1cImxpZ2h0XCI+PC9pb24tc3Bpbm5lcj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIGNvbG9yPVwidGVydGlhcnlcIiBjbGFzcz1cImlvbi1mbG9hdC1lbmRcIiAoY2xpY2spPVwidHJ5T25saW5lKClcIj5cbiAgICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPk5FVFdPUksuQlROX0NIRUNLX0FMSVZFPC9zcGFuPlxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLWdyaWQ+XG4gIDwvaW9uLWNhcmQtY29udGVudD5cbjwvaW9uLWNhcmQ+XG5cbjwhLS0gVXBncmFkZSBsaW5rcyAtLT5cbjxpb24tY2FyZFxuICAqbmdJZj1cInNob3dVcGdyYWRlV2FybmluZyAmJiAhbG9hZGluZyAmJiAhb2ZmbGluZSAmJiB1cGdyYWRlTGlua3NcIlxuICBjb2xvcj1cImFjY2VudFwiXG4gIGNsYXNzPVwiaW9uLW5vLW1hcmdpblwiXG4gIEBzbGlkZVVwRG93bkFuaW1hdGlvblxuPlxuICA8aW9uLWNhcmQtY29udGVudCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgPGlvbi1ncmlkPlxuICAgICAgPGlvbi1yb3cgKm5nRm9yPVwibGV0IGxpbmsgb2YgdXBncmFkZUxpbmtzOyBsYXN0IGFzIGxhc3RcIj5cbiAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgPGlvbi10ZXh0IGNsYXNzPVwiaW9uLXRleHQtd3JhcFwiPlxuICAgICAgICAgICAgPGgzPlxuICAgICAgICAgICAgICBAaWYgKGxpbmsudmVyc2lvbikge1xuICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiJ0lORk8uVVBEQVRFX0FQUF9UT19WRVJTSU9OJyB8IHRyYW5zbGF0ZTogbGlua1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCInSU5GTy5VUERBVEVfQVBQJyB8IHRyYW5zbGF0ZTogbGlua1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgIDxoND5cbiAgICAgICAgICAgICAgQGlmIChsYXN0KSB7XG4gICAgICAgICAgICAgICAgPHNtYWxsIFtpbm5lckhUTUxdPVwiJ0lORk8uVVBEQVRFX0FQUF9IRUxQJyB8IHRyYW5zbGF0ZVwiPjwvc21hbGw+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRvd25sb2FkQnV0dG9uOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogbGluayB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cbiAgICA8L2lvbi1ncmlkPlxuICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG48L2lvbi1jYXJkPlxuXG48IS0tIEluc3RhbGwgbGlua3MgLS0+XG48aW9uLWNhcmRcbiAgKm5nSWY9XCJzaG93SW5zdGFsbEJ1dHRvbiAmJiAhbG9hZGluZyAmJiAhb2ZmbGluZSAmJiBpbnN0YWxsTGlua3NcIlxuICBjb2xvcj1cInNlY29uZGFyeVwiXG4gIGNsYXNzPVwiaW9uLW5vLW1hcmdpblwiXG4gIEBzbGlkZVVwRG93bkFuaW1hdGlvblxuPlxuICA8aW9uLWNhcmQtY29udGVudCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgPGlvbi1ncmlkPlxuICAgICAgPGlvbi1yb3cgKm5nRm9yPVwibGV0IGxpbmsgb2YgaW5zdGFsbExpbmtzOyBsYXN0IGFzIGxhc3RcIj5cbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjEyXCIgc2l6ZS1zbT1cIjhcIj5cbiAgICAgICAgICA8aW9uLXRleHQgY2xhc3M9XCJpb24tdGV4dC13cmFwXCI+XG4gICAgICAgICAgICA8aDNcbiAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJcbiAgICAgICAgICAgICAgICAnSU5GTy5ET1dOTE9BRF9BUFBfVElUTEUnIHwgdHJhbnNsYXRlOiB7IG5hbWU6IGxpbmsubmFtZSwgcGxhdGZvcm06IGdldFBsYXRmb3JtTmFtZShsaW5rLnBsYXRmb3JtKSB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9oMz5cbiAgICAgICAgICAgIDxoND48c21hbGwgKm5nSWY9XCJsYXN0XCIgW2lubmVySFRNTF09XCInSU5GTy5ET1dOTE9BRF9BUFBfSEVMUCcgfCB0cmFuc2xhdGVcIj48L3NtYWxsPjwvaDQ+XG4gICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiMTJcIiBzaXplLXNtPVwiNFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkb3dubG9hZEJ1dHRvbjsgY29udGV4dDogeyAkaW1wbGljaXQ6IGxpbmsgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICA8L2lvbi1yb3c+XG4gICAgPC9pb24tZ3JpZD5cbiAgPC9pb24tY2FyZC1jb250ZW50PlxuPC9pb24tY2FyZD5cblxuPCEtLSBEaXNwbGF5IGEgZG93bmxvYWQgYnV0dG9uLCBkZXBlbmRpbmcgb24gdGhlIGxpbmsgVVJMLCBhbmQgdGhlIGRldmljZSBwbGF0Zm9ybSAtLT5cbjxuZy10ZW1wbGF0ZSAjZG93bmxvYWRCdXR0b24gbGV0LWxpbms+XG4gIEBpZiAobGluay5maWxlbmFtZSkge1xuICAgIEBpZiAoaGFzRG93bmxvYWRlcikge1xuICAgICAgPCEtLSBEb3dubG9hZCB1c2luZyBwbGF0Zm9ybSAtLT5cbiAgICAgIEBpZiAoIWxpbmsubG9jYXRpb24pIHtcbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWQoJGV2ZW50LCBhc0xpbmsobGluaykpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwibGluay5kb3dubG9hZGluZ1wiXG4gICAgICAgICAgY29sb3I9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgICAgY2xhc3M9XCJpb24tZmxvYXQtZW5kXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiAqbmdJZj1cIiFsaW5rLmRvd25sb2FkaW5nXCIgbmFtZT1cImRvd25sb2FkXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8aW9uLXNwaW5uZXIgc2xvdD1cInN0YXJ0XCIgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiICpuZ0lmPVwibGluay5kb3dubG9hZGluZ1wiPjwvaW9uLXNwaW5uZXI+XG4gICAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkJUTl9ET1dOTE9BRDwvaW9uLWxhYmVsPlxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPCEtLSBPcGVuIEFQSyBidXR0b24gLS0+XG4gICAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJvcGVuRmlsZSgkZXZlbnQsIGxpbmspXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiIGNsYXNzPVwiaW9uLWZsb2F0LWVuZFwiPlxuICAgICAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5CVE5fSU5TVEFMTDwvaW9uLWxhYmVsPlxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICA8IS0tIFdlYiBkb3dubG9hZCBidXR0b24gLS0+XG4gICAgICA8aW9uLWJ1dHRvbiBbZG93bmxvYWRdPVwibGluay5maWxlbmFtZVwiIFtocmVmXT1cImxpbmsudXJsXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiIGNsYXNzPVwiaW9uLWZsb2F0LWVuZFwiPlxuICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5DT01NT04uQlROX0RPV05MT0FEPC9pb24tbGFiZWw+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICA8IS0tIFdlYiByZWRpcmVjdCBidXR0b24gLS0+XG4gICAgPGlvbi1idXR0b24gW2hyZWZdPVwibGluay51cmxcIiByZWw9XCJleHRlcm5hbFwiIGNvbG9yPVwidGVydGlhcnlcIiBjbGFzcz1cImlvbi1mbG9hdC1lbmRcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5CVE5fU0hPV19NT1JFPC9pb24tbGFiZWw+XG4gICAgPC9pb24tYnV0dG9uPlxuICAgIEBpZiAoZGVidWcpIHtcbiAgICAgIDxpb24tbm90ZT57eyBsaW5rLnVybCB9fTwvaW9uLW5vdGU+XG4gICAgfVxuICB9XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -1,31 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { SharedModule } from '../../shared/shared.module';
3
- import { AppInstallUpgradeCard } from './install-upgrade-card.component';
4
- import { TranslateModule } from '@ngx-translate/core';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@ngx-translate/core";
7
- export class AppInstallUpgradeCardModule {
8
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppInstallUpgradeCardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AppInstallUpgradeCardModule, declarations: [
10
- // Components
11
- AppInstallUpgradeCard], imports: [SharedModule, i1.TranslateModule], exports: [TranslateModule,
12
- // Components
13
- AppInstallUpgradeCard] });
14
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppInstallUpgradeCardModule, imports: [SharedModule, TranslateModule.forChild(), TranslateModule] });
15
- }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppInstallUpgradeCardModule, decorators: [{
17
- type: NgModule,
18
- args: [{
19
- imports: [SharedModule, TranslateModule.forChild()],
20
- declarations: [
21
- // Components
22
- AppInstallUpgradeCard,
23
- ],
24
- exports: [
25
- TranslateModule,
26
- // Components
27
- AppInstallUpgradeCard,
28
- ],
29
- }]
30
- }] });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC11cGdyYWRlLWNhcmQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2luc3RhbGwvaW5zdGFsbC11cGdyYWRlLWNhcmQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBY3RELE1BQU0sT0FBTywyQkFBMkI7d0dBQTNCLDJCQUEyQjt5R0FBM0IsMkJBQTJCO1lBVHBDLGFBQWE7WUFDYixxQkFBcUIsYUFIYixZQUFZLGlDQU1wQixlQUFlO1lBQ2YsYUFBYTtZQUNiLHFCQUFxQjt5R0FHWiwyQkFBMkIsWUFYNUIsWUFBWSxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUUsRUFNaEQsZUFBZTs7NEZBS04sMkJBQTJCO2tCQVp2QyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ25ELFlBQVksRUFBRTt3QkFDWixhQUFhO3dCQUNiLHFCQUFxQjtxQkFDdEI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixxQkFBcUI7cUJBQ3RCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNoYXJlZE1vZHVsZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zaGFyZWQubW9kdWxlJztcbmltcG9ydCB7IEFwcEluc3RhbGxVcGdyYWRlQ2FyZCB9IGZyb20gJy4vaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbU2hhcmVkTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUuZm9yQ2hpbGQoKV0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIC8vIENvbXBvbmVudHNcbiAgICBBcHBJbnN0YWxsVXBncmFkZUNhcmQsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgLy8gQ29tcG9uZW50c1xuICAgIEFwcEluc3RhbGxVcGdyYWRlQ2FyZCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQXBwSW5zdGFsbFVwZ3JhZGVDYXJkTW9kdWxlIHt9XG4iXX0=