@sumaris-net/ngx-components 3.0.0-rc1 → 4.0.0-rc10

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 (677) hide show
  1. package/esm2022/public_api.mjs +340 -0
  2. package/{esm2020 → esm2022}/src/app/admin/admin-routing.module.mjs +8 -8
  3. package/{esm2020 → esm2022}/src/app/admin/admin.module.mjs +12 -12
  4. package/esm2022/src/app/admin/services/filter/person.filter.mjs +69 -0
  5. package/esm2022/src/app/admin/services/person.service.mjs +174 -0
  6. package/esm2022/src/app/admin/services/validator/person.validator.mjs +72 -0
  7. package/esm2022/src/app/admin/users/users.mjs +264 -0
  8. package/esm2022/src/app/admin/users/users.module.mjs +58 -0
  9. package/esm2022/src/app/core/about/about.modal.mjs +84 -0
  10. package/{esm2020 → esm2022}/src/app/core/about/about.module.mjs +9 -9
  11. package/{esm2020 → esm2022}/src/app/core/account/account.module.mjs +22 -22
  12. package/esm2022/src/app/core/account/account.page.mjs +337 -0
  13. package/esm2022/src/app/core/account/new-token.modal.mjs +130 -0
  14. package/esm2022/src/app/core/account/token.table.mjs +146 -0
  15. package/esm2022/src/app/core/auth/auth.form.mjs +140 -0
  16. package/esm2022/src/app/core/auth/auth.modal.mjs +76 -0
  17. package/{esm2020 → esm2022}/src/app/core/auth/auth.module.mjs +16 -16
  18. package/{esm2020 → esm2022}/src/app/core/core.module.mjs +87 -87
  19. package/{esm2020 → esm2022}/src/app/core/core.testing.module.mjs +23 -23
  20. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +109 -0
  21. package/{esm2020 → esm2022}/src/app/core/form/buttons/form-buttons-bar.module.mjs +10 -10
  22. package/esm2022/src/app/core/form/entity/editor.class.mjs +718 -0
  23. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +436 -0
  24. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +730 -0
  25. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +24 -0
  26. package/{esm2020 → esm2022}/src/app/core/form/entity/entity.module.mjs +11 -11
  27. package/esm2022/src/app/core/form/form.class.mjs +353 -0
  28. package/{esm2020 → esm2022}/src/app/core/form/form.module.mjs +30 -30
  29. package/{esm2020 → esm2022}/src/app/core/form/form.utils.mjs +69 -60
  30. package/esm2022/src/app/core/form/list/list.form.mjs +233 -0
  31. package/{esm2020 → esm2022}/src/app/core/form/list/list.module.mjs +10 -10
  32. package/esm2022/src/app/core/form/properties/properties.form.mjs +143 -0
  33. package/{esm2020 → esm2022}/src/app/core/form/properties/properties.module.mjs +13 -13
  34. package/esm2022/src/app/core/form/properties/properties.table.mjs +269 -0
  35. package/esm2022/src/app/core/form/properties/property.validator.mjs +24 -0
  36. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +95 -0
  37. package/{esm2020 → esm2022}/src/app/core/form/properties/testing/properties-form.testing.module.mjs +11 -11
  38. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +73 -0
  39. package/{esm2020 → esm2022}/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +10 -10
  40. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +152 -0
  41. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +35 -0
  42. package/{esm2020 → esm2022}/src/app/core/graphql/graphql.module.mjs +6 -6
  43. package/esm2022/src/app/core/graphql/graphql.service.mjs +788 -0
  44. package/{esm2020 → esm2022}/src/app/core/graphql/graphql.utils.mjs +2 -1
  45. package/esm2022/src/app/core/home/home.mjs +282 -0
  46. package/esm2022/src/app/core/home/home.module.mjs +51 -0
  47. package/esm2022/src/app/core/icon/icon.component.mjs +40 -0
  48. package/{esm2020 → esm2022}/src/app/core/icon/icon.module.mjs +7 -7
  49. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +358 -0
  50. package/{esm2020 → esm2022}/src/app/core/install/install-upgrade-card.module.mjs +10 -10
  51. package/esm2022/src/app/core/menu/menu.component.mjs +264 -0
  52. package/esm2022/src/app/core/menu/menu.model.mjs +269 -0
  53. package/esm2022/src/app/core/menu/menu.module.mjs +52 -0
  54. package/esm2022/src/app/core/menu/menu.service.mjs +671 -0
  55. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +109 -0
  56. package/{esm2020 → esm2022}/src/app/core/menu/testing/menu-other.testing.mjs +5 -5
  57. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +122 -0
  58. package/{esm2020 → esm2022}/src/app/core/menu/testing/menu.testing.module.mjs +12 -12
  59. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +29 -0
  60. package/{esm2020 → esm2022}/src/app/core/offline/update-offline-mode-card.module.mjs +10 -10
  61. package/esm2022/src/app/core/peer/select-peer.modal.mjs +193 -0
  62. package/{esm2020 → esm2022}/src/app/core/peer/select-peer.module.mjs +13 -13
  63. package/esm2022/src/app/core/register/register-confirm.page.mjs +88 -0
  64. package/esm2022/src/app/core/register/register.form.mjs +194 -0
  65. package/esm2022/src/app/core/register/register.modal.mjs +55 -0
  66. package/{esm2020 → esm2022}/src/app/core/register/register.module.mjs +13 -13
  67. package/esm2022/src/app/core/services/account.service.mjs +1243 -0
  68. package/esm2022/src/app/core/services/auth-guard.service.mjs +76 -0
  69. package/esm2022/src/app/core/services/base-entity-service.class.mjs +482 -0
  70. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +224 -0
  71. package/esm2022/src/app/core/services/base58.mjs +79 -0
  72. package/{esm2020 → esm2022}/src/app/core/services/config/core.config.mjs +7 -7
  73. package/esm2022/src/app/core/services/config.service.mjs +367 -0
  74. package/esm2022/src/app/core/services/crypto.service.mjs +107 -0
  75. package/esm2022/src/app/core/services/local-settings.service.mjs +468 -0
  76. package/esm2022/src/app/core/services/model/account.model.mjs +155 -0
  77. package/esm2022/src/app/core/services/model/config.model.mjs +107 -0
  78. package/esm2022/src/app/core/services/model/department.model.mjs +34 -0
  79. package/esm2022/src/app/core/services/model/entity.decorators.mjs +97 -0
  80. package/esm2022/src/app/core/services/model/entity.model.mjs +228 -0
  81. package/esm2022/src/app/core/services/model/peer.model.mjs +83 -0
  82. package/esm2022/src/app/core/services/model/person.model.mjs +110 -0
  83. package/esm2022/src/app/core/services/model/referential.model.mjs +189 -0
  84. package/esm2022/src/app/core/services/model/token.model.mjs +57 -0
  85. package/esm2022/src/app/core/services/network.service.mjs +626 -0
  86. package/{esm2020 → esm2022}/src/app/core/services/network.types.mjs +1 -1
  87. package/{esm2020 → esm2022}/src/app/core/services/pipes/account.pipes.mjs +9 -9
  88. package/{esm2020 → esm2022}/src/app/core/services/pipes/department-to-string.pipe.mjs +5 -5
  89. package/{esm2020 → esm2022}/src/app/core/services/pipes/person-to-string.pipe.mjs +5 -5
  90. package/{esm2020 → esm2022}/src/app/core/services/pipes/usage-mode.pipes.mjs +9 -9
  91. package/esm2022/src/app/core/services/platform.service.mjs +557 -0
  92. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +434 -0
  93. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +458 -0
  94. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +25 -0
  95. package/esm2022/src/app/core/services/testing/referential.validator.mjs +46 -0
  96. package/esm2022/src/app/core/services/validator/account.validator.mjs +45 -0
  97. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +49 -0
  98. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +67 -0
  99. package/{esm2020 → esm2022}/src/app/core/services/validator/user-settings.validator.mjs +5 -5
  100. package/{esm2020 → esm2022}/src/app/core/services/validator/user-token.validator.mjs +5 -5
  101. package/{esm2020 → esm2022}/src/app/core/settings/settings.module.mjs +9 -9
  102. package/esm2022/src/app/core/settings/settings.page.mjs +328 -0
  103. package/esm2022/src/app/core/table/actions-column.component.mjs +115 -0
  104. package/esm2022/src/app/core/table/async-table.class.mjs +1735 -0
  105. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +386 -0
  106. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +401 -0
  107. package/esm2022/src/app/core/table/memory-table.class.mjs +57 -0
  108. package/esm2022/src/app/core/table/table-select-columns.component.mjs +46 -0
  109. package/esm2022/src/app/core/table/table.class.mjs +1775 -0
  110. package/esm2022/src/app/core/table/table.model.mjs +16 -0
  111. package/{esm2020 → esm2022}/src/app/core/table/table.module.mjs +12 -12
  112. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +28 -0
  113. package/esm2022/src/app/core/table/testing/table.testing.mjs +291 -0
  114. package/{esm2020 → esm2022}/src/app/core/table/testing/table.testing.module.mjs +16 -16
  115. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +25 -0
  116. package/esm2022/src/app/core/table/testing/table2.testing.mjs +250 -0
  117. package/esm2022/src/app/shared/audio/audio.mjs +251 -0
  118. package/esm2022/src/app/shared/audio/audio.testing.mjs +32 -0
  119. package/{esm2020 → esm2022}/src/app/shared/audio/audio.testing.module.mjs +10 -10
  120. package/esm2022/src/app/shared/capacitor/keyboard.mjs +42 -0
  121. package/esm2022/src/app/shared/capacitor/plugins.mjs +9 -0
  122. package/esm2022/src/app/shared/dates.mjs +149 -0
  123. package/esm2022/src/app/shared/debug/debug.component.mjs +40 -0
  124. package/{esm2020 → esm2022}/src/app/shared/debug/debug.module.mjs +14 -14
  125. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +98 -0
  126. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +32 -0
  127. package/{esm2020 → esm2022}/src/app/shared/directives/directives.module.mjs +13 -13
  128. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +52 -0
  129. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +33 -0
  130. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +62 -0
  131. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +45 -0
  132. package/{esm2020 → esm2022}/src/app/shared/directives/resizable/resizable.module.mjs +5 -5
  133. package/esm2022/src/app/shared/file/file.service.mjs +122 -0
  134. package/{esm2020 → esm2022}/src/app/shared/file/file.utils.mjs +2 -2
  135. package/esm2022/src/app/shared/form/field.component.mjs +353 -0
  136. package/esm2022/src/app/shared/form/loading-spinner.mjs +35 -0
  137. package/{esm2020 → esm2022}/src/app/shared/functions.mjs +2 -2
  138. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +82 -0
  139. package/esm2022/src/app/shared/gesture/gesture-config.mjs +46 -0
  140. package/esm2022/src/app/shared/graph/graph-colors.mjs +219 -0
  141. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +59 -0
  142. package/esm2022/src/app/shared/help/help.modal.mjs +63 -0
  143. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +23 -0
  144. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +85 -0
  145. package/{esm2020 → esm2022}/src/app/shared/hotkeys/shared-hotkeys.module.mjs +12 -12
  146. package/esm2022/src/app/shared/http/http.utils.mjs +56 -0
  147. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +388 -0
  148. package/{esm2020 → esm2022}/src/app/shared/image/gallery/image-gallery.module.mjs +22 -22
  149. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +26 -0
  150. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +90 -0
  151. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +41 -0
  152. package/{esm2020 → esm2022}/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +16 -16
  153. package/{esm2020 → esm2022}/src/app/shared/image/image.module.mjs +11 -11
  154. package/esm2022/src/app/shared/image/image.service.mjs +104 -0
  155. package/esm2022/src/app/shared/inputs.mjs +231 -0
  156. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +28 -0
  157. package/esm2022/src/app/shared/logging/logging-service.class.mjs +128 -0
  158. package/{esm2020 → esm2022}/src/app/shared/logging/logging-service.module.mjs +8 -8
  159. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +49 -0
  160. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +961 -0
  161. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +82 -0
  162. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +217 -0
  163. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +209 -0
  164. package/{esm2020 → esm2022}/src/app/shared/material/badge/badge.module.mjs +9 -9
  165. package/esm2022/src/app/shared/material/badge/badge.test.mjs +42 -0
  166. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +72 -0
  167. package/esm2022/src/app/shared/material/boolean/material-boolean2.mjs +266 -0
  168. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +271 -0
  169. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +54 -0
  170. package/{esm2020 → esm2022}/src/app/shared/material/chips/chips.module.mjs +30 -30
  171. package/esm2022/src/app/shared/material/chips/material.chips.mjs +719 -0
  172. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +148 -0
  173. package/{esm2020 → esm2022}/src/app/shared/material/datetime/datetime.module.mjs +38 -38
  174. package/esm2022/src/app/shared/material/datetime/material.date.mjs +396 -0
  175. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +406 -0
  176. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +549 -0
  177. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +132 -0
  178. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +123 -0
  179. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +115 -0
  180. package/esm2022/src/app/shared/material/duration/duration.module.mjs +70 -0
  181. package/{esm2020 → esm2022}/src/app/shared/material/duration/duration.utils.mjs +2 -2
  182. package/esm2022/src/app/shared/material/duration/material.duration.mjs +273 -0
  183. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +79 -0
  184. package/{esm2020 → esm2022}/src/app/shared/material/latlong/latlong.utils.mjs +3 -3
  185. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +440 -0
  186. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +72 -0
  187. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +113 -0
  188. package/esm2022/src/app/shared/material/material.module.mjs +229 -0
  189. package/esm2022/src/app/shared/material/material.testing.module.mjs +221 -0
  190. package/esm2022/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +104 -0
  191. package/esm2022/src/app/shared/material/numpad/numpad.component.mjs +83 -0
  192. package/esm2022/src/app/shared/material/numpad/numpad.container.mjs +203 -0
  193. package/esm2022/src/app/shared/material/numpad/numpad.content.mjs +19 -0
  194. package/esm2022/src/app/shared/material/numpad/numpad.directive.mjs +168 -0
  195. package/esm2022/src/app/shared/material/numpad/numpad.dom-service.mjs +36 -0
  196. package/esm2022/src/app/shared/material/numpad/numpad.model.mjs +16 -0
  197. package/{esm2020 → esm2022}/src/app/shared/material/numpad/numpad.module.mjs +20 -20
  198. package/esm2022/src/app/shared/material/numpad/testing/numpad.test.mjs +48 -0
  199. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +48 -0
  200. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +23 -0
  201. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +368 -0
  202. package/{esm2020 → esm2022}/src/app/shared/material/swipe/swipe.module.mjs +19 -19
  203. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +67 -0
  204. package/esm2022/src/app/shared/material/testing/common.test.mjs +105 -0
  205. package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +31 -0
  206. package/esm2022/src/app/shared/material/text/text-form.component.mjs +97 -0
  207. package/esm2022/src/app/shared/material/text/text-form.module.mjs +63 -0
  208. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +236 -0
  209. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +49 -0
  210. package/{esm2020 → esm2022}/src/app/shared/named-filter/named-filter.module.mjs +5 -5
  211. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +69 -0
  212. package/{esm2020 → esm2022}/src/app/shared/pipes/arrays.pipe.mjs +25 -25
  213. package/{esm2020 → esm2022}/src/app/shared/pipes/colors.pipe.mjs +4 -4
  214. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +51 -0
  215. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +72 -0
  216. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +28 -0
  217. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +36 -0
  218. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +60 -0
  219. package/esm2022/src/app/shared/pipes/form.pipes.mjs +194 -0
  220. package/{esm2020 → esm2022}/src/app/shared/pipes/highlight.pipe.mjs +5 -5
  221. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +42 -0
  222. package/{esm2020 → esm2022}/src/app/shared/pipes/maps.pipe.mjs +13 -13
  223. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +118 -0
  224. package/{esm2020 → esm2022}/src/app/shared/pipes/math.pipes.mjs +13 -13
  225. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +19 -0
  226. package/{esm2020 → esm2022}/src/app/shared/pipes/number-format.pipe.mjs +5 -5
  227. package/esm2022/src/app/shared/pipes/pipes.module.mjs +256 -0
  228. package/esm2022/src/app/shared/pipes/property.pipes.mjs +97 -0
  229. package/{esm2020 → esm2022}/src/app/shared/pipes/string.pipes.mjs +31 -31
  230. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +44 -0
  231. package/{esm2020 → esm2022}/src/app/shared/pipes/types.pipes.mjs +14 -14
  232. package/esm2022/src/app/shared/rx-state.module.mjs +23 -0
  233. package/esm2022/src/app/shared/services/entity-service.class.mjs +7 -0
  234. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +347 -0
  235. package/esm2022/src/app/shared/services/progress-bar.service.mjs +31 -0
  236. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +121 -0
  237. package/esm2022/src/app/shared/services/startable-service.class.mjs +113 -0
  238. package/esm2022/src/app/shared/services/translate-context.service.mjs +104 -0
  239. package/esm2022/src/app/shared/services.mjs +62 -0
  240. package/{esm2020 → esm2022}/src/app/shared/shared-routing.module.mjs +12 -12
  241. package/esm2022/src/app/shared/shared.module.mjs +231 -0
  242. package/{esm2020 → esm2022}/src/app/shared/shared.testing.module.mjs +40 -40
  243. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +286 -0
  244. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +46 -0
  245. package/{esm2020 → esm2022}/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +7 -7
  246. package/{esm2020 → esm2022}/src/app/shared/storage/storage-explorer.testing.module.mjs +6 -6
  247. package/esm2022/src/app/shared/storage/storage.service.mjs +134 -0
  248. package/{esm2020 → esm2022}/src/app/shared/storage/storage.utils.mjs +1 -1
  249. package/esm2022/src/app/shared/testing/observable.test.mjs +96 -0
  250. package/esm2022/src/app/shared/testing/tests.page.mjs +37 -0
  251. package/esm2022/src/app/shared/toast/toast.testing.mjs +52 -0
  252. package/{esm2020 → esm2022}/src/app/shared/toast/toast.testing.module.mjs +10 -10
  253. package/esm2022/src/app/shared/toast/toasts.mjs +144 -0
  254. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +60 -0
  255. package/esm2022/src/app/shared/toolbar/toolbar.mjs +264 -0
  256. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +57 -0
  257. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +59 -0
  258. package/{esm2020 → esm2022}/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +10 -10
  259. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +107 -0
  260. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +211 -0
  261. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +27 -0
  262. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +106 -0
  263. package/esm2022/src/app/shared/validator/validators.mjs +580 -0
  264. package/esm2022/src/app/shared/version/versions.mjs +81 -0
  265. package/{esm2020 → esm2022}/src/app/social/job/job.module.mjs +12 -12
  266. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +35 -0
  267. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +232 -0
  268. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +50 -0
  269. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +29 -0
  270. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +73 -0
  271. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +43 -0
  272. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +53 -0
  273. package/{esm2020 → esm2022}/src/app/social/job/testing/job.testing.module.mjs +9 -9
  274. package/esm2022/src/app/social/message/message.form.mjs +140 -0
  275. package/esm2022/src/app/social/message/message.modal.mjs +110 -0
  276. package/esm2022/src/app/social/message/message.model.mjs +75 -0
  277. package/esm2022/src/app/social/message/message.module.mjs +22 -0
  278. package/esm2022/src/app/social/message/message.service.mjs +110 -0
  279. package/{esm2020 → esm2022}/src/app/social/social.module.mjs +19 -19
  280. package/{esm2020 → esm2022}/src/app/social/social.testing.module.mjs +10 -10
  281. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +123 -0
  282. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +263 -0
  283. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +233 -0
  284. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +129 -0
  285. package/{esm2020 → esm2022}/src/app/social/user-event/testing/user-event.testing.module.mjs +9 -9
  286. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +116 -0
  287. package/esm2022/src/app/social/user-event/user-event.module.mjs +43 -0
  288. package/esm2022/src/app/social/user-event/user-event.service.mjs +512 -0
  289. package/esm2022/src/environments/environment.class.mjs +50 -0
  290. package/esm2022/src/environments/environment.loader.mjs +83 -0
  291. package/esm2022/src/environments/environment.mjs +97 -0
  292. package/{fesm2020 → fesm2022}/sumaris-net.ngx-components.mjs +11115 -9134
  293. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -0
  294. package/package.json +38 -19
  295. package/public_api.d.ts +5 -1
  296. package/src/app/admin/users/users.d.ts +1 -1
  297. package/src/app/admin/users/users.module.d.ts +2 -1
  298. package/src/app/core/account/account.page.d.ts +3 -2
  299. package/src/app/core/account/new-token.modal.d.ts +2 -4
  300. package/src/app/core/account/token.table.d.ts +6 -4
  301. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +2 -2
  302. package/src/app/core/form/entity/editor.class.d.ts +2 -2
  303. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +1 -1
  304. package/src/app/core/form/entity/entity-editor.class.d.ts +10 -6
  305. package/src/app/core/form/entity/entity-metadata.component.d.ts +1 -1
  306. package/src/app/core/form/form.class.d.ts +1 -1
  307. package/src/app/core/form/list/list.form.d.ts +1 -1
  308. package/src/app/core/form/properties/properties.form.d.ts +1 -1
  309. package/src/app/core/form/properties/properties.table.d.ts +1 -1
  310. package/src/app/core/form/text-popover/text-popover.component.d.ts +2 -2
  311. package/src/app/core/form/text-popover/text-popover.module.d.ts +4 -5
  312. package/src/app/core/graphql/graphql.service.d.ts +2 -4
  313. package/src/app/core/graphql/graphql.utils.d.ts +1 -1
  314. package/src/app/core/home/home.module.d.ts +4 -3
  315. package/src/app/core/icon/icon.component.d.ts +1 -1
  316. package/src/app/core/install/install-upgrade-card.component.d.ts +1 -1
  317. package/src/app/core/menu/menu.component.d.ts +7 -3
  318. package/src/app/core/menu/menu.module.d.ts +3 -5
  319. package/src/app/core/menu/menu.service.d.ts +3 -1
  320. package/src/app/core/menu/sub-menu-tab.directive.d.ts +1 -1
  321. package/src/app/core/offline/update-offline-mode-card.component.d.ts +1 -1
  322. package/src/app/core/peer/select-peer.modal.d.ts +1 -1
  323. package/src/app/core/services/account.service.d.ts +4 -0
  324. package/src/app/core/services/base-entity-service.class.d.ts +1 -1
  325. package/src/app/core/services/config/core.config.d.ts +2 -2
  326. package/src/app/core/services/model/person.model.d.ts +1 -1
  327. package/src/app/core/services/model/referential.model.d.ts +2 -1
  328. package/src/app/core/services/model/settings.model.d.ts +1 -1
  329. package/src/app/core/services/model/token.model.d.ts +1 -0
  330. package/src/app/core/services/network.service.d.ts +11 -7
  331. package/src/app/core/services/network.types.d.ts +2 -2
  332. package/src/app/core/services/storage/entity-store.class.d.ts +1 -1
  333. package/src/app/core/table/actions-column.component.d.ts +1 -1
  334. package/src/app/core/table/async-table.class.d.ts +1 -1
  335. package/src/app/core/table/memory-table.class.d.ts +1 -1
  336. package/src/app/core/table/table-select-columns.component.d.ts +1 -1
  337. package/src/app/core/table/table.class.d.ts +2 -1
  338. package/src/app/core/table/table.model.d.ts +1 -1
  339. package/src/app/core/table/testing/table.testing.d.ts +1 -1
  340. package/src/app/shared/audio/audio.d.ts +1 -1
  341. package/src/app/shared/debug/debug.component.d.ts +1 -1
  342. package/src/app/shared/directives/autofocus.directive.d.ts +1 -1
  343. package/src/app/shared/directives/ng-var.directive.d.ts +1 -1
  344. package/src/app/shared/directives/resizable/resizable.component.d.ts +1 -1
  345. package/src/app/shared/events.d.ts +1 -1
  346. package/src/app/shared/form/field.component.d.ts +1 -1
  347. package/src/app/shared/form/loading-spinner.d.ts +1 -1
  348. package/src/app/shared/help/help.modal.d.ts +1 -1
  349. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +2 -4
  350. package/src/app/shared/http/http.utils.d.ts +1 -0
  351. package/src/app/shared/image/gallery/image-gallery.component.d.ts +1 -1
  352. package/src/app/shared/inputs.d.ts +1 -1
  353. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +2 -2
  354. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +10 -9
  355. package/src/app/shared/material/badge/badge.directive.d.ts +1 -1
  356. package/src/app/shared/material/boolean/boolean.module.d.ts +4 -5
  357. package/src/app/shared/material/boolean/material-boolean2.d.ts +1 -1
  358. package/src/app/shared/material/boolean/material.boolean.d.ts +1 -1
  359. package/src/app/shared/material/chips/material.chips.d.ts +1 -1
  360. package/src/app/shared/material/datetime/datetime.module.d.ts +2 -2
  361. package/src/app/shared/material/datetime/material.date.d.ts +2 -2
  362. package/src/app/shared/material/datetime/material.dateshort.d.ts +3 -3
  363. package/src/app/shared/material/datetime/material.datetime.d.ts +14 -7
  364. package/src/app/shared/material/duration/duration.module.d.ts +6 -5
  365. package/src/app/shared/material/duration/material.duration.d.ts +2 -2
  366. package/src/app/shared/material/latlong/material.latlong.d.ts +14 -8
  367. package/src/app/shared/material/latlong/material.latlong.module.d.ts +9 -8
  368. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +2 -0
  369. package/src/app/shared/material/material.module.d.ts +2 -1
  370. package/src/app/shared/material/material.testing.module.d.ts +14 -13
  371. package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +1 -1
  372. package/src/app/shared/material/numpad/numpad.component.d.ts +1 -1
  373. package/src/app/shared/material/numpad/numpad.content.d.ts +1 -1
  374. package/src/app/shared/material/numpad/numpad.directive.d.ts +1 -1
  375. package/src/app/shared/material/swipe/material.swipe.d.ts +1 -1
  376. package/src/app/shared/material/testing/common.test.d.ts +4 -2
  377. package/src/app/shared/material/text/testing/text-form.testing.d.ts +13 -0
  378. package/src/app/{core/form/text-popover → shared/material/text}/text-form.component.d.ts +2 -2
  379. package/src/app/shared/material/text/text-form.module.d.ts +16 -0
  380. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +9 -3
  381. package/src/app/shared/pipes/maskito.pipe.d.ts +16 -0
  382. package/src/app/shared/pipes/pipes.module.d.ts +5 -4
  383. package/src/app/shared/pipes/types.pipes.d.ts +3 -3
  384. package/src/app/shared/rx-state.module.d.ts +1 -1
  385. package/src/app/shared/services/entity-service.class.d.ts +1 -1
  386. package/src/app/shared/services/job.utils.d.ts +1 -1
  387. package/src/app/shared/services/memory-entity-service.class.d.ts +7 -3
  388. package/src/app/shared/services.d.ts +1 -0
  389. package/src/app/shared/shared.module.d.ts +16 -15
  390. package/src/app/shared/storage/storage-explorer.component.d.ts +1 -1
  391. package/src/app/shared/storage/storage-explorer.module.d.ts +3 -3
  392. package/src/app/shared/storage/storage.service.d.ts +1 -1
  393. package/src/app/shared/storage/storage.utils.d.ts +1 -1
  394. package/src/app/shared/toolbar/modal-toolbar.d.ts +1 -1
  395. package/src/app/shared/toolbar/toolbar.d.ts +1 -1
  396. package/src/app/shared/toolbar/toolbar.module.d.ts +4 -3
  397. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +1 -1
  398. package/src/app/shared/upload-file/upload-file.component.d.ts +1 -1
  399. package/src/app/shared/upload-file/upload-file.model.d.ts +2 -2
  400. package/src/app/social/job/progression/job-progression.component.d.ts +1 -1
  401. package/src/app/social/job/progression/job-progression.icon.d.ts +1 -1
  402. package/src/app/social/job/progression/job-progression.list.d.ts +1 -1
  403. package/src/app/social/message/message.form.d.ts +8 -2
  404. package/src/app/social/message/message.modal.d.ts +5 -1
  405. package/src/app/social/message/message.model.d.ts +2 -0
  406. package/src/app/social/message/message.module.d.ts +2 -1
  407. package/src/app/social/message/message.service.d.ts +8 -3
  408. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +4 -3
  409. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +1 -1
  410. package/src/app/social/user-event/user-event.model.d.ts +2 -2
  411. package/src/app/social/user-event/user-event.module.d.ts +3 -2
  412. package/src/app/social/user-event/user-event.service.d.ts +5 -0
  413. package/src/assets/environments/environment-test.json +6 -0
  414. package/src/assets/i18n/en-US.json +25 -23
  415. package/src/assets/i18n/en.json +25 -23
  416. package/src/assets/i18n/fr.json +10 -7
  417. package/src/assets/manifest.json +1 -1
  418. package/src/environments/environment.class.d.ts +2 -0
  419. package/src/environments/environment.loader.d.ts +26 -0
  420. package/src/theme/_material.globals.scss +2 -2
  421. package/src/theme/_material.scss +34 -5
  422. package/src/theme/_mixins.scss +2 -2
  423. package/src/theme/_ngx-components.globals.scss +2 -2
  424. package/src/theme/_ngx-components.scss +8 -9
  425. package/src/theme/_ngx-components.table.scss +20 -8
  426. package/esm2020/public_api.mjs +0 -336
  427. package/esm2020/src/app/admin/services/filter/person.filter.mjs +0 -59
  428. package/esm2020/src/app/admin/services/person.service.mjs +0 -170
  429. package/esm2020/src/app/admin/services/validator/person.validator.mjs +0 -71
  430. package/esm2020/src/app/admin/users/users.mjs +0 -259
  431. package/esm2020/src/app/admin/users/users.module.mjs +0 -54
  432. package/esm2020/src/app/core/about/about.modal.mjs +0 -71
  433. package/esm2020/src/app/core/account/account.page.mjs +0 -317
  434. package/esm2020/src/app/core/account/new-token.modal.mjs +0 -115
  435. package/esm2020/src/app/core/account/token.table.mjs +0 -137
  436. package/esm2020/src/app/core/auth/auth.form.mjs +0 -132
  437. package/esm2020/src/app/core/auth/auth.modal.mjs +0 -72
  438. package/esm2020/src/app/core/form/buttons/form-buttons-bar.component.mjs +0 -107
  439. package/esm2020/src/app/core/form/entity/editor.class.mjs +0 -679
  440. package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +0 -422
  441. package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +0 -690
  442. package/esm2020/src/app/core/form/entity/entity-metadata.component.mjs +0 -25
  443. package/esm2020/src/app/core/form/form.class.mjs +0 -345
  444. package/esm2020/src/app/core/form/list/list.form.mjs +0 -222
  445. package/esm2020/src/app/core/form/properties/properties.form.mjs +0 -132
  446. package/esm2020/src/app/core/form/properties/properties.table.mjs +0 -265
  447. package/esm2020/src/app/core/form/properties/property.validator.mjs +0 -23
  448. package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +0 -90
  449. package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.mjs +0 -70
  450. package/esm2020/src/app/core/form/text-popover/text-form.component.mjs +0 -89
  451. package/esm2020/src/app/core/form/text-popover/text-popover.component.mjs +0 -146
  452. package/esm2020/src/app/core/form/text-popover/text-popover.module.mjs +0 -40
  453. package/esm2020/src/app/core/graphql/graphql.service.mjs +0 -774
  454. package/esm2020/src/app/core/home/home.mjs +0 -258
  455. package/esm2020/src/app/core/home/home.module.mjs +0 -48
  456. package/esm2020/src/app/core/icon/icon.component.mjs +0 -41
  457. package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +0 -344
  458. package/esm2020/src/app/core/menu/menu.component.mjs +0 -239
  459. package/esm2020/src/app/core/menu/menu.model.mjs +0 -247
  460. package/esm2020/src/app/core/menu/menu.module.mjs +0 -57
  461. package/esm2020/src/app/core/menu/menu.service.mjs +0 -654
  462. package/esm2020/src/app/core/menu/sub-menu-tab.directive.mjs +0 -98
  463. package/esm2020/src/app/core/menu/testing/menu.testing.mjs +0 -121
  464. package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +0 -27
  465. package/esm2020/src/app/core/peer/select-peer.modal.mjs +0 -183
  466. package/esm2020/src/app/core/register/register-confirm.page.mjs +0 -81
  467. package/esm2020/src/app/core/register/register.form.mjs +0 -183
  468. package/esm2020/src/app/core/register/register.modal.mjs +0 -52
  469. package/esm2020/src/app/core/services/account.service.mjs +0 -1206
  470. package/esm2020/src/app/core/services/auth-guard.service.mjs +0 -71
  471. package/esm2020/src/app/core/services/base-entity-service.class.mjs +0 -468
  472. package/esm2020/src/app/core/services/base-graphql-service.class.mjs +0 -221
  473. package/esm2020/src/app/core/services/base58.mjs +0 -78
  474. package/esm2020/src/app/core/services/config.service.mjs +0 -355
  475. package/esm2020/src/app/core/services/crypto.service.mjs +0 -107
  476. package/esm2020/src/app/core/services/local-settings.service.mjs +0 -460
  477. package/esm2020/src/app/core/services/model/account.model.mjs +0 -147
  478. package/esm2020/src/app/core/services/model/config.model.mjs +0 -92
  479. package/esm2020/src/app/core/services/model/department.model.mjs +0 -30
  480. package/esm2020/src/app/core/services/model/entity.decorators.mjs +0 -97
  481. package/esm2020/src/app/core/services/model/entity.model.mjs +0 -225
  482. package/esm2020/src/app/core/services/model/peer.model.mjs +0 -68
  483. package/esm2020/src/app/core/services/model/person.model.mjs +0 -97
  484. package/esm2020/src/app/core/services/model/referential.model.mjs +0 -164
  485. package/esm2020/src/app/core/services/model/token.model.mjs +0 -48
  486. package/esm2020/src/app/core/services/network.service.mjs +0 -590
  487. package/esm2020/src/app/core/services/platform.service.mjs +0 -524
  488. package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +0 -428
  489. package/esm2020/src/app/core/services/storage/entity-store.class.mjs +0 -449
  490. package/esm2020/src/app/core/services/testing/referential-filter.model.mjs +0 -23
  491. package/esm2020/src/app/core/services/testing/referential.validator.mjs +0 -45
  492. package/esm2020/src/app/core/services/validator/account.validator.mjs +0 -41
  493. package/esm2020/src/app/core/services/validator/base.validator.class.mjs +0 -47
  494. package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +0 -66
  495. package/esm2020/src/app/core/settings/settings.page.mjs +0 -312
  496. package/esm2020/src/app/core/table/actions-column.component.mjs +0 -102
  497. package/esm2020/src/app/core/table/async-table.class.mjs +0 -1698
  498. package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +0 -384
  499. package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +0 -399
  500. package/esm2020/src/app/core/table/memory-table.class.mjs +0 -53
  501. package/esm2020/src/app/core/table/table-select-columns.component.mjs +0 -43
  502. package/esm2020/src/app/core/table/table.class.mjs +0 -1733
  503. package/esm2020/src/app/core/table/table.model.mjs +0 -12
  504. package/esm2020/src/app/core/table/testing/table-validator.service.mjs +0 -27
  505. package/esm2020/src/app/core/table/testing/table.testing.mjs +0 -281
  506. package/esm2020/src/app/core/table/testing/table2-validator.service.mjs +0 -24
  507. package/esm2020/src/app/core/table/testing/table2.testing.mjs +0 -242
  508. package/esm2020/src/app/shared/audio/audio.mjs +0 -248
  509. package/esm2020/src/app/shared/audio/audio.testing.mjs +0 -31
  510. package/esm2020/src/app/shared/capacitor/keyboard.mjs +0 -40
  511. package/esm2020/src/app/shared/capacitor/plugins.mjs +0 -9
  512. package/esm2020/src/app/shared/dates.mjs +0 -149
  513. package/esm2020/src/app/shared/debug/debug.component.mjs +0 -39
  514. package/esm2020/src/app/shared/directives/autofocus.directive.mjs +0 -93
  515. package/esm2020/src/app/shared/directives/autotitle.directive.mjs +0 -30
  516. package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +0 -53
  517. package/esm2020/src/app/shared/directives/ng-var.directive.mjs +0 -31
  518. package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +0 -60
  519. package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +0 -40
  520. package/esm2020/src/app/shared/file/file.service.mjs +0 -117
  521. package/esm2020/src/app/shared/form/field.component.mjs +0 -334
  522. package/esm2020/src/app/shared/form/loading-spinner.mjs +0 -36
  523. package/esm2020/src/app/shared/geolocation/geolocation.utils.mjs +0 -80
  524. package/esm2020/src/app/shared/gesture/gesture-config.mjs +0 -49
  525. package/esm2020/src/app/shared/graph/graph-colors.mjs +0 -212
  526. package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +0 -57
  527. package/esm2020/src/app/shared/help/help.modal.mjs +0 -53
  528. package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +0 -23
  529. package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +0 -81
  530. package/esm2020/src/app/shared/http/http.utils.mjs +0 -52
  531. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +0 -368
  532. package/esm2020/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +0 -27
  533. package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +0 -90
  534. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +0 -39
  535. package/esm2020/src/app/shared/image/image.service.mjs +0 -98
  536. package/esm2020/src/app/shared/inputs.mjs +0 -231
  537. package/esm2020/src/app/shared/interceptors/progess.interceptor.mjs +0 -27
  538. package/esm2020/src/app/shared/logging/logging-service.class.mjs +0 -121
  539. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +0 -47
  540. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +0 -925
  541. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +0 -78
  542. package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +0 -209
  543. package/esm2020/src/app/shared/material/badge/badge.directive.mjs +0 -199
  544. package/esm2020/src/app/shared/material/badge/badge.test.mjs +0 -41
  545. package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +0 -76
  546. package/esm2020/src/app/shared/material/boolean/material-boolean2.mjs +0 -248
  547. package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +0 -254
  548. package/esm2020/src/app/shared/material/boolean/testing/boolean.test.page.mjs +0 -51
  549. package/esm2020/src/app/shared/material/chips/material.chips.mjs +0 -688
  550. package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +0 -143
  551. package/esm2020/src/app/shared/material/datetime/material.date.mjs +0 -378
  552. package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +0 -387
  553. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +0 -501
  554. package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +0 -120
  555. package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +0 -118
  556. package/esm2020/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +0 -111
  557. package/esm2020/src/app/shared/material/duration/duration.module.mjs +0 -67
  558. package/esm2020/src/app/shared/material/duration/material.duration.mjs +0 -258
  559. package/esm2020/src/app/shared/material/duration/testing/mat-duration.test.mjs +0 -76
  560. package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +0 -383
  561. package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +0 -67
  562. package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +0 -102
  563. package/esm2020/src/app/shared/material/material.module.mjs +0 -224
  564. package/esm2020/src/app/shared/material/material.testing.module.mjs +0 -210
  565. package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +0 -98
  566. package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +0 -80
  567. package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +0 -190
  568. package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +0 -17
  569. package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +0 -162
  570. package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +0 -32
  571. package/esm2020/src/app/shared/material/numpad/numpad.model.mjs +0 -15
  572. package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +0 -46
  573. package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +0 -46
  574. package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +0 -22
  575. package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +0 -345
  576. package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +0 -64
  577. package/esm2020/src/app/shared/material/testing/common.test.mjs +0 -95
  578. package/esm2020/src/app/shared/named-filter/named-filter-selector.component.mjs +0 -202
  579. package/esm2020/src/app/shared/named-filter/named-filter.model.mjs +0 -45
  580. package/esm2020/src/app/shared/named-filter/named-filter.service.mjs +0 -63
  581. package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +0 -48
  582. package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +0 -66
  583. package/esm2020/src/app/shared/pipes/date-from-now.pipe.mjs +0 -27
  584. package/esm2020/src/app/shared/pipes/duration.pipe.mjs +0 -34
  585. package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +0 -62
  586. package/esm2020/src/app/shared/pipes/form.pipes.mjs +0 -187
  587. package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +0 -46
  588. package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +0 -21
  589. package/esm2020/src/app/shared/pipes/pipes.module.mjs +0 -247
  590. package/esm2020/src/app/shared/pipes/property.pipes.mjs +0 -93
  591. package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +0 -43
  592. package/esm2020/src/app/shared/rx-state.module.mjs +0 -23
  593. package/esm2020/src/app/shared/services/entity-service.class.mjs +0 -7
  594. package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +0 -339
  595. package/esm2020/src/app/shared/services/progress-bar.service.mjs +0 -33
  596. package/esm2020/src/app/shared/services/startable-observable-service.class.mjs +0 -121
  597. package/esm2020/src/app/shared/services/startable-service.class.mjs +0 -113
  598. package/esm2020/src/app/shared/services/translate-context.service.mjs +0 -103
  599. package/esm2020/src/app/shared/services.mjs +0 -62
  600. package/esm2020/src/app/shared/shared.module.mjs +0 -224
  601. package/esm2020/src/app/shared/storage/storage-explorer.component.mjs +0 -268
  602. package/esm2020/src/app/shared/storage/storage-explorer.module.mjs +0 -47
  603. package/esm2020/src/app/shared/storage/storage.service.mjs +0 -132
  604. package/esm2020/src/app/shared/testing/observable.test.mjs +0 -95
  605. package/esm2020/src/app/shared/testing/tests.page.mjs +0 -33
  606. package/esm2020/src/app/shared/toast/toast.testing.mjs +0 -51
  607. package/esm2020/src/app/shared/toast/toasts.mjs +0 -144
  608. package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +0 -58
  609. package/esm2020/src/app/shared/toolbar/toolbar.mjs +0 -251
  610. package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +0 -53
  611. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +0 -58
  612. package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +0 -97
  613. package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +0 -204
  614. package/esm2020/src/app/shared/upload-file/upload-file.model.mjs +0 -20
  615. package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +0 -104
  616. package/esm2020/src/app/shared/validator/validators.mjs +0 -580
  617. package/esm2020/src/app/shared/version/versions.mjs +0 -81
  618. package/esm2020/src/app/social/job/progression/job-progression.component.mjs +0 -34
  619. package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +0 -223
  620. package/esm2020/src/app/social/job/progression/job-progression.list.mjs +0 -46
  621. package/esm2020/src/app/social/job/progression/job-progression.model.mjs +0 -23
  622. package/esm2020/src/app/social/job/progression/job-progression.service.mjs +0 -71
  623. package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +0 -41
  624. package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +0 -55
  625. package/esm2020/src/app/social/message/message.form.mjs +0 -84
  626. package/esm2020/src/app/social/message/message.modal.mjs +0 -93
  627. package/esm2020/src/app/social/message/message.model.mjs +0 -64
  628. package/esm2020/src/app/social/message/message.module.mjs +0 -35
  629. package/esm2020/src/app/social/message/message.service.mjs +0 -84
  630. package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +0 -114
  631. package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +0 -246
  632. package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +0 -227
  633. package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +0 -112
  634. package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +0 -111
  635. package/esm2020/src/app/social/user-event/user-event.module.mjs +0 -39
  636. package/esm2020/src/app/social/user-event/user-event.service.mjs +0 -488
  637. package/esm2020/src/environments/environment.class.mjs +0 -5
  638. package/esm2020/src/environments/environment.mjs +0 -94
  639. package/fesm2015/sumaris-net.ngx-components.mjs +0 -41541
  640. package/fesm2015/sumaris-net.ngx-components.mjs.map +0 -1
  641. package/fesm2020/sumaris-net.ngx-components.mjs.map +0 -1
  642. /package/{esm2020 → esm2022}/src/app/core/services/errors.mjs +0 -0
  643. /package/{esm2020 → esm2022}/src/app/core/services/model/filter.model.mjs +0 -0
  644. /package/{esm2020 → esm2022}/src/app/core/services/model/history.model.mjs +0 -0
  645. /package/{esm2020 → esm2022}/src/app/core/services/model/model.enum.mjs +0 -0
  646. /package/{esm2020 → esm2022}/src/app/core/services/model/settings.model.mjs +0 -0
  647. /package/{esm2020 → esm2022}/src/app/core/services/model/tree-item-entity.model.mjs +0 -0
  648. /package/{esm2020 → esm2022}/src/app/core/services/network.utils.mjs +0 -0
  649. /package/{esm2020 → esm2022}/src/app/core/table/table.utils.mjs +0 -0
  650. /package/{esm2020 → esm2022}/src/app/shared/alerts.mjs +0 -0
  651. /package/{esm2020 → esm2022}/src/app/shared/constants.mjs +0 -0
  652. /package/{esm2020 → esm2022}/src/app/shared/debug/debug-service.class.mjs +0 -0
  653. /package/{esm2020 → esm2022}/src/app/shared/events.mjs +0 -0
  654. /package/{esm2020 → esm2022}/src/app/shared/file/csv.utils.mjs +0 -0
  655. /package/{esm2020 → esm2022}/src/app/shared/file/images.utils.mjs +0 -0
  656. /package/{esm2020 → esm2022}/src/app/shared/file/json.utils.mjs +0 -0
  657. /package/{esm2020 → esm2022}/src/app/shared/file/uri.utils.mjs +0 -0
  658. /package/{esm2020 → esm2022}/src/app/shared/focusable.mjs +0 -0
  659. /package/{esm2020 → esm2022}/src/app/shared/form/field.model.mjs +0 -0
  660. /package/{esm2020 → esm2022}/src/app/shared/forms.mjs +0 -0
  661. /package/{esm2020 → esm2022}/src/app/shared/gesture/hammer.utils.mjs +0 -0
  662. /package/{esm2020 → esm2022}/src/app/shared/graph/colors.utils.mjs +0 -0
  663. /package/{esm2020 → esm2022}/src/app/shared/image/image.model.mjs +0 -0
  664. /package/{esm2020 → esm2022}/src/app/shared/logging/log-level.model.mjs +0 -0
  665. /package/{esm2020 → esm2022}/src/app/shared/logging/logger.model.mjs +0 -0
  666. /package/{esm2020 → esm2022}/src/app/shared/logging/logging-service.config.mjs +0 -0
  667. /package/{esm2020 → esm2022}/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +0 -0
  668. /package/{esm2020 → esm2022}/src/app/shared/material/material.animations.mjs +0 -0
  669. /package/{esm2020 → esm2022}/src/app/shared/modules.mjs +0 -0
  670. /package/{esm2020 → esm2022}/src/app/shared/observables.mjs +0 -0
  671. /package/{esm2020 → esm2022}/src/app/shared/platforms.mjs +0 -0
  672. /package/{esm2020 → esm2022}/src/app/shared/services/job.utils.mjs +0 -0
  673. /package/{esm2020 → esm2022}/src/app/shared/services/validator-service.class.mjs +0 -0
  674. /package/{esm2020 → esm2022}/src/app/shared/types.mjs +0 -0
  675. /package/{esm2020 → esm2022}/src/app/social/social.errors.mjs +0 -0
  676. /package/{esm2020 → esm2022}/src/app/social/user-event/user-event.model.mjs +0 -0
  677. /package/{esm2020 → esm2022}/sumaris-net.ngx-components.mjs +0 -0
@@ -0,0 +1,436 @@
1
+ import { ChangeDetectorRef, Directive, Input, Optional } from '@angular/core';
2
+ import { Router } from '@angular/router';
3
+ import { AlertController, ModalController, NavController } from '@ionic/angular';
4
+ import { TranslateService } from '@ngx-translate/core';
5
+ import { BehaviorSubject, Subject } from 'rxjs';
6
+ import { LocalSettingsService } from '../../services/local-settings.service';
7
+ import { AppTabEditor, AppTabEditorOptions } from './editor.class';
8
+ import { AppFormUtils } from '../form.utils';
9
+ import { Alerts } from '../../../shared/alerts';
10
+ import { ErrorCodes } from '../../services/errors';
11
+ import { isNil, isNotNil, isNotNilOrBlank } from '../../../shared/functions';
12
+ import { DateFormatService } from '../../../shared/pipes/date-format.pipe';
13
+ import { waitForFalse } from '../../../shared/observables';
14
+ import { FormErrorTranslator } from '../../../shared/validator/form-error-adapter.class';
15
+ import { debounceTime } from 'rxjs/operators';
16
+ import * as i0 from "@angular/core";
17
+ export class AppEntityEditorModalOptions extends AppTabEditorOptions {
18
+ i18nPrefix;
19
+ }
20
+ // @dynamic
21
+ // eslint-disable-next-line @angular-eslint/directive-class-suffix
22
+ export class AppEntityEditorModal extends AppTabEditor {
23
+ dataType;
24
+ _logPrefix;
25
+ _isNew;
26
+ dateFormat;
27
+ cd;
28
+ settings;
29
+ modalCtrl;
30
+ errorTranslator;
31
+ savingSubject = new BehaviorSubject(false);
32
+ $title = new Subject();
33
+ data;
34
+ mobile;
35
+ usageMode;
36
+ onAfterModalInit;
37
+ onDelete;
38
+ i18nSuffix = null;
39
+ set isNew(value) {
40
+ this._isNew = value;
41
+ }
42
+ get isNew() {
43
+ return isNotNil(this._isNew) ? this._isNew : isNil(this.data?.id);
44
+ }
45
+ /**
46
+ * @deprecated use isNew instead
47
+ */
48
+ get isNewData() {
49
+ return this.isNew;
50
+ }
51
+ /**
52
+ * @deprecated use isNew instead
53
+ */
54
+ set isNewData(value) {
55
+ this.isNew = value;
56
+ }
57
+ set disabled(value) {
58
+ this._enabled = !value;
59
+ }
60
+ get disabled() {
61
+ return !this._enabled;
62
+ }
63
+ get isOnFieldMode() {
64
+ return this.settings.isOnFieldMode(this.usageMode);
65
+ }
66
+ get saving() {
67
+ return this.savingSubject.value;
68
+ }
69
+ markAsSaving(opts) {
70
+ if (this.savingSubject.value !== true) {
71
+ this.savingSubject.next(true);
72
+ if (!opts || opts.emitEvent !== false)
73
+ this.markForCheck();
74
+ }
75
+ }
76
+ markAsSaved(opts) {
77
+ if (this.savingSubject.value !== false) {
78
+ this.savingSubject.next(false);
79
+ if (!opts || opts.emitEvent !== false)
80
+ this.markForCheck();
81
+ }
82
+ }
83
+ constructor(injector, dataType, options) {
84
+ super(null, injector.get(Router), injector.get(NavController), injector.get(AlertController), injector.get(TranslateService), options);
85
+ this.dataType = dataType;
86
+ options = {
87
+ // Default options
88
+ i18nPrefix: '',
89
+ // Override defaults
90
+ ...options
91
+ };
92
+ this.queryTabIndexParamName = undefined; // Important: avoid query parameter changed
93
+ this.settings = injector.get(LocalSettingsService);
94
+ this.errorTranslator = injector.get(FormErrorTranslator);
95
+ this.cd = injector.get(ChangeDetectorRef);
96
+ this.dateFormat = injector.get(DateFormatService);
97
+ this.modalCtrl = injector.get(ModalController);
98
+ this.i18nContext = {
99
+ prefix: options.i18nPrefix,
100
+ suffix: this.i18nSuffix || ''
101
+ };
102
+ // FOR DEV ONLY ----
103
+ //this.debug = !environment.production;
104
+ }
105
+ ngOnInit() {
106
+ // Default values
107
+ this.mobile = isNotNil(this.mobile) ? this.mobile : this.settings.mobile;
108
+ this.usageMode = this.usageMode || this.settings.usageMode;
109
+ super.ngOnInit();
110
+ // Register forms
111
+ this.registerForms();
112
+ // Disable
113
+ if (this.disabled)
114
+ this.disable();
115
+ if (this.isNew) {
116
+ // Update the title.
117
+ this.updateTitle();
118
+ }
119
+ else {
120
+ // Update title each time value changes
121
+ this.registerSubscription(this.form.valueChanges
122
+ .pipe(debounceTime(250))
123
+ .subscribe(json => this.updateTitle(json)));
124
+ }
125
+ }
126
+ ngAfterViewInit() {
127
+ super.ngAfterViewInit();
128
+ if (this.onAfterModalInit) {
129
+ Promise.resolve(this.onAfterModalInit(this))
130
+ .then(() => this.load());
131
+ }
132
+ else {
133
+ // Use a timeout to avoid error 'NG0100: ExpressionChangedAfterItHasBeenCheckedError'
134
+ setTimeout(() => this.load());
135
+ }
136
+ }
137
+ ngOnDestroy() {
138
+ super.ngOnDestroy();
139
+ this.$title.complete();
140
+ this.$title.unsubscribe();
141
+ this.savingSubject.unsubscribe();
142
+ }
143
+ waitIdle(opts) {
144
+ // Wait end of saving
145
+ if (this.saving)
146
+ return waitForFalse(this.savingSubject);
147
+ return super.waitIdle(opts);
148
+ }
149
+ async load() {
150
+ this.markAsReady();
151
+ this.markAsLoading();
152
+ try {
153
+ await this.updateView(this.data);
154
+ }
155
+ catch (err) {
156
+ if (err === 'CANCELLED')
157
+ return;
158
+ this.setError(err);
159
+ this.selectedTabIndex = 0;
160
+ }
161
+ finally {
162
+ this.markAsLoaded();
163
+ }
164
+ }
165
+ reload() {
166
+ if (this.dirty) {
167
+ return this.load();
168
+ }
169
+ }
170
+ unload(opts) {
171
+ throw new Error('No implemented on modal');
172
+ }
173
+ async updateView(data, opts) {
174
+ this.resetError();
175
+ if (!data)
176
+ throw { code: ErrorCodes.DATA_NOT_FOUND_ERROR, message: 'ERROR.DATA_NO_FOUND' };
177
+ this.data = data;
178
+ await this.setValue(data);
179
+ if (!opts || opts.emitEvent !== false) {
180
+ this.markAsPristine();
181
+ this.markAsUntouched();
182
+ this.updateViewState(data);
183
+ // Update the title.
184
+ this.updateTitle(data);
185
+ }
186
+ }
187
+ /**
188
+ * Enable or disable state
189
+ */
190
+ updateViewState(data, opts) {
191
+ if (this.isNew || this.enabled) {
192
+ this.enable(opts);
193
+ }
194
+ else {
195
+ this.disable(opts);
196
+ // Allow to sort table
197
+ this.tables?.forEach(t => t.enableSort());
198
+ }
199
+ }
200
+ async saveAndClose(event) {
201
+ const data = await this.saveAndGetDataIfValid();
202
+ if (data) {
203
+ this.modalCtrl.dismiss(data);
204
+ return true;
205
+ }
206
+ return false;
207
+ }
208
+ async close(event) {
209
+ if (this.dirty) {
210
+ const saveBeforeLeave = await Alerts.askSaveBeforeLeave(this.alertCtrl, this.translate, event);
211
+ // User cancelled
212
+ if (isNil(saveBeforeLeave) || event && event.defaultPrevented) {
213
+ return;
214
+ }
215
+ // Is user confirm: close normally
216
+ if (saveBeforeLeave === true) {
217
+ await this.saveAndClose(event);
218
+ return;
219
+ }
220
+ }
221
+ await this.modalCtrl.dismiss();
222
+ }
223
+ /**
224
+ * Save the editor, by calling the dataService.save().
225
+ * Ensure that editor if valid. If not, display an error
226
+ *
227
+ * @param event
228
+ * @param opts
229
+ */
230
+ async save(event, opts) {
231
+ if (this.loading || this.saving || this.disabled) {
232
+ console.debug(this._logPrefix + 'Skip save: modal is busy (loading or saving)');
233
+ return false;
234
+ }
235
+ if (!this.dirty) {
236
+ console.debug(this._logPrefix + 'Skip save: modal not dirty');
237
+ return true;
238
+ }
239
+ // Wait end of async validation
240
+ await this.waitWhilePending();
241
+ // If invalid
242
+ if (this.invalid) {
243
+ this.logFormErrors();
244
+ this.setError('COMMON.FORM.HAS_ERROR');
245
+ this.openFirstInvalidTab();
246
+ this.scrollToTop();
247
+ this.markAllAsTouched();
248
+ this.submitted = true;
249
+ return false;
250
+ }
251
+ this.markAsSaving();
252
+ this.resetError();
253
+ if (this.debug)
254
+ console.debug(this._logPrefix + 'Saving data...');
255
+ try {
256
+ // Save all dirty children
257
+ const saved = await this.saveDirtyChildren();
258
+ if (!saved)
259
+ return false;
260
+ // Fill data
261
+ this.data = await this.getValue();
262
+ // Mark as submitted
263
+ this.submitted = true;
264
+ return true;
265
+ }
266
+ catch (err) {
267
+ this.submitted = true;
268
+ this.selectedTabIndex = 0; // Can by override by subclasses, using setError()
269
+ this.setError(err);
270
+ this.scrollToTop(); // Scroll to top (to show error)
271
+ this.markAsDirty();
272
+ this.enable();
273
+ return false;
274
+ }
275
+ finally {
276
+ this.markAsSaved();
277
+ }
278
+ }
279
+ /**
280
+ * Save data (if dirty and valid), and return it. Otherwise, return nil value.
281
+ */
282
+ async saveAndGetDataIfValid() {
283
+ // Form is not valid
284
+ if (!this.valid) {
285
+ // Make sure validation is finished
286
+ await AppFormUtils.waitWhilePending(this);
287
+ // If invalid: Open the first tab in error
288
+ if (this.invalid) {
289
+ this.openFirstInvalidTab();
290
+ return undefined;
291
+ }
292
+ // Continue (valid)
293
+ }
294
+ // Form is valid, but not saved
295
+ if (this.dirty) {
296
+ const saved = await this.save(new Event('save'));
297
+ if (!saved)
298
+ return undefined;
299
+ }
300
+ // Valid and saved data
301
+ return this.data;
302
+ }
303
+ async delete(event) {
304
+ if (this.loading || this.saving)
305
+ return false;
306
+ this.markAsSaving();
307
+ this.resetError();
308
+ try {
309
+ // Delegate deletion to modal caller
310
+ if (this.onDelete) {
311
+ const result = await this.onDelete(event, this.data);
312
+ // User cancelled
313
+ if (isNil(result) || (event && event.defaultPrevented))
314
+ return;
315
+ if (result) {
316
+ await this.modalCtrl.dismiss(this.data, 'delete');
317
+ }
318
+ }
319
+ // Or dismiss, with the role 'delete'
320
+ else {
321
+ if (this.isNew) {
322
+ console.error(this._logPrefix + 'Trying to delete a new data. Make no sense!');
323
+ }
324
+ await this.modalCtrl.dismiss(this.data, 'delete');
325
+ }
326
+ }
327
+ catch (err) {
328
+ this.submitted = true;
329
+ this.setError(err);
330
+ this.selectedTabIndex = 0;
331
+ this.markAsSaved();
332
+ if (this.enabled)
333
+ this.enable();
334
+ return false;
335
+ }
336
+ }
337
+ resetError(opts) {
338
+ if (isNotNilOrBlank(this.error)) {
339
+ this.error = null;
340
+ if (!opts || opts.emitEvent !== false)
341
+ this.markForCheck();
342
+ }
343
+ }
344
+ setError(err, opts) {
345
+ if (!err) {
346
+ super.setError(undefined, opts);
347
+ }
348
+ else if (typeof err === 'string') {
349
+ console.error('[entity-editor] Error: ' + (err || ''));
350
+ super.setError(err, opts);
351
+ }
352
+ else {
353
+ console.error('[entity-editor] Error: ' + err.message || '', err);
354
+ let userMessage = err.message && this.translate.instant(err.message) || err;
355
+ // Add details error (if any) under the main message
356
+ const detailMessage = (!err.details || typeof err.details === 'string')
357
+ ? err.details
358
+ : err.details.message;
359
+ if (isNotNilOrBlank(detailMessage)) {
360
+ const cssClass = opts?.detailsCssClass || 'error-details';
361
+ userMessage += `<br/><small class="${cssClass}" title="${detailMessage}">`;
362
+ userMessage += detailMessage.length < 70 ? detailMessage : detailMessage.substring(0, 67) + '...';
363
+ userMessage += '</small>';
364
+ }
365
+ super.setError(userMessage, opts);
366
+ }
367
+ }
368
+ /* -- protected methods -- */
369
+ waitWhilePending(opts) {
370
+ return AppFormUtils.waitWhilePending(this, opts);
371
+ }
372
+ async getValue() {
373
+ const json = await this.getJsonValueToSave();
374
+ const res = new this.dataType();
375
+ res.fromObject(json);
376
+ return res;
377
+ }
378
+ getJsonValueToSave() {
379
+ return Promise.resolve(this.form.value);
380
+ }
381
+ /**
382
+ * Compute the title
383
+ *
384
+ * @param data
385
+ */
386
+ async updateTitle(data) {
387
+ data = data || this.data;
388
+ const title = await this.computeTitle(data);
389
+ this.$title.next(title);
390
+ }
391
+ async scrollToTop(duration) {
392
+ if (this.content) {
393
+ return this.content.scrollToTop(duration);
394
+ }
395
+ }
396
+ markForCheck() {
397
+ this.cd?.markForCheck();
398
+ }
399
+ /* -- private functions -- */
400
+ /**
401
+ * Open the first tab that is invalid
402
+ */
403
+ openFirstInvalidTab() {
404
+ const invalidTabIndex = this.getFirstInvalidTabIndex();
405
+ if (invalidTabIndex !== -1 && this.selectedTabIndex !== invalidTabIndex) {
406
+ this.selectedTabIndex = invalidTabIndex;
407
+ this.markForCheck();
408
+ }
409
+ }
410
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AppEntityEditorModal, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
411
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.6", type: AppEntityEditorModal, inputs: { data: "data", mobile: "mobile", usageMode: "usageMode", onAfterModalInit: "onAfterModalInit", onDelete: "onDelete", i18nSuffix: "i18nSuffix", isNew: "isNew", isNewData: "isNewData", disabled: "disabled" }, usesInheritance: true, ngImport: i0 });
412
+ }
413
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AppEntityEditorModal, decorators: [{
414
+ type: Directive
415
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: undefined }, { type: undefined, decorators: [{
416
+ type: Optional
417
+ }] }], propDecorators: { data: [{
418
+ type: Input
419
+ }], mobile: [{
420
+ type: Input
421
+ }], usageMode: [{
422
+ type: Input
423
+ }], onAfterModalInit: [{
424
+ type: Input
425
+ }], onDelete: [{
426
+ type: Input
427
+ }], i18nSuffix: [{
428
+ type: Input
429
+ }], isNew: [{
430
+ type: Input
431
+ }], isNewData: [{
432
+ type: Input
433
+ }], disabled: [{
434
+ type: Input
435
+ }] } });
436
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWVkaXRvci1tb2RhbC5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2VudGl0eS9lbnRpdHktZWRpdG9yLW1vZGFsLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQUUsU0FBUyxFQUFZLEtBQUssRUFBcUIsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsZUFBZSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUkzRSxPQUFPLEVBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzNFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxZQUFZLEVBQWlCLE1BQU0sNkJBQTZCLENBQUM7QUFDekUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sb0RBQW9ELENBQUM7QUFFdkYsT0FBTyxFQUFDLFlBQVks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U0FBUzs7MEJBb0ZMLFFBQVE7eUNBN0RGLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBaUJPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBSU8sUUFBUTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0FsZXJ0Q29udHJvbGxlciwgTW9kYWxDb250cm9sbGVyLCBOYXZDb250cm9sbGVyfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0xvY2FsU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7RW50aXR5fSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtVc2FnZU1vZGV9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZGVsL3NldHRpbmdzLm1vZGVsJztcbmltcG9ydCB7Rm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0FwcFRhYkVkaXRvciwgQXBwVGFiRWRpdG9yT3B0aW9uc30gZnJvbSAnLi9lZGl0b3IuY2xhc3MnO1xuaW1wb3J0IHtBcHBGb3JtVXRpbHN9IGZyb20gJy4uL2Zvcm0udXRpbHMnO1xuaW1wb3J0IHtBbGVydHN9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9hbGVydHMnO1xuaW1wb3J0IHtFcnJvckNvZGVzfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lcnJvcnMnO1xuaW1wb3J0IHtpc05pbCwgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFua30gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge0RhdGVGb3JtYXRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvcGlwZXMvZGF0ZS1mb3JtYXQucGlwZSc7XG5pbXBvcnQge3dhaXRGb3JGYWxzZSwgV2FpdEZvck9wdGlvbnN9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge0Zvcm1FcnJvclRyYW5zbGF0b3J9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC92YWxpZGF0b3IvZm9ybS1lcnJvci1hZGFwdGVyLmNsYXNzJztcbmltcG9ydCB7QXBwRXJyb3JXaXRoRGV0YWlsc30gZnJvbSAnLi9lbnRpdHktZWRpdG9yLmNsYXNzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cblxuZXhwb3J0IGludGVyZmFjZSBJRW50aXR5RWRpdG9yTW9kYWxPcHRpb25zPFxuICBUIGV4dGVuZHMgRW50aXR5PFQsIElEPiAgPSBFbnRpdHk8YW55LCBhbnk+LFxuICBJRCA9IG51bWJlcj4ge1xuXG4gIC8vIERhdGFcbiAgaXNOZXc6IGJvb2xlYW47XG4gIGRhdGE6IFQ7XG4gIGRpc2FibGVkOiBib29sZWFuO1xuXG4gIG9uQWZ0ZXJNb2RhbEluaXQ/OiA8TSBleHRlbmRzIEFwcEVudGl0eUVkaXRvck1vZGFsPFQsIElEPj4obW9kYWw6IE0pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICBvbkRlbGV0ZT86IChldmVudDogRXZlbnQsIGRhdGE6IFQpID0+IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgdXNhZ2VNb2RlOiBVc2FnZU1vZGU7XG4gIG1vYmlsZTogYm9vbGVhbjtcbiAgaTE4blN1ZmZpeD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEFwcEVudGl0eUVkaXRvck1vZGFsT3B0aW9ucyBleHRlbmRzIEFwcFRhYkVkaXRvck9wdGlvbnMge1xuICBpMThuUHJlZml4Pzogc3RyaW5nO1xufVxuXG4vLyBAZHluYW1pY1xuQERpcmVjdGl2ZSgpXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBcHBFbnRpdHlFZGl0b3JNb2RhbDxcbiAgVCBleHRlbmRzIEVudGl0eTxULCBJRD4sXG4gIElEID0gbnVtYmVyLFxuICBPIGV4dGVuZHMgQXBwRW50aXR5RWRpdG9yTW9kYWxPcHRpb25zID0gQXBwRW50aXR5RWRpdG9yTW9kYWxPcHRpb25zXG4gID5cbiAgZXh0ZW5kcyBBcHBUYWJFZGl0b3I8VCwgSUQ+XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIElFbnRpdHlFZGl0b3JNb2RhbE9wdGlvbnM8VCwgSUQ+IHtcblxuICBwcm90ZWN0ZWQgX2xvZ1ByZWZpeDtcbiAgcHJvdGVjdGVkIF9pc05ldzogYm9vbGVhbjtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0ZUZvcm1hdDogRGF0ZUZvcm1hdFNlcnZpY2U7XG4gIHByb3RlY3RlZCByZWFkb25seSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2U7XG4gIHByb3RlY3RlZCByZWFkb25seSBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcjtcbiAgcHJvdGVjdGVkIGVycm9yVHJhbnNsYXRvcjogRm9ybUVycm9yVHJhbnNsYXRvcjtcblxuICByZWFkb25seSBzYXZpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgJHRpdGxlID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIEBJbnB1dCgpIGRhdGE6IFQ7XG4gIEBJbnB1dCgpIG1vYmlsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgdXNhZ2VNb2RlOiBVc2FnZU1vZGU7XG4gIEBJbnB1dCgpIG9uQWZ0ZXJNb2RhbEluaXQ6IDxNIGV4dGVuZHMgQXBwRW50aXR5RWRpdG9yTW9kYWw8VCwgSUQ+Pihtb2RhbDogTSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIEBJbnB1dCgpIG9uRGVsZXRlOiAoZXZlbnQ6IEV2ZW50LCBkYXRhOiBUKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBASW5wdXQoKSBpMThuU3VmZml4OiBzdHJpbmcgPSBudWxsO1xuXG4gIEBJbnB1dCgpIHNldCBpc05ldyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzTmV3ID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaXNOZXcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTm90TmlsKHRoaXMuX2lzTmV3KSA/IHRoaXMuX2lzTmV3IDogaXNOaWwodGhpcy5kYXRhPy5pZCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGlzTmV3IGluc3RlYWRcbiAgICovXG4gIGdldCBpc05ld0RhdGEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNOZXc7XG4gIH1cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBpc05ldyBpbnN0ZWFkXG4gICAqL1xuICBASW5wdXQoKSBzZXQgaXNOZXdEYXRhKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc05ldyA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZW5hYmxlZCA9ICF2YWx1ZTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuX2VuYWJsZWQ7XG4gIH1cblxuICBnZXQgaXNPbkZpZWxkTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5pc09uRmllbGRNb2RlKHRoaXMudXNhZ2VNb2RlKTtcbiAgfVxuXG4gIGdldCBzYXZpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2F2aW5nU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIG1hcmtBc1NhdmluZyhvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pe1xuICAgIGlmICh0aGlzLnNhdmluZ1N1YmplY3QudmFsdWUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuc2F2aW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBtYXJrQXNTYXZlZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pe1xuICAgIGlmICh0aGlzLnNhdmluZ1N1YmplY3QudmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnNhdmluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIGRhdGFUeXBlOiBuZXcoKSA9PiBULFxuICAgIEBPcHRpb25hbCgpIG9wdGlvbnM/OiBPXG4gICkge1xuICAgIHN1cGVyKG51bGwsXG4gICAgICBpbmplY3Rvci5nZXQoUm91dGVyKSxcbiAgICAgIGluamVjdG9yLmdldChOYXZDb250cm9sbGVyKSxcbiAgICAgIGluamVjdG9yLmdldChBbGVydENvbnRyb2xsZXIpLFxuICAgICAgaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLFxuICAgICAgb3B0aW9ucyk7XG4gICAgb3B0aW9ucyA9IDxPPntcbiAgICAgIC8vIERlZmF1bHQgb3B0aW9uc1xuICAgICAgaTE4blByZWZpeDogJycsXG5cbiAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHRzXG4gICAgICAuLi5vcHRpb25zXG4gICAgfTtcblxuICAgIHRoaXMucXVlcnlUYWJJbmRleFBhcmFtTmFtZSA9IHVuZGVmaW5lZDsgLy8gSW1wb3J0YW50OiBhdm9pZCBxdWVyeSBwYXJhbWV0ZXIgY2hhbmdlZFxuICAgIHRoaXMuc2V0dGluZ3MgPSBpbmplY3Rvci5nZXQoTG9jYWxTZXR0aW5nc1NlcnZpY2UpO1xuICAgIHRoaXMuZXJyb3JUcmFuc2xhdG9yID0gaW5qZWN0b3IuZ2V0KEZvcm1FcnJvclRyYW5zbGF0b3IpO1xuICAgIHRoaXMuY2QgPSBpbmplY3Rvci5nZXQoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHRoaXMuZGF0ZUZvcm1hdCA9IGluamVjdG9yLmdldChEYXRlRm9ybWF0U2VydmljZSk7XG4gICAgdGhpcy5tb2RhbEN0cmwgPSBpbmplY3Rvci5nZXQoTW9kYWxDb250cm9sbGVyKTtcbiAgICB0aGlzLmkxOG5Db250ZXh0ID0ge1xuICAgICAgcHJlZml4OiBvcHRpb25zLmkxOG5QcmVmaXgsXG4gICAgICBzdWZmaXg6IHRoaXMuaTE4blN1ZmZpeCB8fCAnJ1xuICAgIH07XG5cbiAgICAvLyBGT1IgREVWIE9OTFkgLS0tLVxuICAgIC8vdGhpcy5kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgICAvLyBEZWZhdWx0IHZhbHVlc1xuICAgIHRoaXMubW9iaWxlID0gaXNOb3ROaWwodGhpcy5tb2JpbGUpID8gdGhpcy5tb2JpbGUgOiB0aGlzLnNldHRpbmdzLm1vYmlsZTtcbiAgICB0aGlzLnVzYWdlTW9kZSA9IHRoaXMudXNhZ2VNb2RlIHx8IHRoaXMuc2V0dGluZ3MudXNhZ2VNb2RlO1xuXG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIC8vIFJlZ2lzdGVyIGZvcm1zXG4gICAgdGhpcy5yZWdpc3RlckZvcm1zKCk7XG5cbiAgICAvLyBEaXNhYmxlXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgaWYgKHRoaXMuaXNOZXcpIHtcbiAgICAgIC8vIFVwZGF0ZSB0aGUgdGl0bGUuXG4gICAgICB0aGlzLnVwZGF0ZVRpdGxlKCk7XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICAvLyBVcGRhdGUgdGl0bGUgZWFjaCB0aW1lIHZhbHVlIGNoYW5nZXNcbiAgICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjUwKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKGpzb24gPT4gdGhpcy51cGRhdGVUaXRsZShqc29uKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuXG4gICAgaWYgKHRoaXMub25BZnRlck1vZGFsSW5pdCkge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKHRoaXMub25BZnRlck1vZGFsSW5pdCh0aGlzKSlcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5sb2FkKCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vIFVzZSBhIHRpbWVvdXQgdG8gYXZvaWQgZXJyb3IgJ05HMDEwMDogRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvcidcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5sb2FkKCkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy4kdGl0bGUuY29tcGxldGUoKTtcbiAgICB0aGlzLiR0aXRsZS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc2F2aW5nU3ViamVjdC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgd2FpdElkbGUob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gV2FpdCBlbmQgb2Ygc2F2aW5nXG4gICAgaWYgKHRoaXMuc2F2aW5nKSByZXR1cm4gd2FpdEZvckZhbHNlKHRoaXMuc2F2aW5nU3ViamVjdCk7XG5cbiAgICByZXR1cm4gc3VwZXIud2FpdElkbGUob3B0cyk7XG4gIH1cblxuICBhc3luYyBsb2FkKCkge1xuICAgIHRoaXMubWFya0FzUmVhZHkoKTtcbiAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVZpZXcodGhpcy5kYXRhKTtcbiAgICB9XG4gICAgY2F0Y2goZXJyKSB7XG4gICAgICBpZiAoZXJyID09PSAnQ0FOQ0VMTEVEJykgcmV0dXJuO1xuICAgICAgdGhpcy5zZXRFcnJvcihlcnIpO1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMDtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgIH1cbiAgfVxuXG4gIHJlbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5kaXJ0eSkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIHVubG9hZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGltcGxlbWVudGVkIG9uIG1vZGFsJyk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVWaWV3KGRhdGE6IFQsIG9wdHM/OiB7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgICBvcGVuVGFiSW5kZXg/OiBudW1iZXI7XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcblxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgaWYgKCFkYXRhKSB0aHJvdyB7Y29kZTogRXJyb3JDb2Rlcy5EQVRBX05PVF9GT1VORF9FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLkRBVEFfTk9fRk9VTkQnfTtcblxuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG5cbiAgICBhd2FpdCB0aGlzLnNldFZhbHVlKGRhdGEpO1xuXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgdGhpcy5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgIHRoaXMudXBkYXRlVmlld1N0YXRlKGRhdGEpO1xuXG4gICAgICAvLyBVcGRhdGUgdGhlIHRpdGxlLlxuICAgICAgdGhpcy51cGRhdGVUaXRsZShkYXRhKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgc3RhdGVcbiAgICovXG4gIHVwZGF0ZVZpZXdTdGF0ZShkYXRhOiBULCBvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuaXNOZXcgfHwgdGhpcy5lbmFibGVkKSB7XG4gICAgICB0aGlzLmVuYWJsZShvcHRzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmRpc2FibGUob3B0cyk7XG5cbiAgICAgIC8vIEFsbG93IHRvIHNvcnQgdGFibGVcbiAgICAgIHRoaXMudGFibGVzPy5mb3JFYWNoKHQgPT4gdC5lbmFibGVTb3J0KCkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVBbmRDbG9zZShldmVudD86IEV2ZW50fEV2ZW50KTogUHJvbWlzZTxib29sZWFuPiB7XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5zYXZlQW5kR2V0RGF0YUlmVmFsaWQoKTtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5tb2RhbEN0cmwuZGlzbWlzcyhkYXRhKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyBjbG9zZShldmVudDogRXZlbnR8RXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5kaXJ0eSkge1xuICAgICAgY29uc3Qgc2F2ZUJlZm9yZUxlYXZlID0gYXdhaXQgQWxlcnRzLmFza1NhdmVCZWZvcmVMZWF2ZSh0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUsIGV2ZW50KTtcblxuICAgICAgLy8gVXNlciBjYW5jZWxsZWRcbiAgICAgIGlmIChpc05pbChzYXZlQmVmb3JlTGVhdmUpIHx8IGV2ZW50ICYmIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJcyB1c2VyIGNvbmZpcm06IGNsb3NlIG5vcm1hbGx5XG4gICAgICBpZiAoc2F2ZUJlZm9yZUxlYXZlID09PSB0cnVlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZUFuZENsb3NlKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHRoaXMubW9kYWxDdHJsLmRpc21pc3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHRoZSBlZGl0b3IsIGJ5IGNhbGxpbmcgdGhlIGRhdGFTZXJ2aWNlLnNhdmUoKS5cbiAgICogRW5zdXJlIHRoYXQgZWRpdG9yIGlmIHZhbGlkLiBJZiBub3QsIGRpc3BsYXkgYW4gZXJyb3JcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBhc3luYyBzYXZlKGV2ZW50PzogRXZlbnR8RXZlbnQsIG9wdHM/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5sb2FkaW5nIHx8IHRoaXMuc2F2aW5nIHx8IHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgJ1NraXAgc2F2ZTogbW9kYWwgaXMgYnVzeSAobG9hZGluZyBvciBzYXZpbmcpJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghdGhpcy5kaXJ0eSkge1xuICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyAnU2tpcCBzYXZlOiBtb2RhbCBub3QgZGlydHknKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFdhaXQgZW5kIG9mIGFzeW5jIHZhbGlkYXRpb25cbiAgICBhd2FpdCB0aGlzLndhaXRXaGlsZVBlbmRpbmcoKTtcblxuICAgIC8vIElmIGludmFsaWRcbiAgICBpZiAodGhpcy5pbnZhbGlkKSB7XG4gICAgICB0aGlzLmxvZ0Zvcm1FcnJvcnMoKTtcbiAgICAgIHRoaXMuc2V0RXJyb3IoJ0NPTU1PTi5GT1JNLkhBU19FUlJPUicpO1xuICAgICAgdGhpcy5vcGVuRmlyc3RJbnZhbGlkVGFiKCk7XG4gICAgICB0aGlzLnNjcm9sbFRvVG9wKCk7XG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQoKTtcblxuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMubWFya0FzU2F2aW5nKCk7XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyAnU2F2aW5nIGRhdGEuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBTYXZlIGFsbCBkaXJ0eSBjaGlsZHJlblxuICAgICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLnNhdmVEaXJ0eUNoaWxkcmVuKCk7XG4gICAgICBpZiAoIXNhdmVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIEZpbGwgZGF0YVxuICAgICAgdGhpcy5kYXRhID0gYXdhaXQgdGhpcy5nZXRWYWx1ZSgpO1xuXG4gICAgICAvLyBNYXJrIGFzIHN1Ym1pdHRlZFxuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7IC8vIENhbiBieSBvdmVycmlkZSBieSBzdWJjbGFzc2VzLCB1c2luZyBzZXRFcnJvcigpXG4gICAgICB0aGlzLnNldEVycm9yKGVycik7XG4gICAgICB0aGlzLnNjcm9sbFRvVG9wKCk7IC8vIFNjcm9sbCB0byB0b3AgKHRvIHNob3cgZXJyb3IpXG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gICAgICB0aGlzLmVuYWJsZSgpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzU2F2ZWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBkYXRhIChpZiBkaXJ0eSBhbmQgdmFsaWQpLCBhbmQgcmV0dXJuIGl0LiBPdGhlcndpc2UsIHJldHVybiBuaWwgdmFsdWUuXG4gICAqL1xuICBhc3luYyBzYXZlQW5kR2V0RGF0YUlmVmFsaWQoKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgLy8gRm9ybSBpcyBub3QgdmFsaWRcbiAgICBpZiAoIXRoaXMudmFsaWQpIHtcblxuICAgICAgLy8gTWFrZSBzdXJlIHZhbGlkYXRpb24gaXMgZmluaXNoZWRcbiAgICAgIGF3YWl0IEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKHRoaXMpO1xuXG4gICAgICAvLyBJZiBpbnZhbGlkOiBPcGVuIHRoZSBmaXJzdCB0YWIgaW4gZXJyb3JcbiAgICAgIGlmICh0aGlzLmludmFsaWQpIHtcbiAgICAgICAgdGhpcy5vcGVuRmlyc3RJbnZhbGlkVGFiKCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIENvbnRpbnVlICh2YWxpZClcbiAgICB9XG5cbiAgICAvLyBGb3JtIGlzIHZhbGlkLCBidXQgbm90IHNhdmVkXG4gICAgaWYgKHRoaXMuZGlydHkpIHtcbiAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5zYXZlKG5ldyBFdmVudCgnc2F2ZScpKTtcbiAgICAgIGlmICghc2F2ZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gVmFsaWQgYW5kIHNhdmVkIGRhdGFcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKGV2ZW50PzogRXZlbnR8RXZlbnQpIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nIHx8IHRoaXMuc2F2aW5nKSByZXR1cm4gZmFsc2U7XG5cbiAgICB0aGlzLm1hcmtBc1NhdmluZygpO1xuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIHRyeSB7XG5cbiAgICAgIC8vIERlbGVnYXRlIGRlbGV0aW9uIHRvIG1vZGFsIGNhbGxlclxuICAgICAgaWYgKHRoaXMub25EZWxldGUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5vbkRlbGV0ZShldmVudCwgdGhpcy5kYXRhKTtcblxuICAgICAgICAvLyBVc2VyIGNhbmNlbGxlZFxuICAgICAgICBpZiAoaXNOaWwocmVzdWx0KSB8fCAoZXZlbnQgJiYgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkpIHJldHVybjtcblxuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5tb2RhbEN0cmwuZGlzbWlzcyh0aGlzLmRhdGEsICdkZWxldGUnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBPciBkaXNtaXNzLCB3aXRoIHRoZSByb2xlICdkZWxldGUnXG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuaXNOZXcpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKHRoaXMuX2xvZ1ByZWZpeCArICdUcnlpbmcgdG8gZGVsZXRlIGEgbmV3IGRhdGEuIE1ha2Ugbm8gc2Vuc2UhJyk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLm1vZGFsQ3RybC5kaXNtaXNzKHRoaXMuZGF0YSwgJ2RlbGV0ZScpO1xuICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICB0aGlzLnNldEVycm9yKGVycik7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAwO1xuICAgICAgdGhpcy5tYXJrQXNTYXZlZCgpO1xuICAgICAgaWYgKHRoaXMuZW5hYmxlZCkgdGhpcy5lbmFibGUoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXNldEVycm9yKG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbn0pIHtcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKHRoaXMuZXJyb3IpKSB7XG4gICAgICB0aGlzLmVycm9yID0gbnVsbDtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0RXJyb3IoZXJyOiBzdHJpbmcgfCBBcHBFcnJvcldpdGhEZXRhaWxzLCBvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW47IGRldGFpbHNDc3NDbGFzcz86IHN0cmluZ30pIHtcbiAgICBpZiAoIWVycikge1xuICAgICAgc3VwZXIuc2V0RXJyb3IodW5kZWZpbmVkLCBvcHRzKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGVyciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tlbnRpdHktZWRpdG9yXSBFcnJvcjogJyArIChlcnIgfHwgJycpKTtcbiAgICAgIHN1cGVyLnNldEVycm9yKGVyciBhcyBzdHJpbmcsIG9wdHMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tlbnRpdHktZWRpdG9yXSBFcnJvcjogJyArIGVyci5tZXNzYWdlIHx8ICcnLCBlcnIpO1xuICAgICAgbGV0IHVzZXJNZXNzYWdlID0gZXJyLm1lc3NhZ2UgJiYgdGhpcy50cmFuc2xhdGUuaW5zdGFudChlcnIubWVzc2FnZSkgfHwgZXJyO1xuXG4gICAgICAvLyBBZGQgZGV0YWlscyBlcnJvciAoaWYgYW55KSB1bmRlciB0aGUgbWFpbiBtZXNzYWdlXG4gICAgICBjb25zdCBkZXRhaWxNZXNzYWdlID0gKCFlcnIuZGV0YWlscyB8fCB0eXBlb2YgZXJyLmRldGFpbHMgPT09ICdzdHJpbmcnKVxuICAgICAgICA/IGVyci5kZXRhaWxzIGFzIHN0cmluZ1xuICAgICAgICA6IGVyci5kZXRhaWxzLm1lc3NhZ2U7XG4gICAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGRldGFpbE1lc3NhZ2UpKSB7XG4gICAgICAgIGNvbnN0IGNzc0NsYXNzID0gb3B0cz8uZGV0YWlsc0Nzc0NsYXNzIHx8ICdlcnJvci1kZXRhaWxzJztcbiAgICAgICAgdXNlck1lc3NhZ2UgKz0gYDxici8+PHNtYWxsIGNsYXNzPVwiJHtjc3NDbGFzc31cIiB0aXRsZT1cIiR7ZGV0YWlsTWVzc2FnZX1cIj5gO1xuICAgICAgICB1c2VyTWVzc2FnZSArPSBkZXRhaWxNZXNzYWdlLmxlbmd0aCA8IDcwID8gZGV0YWlsTWVzc2FnZSA6IGRldGFpbE1lc3NhZ2Uuc3Vic3RyaW5nKDAsIDY3KSArICcuLi4nO1xuICAgICAgICB1c2VyTWVzc2FnZSArPSAnPC9zbWFsbD4nO1xuICAgICAgfVxuICAgICAgc3VwZXIuc2V0RXJyb3IodXNlck1lc3NhZ2UsIG9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBhYnN0cmFjdCBtZXRob2RzICh0byBvdmVycmlkZSkgLS0gKi9cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVnaXN0ZXJGb3JtcygpO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjb21wdXRlVGl0bGUoZGF0YTogVCk6IFByb21pc2U8c3RyaW5nPjtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2V0VmFsdWUoZGF0YTogVCk6IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgZm9ybSgpOiBGb3JtR3JvdXA7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldEZpcnN0SW52YWxpZFRhYkluZGV4KCk6IG51bWJlcjtcblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCB3YWl0V2hpbGVQZW5kaW5nKG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBBcHBGb3JtVXRpbHMud2FpdFdoaWxlUGVuZGluZyh0aGlzLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBnZXRWYWx1ZSgpOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBqc29uID0gYXdhaXQgdGhpcy5nZXRKc29uVmFsdWVUb1NhdmUoKTtcblxuICAgIGNvbnN0IHJlcyA9IG5ldyB0aGlzLmRhdGFUeXBlKCk7XG4gICAgcmVzLmZyb21PYmplY3QoanNvbik7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEpzb25WYWx1ZVRvU2F2ZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5mb3JtLnZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSB0aXRsZVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHVwZGF0ZVRpdGxlKGRhdGE/OiBUKSB7XG4gICAgZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgdGhpcy5jb21wdXRlVGl0bGUoZGF0YSk7XG4gICAgdGhpcy4kdGl0bGUubmV4dCh0aXRsZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2Nyb2xsVG9Ub3AoZHVyYXRpb24/OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5jb250ZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250ZW50LnNjcm9sbFRvVG9wKGR1cmF0aW9uKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2Q/Lm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyogLS0gcHJpdmF0ZSBmdW5jdGlvbnMgLS0gKi9cblxuICAvKipcbiAgICogT3BlbiB0aGUgZmlyc3QgdGFiIHRoYXQgaXMgaW52YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSBvcGVuRmlyc3RJbnZhbGlkVGFiKCkge1xuICAgIGNvbnN0IGludmFsaWRUYWJJbmRleCA9IHRoaXMuZ2V0Rmlyc3RJbnZhbGlkVGFiSW5kZXgoKTtcbiAgICBpZiAoaW52YWxpZFRhYkluZGV4ICE9PSAtMSAmJiB0aGlzLnNlbGVjdGVkVGFiSW5kZXggIT09IGludmFsaWRUYWJJbmRleCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gaW52YWxpZFRhYkluZGV4O1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxufVxuIl19