@sumaris-net/ngx-components 1.23.44 → 2.0.0-rc3

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 (739) hide show
  1. package/doc/build.md +2 -2
  2. package/doc/changelog.md +8 -0
  3. package/esm2020/public_api.mjs +278 -0
  4. package/esm2020/public_test_api.mjs +46 -0
  5. package/esm2020/src/app/admin/admin-routing.module.mjs +41 -0
  6. package/esm2020/src/app/admin/admin.module.mjs +34 -0
  7. package/esm2020/src/app/admin/services/filter/person.filter.mjs +59 -0
  8. package/esm2020/src/app/admin/services/person.service.mjs +161 -0
  9. package/esm2020/src/app/admin/services/validator/person.validator.mjs +34 -0
  10. package/esm2020/src/app/admin/users/list/users.mjs +233 -0
  11. package/esm2020/src/app/admin/users/list/users.module.mjs +58 -0
  12. package/esm2020/src/app/core/about/modal-about.mjs +71 -0
  13. package/esm2020/src/app/core/account/account.mjs +230 -0
  14. package/esm2020/src/app/core/auth/form/form-auth.mjs +131 -0
  15. package/esm2020/src/app/core/auth/modal/modal-auth.mjs +72 -0
  16. package/esm2020/src/app/core/core.module.mjs +223 -0
  17. package/esm2020/src/app/core/core.testing.module.mjs +86 -0
  18. package/esm2020/src/app/core/form/editor.class.mjs +672 -0
  19. package/esm2020/src/app/core/form/entity-editor-modal.class.mjs +407 -0
  20. package/esm2020/src/app/core/form/entity-editor.class.mjs +646 -0
  21. package/esm2020/src/app/core/form/entity-metadata.component.mjs +25 -0
  22. package/esm2020/src/app/core/form/form-buttons-bar.component.mjs +71 -0
  23. package/esm2020/src/app/core/form/form.class.mjs +337 -0
  24. package/esm2020/src/app/core/form/form.utils.mjs +299 -0
  25. package/esm2020/src/app/core/form/list.form.mjs +222 -0
  26. package/esm2020/src/app/core/form/properties/properties.form.mjs +129 -0
  27. package/esm2020/src/app/core/form/properties/property.validator.mjs +23 -0
  28. package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +90 -0
  29. package/esm2020/src/app/core/form/properties/testing/properties-form.testing.module.mjs +39 -0
  30. package/esm2020/src/app/core/graphql/graphql.module.mjs +22 -0
  31. package/esm2020/src/app/core/graphql/graphql.service.mjs +730 -0
  32. package/esm2020/src/app/core/graphql/graphql.utils.mjs +117 -0
  33. package/esm2020/src/app/core/home/home.mjs +257 -0
  34. package/esm2020/src/app/core/icon/icon.component.mjs +41 -0
  35. package/esm2020/src/app/core/icon/icon.module.mjs +29 -0
  36. package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +337 -0
  37. package/esm2020/src/app/core/install/install-upgrade-card.module.mjs +33 -0
  38. package/esm2020/src/app/core/menu/menu.component.mjs +317 -0
  39. package/{esm2015/src/app/core/menu/menu.model.js → esm2020/src/app/core/menu/menu.model.mjs} +0 -0
  40. package/esm2020/src/app/core/menu/menu.module.mjs +45 -0
  41. package/{esm2015/src/app/core/menu/menu.service.js → esm2020/src/app/core/menu/menu.service.mjs} +9 -7
  42. package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +27 -0
  43. package/esm2020/src/app/core/peer/select-peer.modal.mjs +130 -0
  44. package/esm2020/src/app/core/peer/select-peer.module.mjs +35 -0
  45. package/esm2020/src/app/core/register/confirm/confirm.mjs +81 -0
  46. package/esm2020/src/app/core/register/form/form-register.mjs +181 -0
  47. package/esm2020/src/app/core/register/modal/modal-register.mjs +52 -0
  48. package/esm2020/src/app/core/register/register.module.mjs +42 -0
  49. package/esm2020/src/app/core/services/account.service.mjs +1112 -0
  50. package/esm2020/src/app/core/services/auth-guard.service.mjs +71 -0
  51. package/esm2020/src/app/core/services/base-entity-service.class.mjs +432 -0
  52. package/esm2020/src/app/core/services/base-graphql-service.class.mjs +219 -0
  53. package/{esm2015/src/app/core/services/base58.js → esm2020/src/app/core/services/base58.mjs} +0 -0
  54. package/{esm2015/src/app/core/services/config/core.config.js → esm2020/src/app/core/services/config/core.config.mjs} +0 -0
  55. package/esm2020/src/app/core/services/config.service.mjs +354 -0
  56. package/{esm2015/src/app/core/services/crypto.service.js → esm2020/src/app/core/services/crypto.service.mjs} +7 -5
  57. package/{esm2015/src/app/core/services/errors.js → esm2020/src/app/core/services/errors.mjs} +0 -0
  58. package/esm2020/src/app/core/services/local-settings.service.mjs +442 -0
  59. package/esm2020/src/app/core/services/model/account.model.mjs +50 -0
  60. package/esm2020/src/app/core/services/model/config.model.mjs +89 -0
  61. package/esm2020/src/app/core/services/model/department.model.mjs +30 -0
  62. package/esm2020/src/app/core/services/model/entity.decorators.mjs +107 -0
  63. package/esm2020/src/app/core/services/model/entity.model.mjs +242 -0
  64. package/{esm2015/src/app/core/services/model/filter.model.js → esm2020/src/app/core/services/model/filter.model.mjs} +0 -0
  65. package/{esm2015/src/app/core/services/model/history.model.js → esm2020/src/app/core/services/model/history.model.mjs} +0 -0
  66. package/{esm2015/src/app/core/services/model/model.enum.js → esm2020/src/app/core/services/model/model.enum.mjs} +0 -0
  67. package/esm2020/src/app/core/services/model/peer.model.mjs +68 -0
  68. package/esm2020/src/app/core/services/model/person.model.mjs +83 -0
  69. package/esm2020/src/app/core/services/model/referential.model.mjs +145 -0
  70. package/esm2020/src/app/core/services/model/settings.model.mjs +75 -0
  71. package/esm2020/src/app/core/services/network.service.mjs +595 -0
  72. package/esm2020/src/app/core/services/network.utils.mjs +16 -0
  73. package/esm2020/src/app/core/services/pipes/account.pipes.mjs +38 -0
  74. package/esm2020/src/app/core/services/pipes/department-to-string.pipe.mjs +23 -0
  75. package/esm2020/src/app/core/services/pipes/person-to-string.pipe.mjs +23 -0
  76. package/esm2020/src/app/core/services/pipes/usage-mode.pipes.mjs +37 -0
  77. package/esm2020/src/app/core/services/platform.service.mjs +476 -0
  78. package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +422 -0
  79. package/esm2020/src/app/core/services/storage/entity-store.class.mjs +449 -0
  80. package/esm2020/src/app/core/services/testing/referential-filter.model.mjs +23 -0
  81. package/esm2020/src/app/core/services/testing/referential.validator.mjs +45 -0
  82. package/esm2020/src/app/core/services/validator/account.validator.mjs +52 -0
  83. package/esm2020/src/app/core/services/validator/base.validator.class.mjs +47 -0
  84. package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +66 -0
  85. package/esm2020/src/app/core/services/validator/user-settings.validator.mjs +29 -0
  86. package/esm2020/src/app/core/settings/settings.page.mjs +290 -0
  87. package/esm2020/src/app/core/table/actions-column.component.mjs +96 -0
  88. package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +394 -0
  89. package/esm2020/src/app/core/table/memory-table.class.mjs +53 -0
  90. package/esm2020/src/app/core/table/table-select-columns.component.mjs +43 -0
  91. package/esm2020/src/app/core/table/table.class.mjs +1666 -0
  92. package/esm2020/src/app/core/table/table.utils.mjs +13 -0
  93. package/esm2020/src/app/core/table/testing/table.testing.mjs +264 -0
  94. package/esm2020/src/app/core/table/testing/table.testing.module.mjs +38 -0
  95. package/esm2020/src/app/core/text-popover/testing/text-popover.testing.mjs +37 -0
  96. package/esm2020/src/app/core/text-popover/testing/text-popover.testing.module.mjs +45 -0
  97. package/esm2020/src/app/core/text-popover/text-form.component.mjs +84 -0
  98. package/esm2020/src/app/core/text-popover/text-popover.component.mjs +92 -0
  99. package/esm2020/src/app/shared/alerts.mjs +238 -0
  100. package/esm2020/src/app/shared/audio/audio.mjs +201 -0
  101. package/esm2020/src/app/shared/audio/audio.testing.mjs +31 -0
  102. package/esm2020/src/app/shared/audio/audio.testing.module.mjs +45 -0
  103. package/esm2020/src/app/shared/capacitor/keyboard.mjs +40 -0
  104. package/esm2020/src/app/shared/capacitor/plugins.mjs +9 -0
  105. package/{esm2015/src/app/shared/constants.js → esm2020/src/app/shared/constants.mjs} +2 -1
  106. package/esm2020/src/app/shared/dates.mjs +134 -0
  107. package/esm2020/src/app/shared/debug/debug.component.mjs +39 -0
  108. package/esm2020/src/app/shared/debug/debug.module.mjs +44 -0
  109. package/esm2020/src/app/shared/directives/autofocus.directive.mjs +92 -0
  110. package/esm2020/src/app/shared/directives/autotitle.directive.mjs +30 -0
  111. package/esm2020/src/app/shared/directives/directives.module.mjs +43 -0
  112. package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +53 -0
  113. package/esm2020/src/app/shared/directives/ng-var.directive.mjs +31 -0
  114. package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +59 -0
  115. package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +40 -0
  116. package/esm2020/src/app/shared/directives/resizable/resizable.module.mjs +17 -0
  117. package/esm2020/src/app/shared/events.mjs +64 -0
  118. package/esm2020/src/app/shared/file/csv.utils.mjs +74 -0
  119. package/esm2020/src/app/shared/file/file.service.mjs +117 -0
  120. package/esm2020/src/app/shared/file/file.utils.mjs +113 -0
  121. package/esm2020/src/app/shared/file/images.utils.mjs +161 -0
  122. package/{esm2015/src/app/shared/file/uri.utils.js → esm2020/src/app/shared/file/uri.utils.mjs} +0 -0
  123. package/{esm2015/src/app/shared/focusable.js → esm2020/src/app/shared/focusable.mjs} +0 -0
  124. package/esm2020/src/app/shared/form/field.component.mjs +244 -0
  125. package/{esm2015/src/app/shared/form/field.model.js → esm2020/src/app/shared/form/field.model.mjs} +1 -1
  126. package/esm2020/src/app/shared/form/loading-spinner.mjs +36 -0
  127. package/esm2020/src/app/shared/forms.mjs +374 -0
  128. package/esm2020/src/app/shared/functions.mjs +430 -0
  129. package/{esm2015/src/app/shared/gesture/gesture-config.js → esm2020/src/app/shared/gesture/gesture-config.mjs} +7 -5
  130. package/esm2020/src/app/shared/gesture/hammer.utils.mjs +2 -0
  131. package/{esm2015/src/app/shared/graph/colors.utils.js → esm2020/src/app/shared/graph/colors.utils.mjs} +0 -0
  132. package/esm2020/src/app/shared/graph/graph-colors.mjs +254 -0
  133. package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +57 -0
  134. package/esm2020/src/app/shared/help/help.modal.mjs +53 -0
  135. package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +23 -0
  136. package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +84 -0
  137. package/esm2020/src/app/shared/hotkeys/shared-hotkeys.module.mjs +42 -0
  138. package/esm2020/src/app/shared/http/http.utils.mjs +52 -0
  139. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +279 -0
  140. package/esm2020/src/app/shared/image/gallery/image-gallery.module.mjs +46 -0
  141. package/esm2020/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +27 -0
  142. package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +89 -0
  143. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +33 -0
  144. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +56 -0
  145. package/esm2020/src/app/shared/image/image.model.mjs +2 -0
  146. package/esm2020/src/app/shared/image/image.module.mjs +29 -0
  147. package/esm2020/src/app/shared/image/image.service.mjs +99 -0
  148. package/{esm2015/src/app/shared/inputs.js → esm2020/src/app/shared/inputs.mjs} +4 -4
  149. package/{esm2015/src/app/shared/interceptors/progess.interceptor.js → esm2020/src/app/shared/interceptors/progess.interceptor.mjs} +0 -0
  150. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +47 -0
  151. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +836 -0
  152. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +78 -0
  153. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +19 -0
  154. package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +205 -0
  155. package/esm2020/src/app/shared/material/badge/badge.directive.mjs +157 -0
  156. package/esm2020/src/app/shared/material/badge/badge.module.mjs +32 -0
  157. package/esm2020/src/app/shared/material/badge/badge.test.mjs +26 -0
  158. package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +68 -0
  159. package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +253 -0
  160. package/esm2020/src/app/shared/material/chips/chips.module.mjs +76 -0
  161. package/esm2020/src/app/shared/material/chips/material.chips.mjs +691 -0
  162. package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +136 -0
  163. package/esm2020/src/app/shared/material/datetime/datetime.module.mjs +91 -0
  164. package/esm2020/src/app/shared/material/datetime/material.date.mjs +388 -0
  165. package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +327 -0
  166. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +434 -0
  167. package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +110 -0
  168. package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +111 -0
  169. package/esm2020/src/app/shared/material/duration/duration.module.mjs +67 -0
  170. package/{esm2015/src/app/shared/material/duration/duration.utils.js → esm2020/src/app/shared/material/duration/duration.utils.mjs} +0 -0
  171. package/esm2020/src/app/shared/material/duration/material.duration.mjs +257 -0
  172. package/esm2020/src/app/shared/material/latlong/latlong.utils.mjs +266 -0
  173. package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +381 -0
  174. package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +67 -0
  175. package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +74 -0
  176. package/{esm2015/src/app/shared/material/material.animations.js → esm2020/src/app/shared/material/material.animations.mjs} +0 -0
  177. package/esm2020/src/app/shared/material/material.module.mjs +224 -0
  178. package/esm2020/src/app/shared/material/material.testing.module.mjs +145 -0
  179. package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +98 -0
  180. package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +80 -0
  181. package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +190 -0
  182. package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +17 -0
  183. package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +162 -0
  184. package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +37 -0
  185. package/{esm2015/src/app/shared/material/numpad/numpad.model.js → esm2020/src/app/shared/material/numpad/numpad.model.mjs} +1 -1
  186. package/esm2020/src/app/shared/material/numpad/numpad.module.mjs +60 -0
  187. package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +46 -0
  188. package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +42 -0
  189. package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +22 -0
  190. package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +334 -0
  191. package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +51 -0
  192. package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +65 -0
  193. package/esm2020/src/app/shared/observables.mjs +96 -0
  194. package/esm2020/src/app/shared/pipes/arrays.pipe.mjs +135 -0
  195. package/esm2020/src/app/shared/pipes/colors.pipe.mjs +23 -0
  196. package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +49 -0
  197. package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +42 -0
  198. package/{esm2015/src/app/shared/pipes/date-from-now.pipe.js → esm2020/src/app/shared/pipes/date-from-now.pipe.mjs} +13 -12
  199. package/{esm2015/src/app/shared/pipes/duration.pipe.js → esm2020/src/app/shared/pipes/duration.pipe.mjs} +13 -12
  200. package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +62 -0
  201. package/esm2020/src/app/shared/pipes/form.pipes.mjs +187 -0
  202. package/esm2020/src/app/shared/pipes/highlight.pipe.mjs +48 -0
  203. package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +46 -0
  204. package/esm2020/src/app/shared/pipes/maps.pipe.mjs +63 -0
  205. package/esm2020/src/app/shared/pipes/math.pipes.mjs +59 -0
  206. package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +21 -0
  207. package/{esm2015/src/app/shared/pipes/number-format.pipe.js → esm2020/src/app/shared/pipes/number-format.pipe.mjs} +14 -9
  208. package/esm2020/src/app/shared/pipes/pipes.module.mjs +210 -0
  209. package/esm2020/src/app/shared/pipes/property.pipes.mjs +96 -0
  210. package/esm2020/src/app/shared/pipes/string.pipes.mjs +69 -0
  211. package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +43 -0
  212. package/esm2020/src/app/shared/platforms.mjs +49 -0
  213. package/esm2020/src/app/shared/services/entity-service.class.mjs +7 -0
  214. package/esm2020/src/app/shared/services/job.utils.mjs +92 -0
  215. package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +331 -0
  216. package/esm2020/src/app/shared/services/progress-bar.service.mjs +32 -0
  217. package/esm2020/src/app/shared/services/startable-observable-service.class.mjs +119 -0
  218. package/esm2020/src/app/shared/services/startable-service.class.mjs +105 -0
  219. package/esm2020/src/app/shared/services/storage/storage.service.mjs +132 -0
  220. package/esm2020/src/app/shared/services/storage/storage.utils.mjs +13 -0
  221. package/esm2020/src/app/shared/services/translate-context.service.mjs +81 -0
  222. package/esm2020/src/app/shared/services/validator-service.class.mjs +2 -0
  223. package/esm2020/src/app/shared/services.mjs +62 -0
  224. package/esm2020/src/app/shared/shared-routing.module.mjs +63 -0
  225. package/esm2020/src/app/shared/shared.module.mjs +208 -0
  226. package/esm2020/src/app/shared/shared.testing.module.mjs +76 -0
  227. package/esm2020/src/app/shared/testing/tests.page.mjs +33 -0
  228. package/esm2020/src/app/shared/toast/toast.testing.mjs +51 -0
  229. package/esm2020/src/app/shared/toast/toast.testing.module.mjs +45 -0
  230. package/esm2020/src/app/shared/toast/toasts.mjs +144 -0
  231. package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +58 -0
  232. package/esm2020/src/app/shared/toolbar/toolbar.mjs +226 -0
  233. package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +53 -0
  234. package/{esm2015/src/app/shared/types.js → esm2020/src/app/shared/types.mjs} +0 -0
  235. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +57 -0
  236. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +45 -0
  237. package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +97 -0
  238. package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +204 -0
  239. package/esm2020/src/app/shared/upload-file/upload-file.model.mjs +20 -0
  240. package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +104 -0
  241. package/esm2020/src/app/shared/validator/validators.mjs +544 -0
  242. package/{esm2015/src/app/shared/version/versions.js → esm2020/src/app/shared/version/versions.mjs} +0 -0
  243. package/esm2020/src/app/social/job/job.model.mjs +26 -0
  244. package/esm2020/src/app/social/job/job.module.mjs +35 -0
  245. package/esm2020/src/app/social/job/job.service.mjs +71 -0
  246. package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +210 -0
  247. package/esm2020/src/app/social/job/progression/job-progression.list.mjs +22 -0
  248. package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +53 -0
  249. package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +55 -0
  250. package/esm2020/src/app/social/job/testing/job.testing.module.mjs +35 -0
  251. package/esm2020/src/app/social/message/message.form.mjs +81 -0
  252. package/esm2020/src/app/social/message/message.modal.mjs +93 -0
  253. package/esm2020/src/app/social/message/message.model.mjs +65 -0
  254. package/esm2020/src/app/social/message/message.module.mjs +35 -0
  255. package/esm2020/src/app/social/message/message.service.mjs +84 -0
  256. package/{esm2015/src/app/social/social.errors.js → esm2020/src/app/social/social.errors.mjs} +0 -0
  257. package/esm2020/src/app/social/social.module.mjs +47 -0
  258. package/esm2020/src/app/social/social.testing.module.mjs +51 -0
  259. package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +108 -0
  260. package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +212 -0
  261. package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +228 -0
  262. package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +107 -0
  263. package/esm2020/src/app/social/user-event/testing/user-event.testing.module.mjs +35 -0
  264. package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +111 -0
  265. package/esm2020/src/app/social/user-event/user-event.model.mjs +2 -0
  266. package/esm2020/src/app/social/user-event/user-event.module.mjs +39 -0
  267. package/esm2020/src/app/social/user-event/user-event.service.mjs +486 -0
  268. package/{esm2015/src/app/vendor.js → esm2020/src/app/vendor.mjs} +3 -3
  269. package/esm2020/src/environments/environment.class.mjs +5 -0
  270. package/esm2020/src/environments/environment.mjs +86 -0
  271. package/esm2020/sumaris-net.ngx-components.mjs +5 -0
  272. package/fesm2015/sumaris-net.ngx-components.mjs +33173 -0
  273. package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -0
  274. package/fesm2020/sumaris-net.ngx-components.mjs +32440 -0
  275. package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -0
  276. package/index.d.ts +5 -0
  277. package/package.json +27 -32
  278. package/public_api.d.ts +29 -31
  279. package/public_test_api.d.ts +37 -0
  280. package/resources/README.md +8 -0
  281. package/src/app/admin/admin-routing.module.d.ts +7 -0
  282. package/src/app/admin/admin.module.d.ts +7 -0
  283. package/src/app/admin/services/person.service.d.ts +3 -0
  284. package/src/app/admin/services/validator/person.validator.d.ts +8 -5
  285. package/src/app/admin/users/list/users.d.ts +11 -7
  286. package/src/app/admin/users/list/users.module.d.ts +14 -0
  287. package/src/app/core/about/modal-about.d.ts +3 -0
  288. package/src/app/core/account/account.d.ts +11 -8
  289. package/src/app/core/auth/form/form-auth.d.ts +6 -3
  290. package/src/app/core/auth/modal/modal-auth.d.ts +3 -0
  291. package/src/app/core/core.module.d.ts +36 -0
  292. package/src/app/core/core.testing.module.d.ts +10 -0
  293. package/src/app/core/form/editor.class.d.ts +6 -1
  294. package/src/app/core/form/entity-editor-modal.class.d.ts +7 -4
  295. package/src/app/core/form/entity-editor.class.d.ts +4 -1
  296. package/src/app/core/form/entity-metadata.component.d.ts +3 -0
  297. package/src/app/core/form/form-buttons-bar.component.d.ts +3 -0
  298. package/src/app/core/form/form.class.d.ts +12 -9
  299. package/src/app/core/form/form.utils.d.ts +5 -5
  300. package/src/app/core/form/list.form.d.ts +10 -7
  301. package/src/app/core/form/properties/properties.form.d.ts +43 -0
  302. package/src/app/core/form/properties/property.validator.d.ts +13 -0
  303. package/src/app/core/form/properties/testing/properties-form.test.d.ts +19 -0
  304. package/src/app/core/form/properties/testing/properties-form.testing.module.d.ts +12 -0
  305. package/src/app/core/graphql/graphql.module.d.ts +5 -0
  306. package/src/app/core/graphql/graphql.service.d.ts +9 -2
  307. package/src/app/core/graphql/graphql.utils.d.ts +8 -0
  308. package/src/app/core/home/home.d.ts +4 -1
  309. package/src/app/core/icon/icon.component.d.ts +5 -2
  310. package/src/app/core/icon/icon.module.d.ts +7 -0
  311. package/src/app/core/install/install-upgrade-card.component.d.ts +5 -2
  312. package/src/app/core/install/install-upgrade-card.module.d.ts +10 -0
  313. package/src/app/core/menu/menu.component.d.ts +7 -5
  314. package/src/app/core/menu/menu.module.d.ts +8 -0
  315. package/src/app/core/menu/menu.service.d.ts +3 -0
  316. package/src/app/core/offline/update-offline-mode-card.component.d.ts +3 -0
  317. package/src/app/core/peer/select-peer.modal.d.ts +7 -4
  318. package/src/app/core/peer/select-peer.module.d.ts +9 -0
  319. package/src/app/core/register/confirm/confirm.d.ts +3 -0
  320. package/src/app/core/register/form/form-register.d.ts +10 -7
  321. package/src/app/core/register/modal/modal-register.d.ts +3 -0
  322. package/src/app/core/register/register.module.d.ts +12 -0
  323. package/src/app/core/services/account.service.d.ts +5 -2
  324. package/src/app/core/services/auth-guard.service.d.ts +3 -0
  325. package/src/app/core/services/base-entity-service.class.d.ts +3 -0
  326. package/src/app/core/services/base-graphql-service.class.d.ts +3 -0
  327. package/src/app/core/services/config.service.d.ts +4 -1
  328. package/src/app/core/services/crypto.service.d.ts +3 -0
  329. package/src/app/core/services/local-settings.service.d.ts +5 -1
  330. package/src/app/core/services/model/referential.model.d.ts +1 -1
  331. package/src/app/core/services/network.service.d.ts +6 -5
  332. package/src/app/core/services/pipes/account.pipes.d.ts +7 -0
  333. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +4 -0
  334. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +4 -0
  335. package/src/app/core/services/pipes/usage-mode.pipes.d.ts +7 -0
  336. package/src/app/core/services/platform.service.d.ts +22 -21
  337. package/src/app/core/services/storage/entities-storage.service.d.ts +5 -2
  338. package/src/app/core/services/storage/entity-store.class.d.ts +3 -3
  339. package/src/app/core/services/testing/referential.validator.d.ts +8 -5
  340. package/src/app/core/services/validator/account.validator.d.ts +6 -3
  341. package/src/app/core/services/validator/base.validator.class.d.ts +8 -5
  342. package/src/app/core/services/validator/local-settings.validator.d.ts +8 -5
  343. package/src/app/core/services/validator/user-settings.validator.d.ts +6 -3
  344. package/src/app/core/settings/settings.page.d.ts +8 -5
  345. package/src/app/core/table/actions-column.component.d.ts +3 -0
  346. package/src/app/core/table/entities-table-datasource.class.d.ts +16 -15
  347. package/src/app/core/table/memory-table.class.d.ts +3 -0
  348. package/src/app/core/table/table-select-columns.component.d.ts +4 -5
  349. package/src/app/core/table/table.class.d.ts +52 -34
  350. package/src/app/core/table/table.utils.d.ts +2 -1
  351. package/src/app/core/table/testing/table.testing.d.ts +13 -15
  352. package/src/app/core/table/testing/table.testing.module.d.ts +9 -0
  353. package/src/app/core/text-popover/testing/text-popover.testing.d.ts +4 -1
  354. package/src/app/core/text-popover/testing/text-popover.testing.module.d.ts +9 -0
  355. package/src/app/core/text-popover/text-form.component.d.ts +7 -4
  356. package/src/app/core/text-popover/text-popover.component.d.ts +3 -0
  357. package/src/app/shared/alerts.d.ts +4 -4
  358. package/src/app/shared/audio/audio.d.ts +20 -11
  359. package/src/app/shared/audio/audio.testing.d.ts +13 -0
  360. package/src/app/shared/audio/audio.testing.module.d.ts +11 -0
  361. package/src/app/shared/capacitor/keyboard.d.ts +16 -0
  362. package/src/app/shared/capacitor/plugins.d.ts +7 -0
  363. package/src/app/shared/constants.d.ts +1 -0
  364. package/src/app/shared/debug/debug.component.d.ts +13 -0
  365. package/src/app/shared/debug/debug.module.d.ts +12 -0
  366. package/src/app/shared/directives/autofocus.directive.d.ts +9 -7
  367. package/src/app/shared/directives/autotitle.directive.d.ts +3 -0
  368. package/src/app/shared/directives/directives.module.d.ts +10 -0
  369. package/src/app/shared/directives/drag-and-drop.directive.d.ts +3 -0
  370. package/src/app/shared/directives/ng-var.directive.d.ts +3 -0
  371. package/src/app/shared/directives/resizable/resizable.component.d.ts +3 -0
  372. package/src/app/shared/directives/resizable/resizable.directive.d.ts +3 -0
  373. package/src/app/shared/directives/resizable/resizable.module.d.ts +6 -0
  374. package/src/app/shared/file/file.service.d.ts +3 -0
  375. package/src/app/shared/file/file.utils.d.ts +1 -1
  376. package/src/app/shared/form/field.component.d.ts +12 -3
  377. package/src/app/shared/form/field.model.d.ts +2 -2
  378. package/src/app/shared/form/loading-spinner.d.ts +3 -0
  379. package/src/app/shared/forms.d.ts +13 -13
  380. package/src/app/shared/gesture/gesture-config.d.ts +3 -0
  381. package/src/app/shared/gesture/hammer.utils.d.ts +11 -11
  382. package/src/app/shared/graph/graph-colors.d.ts +8 -7
  383. package/src/app/shared/guard/component-dirty.guard.d.ts +3 -0
  384. package/src/app/shared/help/help.modal.d.ts +4 -1
  385. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +3 -0
  386. package/src/app/shared/hotkeys/hotkeys.service.d.ts +4 -1
  387. package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +9 -0
  388. package/src/app/shared/image/gallery/image-gallery.component.d.ts +77 -0
  389. package/src/app/shared/image/gallery/image-gallery.module.d.ts +12 -0
  390. package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +12 -0
  391. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +33 -0
  392. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +15 -0
  393. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +12 -0
  394. package/src/app/shared/image/image.model.d.ts +5 -0
  395. package/src/app/shared/image/image.module.d.ts +8 -0
  396. package/src/app/shared/image/image.service.d.ts +32 -0
  397. package/src/app/shared/inputs.d.ts +3 -3
  398. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +36 -0
  399. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +11 -40
  400. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +19 -0
  401. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +4 -0
  402. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +12 -9
  403. package/src/app/shared/material/badge/badge.directive.d.ts +28 -0
  404. package/src/app/shared/material/badge/badge.module.d.ts +10 -0
  405. package/src/app/shared/material/badge/badge.test.d.ts +12 -0
  406. package/src/app/shared/material/boolean/boolean.module.d.ts +17 -0
  407. package/src/app/shared/material/boolean/material.boolean.d.ts +7 -4
  408. package/src/app/shared/material/chips/chips.module.d.ts +19 -0
  409. package/src/app/shared/material/chips/material.chips.d.ts +11 -8
  410. package/src/app/shared/material/chips/testing/chips.test.d.ts +8 -5
  411. package/src/app/shared/material/datetime/datetime.module.d.ts +22 -0
  412. package/src/app/shared/material/datetime/material.date.d.ts +19 -18
  413. package/src/app/shared/material/datetime/material.dateshort.d.ts +10 -9
  414. package/src/app/shared/material/datetime/material.datetime.d.ts +21 -20
  415. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +11 -9
  416. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +11 -9
  417. package/src/app/shared/material/duration/duration.module.d.ts +16 -0
  418. package/src/app/shared/material/duration/material.duration.d.ts +8 -5
  419. package/src/app/shared/material/latlong/material.latlong.d.ts +8 -5
  420. package/src/app/shared/material/latlong/material.latlong.module.d.ts +17 -0
  421. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +10 -7
  422. package/src/app/shared/material/material.module.d.ts +43 -0
  423. package/src/app/shared/material/material.testing.module.d.ts +19 -0
  424. package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +3 -0
  425. package/src/app/shared/material/numpad/numpad.component.d.ts +4 -1
  426. package/src/app/shared/material/numpad/numpad.container.d.ts +5 -2
  427. package/src/app/shared/material/numpad/numpad.content.d.ts +3 -0
  428. package/src/app/shared/material/numpad/numpad.directive.d.ts +4 -1
  429. package/src/app/shared/material/numpad/numpad.dom-service.d.ts +3 -0
  430. package/src/app/shared/material/numpad/numpad.model.d.ts +1 -1
  431. package/src/app/shared/material/numpad/numpad.module.d.ts +14 -0
  432. package/src/app/shared/material/numpad/testing/numpad.test.d.ts +7 -4
  433. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +3 -0
  434. package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +3 -0
  435. package/src/app/shared/material/swipe/material.swipe.d.ts +6 -3
  436. package/src/app/shared/material/swipe/swipe.module.d.ts +13 -0
  437. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +7 -4
  438. package/src/app/shared/pipes/arrays.pipe.d.ts +17 -0
  439. package/src/app/shared/pipes/colors.pipe.d.ts +9 -0
  440. package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +4 -0
  441. package/src/app/shared/pipes/date-format.pipe.d.ts +4 -0
  442. package/src/app/shared/pipes/date-from-now.pipe.d.ts +4 -0
  443. package/src/app/shared/pipes/duration.pipe.d.ts +4 -0
  444. package/src/app/shared/pipes/file-size.pipe.d.ts +3 -0
  445. package/src/app/shared/pipes/form.pipes.d.ts +18 -5
  446. package/src/app/shared/pipes/highlight.pipe.d.ts +4 -0
  447. package/src/app/shared/pipes/latlong-format.pipe.d.ts +7 -0
  448. package/src/app/shared/pipes/maps.pipe.d.ts +10 -0
  449. package/src/app/shared/pipes/math.pipes.d.ts +10 -0
  450. package/src/app/shared/pipes/ng-init.pipe.d.ts +3 -0
  451. package/src/app/shared/pipes/number-format.pipe.d.ts +4 -0
  452. package/src/app/shared/pipes/pipes.module.d.ts +24 -0
  453. package/src/app/shared/pipes/property.pipes.d.ts +6 -0
  454. package/src/app/shared/pipes/string.pipes.d.ts +11 -0
  455. package/src/app/shared/pipes/translate-context.pipe.d.ts +7 -0
  456. package/src/app/shared/platforms.d.ts +1 -0
  457. package/src/app/shared/services/memory-entity-service.class.d.ts +3 -0
  458. package/src/app/shared/services/progress-bar.service.d.ts +4 -1
  459. package/src/app/shared/services/startable-observable-service.class.d.ts +1 -1
  460. package/src/app/shared/services/startable-service.class.d.ts +1 -1
  461. package/src/app/shared/services/storage/storage.service.d.ts +23 -0
  462. package/src/app/shared/services/storage/storage.utils.d.ts +19 -0
  463. package/src/app/shared/services/translate-context.service.d.ts +3 -0
  464. package/src/app/shared/services/validator-service.class.d.ts +2 -2
  465. package/src/app/shared/shared-routing.module.d.ts +7 -0
  466. package/src/app/shared/shared.module.d.ts +23 -0
  467. package/src/app/shared/shared.testing.module.d.ts +12 -0
  468. package/src/app/shared/testing/tests.page.d.ts +3 -0
  469. package/src/app/shared/toast/toast.testing.d.ts +6 -5
  470. package/src/app/shared/toast/toast.testing.module.d.ts +9 -0
  471. package/src/app/shared/toast/toasts.d.ts +5 -2
  472. package/src/app/shared/toolbar/modal-toolbar.d.ts +5 -2
  473. package/src/app/shared/toolbar/toolbar.d.ts +9 -5
  474. package/src/app/shared/toolbar/toolbar.module.d.ts +15 -0
  475. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +4 -1
  476. package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +9 -0
  477. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +3 -0
  478. package/src/app/shared/upload-file/upload-file.component.d.ts +3 -0
  479. package/src/app/shared/validator/form-error-adapter.class.d.ts +3 -0
  480. package/src/app/shared/validator/validators.d.ts +9 -9
  481. package/src/app/social/job/job.module.d.ts +9 -0
  482. package/src/app/social/job/job.service.d.ts +3 -0
  483. package/src/app/social/job/progression/job-progression.icon.d.ts +4 -1
  484. package/src/app/social/job/progression/job-progression.list.d.ts +3 -0
  485. package/src/app/social/job/testing/job-progression.testing.d.ts +3 -0
  486. package/src/app/social/job/testing/job-progression.testing.service.d.ts +3 -0
  487. package/src/app/social/job/testing/job.testing.module.d.ts +9 -0
  488. package/src/app/social/message/message.form.d.ts +5 -2
  489. package/src/app/social/message/message.modal.d.ts +5 -2
  490. package/src/app/social/message/message.module.d.ts +9 -0
  491. package/src/app/social/message/message.service.d.ts +3 -0
  492. package/src/app/social/social.module.d.ts +10 -0
  493. package/src/app/social/social.testing.module.d.ts +9 -0
  494. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +4 -1
  495. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +7 -4
  496. package/src/app/social/user-event/testing/user-event.testing.d.ts +3 -0
  497. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +1 -0
  498. package/src/app/social/user-event/testing/user-event.testing.module.d.ts +9 -0
  499. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +5 -1
  500. package/src/app/social/user-event/user-event.model.d.ts +3 -2
  501. package/src/app/social/user-event/user-event.module.d.ts +10 -0
  502. package/src/app/social/user-event/user-event.service.d.ts +16 -11
  503. package/src/assets/audio/beep-notification.mp3 +0 -0
  504. package/src/assets/i18n/fr.json +9 -2
  505. package/src/environments/environment.class.d.ts +2 -0
  506. package/src/environments/environment.d.ts +1 -1
  507. package/src/theme/_icons.scss +1 -1
  508. package/src/theme/_material.globals.scss +29 -31
  509. package/src/theme/_material.scss +32 -6
  510. package/src/theme/_mixins.scss +4 -4
  511. package/src/theme/_ngx-components.scss +27 -0
  512. package/src/theme/_print.scss +24 -0
  513. package/bundles/sumaris-net.ngx-components.umd.js +0 -35755
  514. package/bundles/sumaris-net.ngx-components.umd.js.map +0 -1
  515. package/bundles/sumaris-net.ngx-components.umd.min.js +0 -25
  516. package/bundles/sumaris-net.ngx-components.umd.min.js.map +0 -1
  517. package/esm2015/public_api.js +0 -245
  518. package/esm2015/src/app/admin/admin-routing.module.js +0 -34
  519. package/esm2015/src/app/admin/admin.module.js +0 -34
  520. package/esm2015/src/app/admin/services/filter/person.filter.js +0 -59
  521. package/esm2015/src/app/admin/services/person.service.js +0 -175
  522. package/esm2015/src/app/admin/services/validator/person.validator.js +0 -37
  523. package/esm2015/src/app/admin/users/list/users.js +0 -216
  524. package/esm2015/src/app/core/about/modal-about.js +0 -63
  525. package/esm2015/src/app/core/account/account.js +0 -240
  526. package/esm2015/src/app/core/auth/form/form-auth.js +0 -134
  527. package/esm2015/src/app/core/auth/modal/modal-auth.js +0 -78
  528. package/esm2015/src/app/core/core.module.js +0 -127
  529. package/esm2015/src/app/core/core.testing.module.js +0 -51
  530. package/esm2015/src/app/core/form/editor.class.js +0 -698
  531. package/esm2015/src/app/core/form/entity-editor-modal.class.js +0 -422
  532. package/esm2015/src/app/core/form/entity-editor.class.js +0 -676
  533. package/esm2015/src/app/core/form/entity-metadata.component.js +0 -22
  534. package/esm2015/src/app/core/form/form-buttons-bar.component.js +0 -63
  535. package/esm2015/src/app/core/form/form.class.js +0 -342
  536. package/esm2015/src/app/core/form/form.utils.js +0 -299
  537. package/esm2015/src/app/core/form/list.form.js +0 -219
  538. package/esm2015/src/app/core/form/properties.form.js +0 -119
  539. package/esm2015/src/app/core/graphql/graphql.module.js +0 -18
  540. package/esm2015/src/app/core/graphql/graphql.service.js +0 -734
  541. package/esm2015/src/app/core/graphql/graphql.utils.js +0 -106
  542. package/esm2015/src/app/core/home/home.js +0 -265
  543. package/esm2015/src/app/core/icon/icon.component.js +0 -32
  544. package/esm2015/src/app/core/icon/icon.module.js +0 -26
  545. package/esm2015/src/app/core/install/install-upgrade-card.component.js +0 -358
  546. package/esm2015/src/app/core/menu/menu.component.js +0 -329
  547. package/esm2015/src/app/core/menu/menu.module.js +0 -28
  548. package/esm2015/src/app/core/offline/update-offline-mode-card.component.js +0 -26
  549. package/esm2015/src/app/core/peer/select-peer.modal.js +0 -134
  550. package/esm2015/src/app/core/register/confirm/confirm.js +0 -86
  551. package/esm2015/src/app/core/register/form/form-register.js +0 -172
  552. package/esm2015/src/app/core/register/modal/modal-register.js +0 -55
  553. package/esm2015/src/app/core/services/account.service.js +0 -1165
  554. package/esm2015/src/app/core/services/auth-guard.service.js +0 -77
  555. package/esm2015/src/app/core/services/base-entity-service.class.js +0 -454
  556. package/esm2015/src/app/core/services/base-graphql-service.class.js +0 -221
  557. package/esm2015/src/app/core/services/config.service.js +0 -385
  558. package/esm2015/src/app/core/services/local-settings.service.js +0 -460
  559. package/esm2015/src/app/core/services/model/account.model.js +0 -50
  560. package/esm2015/src/app/core/services/model/config.model.js +0 -89
  561. package/esm2015/src/app/core/services/model/department.model.js +0 -30
  562. package/esm2015/src/app/core/services/model/entity.decorators.js +0 -104
  563. package/esm2015/src/app/core/services/model/entity.model.js +0 -245
  564. package/esm2015/src/app/core/services/model/peer.model.js +0 -68
  565. package/esm2015/src/app/core/services/model/person.model.js +0 -83
  566. package/esm2015/src/app/core/services/model/referential.model.js +0 -147
  567. package/esm2015/src/app/core/services/model/settings.model.js +0 -75
  568. package/esm2015/src/app/core/services/network.service.js +0 -631
  569. package/esm2015/src/app/core/services/network.utils.js +0 -19
  570. package/esm2015/src/app/core/services/pipes/account.pipes.js +0 -28
  571. package/esm2015/src/app/core/services/pipes/department-to-string.pipe.js +0 -18
  572. package/esm2015/src/app/core/services/pipes/person-to-string.pipe.js +0 -18
  573. package/esm2015/src/app/core/services/pipes/usage-mode.pipes.js +0 -27
  574. package/esm2015/src/app/core/services/platform.service.js +0 -549
  575. package/esm2015/src/app/core/services/storage/entities-storage.service.js +0 -452
  576. package/esm2015/src/app/core/services/storage/entity-store.class.js +0 -461
  577. package/esm2015/src/app/core/services/testing/referential-filter.model.js +0 -23
  578. package/esm2015/src/app/core/services/testing/referential.validator.js +0 -44
  579. package/esm2015/src/app/core/services/validator/account.validator.js +0 -55
  580. package/esm2015/src/app/core/services/validator/base.validator.class.js +0 -48
  581. package/esm2015/src/app/core/services/validator/local-settings.validator.js +0 -72
  582. package/esm2015/src/app/core/services/validator/user-settings.validator.js +0 -30
  583. package/esm2015/src/app/core/settings/settings.page.js +0 -305
  584. package/esm2015/src/app/core/table/actions-column.component.js +0 -74
  585. package/esm2015/src/app/core/table/entities-table-datasource.class.js +0 -405
  586. package/esm2015/src/app/core/table/memory-table.class.js +0 -59
  587. package/esm2015/src/app/core/table/table-select-columns.component.js +0 -44
  588. package/esm2015/src/app/core/table/table.class.js +0 -1677
  589. package/esm2015/src/app/core/table/table.utils.js +0 -13
  590. package/esm2015/src/app/core/table/testing/table.testing.js +0 -242
  591. package/esm2015/src/app/core/table/testing/table.testing.module.js +0 -26
  592. package/esm2015/src/app/core/text-popover/testing/text-popover.testing.js +0 -37
  593. package/esm2015/src/app/core/text-popover/testing/text-popover.testing.module.js +0 -33
  594. package/esm2015/src/app/core/text-popover/text-form.component.js +0 -72
  595. package/esm2015/src/app/core/text-popover/text-popover.component.js +0 -90
  596. package/esm2015/src/app/shared/alerts.js +0 -251
  597. package/esm2015/src/app/shared/audio/audio.js +0 -178
  598. package/esm2015/src/app/shared/dates.js +0 -134
  599. package/esm2015/src/app/shared/directives/autofocus.directive.js +0 -90
  600. package/esm2015/src/app/shared/directives/autotitle.directive.js +0 -27
  601. package/esm2015/src/app/shared/directives/directives.module.js +0 -30
  602. package/esm2015/src/app/shared/directives/drag-and-drop.directive.js +0 -43
  603. package/esm2015/src/app/shared/directives/ng-var.directive.js +0 -32
  604. package/esm2015/src/app/shared/directives/resizable/resizable.component.js +0 -54
  605. package/esm2015/src/app/shared/directives/resizable/resizable.directive.js +0 -34
  606. package/esm2015/src/app/shared/directives/resizable/resizable.module.js +0 -12
  607. package/esm2015/src/app/shared/events.js +0 -61
  608. package/esm2015/src/app/shared/file/csv.utils.js +0 -70
  609. package/esm2015/src/app/shared/file/file.service.js +0 -120
  610. package/esm2015/src/app/shared/file/file.utils.js +0 -116
  611. package/esm2015/src/app/shared/file/images.utils.js +0 -166
  612. package/esm2015/src/app/shared/form/field.component.js +0 -206
  613. package/esm2015/src/app/shared/form/loading-spinner.js +0 -24
  614. package/esm2015/src/app/shared/forms.js +0 -358
  615. package/esm2015/src/app/shared/functions.js +0 -431
  616. package/esm2015/src/app/shared/gesture/hammer.utils.js +0 -2
  617. package/esm2015/src/app/shared/graph/graph-colors.js +0 -205
  618. package/esm2015/src/app/shared/guard/component-dirty.guard.js +0 -61
  619. package/esm2015/src/app/shared/help/help.modal.js +0 -56
  620. package/esm2015/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.js +0 -20
  621. package/esm2015/src/app/shared/hotkeys/hotkeys.service.js +0 -91
  622. package/esm2015/src/app/shared/hotkeys/shared-hotkeys.module.js +0 -29
  623. package/esm2015/src/app/shared/http/http.utils.js +0 -57
  624. package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +0 -825
  625. package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.module.js +0 -46
  626. package/esm2015/src/app/shared/material/autocomplete/testing/autocomplete.test.js +0 -200
  627. package/esm2015/src/app/shared/material/badge/badge-icon.directive.js +0 -135
  628. package/esm2015/src/app/shared/material/badge/badge-icon.module.js +0 -23
  629. package/esm2015/src/app/shared/material/badge/badge-icon.test.js +0 -17
  630. package/esm2015/src/app/shared/material/boolean/boolean.module.js +0 -41
  631. package/esm2015/src/app/shared/material/boolean/material.boolean.js +0 -223
  632. package/esm2015/src/app/shared/material/chips/chips.module.js +0 -45
  633. package/esm2015/src/app/shared/material/chips/material.chips.js +0 -636
  634. package/esm2015/src/app/shared/material/chips/testing/chips.test.js +0 -138
  635. package/esm2015/src/app/shared/material/datetime/datetime.module.js +0 -54
  636. package/esm2015/src/app/shared/material/datetime/material.date.js +0 -375
  637. package/esm2015/src/app/shared/material/datetime/material.dateshort.js +0 -316
  638. package/esm2015/src/app/shared/material/datetime/material.datetime.js +0 -398
  639. package/esm2015/src/app/shared/material/datetime/testing/mat-date-time.test.js +0 -110
  640. package/esm2015/src/app/shared/material/datetime/testing/mat-date.test.js +0 -108
  641. package/esm2015/src/app/shared/material/duration/duration.module.js +0 -40
  642. package/esm2015/src/app/shared/material/duration/material.duration.js +0 -246
  643. package/esm2015/src/app/shared/material/latlong/latlong.utils.js +0 -249
  644. package/esm2015/src/app/shared/material/latlong/material.latlong.js +0 -350
  645. package/esm2015/src/app/shared/material/latlong/material.latlong.module.js +0 -41
  646. package/esm2015/src/app/shared/material/latlong/testing/latlong.test.js +0 -70
  647. package/esm2015/src/app/shared/material/material.module.js +0 -93
  648. package/esm2015/src/app/shared/material/material.testing.module.js +0 -111
  649. package/esm2015/src/app/shared/material/numpad/numpad.append-to-input.directive.js +0 -96
  650. package/esm2015/src/app/shared/material/numpad/numpad.component.js +0 -73
  651. package/esm2015/src/app/shared/material/numpad/numpad.container.js +0 -149
  652. package/esm2015/src/app/shared/material/numpad/numpad.content.js +0 -14
  653. package/esm2015/src/app/shared/material/numpad/numpad.directive.js +0 -148
  654. package/esm2015/src/app/shared/material/numpad/numpad.dom-service.js +0 -37
  655. package/esm2015/src/app/shared/material/numpad/numpad.module.js +0 -39
  656. package/esm2015/src/app/shared/material/numpad/testing/numpad.test.js +0 -44
  657. package/esm2015/src/app/shared/material/paginator/material.paginator-i18n.js +0 -44
  658. package/esm2015/src/app/shared/material/stepper/material.stepper-i18n.js +0 -24
  659. package/esm2015/src/app/shared/material/swipe/material.swipe.js +0 -308
  660. package/esm2015/src/app/shared/material/swipe/swipe.module.js +0 -33
  661. package/esm2015/src/app/shared/material/swipe/testing/swipe.test.js +0 -68
  662. package/esm2015/src/app/shared/observables.js +0 -99
  663. package/esm2015/src/app/shared/pipes/arrays.pipe.js +0 -110
  664. package/esm2015/src/app/shared/pipes/date-diff-duration.pipe.js +0 -50
  665. package/esm2015/src/app/shared/pipes/date-format.pipe.js +0 -43
  666. package/esm2015/src/app/shared/pipes/file-size.pipe.js +0 -58
  667. package/esm2015/src/app/shared/pipes/form.pipes.js +0 -177
  668. package/esm2015/src/app/shared/pipes/highlight.pipe.js +0 -43
  669. package/esm2015/src/app/shared/pipes/latlong-format.pipe.js +0 -36
  670. package/esm2015/src/app/shared/pipes/maps.pipe.js +0 -48
  671. package/esm2015/src/app/shared/pipes/math.pipes.js +0 -44
  672. package/esm2015/src/app/shared/pipes/ng-init.pipe.js +0 -18
  673. package/esm2015/src/app/shared/pipes/pipes.module.js +0 -117
  674. package/esm2015/src/app/shared/pipes/property.pipes.js +0 -98
  675. package/esm2015/src/app/shared/pipes/string.pipes.js +0 -53
  676. package/esm2015/src/app/shared/pipes/translate-context.pipe.js +0 -36
  677. package/esm2015/src/app/shared/platforms.js +0 -45
  678. package/esm2015/src/app/shared/services/entity-service.class.js +0 -8
  679. package/esm2015/src/app/shared/services/job.utils.js +0 -96
  680. package/esm2015/src/app/shared/services/memory-entity-service.class.js +0 -342
  681. package/esm2015/src/app/shared/services/progress-bar.service.js +0 -30
  682. package/esm2015/src/app/shared/services/startable-observable-service.class.js +0 -124
  683. package/esm2015/src/app/shared/services/startable-service.class.js +0 -110
  684. package/esm2015/src/app/shared/services/storage.utils.js +0 -41
  685. package/esm2015/src/app/shared/services/translate-context.service.js +0 -83
  686. package/esm2015/src/app/shared/services/validator-service.class.js +0 -2
  687. package/esm2015/src/app/shared/services.js +0 -61
  688. package/esm2015/src/app/shared/shared-routing.module.js +0 -54
  689. package/esm2015/src/app/shared/shared.module.js +0 -135
  690. package/esm2015/src/app/shared/shared.testing.module.js +0 -33
  691. package/esm2015/src/app/shared/testing/tests.page.js +0 -34
  692. package/esm2015/src/app/shared/toast/toast.testing.js +0 -39
  693. package/esm2015/src/app/shared/toast/toast.testing.module.js +0 -33
  694. package/esm2015/src/app/shared/toast/toasts.js +0 -119
  695. package/esm2015/src/app/shared/toolbar/modal-toolbar.js +0 -53
  696. package/esm2015/src/app/shared/toolbar/toolbar.js +0 -213
  697. package/esm2015/src/app/shared/upload-file/testing/upload-file.testing.js +0 -59
  698. package/esm2015/src/app/shared/upload-file/testing/upload-file.testing.module.js +0 -33
  699. package/esm2015/src/app/shared/upload-file/upload-file-popover.component.js +0 -98
  700. package/esm2015/src/app/shared/upload-file/upload-file.component.js +0 -202
  701. package/esm2015/src/app/shared/upload-file/upload-file.model.js +0 -20
  702. package/esm2015/src/app/shared/validator/form-error-adapter.class.js +0 -99
  703. package/esm2015/src/app/shared/validator/validators.js +0 -537
  704. package/esm2015/src/app/social/job/job.model.js +0 -26
  705. package/esm2015/src/app/social/job/job.module.js +0 -25
  706. package/esm2015/src/app/social/job/job.service.js +0 -66
  707. package/esm2015/src/app/social/job/progression/job-progression.icon.js +0 -208
  708. package/esm2015/src/app/social/job/progression/job-progression.list.js +0 -20
  709. package/esm2015/src/app/social/job/testing/job-progression.testing.js +0 -49
  710. package/esm2015/src/app/social/job/testing/job-progression.testing.service.js +0 -52
  711. package/esm2015/src/app/social/job/testing/job.testing.module.js +0 -25
  712. package/esm2015/src/app/social/message/message.form.js +0 -73
  713. package/esm2015/src/app/social/message/message.modal.js +0 -96
  714. package/esm2015/src/app/social/message/message.model.js +0 -65
  715. package/esm2015/src/app/social/message/message.module.js +0 -25
  716. package/esm2015/src/app/social/message/message.service.js +0 -87
  717. package/esm2015/src/app/social/social.module.js +0 -28
  718. package/esm2015/src/app/social/social.testing.module.js +0 -39
  719. package/esm2015/src/app/social/user-event/notification/user-event-notification.icon.js +0 -106
  720. package/esm2015/src/app/social/user-event/notification/user-event-notification.list.js +0 -203
  721. package/esm2015/src/app/social/user-event/testing/user-event.testing.js +0 -230
  722. package/esm2015/src/app/social/user-event/testing/user-event.testing.model.js +0 -103
  723. package/esm2015/src/app/social/user-event/testing/user-event.testing.module.js +0 -25
  724. package/esm2015/src/app/social/user-event/testing/user-event.testing.service.js +0 -117
  725. package/esm2015/src/app/social/user-event/user-event.model.js +0 -2
  726. package/esm2015/src/app/social/user-event/user-event.module.js +0 -27
  727. package/esm2015/src/app/social/user-event/user-event.service.js +0 -509
  728. package/esm2015/src/environments/environment.class.js +0 -5
  729. package/esm2015/src/environments/environment.js +0 -81
  730. package/esm2015/sumaris-net.ngx-components.js +0 -21
  731. package/fesm2015/sumaris-net.ngx-components.js +0 -30297
  732. package/fesm2015/sumaris-net.ngx-components.js.map +0 -1
  733. package/src/app/core/form/properties.form.d.ts +0 -40
  734. package/src/app/shared/material/badge/badge-icon.directive.d.ts +0 -28
  735. package/src/app/shared/material/badge/badge-icon.module.d.ts +0 -2
  736. package/src/app/shared/material/badge/badge-icon.test.d.ts +0 -9
  737. package/src/app/shared/services/storage.utils.d.ts +0 -13
  738. package/sumaris-net.ngx-components.d.ts +0 -20
  739. package/sumaris-net.ngx-components.metadata.json +0 -1
@@ -1,358 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input } from '@angular/core';
3
- import { AlertController, ModalController, ToastController } from '@ionic/angular';
4
- import { from, Subscription } from 'rxjs';
5
- import { ConfigService } from '../services/config.service';
6
- import { PlatformService } from '../services/platform.service';
7
- import { debounceTime, distinctUntilChanged, filter, map, switchMap } from 'rxjs/operators';
8
- import { NetworkService } from '../services/network.service';
9
- import { CORE_CONFIG_OPTIONS } from '../services/config/core.config';
10
- import { VersionUtils } from '../../shared/version/versions';
11
- import { slideUpDownAnimation } from '../../shared/material/material.animations';
12
- import { isNilOrBlank, isNotEmptyArray, isNotNil, isNotNilOrBlank, sleep } from '../../shared/functions';
13
- import { ENVIRONMENT } from '../../../environments/environment.class';
14
- import { Toasts } from '../../shared/toast/toasts';
15
- import { TranslateService } from '@ngx-translate/core';
16
- import { Peer } from '../services/model/peer.model';
17
- import { MimeTypes } from '../../shared/file/file.utils';
18
- import { UriUtils } from '../../shared/file/uri.utils';
19
- export class AppInstallUpgradeCard {
20
- constructor(modalCtrl, configService, toastController, alertController, translate, cd, platform, network, environment) {
21
- this.modalCtrl = modalCtrl;
22
- this.configService = configService;
23
- this.toastController = toastController;
24
- this.alertController = alertController;
25
- this.translate = translate;
26
- this.cd = cd;
27
- this.platform = platform;
28
- this.network = network;
29
- this.environment = environment;
30
- this._subscription = new Subscription();
31
- this.loading = true;
32
- this.hasDownloader = false;
33
- this.downloading = false;
34
- this.waitingNetwork = false;
35
- this.showUpgradeWarning = true;
36
- this.showOfflineWarning = true;
37
- this.showInstallButton = false;
38
- }
39
- ngOnInit() {
40
- this.offline = this.network.offline;
41
- // Listen pod config
42
- this._subscription.add(from(this.network.ready())
43
- .pipe(debounceTime(1000), switchMap(() => this.configService.config), filter(isNotNil))
44
- .subscribe(config => this.checkNeedInstallOrUpdate(config)));
45
- // Listen network changes
46
- this._subscription.add(this.network.onNetworkStatusChanges
47
- .pipe(
48
- //debounceTime(450),
49
- //tap(() => this.waitingNetwork = false),
50
- map(connectionType => connectionType === 'none'), distinctUntilChanged())
51
- .subscribe(offline => {
52
- if (this.offline !== offline) {
53
- this.offline = offline;
54
- this.markForCheck();
55
- }
56
- }));
57
- }
58
- ngOnDestroy() {
59
- this._subscription.unsubscribe();
60
- this.installLinks = null;
61
- this.upgradeLinks = null;
62
- }
63
- download(event, link) {
64
- return __awaiter(this, void 0, void 0, function* () {
65
- if (!link || !link.url) {
66
- console.error('[install-upgrade-card] Missing required argument \'link.url\'');
67
- return; // Skip
68
- }
69
- // Mark link as downloading
70
- link.downloading = true;
71
- this.markForCheck();
72
- this.listenDownloadJob(link.url, this.platform.download({
73
- uri: link.url,
74
- title: link.title,
75
- filename: link.filename,
76
- mimeType: link.mimeType
77
- }))
78
- .then((location) => {
79
- if (this.platform.canOpenFile)
80
- link.location = location;
81
- link.downloading = false;
82
- })
83
- .catch(() => link.downloading = false)
84
- .then(() => this.markForCheck());
85
- });
86
- }
87
- openFile(event, link) {
88
- return __awaiter(this, void 0, void 0, function* () {
89
- if (!link || !link.location || !link.mimeType) {
90
- console.error('[install-upgrade-card] Missing required argument \'link.location\' or \'link.mimeType\'');
91
- return; // Skip
92
- }
93
- try {
94
- yield this.platform.openFile(link.location, link.mimeType);
95
- }
96
- catch (err) {
97
- console.error('[install-upgrade-card] Cannot open file: ' + (err && err.message || err), err);
98
- }
99
- });
100
- }
101
- tryOnline() {
102
- return __awaiter(this, void 0, void 0, function* () {
103
- this.waitingNetwork = true;
104
- this.markForCheck();
105
- try {
106
- yield this.network.tryOnline({
107
- showLoadingToast: false,
108
- showOnlineToast: true,
109
- showOfflineToast: false
110
- });
111
- }
112
- finally {
113
- this.waitingNetwork = false;
114
- this.markForCheck();
115
- }
116
- });
117
- }
118
- getPlatformName(platform) {
119
- switch (platform) {
120
- case 'android':
121
- return 'Android';
122
- case 'ios':
123
- return 'iOS';
124
- default:
125
- return '';
126
- }
127
- }
128
- asLink(value) {
129
- return value;
130
- }
131
- /* -- private method -- */
132
- checkNeedInstallOrUpdate(config) {
133
- return __awaiter(this, void 0, void 0, function* () {
134
- if (!config)
135
- return; // Skip
136
- console.info('[install-upgrade-card] Check if need to install or upgrade...');
137
- this.hasDownloader = this.platform.canDownload;
138
- try {
139
- const links = this.getLinks(config);
140
- // Check for upgrade
141
- this.upgradeLinks = this.getCompatibleUpgradeLinks(links, config);
142
- if (isNotEmptyArray(this.upgradeLinks)) {
143
- console.info(`[install-upgrade-card] Find upgrade links: ${this.upgradeLinks.map(l => l.url).join(',')}`);
144
- this.installLinks = null;
145
- this.listenDownloadJobs();
146
- }
147
- else {
148
- // Check for install links
149
- this.installLinks = this.getCompatibleInstallLinks(links);
150
- if (isNotEmptyArray(this.installLinks)) {
151
- console.info(`[install-upgrade-card] Find install links ${this.installLinks.map(l => l.url).join(',')}`);
152
- yield sleep(1000); // Add a delay, for animation
153
- }
154
- }
155
- }
156
- finally {
157
- this.loading = false;
158
- this.markForCheck();
159
- }
160
- });
161
- }
162
- getCompatibleInstallLinks(installLinks) {
163
- // Cordova already running: not need to install
164
- if (this.platform.isCordova())
165
- return undefined;
166
- // If mobile web: return all
167
- if (this.platform.isMobileWeb()) {
168
- return installLinks;
169
- }
170
- return undefined;
171
- }
172
- getCompatibleUpgradeLinks(installLinks, config) {
173
- const appVersion = this.environment.version;
174
- const appMinVersionFromPod = config.getProperty(CORE_CONFIG_OPTIONS.APP_MIN_VERSION);
175
- if (!appVersion) {
176
- console.error('Missing value for \'environment.version\': cannot check app compatibility!');
177
- return undefined;
178
- }
179
- const needUpgrade = appMinVersionFromPod && !VersionUtils.isCompatible(appMinVersionFromPod, appVersion);
180
- if (!needUpgrade)
181
- return undefined;
182
- const upgradeLinks = installLinks
183
- .filter(link => this.platform.is('mobileweb') || (link.platform && this.platform.is(link.platform)));
184
- // Use min version as default version
185
- upgradeLinks.forEach(link => {
186
- link.version = link.version || appMinVersionFromPod;
187
- });
188
- return isNotEmptyArray(upgradeLinks) ? upgradeLinks : undefined;
189
- }
190
- getLinks(config) {
191
- const result = [];
192
- // Android
193
- {
194
- // Get URL (from config, or environment)
195
- let url = config.getProperty(CORE_CONFIG_OPTIONS.ANDROID_INSTALL_URL);
196
- if (isNilOrBlank(url))
197
- url = this.environment.defaultAndroidInstallUrl || null;
198
- // Resolve relative URL
199
- const peer = this.network.peer;
200
- if (peer && (url.startsWith('./') || url.startsWith('/'))) {
201
- url = Peer.path(peer, url);
202
- }
203
- const minVersion = config.getProperty(CORE_CONFIG_OPTIONS.APP_MIN_VERSION);
204
- // Compute App name
205
- const name = isNotNilOrBlank(url) && config.label || this.environment.defaultAppName || 'SUMARiS';
206
- if (url) {
207
- let title;
208
- let mimeType;
209
- // Get file name
210
- let filename = UriUtils.getFilename(url);
211
- let version = minVersion || 'latest';
212
- // OK, this is a downloadable APK file (e.g. NOT a link to a playstore)
213
- if (filename === null || filename === void 0 ? void 0 : filename.toLowerCase().endsWith('.apk')) {
214
- // Define mime type
215
- mimeType = MimeTypes.ANDROID_APK;
216
- // Get the file version (if any)
217
- const versionMatches = /-v([1-9][0-9]*\.[0-9]+\.(:?(:?alpha|beta|rc)?[0-9]*))/i.exec(filename);
218
- version = versionMatches && versionMatches[1] || version;
219
- // Compute a new file name, with the version
220
- if (isNotNilOrBlank(name) && version !== 'latest') {
221
- filename = `${name}-v${version}.apk`.toLowerCase();
222
- title = `${name} v${version}`;
223
- }
224
- // Replace 'latest' with the app version, if present in the filename
225
- else if (filename.indexOf('latest') && version !== 'latest') {
226
- filename = filename.replace('latest', version);
227
- }
228
- }
229
- result.push({ name, url, platform: 'android', version, filename, title, mimeType });
230
- }
231
- }
232
- // iOS - TODO
233
- //{
234
- // (...)
235
- //}
236
- return result;
237
- }
238
- listenDownloadJobs() {
239
- // Listening downloading promise, if exists
240
- (this.upgradeLinks || []).forEach(link => {
241
- const job = this.platform.getDownloadingJob(link.url);
242
- if (job) {
243
- link.downloading = true;
244
- this.listenDownloadJob(link.url, job)
245
- .then((location) => {
246
- link.location = location;
247
- link.downloading = false;
248
- })
249
- .catch(() => link.downloading = false)
250
- .then(() => this.markForCheck());
251
- }
252
- });
253
- }
254
- listenDownloadJob(url, job) {
255
- return __awaiter(this, void 0, void 0, function* () {
256
- if (!url || !job)
257
- return; // Skip
258
- try {
259
- // Mark as downloading
260
- if (!this.downloading) {
261
- console.info(`[install-upgrade-card] Asking platform to download '${url}'...`);
262
- this.downloading = true;
263
- this.markForCheck();
264
- }
265
- else {
266
- console.info(`[install-upgrade-card] Platform is already downloading!`);
267
- }
268
- const location = yield job.toPromise();
269
- if (location) {
270
- console.info('[install-upgrade-card] File downloaded at: ' + location);
271
- this.showDownloadCompleteDialog();
272
- }
273
- return location;
274
- }
275
- // Failed: display a toast
276
- catch (err) {
277
- console.error('[install-upgrade-card] Download failed: ' + (err && err.message || err));
278
- this.showDownloadFailedToast(err);
279
- throw err;
280
- }
281
- finally {
282
- this.downloading = false;
283
- this.markForCheck();
284
- }
285
- });
286
- }
287
- showDownloadFailedToast(err) {
288
- return this.showToast({
289
- message: 'ERROR.DOWNLOAD_FAILED',
290
- messageParams: { error: err },
291
- type: 'error',
292
- showCloseButton: true
293
- });
294
- }
295
- showDownloadCompleteDialog() {
296
- return __awaiter(this, void 0, void 0, function* () {
297
- if (!this._subscription)
298
- return; // Skip if component has been destroyed
299
- const translations = yield this.translate.get([
300
- 'INFO.ALERT_HEADER',
301
- 'INFO.UPDATE_APP_DOWNLOADED',
302
- 'COMMON.BTN_CLOSE'
303
- ]).toPromise();
304
- const alert = yield this.alertController.create({
305
- header: translations['INFO.ALERT_HEADER'],
306
- message: translations['INFO.UPDATE_APP_DOWNLOADED'],
307
- buttons: [
308
- {
309
- text: translations['COMMON.BTN_CLOSE'],
310
- role: 'cancel',
311
- cssClass: 'secondary'
312
- }
313
- ]
314
- });
315
- yield alert.present();
316
- yield alert.onDidDismiss();
317
- });
318
- }
319
- markForCheck() {
320
- if (!this._subscription)
321
- return; // Skip if destroyed
322
- this.cd.markForCheck();
323
- }
324
- showToast(opts) {
325
- return __awaiter(this, void 0, void 0, function* () {
326
- if (!this._subscription)
327
- return; // Skip if component has been destroyed
328
- yield Toasts.show(this.toastController, this.translate, opts);
329
- });
330
- }
331
- }
332
- AppInstallUpgradeCard.decorators = [
333
- { type: Component, args: [{
334
- selector: 'app-install-upgrade-card',
335
- template: "\n\n<!-- Offline mode card-->\n<ion-card *ngIf=\"showOfflineWarning && (!loading && offline || waitingNetwork)\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text class=\"ion-text-wrap\" *ngIf=\"!waitingNetwork; else waitingNetworkText\">\n <h4>\n <b *ngIf=\"isLogin; else notLogin\" [innerHTML]=\"'NETWORK.INFO.OFFLINE_OR_UNAUTHORIZED'| translate\"></b>\n <ng-template #notLogin>\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE'| translate\"></b>\n </ng-template>\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.OFFLINE_HELP'|translate\"></small>\n </h3>\n </ion-text>\n <ng-template #waitingNetworkText>\n <ion-text class=\"ion-text-wrap\" [innerHTML]=\"'NETWORK.INFO.RETRY_TO_CONNECT'| translate\"></ion-text>\n </ng-template>\n </ion-col>\n <ion-col size=\"auto\">\n\n <!-- Retry button -->\n <ion-button *ngIf=\"!waitingNetwork; else waitingSpinner\" color=\"tertiary\" class=\"ion-float-end\"\n (click)=\"tryOnline()\">\n <span translate>NETWORK.BTN_CHECK_ALIVE</span>\n </ion-button>\n\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Upgrade links -->\n<ion-card *ngIf=\"showUpgradeWarning && !loading && !offline && upgradeLinks\"\n color=\"accent\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation>\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 <span *ngIf=\"link.version\" [innerHTML]=\"'INFO.UPDATE_APP_TO_VERSION'| translate: link\"></span>\n <span *ngIf=\"!link.version\" [innerHTML]=\"'INFO.UPDATE_APP'| translate: link\"></span>\n </h3>\n <h4>\n <small *ngIf=\"last\" [innerHTML]=\"'INFO.UPDATE_APP_HELP'|translate\"></small>\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\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Install links -->\n<ion-card *ngIf=\"showInstallButton && !loading && !offline && installLinks\"\n color=\"secondary\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation>\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>\n <ion-text class=\"ion-text-wrap\">\n <h3 [innerHTML]=\"'INFO.DOWNLOAD_APP_TITLE'| translate: {name: link.name, platform: getPlatformName(link.platform) }\"></h3>\n <h4><small *ngIf=\"last\" [innerHTML]=\"'INFO.DOWNLOAD_APP_HELP'|translate\"></small></h4>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\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\n <ng-container *ngIf=\"link.filename; else redirectButton\">\n\n <ng-container *ngIf=\"hasDownloader; else webDownloadButton\">\n <!-- Download using platform -->\n <ion-button (click)=\"download($event, asLink(link))\"\n *ngIf=\"!link.location; else openButton\"\n [disabled]=\"link.downloading\"\n color=\"tertiary\" class=\"ion-float-end\">\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\n <!-- Open APK button -->\n <ng-template #openButton>\n <ion-button *ngIf=\"link.location\"\n (click)=\"openFile($event, link)\"\n color=\"tertiary\" class=\"ion-float-end\" >\n <ion-label translate>COMMON.BTN_INSTALL</ion-label>\n </ion-button>\n </ng-template>\n </ng-container>\n\n <!-- Web download button -->\n <ng-template #webDownloadButton>\n <ion-button [download]=\"link.downloadFilename\"\n [href]=\"link.url\"\n color=\"tertiary\" class=\"ion-float-end\" >\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n </ng-template>\n </ng-container>\n\n <!-- Web redirect button -->\n <ng-template #redirectButton>\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 </ng-template>\n</ng-template>\n\n\n<!-- Waiting spinner -->\n<ng-template #waitingSpinner>\n <ion-spinner color=\"light\"></ion-spinner>\n</ng-template>\n",
336
- changeDetection: ChangeDetectionStrategy.OnPush,
337
- animations: [slideUpDownAnimation],
338
- styles: ["ion-text small{font-size:85%}"]
339
- },] }
340
- ];
341
- AppInstallUpgradeCard.ctorParameters = () => [
342
- { type: ModalController },
343
- { type: ConfigService },
344
- { type: ToastController },
345
- { type: AlertController },
346
- { type: TranslateService },
347
- { type: ChangeDetectorRef },
348
- { type: PlatformService },
349
- { type: NetworkService },
350
- { type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] }
351
- ];
352
- AppInstallUpgradeCard.propDecorators = {
353
- isLogin: [{ type: Input }],
354
- showUpgradeWarning: [{ type: Input }],
355
- showOfflineWarning: [{ type: Input }],
356
- showInstallButton: [{ type: Input }]
357
- };
358
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2luc3RhbGwvaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBQ3RILE9BQU8sRUFBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pGLE9BQU8sRUFBQyxJQUFJLEVBQWMsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXBELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyxFQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDcEUsT0FBTyxFQUFtQixNQUFNLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztB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QUFFO29CQUNQO3dCQUNFLElBQUksRUFBRSxZQUFZLENBQUMsa0JBQWtCLENBQUM7d0JBQ3RDLElBQUksRUFBRSxRQUFRO3dCQUNkLFFBQVEsRUFBRSxXQUFXO3FCQUN0QjtpQkFDRjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLE1BQU0sS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdCLENBQUM7S0FBQTtJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxDQUFDLG9CQUFvQjtRQUNyRCxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFYSxTQUFTLENBQUMsSUFBc0I7O1lBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtnQkFBRSxPQUFPLENBQUMsdUNBQXVDO1lBQ3hFLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEUsQ0FBQztLQUFBOzs7WUFqWEYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSwwQkFBMEI7Z0JBQ3BDLHd6S0FBa0Q7Z0JBRWxELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2dCQUMvQyxVQUFVLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQzs7YUFDbkM7OztZQXZDd0IsZUFBZTtZQUdoQyxhQUFhO1lBSHFCLGVBQWU7WUFBakQsZUFBZTtZQWFmLGdCQUFnQjtZQWRTLGlCQUFpQjtZQUsxQyxlQUFlO1lBRWYsY0FBYzs0Q0E2RGpCLE1BQU0sU0FBQyxXQUFXOzs7c0JBZHBCLEtBQUs7aUNBQ0wsS0FBSztpQ0FDTCxLQUFLO2dDQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FsZXJ0Q29udHJvbGxlciwgTW9kYWxDb250cm9sbGVyLCBUb2FzdENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7ZnJvbSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvY29uZmlnLm1vZGVsJztcbmltcG9ydCB7Q29uZmlnU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHtQbGF0Zm9ybVNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge05ldHdvcmtTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHtDT1JFX0NPTkZJR19PUFRJT05TfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcvY29yZS5jb25maWcnO1xuaW1wb3J0IHtWZXJzaW9uVXRpbHN9IGZyb20gJy4uLy4uL3NoYXJlZC92ZXJzaW9uL3ZlcnNpb25zJztcbmltcG9ydCB7c2xpZGVVcERvd25BbmltYXRpb259IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9tYXRlcmlhbC5hbmltYXRpb25zJztcbmltcG9ydCB7aXNOaWxPckJsYW5rLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmssIHNsZWVwfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7RU5WSVJPTk1FTlR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQge1Nob3dUb2FzdE9wdGlvbnMsIFRvYXN0c30gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0L3RvYXN0cyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtQZWVyfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7TWltZVR5cGVzfSBmcm9tICcuLi8uLi9zaGFyZWQvZmlsZS9maWxlLnV0aWxzJztcbmltcG9ydCB7VXJpVXRpbHN9IGZyb20gJy4uLy4uL3NoYXJlZC9maWxlL3VyaS51dGlscyc7XG5cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEluc3RhbGxBcHBMaW5rIHtcbiAgbmFtZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgcGxhdGZvcm0/OiAnYW5kcm9pZCcgfCAnaW9zJztcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgZmlsZW5hbWU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgbWltZVR5cGU/OiBzdHJpbmc7XG4gIGRvd25sb2FkaW5nPzogYm9vbGVhbjtcbiAgbG9jYXRpb24/OiBzdHJpbmc7XG59XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWluc3RhbGwtdXBncmFkZS1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICdpbnN0YWxsLXVwZ3JhZGUtY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2luc3RhbGwtdXBncmFkZS1jYXJkLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBhbmltYXRpb25zOiBbc2xpZGVVcERvd25BbmltYXRpb25dXG59KVxuZXhwb3J0IGNsYXNzIEFwcEluc3RhbGxVcGdyYWRlQ2FyZCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgbG9hZGluZyA9IHRydWU7XG4gIGhhc0Rvd25sb2FkZXIgPSBmYWxzZTtcbiAgZG93bmxvYWRpbmcgPSBmYWxzZTtcbiAgd2FpdGluZ05ldHdvcmsgPSBmYWxzZTtcbiAgaW5zdGFsbExpbmtzOiBJbnN0YWxsQXBwTGlua1tdO1xuICB1cGdyYWRlTGlua3M6IEluc3RhbGxBcHBMaW5rW107XG4gIG9mZmxpbmU6IGJvb2xlYW47XG4gIHVwZ3JhZGVWZXJzaW9uOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgaXNMb2dpbjogYm9vbGVhbjtcbiAgQElucHV0KCkgc2hvd1VwZ3JhZGVXYXJuaW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd09mZmxpbmVXYXJuaW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0luc3RhbGxCdXR0b24gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0Q29udHJvbGxlcjogVG9hc3RDb250cm9sbGVyLFxuICAgIHByaXZhdGUgYWxlcnRDb250cm9sbGVyOiBBbGVydENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHVibGljIHBsYXRmb3JtOiBQbGF0Zm9ybVNlcnZpY2UsXG4gICAgcHVibGljIG5ldHdvcms6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudFxuICApIHtcblxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgICB0aGlzLm9mZmxpbmUgPSB0aGlzLm5ldHdvcmsub2ZmbGluZTtcblxuICAgIC8vIExpc3RlbiBwb2QgY29uZmlnXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIGZyb20odGhpcy5uZXR3b3JrLnJlYWR5KCkpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDAwKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZyksXG4gICAgICAgICAgZmlsdGVyKGlzTm90TmlsKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoY29uZmlnID0+IHRoaXMuY2hlY2tOZWVkSW5zdGFsbE9yVXBkYXRlKGNvbmZpZykpKTtcblxuICAgIC8vIExpc3RlbiBuZXR3b3JrIGNoYW5nZXNcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5uZXR3b3JrLm9uTmV0d29ya1N0YXR1c0NoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy9kZWJvdW5jZVRpbWUoNDUwKSxcbiAgICAgICAgICAvL3RhcCgoKSA9PiB0aGlzLndhaXRpbmdOZXR3b3JrID0gZmFsc2UpLFxuICAgICAgICAgIG1hcChjb25uZWN0aW9uVHlwZSA9PiBjb25uZWN0aW9uVHlwZSA9PT0gJ25vbmUnKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShvZmZsaW5lID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5vZmZsaW5lICE9PSBvZmZsaW5lKSB7XG4gICAgICAgICAgICB0aGlzLm9mZmxpbmUgPSBvZmZsaW5lO1xuICAgICAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaW5zdGFsbExpbmtzID0gbnVsbDtcbiAgICB0aGlzLnVwZ3JhZGVMaW5rcyA9IG51bGw7XG4gIH1cblxuICBhc3luYyBkb3dubG9hZChldmVudDogVUlFdmVudCwgbGluazogSW5zdGFsbEFwcExpbmspIHtcbiAgICBpZiAoIWxpbmsgfHwgIWxpbmsudXJsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbaW5zdGFsbC11cGdyYWRlLWNhcmRdIE1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgXFwnbGluay51cmxcXCcnKTtcbiAgICAgIHJldHVybjsgLy8gU2tpcFxuICAgIH1cblxuICAgIC8vIE1hcmsgbGluayBhcyBkb3dubG9hZGluZ1xuICAgIGxpbmsuZG93bmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0aGlzLmxpc3RlbkRvd25sb2FkSm9iKGxpbmsudXJsLCB0aGlzLnBsYXRmb3JtLmRvd25sb2FkKHtcbiAgICAgIHVyaTogbGluay51cmwsXG4gICAgICB0aXRsZTogbGluay50aXRsZSxcbiAgICAgIGZpbGVuYW1lOiBsaW5rLmZpbGVuYW1lLFxuICAgICAgbWltZVR5cGU6IGxpbmsubWltZVR5cGVcbiAgICB9KSlcbiAgICAgIC50aGVuKChsb2NhdGlvbikgPT4ge1xuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5jYW5PcGVuRmlsZSkgbGluay5sb2NhdGlvbiA9IGxvY2F0aW9uO1xuICAgICAgICBsaW5rLmRvd25sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IGxpbmsuZG93bmxvYWRpbmcgPSBmYWxzZSlcbiAgICAgIC50aGVuKCgpID0+IHRoaXMubWFya0ZvckNoZWNrKCkpO1xuICB9XG5cbiAgYXN5bmMgb3BlbkZpbGUoZXZlbnQ6IFVJRXZlbnQsIGxpbms6IEluc3RhbGxBcHBMaW5rKSB7XG4gICAgaWYgKCFsaW5rIHx8ICFsaW5rLmxvY2F0aW9uIHx8ICFsaW5rLm1pbWVUeXBlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbaW5zdGFsbC11cGdyYWRlLWNhcmRdIE1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgXFwnbGluay5sb2NhdGlvblxcJyBvciBcXCdsaW5rLm1pbWVUeXBlXFwnJyk7XG4gICAgICByZXR1cm47IC8vIFNraXBcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucGxhdGZvcm0ub3BlbkZpbGUobGluay5sb2NhdGlvbiwgbGluay5taW1lVHlwZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tpbnN0YWxsLXVwZ3JhZGUtY2FyZF0gQ2Fubm90IG9wZW4gZmlsZTogJyArIChlcnIgJiYgZXJyLm1lc3NhZ2UgIHx8IGVyciksIGVycik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdHJ5T25saW5lKCkge1xuICAgIHRoaXMud2FpdGluZ05ldHdvcmsgPSB0cnVlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5uZXR3b3JrLnRyeU9ubGluZSh7XG4gICAgICAgIHNob3dMb2FkaW5nVG9hc3Q6IGZhbHNlLFxuICAgICAgICBzaG93T25saW5lVG9hc3Q6IHRydWUsXG4gICAgICAgIHNob3dPZmZsaW5lVG9hc3Q6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICB0aGlzLndhaXRpbmdOZXR3b3JrID0gZmFsc2U7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGdldFBsYXRmb3JtTmFtZShwbGF0Zm9ybTogJ2FuZHJvaWQnfCdpb3MnKSB7XG4gICAgc3dpdGNoIChwbGF0Zm9ybSkge1xuICAgICAgY2FzZSAnYW5kcm9pZCc6XG4gICAgICAgIHJldHVybiAnQW5kcm9pZCc7XG4gICAgICBjYXNlICdpb3MnOlxuICAgICAgICByZXR1cm4gJ2lPUyc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgYXNMaW5rKHZhbHVlOiBhbnkpOiBJbnN0YWxsQXBwTGluayB7XG4gICAgcmV0dXJuIHZhbHVlIGFzIEluc3RhbGxBcHBMaW5rO1xuICB9XG5cbiAgLyogLS0gcHJpdmF0ZSBtZXRob2QgIC0tICovXG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja05lZWRJbnN0YWxsT3JVcGRhdGUoY29uZmlnOiBDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKCFjb25maWcpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgY29uc29sZS5pbmZvKCdbaW5zdGFsbC11cGdyYWRlLWNhcmRdIENoZWNrIGlmIG5lZWQgdG8gaW5zdGFsbCBvciB1cGdyYWRlLi4uJyk7XG5cbiAgICB0aGlzLmhhc0Rvd25sb2FkZXIgPSB0aGlzLnBsYXRmb3JtLmNhbkRvd25sb2FkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxpbmtzID0gdGhpcy5nZXRMaW5rcyhjb25maWcpO1xuXG4gICAgICAvLyBDaGVjayBmb3IgdXBncmFkZVxuICAgICAgdGhpcy51cGdyYWRlTGlua3MgPSB0aGlzLmdldENvbXBhdGlibGVVcGdyYWRlTGlua3MobGlua3MsIGNvbmZpZyk7XG5cbiAgICAgIGlmIChpc05vdEVtcHR5QXJyYXkodGhpcy51cGdyYWRlTGlua3MpKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2luc3RhbGwtdXBncmFkZS1jYXJkXSBGaW5kIHVwZ3JhZGUgbGlua3M6ICR7dGhpcy51cGdyYWRlTGlua3MubWFwKGwgPT4gbC51cmwpLmpvaW4oJywnKX1gKTtcbiAgICAgICAgdGhpcy5pbnN0YWxsTGlua3MgPSBudWxsO1xuICAgICAgICB0aGlzLmxpc3RlbkRvd25sb2FkSm9icygpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIENoZWNrIGZvciBpbnN0YWxsIGxpbmtzXG4gICAgICAgIHRoaXMuaW5zdGFsbExpbmtzID0gdGhpcy5nZXRDb21wYXRpYmxlSW5zdGFsbExpbmtzKGxpbmtzKTtcbiAgICAgICAgaWYgKGlzTm90RW1wdHlBcnJheSh0aGlzLmluc3RhbGxMaW5rcykpIHtcbiAgICAgICAgICBjb25zb2xlLmluZm8oYFtpbnN0YWxsLXVwZ3JhZGUtY2FyZF0gRmluZCBpbnN0YWxsIGxpbmtzICR7dGhpcy5pbnN0YWxsTGlua3MubWFwKGwgPT4gbC51cmwpLmpvaW4oJywnKX1gKTtcbiAgICAgICAgICBhd2FpdCBzbGVlcCgxMDAwKTsgLy8gQWRkIGEgZGVsYXksIGZvciBhbmltYXRpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBhdGlibGVJbnN0YWxsTGlua3MoaW5zdGFsbExpbmtzOiBJbnN0YWxsQXBwTGlua1tdKTogSW5zdGFsbEFwcExpbmtbXSB7XG5cbiAgICAvLyBDb3Jkb3ZhIGFscmVhZHkgcnVubmluZzogbm90IG5lZWQgdG8gaW5zdGFsbFxuICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzQ29yZG92YSgpKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgLy8gSWYgbW9iaWxlIHdlYjogcmV0dXJuIGFsbFxuICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzTW9iaWxlV2ViKCkpIHtcbiAgICAgIHJldHVybiBpbnN0YWxsTGlua3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29tcGF0aWJsZVVwZ3JhZGVMaW5rcyhpbnN0YWxsTGlua3M6IEluc3RhbGxBcHBMaW5rW10sIGNvbmZpZzogQ29uZmlndXJhdGlvbik6IEluc3RhbGxBcHBMaW5rW10ge1xuICAgIGNvbnN0IGFwcFZlcnNpb24gPSB0aGlzLmVudmlyb25tZW50LnZlcnNpb247XG4gICAgY29uc3QgYXBwTWluVmVyc2lvbkZyb21Qb2QgPSBjb25maWcuZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5BUFBfTUlOX1ZFUlNJT04pO1xuXG4gICAgaWYgKCFhcHBWZXJzaW9uKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNaXNzaW5nIHZhbHVlIGZvciBcXCdlbnZpcm9ubWVudC52ZXJzaW9uXFwnOiBjYW5ub3QgY2hlY2sgYXBwIGNvbXBhdGliaWxpdHkhJyk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IG5lZWRVcGdyYWRlID0gYXBwTWluVmVyc2lvbkZyb21Qb2QgJiYgIVZlcnNpb25VdGlscy5pc0NvbXBhdGlibGUoYXBwTWluVmVyc2lvbkZyb21Qb2QsIGFwcFZlcnNpb24pO1xuICAgIGlmICghbmVlZFVwZ3JhZGUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCB1cGdyYWRlTGlua3MgPSBpbnN0YWxsTGlua3NcbiAgICAgIC5maWx0ZXIobGluayA9PiB0aGlzLnBsYXRmb3JtLmlzKCdtb2JpbGV3ZWInKSB8fCAobGluay5wbGF0Zm9ybSAmJiB0aGlzLnBsYXRmb3JtLmlzKGxpbmsucGxhdGZvcm0pKSk7XG5cbiAgICAvLyBVc2UgbWluIHZlcnNpb24gYXMgZGVmYXVsdCB2ZXJzaW9uXG4gICAgdXBncmFkZUxpbmtzLmZvckVhY2gobGluayA9PiB7XG4gICAgICBsaW5rLnZlcnNpb24gPSBsaW5rLnZlcnNpb24gfHwgYXBwTWluVmVyc2lvbkZyb21Qb2Q7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXNOb3RFbXB0eUFycmF5KHVwZ3JhZGVMaW5rcykgPyB1cGdyYWRlTGlua3MgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldExpbmtzKGNvbmZpZzogQ29uZmlndXJhdGlvbik6IEluc3RhbGxBcHBMaW5rW10ge1xuICAgIGNvbnN0IHJlc3VsdDogSW5zdGFsbEFwcExpbmtbXSA9IFtdO1xuXG4gICAgLy8gQW5kcm9pZFxuICAgIHtcbiAgICAgIC8vIEdldCBVUkwgKGZyb20gY29uZmlnLCBvciBlbnZpcm9ubWVudClcbiAgICAgIGxldCB1cmwgPSBjb25maWcuZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5BTkRST0lEX0lOU1RBTExfVVJMKTtcbiAgICAgIGlmIChpc05pbE9yQmxhbmsodXJsKSkgdXJsID0gdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0QW5kcm9pZEluc3RhbGxVcmwgfHwgbnVsbDtcblxuICAgICAgLy8gUmVzb2x2ZSByZWxhdGl2ZSBVUkxcbiAgICAgIGNvbnN0IHBlZXIgPSB0aGlzLm5ldHdvcmsucGVlcjtcbiAgICAgIGlmIChwZWVyICYmICh1cmwuc3RhcnRzV2l0aCgnLi8nKSB8fCB1cmwuc3RhcnRzV2l0aCgnLycpKSkge1xuICAgICAgICB1cmwgPSBQZWVyLnBhdGgocGVlciwgdXJsKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWluVmVyc2lvbiA9IGNvbmZpZy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLkFQUF9NSU5fVkVSU0lPTik7XG5cbiAgICAgIC8vIENvbXB1dGUgQXBwIG5hbWVcbiAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IGlzTm90TmlsT3JCbGFuayh1cmwpICYmIGNvbmZpZy5sYWJlbCB8fCB0aGlzLmVudmlyb25tZW50LmRlZmF1bHRBcHBOYW1lIHx8ICdTVU1BUmlTJztcblxuICAgICAgaWYgKHVybCkge1xuICAgICAgICBsZXQgdGl0bGU6IHN0cmluZztcbiAgICAgICAgbGV0IG1pbWVUeXBlOiBzdHJpbmc7XG5cbiAgICAgICAgLy8gR2V0IGZpbGUgbmFtZVxuICAgICAgICBsZXQgZmlsZW5hbWUgPSBVcmlVdGlscy5nZXRGaWxlbmFtZSh1cmwpO1xuICAgICAgICBsZXQgdmVyc2lvbiA9IG1pblZlcnNpb24gfHwgJ2xhdGVzdCc7XG5cbiAgICAgICAgLy8gT0ssIHRoaXMgaXMgYSBkb3dubG9hZGFibGUgQVBLIGZpbGUgKGUuZy4gTk9UIGEgbGluayB0byBhIHBsYXlzdG9yZSlcbiAgICAgICAgaWYgKGZpbGVuYW1lPy50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCcuYXBrJykpIHtcbiAgICAgICAgICAvLyBEZWZpbmUgbWltZSB0eXBlXG4gICAgICAgICAgbWltZVR5cGUgPSBNaW1lVHlwZXMuQU5EUk9JRF9BUEs7XG5cbiAgICAgICAgICAvLyBHZXQgdGhlIGZpbGUgdmVyc2lvbiAoaWYgYW55KVxuICAgICAgICAgIGNvbnN0IHZlcnNpb25NYXRjaGVzID0gLy12KFsxLTldWzAtOV0qXFwuWzAtOV0rXFwuKDo/KDo/YWxwaGF8YmV0YXxyYyk/WzAtOV0qKSkvaS5leGVjKGZpbGVuYW1lKTtcbiAgICAgICAgICB2ZXJzaW9uID0gdmVyc2lvbk1hdGNoZXMgJiYgdmVyc2lvbk1hdGNoZXNbMV0gfHwgdmVyc2lvbjtcblxuICAgICAgICAgIC8vIENvbXB1dGUgYSBuZXcgZmlsZSBuYW1lLCB3aXRoIHRoZSB2ZXJzaW9uXG4gICAgICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhuYW1lKSAmJiB2ZXJzaW9uICE9PSAnbGF0ZXN0Jykge1xuICAgICAgICAgICAgZmlsZW5hbWUgPSBgJHtuYW1lfS12JHt2ZXJzaW9ufS5hcGtgLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB0aXRsZSA9IGAke25hbWV9IHYke3ZlcnNpb259YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBSZXBsYWNlICdsYXRlc3QnIHdpdGggdGhlIGFwcCB2ZXJzaW9uLCBpZiBwcmVzZW50IGluIHRoZSBmaWxlbmFtZVxuICAgICAgICAgIGVsc2UgaWYgKGZpbGVuYW1lLmluZGV4T2YoJ2xhdGVzdCcpICYmIHZlcnNpb24gIT09ICdsYXRlc3QnKSB7XG4gICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoJ2xhdGVzdCcsIHZlcnNpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdC5wdXNoKHsgbmFtZSwgdXJsLCBwbGF0Zm9ybTogJ2FuZHJvaWQnLCB2ZXJzaW9uLCBmaWxlbmFtZSwgdGl0bGUsIG1pbWVUeXBlIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlPUyAtIFRPRE9cbiAgICAvL3tcbiAgICAvLyAgKC4uLilcbiAgICAvL31cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkRvd25sb2FkSm9icygpIHtcbiAgICAvLyBMaXN0ZW5pbmcgZG93bmxvYWRpbmcgcHJvbWlzZSwgaWYgZXhpc3RzXG4gICAgKHRoaXMudXBncmFkZUxpbmtzIHx8IFtdKS5mb3JFYWNoKGxpbmsgPT4ge1xuICAgICAgY29uc3Qgam9iID0gdGhpcy5wbGF0Zm9ybS5nZXREb3dubG9hZGluZ0pvYihsaW5rLnVybCk7XG4gICAgICBpZiAoam9iKSB7XG4gICAgICAgIGxpbmsuZG93bmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmxpc3RlbkRvd25sb2FkSm9iKGxpbmsudXJsLCBqb2IpXG4gICAgICAgICAgLnRoZW4oKGxvY2F0aW9uKSA9PiB7XG4gICAgICAgICAgICBsaW5rLmxvY2F0aW9uID0gbG9jYXRpb247XG4gICAgICAgICAgICBsaW5rLmRvd25sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKCkgPT4gbGluay5kb3dubG9hZGluZyA9IGZhbHNlKVxuICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMubWFya0ZvckNoZWNrKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsaXN0ZW5Eb3dubG9hZEpvYih1cmw6IHN0cmluZywgam9iOiBPYnNlcnZhYmxlPHN0cmluZz4pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghdXJsIHx8ICFqb2IpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIE1hcmsgYXMgZG93bmxvYWRpbmdcbiAgICAgIGlmICghdGhpcy5kb3dubG9hZGluZykge1xuICAgICAgICBjb25zb2xlLmluZm8oYFtpbnN0YWxsLXVwZ3JhZGUtY2FyZF0gQXNraW5nIHBsYXRmb3JtIHRvIGRvd25sb2FkICcke3VybH0nLi4uYCk7XG4gICAgICAgIHRoaXMuZG93bmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2luc3RhbGwtdXBncmFkZS1jYXJkXSBQbGF0Zm9ybSBpcyBhbHJlYWR5IGRvd25sb2FkaW5nIWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsb2NhdGlvbiA9IGF3YWl0IGpvYi50b1Byb21pc2UoKTtcbiAgICAgIGlmIChsb2NhdGlvbikge1xuICAgICAgICBjb25zb2xlLmluZm8oJ1tpbnN0YWxsLXVwZ3JhZGUtY2FyZF0gRmlsZSBkb3dubG9hZGVkIGF0OiAnICsgbG9jYXRpb24pO1xuICAgICAgICB0aGlzLnNob3dEb3dubG9hZENvbXBsZXRlRGlhbG9nKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgfVxuICAgIC8vIEZhaWxlZDogZGlzcGxheSBhIHRvYXN0XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignW2luc3RhbGwtdXBncmFkZS1jYXJkXSBEb3dubG9hZCBmYWlsZWQ6ICcgKyAoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycikpO1xuICAgICAgdGhpcy5zaG93RG93bmxvYWRGYWlsZWRUb2FzdChlcnIpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMuZG93bmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG93RG93bmxvYWRGYWlsZWRUb2FzdChlcnIpIHtcbiAgICByZXR1cm4gdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgbWVzc2FnZTogJ0VSUk9SLkRPV05MT0FEX0ZBSUxFRCcsXG4gICAgICBtZXNzYWdlUGFyYW1zOiB7ZXJyb3I6IGVycn0sXG4gICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNob3dEb3dubG9hZENvbXBsZXRlRGlhbG9nKCkge1xuICAgIGlmICghdGhpcy5fc3Vic2NyaXB0aW9uKSByZXR1cm47IC8vIFNraXAgaWYgY29tcG9uZW50IGhhcyBiZWVuIGRlc3Ryb3llZFxuXG4gICAgY29uc3QgdHJhbnNsYXRpb25zID0gYXdhaXQgdGhpcy50cmFuc2xhdGUuZ2V0KFtcbiAgICAgICdJTkZPLkFMRVJUX0hFQURFUicsXG4gICAgICAnSU5GTy5VUERBVEVfQVBQX0RPV05MT0FERUQnLFxuICAgICAgJ0NPTU1PTi5CVE5fQ0xPU0UnXG4gICAgXSkudG9Qcm9taXNlKCk7XG4gICAgY29uc3QgYWxlcnQgPSBhd2FpdCB0aGlzLmFsZXJ0Q29udHJvbGxlci5jcmVhdGUoe1xuICAgICAgaGVhZGVyOiB0cmFuc2xhdGlvbnNbJ0lORk8uQUxFUlRfSEVBREVSJ10sXG4gICAgICBtZXNzYWdlOiB0cmFuc2xhdGlvbnNbJ0lORk8uVVBEQVRFX0FQUF9ET1dOTE9BREVEJ10sXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiB0cmFuc2xhdGlvbnNbJ0NPTU1PTi5CVE5fQ0xPU0UnXSxcbiAgICAgICAgICByb2xlOiAnY2FuY2VsJyxcbiAgICAgICAgICBjc3NDbGFzczogJ3NlY29uZGFyeSdcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgYXdhaXQgYWxlcnQucHJlc2VudCgpO1xuICAgIGF3YWl0IGFsZXJ0Lm9uRGlkRGlzbWlzcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrRm9yQ2hlY2soKSB7XG4gICAgaWYgKCF0aGlzLl9zdWJzY3JpcHRpb24pIHJldHVybjsgLy8gU2tpcCBpZiBkZXN0cm95ZWRcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaG93VG9hc3Qob3B0czogU2hvd1RvYXN0T3B0aW9ucykge1xuICAgIGlmICghdGhpcy5fc3Vic2NyaXB0aW9uKSByZXR1cm47IC8vIFNraXAgaWYgY29tcG9uZW50IGhhcyBiZWVuIGRlc3Ryb3llZFxuICAgIGF3YWl0IFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwgb3B0cyk7XG4gIH1cbn1cbiJdfQ==