@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
@@ -0,0 +1,254 @@
1
+ import { isNil, isNotNil } from '../functions';
2
+ /**
3
+ * Define here theme colors
4
+ */
5
+ const rgbArrayMap = {
6
+ white: [255, 255, 255],
7
+ primary: [20, 67, 145],
8
+ secondary: [117, 196, 253],
9
+ tertiary: [91, 94, 244],
10
+ danger: [245, 61, 61],
11
+ light: [244, 245, 248],
12
+ medium: [152, 154, 162],
13
+ dark: [34, 36, 40],
14
+ red: [255, 0, 0],
15
+ green: [0, 255, 0],
16
+ blue: [0, 0, 255]
17
+ };
18
+ // Fill a map of Color objects
19
+ const colorsMap = {};
20
+ /**
21
+ * Useful class for color conversion
22
+ */
23
+ // @dynamic
24
+ export class Color {
25
+ constructor(_rgbArray, _opacity, _name = 'custom') {
26
+ this._rgbArray = _rgbArray;
27
+ this._opacity = _opacity;
28
+ this._name = _name;
29
+ }
30
+ // Helper method, to retrieve a color
31
+ static get(name) {
32
+ return colorsMap[name];
33
+ }
34
+ static parseRgba(rgba) {
35
+ if (!rgba || (!rgba.startsWith('rgb(') && !rgba.startsWith('rgba(')))
36
+ return null;
37
+ // Parse parts
38
+ const parts = rgba
39
+ .replace('rgb(', '')
40
+ .replace('rgba(', '')
41
+ .replace(')', '')
42
+ .split(',');
43
+ if (parts.length !== 3 && parts.length !== 4)
44
+ return null;
45
+ return new Color([+parts[0], +parts[1], +parts[2]], parts.length === 4 && +parts[3] || 1, 'custom');
46
+ }
47
+ get name() {
48
+ return this._name;
49
+ }
50
+ get opacity() {
51
+ return isNotNil(this._opacity) ? this._opacity : 1;
52
+ }
53
+ get rgb() {
54
+ return this._rgbArray;
55
+ }
56
+ get r() {
57
+ return this._rgbArray[0];
58
+ }
59
+ get g() {
60
+ return this._rgbArray[1];
61
+ }
62
+ get b() {
63
+ return this._rgbArray[2];
64
+ }
65
+ rgba(opacity) {
66
+ opacity = isNotNil(opacity) ? opacity : this._opacity;
67
+ if (isNil(opacity) || opacity < 0 || opacity > 1) {
68
+ return 'rgb(' + this._rgbArray.join(',') + ')';
69
+ }
70
+ return 'rgba(' + this._rgbArray.join(',') + ',' + opacity + ')';
71
+ }
72
+ }
73
+ Color.transparent = function () {
74
+ return new Color([0, 0, 0], 0, 'translucent');
75
+ };
76
+ /**
77
+ * Helper class for colors scale
78
+ */
79
+ // @dynamic
80
+ export class ColorScale {
81
+ constructor(colorArray, options) {
82
+ this.colorArray = colorArray;
83
+ options = options || {};
84
+ // reserved last colors for value > max
85
+ const nbIntervalBeforeUpper = !options.upperMax ? colorArray.length : (colorArray.length - 1);
86
+ this._min = options.min || 0;
87
+ this._max = options.max || nbIntervalBeforeUpper;
88
+ this._rangeSize = Math.round((this._max - this._min) / nbIntervalBeforeUpper);
89
+ this._legendItems = this.computeLegend();
90
+ }
91
+ static default() {
92
+ return ColorScale.custom(25);
93
+ }
94
+ /**
95
+ * Create a array with the given color
96
+ **/
97
+ static fix(length, colorName) {
98
+ return Array.apply(null, Array(length || 25))
99
+ .map(String.prototype.valueOf, Color.get(colorName || 'primary').rgba(0.5));
100
+ }
101
+ get min() {
102
+ return this._min;
103
+ }
104
+ get max() {
105
+ return this._max;
106
+ }
107
+ get legend() {
108
+ return {
109
+ items: this._legendItems
110
+ };
111
+ }
112
+ getValueColor(value) {
113
+ const index = Math.floor(value * (this.colorArray.length - 1) / this._max);
114
+ return this.colorArray[index];
115
+ }
116
+ computeLegend() {
117
+ return this.colorArray.map((color, index) => {
118
+ const start = index * this._rangeSize;
119
+ const end = start + this._rangeSize;
120
+ return {
121
+ color,
122
+ label: (end < this._max) ? `${start.toLocaleString()} - ${end.toLocaleString()}` : ` >= ${start}`
123
+ };
124
+ });
125
+ }
126
+ }
127
+ ColorScale.custom = (count, options) => {
128
+ options = options || {};
129
+ return new ColorScale(linearColorGradientWithIntermediate(count, {
130
+ opacity: options.opacity,
131
+ startColor: options.startColor || undefined,
132
+ mainColor: options.mainColor || undefined,
133
+ mainColorIndex: isNotNil(options.mainColorIndex) ? options.mainColorIndex : undefined,
134
+ endColor: options.endColor || undefined,
135
+ format: options.format
136
+ }), options);
137
+ };
138
+ // Fill colorsMap
139
+ Object.getOwnPropertyNames(rgbArrayMap)
140
+ .forEach((key) => {
141
+ colorsMap[key] = new Color(rgbArrayMap[key], 1, key);
142
+ });
143
+ // Internal function
144
+ function state2side(state) {
145
+ switch (state) {
146
+ case 0:
147
+ return 0;
148
+ case 1:
149
+ return -1;
150
+ case 2:
151
+ return 0;
152
+ case 3:
153
+ return 1;
154
+ }
155
+ }
156
+ const SCALE_OPTIONS_DEFAULT = {
157
+ startColor: rgbArrayMap.red,
158
+ startStates: [0, 2, 3],
159
+ startStepsFn: (defaultStateSize) => [
160
+ Math.round((rgbArrayMap.red[0] - 50) / defaultStateSize),
161
+ Math.round((255 - rgbArrayMap.red[1]) / defaultStateSize),
162
+ Math.round((255 - rgbArrayMap.red[2]) / defaultStateSize)
163
+ ]
164
+ };
165
+ /**
166
+ * Internal function, that create a colors scale, using iteration
167
+ *
168
+ * @param count
169
+ * @param opacity
170
+ * @param startColor
171
+ * @param startState
172
+ * @returns
173
+ */
174
+ function linearColorGradientWithIntermediate(count, options) {
175
+ options = options || {};
176
+ // From [0,1]
177
+ options.opacity = (options.opacity > 0 && options.opacity < 1) ? options.opacity : 1;
178
+ options.startColor = options.startColor || [255, 255, 190]; // default start = creme
179
+ options.mainColorIndex = options.mainColorIndex && options.mainColorIndex < count - 1 ? options.mainColorIndex : count - 1;
180
+ options.endColor = options.endColor || [255, 0, 0]; // default main = red
181
+ options.format = options.format || 'rgb';
182
+ if (!options.mainColor) {
183
+ return linearColorGradient(count, {
184
+ opacity: options.opacity,
185
+ startColor: options.startColor,
186
+ endColor: options.endColor,
187
+ format: options.format
188
+ });
189
+ }
190
+ else {
191
+ // Step 1: startColor -> mainColor
192
+ const result = linearColorGradient(options.mainColorIndex + 1, {
193
+ opacity: options.opacity,
194
+ startColor: options.startColor,
195
+ endColor: options.mainColor,
196
+ format: options.format
197
+ });
198
+ // Step 2: mainColor -> endColor
199
+ if (options.mainColorIndex < count - 1) {
200
+ return result.concat(linearColorGradient(count - options.mainColorIndex, {
201
+ opacity: options.opacity,
202
+ startColor: options.mainColor,
203
+ endColor: options.endColor,
204
+ format: options.format
205
+ }));
206
+ }
207
+ else {
208
+ return result;
209
+ }
210
+ }
211
+ }
212
+ function linearColorGradient(count, options) {
213
+ options = options || {};
214
+ // From [0,1]
215
+ options.opacity = (options.opacity > 0 && options.opacity < 1) ? options.opacity : 1;
216
+ options.startColor = options.startColor || [255, 255, 255]; // default start = white
217
+ options.endColor = options.endColor || [255, 0, 0]; // default end = red
218
+ options.format = options.format || 'rgb';
219
+ const result = [];
220
+ const color = options.startColor.slice(); // copy the start color
221
+ const delta = [
222
+ Math.round((options.endColor[0] - options.startColor[0]) / count),
223
+ Math.round((options.endColor[1] - options.startColor[1]) / count),
224
+ Math.round((options.endColor[2] - options.startColor[2]) / count)
225
+ ];
226
+ for (let i = 0; i < count - 1; i++) {
227
+ for (let j = 0; j < 3; j++) {
228
+ color[j] += delta[j];
229
+ }
230
+ result.push(color.slice());
231
+ }
232
+ // Force last color = end color
233
+ result.push(options.endColor.slice());
234
+ // Output as array
235
+ if (options.format === 'array') {
236
+ return result;
237
+ }
238
+ // Output as rgb(r,g,b) string
239
+ if (options.format === 'rgb') {
240
+ if (options.opacity >= 1) {
241
+ return result.map(color => 'rgb(' + color.join(',') + ')');
242
+ }
243
+ else {
244
+ return result.map(color => 'rgba(' + color.concat(options.opacity).join(',') + ')');
245
+ }
246
+ }
247
+ // Output as hex
248
+ // TODO
249
+ // return result.map(color => {
250
+ // return "rgb(" + color.join(',') + ")";
251
+ // });
252
+ return result;
253
+ }
254
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGgtY29sb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZ3JhcGgvZ3JhcGgtY29sb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBUzdDOztHQUVHO0FBQ0gsTUFBTSxXQUFXLEdBQUc7SUFDbEIsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDdEIsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDdEIsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDMUIsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDdkIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDckIsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDdEIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDdkIsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEIsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDbEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7Q0FDbEIsQ0FBQztBQUVGLDhCQUE4QjtBQUM5QixNQUFNLFNBQVMsR0FBNkIsRUFBRSxDQUFDO0FBRy9DOztHQUVHO0FBQ0gsV0FBVztBQUNYLE1BQU0sT0FBTyxLQUFLO0lBNEJoQixZQUNVLFNB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dGVudCI6WyJpbXBvcnQge1ByZWRlZmluZWRDb2xvcnN9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7aXNOaWwsIGlzTm90TmlsfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuXG5leHBvcnQgZGVjbGFyZSB0eXBlIENvbG9yTmFtZSA9IFByZWRlZmluZWRDb2xvcnMgfFxuICAnd2hpdGUnXG4gIHwgJ3JlZCdcbiAgfCAnZ3JlZW4nXG4gIHwgJ2JsdWUnO1xuXG5cbi8qKlxuICogRGVmaW5lIGhlcmUgdGhlbWUgY29sb3JzXG4gKi9cbmNvbnN0IHJnYkFycmF5TWFwID0ge1xuICB3aGl0ZTogWzI1NSwgMjU1LCAyNTVdLFxuICBwcmltYXJ5OiBbMjAsIDY3LCAxNDVdLCAvLyBva1xuICBzZWNvbmRhcnk6IFsxMTcsIDE5NiwgMjUzXSwgLy8gb2tcbiAgdGVydGlhcnk6IFs5MSwgOTQsIDI0NF0sIC8vIG9rXG4gIGRhbmdlcjogWzI0NSwgNjEsIDYxXSwgLy8gb2tcbiAgbGlnaHQ6IFsyNDQsIDI0NSwgMjQ4XSwgLy8gb2tcbiAgbWVkaXVtOiBbMTUyLCAxNTQsIDE2Ml0sIC8vIG9rXG4gIGRhcms6IFszNCwgMzYsIDQwXSwgLy8gb2tcbiAgcmVkOiBbMjU1LCAwLCAwXSxcbiAgZ3JlZW46IFswLCAyNTUsIDBdLFxuICBibHVlOiBbMCwgMCwgMjU1XVxufTtcblxuLy8gRmlsbCBhIG1hcCBvZiBDb2xvciBvYmplY3RzXG5jb25zdCBjb2xvcnNNYXA6IHsgW2tleTogc3RyaW5nXTogQ29sb3IgfSA9IHt9O1xuXG5cbi8qKlxuICogVXNlZnVsIGNsYXNzIGZvciBjb2xvciBjb252ZXJzaW9uXG4gKi9cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgQ29sb3Ige1xuXG4gIC8vIEhlbHBlciBtZXRob2QsIHRvIHJldHJpZXZlIGEgY29sb3JcbiAgc3RhdGljIGdldChuYW1lOiBDb2xvck5hbWUpOiBDb2xvciB7XG4gICAgcmV0dXJuIGNvbG9yc01hcFtuYW1lXSBhcyBDb2xvcjtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZVJnYmEocmdiYTogc3RyaW5nKTogQ29sb3J8bnVsbHtcbiAgICAgIGlmICghcmdiYSB8fCAoIXJnYmEuc3RhcnRzV2l0aCgncmdiKCcpICYmICFyZ2JhLnN0YXJ0c1dpdGgoJ3JnYmEoJykpKSByZXR1cm4gbnVsbDtcblxuICAgICAgLy8gUGFyc2UgcGFydHNcbiAgICAgIGNvbnN0IHBhcnRzID0gcmdiYVxuICAgICAgICAucmVwbGFjZSgncmdiKCcsICcnKVxuICAgICAgICAucmVwbGFjZSgncmdiYSgnLCAnJylcbiAgICAgICAgLnJlcGxhY2UoJyknLCAnJylcbiAgICAgICAgLnNwbGl0KCcsJyk7XG5cbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDMgJiYgcGFydHMubGVuZ3RoICE9PSA0KSByZXR1cm4gbnVsbDtcblxuICAgICAgcmV0dXJuIG5ldyBDb2xvcihbK3BhcnRzWzBdLCArcGFydHNbMV0sICtwYXJ0c1syXV0sXG4gICAgICAgIHBhcnRzLmxlbmd0aCA9PT0gNCAmJiArcGFydHNbM10gfHwgMSxcbiAgICAgICAgJ2N1c3RvbScpO1xuICB9XG5cbiAgc3RhdGljIHRyYW5zcGFyZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihbMCwwLDBdLCAwLCAndHJhbnNsdWNlbnQnKTtcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9yZ2JBcnJheTogbnVtYmVyW10sXG4gICAgcHJpdmF0ZSBfb3BhY2l0eT86IG51bWJlcixcbiAgICBwcml2YXRlIF9uYW1lOiBzdHJpbmcgPSAnY3VzdG9tJ1xuICApIHtcbiAgfVxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG4gIGdldCBvcGFjaXR5KCk6IG51bWJlcntcbiAgICByZXR1cm4gaXNOb3ROaWwodGhpcy5fb3BhY2l0eSkgPyB0aGlzLl9vcGFjaXR5IDogMTtcbiAgfVxuICBnZXQgcmdiKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fcmdiQXJyYXk7XG4gIH1cblxuICBnZXQgcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yZ2JBcnJheVswXTtcbiAgfVxuXG4gIGdldCBnKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JnYkFycmF5WzFdO1xuICB9XG5cbiAgZ2V0IGIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcmdiQXJyYXlbMl07XG4gIH1cblxuICByZ2JhKG9wYWNpdHk/OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIG9wYWNpdHkgPSBpc05vdE5pbChvcGFjaXR5KSA/IG9wYWNpdHkgOiB0aGlzLl9vcGFjaXR5O1xuICAgIGlmIChpc05pbChvcGFjaXR5KSB8fCBvcGFjaXR5IDwgMCB8fCBvcGFjaXR5ID4gMSkge1xuICAgICAgcmV0dXJuICdyZ2IoJyArIHRoaXMuX3JnYkFycmF5LmpvaW4oJywnKSArICcpJztcbiAgICB9XG4gICAgcmV0dXJuICdyZ2JhKCcgKyB0aGlzLl9yZ2JBcnJheS5qb2luKCcsJykgKyAnLCcgKyBvcGFjaXR5ICsgJyknO1xuICB9XG5cbn1cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENvbG9yR3JhZGllbnRPcHRpb25zIHtcbiAgb3BhY2l0eT86IG51bWJlcjtcbiAgc3RhcnRDb2xvcj86IG51bWJlcltdO1xuICBtYWluQ29sb3I/OiBudW1iZXJbXTtcbiAgbWFpbkNvbG9ySW5kZXg/OiBudW1iZXI7XG4gIGVuZENvbG9yPzogbnVtYmVyW107XG4gIGZvcm1hdD86ICdyZ2InfCdoZXgnfCdhcnJheSc7XG59XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBDb2xvclNjYWxlT3B0aW9ucyBleHRlbmRzIENvbG9yR3JhZGllbnRPcHRpb25ze1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbiAgdXBwZXJNYXg/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ29sb3JTY2FsZUxlZ2VuZEl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICBjb2xvcjogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ29sb3JTY2FsZUxlZ2VuZCB7XG4gIGl0ZW1zOiBDb2xvclNjYWxlTGVnZW5kSXRlbVtdO1xufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgY29sb3JzIHNjYWxlXG4gKi9cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgQ29sb3JTY2FsZSB7XG5cbiAgc3RhdGljIGN1c3RvbSA9IChjb3VudDogbnVtYmVyLCBvcHRpb25zPzogQ29sb3JTY2FsZU9wdGlvbnMpID0+IHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICByZXR1cm4gbmV3IENvbG9yU2NhbGUoXG4gICAgICBsaW5lYXJDb2xvckdyYWRpZW50V2l0aEludGVybWVkaWF0ZShjb3VudCwge1xuICAgICAgICBvcGFjaXR5OiBvcHRpb25zLm9wYWNpdHksXG4gICAgICAgIHN0YXJ0Q29sb3I6IG9wdGlvbnMuc3RhcnRDb2xvciB8fCB1bmRlZmluZWQsXG4gICAgICAgIG1haW5Db2xvcjogb3B0aW9ucy5tYWluQ29sb3IgfHwgdW5kZWZpbmVkLFxuICAgICAgICBtYWluQ29sb3JJbmRleDogaXNOb3ROaWwob3B0aW9ucy5tYWluQ29sb3JJbmRleCkgPyBvcHRpb25zLm1haW5Db2xvckluZGV4IDogdW5kZWZpbmVkLFxuICAgICAgICBlbmRDb2xvcjogb3B0aW9ucy5lbmRDb2xvciB8fCB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1hdDogb3B0aW9ucy5mb3JtYXRcbiAgICAgIH0pIGFzIHN0cmluZ1tdLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHQoKSB7XG4gICAgcmV0dXJuIENvbG9yU2NhbGUuY3VzdG9tKDI1KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBhcnJheSB3aXRoIHRoZSBnaXZlbiBjb2xvclxuICAgKiovXG4gIHN0YXRpYyBmaXgobGVuZ3RoPzogbnVtYmVyLCBjb2xvck5hbWU/OiBDb2xvck5hbWUpOiBhbnlbXSB7XG4gICAgcmV0dXJuIEFycmF5LmFwcGx5KG51bGwsIEFycmF5KGxlbmd0aCB8fCAyNSkpXG4gICAgICAubWFwKFN0cmluZy5wcm90b3R5cGUudmFsdWVPZiwgQ29sb3IuZ2V0KGNvbG9yTmFtZSB8fCAncHJpbWFyeScpLnJnYmEoMC41KSk7XG4gIH1cblxuICBwcml2YXRlIF9taW46IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWF4OiBudW1iZXI7XG4gIHByaXZhdGUgX3JhbmdlU2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIF9sZWdlbmRJdGVtczogQ29sb3JTY2FsZUxlZ2VuZEl0ZW1bXTtcblxuICBnZXQgbWluKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgfVxuICBnZXQgbWF4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29sb3JBcnJheTogc3RyaW5nW10sIG9wdGlvbnM/OiBDb2xvclNjYWxlT3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIC8vIHJlc2VydmVkIGxhc3QgY29sb3JzIGZvciB2YWx1ZSA+IG1heFxuICAgIGNvbnN0IG5iSW50ZXJ2YWxCZWZvcmVVcHBlciA9ICFvcHRpb25zLnVwcGVyTWF4ID8gY29sb3JBcnJheS5sZW5ndGggOiAoY29sb3JBcnJheS5sZW5ndGggLSAxKTtcbiAgICB0aGlzLl9taW4gPSBvcHRpb25zLm1pbiB8fCAwO1xuICAgIHRoaXMuX21heCA9IG9wdGlvbnMubWF4IHx8IG5iSW50ZXJ2YWxCZWZvcmVVcHBlcjtcbiAgICB0aGlzLl9yYW5nZVNpemUgPSBNYXRoLnJvdW5kKCh0aGlzLl9tYXggLSB0aGlzLl9taW4pIC8gbmJJbnRlcnZhbEJlZm9yZVVwcGVyKTtcbiAgICB0aGlzLl9sZWdlbmRJdGVtcyA9IHRoaXMuY29tcHV0ZUxlZ2VuZCgpO1xuICB9XG5cbiAgZ2V0IGxlZ2VuZCgpOiBDb2xvclNjYWxlTGVnZW5kIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHRoaXMuX2xlZ2VuZEl0ZW1zXG4gICAgfTtcbiAgfVxuXG4gIGdldFZhbHVlQ29sb3IodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKHZhbHVlICogKHRoaXMuY29sb3JBcnJheS5sZW5ndGggLSAxKSAvIHRoaXMuX21heCk7XG4gICAgcmV0dXJuIHRoaXMuY29sb3JBcnJheVtpbmRleF07XG4gIH1cblxuICBwcm90ZWN0ZWQgY29tcHV0ZUxlZ2VuZCgpOiBDb2xvclNjYWxlTGVnZW5kSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5jb2xvckFycmF5Lm1hcCgoY29sb3IsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4ICogdGhpcy5fcmFuZ2VTaXplO1xuICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyB0aGlzLl9yYW5nZVNpemU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcixcbiAgICAgICAgbGFiZWw6IChlbmQgPCB0aGlzLl9tYXgpID8gYCR7c3RhcnQudG9Mb2NhbGVTdHJpbmcoKX0gLSAke2VuZC50b0xvY2FsZVN0cmluZygpfWAgOiBgID49ICR7c3RhcnR9YFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxufVxuXG5cbi8vIEZpbGwgY29sb3JzTWFwXG5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyZ2JBcnJheU1hcClcbiAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGNvbG9yc01hcFtrZXldID0gbmV3IENvbG9yKHJnYkFycmF5TWFwW2tleV0sIDEsIGtleSk7XG4gIH0pO1xuXG4vLyBJbnRlcm5hbCBmdW5jdGlvblxuZnVuY3Rpb24gc3RhdGUyc2lkZShzdGF0ZSkge1xuICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIDA7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIC0xO1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiAwO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiAxO1xuICB9XG59XG5cblxuY29uc3QgU0NBTEVfT1BUSU9OU19ERUZBVUxUID0ge1xuICBzdGFydENvbG9yOiByZ2JBcnJheU1hcC5yZWQsXG4gIHN0YXJ0U3RhdGVzOiBbMCwgMiwgM10sIC8vIFI9a2VlcCwgVj1rZWVwLCBCPWluY3JlYXNlXG4gIHN0YXJ0U3RlcHNGbjogKGRlZmF1bHRTdGF0ZVNpemU6IG51bWJlcikgPT4gW1xuICAgICAgTWF0aC5yb3VuZCgocmdiQXJyYXlNYXAucmVkWzBdIC0gNTApIC8gZGVmYXVsdFN0YXRlU2l6ZSksXG4gICAgICBNYXRoLnJvdW5kKCgyNTUgLSByZ2JBcnJheU1hcC5yZWRbMV0pIC8gZGVmYXVsdFN0YXRlU2l6ZSksXG4gICAgICBNYXRoLnJvdW5kKCgyNTUgLSByZ2JBcnJheU1hcC5yZWRbMl0pIC8gZGVmYXVsdFN0YXRlU2l6ZSlcbiAgICBdXG59O1xuXG4vKipcbiAqIEludGVybmFsIGZ1bmN0aW9uLCB0aGF0IGNyZWF0ZSBhIGNvbG9ycyBzY2FsZSwgdXNpbmcgaXRlcmF0aW9uXG4gKlxuICogQHBhcmFtIGNvdW50XG4gKiBAcGFyYW0gb3BhY2l0eVxuICogQHBhcmFtIHN0YXJ0Q29sb3JcbiAqIEBwYXJhbSBzdGFydFN0YXRlXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiBsaW5lYXJDb2xvckdyYWRpZW50V2l0aEludGVybWVkaWF0ZShjb3VudDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz86IENvbG9yR3JhZGllbnRPcHRpb25zKTogYW55W10ge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBGcm9tIFswLDFdXG4gIG9wdGlvbnMub3BhY2l0eSA9IChvcHRpb25zLm9wYWNpdHkgPiAwICYmIG9wdGlvbnMub3BhY2l0eSA8IDEpID8gb3B0aW9ucy5vcGFjaXR5IDogMTtcbiAgb3B0aW9ucy5zdGFydENvbG9yID0gb3B0aW9ucy5zdGFydENvbG9yIHx8IFsyNTUsIDI1NSwgMTkwXTsgLy8gZGVmYXVsdCBzdGFydCA9IGNyZW1lXG4gIG9wdGlvbnMubWFpbkNvbG9ySW5kZXggPSBvcHRpb25zLm1haW5Db2xvckluZGV4ICYmIG9wdGlvbnMubWFpbkNvbG9ySW5kZXggPCBjb3VudCAtIDEgPyBvcHRpb25zLm1haW5Db2xvckluZGV4IDogY291bnQgLSAxO1xuICBvcHRpb25zLmVuZENvbG9yID0gb3B0aW9ucy5lbmRDb2xvciB8fCBbMjU1LCAwLCAwXTsgLy8gZGVmYXVsdCBtYWluID0gcmVkXG4gIG9wdGlvbnMuZm9ybWF0ID0gb3B0aW9ucy5mb3JtYXQgfHwgJ3JnYic7XG5cbiAgaWYgKCFvcHRpb25zLm1haW5Db2xvcikge1xuICAgIHJldHVybiBsaW5lYXJDb2xvckdyYWRpZW50KGNvdW50LCB7XG4gICAgICBvcGFjaXR5OiBvcHRpb25zLm9wYWNpdHksXG4gICAgICBzdGFydENvbG9yOiBvcHRpb25zLnN0YXJ0Q29sb3IsXG4gICAgICBlbmRDb2xvcjogb3B0aW9ucy5lbmRDb2xvcixcbiAgICAgIGZvcm1hdDogb3B0aW9ucy5mb3JtYXRcbiAgICB9KTtcbiAgfVxuXG4gIGVsc2Uge1xuICAgIC8vIFN0ZXAgMTogc3RhcnRDb2xvciAtPiBtYWluQ29sb3JcbiAgICBjb25zdCByZXN1bHQgPSBsaW5lYXJDb2xvckdyYWRpZW50KG9wdGlvbnMubWFpbkNvbG9ySW5kZXggKyAxLCB7XG4gICAgICBvcGFjaXR5OiBvcHRpb25zLm9wYWNpdHksXG4gICAgICBzdGFydENvbG9yOiBvcHRpb25zLnN0YXJ0Q29sb3IsXG4gICAgICBlbmRDb2xvcjogb3B0aW9ucy5tYWluQ29sb3IsXG4gICAgICBmb3JtYXQ6IG9wdGlvbnMuZm9ybWF0XG4gICAgfSk7XG5cbiAgICAvLyBTdGVwIDI6IG1haW5Db2xvciAtPiBlbmRDb2xvclxuICAgIGlmIChvcHRpb25zLm1haW5Db2xvckluZGV4IDwgY291bnQgLSAxKSB7XG4gICAgICByZXR1cm4gcmVzdWx0LmNvbmNhdChcbiAgICAgICAgbGluZWFyQ29sb3JHcmFkaWVudChjb3VudCAtIG9wdGlvbnMubWFpbkNvbG9ySW5kZXgsIHtcbiAgICAgICAgICBvcGFjaXR5OiBvcHRpb25zLm9wYWNpdHksXG4gICAgICAgICAgc3RhcnRDb2xvcjogb3B0aW9ucy5tYWluQ29sb3IsXG4gICAgICAgICAgZW5kQ29sb3I6IG9wdGlvbnMuZW5kQ29sb3IsXG4gICAgICAgICAgZm9ybWF0OiBvcHRpb25zLmZvcm1hdFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbGluZWFyQ29sb3JHcmFkaWVudChjb3VudDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPzogQ29sb3JHcmFkaWVudE9wdGlvbnMpOiBhbnlbXSB7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gRnJvbSBbMCwxXVxuICBvcHRpb25zLm9wYWNpdHkgPSAob3B0aW9ucy5vcGFjaXR5ID4gMCAmJiBvcHRpb25zLm9wYWNpdHkgPCAxKSA/IG9wdGlvbnMub3BhY2l0eSA6IDE7XG4gIG9wdGlvbnMuc3RhcnRDb2xvciA9IG9wdGlvbnMuc3RhcnRDb2xvciB8fCBbMjU1LCAyNTUsIDI1NV07IC8vIGRlZmF1bHQgc3RhcnQgPSB3aGl0ZVxuICBvcHRpb25zLmVuZENvbG9yID0gb3B0aW9ucy5lbmRDb2xvciB8fCBbMjU1LCAwLCAwXTsgLy8gZGVmYXVsdCBlbmQgPSByZWRcbiAgb3B0aW9ucy5mb3JtYXQgPSBvcHRpb25zLmZvcm1hdCB8fCAncmdiJztcblxuICBjb25zdCByZXN1bHQ6IG51bWJlcltdW10gPSBbXTtcbiAgY29uc3QgY29sb3IgPSBvcHRpb25zLnN0YXJ0Q29sb3Iuc2xpY2UoKTsgLy8gY29weSB0aGUgc3RhcnQgY29sb3JcbiAgY29uc3QgZGVsdGEgPSBbXG4gICAgTWF0aC5yb3VuZCgob3B0aW9ucy5lbmRDb2xvclswXSAtIG9wdGlvbnMuc3RhcnRDb2xvclswXSkgLyBjb3VudCksXG4gICAgTWF0aC5yb3VuZCgob3B0aW9ucy5lbmRDb2xvclsxXSAtIG9wdGlvbnMuc3RhcnRDb2xvclsxXSkgLyBjb3VudCksXG4gICAgTWF0aC5yb3VuZCgob3B0aW9ucy5lbmRDb2xvclsyXSAtIG9wdGlvbnMuc3RhcnRDb2xvclsyXSkgLyBjb3VudClcbiAgXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50IC0gMTsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCAzOyBqKyspIHtcbiAgICAgIGNvbG9yW2pdICs9IGRlbHRhW2pdO1xuICAgIH1cbiAgICByZXN1bHQucHVzaChjb2xvci5zbGljZSgpKTtcbiAgfVxuXG4gIC8vIEZvcmNlIGxhc3QgY29sb3IgPSBlbmQgY29sb3JcbiAgcmVzdWx0LnB1c2gob3B0aW9ucy5lbmRDb2xvci5zbGljZSgpKTtcblxuICAvLyBPdXRwdXQgYXMgYXJyYXlcbiAgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAnYXJyYXknKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIE91dHB1dCBhcyByZ2IocixnLGIpIHN0cmluZ1xuICBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICdyZ2InKSB7XG4gICAgaWYgKG9wdGlvbnMub3BhY2l0eSA+PSAxKSB7XG4gICAgICByZXR1cm4gcmVzdWx0Lm1hcChjb2xvciA9PiAncmdiKCcgKyBjb2xvci5qb2luKCcsJykgKyAnKScpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0Lm1hcChjb2xvciA9PiAncmdiYSgnICsgY29sb3IuY29uY2F0KG9wdGlvbnMub3BhY2l0eSkuam9pbignLCcpICsgJyknKTtcbiAgICB9XG4gIH1cblxuICAvLyBPdXRwdXQgYXMgaGV4XG4gIC8vIFRPRE9cbiAgLy8gcmV0dXJuIHJlc3VsdC5tYXAoY29sb3IgPT4ge1xuICAvLyAgIHJldHVybiBcInJnYihcIiArIGNvbG9yLmpvaW4oJywnKSArIFwiKVwiO1xuICAvLyB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==
@@ -0,0 +1,57 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Alerts } from '../alerts';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@ngx-translate/core";
5
+ import * as i2 from "@ionic/angular";
6
+ export class ComponentDirtyGuard {
7
+ constructor(translate, alertCtrl) {
8
+ this.translate = translate;
9
+ this.alertCtrl = alertCtrl;
10
+ this.debug = false;
11
+ }
12
+ async canDeactivate(component, currentRoute, currentState, nextState) {
13
+ const dirty = component?.dirty;
14
+ const valid = component?.valid;
15
+ let can = {
16
+ confirmed: !dirty,
17
+ save: false,
18
+ };
19
+ if (this.debug) {
20
+ console.debug(`[dirty-guard] canDeactivate component dirty: ${dirty}, valid: ${valid}`);
21
+ }
22
+ if (dirty) {
23
+ // Ask confirmation
24
+ can = await Alerts.askSaveBeforeAction(this.alertCtrl, this.translate, { valid });
25
+ }
26
+ if (this.debug)
27
+ console.debug(`[dirty-guard] confirm: ${can.confirmed}`);
28
+ if (can.confirmed) {
29
+ if (can.save) {
30
+ if (this.debug)
31
+ console.debug(`[dirty-guard] do save`);
32
+ const saved = await component.save();
33
+ if (!saved) {
34
+ if (this.debug)
35
+ console.debug(`[dirty-guard] save failed, cancel deactivate`);
36
+ return false;
37
+ }
38
+ }
39
+ else {
40
+ if (this.debug)
41
+ console.debug(`[dirty-guard] do cancel`);
42
+ if (dirty)
43
+ component.cancel();
44
+ }
45
+ // Allow deactivate
46
+ return true;
47
+ }
48
+ // Cancel deactivate
49
+ return false;
50
+ }
51
+ }
52
+ ComponentDirtyGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: ComponentDirtyGuard, deps: [{ token: i1.TranslateService }, { token: i2.AlertController }], target: i0.ɵɵFactoryTarget.Injectable });
53
+ ComponentDirtyGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: ComponentDirtyGuard });
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: ComponentDirtyGuard, decorators: [{
55
+ type: Injectable
56
+ }], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i2.AlertController }]; } });
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWRpcnR5Lmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZ3VhcmQvY29tcG9uZW50LWRpcnR5Lmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJekMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQzs7OztBQVVqQyxNQUFNLE9BQU8sbUJBQW1CO0lBSTlCLFlBQ1ksU0FBMkIsRUFDM0IsU0FBMEI7UUFEMUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFKOUIsVUFBSyxHQUFHLEtBQUssQ0FBQztJQU10QixDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFtQixFQUFFLFlBQW9DLEVBQUUsWUFBaUMsRUFBRSxTQUErQjtRQUcvSSxNQUFNLEtBQUssR0FBRyxTQUFTLEVBQUUsS0FBSyxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLFNBQVMsRUFBRSxLQUFLLENBQUM7UUFDL0IsSUFBSSxHQUFHLEdBQUc7WUFDUixTQUFTLEVBQUUsQ0FBQyxLQUFLO1lBQ2pCLElBQUksRUFBRSxLQUFLO1NBQ1osQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0RBQWdELEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ3pGO1FBRUQsSUFBSSxLQUFLLEVBQUU7WUFDVCxtQkFBbUI7WUFDbkIsR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7U0FDakY7UUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFFekUsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFO1lBQ2pCLElBQUksR0FBRyxDQUFDLElBQUksRUFBRTtnQkFDWixJQUFJLElBQUksQ0FBQyxLQUFLO29CQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztnQkFDdkQsTUFBTSxLQUFLLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ1YsSUFBSSxJQUFJLENBQUMsS0FBSzt3QkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7b0JBQzlFLE9BQU8sS0FBSyxDQUFDO2lCQUNkO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxJQUFJLENBQUMsS0FBSztvQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7Z0JBQ3pELElBQUksS0FBSztvQkFDUCxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDdEI7WUFFRCxtQkFBbUI7WUFDbkIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELG9CQUFvQjtRQUNwQixPQUFPLEtBQUssQ0FBQztJQUVmLENBQUM7O2dIQXBEVSxtQkFBbUI7b0hBQW5CLG1CQUFtQjsyRkFBbkIsbUJBQW1CO2tCQUQvQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQ2FuRGVhY3RpdmF0ZSwgUm91dGVyU3RhdGVTbmFwc2hvdCwgVXJsVHJlZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0FsZXJ0Q29udHJvbGxlcn0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtBbGVydHN9IGZyb20gJy4uL2FsZXJ0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuTGVhdmUge1xuICBkaXJ0eTogYm9vbGVhbjtcbiAgdmFsaWQ6IGJvb2xlYW47XG4gIHNhdmUoZXZlbnQ/OiBFdmVudCwgb3B0aW9ucz86IGFueSk6IFByb21pc2U8Ym9vbGVhbj47XG4gIGNhbmNlbChldmVudD86IEV2ZW50KTogUHJvbWlzZTx2b2lkPjtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbXBvbmVudERpcnR5R3VhcmQgaW1wbGVtZW50cyBDYW5EZWFjdGl2YXRlPENhbkxlYXZlPiB7XG5cbiAgcHJpdmF0ZSBkZWJ1ZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFsZXJ0Q3RybDogQWxlcnRDb250cm9sbGVyLFxuICApIHtcbiAgfVxuXG4gIGFzeW5jIGNhbkRlYWN0aXZhdGUoY29tcG9uZW50OiBDYW5MZWF2ZSwgY3VycmVudFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBjdXJyZW50U3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QsIG5leHRTdGF0ZT86IFJvdXRlclN0YXRlU25hcHNob3QpOlxuICAgIFByb21pc2U8Ym9vbGVhbiB8IFVybFRyZWU+IHtcblxuICAgIGNvbnN0IGRpcnR5ID0gY29tcG9uZW50Py5kaXJ0eTtcbiAgICBjb25zdCB2YWxpZCA9IGNvbXBvbmVudD8udmFsaWQ7XG4gICAgbGV0IGNhbiA9IHtcbiAgICAgIGNvbmZpcm1lZDogIWRpcnR5LFxuICAgICAgc2F2ZTogZmFsc2UsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbZGlydHktZ3VhcmRdIGNhbkRlYWN0aXZhdGUgY29tcG9uZW50IGRpcnR5OiAke2RpcnR5fSwgdmFsaWQ6ICR7dmFsaWR9YCk7XG4gICAgfVxuXG4gICAgaWYgKGRpcnR5KSB7XG4gICAgICAvLyBBc2sgY29uZmlybWF0aW9uXG4gICAgICBjYW4gPSBhd2FpdCBBbGVydHMuYXNrU2F2ZUJlZm9yZUFjdGlvbih0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUsIHt2YWxpZH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbZGlydHktZ3VhcmRdIGNvbmZpcm06ICR7Y2FuLmNvbmZpcm1lZH1gKTtcblxuICAgIGlmIChjYW4uY29uZmlybWVkKSB7XG4gICAgICBpZiAoY2FuLnNhdmUpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFtkaXJ0eS1ndWFyZF0gZG8gc2F2ZWApO1xuICAgICAgICBjb25zdCBzYXZlZCA9IGF3YWl0IGNvbXBvbmVudC5zYXZlKCk7XG4gICAgICAgIGlmICghc2F2ZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2RpcnR5LWd1YXJkXSBzYXZlIGZhaWxlZCwgY2FuY2VsIGRlYWN0aXZhdGVgKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbZGlydHktZ3VhcmRdIGRvIGNhbmNlbGApO1xuICAgICAgICBpZiAoZGlydHkpXG4gICAgICAgICAgY29tcG9uZW50LmNhbmNlbCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBBbGxvdyBkZWFjdGl2YXRlXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBDYW5jZWwgZGVhY3RpdmF0ZVxuICAgIHJldHVybiBmYWxzZTtcblxuICB9XG5cblxufVxuIl19
@@ -0,0 +1,53 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@ionic/angular";
4
+ import * as i2 from "../../core/services/platform.service";
5
+ import * as i3 from "../../core/services/local-settings.service";
6
+ import * as i4 from "@ngx-translate/core";
7
+ import * as i5 from "@angular/common";
8
+ import * as i6 from "ngx-markdown";
9
+ import * as i7 from "../toolbar/modal-toolbar";
10
+ export class AppHelpModal {
11
+ constructor(injector, viewCtrl, platform, settings, translate, cd) {
12
+ this.injector = injector;
13
+ this.viewCtrl = viewCtrl;
14
+ this.platform = platform;
15
+ this.settings = settings;
16
+ this.translate = translate;
17
+ this.cd = cd;
18
+ this.loading = true;
19
+ this.error = undefined;
20
+ this.showError = true;
21
+ // TODO: for DEV only
22
+ //this.debug = !environment.production;
23
+ }
24
+ close(event) {
25
+ return this.viewCtrl.dismiss();
26
+ }
27
+ markAsLoaded() {
28
+ this.loading = false;
29
+ this.error = null;
30
+ this.cd.markForCheck();
31
+ }
32
+ onLoadError(error) {
33
+ console.error(error);
34
+ this.error = error;
35
+ this.loading = false;
36
+ this.cd.markForCheck();
37
+ }
38
+ }
39
+ AppHelpModal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: AppHelpModal, deps: [{ token: i0.Injector }, { token: i1.ModalController }, { token: i2.PlatformService }, { token: i3.LocalSettingsService }, { token: i4.TranslateService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
40
+ AppHelpModal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.6", type: AppHelpModal, selector: "app-help-modal", inputs: { title: "title", showError: "showError", markdownContent: "markdownContent", markdownUrl: "markdownUrl" }, ngImport: i0, template: "<app-modal-toolbar color=\"light\"\n [title]=\"title|translate\"\n (cancel)=\"close($event)\"\n [showSpinner]=\"loading\">\n</app-modal-toolbar>\n\n<ion-content class=\"ion-padding\">\n\n <!-- error -->\n <ion-item *ngIf=\"error && showError\" lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <markdown *ngIf=\"markdownContent; else useDocUrl\"\n [data]=\"markdownContent\"\n (ready)=\"markAsLoaded()\"\n emoji>\n </markdown>\n\n <ng-template #useDocUrl>\n <markdown *ngIf=\"markdownUrl\"\n [src]=\"markdownUrl\"\n (load)=\"markAsLoaded()\"\n (error)=\"onLoadError($event)\"\n emoji></markdown>\n </ng-template>\n\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\">{{'COMMON.BTN_CLOSE'|translate}}</ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n\n\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i6.MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }, { kind: "component", type: i7.ModalToolbarComponent, selector: "app-modal-toolbar", inputs: ["modalName", "title", "color", "showSpinner", "canValidate", "validateIcon"], outputs: ["cancel", "validate"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: AppHelpModal, decorators: [{
42
+ type: Component,
43
+ args: [{ selector: 'app-help-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<app-modal-toolbar color=\"light\"\n [title]=\"title|translate\"\n (cancel)=\"close($event)\"\n [showSpinner]=\"loading\">\n</app-modal-toolbar>\n\n<ion-content class=\"ion-padding\">\n\n <!-- error -->\n <ion-item *ngIf=\"error && showError\" lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <markdown *ngIf=\"markdownContent; else useDocUrl\"\n [data]=\"markdownContent\"\n (ready)=\"markAsLoaded()\"\n emoji>\n </markdown>\n\n <ng-template #useDocUrl>\n <markdown *ngIf=\"markdownUrl\"\n [src]=\"markdownUrl\"\n (load)=\"markAsLoaded()\"\n (error)=\"onLoadError($event)\"\n emoji></markdown>\n </ng-template>\n\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\">{{'COMMON.BTN_CLOSE'|translate}}</ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n\n\n" }]
44
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.ModalController }, { type: i2.PlatformService }, { type: i3.LocalSettingsService }, { type: i4.TranslateService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { title: [{
45
+ type: Input
46
+ }], showError: [{
47
+ type: Input
48
+ }], markdownContent: [{
49
+ type: Input
50
+ }], markdownUrl: [{
51
+ type: Input
52
+ }] } });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC5tb2RhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2hlbHAvaGVscC5tb2RhbC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2hlbHAvaGVscC5tb2RhbC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBcUIsU0FBUyxFQUFZLEtBQUssRUFBUyxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7O0FBa0I3RyxNQUFNLE9BQU8sWUFBWTtJQVd2QixZQUNjLFFBQWtCLEVBQ2xCLFFBQXlCLEVBQ3pCLFFBQXlCLEVBQ3pCLFFBQThCLEVBQzlCLFNBQTJCLEVBQzNCLEVBQXFCO1FBTHJCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsYUFBUSxHQUFSLFFBQVEsQ0FBc0I7UUFDOUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFkbkMsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLFVBQUssR0FBVyxTQUFTLENBQUM7UUFHakIsY0FBUyxHQUFHLElBQUksQ0FBQztRQVl4QixxQkFBcUI7UUFDckIsdUNBQXVDO0lBQ3pDLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFjO1FBQ3hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFckIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDOzt5R0F2Q1UsWUFBWTs2RkFBWixZQUFZLDBLQ2xCekIsMHhDQTBDQTsyRkR4QmEsWUFBWTtrQkFMeEIsU0FBUzsrQkFDRSxnQkFBZ0IsbUJBRVQsdUJBQXVCLENBQUMsTUFBTTs2UEFRdEMsS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0b3IsIElucHV0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNb2RhbENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7UGxhdGZvcm1TZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwSGVscE1vZGFsT3B0aW9ucyB7XG4gIHRpdGxlPzogc3RyaW5nLFxuICBtYXJrZG93bkNvbnRlbnQ/OiBzdHJpbmcsXG4gIG1hcmtkb3duVXJsPzogc3RyaW5nXG4gIHNob3dFcnJvcj86IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1oZWxwLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2hlbHAubW9kYWwuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEFwcEhlbHBNb2RhbCBpbXBsZW1lbnRzIEFwcEhlbHBNb2RhbE9wdGlvbnMge1xuXG4gIHJlYWRvbmx5IGRlYnVnOiBib29sZWFuO1xuICBsb2FkaW5nID0gdHJ1ZTtcbiAgZXJyb3I6IHN0cmluZyA9IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93RXJyb3IgPSB0cnVlO1xuICBASW5wdXQoKSBtYXJrZG93bkNvbnRlbnQ6IHN0cmluZztcbiAgQElucHV0KCkgbWFya2Rvd25Vcmw6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICBwcm90ZWN0ZWQgdmlld0N0cmw6IE1vZGFsQ29udHJvbGxlcixcbiAgICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1TZXJ2aWNlLFxuICAgICAgcHJvdGVjdGVkIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIC8vIFRPRE86IGZvciBERVYgb25seVxuICAgIC8vdGhpcy5kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICB9XG5cbiAgY2xvc2UoZXZlbnQ/OiBFdmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMudmlld0N0cmwuZGlzbWlzcygpO1xuICB9XG5cbiAgbWFya0FzTG9hZGVkKCkge1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkxvYWRFcnJvcihlcnJvcj86IHN0cmluZykge1xuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuXG4gICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuXG59XG4iLCI8YXBwLW1vZGFsLXRvb2xiYXIgY29sb3I9XCJsaWdodFwiXG4gICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cInRpdGxlfHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgKGNhbmNlbCk9XCJjbG9zZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICBbc2hvd1NwaW5uZXJdPVwibG9hZGluZ1wiPlxuPC9hcHAtbW9kYWwtdG9vbGJhcj5cblxuPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cblxuICA8IS0tIGVycm9yIC0tPlxuICA8aW9uLWl0ZW0gKm5nSWY9XCJlcnJvciAmJiBzaG93RXJyb3JcIiBsaW5lcz1cIm5vbmVcIj5cbiAgICA8aW9uLWljb24gY29sb3I9XCJkYW5nZXJcIiBzbG90PVwic3RhcnRcIiBuYW1lPVwiYWxlcnQtY2lyY2xlXCI+PC9pb24taWNvbj5cbiAgICA8aW9uLWxhYmVsIGNvbG9yPVwiZGFuZ2VyXCIgY2xhc3M9XCJlcnJvclwiIFtpbm5lckhUTUxdPVwiZXJyb3J8dHJhbnNsYXRlXCI+PC9pb24tbGFiZWw+XG4gIDwvaW9uLWl0ZW0+XG5cbiAgPG1hcmtkb3duICpuZ0lmPVwibWFya2Rvd25Db250ZW50OyBlbHNlIHVzZURvY1VybFwiXG4gICAgICAgICAgICBbZGF0YV09XCJtYXJrZG93bkNvbnRlbnRcIlxuICAgICAgICAgICAgKHJlYWR5KT1cIm1hcmtBc0xvYWRlZCgpXCJcbiAgICAgICAgICAgIGVtb2ppPlxuICA8L21hcmtkb3duPlxuXG4gIDxuZy10ZW1wbGF0ZSAjdXNlRG9jVXJsPlxuICAgIDxtYXJrZG93biAqbmdJZj1cIm1hcmtkb3duVXJsXCJcbiAgICAgICAgICAgICAgW3NyY109XCJtYXJrZG93blVybFwiXG4gICAgICAgICAgICAgIChsb2FkKT1cIm1hcmtBc0xvYWRlZCgpXCJcbiAgICAgICAgICAgICAgKGVycm9yKT1cIm9uTG9hZEVycm9yKCRldmVudClcIlxuICAgICAgICAgICAgICBlbW9qaT48L21hcmtkb3duPlxuICA8L25nLXRlbXBsYXRlPlxuXG48L2lvbi1jb250ZW50PlxuXG48aW9uLWZvb3RlciBoaWRkZW4teHMgaGlkZGVuLXNtIGhpZGRlbi1tb2JpbGU+XG4gIDxpb24tdG9vbGJhcj5cbiAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCIgbm93cmFwPlxuICAgICAgPGlvbi1jb2w+PC9pb24tY29sPlxuICAgICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiIChjbGljayk9XCJjbG9zZSgpXCI+e3snQ09NTU9OLkJUTl9DTE9TRSd8dHJhbnNsYXRlfX08L2lvbi1idXR0b24+XG4gICAgICA8L2lvbi1jb2w+XG4gICAgPC9pb24tcm93PlxuICA8L2lvbi10b29sYmFyPlxuPC9pb24tZm9vdGVyPlxuXG5cbiJdfQ==
@@ -0,0 +1,23 @@
1
+ import { Component, Inject } from '@angular/core';
2
+ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@ngx-translate/core";
6
+ export class HotkeysDialogComponent {
7
+ constructor(data) {
8
+ this.data = data;
9
+ this.hotkeys = Array.from(this.data);
10
+ }
11
+ ngOnInit() {
12
+ }
13
+ }
14
+ HotkeysDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: HotkeysDialogComponent, deps: [{ token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
15
+ HotkeysDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.6", type: HotkeysDialogComponent, selector: "ng-component", ngImport: i0, template: "<table>\n <tbody>\n <tr *ngFor=\"let keys of hotkeys\">\n <td>{{ keys[1] | translate }}</td>\n\n <td class=\"text-right\">\n <kbd>{{ keys[0] }}</kbd>\n </td>\n </tr>\n </tbody>\n</table>\n", styles: [":host table{border-collapse:collapse;width:100%;margin-bottom:1rem;color:#212529}:host th{font-weight:500;text-align:left;vertical-align:bottom;padding:.75rem;border-top:1px solid #dee2e6;border-bottom:2px solid #dee2e6}:host td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6;padding-left:0}:host kbd{margin-right:6px;background-color:#fafbfc;border:1px solid #d1d5da;border-bottom-color:#c6cbd1;border-radius:3px;box-shadow:inset 0 -1px #c6cbd1;color:#444d56;display:inline-block;font-size:12px;line-height:10px;padding:3px 5px;vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: HotkeysDialogComponent, decorators: [{
17
+ type: Component,
18
+ args: [{ template: "<table>\n <tbody>\n <tr *ngFor=\"let keys of hotkeys\">\n <td>{{ keys[1] | translate }}</td>\n\n <td class=\"text-right\">\n <kbd>{{ keys[0] }}</kbd>\n </td>\n </tr>\n </tbody>\n</table>\n", styles: [":host table{border-collapse:collapse;width:100%;margin-bottom:1rem;color:#212529}:host th{font-weight:500;text-align:left;vertical-align:bottom;padding:.75rem;border-top:1px solid #dee2e6;border-bottom:2px solid #dee2e6}:host td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6;padding-left:0}:host kbd{margin-right:6px;background-color:#fafbfc;border:1px solid #d1d5da;border-bottom-color:#c6cbd1;border-radius:3px;box-shadow:inset 0 -1px #c6cbd1;color:#444d56;display:inline-block;font-size:12px;line-height:10px;padding:3px 5px;vertical-align:middle}\n"] }]
19
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
20
+ type: Inject,
21
+ args: [MAT_DIALOG_DATA]
22
+ }] }]; } });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90a2V5cy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvaG90a2V5cy9kaWFsb2cvaG90a2V5cy1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvaG90a2V5cy9kaWFsb2cvaG90a2V5cy1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7O0FBTXpELE1BQU0sT0FBTyxzQkFBc0I7SUFHakMsWUFBK0MsSUFBSTtRQUFKLFNBQUksR0FBSixJQUFJLENBQUE7UUFGbkQsWUFBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXVCLENBQUM7SUFFeEQsUUFBUTtJQUNSLENBQUM7O21IQU5VLHNCQUFzQixrQkFHYixlQUFlO3VHQUh4QixzQkFBc0Isb0RDUG5DLGdOQVdBOzJGREphLHNCQUFzQjtrQkFKbEMsU0FBUzs7OzBCQU9LLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TUFUX0RJQUxPR19EQVRBfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2hvdGtleXMtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaG90a2V5cy1kaWFsb2cuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBIb3RrZXlzRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgaG90a2V5cyA9IEFycmF5LmZyb20odGhpcy5kYXRhKTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHJvdGVjdGVkIGRhdGEpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICB9XG5cbn1cbiIsIjx0YWJsZT5cbiAgPHRib2R5PlxuICA8dHIgKm5nRm9yPVwibGV0IGtleXMgb2YgaG90a2V5c1wiPlxuICAgIDx0ZD57eyBrZXlzWzFdIHwgdHJhbnNsYXRlIH19PC90ZD5cblxuICAgIDx0ZCBjbGFzcz1cInRleHQtcmlnaHRcIj5cbiAgICAgIDxrYmQ+e3sga2V5c1swXSB9fTwva2JkPlxuICAgIDwvdGQ+XG4gIDwvdHI+XG4gIDwvdGJvZHk+XG48L3RhYmxlPlxuIl19
@@ -0,0 +1,84 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import { DOCUMENT } from '@angular/common';
4
+ import { HotkeysDialogComponent } from './dialog/hotkeys-dialog.component';
5
+ import { isNotNilOrBlank } from '../functions';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/platform-browser";
8
+ import * as i2 from "@angular/material/dialog";
9
+ import * as i3 from "@ionic/angular";
10
+ export class Hotkeys {
11
+ constructor(eventManager, dialog, document, modalController, popoverController) {
12
+ this.eventManager = eventManager;
13
+ this.dialog = dialog;
14
+ this.document = document;
15
+ this.modalController = modalController;
16
+ this.popoverController = popoverController;
17
+ this._debug = false;
18
+ this._hotkeys = new Map();
19
+ this._defaults = {
20
+ element: this.document,
21
+ preventDefault: true
22
+ };
23
+ if (this._debug)
24
+ console.debug('[hotkeys] Starting hotkeys service... Press Shift+? to get help modal.');
25
+ this.addShortcut({ keys: 'shift.?' })
26
+ .subscribe(() => this.openHelpModal());
27
+ // For DEV only
28
+ //this._debug = !environment.production;
29
+ }
30
+ addShortcut(options) {
31
+ const merged = { ...this._defaults, ...options };
32
+ const event = `keydown.${merged.keys}`;
33
+ if (isNotNilOrBlank(merged.description)) {
34
+ if (this._debug)
35
+ console.debug(`[hotkeys] Add shortcut {${options.keys}}: ${merged.description}`);
36
+ this._hotkeys.set(merged.keys, merged.description);
37
+ }
38
+ else {
39
+ if (this._debug)
40
+ console.debug(`[hotkeys] Add shortcut {${options.keys}}`);
41
+ }
42
+ return new Observable(observer => {
43
+ const handler = async (e) => {
44
+ // Get top component from ModalController
45
+ const top = await this.modalController.getTop() || await this.popoverController.getTop();
46
+ // If modal present, check its component name against hotkey element name (fix #181)
47
+ if (top && top.component['name'] !== merged.elementName) {
48
+ e.preventDefault();
49
+ return;
50
+ }
51
+ if (e instanceof KeyboardEvent && e.repeat)
52
+ return; // skip when repeated
53
+ if (merged.preventDefault)
54
+ e.preventDefault();
55
+ if (this._debug)
56
+ console.debug(`[hotkeys] Shortcut {${options.keys}} detected...`);
57
+ observer.next(e);
58
+ };
59
+ const dispose = this.eventManager.addEventListener(merged.element, event, handler);
60
+ return () => {
61
+ dispose();
62
+ this._hotkeys.delete(merged.keys);
63
+ };
64
+ });
65
+ }
66
+ openHelpModal() {
67
+ this.dialog.open(HotkeysDialogComponent, {
68
+ width: '500px',
69
+ data: this._hotkeys
70
+ });
71
+ }
72
+ }
73
+ Hotkeys.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: Hotkeys, deps: [{ token: i1.EventManager }, { token: i2.MatDialog }, { token: DOCUMENT }, { token: i3.ModalController }, { token: i3.PopoverController }], target: i0.ɵɵFactoryTarget.Injectable });
74
+ Hotkeys.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: Hotkeys, providedIn: 'root' });
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: Hotkeys, decorators: [{
76
+ type: Injectable,
77
+ args: [{
78
+ providedIn: 'root'
79
+ }]
80
+ }], ctorParameters: function () { return [{ type: i1.EventManager }, { type: i2.MatDialog }, { type: undefined, decorators: [{
81
+ type: Inject,
82
+ args: [DOCUMENT]
83
+ }] }, { type: i3.ModalController }, { type: i3.PopoverController }]; } });
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90a2V5cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvaG90a2V5cy9ob3RrZXlzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7QUFjL0MsTUFBTSxPQUFPLE9BQU87SUFVbEIsWUFBb0IsWUFBMEIsRUFDMUIsTUFBaUIsRUFDQyxRQUFhLEVBQy9CLGVBQWdDLEVBQ2hDLGlCQUFvQztRQUpwQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ0MsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUMvQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQVpoRCxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2YsYUFBUSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFFckIsY0FBUyxHQUFxQjtZQUNwQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdEIsY0FBYyxFQUFFLElBQUk7U0FDckIsQ0FBQztRQU9BLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLHdFQUF3RSxDQUFDLENBQUM7UUFFekcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUMsQ0FBQzthQUNoQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFekMsZUFBZTtRQUNmLHdDQUF3QztJQUMxQyxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXlCO1FBRW5DLE1BQU0sTUFBTSxHQUFHLEVBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsT0FBTyxFQUFDLENBQUM7UUFDL0MsTUFBTSxLQUFLLEdBQUcsV0FBVyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFdkMsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsT0FBTyxDQUFDLElBQUksTUFBTSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNsRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNwRDthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUM1RTtRQUVELE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDL0IsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUFFLENBQVEsRUFBRSxFQUFFO2dCQUVqQyx5Q0FBeUM7Z0JBQ3pDLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDekYsb0ZBQW9GO2dCQUNwRixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUU7b0JBQ3ZELENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDbkIsT0FBTztpQkFDUjtnQkFDRCxJQUFJLENBQUMsWUFBWSxhQUFhLElBQUksQ0FBQyxDQUFDLE1BQU07b0JBQUUsT0FBTyxDQUFDLHFCQUFxQjtnQkFDekUsSUFBSSxNQUFNLENBQUMsY0FBYztvQkFBRSxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQzlDLElBQUksSUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsT0FBTyxDQUFDLElBQUksZUFBZSxDQUFDLENBQUM7Z0JBQ25GLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsQ0FBQyxDQUFDO1lBRUYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUVuRixPQUFPLEdBQUcsRUFBRTtnQkFDVixPQUFPLEVBQUUsQ0FBQztnQkFDVixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQ3ZDLEtBQUssRUFBRSxPQUFPO1lBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3BCLENBQUMsQ0FBQztJQUNMLENBQUM7O29HQWxFVSxPQUFPLHVFQVlFLFFBQVE7d0dBWmpCLE9BQU8sY0FGTixNQUFNOzJGQUVQLE9BQU87a0JBSG5CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFhYyxNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEV2ZW50TWFuYWdlciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEhvdGtleXNEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2RpYWxvZy9ob3RrZXlzLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNOb3ROaWxPckJsYW5rIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IE1vZGFsQ29udHJvbGxlciwgUG9wb3ZlckNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5cbmludGVyZmFjZSBPcHRpb25zIHtcbiAgZWxlbWVudDogYW55O1xuICBlbGVtZW50TmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBrZXlzOiBzdHJpbmc7XG4gIHByZXZlbnREZWZhdWx0OiBib29sZWFuO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBIb3RrZXlzIHtcblxuICBwcml2YXRlIF9kZWJ1ZyA9IGZhbHNlO1xuICBwcml2YXRlIF9ob3RrZXlzID0gbmV3IE1hcCgpO1xuXG4gIHByaXZhdGUgX2RlZmF1bHRzOiBQYXJ0aWFsPE9wdGlvbnM+ID0ge1xuICAgIGVsZW1lbnQ6IHRoaXMuZG9jdW1lbnQsXG4gICAgcHJldmVudERlZmF1bHQ6IHRydWVcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGV2ZW50TWFuYWdlcjogRXZlbnRNYW5hZ2VyLFxuICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgICAgICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBhbnksXG4gICAgICAgICAgICAgIHByaXZhdGUgbW9kYWxDb250cm9sbGVyOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgcG9wb3ZlckNvbnRyb2xsZXI6IFBvcG92ZXJDb250cm9sbGVyKSB7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbaG90a2V5c10gU3RhcnRpbmcgaG90a2V5cyBzZXJ2aWNlLi4uIFByZXNzIFNoaWZ0Kz8gdG8gZ2V0IGhlbHAgbW9kYWwuJyk7XG5cbiAgICB0aGlzLmFkZFNob3J0Y3V0KHtrZXlzOiAnc2hpZnQuPyd9KVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9wZW5IZWxwTW9kYWwoKSk7XG5cbiAgICAvLyBGb3IgREVWIG9ubHlcbiAgICAvL3RoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBhZGRTaG9ydGN1dChvcHRpb25zOiBQYXJ0aWFsPE9wdGlvbnM+KTogT2JzZXJ2YWJsZTxFdmVudD4ge1xuXG4gICAgY29uc3QgbWVyZ2VkID0gey4uLnRoaXMuX2RlZmF1bHRzLCAuLi5vcHRpb25zfTtcbiAgICBjb25zdCBldmVudCA9IGBrZXlkb3duLiR7bWVyZ2VkLmtleXN9YDtcblxuICAgIGlmIChpc05vdE5pbE9yQmxhbmsobWVyZ2VkLmRlc2NyaXB0aW9uKSkge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbaG90a2V5c10gQWRkIHNob3J0Y3V0IHske29wdGlvbnMua2V5c319OiAke21lcmdlZC5kZXNjcmlwdGlvbn1gKTtcbiAgICAgIHRoaXMuX2hvdGtleXMuc2V0KG1lcmdlZC5rZXlzLCBtZXJnZWQuZGVzY3JpcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtob3RrZXlzXSBBZGQgc2hvcnRjdXQgeyR7b3B0aW9ucy5rZXlzfX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlciA9IGFzeW5jIChlOiBFdmVudCkgPT4ge1xuXG4gICAgICAgIC8vIEdldCB0b3AgY29tcG9uZW50IGZyb20gTW9kYWxDb250cm9sbGVyXG4gICAgICAgIGNvbnN0IHRvcCA9IGF3YWl0IHRoaXMubW9kYWxDb250cm9sbGVyLmdldFRvcCgpIHx8IGF3YWl0IHRoaXMucG9wb3ZlckNvbnRyb2xsZXIuZ2V0VG9wKCk7XG4gICAgICAgIC8vIElmIG1vZGFsIHByZXNlbnQsIGNoZWNrIGl0cyBjb21wb25lbnQgbmFtZSBhZ2FpbnN0IGhvdGtleSBlbGVtZW50IG5hbWUgKGZpeCAjMTgxKVxuICAgICAgICBpZiAodG9wICYmIHRvcC5jb21wb25lbnRbJ25hbWUnXSAhPT0gbWVyZ2VkLmVsZW1lbnROYW1lKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQgJiYgZS5yZXBlYXQpIHJldHVybjsgLy8gc2tpcCB3aGVuIHJlcGVhdGVkXG4gICAgICAgIGlmIChtZXJnZWQucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbaG90a2V5c10gU2hvcnRjdXQgeyR7b3B0aW9ucy5rZXlzfX0gZGV0ZWN0ZWQuLi5gKTtcbiAgICAgICAgb2JzZXJ2ZXIubmV4dChlKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGRpc3Bvc2UgPSB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKG1lcmdlZC5lbGVtZW50LCBldmVudCwgaGFuZGxlcik7XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGRpc3Bvc2UoKTtcbiAgICAgICAgdGhpcy5faG90a2V5cy5kZWxldGUobWVyZ2VkLmtleXMpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIG9wZW5IZWxwTW9kYWwoKSB7XG4gICAgdGhpcy5kaWFsb2cub3BlbihIb3RrZXlzRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgIGRhdGE6IHRoaXMuX2hvdGtleXNcbiAgICB9KTtcbiAgfVxuXG59XG4iXX0=
@@ -0,0 +1,42 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { TranslateModule } from '@ngx-translate/core';
4
+ import { Hotkeys } from './hotkeys.service';
5
+ import { HotkeysDialogComponent } from './dialog/hotkeys-dialog.component';
6
+ import { MatDialogModule } from '@angular/material/dialog';
7
+ import { MatCommonModule } from '@angular/material/core';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@ngx-translate/core";
10
+ export class SharedHotkeysModule {
11
+ }
12
+ SharedHotkeysModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: SharedHotkeysModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
13
+ SharedHotkeysModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.6", ngImport: i0, type: SharedHotkeysModule, declarations: [HotkeysDialogComponent], imports: [CommonModule,
14
+ MatCommonModule,
15
+ MatDialogModule, i1.TranslateModule], exports: [HotkeysDialogComponent] });
16
+ SharedHotkeysModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: SharedHotkeysModule, providers: [
17
+ Hotkeys
18
+ ], imports: [CommonModule,
19
+ MatCommonModule,
20
+ MatDialogModule,
21
+ TranslateModule.forChild()] });
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: SharedHotkeysModule, decorators: [{
23
+ type: NgModule,
24
+ args: [{
25
+ imports: [
26
+ CommonModule,
27
+ MatCommonModule,
28
+ MatDialogModule,
29
+ TranslateModule.forChild()
30
+ ],
31
+ exports: [
32
+ HotkeysDialogComponent
33
+ ],
34
+ declarations: [
35
+ HotkeysDialogComponent
36
+ ],
37
+ providers: [
38
+ Hotkeys
39
+ ]
40
+ }]
41
+ }] });
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWhvdGtleXMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvaG90a2V5cy9zaGFyZWQtaG90a2V5cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFDOzs7QUFtQnZELE1BQU0sT0FBTyxtQkFBbUI7O2dIQUFuQixtQkFBbUI7aUhBQW5CLG1CQUFtQixpQkFONUIsc0JBQXNCLGFBVHRCLFlBQVk7UUFDWixlQUFlO1FBQ2YsZUFBZSxpQ0FJZixzQkFBc0I7aUhBU2IsbUJBQW1CLGFBSm5CO1FBQ1QsT0FBTztLQUNSLFlBYkMsWUFBWTtRQUNaLGVBQWU7UUFDZixlQUFlO1FBQ2YsZUFBZSxDQUFDLFFBQVEsRUFBRTsyRkFZakIsbUJBQW1CO2tCQWpCL0IsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsZUFBZSxDQUFDLFFBQVEsRUFBRTtxQkFDM0I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLHNCQUFzQjtxQkFDdkI7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLHNCQUFzQjtxQkFDdkI7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULE9BQU87cUJBQ1I7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGV9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtIb3RrZXlzfSBmcm9tICcuL2hvdGtleXMuc2VydmljZSc7XG5pbXBvcnQge0hvdGtleXNEaWFsb2dDb21wb25lbnR9IGZyb20gJy4vZGlhbG9nL2hvdGtleXMtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQge01hdERpYWxvZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7TWF0Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBNYXRDb21tb25Nb2R1bGUsXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZS5mb3JDaGlsZCgpXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBIb3RrZXlzRGlhbG9nQ29tcG9uZW50XG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEhvdGtleXNEaWFsb2dDb21wb25lbnRcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgSG90a2V5c1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIFNoYXJlZEhvdGtleXNNb2R1bGUge1xufVxuIl19