@sumaris-net/ngx-components 1.2.7 → 1.2.14

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 (793) hide show
  1. package/README.md +9 -7
  2. package/doc/build.md +2 -2
  3. package/doc/changelog.md +402 -1
  4. package/esm2020/public_api.mjs +298 -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/users.mjs +234 -0
  11. package/esm2020/src/app/admin/users/users.module.mjs +54 -0
  12. package/esm2020/src/app/core/about/about.modal.mjs +71 -0
  13. package/esm2020/src/app/core/about/about.module.mjs +34 -0
  14. package/esm2020/src/app/core/account/account.module.mjs +43 -0
  15. package/esm2020/src/app/core/account/account.page.mjs +245 -0
  16. package/esm2020/src/app/core/auth/auth.form.mjs +131 -0
  17. package/esm2020/src/app/core/auth/auth.modal.mjs +72 -0
  18. package/esm2020/src/app/core/auth/auth.module.mjs +47 -0
  19. package/esm2020/src/app/core/core.module.mjs +184 -0
  20. package/esm2020/src/app/core/core.testing.module.mjs +86 -0
  21. package/esm2020/src/app/core/form/buttons/form-buttons-bar.component.mjs +71 -0
  22. package/esm2020/src/app/core/form/buttons/form-buttons-bar.module.mjs +35 -0
  23. package/esm2020/src/app/core/form/entity/editor.class.mjs +675 -0
  24. package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +419 -0
  25. package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +652 -0
  26. package/esm2020/src/app/core/form/entity/entity-metadata.component.mjs +25 -0
  27. package/esm2020/src/app/core/form/entity/entity.module.mjs +38 -0
  28. package/esm2020/src/app/core/form/form.class.mjs +340 -0
  29. package/esm2020/src/app/core/form/form.module.mjs +66 -0
  30. package/esm2020/src/app/core/form/form.utils.mjs +473 -0
  31. package/esm2020/src/app/core/form/list/list.form.mjs +222 -0
  32. package/esm2020/src/app/core/form/list/list.module.mjs +35 -0
  33. package/esm2020/src/app/core/form/properties/properties.form.mjs +129 -0
  34. package/esm2020/src/app/core/form/properties/properties.module.mjs +35 -0
  35. package/esm2020/src/app/core/form/properties/property.validator.mjs +23 -0
  36. package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +90 -0
  37. package/esm2020/src/app/core/form/properties/testing/properties-form.testing.module.mjs +39 -0
  38. package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.mjs +37 -0
  39. package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +45 -0
  40. package/esm2020/src/app/core/form/text-popover/text-form.component.mjs +89 -0
  41. package/esm2020/src/app/core/form/text-popover/text-popover.component.mjs +105 -0
  42. package/esm2020/src/app/core/form/text-popover/text-popover.module.mjs +40 -0
  43. package/esm2020/src/app/core/graphql/graphql.module.mjs +22 -0
  44. package/esm2020/src/app/core/graphql/graphql.service.mjs +749 -0
  45. package/esm2020/src/app/core/graphql/graphql.utils.mjs +117 -0
  46. package/esm2020/src/app/core/home/home.mjs +257 -0
  47. package/esm2020/src/app/core/home/home.module.mjs +48 -0
  48. package/esm2020/src/app/core/icon/icon.component.mjs +41 -0
  49. package/esm2020/src/app/core/icon/icon.module.mjs +29 -0
  50. package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +337 -0
  51. package/esm2020/src/app/core/install/install-upgrade-card.module.mjs +35 -0
  52. package/esm2020/src/app/core/menu/menu.component.mjs +330 -0
  53. package/esm2020/src/app/core/menu/menu.model.mjs +35 -0
  54. package/esm2020/src/app/core/menu/menu.module.mjs +44 -0
  55. package/esm2020/src/app/core/menu/menu.service.mjs +55 -0
  56. package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +27 -0
  57. package/esm2020/src/app/core/offline/update-offline-mode-card.module.mjs +35 -0
  58. package/esm2020/src/app/core/peer/select-peer.modal.mjs +174 -0
  59. package/esm2020/src/app/core/peer/select-peer.module.mjs +42 -0
  60. package/esm2020/src/app/core/register/register-confirm.page.mjs +81 -0
  61. package/esm2020/src/app/core/register/register.form.mjs +181 -0
  62. package/esm2020/src/app/core/register/register.modal.mjs +52 -0
  63. package/esm2020/src/app/core/register/register.module.mjs +44 -0
  64. package/esm2020/src/app/core/services/account.service.mjs +1111 -0
  65. package/esm2020/src/app/core/services/auth-guard.service.mjs +71 -0
  66. package/esm2020/src/app/core/services/base-entity-service.class.mjs +441 -0
  67. package/{esm2015/src/app/core/services/base-graphql-service.class.js → esm2020/src/app/core/services/base-graphql-service.class.mjs} +36 -34
  68. package/{esm2015/src/app/core/services/base58.js → esm2020/src/app/core/services/base58.mjs} +2 -2
  69. package/esm2020/src/app/core/services/config/core.config.mjs +168 -0
  70. package/esm2020/src/app/core/services/config.service.mjs +354 -0
  71. package/esm2020/src/app/core/services/crypto.service.mjs +114 -0
  72. package/{esm2015/src/app/core/services/errors.js → esm2020/src/app/core/services/errors.mjs} +1 -1
  73. package/esm2020/src/app/core/services/local-settings.service.mjs +445 -0
  74. package/esm2020/src/app/core/services/model/account.model.mjs +50 -0
  75. package/esm2020/src/app/core/services/model/config.model.mjs +92 -0
  76. package/esm2020/src/app/core/services/model/department.model.mjs +30 -0
  77. package/esm2020/src/app/core/services/model/entity.decorators.mjs +97 -0
  78. package/esm2020/src/app/core/services/model/entity.model.mjs +228 -0
  79. package/esm2020/src/app/core/services/model/filter.model.mjs +94 -0
  80. package/{esm2015/src/app/core/services/model/history.model.js → esm2020/src/app/core/services/model/history.model.mjs} +0 -0
  81. package/{esm2015/src/app/core/services/model/model.enum.js → esm2020/src/app/core/services/model/model.enum.mjs} +0 -0
  82. package/esm2020/src/app/core/services/model/peer.model.mjs +68 -0
  83. package/esm2020/src/app/core/services/model/person.model.mjs +83 -0
  84. package/esm2020/src/app/core/services/model/referential.model.mjs +153 -0
  85. package/esm2020/src/app/core/services/model/settings.model.mjs +75 -0
  86. package/esm2020/src/app/core/services/network.service.mjs +574 -0
  87. package/esm2020/src/app/core/services/network.types.mjs +20 -0
  88. package/esm2020/src/app/core/services/network.utils.mjs +16 -0
  89. package/esm2020/src/app/core/services/pipes/account.pipes.mjs +38 -0
  90. package/esm2020/src/app/core/services/pipes/department-to-string.pipe.mjs +23 -0
  91. package/esm2020/src/app/core/services/pipes/person-to-string.pipe.mjs +23 -0
  92. package/esm2020/src/app/core/services/pipes/usage-mode.pipes.mjs +37 -0
  93. package/esm2020/src/app/core/services/platform.service.mjs +493 -0
  94. package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +427 -0
  95. package/esm2020/src/app/core/services/storage/entity-store.class.mjs +449 -0
  96. package/esm2020/src/app/core/services/testing/referential-filter.model.mjs +23 -0
  97. package/esm2020/src/app/core/services/testing/referential.validator.mjs +45 -0
  98. package/esm2020/src/app/core/services/validator/account.validator.mjs +52 -0
  99. package/esm2020/src/app/core/services/validator/base.validator.class.mjs +47 -0
  100. package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +66 -0
  101. package/esm2020/src/app/core/services/validator/user-settings.validator.mjs +29 -0
  102. package/esm2020/src/app/core/settings/settings.module.mjs +34 -0
  103. package/esm2020/src/app/core/settings/settings.page.mjs +293 -0
  104. package/esm2020/src/app/core/table/actions-column.component.mjs +96 -0
  105. package/esm2020/src/app/core/table/async-table.class.mjs +1619 -0
  106. package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +382 -0
  107. package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +399 -0
  108. package/esm2020/src/app/core/table/memory-table.class.mjs +53 -0
  109. package/esm2020/src/app/core/table/table-select-columns.component.mjs +43 -0
  110. package/esm2020/src/app/core/table/table.class.mjs +1658 -0
  111. package/esm2020/src/app/core/table/table.model.mjs +12 -0
  112. package/esm2020/src/app/core/table/table.module.mjs +40 -0
  113. package/esm2020/src/app/core/table/table.utils.mjs +13 -0
  114. package/esm2020/src/app/core/table/testing/table.testing.mjs +265 -0
  115. package/esm2020/src/app/core/table/testing/table.testing.module.mjs +38 -0
  116. package/esm2020/src/app/shared/alerts.mjs +238 -0
  117. package/esm2020/src/app/shared/audio/audio.mjs +201 -0
  118. package/esm2020/src/app/shared/audio/audio.testing.mjs +31 -0
  119. package/esm2020/src/app/shared/audio/audio.testing.module.mjs +45 -0
  120. package/esm2020/src/app/shared/capacitor/keyboard.mjs +40 -0
  121. package/esm2020/src/app/shared/capacitor/plugins.mjs +9 -0
  122. package/esm2020/src/app/shared/constants.mjs +10 -0
  123. package/esm2020/src/app/shared/dates.mjs +142 -0
  124. package/esm2020/src/app/shared/debug/debug.component.mjs +39 -0
  125. package/esm2020/src/app/shared/debug/debug.module.mjs +44 -0
  126. package/esm2020/src/app/shared/directives/autofocus.directive.mjs +92 -0
  127. package/esm2020/src/app/shared/directives/autotitle.directive.mjs +30 -0
  128. package/esm2020/src/app/shared/directives/directives.module.mjs +43 -0
  129. package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +53 -0
  130. package/esm2020/src/app/shared/directives/ng-var.directive.mjs +31 -0
  131. package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +59 -0
  132. package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +40 -0
  133. package/esm2020/src/app/shared/directives/resizable/resizable.module.mjs +17 -0
  134. package/esm2020/src/app/shared/events.mjs +64 -0
  135. package/esm2020/src/app/shared/file/csv.utils.mjs +74 -0
  136. package/esm2020/src/app/shared/file/file.service.mjs +117 -0
  137. package/esm2020/src/app/shared/file/file.utils.mjs +113 -0
  138. package/esm2020/src/app/shared/file/images.utils.mjs +161 -0
  139. package/esm2020/src/app/shared/file/json.utils.mjs +33 -0
  140. package/esm2020/src/app/shared/file/uri.utils.mjs +23 -0
  141. package/{esm2015/src/app/shared/focusable.js → esm2020/src/app/shared/focusable.mjs} +0 -0
  142. package/esm2020/src/app/shared/form/field.component.mjs +244 -0
  143. package/{esm2015/src/app/shared/form/field.model.js → esm2020/src/app/shared/form/field.model.mjs} +1 -1
  144. package/esm2020/src/app/shared/form/loading-spinner.mjs +36 -0
  145. package/esm2020/src/app/shared/forms.mjs +391 -0
  146. package/esm2020/src/app/shared/functions.mjs +462 -0
  147. package/esm2020/src/app/shared/geolocation/geolocation.utils.mjs +41 -0
  148. package/{esm2015/src/app/shared/gesture/gesture-config.js → esm2020/src/app/shared/gesture/gesture-config.mjs} +7 -5
  149. package/esm2020/src/app/shared/gesture/hammer.utils.mjs +2 -0
  150. package/{esm2015/src/app/shared/graph/colors.utils.js → esm2020/src/app/shared/graph/colors.utils.mjs} +1 -1
  151. package/esm2020/src/app/shared/graph/graph-colors.mjs +208 -0
  152. package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +57 -0
  153. package/esm2020/src/app/shared/help/help.modal.mjs +53 -0
  154. package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +23 -0
  155. package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +84 -0
  156. package/esm2020/src/app/shared/hotkeys/shared-hotkeys.module.mjs +42 -0
  157. package/esm2020/src/app/shared/http/http.utils.mjs +52 -0
  158. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +355 -0
  159. package/esm2020/src/app/shared/image/gallery/image-gallery.module.mjs +58 -0
  160. package/esm2020/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +27 -0
  161. package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +89 -0
  162. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +39 -0
  163. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +56 -0
  164. package/esm2020/src/app/shared/image/image.model.mjs +2 -0
  165. package/esm2020/src/app/shared/image/image.module.mjs +29 -0
  166. package/esm2020/src/app/shared/image/image.service.mjs +98 -0
  167. package/{esm2015/src/app/shared/inputs.js → esm2020/src/app/shared/inputs.mjs} +4 -4
  168. package/esm2020/src/app/shared/interceptors/progess.interceptor.mjs +27 -0
  169. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +47 -0
  170. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +905 -0
  171. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +78 -0
  172. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +19 -0
  173. package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +209 -0
  174. package/esm2020/src/app/shared/material/badge/badge.directive.mjs +176 -0
  175. package/esm2020/src/app/shared/material/badge/badge.module.mjs +32 -0
  176. package/esm2020/src/app/shared/material/badge/badge.test.mjs +28 -0
  177. package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +68 -0
  178. package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +253 -0
  179. package/esm2020/src/app/shared/material/chips/chips.module.mjs +76 -0
  180. package/esm2020/src/app/shared/material/chips/material.chips.mjs +697 -0
  181. package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +143 -0
  182. package/esm2020/src/app/shared/material/datetime/datetime.module.mjs +91 -0
  183. package/esm2020/src/app/shared/material/datetime/material.date.mjs +388 -0
  184. package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +385 -0
  185. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +436 -0
  186. package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +108 -0
  187. package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +110 -0
  188. package/esm2020/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +103 -0
  189. package/esm2020/src/app/shared/material/duration/duration.module.mjs +67 -0
  190. package/{esm2015/src/app/shared/material/duration/duration.utils.js → esm2020/src/app/shared/material/duration/duration.utils.mjs} +0 -0
  191. package/esm2020/src/app/shared/material/duration/material.duration.mjs +257 -0
  192. package/esm2020/src/app/shared/material/latlong/latlong.utils.mjs +266 -0
  193. package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +381 -0
  194. package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +67 -0
  195. package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +102 -0
  196. package/{esm2015/src/app/shared/material/material.animations.js → esm2020/src/app/shared/material/material.animations.mjs} +1 -1
  197. package/esm2020/src/app/shared/material/material.module.mjs +224 -0
  198. package/esm2020/src/app/shared/material/material.testing.module.mjs +168 -0
  199. package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +98 -0
  200. package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +80 -0
  201. package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +190 -0
  202. package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +17 -0
  203. package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +162 -0
  204. package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +37 -0
  205. package/{esm2015/src/app/shared/material/numpad/numpad.model.js → esm2020/src/app/shared/material/numpad/numpad.model.mjs} +1 -1
  206. package/esm2020/src/app/shared/material/numpad/numpad.module.mjs +60 -0
  207. package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +46 -0
  208. package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +42 -0
  209. package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +22 -0
  210. package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +334 -0
  211. package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +51 -0
  212. package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +64 -0
  213. package/esm2020/src/app/shared/modules.mjs +11 -0
  214. package/esm2020/src/app/shared/observables.mjs +103 -0
  215. package/esm2020/src/app/shared/pipes/arrays.pipe.mjs +135 -0
  216. package/esm2020/src/app/shared/pipes/colors.pipe.mjs +23 -0
  217. package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +48 -0
  218. package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +66 -0
  219. package/{esm2015/src/app/shared/pipes/date-from-now.pipe.js → esm2020/src/app/shared/pipes/date-from-now.pipe.mjs} +13 -12
  220. package/{esm2015/src/app/shared/pipes/duration.pipe.js → esm2020/src/app/shared/pipes/duration.pipe.mjs} +13 -12
  221. package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +62 -0
  222. package/esm2020/src/app/shared/pipes/form.pipes.mjs +187 -0
  223. package/esm2020/src/app/shared/pipes/highlight.pipe.mjs +48 -0
  224. package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +46 -0
  225. package/esm2020/src/app/shared/pipes/maps.pipe.mjs +63 -0
  226. package/esm2020/src/app/shared/pipes/math.pipes.mjs +59 -0
  227. package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +21 -0
  228. package/esm2020/src/app/shared/pipes/number-format.pipe.mjs +30 -0
  229. package/esm2020/src/app/shared/pipes/pipes.module.mjs +218 -0
  230. package/esm2020/src/app/shared/pipes/property.pipes.mjs +93 -0
  231. package/esm2020/src/app/shared/pipes/string.pipes.mjs +95 -0
  232. package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +43 -0
  233. package/esm2020/src/app/shared/platforms.mjs +43 -0
  234. package/esm2020/src/app/shared/services/entity-service.class.mjs +7 -0
  235. package/esm2020/src/app/shared/services/job.utils.mjs +92 -0
  236. package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +337 -0
  237. package/esm2020/src/app/shared/services/progress-bar.service.mjs +33 -0
  238. package/esm2020/src/app/shared/services/startable-observable-service.class.mjs +119 -0
  239. package/esm2020/src/app/shared/services/startable-service.class.mjs +105 -0
  240. package/esm2020/src/app/shared/services/storage/storage.service.mjs +132 -0
  241. package/esm2020/src/app/shared/services/storage/storage.utils.mjs +13 -0
  242. package/esm2020/src/app/shared/services/translate-context.service.mjs +81 -0
  243. package/esm2020/src/app/shared/services/validator-service.class.mjs +2 -0
  244. package/esm2020/src/app/shared/services.mjs +62 -0
  245. package/esm2020/src/app/shared/shared-routing.module.mjs +63 -0
  246. package/esm2020/src/app/shared/shared.module.mjs +207 -0
  247. package/esm2020/src/app/shared/shared.testing.module.mjs +76 -0
  248. package/esm2020/src/app/shared/testing/observable.test.mjs +95 -0
  249. package/esm2020/src/app/shared/testing/tests.page.mjs +33 -0
  250. package/esm2020/src/app/shared/toast/toast.testing.mjs +51 -0
  251. package/esm2020/src/app/shared/toast/toast.testing.module.mjs +45 -0
  252. package/esm2020/src/app/shared/toast/toasts.mjs +144 -0
  253. package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +58 -0
  254. package/esm2020/src/app/shared/toolbar/toolbar.mjs +249 -0
  255. package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +53 -0
  256. package/esm2020/src/app/shared/types.mjs +2 -0
  257. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +57 -0
  258. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +45 -0
  259. package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +97 -0
  260. package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +204 -0
  261. package/esm2020/src/app/shared/upload-file/upload-file.model.mjs +20 -0
  262. package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +104 -0
  263. package/esm2020/src/app/shared/validator/validators.mjs +543 -0
  264. package/esm2020/src/app/shared/version/versions.mjs +81 -0
  265. package/esm2020/src/app/social/job/job.module.mjs +35 -0
  266. package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +213 -0
  267. package/esm2020/src/app/social/job/progression/job-progression.list.mjs +22 -0
  268. package/esm2020/src/app/social/job/progression/job-progression.model.mjs +23 -0
  269. package/esm2020/src/app/social/job/progression/job-progression.service.mjs +71 -0
  270. package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +52 -0
  271. package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +55 -0
  272. package/esm2020/src/app/social/job/testing/job.testing.module.mjs +35 -0
  273. package/esm2020/src/app/social/message/message.form.mjs +81 -0
  274. package/esm2020/src/app/social/message/message.modal.mjs +93 -0
  275. package/esm2020/src/app/social/message/message.model.mjs +65 -0
  276. package/esm2020/src/app/social/message/message.module.mjs +35 -0
  277. package/esm2020/src/app/social/message/message.service.mjs +84 -0
  278. package/esm2020/src/app/social/social.errors.mjs +10 -0
  279. package/esm2020/src/app/social/social.module.mjs +47 -0
  280. package/esm2020/src/app/social/social.testing.module.mjs +51 -0
  281. package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +108 -0
  282. package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +242 -0
  283. package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +229 -0
  284. package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +112 -0
  285. package/esm2020/src/app/social/user-event/testing/user-event.testing.module.mjs +35 -0
  286. package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +111 -0
  287. package/esm2020/src/app/social/user-event/user-event.model.mjs +2 -0
  288. package/esm2020/src/app/social/user-event/user-event.module.mjs +39 -0
  289. package/esm2020/src/app/social/user-event/user-event.service.mjs +487 -0
  290. package/esm2020/src/environments/environment.class.mjs +5 -0
  291. package/esm2020/src/environments/environment.mjs +86 -0
  292. package/esm2020/sumaris-net.ngx-components.mjs +5 -0
  293. package/fesm2015/sumaris-net.ngx-components.mjs +36563 -0
  294. package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -0
  295. package/fesm2020/sumaris-net.ngx-components.mjs +35734 -0
  296. package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -0
  297. package/index.d.ts +5 -0
  298. package/package.json +34 -32
  299. package/public_api.d.ts +137 -30
  300. package/resources/README.md +7 -0
  301. package/src/app/admin/admin-routing.module.d.ts +7 -0
  302. package/src/app/admin/admin.module.d.ts +7 -0
  303. package/src/app/admin/services/person.service.d.ts +5 -1
  304. package/src/app/admin/services/validator/person.validator.d.ts +8 -5
  305. package/src/app/admin/users/users.d.ts +44 -0
  306. package/src/app/admin/users/users.module.d.ts +13 -0
  307. package/src/app/core/about/{modal-about.d.ts → about.modal.d.ts} +3 -0
  308. package/src/app/core/about/about.module.d.ts +10 -0
  309. package/src/app/core/account/account.module.d.ts +11 -0
  310. package/src/app/core/account/{account.d.ts → account.page.d.ts} +23 -10
  311. package/src/app/core/auth/auth.form.d.ts +36 -0
  312. package/src/app/core/auth/auth.modal.d.ts +24 -0
  313. package/src/app/core/auth/auth.module.d.ts +11 -0
  314. package/src/app/core/core.module.d.ts +27 -0
  315. package/src/app/core/core.testing.module.d.ts +14 -0
  316. package/src/app/core/form/{form-buttons-bar.component.d.ts → buttons/form-buttons-bar.component.d.ts} +7 -2
  317. package/src/app/core/form/buttons/form-buttons-bar.module.d.ts +9 -0
  318. package/src/app/core/form/{editor.class.d.ts → entity/editor.class.d.ts} +84 -22
  319. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +129 -0
  320. package/src/app/core/form/{entity-editor.class.d.ts → entity/entity-editor.class.d.ts} +54 -29
  321. package/src/app/core/form/entity/entity-metadata.component.d.ts +13 -0
  322. package/src/app/core/form/entity/entity.module.d.ts +10 -0
  323. package/src/app/core/form/form.class.d.ts +57 -30
  324. package/src/app/core/form/form.module.d.ts +13 -0
  325. package/src/app/core/form/form.utils.d.ts +123 -114
  326. package/src/app/core/form/{list.form.d.ts → list/list.form.d.ts} +14 -11
  327. package/src/app/core/form/list/list.module.d.ts +9 -0
  328. package/src/app/core/form/properties/properties.form.d.ts +43 -0
  329. package/src/app/core/form/properties/properties.module.d.ts +9 -0
  330. package/src/app/core/form/properties/property.validator.d.ts +13 -0
  331. package/src/app/core/form/properties/testing/properties-form.test.d.ts +19 -0
  332. package/src/app/core/form/properties/testing/properties-form.testing.module.d.ts +12 -0
  333. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +10 -0
  334. package/src/app/core/form/text-popover/testing/text-popover.testing.module.d.ts +11 -0
  335. package/src/app/core/form/text-popover/text-form.component.d.ts +32 -0
  336. package/src/app/core/form/text-popover/text-popover.component.d.ts +45 -0
  337. package/src/app/core/form/text-popover/text-popover.module.d.ts +10 -0
  338. package/src/app/core/graphql/graphql.module.d.ts +5 -0
  339. package/src/app/core/graphql/graphql.service.d.ts +16 -5
  340. package/src/app/core/graphql/graphql.utils.d.ts +12 -1
  341. package/src/app/core/home/home.d.ts +9 -4
  342. package/src/app/core/home/home.module.d.ts +12 -0
  343. package/src/app/core/icon/icon.component.d.ts +6 -2
  344. package/src/app/core/icon/icon.module.d.ts +9 -0
  345. package/src/app/core/install/install-upgrade-card.component.d.ts +7 -9
  346. package/src/app/core/install/install-upgrade-card.module.d.ts +9 -0
  347. package/src/app/core/menu/menu.component.d.ts +22 -15
  348. package/src/app/core/menu/menu.model.d.ts +2 -0
  349. package/src/app/core/menu/menu.module.d.ts +8 -0
  350. package/src/app/core/menu/menu.service.d.ts +18 -6
  351. package/src/app/core/offline/update-offline-mode-card.component.d.ts +11 -0
  352. package/src/app/core/offline/update-offline-mode-card.module.d.ts +9 -0
  353. package/src/app/core/peer/select-peer.modal.d.ts +25 -8
  354. package/src/app/core/peer/select-peer.module.d.ts +11 -0
  355. package/src/app/core/register/{confirm/confirm.d.ts → register-confirm.page.d.ts} +6 -3
  356. package/src/app/core/register/{form/form-register.d.ts → register.form.d.ts} +15 -12
  357. package/src/app/core/register/{modal/modal-register.d.ts → register.modal.d.ts} +4 -1
  358. package/src/app/core/register/register.module.d.ts +12 -0
  359. package/src/app/core/services/account.service.d.ts +34 -13
  360. package/src/app/core/services/auth-guard.service.d.ts +3 -0
  361. package/src/app/core/services/base-entity-service.class.d.ts +10 -19
  362. package/src/app/core/services/base-graphql-service.class.d.ts +13 -9
  363. package/src/app/core/services/config/core.config.d.ts +25 -24
  364. package/src/app/core/services/config.service.d.ts +9 -3
  365. package/src/app/core/services/crypto.service.d.ts +26 -18
  366. package/src/app/core/services/errors.d.ts +1 -1
  367. package/src/app/core/services/local-settings.service.d.ts +15 -7
  368. package/src/app/core/services/model/config.model.d.ts +1 -0
  369. package/src/app/core/services/model/entity.decorators.d.ts +1 -9
  370. package/src/app/core/services/model/entity.model.d.ts +4 -1
  371. package/src/app/core/services/model/filter.model.d.ts +13 -2
  372. package/src/app/core/services/model/referential.model.d.ts +20 -14
  373. package/src/app/core/services/model/settings.model.d.ts +0 -1
  374. package/src/app/core/services/network.service.d.ts +34 -22
  375. package/src/app/core/services/network.types.d.ts +5 -0
  376. package/src/app/core/services/network.utils.d.ts +16 -0
  377. package/src/app/core/services/pipes/account.pipes.d.ts +7 -0
  378. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +4 -0
  379. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +4 -0
  380. package/src/app/core/services/pipes/usage-mode.pipes.d.ts +7 -0
  381. package/src/app/core/services/platform.service.d.ts +40 -27
  382. package/src/app/core/services/storage/entities-storage.service.d.ts +16 -9
  383. package/src/app/core/services/storage/entity-store.class.d.ts +6 -5
  384. package/src/app/core/services/testing/referential-filter.model.d.ts +9 -0
  385. package/src/app/core/services/testing/referential.validator.d.ts +22 -0
  386. package/src/app/core/services/validator/account.validator.d.ts +6 -3
  387. package/src/app/core/services/validator/base.validator.class.d.ts +9 -6
  388. package/src/app/core/services/validator/local-settings.validator.d.ts +8 -5
  389. package/src/app/core/services/validator/user-settings.validator.d.ts +6 -3
  390. package/src/app/core/settings/settings.module.d.ts +10 -0
  391. package/src/app/core/settings/settings.page.d.ts +13 -12
  392. package/src/app/core/table/actions-column.component.d.ts +4 -1
  393. package/src/app/core/table/async-table.class.d.ts +368 -0
  394. package/src/app/core/table/entities-async-table-datasource.class.d.ts +80 -0
  395. package/src/app/core/table/entities-table-datasource.class.d.ts +59 -36
  396. package/src/app/core/table/memory-table.class.d.ts +5 -3
  397. package/src/app/core/table/table-select-columns.component.d.ts +4 -5
  398. package/src/app/core/table/table.class.d.ts +67 -70
  399. package/src/app/core/table/table.model.d.ts +26 -0
  400. package/src/app/core/table/table.module.d.ts +10 -0
  401. package/src/app/core/table/table.utils.d.ts +2 -1
  402. package/src/app/core/table/testing/table.testing.d.ts +51 -0
  403. package/src/app/core/table/testing/table.testing.module.d.ts +11 -0
  404. package/src/app/shared/alerts.d.ts +4 -4
  405. package/src/app/shared/audio/audio.d.ts +20 -11
  406. package/src/app/shared/audio/audio.testing.d.ts +13 -0
  407. package/src/app/shared/audio/audio.testing.module.d.ts +11 -0
  408. package/src/app/shared/capacitor/keyboard.d.ts +16 -0
  409. package/src/app/shared/capacitor/plugins.d.ts +7 -0
  410. package/src/app/shared/constants.d.ts +2 -0
  411. package/src/app/shared/dates.d.ts +25 -4
  412. package/src/app/shared/debug/debug.component.d.ts +13 -0
  413. package/src/app/shared/debug/debug.module.d.ts +12 -0
  414. package/src/app/shared/directives/autofocus.directive.d.ts +11 -9
  415. package/src/app/shared/directives/autotitle.directive.d.ts +10 -0
  416. package/src/app/shared/directives/directives.module.d.ts +10 -0
  417. package/src/app/shared/directives/drag-and-drop.directive.d.ts +17 -0
  418. package/src/app/shared/directives/ng-var.directive.d.ts +12 -0
  419. package/src/app/shared/directives/resizable/resizable.component.d.ts +21 -0
  420. package/src/app/shared/directives/resizable/resizable.directive.d.ts +12 -0
  421. package/src/app/shared/directives/resizable/resizable.module.d.ts +8 -0
  422. package/src/app/shared/events.d.ts +6 -6
  423. package/src/app/shared/file/csv.utils.d.ts +19 -0
  424. package/src/app/shared/file/file.service.d.ts +8 -5
  425. package/src/app/shared/file/file.utils.d.ts +20 -0
  426. package/src/app/shared/file/images.utils.d.ts +19 -0
  427. package/src/app/shared/file/json.utils.d.ts +11 -0
  428. package/src/app/shared/file/uri.utils.d.ts +7 -0
  429. package/src/app/shared/form/field.component.d.ts +12 -3
  430. package/src/app/shared/form/field.model.d.ts +7 -6
  431. package/src/app/shared/form/loading-spinner.d.ts +3 -0
  432. package/src/app/shared/forms.d.ts +89 -0
  433. package/src/app/shared/functions.d.ts +21 -13
  434. package/src/app/shared/geolocation/geolocation.utils.d.ts +11 -0
  435. package/src/app/shared/gesture/gesture-config.d.ts +3 -0
  436. package/src/app/shared/gesture/hammer.utils.d.ts +11 -11
  437. package/src/app/shared/graph/graph-colors.d.ts +8 -8
  438. package/src/app/shared/guard/component-dirty.guard.d.ts +3 -0
  439. package/src/app/shared/help/help.modal.d.ts +7 -4
  440. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +3 -0
  441. package/src/app/shared/hotkeys/hotkeys.service.d.ts +7 -3
  442. package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +9 -0
  443. package/src/app/shared/http/http.utils.d.ts +14 -1
  444. package/src/app/shared/image/gallery/image-gallery.component.d.ts +101 -0
  445. package/src/app/shared/image/gallery/image-gallery.module.d.ts +14 -0
  446. package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +12 -0
  447. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +33 -0
  448. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +16 -0
  449. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +12 -0
  450. package/src/app/shared/image/image.model.d.ts +5 -0
  451. package/src/app/shared/image/image.module.d.ts +8 -0
  452. package/src/app/shared/image/image.service.d.ts +32 -0
  453. package/src/app/shared/inputs.d.ts +3 -3
  454. package/src/app/shared/interceptors/progess.interceptor.d.ts +2 -2
  455. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +36 -0
  456. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +69 -77
  457. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +19 -0
  458. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +4 -0
  459. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +24 -17
  460. package/src/app/shared/material/badge/badge.directive.d.ts +30 -0
  461. package/src/app/shared/material/badge/badge.module.d.ts +10 -0
  462. package/src/app/shared/material/badge/badge.test.d.ts +13 -0
  463. package/src/app/shared/material/boolean/boolean.module.d.ts +17 -0
  464. package/src/app/shared/material/boolean/material.boolean.d.ts +11 -10
  465. package/src/app/shared/material/chips/chips.module.d.ts +20 -1
  466. package/src/app/shared/material/chips/material.chips.d.ts +52 -19
  467. package/src/app/shared/material/chips/testing/chips.test.d.ts +12 -7
  468. package/src/app/shared/material/datetime/datetime.module.d.ts +22 -0
  469. package/src/app/shared/material/datetime/material.date.d.ts +45 -38
  470. package/src/app/shared/material/datetime/material.dateshort.d.ts +47 -38
  471. package/src/app/shared/material/datetime/material.datetime.d.ts +40 -39
  472. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +12 -9
  473. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +30 -0
  474. package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +29 -0
  475. package/src/app/shared/material/duration/duration.module.d.ts +16 -0
  476. package/src/app/shared/material/duration/material.duration.d.ts +14 -10
  477. package/src/app/shared/material/latlong/latlong.utils.d.ts +2 -2
  478. package/src/app/shared/material/latlong/material.latlong.d.ts +27 -23
  479. package/src/app/shared/material/latlong/material.latlong.module.d.ts +17 -0
  480. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +13 -7
  481. package/src/app/shared/material/material.module.d.ts +43 -0
  482. package/src/app/shared/material/material.testing.module.d.ts +25 -0
  483. package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +3 -0
  484. package/src/app/shared/material/numpad/numpad.component.d.ts +4 -1
  485. package/src/app/shared/material/numpad/numpad.container.d.ts +5 -2
  486. package/src/app/shared/material/numpad/numpad.content.d.ts +3 -0
  487. package/src/app/shared/material/numpad/numpad.directive.d.ts +4 -1
  488. package/src/app/shared/material/numpad/numpad.dom-service.d.ts +3 -0
  489. package/src/app/shared/material/numpad/numpad.model.d.ts +1 -1
  490. package/src/app/shared/material/numpad/numpad.module.d.ts +14 -0
  491. package/src/app/shared/material/numpad/testing/numpad.test.d.ts +13 -0
  492. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +3 -0
  493. package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +3 -0
  494. package/src/app/shared/material/swipe/material.swipe.d.ts +12 -8
  495. package/src/app/shared/material/swipe/swipe.module.d.ts +13 -0
  496. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +11 -9
  497. package/src/app/shared/modules.d.ts +8 -0
  498. package/src/app/shared/observables.d.ts +18 -10
  499. package/src/app/shared/pipes/arrays.pipe.d.ts +27 -2
  500. package/src/app/shared/pipes/colors.pipe.d.ts +9 -0
  501. package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +10 -2
  502. package/src/app/shared/pipes/date-format.pipe.d.ts +25 -9
  503. package/src/app/shared/pipes/date-from-now.pipe.d.ts +4 -0
  504. package/src/app/shared/pipes/duration.pipe.d.ts +4 -0
  505. package/src/app/shared/pipes/file-size.pipe.d.ts +3 -0
  506. package/src/app/shared/pipes/form.pipes.d.ts +43 -3
  507. package/src/app/shared/pipes/highlight.pipe.d.ts +4 -0
  508. package/src/app/shared/pipes/latlong-format.pipe.d.ts +13 -4
  509. package/src/app/shared/pipes/maps.pipe.d.ts +10 -0
  510. package/src/app/shared/pipes/math.pipes.d.ts +10 -0
  511. package/src/app/shared/pipes/ng-init.pipe.d.ts +3 -0
  512. package/src/app/shared/pipes/number-format.pipe.d.ts +7 -1
  513. package/src/app/shared/pipes/pipes.module.d.ts +24 -0
  514. package/src/app/shared/pipes/property.pipes.d.ts +26 -0
  515. package/src/app/shared/pipes/string.pipes.d.ts +24 -0
  516. package/src/app/shared/pipes/translate-context.pipe.d.ts +8 -1
  517. package/src/app/shared/platforms.d.ts +8 -0
  518. package/src/app/shared/services/entity-service.class.d.ts +28 -15
  519. package/src/app/shared/services/job.utils.d.ts +4 -2
  520. package/src/app/shared/services/memory-entity-service.class.d.ts +31 -10
  521. package/src/app/shared/services/progress-bar.service.d.ts +15 -4
  522. package/src/app/shared/services/startable-observable-service.class.d.ts +33 -0
  523. package/src/app/shared/services/startable-service.class.d.ts +13 -9
  524. package/src/app/shared/services/storage/storage.service.d.ts +23 -0
  525. package/src/app/shared/services/storage/storage.utils.d.ts +19 -0
  526. package/src/app/shared/services/translate-context.service.d.ts +3 -0
  527. package/src/app/shared/services/validator-service.class.d.ts +2 -2
  528. package/src/app/shared/services.d.ts +9 -0
  529. package/src/app/shared/shared-routing.module.d.ts +7 -0
  530. package/src/app/shared/shared.module.d.ts +24 -0
  531. package/src/app/shared/shared.testing.module.d.ts +14 -0
  532. package/src/app/shared/testing/observable.test.d.ts +25 -0
  533. package/src/app/shared/{material/testing/material.testing.page.d.ts → testing/tests.page.d.ts} +6 -2
  534. package/src/app/shared/toast/toast.testing.d.ts +15 -0
  535. package/src/app/shared/toast/toast.testing.module.d.ts +11 -0
  536. package/src/app/shared/{toasts.d.ts → toast/toasts.d.ts} +5 -2
  537. package/src/app/shared/toolbar/modal-toolbar.d.ts +5 -2
  538. package/src/app/shared/toolbar/toolbar.d.ts +22 -10
  539. package/src/app/shared/toolbar/toolbar.module.d.ts +15 -0
  540. package/src/app/shared/types.d.ts +4 -0
  541. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +20 -0
  542. package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +11 -0
  543. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +39 -0
  544. package/src/app/shared/upload-file/upload-file.component.d.ts +48 -0
  545. package/src/app/shared/upload-file/upload-file.model.d.ts +30 -0
  546. package/src/app/shared/validator/form-error-adapter.class.d.ts +6 -1
  547. package/src/app/shared/validator/validators.d.ts +47 -11
  548. package/src/app/shared/version/versions.d.ts +2 -0
  549. package/src/app/social/job/job.module.d.ts +11 -0
  550. package/src/app/social/job/progression/job-progression.icon.d.ts +47 -0
  551. package/src/app/social/job/progression/job-progression.list.d.ts +15 -0
  552. package/src/app/social/job/progression/job-progression.model.d.ts +11 -0
  553. package/src/app/social/job/progression/job-progression.service.d.ts +34 -0
  554. package/src/app/social/job/testing/job-progression.testing.d.ts +17 -0
  555. package/src/app/social/job/testing/job-progression.testing.service.d.ts +17 -0
  556. package/src/app/social/job/testing/job.testing.module.d.ts +11 -0
  557. package/src/app/social/message/message.form.d.ts +30 -0
  558. package/src/app/social/message/message.modal.d.ts +39 -0
  559. package/src/app/social/message/message.model.d.ts +31 -0
  560. package/src/app/social/message/message.module.d.ts +11 -0
  561. package/src/app/social/message/message.service.d.ts +27 -0
  562. package/src/app/social/social.errors.d.ts +9 -0
  563. package/src/app/social/social.module.d.ts +18 -2
  564. package/src/app/social/social.testing.module.d.ts +13 -0
  565. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +29 -0
  566. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +67 -0
  567. package/src/app/social/user-event/testing/user-event.testing.d.ts +34 -0
  568. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +44 -0
  569. package/src/app/social/user-event/testing/user-event.testing.module.d.ts +11 -0
  570. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +41 -0
  571. package/src/app/social/user-event/user-event.model.d.ts +45 -0
  572. package/src/app/social/user-event/user-event.module.d.ts +12 -0
  573. package/src/app/social/user-event/user-event.service.d.ts +124 -0
  574. package/src/assets/audio/beep-notification.mp3 +0 -0
  575. package/src/assets/i18n/en-US.json +83 -18
  576. package/src/assets/i18n/en.json +83 -18
  577. package/src/assets/i18n/fr.json +95 -21
  578. package/src/assets/manifest.json +5 -5
  579. package/src/environments/environment.class.d.ts +12 -1
  580. package/src/environments/environment.d.ts +1 -1
  581. package/src/theme/_icons.scss +1 -1
  582. package/src/theme/_ionic.globals.scss +6 -1
  583. package/src/theme/_material.globals.scss +32 -32
  584. package/src/theme/_material.scss +32 -6
  585. package/src/theme/_mixins.scss +6 -4
  586. package/src/theme/_ngx-components.globals.scss +1 -0
  587. package/src/theme/_ngx-components.scss +222 -39
  588. package/src/theme/_print.scss +24 -0
  589. package/src/theme/_responsive.scss +12 -3
  590. package/bundles/sumaris-net.ngx-components.umd.js +0 -28721
  591. package/bundles/sumaris-net.ngx-components.umd.js.map +0 -1
  592. package/bundles/sumaris-net.ngx-components.umd.min.js +0 -25
  593. package/bundles/sumaris-net.ngx-components.umd.min.js.map +0 -1
  594. package/esm2015/public_api.js +0 -183
  595. package/esm2015/src/app/admin/admin-routing.module.js +0 -32
  596. package/esm2015/src/app/admin/admin.module.js +0 -33
  597. package/esm2015/src/app/admin/services/errors.js +0 -6
  598. package/esm2015/src/app/admin/services/filter/person.filter.js +0 -59
  599. package/esm2015/src/app/admin/services/person.service.js +0 -179
  600. package/esm2015/src/app/admin/services/validator/person.validator.js +0 -37
  601. package/esm2015/src/app/admin/users/list/users.js +0 -196
  602. package/esm2015/src/app/core/about/modal-about.js +0 -63
  603. package/esm2015/src/app/core/account/account.js +0 -193
  604. package/esm2015/src/app/core/auth/form/form-auth.js +0 -126
  605. package/esm2015/src/app/core/auth/modal/modal-auth.js +0 -66
  606. package/esm2015/src/app/core/core.module.js +0 -114
  607. package/esm2015/src/app/core/form/editor.class.js +0 -559
  608. package/esm2015/src/app/core/form/entity-editor.class.js +0 -617
  609. package/esm2015/src/app/core/form/entity-metadata.component.js +0 -22
  610. package/esm2015/src/app/core/form/form-buttons-bar.component.js +0 -60
  611. package/esm2015/src/app/core/form/form.class.js +0 -279
  612. package/esm2015/src/app/core/form/form.utils.js +0 -599
  613. package/esm2015/src/app/core/form/list.form.js +0 -219
  614. package/esm2015/src/app/core/form/properties.form.js +0 -119
  615. package/esm2015/src/app/core/graphql/graphql.module.js +0 -18
  616. package/esm2015/src/app/core/graphql/graphql.service.js +0 -733
  617. package/esm2015/src/app/core/graphql/graphql.utils.js +0 -107
  618. package/esm2015/src/app/core/home/home.js +0 -263
  619. package/esm2015/src/app/core/icon/icon.component.js +0 -29
  620. package/esm2015/src/app/core/install/install-upgrade-card.component.js +0 -388
  621. package/esm2015/src/app/core/menu/menu.component.js +0 -279
  622. package/esm2015/src/app/core/menu/menu.model.js +0 -33
  623. package/esm2015/src/app/core/menu/menu.module.js +0 -28
  624. package/esm2015/src/app/core/menu/menu.service.js +0 -28
  625. package/esm2015/src/app/core/peer/select-peer.modal.js +0 -134
  626. package/esm2015/src/app/core/register/confirm/confirm.js +0 -86
  627. package/esm2015/src/app/core/register/form/form-register.js +0 -172
  628. package/esm2015/src/app/core/register/modal/modal-register.js +0 -55
  629. package/esm2015/src/app/core/services/account.service.js +0 -1101
  630. package/esm2015/src/app/core/services/auth-guard.service.js +0 -77
  631. package/esm2015/src/app/core/services/base-entity-service.class.js +0 -448
  632. package/esm2015/src/app/core/services/config/core.config.js +0 -162
  633. package/esm2015/src/app/core/services/config.service.js +0 -377
  634. package/esm2015/src/app/core/services/crypto.service.js +0 -127
  635. package/esm2015/src/app/core/services/local-settings.service.js +0 -454
  636. package/esm2015/src/app/core/services/model/account.model.js +0 -50
  637. package/esm2015/src/app/core/services/model/config.model.js +0 -89
  638. package/esm2015/src/app/core/services/model/department.model.js +0 -30
  639. package/esm2015/src/app/core/services/model/entity.decorators.js +0 -104
  640. package/esm2015/src/app/core/services/model/entity.model.js +0 -230
  641. package/esm2015/src/app/core/services/model/filter.model.js +0 -68
  642. package/esm2015/src/app/core/services/model/peer.model.js +0 -68
  643. package/esm2015/src/app/core/services/model/person.model.js +0 -81
  644. package/esm2015/src/app/core/services/model/referential.model.js +0 -149
  645. package/esm2015/src/app/core/services/model/settings.model.js +0 -75
  646. package/esm2015/src/app/core/services/network.service.js +0 -581
  647. package/esm2015/src/app/core/services/network.utils.js +0 -19
  648. package/esm2015/src/app/core/services/pipes/account.pipes.js +0 -28
  649. package/esm2015/src/app/core/services/pipes/department-to-string.pipe.js +0 -18
  650. package/esm2015/src/app/core/services/pipes/person-to-string.pipe.js +0 -18
  651. package/esm2015/src/app/core/services/pipes/usage-mode.pipes.js +0 -27
  652. package/esm2015/src/app/core/services/platform.service.js +0 -424
  653. package/esm2015/src/app/core/services/storage/entities-storage.service.js +0 -445
  654. package/esm2015/src/app/core/services/storage/entity-store.class.js +0 -458
  655. package/esm2015/src/app/core/services/validator/account.validator.js +0 -55
  656. package/esm2015/src/app/core/services/validator/base.validator.class.js +0 -48
  657. package/esm2015/src/app/core/services/validator/local-settings.validator.js +0 -72
  658. package/esm2015/src/app/core/services/validator/user-settings.validator.js +0 -30
  659. package/esm2015/src/app/core/settings/settings.page.js +0 -301
  660. package/esm2015/src/app/core/table/actions-column.component.js +0 -74
  661. package/esm2015/src/app/core/table/entities-table-datasource.class.js +0 -326
  662. package/esm2015/src/app/core/table/memory-table.class.js +0 -64
  663. package/esm2015/src/app/core/table/table-select-columns.component.js +0 -44
  664. package/esm2015/src/app/core/table/table.class.js +0 -1552
  665. package/esm2015/src/app/core/table/table.utils.js +0 -13
  666. package/esm2015/src/app/shared/alerts.js +0 -251
  667. package/esm2015/src/app/shared/audio/audio.js +0 -178
  668. package/esm2015/src/app/shared/colors.utils.js +0 -2
  669. package/esm2015/src/app/shared/constants.js +0 -6
  670. package/esm2015/src/app/shared/dates.js +0 -82
  671. package/esm2015/src/app/shared/directives/autofocus.directive.js +0 -97
  672. package/esm2015/src/app/shared/directives/directives.module.js +0 -21
  673. package/esm2015/src/app/shared/events.js +0 -56
  674. package/esm2015/src/app/shared/file/base64-image-reader.js +0 -141
  675. package/esm2015/src/app/shared/file/file.service.js +0 -121
  676. package/esm2015/src/app/shared/form/field.component.js +0 -206
  677. package/esm2015/src/app/shared/form/loading-spinner.js +0 -24
  678. package/esm2015/src/app/shared/functions.js +0 -440
  679. package/esm2015/src/app/shared/gesture/hammer.utils.js +0 -2
  680. package/esm2015/src/app/shared/graph/graph-colors.js +0 -256
  681. package/esm2015/src/app/shared/guard/component-dirty.guard.js +0 -61
  682. package/esm2015/src/app/shared/help/help.modal.js +0 -56
  683. package/esm2015/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.js +0 -20
  684. package/esm2015/src/app/shared/hotkeys/hotkeys.service.js +0 -87
  685. package/esm2015/src/app/shared/hotkeys/shared-hotkeys.module.js +0 -29
  686. package/esm2015/src/app/shared/http/http.utils.js +0 -23
  687. package/esm2015/src/app/shared/interceptors/progess.interceptor.js +0 -20
  688. package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +0 -711
  689. package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.module.js +0 -46
  690. package/esm2015/src/app/shared/material/autocomplete/testing/autocomplete.test.js +0 -167
  691. package/esm2015/src/app/shared/material/badge/badge-icon.directive.js +0 -62
  692. package/esm2015/src/app/shared/material/badge/badge-icon.module.js +0 -23
  693. package/esm2015/src/app/shared/material/badge/badge-icon.test.js +0 -10
  694. package/esm2015/src/app/shared/material/boolean/boolean.module.js +0 -41
  695. package/esm2015/src/app/shared/material/boolean/material.boolean.js +0 -234
  696. package/esm2015/src/app/shared/material/chips/chips.module.js +0 -45
  697. package/esm2015/src/app/shared/material/chips/material.chips.js +0 -342
  698. package/esm2015/src/app/shared/material/chips/testing/chips.test.js +0 -100
  699. package/esm2015/src/app/shared/material/datetime/datetime.module.js +0 -54
  700. package/esm2015/src/app/shared/material/datetime/material.date.js +0 -307
  701. package/esm2015/src/app/shared/material/datetime/material.dateshort.js +0 -315
  702. package/esm2015/src/app/shared/material/datetime/material.datetime.js +0 -389
  703. package/esm2015/src/app/shared/material/datetime/testing/mat-date-time.test.js +0 -102
  704. package/esm2015/src/app/shared/material/duration/duration.module.js +0 -40
  705. package/esm2015/src/app/shared/material/duration/material.duration.js +0 -245
  706. package/esm2015/src/app/shared/material/latlong/latlong.utils.js +0 -249
  707. package/esm2015/src/app/shared/material/latlong/material.latlong.js +0 -345
  708. package/esm2015/src/app/shared/material/latlong/material.latlong.module.js +0 -41
  709. package/esm2015/src/app/shared/material/latlong/testing/latlong.test.js +0 -70
  710. package/esm2015/src/app/shared/material/material.module.js +0 -93
  711. package/esm2015/src/app/shared/material/numpad/numpad.append-to-input.directive.js +0 -96
  712. package/esm2015/src/app/shared/material/numpad/numpad.component.js +0 -73
  713. package/esm2015/src/app/shared/material/numpad/numpad.container.js +0 -149
  714. package/esm2015/src/app/shared/material/numpad/numpad.content.js +0 -14
  715. package/esm2015/src/app/shared/material/numpad/numpad.directive.js +0 -148
  716. package/esm2015/src/app/shared/material/numpad/numpad.dom-service.js +0 -37
  717. package/esm2015/src/app/shared/material/numpad/numpad.module.js +0 -39
  718. package/esm2015/src/app/shared/material/paginator/material.paginator-i18n.js +0 -44
  719. package/esm2015/src/app/shared/material/stepper/material.stepper-i18n.js +0 -24
  720. package/esm2015/src/app/shared/material/swipe/material.swipe.js +0 -306
  721. package/esm2015/src/app/shared/material/swipe/swipe.module.js +0 -33
  722. package/esm2015/src/app/shared/material/swipe/testing/swipe.test.js +0 -68
  723. package/esm2015/src/app/shared/material/testing/material.testing.module.js +0 -92
  724. package/esm2015/src/app/shared/material/testing/material.testing.page.js +0 -34
  725. package/esm2015/src/app/shared/observables.js +0 -68
  726. package/esm2015/src/app/shared/pipes/arrays.pipe.js +0 -92
  727. package/esm2015/src/app/shared/pipes/date-diff-duration.pipe.js +0 -46
  728. package/esm2015/src/app/shared/pipes/date-format.pipe.js +0 -40
  729. package/esm2015/src/app/shared/pipes/file-size.pipe.js +0 -58
  730. package/esm2015/src/app/shared/pipes/form.pipes.js +0 -70
  731. package/esm2015/src/app/shared/pipes/highlight.pipe.js +0 -43
  732. package/esm2015/src/app/shared/pipes/latlong-format.pipe.js +0 -43
  733. package/esm2015/src/app/shared/pipes/maps.pipe.js +0 -48
  734. package/esm2015/src/app/shared/pipes/math.pipes.js +0 -44
  735. package/esm2015/src/app/shared/pipes/ng-init.pipe.js +0 -18
  736. package/esm2015/src/app/shared/pipes/number-format.pipe.js +0 -22
  737. package/esm2015/src/app/shared/pipes/pipes.module.js +0 -100
  738. package/esm2015/src/app/shared/pipes/properties.pipe.js +0 -20
  739. package/esm2015/src/app/shared/pipes/string.pipes.js +0 -52
  740. package/esm2015/src/app/shared/pipes/translate-context.pipe.js +0 -38
  741. package/esm2015/src/app/shared/services/entity-service.class.js +0 -17
  742. package/esm2015/src/app/shared/services/job.utils.js +0 -78
  743. package/esm2015/src/app/shared/services/memory-entity-service.class.js +0 -226
  744. package/esm2015/src/app/shared/services/progress-bar.service.js +0 -30
  745. package/esm2015/src/app/shared/services/startable-service.class.js +0 -95
  746. package/esm2015/src/app/shared/services/storage.utils.js +0 -41
  747. package/esm2015/src/app/shared/services/translate-context.service.js +0 -83
  748. package/esm2015/src/app/shared/services/validator-service.class.js +0 -2
  749. package/esm2015/src/app/shared/shared-routing.module.js +0 -54
  750. package/esm2015/src/app/shared/shared.module.js +0 -125
  751. package/esm2015/src/app/shared/shared.testing.module.js +0 -19
  752. package/esm2015/src/app/shared/toasts.js +0 -119
  753. package/esm2015/src/app/shared/toolbar/modal-toolbar.js +0 -53
  754. package/esm2015/src/app/shared/toolbar/toolbar.js +0 -195
  755. package/esm2015/src/app/shared/types.js +0 -2
  756. package/esm2015/src/app/shared/validator/form-error-adapter.class.js +0 -75
  757. package/esm2015/src/app/shared/validator/validators.js +0 -421
  758. package/esm2015/src/app/shared/version/versions.js +0 -77
  759. package/esm2015/src/app/social/list/user-events.table.js +0 -159
  760. package/esm2015/src/app/social/services/errors.js +0 -5
  761. package/esm2015/src/app/social/services/model/user-event.model.js +0 -46
  762. package/esm2015/src/app/social/services/social.fragments.js +0 -27
  763. package/esm2015/src/app/social/services/user-event.service.js +0 -367
  764. package/esm2015/src/app/social/social.module.js +0 -31
  765. package/esm2015/src/app/vendor.js +0 -5
  766. package/esm2015/src/environments/environment.class.js +0 -5
  767. package/esm2015/src/environments/environment.js +0 -75
  768. package/esm2015/sumaris-net.ngx-components.js +0 -17
  769. package/fesm2015/sumaris-net.ngx-components.js +0 -24434
  770. package/fesm2015/sumaris-net.ngx-components.js.map +0 -1
  771. package/src/app/admin/services/errors.d.ts +0 -5
  772. package/src/app/admin/users/list/users.d.ts +0 -49
  773. package/src/app/core/auth/form/form-auth.d.ts +0 -33
  774. package/src/app/core/auth/modal/modal-auth.d.ts +0 -14
  775. package/src/app/core/form/entity-metadata.component.d.ts +0 -10
  776. package/src/app/core/form/properties.form.d.ts +0 -40
  777. package/src/app/shared/colors.utils.d.ts +0 -3
  778. package/src/app/shared/file/base64-image-reader.d.ts +0 -18
  779. package/src/app/shared/material/badge/badge-icon.directive.d.ts +0 -15
  780. package/src/app/shared/material/badge/badge-icon.module.d.ts +0 -2
  781. package/src/app/shared/material/badge/badge-icon.test.d.ts +0 -2
  782. package/src/app/shared/material/testing/material.testing.module.d.ts +0 -2
  783. package/src/app/shared/pipes/properties.pipe.d.ts +0 -7
  784. package/src/app/shared/services/storage.utils.d.ts +0 -13
  785. package/src/app/social/list/user-events.table.d.ts +0 -59
  786. package/src/app/social/services/errors.d.ts +0 -4
  787. package/src/app/social/services/model/user-event.model.d.ts +0 -29
  788. package/src/app/social/services/social.fragments.d.ts +0 -4
  789. package/src/app/social/services/user-event.service.d.ts +0 -82
  790. package/src/app/vendor.d.ts +0 -4
  791. package/src/assets/manifest.sumaris.json +0 -17
  792. package/sumaris-net.ngx-components.d.ts +0 -16
  793. package/sumaris-net.ngx-components.metadata.json +0 -1
@@ -0,0 +1,92 @@
1
+ import { BehaviorSubject, defer } from 'rxjs';
2
+ import { isNil, isNotNil, toNumber } from '../functions';
3
+ // @dynamic
4
+ export class JobUtils {
5
+ static defers(runnableList, opts) {
6
+ return runnableList.map(runnable => JobUtils.defer(runnable, opts));
7
+ }
8
+ static defer(runnable, opts) {
9
+ return defer(() => JobUtils.run(runnable, opts));
10
+ }
11
+ static run(runnable, opts) {
12
+ const progression = new BehaviorSubject(0);
13
+ runnable({ ...opts, progression })
14
+ .then(() => {
15
+ if (opts?.maxProgression)
16
+ progression.next(opts.maxProgression);
17
+ progression.complete();
18
+ })
19
+ .catch(err => progression.error(err));
20
+ return progression;
21
+ }
22
+ static async fetchAllPages(loadPageFn, opts) {
23
+ const maxProgression = toNumber(opts?.maxProgression, 100);
24
+ const progression = opts?.progression;
25
+ let total;
26
+ let pageCount;
27
+ let progressionStep;
28
+ let currentPageDataCount;
29
+ const fetchSize = toNumber(opts?.fetchSize, 1000);
30
+ if (fetchSize <= 0)
31
+ throw new Error('Unable to fetch pages: invalid fetchSize: ' + fetchSize);
32
+ let offset = 0;
33
+ let data = [];
34
+ do {
35
+ if (opts && opts.logPrefix)
36
+ console.debug(`${opts.logPrefix} Fetching page #${offset / fetchSize}...`);
37
+ // Fetch a page
38
+ const res = await loadPageFn(offset, fetchSize);
39
+ // Concat to previous result
40
+ data = data.concat(res.data);
41
+ // Compute variables, for next loop
42
+ currentPageDataCount = res.data && res.data.length || 0;
43
+ offset += currentPageDataCount;
44
+ // Set total count (only once)
45
+ if (isNil(total) && isNotNil(res.total)) {
46
+ total = res.total;
47
+ // Compute the number of page
48
+ pageCount = Math.round(res.total / fetchSize + 0.5); // Round to HALF_UP integer
49
+ // Compute step, by dividing maxProgression by number of page
50
+ if (progression) {
51
+ progressionStep = maxProgression / pageCount;
52
+ // DEBUG
53
+ if (opts && opts.logPrefix)
54
+ console.debug(`${opts.logPrefix} {pageCount: ${pageCount}, progress: ${progression.value?.toFixed(2)}, pageProgressStep: ${progressionStep?.toFixed(1)}}`);
55
+ }
56
+ }
57
+ // Increment progression on each iteration (if possible)
58
+ if (isNotNil(progressionStep)) {
59
+ progression.next(progression.value + progressionStep);
60
+ }
61
+ if (opts?.onPageLoaded)
62
+ opts.onPageLoaded(res);
63
+ } while (currentPageDataCount > 0 && ((isNil(total) && currentPageDataCount === fetchSize) || (isNotNil(total) && (offset < total))));
64
+ // Complete progression to reach progressionStep value (because of round)
65
+ if (isNotNil(progressionStep)) {
66
+ // If total return by loadAll was bad !
67
+ if (isNotNil(total) && data.length < total) {
68
+ console.warn(`A function loadAll() returned a bad total (less than all page's data)! Expected ${total} but fetch ${data.length}`);
69
+ total = data.length;
70
+ pageCount = Math.round(data.length / fetchSize + 0.5);
71
+ }
72
+ // Compute final increment, using the real page count
73
+ progressionStep = Math.max(0, maxProgression - (progressionStep * pageCount));
74
+ }
75
+ // Or increment once (e.g. when total is not known, in received LoadResult)
76
+ else if (progression) {
77
+ progressionStep = maxProgression;
78
+ }
79
+ // DEBUG
80
+ if (opts && opts.logPrefix)
81
+ console.debug(`${opts.logPrefix} All pages fetched - {progress: ${progression.value?.toFixed(2)}, lastProgressStep: ${progressionStep?.toFixed(1)}`);
82
+ // Final increment
83
+ if (progression && progressionStep > 0) {
84
+ progression.next(progression.value + progressionStep);
85
+ }
86
+ return {
87
+ data,
88
+ total
89
+ };
90
+ }
91
+ }
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvc2VydmljZXMvam9iLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQzFELE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQVV6RCxXQUFXO0FBQ1gsTUFBTSxPQUFPLFFBQVE7SUFFbkIsTUFBTSxDQUFDLE1BQU0sQ0FBMkMsWUFBNEMsRUFBRSxJQUFRO1FBQzVHLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQTJDLFFBQXNDLEVBQUUsSUFBUTtRQUNyRyxPQUFPLEtBQUssQ0FBcUIsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUcsQ0FBMkMsUUFBc0MsRUFBRSxJQUFPO1FBRWxHLE1BQU0sV0FBVyxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ25ELFFBQVEsQ0FBQyxFQUFDLEdBQUcsSUFBSSxFQUFFLFdBQVcsRUFBQyxDQUFDO2FBQzdCLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVCxJQUFJLElBQUksRUFBRSxjQUFjO2dCQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2hFLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVB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LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc05pbCwgaXNOb3ROaWwsIHRvTnVtYmVyIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IExvYWRSZXN1bHQsIExvYWRSZXN1bHRCeVBhZ2VGbiB9IGZyb20gJy4vZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuXG5leHBvcnQgdHlwZSBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbkZuPE8gZXh0ZW5kcyBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbk9wdGlvbnM+ID0gKG9wdHM/OiBPKSA9PiBQcm9taXNlPGFueT47XG5leHBvcnQgaW50ZXJmYWNlIENhbGxhYmxlV2l0aFByb2dyZXNzaW9uT3B0aW9ucyB7XG4gIG1heFByb2dyZXNzaW9uPzogbnVtYmVyO1xuICBwcm9ncmVzc2lvbj86IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+O1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgSm9iVXRpbHMge1xuXG4gIHN0YXRpYyBkZWZlcnM8TyBleHRlbmRzIENhbGxhYmxlV2l0aFByb2dyZXNzaW9uT3B0aW9ucz4ocnVubmFibGVMaXN0OiBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbkZuPE8+W10sIG9wdHM/OiBPKTogT2JzZXJ2YWJsZTxudW1iZXI+W10ge1xuICAgIHJldHVybiBydW5uYWJsZUxpc3QubWFwKHJ1bm5hYmxlID0+IEpvYlV0aWxzLmRlZmVyKHJ1bm5hYmxlLCBvcHRzKSk7XG4gIH1cblxuICBzdGF0aWMgZGVmZXI8TyBleHRlbmRzIENhbGxhYmxlV2l0aFByb2dyZXNzaW9uT3B0aW9ucz4ocnVubmFibGU6IENhbGxhYmxlV2l0aFByb2dyZXNzaW9uRm48Tz4sIG9wdHM/OiBPKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gZGVmZXI8T2JzZXJ2YWJsZTxudW1iZXI+PigoKSA9PiBKb2JVdGlscy5ydW4ocnVubmFibGUsIG9wdHMpKTtcbiAgfVxuXG4gIHN0YXRpYyBydW48TyBleHRlbmRzIENhbGxhYmxlV2l0aFByb2dyZXNzaW9uT3B0aW9ucz4ocnVubmFibGU6IENhbGxhYmxlV2l0aFByb2dyZXNzaW9uRm48Tz4sIG9wdHM6IE8pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuXG4gICAgY29uc3QgcHJvZ3Jlc3Npb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgcnVubmFibGUoey4uLm9wdHMsIHByb2dyZXNzaW9ufSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKG9wdHM/Lm1heFByb2dyZXNzaW9uKSBwcm9ncmVzc2lvbi5uZXh0KG9wdHMubWF4UHJvZ3Jlc3Npb24pO1xuICAgICAgICBwcm9ncmVzc2lvbi5jb21wbGV0ZSgpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnIgPT4gcHJvZ3Jlc3Npb24uZXJyb3IoZXJyKSk7XG4gICAgcmV0dXJuIHByb2dyZXNzaW9uO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGZldGNoQWxsUGFnZXM8VD4oXG4gICAgbG9hZFBhZ2VGbjogTG9hZFJlc3VsdEJ5UGFnZUZuPFQ+LFxuICAgIG9wdHM/OiB7XG4gICAgICBwcm9ncmVzc2lvbj86IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+O1xuICAgICAgbWF4UHJvZ3Jlc3Npb24/OiBudW1iZXI7XG4gICAgICBvblBhZ2VMb2FkZWQ/OiAocGFnZVJlc3VsdDogTG9hZFJlc3VsdDxUPikgPT4gYW55O1xuICAgICAgbG9nUHJlZml4Pzogc3RyaW5nO1xuICAgICAgZmV0Y2hTaXplPzogbnVtYmVyO1xuICAgIH0pOiBQcm9taXNlPExvYWRSZXN1bHQ8VD4+IHtcblxuICAgIGNvbnN0IG1heFByb2dyZXNzaW9uID0gdG9OdW1iZXIob3B0cz8ubWF4UHJvZ3Jlc3Npb24sIDEwMCk7XG4gICAgY29uc3QgcHJvZ3Jlc3Npb24gPSBvcHRzPy5wcm9ncmVzc2lvbjtcbiAgICBsZXQgdG90YWw7IGxldCBwYWdlQ291bnQ7IGxldCBwcm9ncmVzc2lvblN0ZXA7IGxldCBjdXJyZW50UGFnZURhdGFDb3VudDogbnVtYmVyO1xuICAgIGNvbnN0IGZldGNoU2l6ZSA9IHRvTnVtYmVyKG9wdHM/LmZldGNoU2l6ZSwgMTAwMCk7XG4gICAgaWYgKGZldGNoU2l6ZSA8PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmZXRjaCBwYWdlczogaW52YWxpZCBmZXRjaFNpemU6ICcgKyBmZXRjaFNpemUpO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGxldCBkYXRhOiBUW10gPSBbXTtcbiAgICBkbyB7XG5cbiAgICAgIGlmIChvcHRzICYmIG9wdHMubG9nUHJlZml4KSBjb25zb2xlLmRlYnVnKGAke29wdHMubG9nUHJlZml4fSBGZXRjaGluZyBwYWdlICMke29mZnNldCAvIGZldGNoU2l6ZX0uLi5gKTtcblxuICAgICAgLy8gRmV0Y2ggYSBwYWdlXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBsb2FkUGFnZUZuKG9mZnNldCwgZmV0Y2hTaXplKTtcblxuICAgICAgLy8gQ29uY2F0IHRvIHByZXZpb3VzIHJlc3VsdFxuICAgICAgZGF0YSA9IGRhdGEuY29uY2F0KHJlcy5kYXRhKTtcblxuICAgICAgLy8gQ29tcHV0ZSB2YXJpYWJsZXMsIGZvciBuZXh0IGxvb3BcbiAgICAgIGN1cnJlbnRQYWdlRGF0YUNvdW50ID0gcmVzLmRhdGEgJiYgcmVzLmRhdGEubGVuZ3RoIHx8IDA7XG4gICAgICBvZmZzZXQgKz0gY3VycmVudFBhZ2VEYXRhQ291bnQ7XG5cbiAgICAgIC8vIFNldCB0b3RhbCBjb3VudCAob25seSBvbmNlKVxuICAgICAgaWYgKGlzTmlsKHRvdGFsKSAmJiBpc05vdE5pbChyZXMudG90YWwpKSB7XG4gICAgICAgIHRvdGFsID0gcmVzLnRvdGFsO1xuICAgICAgICAvLyBDb21wdXRlIHRoZSBudW1iZXIgb2YgcGFnZVxuICAgICAgICBwYWdlQ291bnQgPSBNYXRoLnJvdW5kKHJlcy50b3RhbCAvIGZldGNoU2l6ZSArIDAuNSk7IC8vIFJvdW5kIHRvIEhBTEZfVVAgaW50ZWdlclxuICAgICAgICAvLyBDb21wdXRlIHN0ZXAsIGJ5IGRpdmlkaW5nIG1heFByb2dyZXNzaW9uIGJ5IG51bWJlciBvZiBwYWdlXG4gICAgICAgIGlmIChwcm9ncmVzc2lvbikge1xuICAgICAgICAgIHByb2dyZXNzaW9uU3RlcCA9IG1heFByb2dyZXNzaW9uIC8gcGFnZUNvdW50O1xuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5sb2dQcmVmaXgpIGNvbnNvbGUuZGVidWcoYCR7b3B0cy5sb2dQcmVmaXh9IHtwYWdlQ291bnQ6ICR7cGFnZUNvdW50fSwgcHJvZ3Jlc3M6ICR7cHJvZ3Jlc3Npb24udmFsdWU/LnRvRml4ZWQoMil9LCBwYWdlUHJvZ3Jlc3NTdGVwOiAke3Byb2dyZXNzaW9uU3RlcD8udG9GaXhlZCgxKX19YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSW5jcmVtZW50IHByb2dyZXNzaW9uIG9uIGVhY2ggaXRlcmF0aW9uIChpZiBwb3NzaWJsZSlcbiAgICAgIGlmIChpc05vdE5pbChwcm9ncmVzc2lvblN0ZXApKSB7XG4gICAgICAgIHByb2dyZXNzaW9uLm5leHQocHJvZ3Jlc3Npb24udmFsdWUgKyBwcm9ncmVzc2lvblN0ZXApO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0cz8ub25QYWdlTG9hZGVkKSBvcHRzLm9uUGFnZUxvYWRlZChyZXMpO1xuXG4gICAgfSB3aGlsZSAoY3VycmVudFBhZ2VEYXRhQ291bnQgPiAwICYmICgoaXNOaWwodG90YWwpICYmIGN1cnJlbnRQYWdlRGF0YUNvdW50ID09PSBmZXRjaFNpemUpIHx8IChpc05vdE5pbCh0b3RhbCkgJiYgKG9mZnNldCA8IHRvdGFsKSkpKTtcblxuICAgIC8vIENvbXBsZXRlIHByb2dyZXNzaW9uIHRvIHJlYWNoIHByb2dyZXNzaW9uU3RlcCB2YWx1ZSAoYmVjYXVzZSBvZiByb3VuZClcbiAgICBpZiAoaXNOb3ROaWwocHJvZ3Jlc3Npb25TdGVwKSkge1xuXG4gICAgICAvLyBJZiB0b3RhbCByZXR1cm4gYnkgbG9hZEFsbCB3YXMgYmFkICFcbiAgICAgIGlmIChpc05vdE5pbCh0b3RhbCkgJiYgZGF0YS5sZW5ndGggPCB0b3RhbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEEgZnVuY3Rpb24gbG9hZEFsbCgpIHJldHVybmVkIGEgYmFkIHRvdGFsIChsZXNzIHRoYW4gYWxsIHBhZ2UncyBkYXRhKSEgRXhwZWN0ZWQgJHt0b3RhbH0gYnV0IGZldGNoICR7ZGF0YS5sZW5ndGh9YCk7XG4gICAgICAgIHRvdGFsID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIHBhZ2VDb3VudCA9IE1hdGgucm91bmQoZGF0YS5sZW5ndGggLyBmZXRjaFNpemUgKyAwLjUpO1xuICAgICAgfVxuXG4gICAgICAvLyBDb21wdXRlIGZpbmFsIGluY3JlbWVudCwgdXNpbmcgdGhlIHJlYWwgcGFnZSBjb3VudFxuICAgICAgcHJvZ3Jlc3Npb25TdGVwID0gTWF0aC5tYXgoMCwgbWF4UHJvZ3Jlc3Npb24gLSAocHJvZ3Jlc3Npb25TdGVwICogcGFnZUNvdW50KSk7XG5cbiAgICB9XG5cbiAgICAvLyBPciBpbmNyZW1lbnQgb25jZSAoZS5nLiB3aGVuIHRvdGFsIGlzIG5vdCBrbm93biwgaW4gcmVjZWl2ZWQgTG9hZFJlc3VsdClcbiAgICBlbHNlIGlmIChwcm9ncmVzc2lvbikge1xuICAgICAgcHJvZ3Jlc3Npb25TdGVwID0gbWF4UHJvZ3Jlc3Npb247XG4gICAgfVxuXG4gICAgLy8gREVCVUdcbiAgICBpZiAob3B0cyAmJiBvcHRzLmxvZ1ByZWZpeCkgY29uc29sZS5kZWJ1ZyhgJHtvcHRzLmxvZ1ByZWZpeH0gQWxsIHBhZ2VzIGZldGNoZWQgLSB7cHJvZ3Jlc3M6ICR7cHJvZ3Jlc3Npb24udmFsdWU/LnRvRml4ZWQoMil9LCBsYXN0UHJvZ3Jlc3NTdGVwOiAke3Byb2dyZXNzaW9uU3RlcD8udG9GaXhlZCgxKX1gKTtcblxuICAgIC8vIEZpbmFsIGluY3JlbWVudFxuICAgIGlmIChwcm9ncmVzc2lvbiAmJiBwcm9ncmVzc2lvblN0ZXAgPiAwKSB7XG4gICAgICBwcm9ncmVzc2lvbi5uZXh0KHByb2dyZXNzaW9uLnZhbHVlICsgcHJvZ3Jlc3Npb25TdGVwKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YSxcbiAgICAgIHRvdGFsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,337 @@
1
+ import { BehaviorSubject, merge } from 'rxjs';
2
+ import { filter, map, mergeMap, takeUntil, tap } from 'rxjs/operators';
3
+ import { isEmptyArray, isNil, isNotEmptyArray, isNotNil } from '../functions';
4
+ import { Directive } from '@angular/core';
5
+ import { EntityUtils } from '../../core/services/model/entity.model';
6
+ import { EntityFilter, EntityFilterUtils } from '../../core/services/model/filter.model';
7
+ import { firstFalsePromise } from '../observables';
8
+ import { StartableObservableService } from './startable-observable-service.class';
9
+ import * as i0 from "@angular/core";
10
+ // @dynamic
11
+ // eslint-disable-next-line @angular-eslint/directive-class-suffix
12
+ export class InMemoryEntitiesService extends StartableObservableService {
13
+ constructor(dataType, filterType, options) {
14
+ super(null);
15
+ this.dataType = dataType;
16
+ this.filterType = filterType;
17
+ this.debug = false;
18
+ this._hiddenData = null;
19
+ this.dirtySubject = new BehaviorSubject(false);
20
+ this.savingSubject = new BehaviorSubject(false);
21
+ options = {
22
+ onSort: this.sort,
23
+ ...options
24
+ };
25
+ this._sortFn = options.onSort;
26
+ this._onLoad = options.onLoad;
27
+ this._onSaveFn = options.onSave;
28
+ this._equalsFn = options.equals;
29
+ this._filterFnFactory = options.filterFnFactory || ((f) => {
30
+ const filter = this.asFilter(f);
31
+ if (filter instanceof EntityFilter) {
32
+ return filter.asFilterFn();
33
+ }
34
+ return undefined;
35
+ });
36
+ this._startByReadyFunction = false; // Need setValue() to be called, to start the service
37
+ this._sortByReplacement = {
38
+ ...options.sortByReplacement
39
+ };
40
+ }
41
+ set value(data) {
42
+ this.setValue(data);
43
+ }
44
+ get value() {
45
+ return this.dataSubject.getValue();
46
+ }
47
+ get saving() {
48
+ return this.savingSubject.value;
49
+ }
50
+ get dirty() {
51
+ return this.dirtySubject.value;
52
+ }
53
+ async ngOnStart(data) {
54
+ if (!data)
55
+ throw new Error('Missing required data, to start this service');
56
+ if (this.debug)
57
+ console.debug('[memory-data-service] Starting...');
58
+ this._hiddenData = [];
59
+ this.markAsSaved();
60
+ this.markAsPristine();
61
+ return data;
62
+ }
63
+ async ngOnStop() {
64
+ if (this.debug)
65
+ console.debug('[memory-data-service] Stopping...');
66
+ this._hiddenData = null;
67
+ this.markAsSaved();
68
+ this.markAsPristine();
69
+ }
70
+ ngOnDestroy() {
71
+ this.stop();
72
+ }
73
+ setValue(data) {
74
+ // If service already started
75
+ if (this.started) {
76
+ // Update the data, if changed
77
+ if (this.dataSubject.value !== data) {
78
+ this._hiddenData = [];
79
+ this.dataSubject.next(data);
80
+ }
81
+ // Reset dirty and saving state
82
+ // (Fix ObsBio issue on samples table : still dirty after setting the same value again)
83
+ this.markAsSaved();
84
+ this.markAsPristine();
85
+ }
86
+ // If service not started yet, then start it, using given data
87
+ else {
88
+ this.start(data);
89
+ }
90
+ }
91
+ async loadAll(offset, size, sortBy, sortDirection, filter, opts) {
92
+ offset = offset >= 0 ? offset : 0;
93
+ size = size >= 0 ? size : -1;
94
+ const originalData = this.dataSubject.value;
95
+ if (isNil(originalData)) {
96
+ console.warn('[memory-data-service] Cannot load all: no value set. Will return empty result');
97
+ }
98
+ try {
99
+ // Wait service is ready
100
+ await this.ready();
101
+ // Wait while busy (e.g. when saving, or deleting)
102
+ await this.waitIdle({ stopError: false /*avoid error when stopped*/ });
103
+ }
104
+ catch (err) {
105
+ // Should be a stop error: log and continue
106
+ if (!this.stopped)
107
+ console.error('Unexpected error, while waiting :', err);
108
+ }
109
+ // Make sure service is not stopped
110
+ if (this.stopped)
111
+ return undefined;
112
+ const excludedDataByFilter = [];
113
+ let excludedDataByPagination;
114
+ try {
115
+ if (isEmptyArray(originalData)) {
116
+ return { data: [], total: 0 };
117
+ }
118
+ // Apply sort
119
+ let data = this._sortFn(originalData, sortBy, sortDirection);
120
+ if (this._onLoad) {
121
+ data = await this._onLoad(data);
122
+ }
123
+ // Apply filter (will update hiddenData)
124
+ data = this.filter(data, filter, excludedDataByFilter);
125
+ // Compute the total length
126
+ const total = data.length;
127
+ // If page size=0 (e.g. only need total)
128
+ if (size === 0) {
129
+ excludedDataByPagination = data;
130
+ return { data: [], total };
131
+ }
132
+ // Slice in a page (using offset and size)
133
+ if (offset > 0) {
134
+ // Offset after the end: no result
135
+ if (offset >= data.length) {
136
+ excludedDataByPagination = data;
137
+ data = [];
138
+ }
139
+ else {
140
+ excludedDataByPagination = (size > 0 && ((offset + size) < data.length))
141
+ // Slice using limit to size
142
+ ? data.slice(0, offset - 1).concat(data.slice(offset + size))
143
+ // Slice without limit
144
+ : data.slice(0, offset - 1);
145
+ data = (size > 0 && ((offset + size) < data.length))
146
+ // Slice using limit to size
147
+ ? data.slice(offset, offset + size)
148
+ // Slice without limit
149
+ : data.slice(offset);
150
+ }
151
+ }
152
+ // Apply a limit
153
+ else if (size > 0) {
154
+ excludedDataByPagination = data.slice(size);
155
+ data = data.slice(0, size);
156
+ }
157
+ // No limit:
158
+ else if (size === -1) {
159
+ // Keep all data
160
+ }
161
+ // /!\ If already observed, then always create a copy of the original array
162
+ // Because datasource will only update if the array changed
163
+ if (data === originalData) {
164
+ data = data.slice();
165
+ }
166
+ const res = { data, total };
167
+ const nextOffset = size > 0 ? (offset || 0) + size : total;
168
+ if (nextOffset < total) {
169
+ res.fetchMore = () => this.loadAll(nextOffset, size, sortBy, sortDirection, filter, opts)
170
+ .then(res => {
171
+ // Update hidden data (remove new fetched item)
172
+ if (res.data?.length) {
173
+ this._hiddenData = this._hiddenData?.filter(item => !res.data.includes(item));
174
+ }
175
+ return res;
176
+ });
177
+ }
178
+ return res;
179
+ }
180
+ finally {
181
+ // Remember hidden data
182
+ if (offset === 0) {
183
+ this._hiddenData = !excludedDataByPagination ? excludedDataByFilter : excludedDataByFilter.concat(...excludedDataByPagination);
184
+ }
185
+ }
186
+ }
187
+ watchAll(offset, size, sortBy, sortDirection, filterData, options) {
188
+ offset = offset >= 0 ? offset : 0;
189
+ size = size >= 0 ? size : -1;
190
+ return this.dataSubject
191
+ .pipe(
192
+ // Warn if waiting value to be set
193
+ tap((data) => this.debug && !data && console.debug('[memory-data-service] Waiting value to be set...')), filter(isNotNil), mergeMap(_ => this.loadAll(offset, size, sortBy, sortDirection, filterData, options)), filter(isNotNil), // Skip no result (e.g. when stopped)
194
+ takeUntil(this.stopSubject));
195
+ }
196
+ async saveAll(data, options) {
197
+ if (!this.dataSubject.value)
198
+ throw new Error('[memory-service] Could not save, because value not set');
199
+ this.markAsSaving();
200
+ try {
201
+ // Restore hidden data
202
+ if (isNotEmptyArray(this._hiddenData))
203
+ data = data.concat(...this._hiddenData);
204
+ if (this._onSaveFn) {
205
+ const res = this._onSaveFn(data);
206
+ data = ((res instanceof Promise)) ? await res : res;
207
+ }
208
+ this.dataSubject.next(data);
209
+ this.markAsDirty();
210
+ return data;
211
+ }
212
+ finally {
213
+ this.markAsSaved();
214
+ }
215
+ }
216
+ async deleteAll(dataToRemove, options) {
217
+ let data = this.dataSubject.value;
218
+ if (!data)
219
+ throw new Error('[memory-service] Could not delete, because value not set');
220
+ this.markAsSaving();
221
+ try {
222
+ // Remove deleted item, from data
223
+ const updatedData = data.filter(entity => {
224
+ const removed = dataToRemove.findIndex(entityToRemove => this.equals(entityToRemove, entity)) !== -1;
225
+ return !removed;
226
+ });
227
+ const deleteCount = data.length - updatedData.length;
228
+ if (deleteCount > 0) {
229
+ data = updatedData;
230
+ this.dataSubject.next(data);
231
+ this.markAsDirty();
232
+ }
233
+ }
234
+ finally {
235
+ this.markAsSaved();
236
+ }
237
+ }
238
+ sort(data, sortBy, sortDirection) {
239
+ // Make sure to fill sortBy BEFORE checking in the replacement map
240
+ sortBy = sortBy || 'id';
241
+ // Replace sortBy, using the replacement map
242
+ sortBy = this._sortByReplacement[sortBy] || sortBy;
243
+ // Execute the sort
244
+ return EntityUtils.sort(data, sortBy, sortDirection);
245
+ }
246
+ asFilter(source) {
247
+ return EntityFilterUtils.fromObject(source, this.filterType);
248
+ }
249
+ addSortByReplacement(source, target) {
250
+ this._sortByReplacement[source] = target;
251
+ }
252
+ equals(d1, d2) {
253
+ if (this._equalsFn)
254
+ return this._equalsFn(d1, d2);
255
+ return d1 && d1.equals ? d1.equals(d2) : EntityUtils.equals(d1, d2, 'id');
256
+ }
257
+ /**
258
+ * Count data stored by the service (without hidden data).
259
+ * @param opts
260
+ */
261
+ // get visibleCount(): number {
262
+ // return (this.dataSubject.value?.length || 0);
263
+ // }
264
+ /**
265
+ * Count data stored by the service (without hidden data).
266
+ * @param opts
267
+ * @deprecated TODO Please rename this getter into visibleCount (and create count = hiddenCount + visibleCount)
268
+ */
269
+ get count() {
270
+ return (this.dataSubject.value?.length || 0);
271
+ }
272
+ get hiddenCount() {
273
+ return this._hiddenData?.length || 0;
274
+ }
275
+ async waitIdle(opts) {
276
+ await this.waitWhileSaving(opts);
277
+ }
278
+ markAsDirty() {
279
+ if (!this.dirtySubject.value) {
280
+ this.dirtySubject.next(true);
281
+ }
282
+ }
283
+ markAsPristine() {
284
+ if (this.dirtySubject.value) {
285
+ this.dirtySubject.next(false);
286
+ }
287
+ }
288
+ /* -- protected methods -- */
289
+ filter(data, _filter, hiddenData) {
290
+ // if filter is DataFilter instance, use its test function
291
+ const filterFn = this._filterFnFactory && this._filterFnFactory(_filter);
292
+ if (filterFn) {
293
+ const filteredData = [];
294
+ data.forEach(value => {
295
+ if (filterFn(value))
296
+ filteredData.push(value);
297
+ else
298
+ hiddenData.push(value);
299
+ });
300
+ return filteredData;
301
+ }
302
+ // default, no filter
303
+ return data;
304
+ }
305
+ connect() {
306
+ return this.dataSubject.pipe(map((data) => {
307
+ data = data || [];
308
+ const total = data.length;
309
+ return { data, total };
310
+ }));
311
+ }
312
+ async waitWhileSaving(opts) {
313
+ if (this.saving) {
314
+ return firstFalsePromise(this.savingSubject, {
315
+ stop: opts?.stop || merge(this.stopSubject, this.dataSubject),
316
+ stopError: false,
317
+ ...opts
318
+ });
319
+ }
320
+ }
321
+ markAsSaving() {
322
+ if (!this.savingSubject.value) {
323
+ this.savingSubject.next(true);
324
+ }
325
+ }
326
+ markAsSaved() {
327
+ if (this.savingSubject.value) {
328
+ this.savingSubject.next(false);
329
+ }
330
+ }
331
+ }
332
+ InMemoryEntitiesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: InMemoryEntitiesService, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
333
+ InMemoryEntitiesService.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: InMemoryEntitiesService, usesInheritance: true, ngImport: i0 });
334
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: InMemoryEntitiesService, decorators: [{
335
+ type: Directive
336
+ }], ctorParameters: function () { return [{ type: undefined }, { type: undefined }, { type: undefined }]; } });
337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LWVudGl0eS1zZXJ2aWNlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvc2VydmljZXMvbWVtb3J5LWVudGl0eS1zZXJ2aWNlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxlQUFlLEVBQUUsS0FBSyxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckUsT0FBTyxFQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUc1RSxPQUFPLEVBQUMsU0FBUyxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBQyxXQUFXLEVBQVUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDdkYsT0FBTyxFQUFDLGlCQUFpQixFQUE4QixNQUFNLGdCQUFnQixDQUFDO0FBRTlFLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDOztBQWNoRixXQUFXO0FBRVgsa0VBQWtFO0FBQ2xFLE1BQU0sT0FBTyx1QkFLWCxTQUFRLDBCQUFvQztJQWtDNUMsWUFDWSxRQUFvQixFQUNwQixVQUFzQixFQUNoQyxPQUE4QztRQUU5QyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFKRixhQUFRLEdBQVIsUUFBUSxDQUFZO1FBQ3BCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFqQ2xDLFVBQUssR0FBRyxLQUFLLENBQUM7UUFFTixnQkFBVyxHQUFRLElBQUksQ0FBQztRQUV2QixpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRTND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LENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFUyxLQUFLLENBQUMsZUFBZSxDQUFDLElBQXFCO1FBQ25ELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRztZQUNoQixPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQzNDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQzdELFNBQVMsRUFBRSxLQUFLO2dCQUNoQixHQUFHLElBQUk7YUFDUixDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFUyxZQUFZO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRTtZQUM3QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMvQjtJQUNILENBQUM7SUFFUyxXQUFXO1FBQ25CLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDaEM7SUFDSCxDQUFDOztxSEFoYVUsdUJBQXVCO3lHQUF2Qix1QkFBdUI7NEZBQXZCLHVCQUF1QjtrQkFGbkMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlciwgbWFwLCBtZXJnZU1hcCwgdGFrZVVudGlsLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7aXNFbXB0eUFycmF5LCBpc05pbCwgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7RW50aXRpZXNTZXJ2aWNlTG9hZE9wdGlvbnMsIEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucywgRmlsdGVyRm4sIEZpbHRlckZuRmFjdG9yeSwgSUVudGl0aWVzU2VydmljZSwgTG9hZFJlc3VsdH0gZnJvbSAnLi9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge1NvcnREaXJlY3Rpb259IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHtEaXJlY3RpdmUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0VudGl0eVV0aWxzLCBJRW50aXR5fSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQge0VudGl0eUZpbHRlciwgRW50aXR5RmlsdGVyVXRpbHN9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbW9kZWwvZmlsdGVyLm1vZGVsJztcbmltcG9ydCB7Zmlyc3RGYWxzZVByb21pc2UsIGZpcnN0Tm90TmlsLCBXYWl0Rm9yT3B0aW9uc30gZnJvbSAnLi4vb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHtTdGFydGFibGVTZXJ2aWNlfSBmcm9tICcuL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7U3RhcnRhYmxlT2JzZXJ2YWJsZVNlcnZpY2V9IGZyb20gJy4vc3RhcnRhYmxlLW9ic2VydmFibGUtc2VydmljZS5jbGFzcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5NZW1vcnlFbnRpdGllc1NlcnZpY2VPcHRpb25zPFQsIEY+IHtcbiAgb25Tb3J0PzogKGRhdGE6IFRbXSwgc29ydEJ5Pzogc3RyaW5nLCBzb3J0RGlyZWN0aW9uPzogU29ydERpcmVjdGlvbikgPT4gVFtdO1xuICBvbkxvYWQ/OiAoZGF0YTogVFtdKSA9PiBUW10gfCBQcm9taXNlPFRbXT47XG4gIG9uU2F2ZT86IChkYXRhOiBUW10pID0+IFRbXSB8IFByb21pc2U8VFtdPjtcbiAgZXF1YWxzPzogKGQxOiBULCBkMjogVCkgPT4gYm9vbGVhbjtcblxuICBmaWx0ZXJGbkZhY3Rvcnk/OiBGaWx0ZXJGbkZhY3Rvcnk8VCwgRj47XG4gIGZpbHRlckZuPzogRmlsdGVyRm48VD47XG5cbiAgc29ydEJ5UmVwbGFjZW1lbnQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vLyBAZHluYW1pY1xuQERpcmVjdGl2ZSgpXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBjbGFzcyBJbk1lbW9yeUVudGl0aWVzU2VydmljZTxcbiAgVCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LFxuICBGID0gYW55LFxuICBJRCA9IG51bWJlcixcbiAgTyBleHRlbmRzIEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucyA9IEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucz5cbiAgZXh0ZW5kcyBTdGFydGFibGVPYnNlcnZhYmxlU2VydmljZTxUW10sIFRbXT5cbiAgaW1wbGVtZW50cyBJRW50aXRpZXNTZXJ2aWNlPFQsIEYsIE8+LCBPbkRlc3Ryb3kge1xuXG4gIGRlYnVnID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfaGlkZGVuRGF0YTogVFtdID0gbnVsbDtcblxuICByZWFkb25seSBkaXJ0eVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNhdmluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc29ydEZuOiAoZGF0YTogVFtdLCBzb3J0Qnk/OiBzdHJpbmcsIHNvcnREaXJlY3Rpb24/OiBTb3J0RGlyZWN0aW9uKSA9PiBUW107XG4gIHByaXZhdGUgcmVhZG9ubHkgX29uTG9hZDogKGRhdGE6IFRbXSkgPT4gVFtdIHwgUHJvbWlzZTxUW10+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9vblNhdmVGbjogKGRhdGE6IFRbXSkgPT4gVFtdIHwgUHJvbWlzZTxUW10+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9lcXVhbHNGbjogKGQxOiBULCBkMjogVCkgPT4gYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsdGVyRm5GYWN0b3J5OiBGaWx0ZXJGbkZhY3Rvcnk8VCwgRj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NvcnRCeVJlcGxhY2VtZW50OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG5cbiAgc2V0IHZhbHVlKGRhdGE6IFRbXSkge1xuICAgIHRoaXMuc2V0VmFsdWUoZGF0YSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVFtdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU3ViamVjdC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgZ2V0IHNhdmluZygpOiBib29sZWFue1xuICAgIHJldHVybiB0aGlzLnNhdmluZ1N1YmplY3QudmFsdWU7XG4gIH1cblxuICBnZXQgZGlydHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlydHlTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGRhdGFUeXBlOiBuZXcoKSA9PiBULFxuICAgIHByb3RlY3RlZCBmaWx0ZXJUeXBlOiBuZXcoKSA9PiBGLFxuICAgIG9wdGlvbnM/OiBJbk1lbW9yeUVudGl0aWVzU2VydmljZU9wdGlvbnM8VCwgRj5cbiAgKSB7XG4gICAgc3VwZXIobnVsbCk7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIG9uU29ydDogdGhpcy5zb3J0LFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH07XG5cbiAgICB0aGlzLl9zb3J0Rm4gPSBvcHRpb25zLm9uU29ydDtcbiAgICB0aGlzLl9vbkxvYWQgPSBvcHRpb25zLm9uTG9hZDtcbiAgICB0aGlzLl9vblNhdmVGbiA9IG9wdGlvbnMub25TYXZlO1xuICAgIHRoaXMuX2VxdWFsc0ZuID0gb3B0aW9ucy5lcXVhbHM7XG4gICAgdGhpcy5fZmlsdGVyRm5GYWN0b3J5ID0gb3B0aW9ucy5maWx0ZXJGbkZhY3RvcnkgfHwgKChmKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmFzRmlsdGVyKGYpIGFzIEY7XG4gICAgICBpZiAoZmlsdGVyIGluc3RhbmNlb2YgRW50aXR5RmlsdGVyKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXIuYXNGaWx0ZXJGbigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICB0aGlzLl9zdGFydEJ5UmVhZHlGdW5jdGlvbiA9IGZhbHNlOyAvLyBOZWVkIHNldFZhbHVlKCkgdG8gYmUgY2FsbGVkLCB0byBzdGFydCB0aGUgc2VydmljZVxuXG4gICAgdGhpcy5fc29ydEJ5UmVwbGFjZW1lbnQgPSB7XG4gICAgICAuLi5vcHRpb25zLnNvcnRCeVJlcGxhY2VtZW50XG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBuZ09uU3RhcnQoZGF0YT86IFRbXSk6IFByb21pc2U8VFtdPiB7XG4gICAgaWYgKCFkYXRhKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgZGF0YSwgdG8gc3RhcnQgdGhpcyBzZXJ2aWNlJyk7XG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1ttZW1vcnktZGF0YS1zZXJ2aWNlXSBTdGFydGluZy4uLicpO1xuICAgIHRoaXMuX2hpZGRlbkRhdGEgPSBbXTtcbiAgICB0aGlzLm1hcmtBc1NhdmVkKCk7XG4gICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbbWVtb3J5LWRhdGEtc2VydmljZV0gU3RvcHBpbmcuLi4nKTtcbiAgICB0aGlzLl9oaWRkZW5EYXRhID0gbnVsbDtcbiAgICB0aGlzLm1hcmtBc1NhdmVkKCk7XG4gICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdG9wKCk7XG4gIH1cblxuICBzZXRWYWx1ZShkYXRhOiBUW10pIHtcbiAgICAvLyBJZiBzZXJ2aWNlIGFscmVhZHkgc3RhcnRlZFxuICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIC8vIFVwZGF0ZSB0aGUgZGF0YSwgaWYgY2hhbmdlZFxuICAgICAgaWYgKHRoaXMuZGF0YVN1YmplY3QudmFsdWUgIT09IGRhdGEpIHtcbiAgICAgICAgdGhpcy5faGlkZGVuRGF0YSA9IFtdO1xuICAgICAgICB0aGlzLmRhdGFTdWJqZWN0Lm5leHQoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlc2V0IGRpcnR5IGFuZCBzYXZpbmcgc3RhdGVcbiAgICAgIC8vIChGaXggT2JzQmlvIGlzc3VlIG9uIHNhbXBsZXMgdGFibGUgOiBzdGlsbCBkaXJ0eSBhZnRlciBzZXR0aW5nIHRoZSBzYW1lIHZhbHVlIGFnYWluKVxuICAgICAgdGhpcy5tYXJrQXNTYXZlZCgpO1xuICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgIH1cbiAgICAvLyBJZiBzZXJ2aWNlIG5vdCBzdGFydGVkIHlldCwgdGhlbiBzdGFydCBpdCwgdXNpbmcgZ2l2ZW4gZGF0YVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5zdGFydChkYXRhKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkQWxsKFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIHNpemU6IG51bWJlcixcbiAgICBzb3J0Qnk/OiBzdHJpbmcsXG4gICAgc29ydERpcmVjdGlvbj86IFNvcnREaXJlY3Rpb24sXG4gICAgZmlsdGVyPzogRixcbiAgICBvcHRzPzogRW50aXRpZXNTZXJ2aWNlTG9hZE9wdGlvbnNcbiAgKTogUHJvbWlzZTxMb2FkUmVzdWx0PFQ+PiB7XG5cbiAgICBvZmZzZXQgPSBvZmZzZXQgPj0gMCA/IG9mZnNldCA6IDA7XG4gICAgc2l6ZSA9IHNpemUgPj0gMCA/IHNpemUgOiAtMTtcblxuICAgIGNvbnN0IG9yaWdpbmFsRGF0YSA9IHRoaXMuZGF0YVN1YmplY3QudmFsdWU7XG4gICAgaWYgKGlzTmlsKG9yaWdpbmFsRGF0YSkpIHtcbiAgICAgIGNvbnNvbGUud2FybignW21lbW9yeS1kYXRhLXNlcnZpY2VdIENhbm5vdCBsb2FkIGFsbDogbm8gdmFsdWUgc2V0LiBXaWxsIHJldHVybiBlbXB0eSByZXN1bHQnKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gV2FpdCBzZXJ2aWNlIGlzIHJlYWR5XG4gICAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICAgIC8vIFdhaXQgd2hpbGUgYnVzeSAoZS5nLiB3aGVuIHNhdmluZywgb3IgZGVsZXRpbmcpXG4gICAgICBhd2FpdCB0aGlzLndhaXRJZGxlKHtzdG9wRXJyb3I6IGZhbHNlIC8qYXZvaWQgZXJyb3Igd2hlbiBzdG9wcGVkKi99KTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgLy8gU2hvdWxkIGJlIGEgc3RvcCBlcnJvcjogbG9nIGFuZCBjb250aW51ZVxuICAgICAgaWYgKCF0aGlzLnN0b3BwZWQpIGNvbnNvbGUuZXJyb3IoJ1VuZXhwZWN0ZWQgZXJyb3IsIHdoaWxlIHdhaXRpbmcgOicsIGVycik7XG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdXJlIHNlcnZpY2UgaXMgbm90IHN0b3BwZWRcbiAgICBpZiAodGhpcy5zdG9wcGVkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZXhjbHVkZWREYXRhQnlGaWx0ZXI6IFRbXSA9IFtdO1xuICAgIGxldCBleGNsdWRlZERhdGFCeVBhZ2luYXRpb246IFRbXTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoaXNFbXB0eUFycmF5KG9yaWdpbmFsRGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIHtkYXRhOiBbXSwgdG90YWw6IDB9O1xuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSBzb3J0XG4gICAgICBsZXQgZGF0YSA9IHRoaXMuX3NvcnRGbihvcmlnaW5hbERhdGEsIHNvcnRCeSwgc29ydERpcmVjdGlvbikgO1xuXG4gICAgICBpZiAodGhpcy5fb25Mb2FkKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCB0aGlzLl9vbkxvYWQoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFwcGx5IGZpbHRlciAod2lsbCB1cGRhdGUgaGlkZGVuRGF0YSlcbiAgICAgIGRhdGEgPSB0aGlzLmZpbHRlcihkYXRhLCBmaWx0ZXIsIGV4Y2x1ZGVkRGF0YUJ5RmlsdGVyKTtcblxuICAgICAgLy8gQ29tcHV0ZSB0aGUgdG90YWwgbGVuZ3RoXG4gICAgICBjb25zdCB0b3RhbCA9IGRhdGEubGVuZ3RoO1xuXG4gICAgICAvLyBJZiBwYWdlIHNpemU9MCAoZS5nLiBvbmx5IG5lZWQgdG90YWwpXG4gICAgICBpZiAoc2l6ZSA9PT0gMCkge1xuICAgICAgICBleGNsdWRlZERhdGFCeVBhZ2luYXRpb24gPSBkYXRhO1xuICAgICAgICByZXR1cm4ge2RhdGE6IFtdLCB0b3RhbH07XG4gICAgICB9XG5cbiAgICAgIC8vIFNsaWNlIGluIGEgcGFnZSAodXNpbmcgb2Zmc2V0IGFuZCBzaXplKVxuICAgICAgaWYgKG9mZnNldCA+IDApIHtcblxuICAgICAgICAvLyBPZmZzZXQgYWZ0ZXIgdGhlIGVuZDogbm8gcmVzdWx0XG4gICAgICAgIGlmIChvZmZzZXQgPj0gZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICBleGNsdWRlZERhdGFCeVBhZ2luYXRpb24gPSBkYXRhO1xuICAgICAgICAgIGRhdGEgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBleGNsdWRlZERhdGFCeVBhZ2luYXRpb24gPSAoc2l6ZSA+IDAgJiYgKChvZmZzZXQgKyBzaXplKSA8IGRhdGEubGVuZ3RoKSlcbiAgICAgICAgICAgIC8vIFNsaWNlIHVzaW5nIGxpbWl0IHRvIHNpemVcbiAgICAgICAgICAgID8gZGF0YS5zbGljZSgwLCBvZmZzZXQgLTEpLmNvbmNhdChkYXRhLnNsaWNlKG9mZnNldCArIHNpemUpKVxuICAgICAgICAgICAgLy8gU2xpY2Ugd2l0aG91dCBsaW1pdFxuICAgICAgICAgICAgOiBkYXRhLnNsaWNlKDAsIG9mZnNldC0xKTtcblxuICAgICAgICAgIGRhdGEgPSAoc2l6ZSA+IDAgJiYgKChvZmZzZXQgKyBzaXplKSA8IGRhdGEubGVuZ3RoKSlcbiAgICAgICAgICAgIC8vIFNsaWNlIHVzaW5nIGxpbWl0IHRvIHNpemVcbiAgICAgICAgICAgID8gZGF0YS5zbGljZShvZmZzZXQsIG9mZnNldCArIHNpemUpXG4gICAgICAgICAgICAvLyBTbGljZSB3aXRob3V0IGxpbWl0XG4gICAgICAgICAgICA6IGRhdGEuc2xpY2Uob2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSBhIGxpbWl0XG4gICAgICBlbHNlIGlmIChzaXplID4gMCl7XG4gICAgICAgIGV4Y2x1ZGVkRGF0YUJ5UGFnaW5hdGlvbiA9IGRhdGEuc2xpY2Uoc2l6ZSk7XG4gICAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKDAsIHNpemUpO1xuICAgICAgfVxuXG4gICAgICAvLyBObyBsaW1pdDpcbiAgICAgIGVsc2UgaWYgKHNpemUgPT09IC0xKXtcbiAgICAgICAgLy8gS2VlcCBhbGwgZGF0YVxuICAgICAgfVxuXG4gICAgICAvLyAvIVxcIElmIGFscmVhZHkgb2JzZXJ2ZWQsIHRoZW4gYWx3YXlzIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGFycmF5XG4gICAgICAvLyBCZWNhdXNlIGRhdGFzb3VyY2Ugd2lsbCBvbmx5IHVwZGF0ZSBpZiB0aGUgYXJyYXkgY2hhbmdlZFxuICAgICAgaWYgKGRhdGEgPT09IG9yaWdpbmFsRGF0YSkge1xuICAgICAgICBkYXRhID0gZGF0YS5zbGljZSgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXM6IExvYWRSZXN1bHQ8VD4gPSB7ZGF0YSwgdG90YWx9O1xuXG4gICAgICBjb25zdCBuZXh0T2Zmc2V0ID0gc2l6ZSA+IDAgPyAob2Zmc2V0IHx8IDApICsgc2l6ZSA6IHRvdGFsO1xuICAgICAgaWYgKG5leHRPZmZzZXQgPCB0b3RhbCkge1xuICAgICAgICByZXMuZmV0Y2hNb3JlID0gKCkgPT4gdGhpcy5sb2FkQWxsKG5leHRPZmZzZXQsIHNpemUsIHNvcnRCeSwgc29ydERpcmVjdGlvbiwgZmlsdGVyLCBvcHRzKVxuICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAvLyBVcGRhdGUgaGlkZGVuIGRhdGEgKHJlbW92ZSBuZXcgZmV0Y2hlZCBpdGVtKVxuICAgICAgICAgICAgaWYgKHJlcy5kYXRhPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhpcy5faGlkZGVuRGF0YSA9IHRoaXMuX2hpZGRlbkRhdGE/LmZpbHRlcihpdGVtID0+ICFyZXMuZGF0YS5pbmNsdWRlcyhpdGVtKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgLy8gUmVtZW1iZXIgaGlkZGVuIGRhdGFcbiAgICAgIGlmIChvZmZzZXQgPT09IDApIHtcbiAgICAgICAgdGhpcy5faGlkZGVuRGF0YSA9ICFleGNsdWRlZERhdGFCeVBhZ2luYXRpb24gPyBleGNsdWRlZERhdGFCeUZpbHRlciA6IGV4Y2x1ZGVkRGF0YUJ5RmlsdGVyLmNvbmNhdCguLi5leGNsdWRlZERhdGFCeVBhZ2luYXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHdhdGNoQWxsKFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIHNpemU6IG51bWJlcixcbiAgICBzb3J0Qnk/OiBzdHJpbmcsXG4gICAgc29ydERpcmVjdGlvbj86IFNvcnREaXJlY3Rpb24sXG4gICAgZmlsdGVyRGF0YT86IEYsXG4gICAgb3B0aW9ucz86IGFueVxuICApOiBPYnNlcnZhYmxlPExvYWRSZXN1bHQ8VD4+IHtcblxuICAgIG9mZnNldCA9IG9mZnNldCA+PSAwID8gb2Zmc2V0IDogMDtcbiAgICBzaXplID0gc2l6ZSA+PSAwID8gc2l6ZSA6IC0xO1xuXG4gICAgcmV0dXJuIHRoaXMuZGF0YVN1YmplY3RcbiAgICAgIC5waXBlKFxuICAgICAgICAvLyBXYXJuIGlmIHdhaXRpbmcgdmFsdWUgdG8gYmUgc2V0XG4gICAgICAgIHRhcCgoZGF0YSkgPT4gdGhpcy5kZWJ1ZyAmJiAhZGF0YSAmJiBjb25zb2xlLmRlYnVnKCdbbWVtb3J5LWRhdGEtc2VydmljZV0gV2FpdGluZyB2YWx1ZSB0byBiZSBzZXQuLi4nKSksXG4gICAgICAgIGZpbHRlcihpc05vdE5pbCksXG4gICAgICAgIG1lcmdlTWFwKF8gPT4gdGhpcy5sb2FkQWxsKG9mZnNldCwgc2l6ZSwgc29ydEJ5LCBzb3J0RGlyZWN0aW9uLCBmaWx0ZXJEYXRhLCBvcHRpb25zKSksXG4gICAgICAgIGZpbHRlcihpc05vdE5pbCksIC8vIFNraXAgbm8gcmVzdWx0IChlLmcuIHdoZW4gc3RvcHBlZClcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuc3RvcFN1YmplY3QpXG4gICAgICApO1xuICB9XG5cbiAgYXN5bmMgc2F2ZUFsbChkYXRhOiBUW10sIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPFRbXT4ge1xuICAgIGlmICghdGhpcy5kYXRhU3ViamVjdC52YWx1ZSkgdGhyb3cgbmV3IEVycm9yKCdbbWVtb3J5LXNlcnZpY2VdIENvdWxkIG5vdCBzYXZlLCBiZWNhdXNlIHZhbHVlIG5vdCBzZXQnKTtcblxuICAgIHRoaXMubWFya0FzU2F2aW5nKCk7XG5cbiAgICB0cnkge1xuXG4gICAgICAvLyBSZXN0b3JlIGhpZGRlbiBkYXRhXG4gICAgICBpZiAoaXNOb3RFbXB0eUFycmF5KHRoaXMuX2hpZGRlbkRhdGEpKVxuICAgICAgICBkYXRhID0gZGF0YS5jb25jYXQoLi4udGhpcy5faGlkZGVuRGF0YSk7XG5cbiAgICAgIGlmICh0aGlzLl9vblNhdmVGbikge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLl9vblNhdmVGbihkYXRhKTtcbiAgICAgICAgZGF0YSA9ICgocmVzIGluc3RhbmNlb2YgUHJvbWlzZSkpID8gYXdhaXQgcmVzIDogcmVzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRhdGFTdWJqZWN0Lm5leHQoZGF0YSk7XG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICB0aGlzLm1hcmtBc1NhdmVkKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlQWxsKGRhdGFUb1JlbW92ZTogVFtdLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBsZXQgZGF0YSA9IHRoaXMuZGF0YVN1YmplY3QudmFsdWU7XG4gICAgaWYgKCFkYXRhKSB0aHJvdyBuZXcgRXJyb3IoJ1ttZW1vcnktc2VydmljZV0gQ291bGQgbm90IGRlbGV0ZSwgYmVjYXVzZSB2YWx1ZSBub3Qgc2V0Jyk7XG5cbiAgICB0aGlzLm1hcmtBc1NhdmluZygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFJlbW92ZSBkZWxldGVkIGl0ZW0sIGZyb20gZGF0YVxuICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSBkYXRhLmZpbHRlcihlbnRpdHkgPT4ge1xuICAgICAgICBjb25zdCByZW1vdmVkID0gZGF0YVRvUmVtb3ZlLmZpbmRJbmRleChlbnRpdHlUb1JlbW92ZSA9PiB0aGlzLmVxdWFscyhlbnRpdHlUb1JlbW92ZSwgZW50aXR5KSkgIT09IC0xO1xuICAgICAgICByZXR1cm4gIXJlbW92ZWQ7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRlbGV0ZUNvdW50ID0gZGF0YS5sZW5ndGggLSB1cGRhdGVkRGF0YS5sZW5ndGg7XG4gICAgICBpZiAoZGVsZXRlQ291bnQgPiAwKSB7XG4gICAgICAgIGRhdGEgPSB1cGRhdGVkRGF0YTtcbiAgICAgICAgdGhpcy5kYXRhU3ViamVjdC5uZXh0KGRhdGEpO1xuICAgICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgdGhpcy5tYXJrQXNTYXZlZCgpO1xuICAgIH1cbiAgfVxuXG4gIHNvcnQoZGF0YTogVFtdLCBzb3J0Qnk/OiBzdHJpbmcsIHNvcnREaXJlY3Rpb24/OiBTb3J0RGlyZWN0aW9uKTogVFtdIHtcbiAgICAvLyBNYWtlIHN1cmUgdG8gZmlsbCBzb3J0QnkgQkVGT1JFIGNoZWNraW5nIGluIHRoZSByZXBsYWNlbWVudCBtYXBcbiAgICBzb3J0QnkgPSBzb3J0QnkgfHwgJ2lkJztcbiAgICAvLyBSZXBsYWNlIHNvcnRCeSwgdXNpbmcgdGhlIHJlcGxhY2VtZW50IG1hcFxuICAgIHNvcnRCeSA9IHRoaXMuX3NvcnRCeVJlcGxhY2VtZW50W3NvcnRCeV0gfHwgc29ydEJ5O1xuXG4gICAgLy8gRXhlY3V0ZSB0aGUgc29ydFxuICAgIHJldHVybiBFbnRpdHlVdGlscy5zb3J0KGRhdGEsIHNvcnRCeSwgc29ydERpcmVjdGlvbik7XG4gIH1cblxuICBhc0ZpbHRlcihzb3VyY2U6IFBhcnRpYWw8Rj4pOiBGIHtcbiAgICByZXR1cm4gRW50aXR5RmlsdGVyVXRpbHMuZnJvbU9iamVjdChzb3VyY2UsIHRoaXMuZmlsdGVyVHlwZSk7XG4gIH1cblxuICBhZGRTb3J0QnlSZXBsYWNlbWVudChzb3VyY2U6IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zb3J0QnlSZXBsYWNlbWVudFtzb3VyY2VdID0gdGFyZ2V0O1xuICB9XG5cbiAgZXF1YWxzKGQxOiBULCBkMjogVCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLl9lcXVhbHNGbikgcmV0dXJuIHRoaXMuX2VxdWFsc0ZuKGQxLCBkMik7XG4gICAgcmV0dXJuIGQxICYmIGQxLmVxdWFscyA/IGQxLmVxdWFscyhkMikgOiBFbnRpdHlVdGlscy5lcXVhbHMoZDEsIGQyLCAnaWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudCBkYXRhIHN0b3JlZCBieSB0aGUgc2VydmljZSAod2l0aG91dCBoaWRkZW4gZGF0YSkuXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICAvLyBnZXQgdmlzaWJsZUNvdW50KCk6IG51bWJlciB7XG4gIC8vICAgcmV0dXJuICh0aGlzLmRhdGFTdWJqZWN0LnZhbHVlPy5sZW5ndGggfHwgMCk7XG4gIC8vIH1cblxuICAvKipcbiAgICogQ291bnQgZGF0YSBzdG9yZWQgYnkgdGhlIHNlcnZpY2UgKHdpdGhvdXQgaGlkZGVuIGRhdGEpLlxuICAgKiBAcGFyYW0gb3B0c1xuICAgKiBAZGVwcmVjYXRlZCBUT0RPIFBsZWFzZSByZW5hbWUgdGhpcyBnZXR0ZXIgaW50byB2aXNpYmxlQ291bnQgKGFuZCBjcmVhdGUgY291bnQgPSBoaWRkZW5Db3VudCArIHZpc2libGVDb3VudClcbiAgICovXG4gIGdldCBjb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiAodGhpcy5kYXRhU3ViamVjdC52YWx1ZT8ubGVuZ3RoIHx8IDApO1xuICB9XG5cbiAgZ2V0IGhpZGRlbkNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2hpZGRlbkRhdGE/Lmxlbmd0aCB8fCAwO1xuICB9XG5cbiAgYXN5bmMgd2FpdElkbGUob3B0cz86IFdhaXRGb3JPcHRpb25zKSB7XG4gICAgYXdhaXQgdGhpcy53YWl0V2hpbGVTYXZpbmcob3B0cyk7XG4gIH1cblxuICBtYXJrQXNEaXJ0eSgpIHtcbiAgICBpZiAoIXRoaXMuZGlydHlTdWJqZWN0LnZhbHVlKSB7XG4gICAgICB0aGlzLmRpcnR5U3ViamVjdC5uZXh0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1ByaXN0aW5lKCkge1xuICAgIGlmICh0aGlzLmRpcnR5U3ViamVjdC52YWx1ZSkge1xuICAgICAgdGhpcy5kaXJ0eVN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgZmlsdGVyKGRhdGE6IFRbXSwgX2ZpbHRlcjogRiwgaGlkZGVuRGF0YTogVFtdKTogVFtdIHtcblxuICAgIC8vIGlmIGZpbHRlciBpcyBEYXRhRmlsdGVyIGluc3RhbmNlLCB1c2UgaXRzIHRlc3QgZnVuY3Rpb25cbiAgICBjb25zdCBmaWx0ZXJGbiA9IHRoaXMuX2ZpbHRlckZuRmFjdG9yeSAmJiB0aGlzLl9maWx0ZXJGbkZhY3RvcnkoX2ZpbHRlcik7XG4gICAgaWYgKGZpbHRlckZuKSB7XG4gICAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSBbXTtcblxuICAgICAgZGF0YS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgaWYgKGZpbHRlckZuKHZhbHVlKSlcbiAgICAgICAgICBmaWx0ZXJlZERhdGEucHVzaCh2YWx1ZSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBoaWRkZW5EYXRhLnB1c2godmFsdWUpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBmaWx0ZXJlZERhdGE7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCwgbm8gZmlsdGVyXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29ubmVjdCgpOiBPYnNlcnZhYmxlPExvYWRSZXN1bHQ8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU3ViamVjdC5waXBlKFxuICAgICAgbWFwKChkYXRhKSA9PiB7XG4gICAgICAgIGRhdGEgPSBkYXRhIHx8IFtdO1xuICAgICAgICBjb25zdCB0b3RhbCA9IGRhdGEubGVuZ3RoO1xuICAgICAgICByZXR1cm4ge2RhdGEsIHRvdGFsfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyB3YWl0V2hpbGVTYXZpbmcob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc2F2aW5nKSAge1xuICAgICAgcmV0dXJuIGZpcnN0RmFsc2VQcm9taXNlKHRoaXMuc2F2aW5nU3ViamVjdCwge1xuICAgICAgICBzdG9wOiBvcHRzPy5zdG9wIHx8IG1lcmdlKHRoaXMuc3RvcFN1YmplY3QsIHRoaXMuZGF0YVN1YmplY3QpLCAvLyBTdG9wIGlmIGRlc3Ryb3llZCBvciBuZXcgZGF0YSBSZWNlaXZlZFxuICAgICAgICBzdG9wRXJyb3I6IGZhbHNlLCAvLyBBdm9pZCBlcnJvciB3aGVuIHN0b3BwZWRcbiAgICAgICAgLi4ub3B0c1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtBc1NhdmluZygpIHtcbiAgICBpZiAoIXRoaXMuc2F2aW5nU3ViamVjdC52YWx1ZSkge1xuICAgICAgdGhpcy5zYXZpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtBc1NhdmVkKCkge1xuICAgIGlmICh0aGlzLnNhdmluZ1N1YmplY3QudmFsdWUpIHtcbiAgICAgIHRoaXMuc2F2aW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuXG59XG4iXX0=
@@ -0,0 +1,33 @@
1
+ import { EventEmitter, Injectable, InjectionToken } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export const APP_PROGRESS_BAR_SERVICE = new InjectionToken('ProgressBarService');
4
+ export class ProgressBarService {
5
+ constructor() {
6
+ this._requestsRunning = 0;
7
+ this.onProgressChanged = new EventEmitter();
8
+ }
9
+ list() {
10
+ return this._requestsRunning;
11
+ }
12
+ increase() {
13
+ this._requestsRunning++;
14
+ if (this._requestsRunning === 1) {
15
+ this.onProgressChanged.emit('query');
16
+ }
17
+ }
18
+ decrease() {
19
+ if (this._requestsRunning > 0) {
20
+ this._requestsRunning--;
21
+ }
22
+ if (this._requestsRunning === 0) {
23
+ this.onProgressChanged.emit(null);
24
+ }
25
+ }
26
+ }
27
+ ProgressBarService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProgressBarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
28
+ ProgressBarService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProgressBarService, providedIn: 'root' });
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProgressBarService, decorators: [{
30
+ type: Injectable,
31
+ args: [{ providedIn: 'root' }]
32
+ }] });
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtYmFyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9zZXJ2aWNlcy9wcm9ncmVzcy1iYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBR3pFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUFzQixvQkFBb0IsQ0FBQyxDQUFDO0FBWXRHLE1BQU0sT0FBTyxrQkFBa0I7SUFEL0I7UUFFVSxxQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFFN0Isc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7S0F1QnpEO0lBckJDLElBQUk7UUFDQSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLENBQUMsRUFBRTtZQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDM0I7UUFDRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQztJQUNILENBQUM7O2dIQXZCVSxrQkFBa0I7b0hBQWxCLGtCQUFrQixjQUROLE1BQU07NEZBQ2xCLGtCQUFrQjtrQkFEOUIsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQcm9ncmVzc0Jhck1vZGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXInO1xuXG5leHBvcnQgY29uc3QgQVBQX1BST0dSRVNTX0JBUl9TRVJWSUNFID0gbmV3IEluamVjdGlvblRva2VuPElQcm9ncmVzc0JhclNlcnZpY2U+KCdQcm9ncmVzc0JhclNlcnZpY2UnKTtcblxuZXhwb3J0IGRlY2xhcmUgdHlwZSBQcm9ncmVzc01vZGUgPSBQcm9ncmVzc0Jhck1vZGU7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVByb2dyZXNzQmFyU2VydmljZSB7XG4gIG9uUHJvZ3Jlc3NDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8UHJvZ3Jlc3NCYXJNb2RlPjtcbiAgbGlzdCgpOiBudW1iZXI7XG4gIGluY3JlYXNlKCk7XG4gIGRlY3JlYXNlKCk7XG59XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFByb2dyZXNzQmFyU2VydmljZSBpbXBsZW1lbnRzIElQcm9ncmVzc0JhclNlcnZpY2Uge1xuICBwcml2YXRlIF9yZXF1ZXN0c1J1bm5pbmcgPSAwO1xuXG4gIG9uUHJvZ3Jlc3NDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxQcm9ncmVzc0Jhck1vZGU+KCk7XG5cbiAgbGlzdCgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlcXVlc3RzUnVubmluZztcbiAgfVxuXG4gIGluY3JlYXNlKCk6IHZvaWQge1xuICAgIHRoaXMuX3JlcXVlc3RzUnVubmluZysrO1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0c1J1bm5pbmcgPT09IDEpIHtcbiAgICAgICAgdGhpcy5vblByb2dyZXNzQ2hhbmdlZC5lbWl0KCdxdWVyeScpO1xuICAgIH1cbiAgfVxuXG4gIGRlY3JlYXNlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0c1J1bm5pbmcgPiAwKSB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RzUnVubmluZy0tO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcmVxdWVzdHNSdW5uaW5nID09PSAwKSB7XG4gICAgICB0aGlzLm9uUHJvZ3Jlc3NDaGFuZ2VkLmVtaXQobnVsbCk7XG4gICAgfVxuICB9XG5cblxufVxuIl19