@sumaris-net/ngx-components 4.0.0-rc6 → 4.0.0-rc8

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 (293) hide show
  1. package/esm2022/public_api.mjs +5 -2
  2. package/esm2022/src/app/admin/admin-routing.module.mjs +4 -4
  3. package/esm2022/src/app/admin/admin.module.mjs +4 -4
  4. package/esm2022/src/app/admin/services/person.service.mjs +3 -3
  5. package/esm2022/src/app/admin/services/validator/person.validator.mjs +3 -3
  6. package/esm2022/src/app/admin/users/users.mjs +15 -24
  7. package/esm2022/src/app/admin/users/users.module.mjs +4 -4
  8. package/esm2022/src/app/core/about/about.modal.mjs +3 -3
  9. package/esm2022/src/app/core/about/about.module.mjs +4 -4
  10. package/esm2022/src/app/core/account/account.module.mjs +4 -4
  11. package/esm2022/src/app/core/account/account.page.mjs +21 -19
  12. package/esm2022/src/app/core/account/new-token.modal.mjs +3 -3
  13. package/esm2022/src/app/core/account/token.table.mjs +3 -3
  14. package/esm2022/src/app/core/auth/auth.form.mjs +3 -3
  15. package/esm2022/src/app/core/auth/auth.modal.mjs +3 -3
  16. package/esm2022/src/app/core/auth/auth.module.mjs +4 -4
  17. package/esm2022/src/app/core/core.module.mjs +4 -4
  18. package/esm2022/src/app/core/core.testing.module.mjs +4 -4
  19. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +4 -4
  20. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +4 -4
  21. package/esm2022/src/app/core/form/entity/editor.class.mjs +15 -10
  22. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +3 -3
  23. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +15 -9
  24. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +5 -5
  25. package/esm2022/src/app/core/form/entity/entity.module.mjs +4 -4
  26. package/esm2022/src/app/core/form/form.class.mjs +3 -3
  27. package/esm2022/src/app/core/form/form.module.mjs +4 -4
  28. package/esm2022/src/app/core/form/list/list.form.mjs +3 -3
  29. package/esm2022/src/app/core/form/list/list.module.mjs +4 -4
  30. package/esm2022/src/app/core/form/properties/properties.form.mjs +3 -3
  31. package/esm2022/src/app/core/form/properties/properties.module.mjs +4 -4
  32. package/esm2022/src/app/core/form/properties/properties.table.mjs +6 -6
  33. package/esm2022/src/app/core/form/properties/property.validator.mjs +3 -3
  34. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +3 -3
  35. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +4 -4
  36. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +3 -3
  37. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +4 -4
  38. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +6 -6
  39. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +6 -11
  40. package/esm2022/src/app/core/graphql/graphql.module.mjs +4 -4
  41. package/esm2022/src/app/core/graphql/graphql.service.mjs +9 -5
  42. package/esm2022/src/app/core/home/home.mjs +5 -6
  43. package/esm2022/src/app/core/home/home.module.mjs +4 -4
  44. package/esm2022/src/app/core/icon/icon.component.mjs +3 -3
  45. package/esm2022/src/app/core/icon/icon.module.mjs +4 -4
  46. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +3 -3
  47. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +4 -4
  48. package/esm2022/src/app/core/menu/menu.component.mjs +14 -10
  49. package/esm2022/src/app/core/menu/menu.module.mjs +4 -4
  50. package/esm2022/src/app/core/menu/menu.service.mjs +11 -5
  51. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +3 -3
  52. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +3 -3
  53. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +3 -3
  54. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +4 -4
  55. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +3 -3
  56. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +4 -4
  57. package/esm2022/src/app/core/peer/select-peer.modal.mjs +3 -3
  58. package/esm2022/src/app/core/peer/select-peer.module.mjs +4 -4
  59. package/esm2022/src/app/core/register/register-confirm.page.mjs +3 -3
  60. package/esm2022/src/app/core/register/register.form.mjs +3 -3
  61. package/esm2022/src/app/core/register/register.modal.mjs +3 -3
  62. package/esm2022/src/app/core/register/register.module.mjs +4 -4
  63. package/esm2022/src/app/core/services/account.service.mjs +50 -23
  64. package/esm2022/src/app/core/services/auth-guard.service.mjs +3 -3
  65. package/esm2022/src/app/core/services/base-entity-service.class.mjs +3 -3
  66. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +3 -3
  67. package/esm2022/src/app/core/services/config/core.config.mjs +7 -7
  68. package/esm2022/src/app/core/services/config.service.mjs +3 -3
  69. package/esm2022/src/app/core/services/crypto.service.mjs +3 -3
  70. package/esm2022/src/app/core/services/local-settings.service.mjs +3 -3
  71. package/esm2022/src/app/core/services/model/referential.model.mjs +5 -2
  72. package/esm2022/src/app/core/services/network.service.mjs +3 -3
  73. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +8 -8
  74. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +4 -4
  75. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +4 -4
  76. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +8 -8
  77. package/esm2022/src/app/core/services/platform.service.mjs +20 -10
  78. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +3 -3
  79. package/esm2022/src/app/core/services/testing/referential.validator.mjs +3 -3
  80. package/esm2022/src/app/core/services/validator/account.validator.mjs +3 -3
  81. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +3 -3
  82. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +3 -3
  83. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +3 -3
  84. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +3 -3
  85. package/esm2022/src/app/core/settings/settings.module.mjs +4 -4
  86. package/esm2022/src/app/core/settings/settings.page.mjs +3 -3
  87. package/esm2022/src/app/core/table/actions-column.component.mjs +3 -3
  88. package/esm2022/src/app/core/table/async-table.class.mjs +3 -3
  89. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +3 -3
  90. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +3 -3
  91. package/esm2022/src/app/core/table/memory-table.class.mjs +3 -3
  92. package/esm2022/src/app/core/table/table-select-columns.component.mjs +3 -3
  93. package/esm2022/src/app/core/table/table.class.mjs +3 -3
  94. package/esm2022/src/app/core/table/table.module.mjs +4 -4
  95. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +3 -3
  96. package/esm2022/src/app/core/table/testing/table.testing.mjs +3 -3
  97. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +4 -4
  98. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +3 -3
  99. package/esm2022/src/app/core/table/testing/table2.testing.mjs +3 -3
  100. package/esm2022/src/app/shared/audio/audio.mjs +3 -3
  101. package/esm2022/src/app/shared/audio/audio.testing.mjs +3 -3
  102. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +4 -4
  103. package/esm2022/src/app/shared/capacitor/keyboard.mjs +3 -3
  104. package/esm2022/src/app/shared/debug/debug.component.mjs +3 -3
  105. package/esm2022/src/app/shared/debug/debug.module.mjs +4 -4
  106. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +3 -3
  107. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +3 -3
  108. package/esm2022/src/app/shared/directives/directives.module.mjs +4 -4
  109. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +3 -3
  110. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +3 -3
  111. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +3 -3
  112. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +3 -3
  113. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +4 -4
  114. package/esm2022/src/app/shared/file/file.service.mjs +3 -3
  115. package/esm2022/src/app/shared/form/field.component.mjs +3 -3
  116. package/esm2022/src/app/shared/form/loading-spinner.mjs +3 -3
  117. package/esm2022/src/app/shared/gesture/gesture-config.mjs +3 -3
  118. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +3 -3
  119. package/esm2022/src/app/shared/help/help.modal.mjs +3 -3
  120. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +3 -3
  121. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +3 -3
  122. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +4 -4
  123. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +4 -4
  124. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +4 -4
  125. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +3 -3
  126. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +3 -3
  127. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +4 -4
  128. package/esm2022/src/app/shared/image/image.module.mjs +4 -4
  129. package/esm2022/src/app/shared/image/image.service.mjs +3 -3
  130. package/esm2022/src/app/shared/logging/logging-service.class.mjs +3 -3
  131. package/esm2022/src/app/shared/logging/logging-service.module.mjs +4 -4
  132. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +6 -6
  133. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +4 -4
  134. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +3 -3
  135. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +3 -3
  136. package/esm2022/src/app/shared/material/badge/badge.module.mjs +4 -4
  137. package/esm2022/src/app/shared/material/badge/badge.test.mjs +3 -3
  138. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +4 -4
  139. package/esm2022/src/app/shared/material/boolean/material-boolean2.mjs +3 -3
  140. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +3 -3
  141. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +3 -3
  142. package/esm2022/src/app/shared/material/chips/chips.module.mjs +4 -4
  143. package/esm2022/src/app/shared/material/chips/material.chips.mjs +3 -3
  144. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +3 -3
  145. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +4 -4
  146. package/esm2022/src/app/shared/material/datetime/material.date.mjs +6 -6
  147. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +3 -3
  148. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +3 -3
  149. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +6 -5
  150. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +7 -6
  151. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +3 -3
  152. package/esm2022/src/app/shared/material/duration/duration.module.mjs +4 -4
  153. package/esm2022/src/app/shared/material/duration/material.duration.mjs +3 -3
  154. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +3 -3
  155. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +3 -3
  156. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +4 -4
  157. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +3 -3
  158. package/esm2022/src/app/shared/material/material.module.mjs +14 -9
  159. package/esm2022/src/app/shared/material/material.testing.module.mjs +16 -5
  160. package/esm2022/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +3 -3
  161. package/esm2022/src/app/shared/material/numpad/numpad.component.mjs +3 -3
  162. package/esm2022/src/app/shared/material/numpad/numpad.container.mjs +3 -3
  163. package/esm2022/src/app/shared/material/numpad/numpad.content.mjs +3 -3
  164. package/esm2022/src/app/shared/material/numpad/numpad.directive.mjs +3 -3
  165. package/esm2022/src/app/shared/material/numpad/numpad.dom-service.mjs +3 -3
  166. package/esm2022/src/app/shared/material/numpad/numpad.module.mjs +4 -4
  167. package/esm2022/src/app/shared/material/numpad/testing/numpad.test.mjs +3 -3
  168. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +3 -3
  169. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +3 -3
  170. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +3 -3
  171. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +4 -4
  172. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +3 -3
  173. package/esm2022/src/app/shared/material/testing/common.test.mjs +3 -3
  174. package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +31 -0
  175. package/esm2022/src/app/shared/material/text/text-form.component.mjs +97 -0
  176. package/esm2022/src/app/shared/material/text/text-form.module.mjs +63 -0
  177. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +19 -9
  178. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +4 -4
  179. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +3 -3
  180. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +24 -24
  181. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +3 -3
  182. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +4 -4
  183. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +6 -6
  184. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +4 -4
  185. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +4 -4
  186. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +3 -3
  187. package/esm2022/src/app/shared/pipes/form.pipes.mjs +18 -18
  188. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +4 -4
  189. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +9 -9
  190. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +12 -12
  191. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +6 -6
  192. package/esm2022/src/app/shared/pipes/math.pipes.mjs +12 -12
  193. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +3 -3
  194. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +4 -4
  195. package/esm2022/src/app/shared/pipes/pipes.module.mjs +4 -4
  196. package/esm2022/src/app/shared/pipes/property.pipes.mjs +7 -7
  197. package/esm2022/src/app/shared/pipes/string.pipes.mjs +30 -30
  198. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +8 -8
  199. package/esm2022/src/app/shared/pipes/types.pipes.mjs +12 -12
  200. package/esm2022/src/app/shared/rx-state.module.mjs +4 -4
  201. package/esm2022/src/app/shared/services/entity-service.class.mjs +1 -1
  202. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +6 -6
  203. package/esm2022/src/app/shared/services/progress-bar.service.mjs +3 -3
  204. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +3 -3
  205. package/esm2022/src/app/shared/services/startable-service.class.mjs +5 -5
  206. package/esm2022/src/app/shared/services/translate-context.service.mjs +3 -3
  207. package/esm2022/src/app/shared/shared-routing.module.mjs +7 -7
  208. package/esm2022/src/app/shared/shared.module.mjs +29 -13
  209. package/esm2022/src/app/shared/shared.testing.module.mjs +4 -4
  210. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +3 -3
  211. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +4 -4
  212. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +4 -4
  213. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +4 -4
  214. package/esm2022/src/app/shared/storage/storage.service.mjs +3 -3
  215. package/esm2022/src/app/shared/testing/observable.test.mjs +3 -3
  216. package/esm2022/src/app/shared/testing/tests.page.mjs +3 -3
  217. package/esm2022/src/app/shared/toast/toast.testing.mjs +3 -3
  218. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +4 -4
  219. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +3 -3
  220. package/esm2022/src/app/shared/toolbar/toolbar.mjs +4 -4
  221. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +4 -4
  222. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +3 -3
  223. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +4 -4
  224. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +3 -3
  225. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +3 -3
  226. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +3 -3
  227. package/esm2022/src/app/social/job/job.module.mjs +4 -4
  228. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +3 -3
  229. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +3 -3
  230. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +3 -3
  231. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +3 -3
  232. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +3 -3
  233. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +3 -3
  234. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +4 -4
  235. package/esm2022/src/app/social/message/message.form.mjs +58 -6
  236. package/esm2022/src/app/social/message/message.modal.mjs +20 -12
  237. package/esm2022/src/app/social/message/message.model.mjs +5 -1
  238. package/esm2022/src/app/social/message/message.module.mjs +9 -22
  239. package/esm2022/src/app/social/message/message.service.mjs +32 -10
  240. package/esm2022/src/app/social/social.module.mjs +4 -4
  241. package/esm2022/src/app/social/social.testing.module.mjs +4 -4
  242. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +3 -3
  243. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +3 -3
  244. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +3 -3
  245. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +4 -4
  246. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +3 -3
  247. package/esm2022/src/app/social/user-event/user-event.module.mjs +4 -4
  248. package/esm2022/src/app/social/user-event/user-event.service.mjs +39 -25
  249. package/esm2022/src/environments/environment.class.mjs +3 -1
  250. package/esm2022/src/environments/environment.loader.mjs +83 -0
  251. package/esm2022/src/environments/environment.mjs +18 -15
  252. package/fesm2022/sumaris-net.ngx-components.mjs +6719 -6387
  253. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  254. package/package.json +25 -3
  255. package/public_api.d.ts +4 -1
  256. package/src/app/core/account/account.page.d.ts +3 -2
  257. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +1 -1
  258. package/src/app/core/form/entity/editor.class.d.ts +1 -1
  259. package/src/app/core/form/entity/entity-editor.class.d.ts +10 -6
  260. package/src/app/core/form/entity/entity-metadata.component.d.ts +1 -1
  261. package/src/app/core/form/text-popover/text-popover.component.d.ts +1 -1
  262. package/src/app/core/form/text-popover/text-popover.module.d.ts +4 -5
  263. package/src/app/core/menu/menu.component.d.ts +6 -2
  264. package/src/app/core/menu/menu.service.d.ts +2 -0
  265. package/src/app/core/services/account.service.d.ts +4 -0
  266. package/src/app/core/services/config/core.config.d.ts +2 -2
  267. package/src/app/core/services/model/referential.model.d.ts +2 -1
  268. package/src/app/shared/inputs.d.ts +1 -1
  269. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +1 -1
  270. package/src/app/shared/material/material.module.d.ts +2 -1
  271. package/src/app/shared/material/material.testing.module.d.ts +14 -13
  272. package/src/app/shared/material/text/testing/text-form.testing.d.ts +13 -0
  273. package/src/app/{core/form/text-popover → shared/material/text}/text-form.component.d.ts +2 -2
  274. package/src/app/shared/material/text/text-form.module.d.ts +16 -0
  275. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +4 -1
  276. package/src/app/shared/services/entity-service.class.d.ts +1 -1
  277. package/src/app/shared/services/memory-entity-service.class.d.ts +3 -1
  278. package/src/app/shared/shared.module.d.ts +5 -3
  279. package/src/app/social/message/message.form.d.ts +8 -2
  280. package/src/app/social/message/message.modal.d.ts +5 -1
  281. package/src/app/social/message/message.model.d.ts +2 -0
  282. package/src/app/social/message/message.module.d.ts +2 -1
  283. package/src/app/social/message/message.service.d.ts +8 -3
  284. package/src/app/social/user-event/user-event.service.d.ts +5 -0
  285. package/src/assets/environments/environment-test.json +6 -0
  286. package/src/assets/i18n/en-US.json +25 -23
  287. package/src/assets/i18n/en.json +25 -23
  288. package/src/assets/i18n/fr.json +8 -5
  289. package/src/assets/manifest.json +1 -1
  290. package/src/environments/environment.class.d.ts +1 -0
  291. package/src/environments/environment.loader.d.ts +26 -0
  292. package/src/theme/_ngx-components.table.scss +1 -1
  293. package/esm2022/src/app/core/form/text-popover/text-form.component.mjs +0 -97
@@ -1,17 +1,19 @@
1
1
  import { GraphqlService } from '../../core/graphql/graphql.service';
2
- import { ToastController } from '@ionic/angular';
2
+ import { ModalController, ToastController } from '@ionic/angular';
3
3
  import { TranslateService } from '@ngx-translate/core';
4
4
  import { BaseGraphqlService } from '../../core/services/base-graphql-service.class';
5
5
  import { Environment } from '../../../environments/environment.class';
6
6
  import { Message, MessageFilter } from './message.model';
7
7
  import { ShowToastOptions } from '../../shared/toast/toasts';
8
+ import { MessageModalOptions } from './message.modal';
8
9
  import * as i0 from "@angular/core";
9
10
  export declare class MessageService extends BaseGraphqlService<Message, MessageFilter> {
10
11
  protected graphql: GraphqlService;
11
12
  protected translate: TranslateService;
13
+ protected modalCtrl: ModalController;
12
14
  protected toastController: ToastController;
13
15
  protected environment: Environment;
14
- constructor(graphql: GraphqlService, translate: TranslateService, toastController: ToastController, environment: Environment);
16
+ constructor(graphql: GraphqlService, translate: TranslateService, modalCtrl: ModalController, toastController: ToastController, environment: Environment);
15
17
  /**
16
18
  * Send a message to recipient(s)
17
19
  *
@@ -21,7 +23,10 @@ export declare class MessageService extends BaseGraphqlService<Message, MessageF
21
23
  send(entity: Message, opts?: {
22
24
  showToast?: boolean;
23
25
  }): Promise<boolean>;
26
+ openComposeModal(options: MessageModalOptions & {
27
+ showToast?: boolean;
28
+ }): Promise<any>;
24
29
  protected showToast(opts: ShowToastOptions): Promise<import("@ionic/core").OverlayEventDetail<any>>;
25
- static ɵfac: i0.ɵɵFactoryDeclaration<MessageService, [null, null, null, { optional: true; }]>;
30
+ static ɵfac: i0.ɵɵFactoryDeclaration<MessageService, [null, null, null, null, { optional: true; }]>;
26
31
  static ɵprov: i0.ɵɵInjectableDeclaration<MessageService>;
27
32
  }
@@ -11,6 +11,8 @@ import { NetworkService } from '../../core/services/network.service';
11
11
  import { BaseGraphqlService, BaseGraphqlServiceOptions } from '../../core/services/base-graphql-service.class';
12
12
  import { Moment } from 'moment';
13
13
  import { IStartableService } from '../../shared/services/startable-service.class';
14
+ import { DocumentNode } from 'graphql/index';
15
+ import { MutableWatchQueriesUpdatePolicy } from '../../core/services/base-entity-service.class';
14
16
  import * as i0 from "@angular/core";
15
17
  export declare const APP_USER_EVENT_SERVICE: InjectionToken<IUserEventService<any, any, number, UserEventWatchOptions, UserEventLoadOptions>>;
16
18
  export declare interface UserEventLoadOptions extends EntitiesServiceLoadOptions {
@@ -42,6 +44,7 @@ export interface UserEventServiceOptions<Q extends IUserEventQueries = IUserEven
42
44
  queries: Q;
43
45
  mutations?: Partial<M>;
44
46
  subscriptions?: Partial<S>;
47
+ watchQueriesUpdatePolicy?: MutableWatchQueriesUpdatePolicy;
45
48
  }
46
49
  export interface IUserEventService<E extends IUserEvent<E, ID>, F extends IUserEventFilter<E, ID>, ID = number, WO extends UserEventWatchOptions = UserEventWatchOptions, LO extends UserEventLoadOptions = UserEventLoadOptions> extends IEntitiesService<E, F, WO>, IStartableService {
47
50
  countSubject: Observable<number>;
@@ -74,6 +77,7 @@ export declare abstract class AbstractUserEventService<E extends IUserEvent<E, I
74
77
  protected readonly mutations: Partial<M>;
75
78
  protected readonly subscriptions: Partial<S>;
76
79
  protected readonly _countSubject: BehaviorSubject<number>;
80
+ protected readonly watchQueriesUpdatePolicy: MutableWatchQueriesUpdatePolicy;
77
81
  protected resetCountDate: Moment;
78
82
  protected listeners: IUserEventListener<E, ID>[];
79
83
  private _subscriptions;
@@ -119,6 +123,7 @@ export declare abstract class AbstractUserEventService<E extends IUserEvent<E, I
119
123
  protected fillDefaultProperties(entity: E): void;
120
124
  protected unreadEvents(events: E[]): number;
121
125
  protected copyIdAndUpdateDate(source: E, target: E): void;
126
+ protected getLoadQueries(): DocumentNode[];
122
127
  static ɵfac: i0.ɵɵFactoryDeclaration<AbstractUserEventService<any, any, any, any, any, any, any, any>, never>;
123
128
  static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractUserEventService<any, any, any, any, any, any, any, any>, never, never, {}, {}, never, never, false, never>;
124
129
  }
@@ -0,0 +1,6 @@
1
+ {
2
+ "defaultPeer": {
3
+ "host": "test.sumaris.net",
4
+ "port": 443
5
+ }
6
+ }
@@ -33,6 +33,8 @@
33
33
  "BTN_SAVE": "Save",
34
34
  "BTN_SAVE_WITH_SHORTCUT": "<u>S</u>ave",
35
35
  "BTN_SAVE_WITH_SHORTCUT_HELP": "Save (Ctrl+S)",
36
+ "BTN_SAVE_AND_CLOSE": "Save and close",
37
+ "BTN_SAVE_AND_NEXT": "Save and next",
36
38
  "BTN_FILTER": "Filter",
37
39
  "BTN_RELOAD": "Reload",
38
40
  "BTN_REFRESH": "Refresh",
@@ -104,6 +106,7 @@
104
106
 
105
107
  "YES": "Yes",
106
108
  "NO": "No",
109
+ "DEBUG": "Debug",
107
110
 
108
111
  "UPDATED_ON": "Last modification on",
109
112
  "RECORDER": "Recorder",
@@ -113,10 +116,8 @@
113
116
  "PLEASE_WAIT": "Please wait...",
114
117
  "NO_DATA": "No data",
115
118
  "MISSING": "Missing",
116
-
117
119
  "DISPLAYED_COLUMNS": "Displayed columns",
118
120
  "DISPLAYED_COLUMNS_DOTS": "Displayed columns...",
119
-
120
121
  "FORM": {
121
122
  "HAS_ERROR": "Please correct errors in the form"
122
123
  },
@@ -144,15 +145,19 @@
144
145
  "CONFIGURATION": {
145
146
  "OPTIONS": {
146
147
  "ANDROID_INSTALL_URL": "Android > Install App URL",
147
- "LOGO": "Menu > Logo (max width: 110px)",
148
+ "DB_TIMEZONE": "Persistence > Database timezone (readonly option)",
149
+ "LOGO": "Menu > Logo (max width 110px)",
148
150
  "FAVICON": "favicon",
149
- "GRAVATAR_URL": "User > Gravatar URL (with '{md5}'",
150
- "ENABLE_GRAVATAR": "User > Enable Gravatar ?",
151
+ "GRAVATAR_URL": "User > Gravatar URL (with '{md5}')",
152
+ "ENABLE_GRAVATAR": "User > Enable Gravatar?",
151
153
  "DEFAULT_LOCALE": "Default Language",
152
154
  "DEFAULT_LATLONG_FORMAT": "Default lat/lon format",
153
155
  "APP_MIN_VERSION": "App > Minimal compatible version (x.y.z)",
154
156
  "HELP_URL": "App > User manual (URL)",
155
157
  "FORUM_URL": "App > Forum address (URL)",
158
+ "ACCOUNT": {
159
+ "READONLY": "Account > Readonly profile? (readonly option)"
160
+ },
156
161
  "HOME": {
157
162
  "LOGO_LARGE": "Home > Logo (max width 400px)",
158
163
  "PARTNER_DEPARTMENTS": "Home > Partners logos",
@@ -181,14 +186,14 @@
181
186
  "LOCATION_LEVEL_COUNTRY_ID": "Referential > Location level de lieu > Country",
182
187
  "LOCATION_LEVEL_PORT_ID": "Referential > Location level > Port",
183
188
  "LOCATION_LEVEL_AUCTION_ID": "Referential > Location level > Sale auction",
184
- "LOCATION_LEVEL_ICES_RECTANGLE_ID": "Referential > Location level > CIEM/ICES Statistical Rectangle",
185
- "LOCATION_LEVEL_ICES_DIVISION_ID": "Referential > Location level > CIEM/ICES Division",
189
+ "LOCATION_LEVEL_RECTANGLE_ICES_ID": "Referential > Location level > CIEM/ICES Statistical Rectangle",
190
+ "LOCATION_LEVEL_DIVISION_ICES_ID": "Referential > Location level > CIEM/ICES Division",
186
191
  "TAXONOMIC_LEVEL_FAMILY_ID": "Referential > Taxonomic level > Family",
187
192
  "TAXONOMIC_LEVEL_GENUS_ID": "Referential > Taxonomic level > Genus",
188
193
  "TAXONOMIC_LEVEL_SPECIES_ID": "Referential > Taxonomic level > Species",
189
194
  "TAXONOMIC_LEVEL_SUBSPECIES_ID": "Referential > Taxonomic level > Subspecies"
190
195
  },
191
- "TESTING": "Developer mode ?",
196
+ "TESTING": "Developer mode?",
192
197
  "ENTITY_TRASH": "Enable trash on pod?",
193
198
  "UPDATE_TECHNICAL_TABLES": "Automatically update technical tables?",
194
199
  "ANALYTIC_REFERENCES_ENABLE": "Strategy > Analytic references: Enable?",
@@ -198,9 +203,7 @@
198
203
  "TOKEN": "Crypto",
199
204
  "BASIC_AND_TOKEN": "Basic and crypto"
200
205
  },
201
- "ACCOUNT": {
202
- "ENABLE_AUTH_TOKENS": "Activer les jetons d'authentifications"
203
- }
206
+ "ENABLE_AUTH_API_TOKENS": "API > Enable auth tokens"
204
207
  }
205
208
  },
206
209
  "MENU": {
@@ -214,7 +217,12 @@
214
217
  "LOCAL_SETTINGS": "Settings",
215
218
  "LOGOUT": "Logout",
216
219
  "ABOUT": "About",
217
- "BTN_MY_ACCOUNT": "My account"
220
+ "BTN_MY_ACCOUNT": "My account",
221
+
222
+ "TRIPS": "Trips",
223
+ "LOGBOOKS": "Logbooks",
224
+ "OCCASIONS": "Occasions",
225
+ "AUCTION_OCCASIONS": "Auction occasions"
218
226
  },
219
227
  "ABOUT": {
220
228
  "TITLE": "About",
@@ -460,14 +468,6 @@
460
468
  "NOT_COMPATIBLE_PEER": "The application works in <b>offline mode</b>, because the node <b>use a too old version</b>.<br/><small>If the problem persists, please <b>contact your administrator</b>, or select a node v{{version}} or superior.</small>"
461
469
  }
462
470
  },
463
- "MAP": {
464
- "ZOOM_IN": "Zoom in",
465
- "ZOOM_OUT": "Zoom out",
466
- "ENTER_FULLSCREEN": "Fullscreen mode",
467
- "EXIT_FULLSCREEN": "Exit fullscreen mode",
468
- "SHOW_GRATICULE": "Show graticule",
469
- "HIDE_GRATICULE": "Hide graticule"
470
- },
471
471
  "SOCIAL": {
472
472
  "USER_EVENT": {
473
473
  "NOTIFICATION": {
@@ -486,7 +486,8 @@
486
486
  "TYPE_ENUM": {
487
487
  "DEBUG_DATA": "Debug data",
488
488
  "INBOX_MESSAGE": "Inbox message",
489
- "FEED": "Feed"
489
+ "FEED": "Feed",
490
+ "JOB": "{{name}}<br/><b>{{status}}</b>"
490
491
  }
491
492
  },
492
493
  "JOB": {
@@ -498,6 +499,7 @@
498
499
  "MESSAGE": {
499
500
  "TYPE": "Message type",
500
501
  "RECIPIENTS": "Recipients",
502
+ "RECIPIENT_FILTER_COUNT": "{{count}} filtered users",
501
503
  "SUBJECT": "Object",
502
504
  "BODY_HELP": "Your message...",
503
505
  "NEW": {
@@ -641,8 +643,8 @@
641
643
  "ACTION_IMMEDIATE": "This operation is irreversible.<br/><br/><b>Are you sure</b> you want to continue?",
642
644
  "DELETE_ROW": "<b>Are you sure</b> you want to delete this row?",
643
645
  "DELETE_ROWS": "<b>Are you sure</b> you want to delete this rows?",
644
- "CANCEL_ROW": "<b>Are you sure</b> you want to cancel changes on this row ?",
645
- "CANCEL_ROWS": "<b>Are you sure</b> you want to cancel changes on these rows ?",
646
+ "CANCEL_ROW": "<b>Are you sure</b> you want to cancel changes on this row?",
647
+ "CANCEL_ROWS": "<b>Are you sure</b> you want to cancel changes on these rows?",
646
648
  "SEND_DEBUG_DATA": "Do you want to send this data to the administrator for help?",
647
649
  "RELOAD_APP": "A new <b>version {{version}}</b> is available for {{name}}:<ul><li><b>Save</b> any current changes<li>Click on the <b>Update</b> button, or refresh the browser tab.</ul>"
648
650
  },
@@ -33,6 +33,8 @@
33
33
  "BTN_SAVE": "Save",
34
34
  "BTN_SAVE_WITH_SHORTCUT": "<u>S</u>ave",
35
35
  "BTN_SAVE_WITH_SHORTCUT_HELP": "Save (Ctrl+S)",
36
+ "BTN_SAVE_AND_CLOSE": "Save and close",
37
+ "BTN_SAVE_AND_NEXT": "Save and next",
36
38
  "BTN_FILTER": "Filter",
37
39
  "BTN_RELOAD": "Reload",
38
40
  "BTN_REFRESH": "Refresh",
@@ -104,6 +106,7 @@
104
106
 
105
107
  "YES": "Yes",
106
108
  "NO": "No",
109
+ "DEBUG": "Debug",
107
110
 
108
111
  "UPDATED_ON": "Last modification on",
109
112
  "RECORDER": "Recorder",
@@ -113,10 +116,8 @@
113
116
  "PLEASE_WAIT": "Please wait...",
114
117
  "NO_DATA": "No data",
115
118
  "MISSING": "Missing",
116
-
117
119
  "DISPLAYED_COLUMNS": "Displayed columns",
118
120
  "DISPLAYED_COLUMNS_DOTS": "Displayed columns...",
119
-
120
121
  "FORM": {
121
122
  "HAS_ERROR": "Please correct errors in the form"
122
123
  },
@@ -144,15 +145,19 @@
144
145
  "CONFIGURATION": {
145
146
  "OPTIONS": {
146
147
  "ANDROID_INSTALL_URL": "Android > Install App URL",
147
- "LOGO": "Menu > Logo (max width: 110px)",
148
+ "DB_TIMEZONE": "Persistence > Database timezone (readonly option)",
149
+ "LOGO": "Menu > Logo (max width 110px)",
148
150
  "FAVICON": "favicon",
149
- "GRAVATAR_URL": "User > Gravatar URL (with '{md5}'",
150
- "ENABLE_GRAVATAR": "User > Enable Gravatar ?",
151
+ "GRAVATAR_URL": "User > Gravatar URL (with '{md5}')",
152
+ "ENABLE_GRAVATAR": "User > Enable Gravatar?",
151
153
  "DEFAULT_LOCALE": "Default Language",
152
154
  "DEFAULT_LATLONG_FORMAT": "Default lat/lon format",
153
155
  "APP_MIN_VERSION": "App > Minimal compatible version (x.y.z)",
154
156
  "HELP_URL": "App > User manual (URL)",
155
157
  "FORUM_URL": "App > Forum address (URL)",
158
+ "ACCOUNT": {
159
+ "READONLY": "Account > Readonly profile? (readonly option)"
160
+ },
156
161
  "HOME": {
157
162
  "LOGO_LARGE": "Home > Logo (max width 400px)",
158
163
  "PARTNER_DEPARTMENTS": "Home > Partners logos",
@@ -181,14 +186,14 @@
181
186
  "LOCATION_LEVEL_COUNTRY_ID": "Referential > Location level de lieu > Country",
182
187
  "LOCATION_LEVEL_PORT_ID": "Referential > Location level > Port",
183
188
  "LOCATION_LEVEL_AUCTION_ID": "Referential > Location level > Sale auction",
184
- "LOCATION_LEVEL_ICES_RECTANGLE_ID": "Referential > Location level > CIEM/ICES Statistical Rectangle",
185
- "LOCATION_LEVEL_ICES_DIVISION_ID": "Referential > Location level > CIEM/ICES Division",
189
+ "LOCATION_LEVEL_RECTANGLE_ICES_ID": "Referential > Location level > CIEM/ICES Statistical Rectangle",
190
+ "LOCATION_LEVEL_DIVISION_ICES_ID": "Referential > Location level > CIEM/ICES Division",
186
191
  "TAXONOMIC_LEVEL_FAMILY_ID": "Referential > Taxonomic level > Family",
187
192
  "TAXONOMIC_LEVEL_GENUS_ID": "Referential > Taxonomic level > Genus",
188
193
  "TAXONOMIC_LEVEL_SPECIES_ID": "Referential > Taxonomic level > Species",
189
194
  "TAXONOMIC_LEVEL_SUBSPECIES_ID": "Referential > Taxonomic level > Subspecies"
190
195
  },
191
- "TESTING": "Developer mode ?",
196
+ "TESTING": "Developer mode?",
192
197
  "ENTITY_TRASH": "Enable trash on pod?",
193
198
  "UPDATE_TECHNICAL_TABLES": "Automatically update technical tables?",
194
199
  "ANALYTIC_REFERENCES_ENABLE": "Strategy > Analytic references: Enable?",
@@ -198,9 +203,7 @@
198
203
  "TOKEN": "Crypto",
199
204
  "BASIC_AND_TOKEN": "Basic and crypto"
200
205
  },
201
- "ACCOUNT": {
202
- "ENABLE_AUTH_TOKENS": "Enable auth tokens"
203
- }
206
+ "ENABLE_AUTH_API_TOKENS": "API > Enable auth tokens"
204
207
  }
205
208
  },
206
209
  "MENU": {
@@ -214,7 +217,12 @@
214
217
  "LOCAL_SETTINGS": "Settings",
215
218
  "LOGOUT": "Logout",
216
219
  "ABOUT": "About",
217
- "BTN_MY_ACCOUNT": "My account"
220
+ "BTN_MY_ACCOUNT": "My account",
221
+
222
+ "TRIPS": "Trips",
223
+ "LOGBOOKS": "Logbooks",
224
+ "OCCASIONS": "Occasions",
225
+ "AUCTION_OCCASIONS": "Auction occasions"
218
226
  },
219
227
  "ABOUT": {
220
228
  "TITLE": "About",
@@ -460,14 +468,6 @@
460
468
  "NOT_COMPATIBLE_PEER": "The application works in <b>offline mode</b>, because the node <b>use a too old version</b>.<br/><small>If the problem persists, please <b>contact your administrator</b>, or select a node v{{version}} or superior.</small>"
461
469
  }
462
470
  },
463
- "MAP": {
464
- "ZOOM_IN": "Zoom in",
465
- "ZOOM_OUT": "Zoom out",
466
- "ENTER_FULLSCREEN": "Fullscreen mode",
467
- "EXIT_FULLSCREEN": "Exit fullscreen mode",
468
- "SHOW_GRATICULE": "Show graticule",
469
- "HIDE_GRATICULE": "Hide graticule"
470
- },
471
471
  "SOCIAL": {
472
472
  "USER_EVENT": {
473
473
  "NOTIFICATION": {
@@ -486,7 +486,8 @@
486
486
  "TYPE_ENUM": {
487
487
  "DEBUG_DATA": "Debug data",
488
488
  "INBOX_MESSAGE": "Inbox message",
489
- "FEED": "Feed"
489
+ "FEED": "Feed",
490
+ "JOB": "{{name}}<br/><b>{{status}}</b>"
490
491
  }
491
492
  },
492
493
  "JOB": {
@@ -498,6 +499,7 @@
498
499
  "MESSAGE": {
499
500
  "TYPE": "Message type",
500
501
  "RECIPIENTS": "Recipients",
502
+ "RECIPIENT_FILTER_COUNT": "{{count}} filtered users",
501
503
  "SUBJECT": "Object",
502
504
  "BODY_HELP": "Your message...",
503
505
  "NEW": {
@@ -641,8 +643,8 @@
641
643
  "ACTION_IMMEDIATE": "This operation is irreversible.<br/><br/><b>Are you sure</b> you want to continue?",
642
644
  "DELETE_ROW": "<b>Are you sure</b> you want to delete this row?",
643
645
  "DELETE_ROWS": "<b>Are you sure</b> you want to delete this rows?",
644
- "CANCEL_ROW": "<b>Are you sure</b> you want to cancel changes on this row ?",
645
- "CANCEL_ROWS": "<b>Are you sure</b> you want to cancel changes on these rows ?",
646
+ "CANCEL_ROW": "<b>Are you sure</b> you want to cancel changes on this row?",
647
+ "CANCEL_ROWS": "<b>Are you sure</b> you want to cancel changes on these rows?",
646
648
  "SEND_DEBUG_DATA": "Do you want to send this data to the administrator for help?",
647
649
  "RELOAD_APP": "A new <b>version {{version}}</b> is available for {{name}}:<ul><li><b>Save</b> any current changes<li>Click on the <b>Update</b> button, or refresh the browser tab.</ul>"
648
650
  },
@@ -145,6 +145,7 @@
145
145
  "CONFIGURATION": {
146
146
  "OPTIONS": {
147
147
  "ANDROID_INSTALL_URL": "Android > URL d'installation App",
148
+ "DB_TIMEZONE": "Persistance > Timezone de la base de données (option non modifiable)",
148
149
  "LOGO": "Menu > Logo (largeur max 110px)",
149
150
  "FAVICON": "favicon",
150
151
  "GRAVATAR_URL": "Utilisateur > URL Gravatar (avec '{md5}')",
@@ -154,6 +155,9 @@
154
155
  "APP_MIN_VERSION": "App > Version minimale compatible (x.y.z)",
155
156
  "HELP_URL": "App > Adresse du manuel utilisateur (URL)",
156
157
  "FORUM_URL": "App > Adresse du forum (URL)",
158
+ "ACCOUNT": {
159
+ "READONLY": "Compte > Profil en lecture seule ? (option non modifiable)"
160
+ },
157
161
  "HOME": {
158
162
  "LOGO_LARGE": "Accueil > Logo (largeur max 400px)",
159
163
  "PARTNER_DEPARTMENTS": "Accueil > Logo des partenaires",
@@ -182,8 +186,8 @@
182
186
  "LOCATION_LEVEL_COUNTRY_ID": "Référentiel > Niveau de lieu > Pays",
183
187
  "LOCATION_LEVEL_PORT_ID": "Référentiel > Niveau de lieu > Port",
184
188
  "LOCATION_LEVEL_AUCTION_ID": "Référentiel > Niveau de lieu > Criée",
185
- "LOCATION_LEVEL_ICES_RECTANGLE_ID": "Référentiel > Niveau de lieu > Rectangle statistique CIEM/ICES",
186
- "LOCATION_LEVEL_ICES_DIVISION_ID": "Référentiel > Niveau de lieu > Division CIEM/ICES",
189
+ "LOCATION_LEVEL_RECTANGLE_ICES_ID": "Référentiel > Niveau de lieu > Rectangle statistique CIEM/ICES",
190
+ "LOCATION_LEVEL_DIVISION_ICES_ID": "Référentiel > Niveau de lieu > Division CIEM/ICES",
187
191
  "TAXONOMIC_LEVEL_FAMILY_ID": "Référentiel > Niveau taxinomique > Famille",
188
192
  "TAXONOMIC_LEVEL_GENUS_ID": "Référentiel > Niveau taxinomique > Genre",
189
193
  "TAXONOMIC_LEVEL_SPECIES_ID": "Référentiel > Niveau taxinomique > Espèce",
@@ -199,9 +203,7 @@
199
203
  "TOKEN": "Cryptographique",
200
204
  "BASIC_AND_TOKEN": "Basique et cryptographique"
201
205
  },
202
- "ACCOUNT": {
203
- "ENABLE_AUTH_TOKENS": "Activer les jetons d'authentification"
204
- }
206
+ "ENABLE_AUTH_API_TOKENS": "API > Activer les jetons d'authentification"
205
207
  }
206
208
  },
207
209
  "MENU": {
@@ -497,6 +499,7 @@
497
499
  "MESSAGE": {
498
500
  "TYPE": "Type d'envoi",
499
501
  "RECIPIENTS": "Destinataires",
502
+ "RECIPIENT_FILTER_COUNT": "{{count}} utilisateurs filtrés",
500
503
  "SUBJECT": "Objet",
501
504
  "BODY_HELP": "Votre message...",
502
505
  "NEW": {
@@ -2,7 +2,7 @@
2
2
  "name": "ngx-sumaris-components",
3
3
  "short_name": "ngx-sumaris-components",
4
4
  "manifest_version": 1,
5
- "version": "2.6.6-rc5",
5
+ "version": "2.6.21",
6
6
  "default_locale": "fr",
7
7
  "description": "Angular components for building beautiful and responsive Apps",
8
8
  "icons": [{
@@ -8,6 +8,7 @@ export declare class Environment {
8
8
  name: string;
9
9
  version: string;
10
10
  production: boolean;
11
+ externalEnvironmentUrl?: string;
11
12
  baseUrl: string;
12
13
  sameUrlPeer?: boolean;
13
14
  defaultPeer?: {
@@ -0,0 +1,26 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { Environment } from './environment.class';
3
+ import * as i0 from "@angular/core";
4
+ export declare abstract class EnvironmentLoader<T extends Environment = Environment> {
5
+ abstract load(): Promise<T>;
6
+ abstract get(): T;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<EnvironmentLoader<any>, never>;
8
+ static ɵdir: i0.ɵɵDirectiveDeclaration<EnvironmentLoader<any>, never, never, {}, {}, never, never, false, never>;
9
+ }
10
+ export declare class EnvironmentHttpLoader<T extends Environment = Environment> extends EnvironmentLoader<T> {
11
+ protected http: HttpClient;
12
+ private readonly _logPrefix;
13
+ protected _debug: boolean;
14
+ protected _environment: T;
15
+ protected _loaded: boolean;
16
+ protected readonly _externalEnvironmentUrl: string;
17
+ constructor(http: HttpClient, defaultEnvironment?: T);
18
+ /**
19
+ * Get the loaded environment. Should be call after loaded
20
+ */
21
+ get(): T;
22
+ load(): Promise<T>;
23
+ protected fetch(url: string): Promise<Partial<T>>;
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<EnvironmentHttpLoader<any>, never>;
25
+ static ɵprov: i0.ɵɵInjectableDeclaration<EnvironmentHttpLoader<any>>;
26
+ }
@@ -216,7 +216,7 @@
216
216
  &.mat-row-selected {
217
217
  background-color: var(--ion-color-secondary100);
218
218
 
219
- &:hover {
219
+ &:not(.mat-row-error):hover {
220
220
  background-color: var(--ion-color-secondary100);
221
221
  }
222
222
 
@@ -1,97 +0,0 @@
1
- import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
- import { Validators } from '@angular/forms';
3
- import { CdkTextareaAutosize } from '@angular/cdk/text-field';
4
- import { AppForm } from '../form.class';
5
- import { isNotNil } from '../../../shared/functions';
6
- import { focusInput } from '../../../shared/inputs';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/forms";
9
- import * as i2 from "@angular/common";
10
- import * as i3 from "@angular/material/form-field";
11
- import * as i4 from "@angular/material/input";
12
- import * as i5 from "@angular/cdk/text-field";
13
- import * as i6 from "../../../shared/directives/autofocus.directive";
14
- import * as i7 from "@ngx-translate/core";
15
- export class TextForm extends AppForm {
16
- injector;
17
- cd;
18
- formBuilder;
19
- showError = true;
20
- placeholder;
21
- multiline = true;
22
- autoHeight = false;
23
- maxLength = 2000;
24
- autofocus = false;
25
- validator = null;
26
- textAreaChanges = new EventEmitter();
27
- textArea;
28
- textInput;
29
- autosizeDirective;
30
- control;
31
- constructor(injector, cd, formBuilder) {
32
- super(injector);
33
- this.injector = injector;
34
- this.cd = cd;
35
- this.formBuilder = formBuilder;
36
- }
37
- ngOnInit() {
38
- // Compute validators
39
- const validators = isNotNil(this.maxLength) && this.maxLength > 0 ? [Validators.maxLength(this.maxLength)] : [];
40
- if (this.validator)
41
- validators.push(this.validator);
42
- // Create the form
43
- const form = this.formBuilder.group({
44
- text: [null, validators.length ? Validators.compose(validators) : null]
45
- });
46
- this.control = form.get('text');
47
- this.setForm(form);
48
- super.ngOnInit();
49
- }
50
- textAreaChanged(event) {
51
- this.textAreaChanges.emit(this.control.value);
52
- }
53
- containerResize() {
54
- this.autosizeDirective?.resizeToFitContent(true);
55
- }
56
- focusInput() {
57
- if (this.textArea)
58
- focusInput(this.textArea);
59
- if (this.textInput)
60
- focusInput(this.textInput);
61
- }
62
- markForCheck() {
63
- this.cd.markForCheck();
64
- }
65
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: TextForm, deps: [{ token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: i1.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component });
66
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.4", type: TextForm, selector: "app-text-form", inputs: { showError: "showError", placeholder: "placeholder", multiline: "multiline", autoHeight: "autoHeight", maxLength: "maxLength", autofocus: "autofocus", validator: "validator" }, outputs: { textAreaChanges: "textAreaChanges" }, viewQueries: [{ propertyName: "textArea", first: true, predicate: ["textArea"], descendants: true }, { propertyName: "textInput", first: true, predicate: ["textInput"], descendants: true }, { propertyName: "autosizeDirective", first: true, predicate: CdkTextareaAutosize, descendants: true }], usesInheritance: true, ngImport: i0, template: "<form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"onSubmit.emit($event)\">\n <mat-form-field *ngIf=\"multiline; else monoline\">\n <mat-label *ngIf=\"placeholder\">{{placeholder}}</mat-label>\n <textarea\n #textArea\n matInput\n [formControl]=\"control\"\n [readonly]=\"control.disabled\"\n [class.fixed-height]=\"!autoHeight\"\n [cdkTextareaAutosize]=\"autoHeight\"\n (keyup)=\"textAreaChanged($event)\"\n (keydown.control.enter)=\"onSubmit.emit($event)\"\n [autofocus]=\"autofocus\"\n ></textarea>\n <mat-error *ngIf=\"control.hasError('maxlength')\">\n {{ 'ERROR.FIELD_MAX_LENGTH' | translate: control.errors['maxlength'] }}\n </mat-error>\n <mat-hint *ngIf=\"maxLength\" align=\"end\">\n {{ 'INFO.TEXT_PROGRESS' | translate: { current: textArea.value?.length || 0, max: maxLength } }}\n </mat-hint>\n </mat-form-field>\n <ng-template #monoline>\n <mat-form-field>\n <mat-label *ngIf=\"placeholder\">{{placeholder}}</mat-label>\n <input\n #textInput\n matInput\n [formControl]=\"control\"\n [readonly]=\"control.disabled\"\n [appAutofocus]=\"autofocus\"\n (keydown.control.enter)=\"onSubmit.emit($event)\"\n />\n <mat-error *ngIf=\"control.hasError('maxlength')\">\n {{ 'ERROR.FIELD_MAX_LENGTH' | translate: control.errors['maxlength'] }}\n </mat-error>\n <mat-error *ngIf=\"control.hasError('pattern')\">\n {{ 'ERROR.FIELD_INVALID' | translate }}\n </mat-error>\n <mat-hint *ngIf=\"maxLength\" align=\"end\">\n {{ 'INFO.TEXT_PROGRESS' | translate: { current: textInput.value?.length || 0, max: maxLength } }}\n </mat-hint>\n </mat-form-field>\n </ng-template>\n</form>\n", styles: ["textarea{--textarea-height: 11.5em;max-height:var(--textarea-height)}textarea.fixed-height{height:var(--textarea-height)}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i5.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "directive", type: i6.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
67
- }
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: TextForm, decorators: [{
69
- type: Component,
70
- args: [{ selector: 'app-text-form', template: "<form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"onSubmit.emit($event)\">\n <mat-form-field *ngIf=\"multiline; else monoline\">\n <mat-label *ngIf=\"placeholder\">{{placeholder}}</mat-label>\n <textarea\n #textArea\n matInput\n [formControl]=\"control\"\n [readonly]=\"control.disabled\"\n [class.fixed-height]=\"!autoHeight\"\n [cdkTextareaAutosize]=\"autoHeight\"\n (keyup)=\"textAreaChanged($event)\"\n (keydown.control.enter)=\"onSubmit.emit($event)\"\n [autofocus]=\"autofocus\"\n ></textarea>\n <mat-error *ngIf=\"control.hasError('maxlength')\">\n {{ 'ERROR.FIELD_MAX_LENGTH' | translate: control.errors['maxlength'] }}\n </mat-error>\n <mat-hint *ngIf=\"maxLength\" align=\"end\">\n {{ 'INFO.TEXT_PROGRESS' | translate: { current: textArea.value?.length || 0, max: maxLength } }}\n </mat-hint>\n </mat-form-field>\n <ng-template #monoline>\n <mat-form-field>\n <mat-label *ngIf=\"placeholder\">{{placeholder}}</mat-label>\n <input\n #textInput\n matInput\n [formControl]=\"control\"\n [readonly]=\"control.disabled\"\n [appAutofocus]=\"autofocus\"\n (keydown.control.enter)=\"onSubmit.emit($event)\"\n />\n <mat-error *ngIf=\"control.hasError('maxlength')\">\n {{ 'ERROR.FIELD_MAX_LENGTH' | translate: control.errors['maxlength'] }}\n </mat-error>\n <mat-error *ngIf=\"control.hasError('pattern')\">\n {{ 'ERROR.FIELD_INVALID' | translate }}\n </mat-error>\n <mat-hint *ngIf=\"maxLength\" align=\"end\">\n {{ 'INFO.TEXT_PROGRESS' | translate: { current: textInput.value?.length || 0, max: maxLength } }}\n </mat-hint>\n </mat-form-field>\n </ng-template>\n</form>\n", styles: ["textarea{--textarea-height: 11.5em;max-height:var(--textarea-height)}textarea.fixed-height{height:var(--textarea-height)}\n"] }]
71
- }], ctorParameters: () => [{ type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i1.UntypedFormBuilder }], propDecorators: { showError: [{
72
- type: Input
73
- }], placeholder: [{
74
- type: Input
75
- }], multiline: [{
76
- type: Input
77
- }], autoHeight: [{
78
- type: Input
79
- }], maxLength: [{
80
- type: Input
81
- }], autofocus: [{
82
- type: Input
83
- }], validator: [{
84
- type: Input
85
- }], textAreaChanges: [{
86
- type: Output
87
- }], textArea: [{
88
- type: ViewChild,
89
- args: ['textArea']
90
- }], textInput: [{
91
- type: ViewChild,
92
- args: ['textInput']
93
- }], autosizeDirective: [{
94
- type: ViewChild,
95
- args: [CdkTextareaAutosize]
96
- }] } });
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL3RleHQtcG9wb3Zlci90ZXh0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2Zvcm0vdGV4dC1wb3BvdmVyL3RleHQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBYyxZQUFZLEVBQVksS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFzRCxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7OztBQU9sRCxNQUFNLE9BQU8sUUFBUyxTQUFRLE9BQXVCO0lBaUI3QjtJQUE4QjtJQUFpQztJQWhCNUUsU0FBUyxHQUFHLElBQUksQ0FBQztJQUNqQixXQUFXLENBQVM7SUFDcEIsU0FBUyxHQUFHLElBQUksQ0FBQztJQUNqQixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ25CLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDakIsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNsQixTQUFTLEdBQWdCLElBQUksQ0FBQztJQUU3QixlQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUVoQyxRQUFRLENBQWE7SUFDcEIsU0FBUyxDQUFhO0lBQ2QsaUJBQWlCLENBQXNCO0lBRXZFLE9BQU8sQ0FBcUI7SUFFNUIsWUFBc0IsUUFBa0IsRUFBWSxFQUFxQixFQUFZLFdBQStCO1FBQ2xILEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQURJLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBWSxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUFZLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtJQUVwSCxDQUFDO0lBRUQsUUFBUTtRQUNOLHFCQUFxQjtRQUNyQixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoSCxJQUFJLElBQUksQ0FBQyxTQUFTO1lBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFcEQsa0JBQWtCO1FBQ2xCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ2xDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7U0FDeEUsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBdUIsQ0FBQztRQUN0RCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5CLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQW9CO1FBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QyxJQUFJLElBQUksQ0FBQyxTQUFTO1lBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRVMsWUFBWTtRQUNwQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7dUdBbkRVLFFBQVE7MkZBQVIsUUFBUSxtZ0JBYVIsbUJBQW1CLHVFQ3pCaEMseXZEQTRDQTs7MkZEaENhLFFBQVE7a0JBTHBCLFNBQVM7K0JBQ0UsZUFBZTs4SUFLaEIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFSSxlQUFlO3NCQUF4QixNQUFNO2dCQUVnQixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQ0csU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNVLGlCQUFpQjtzQkFBaEQsU0FBUzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0Nka1RleHRhcmVhQXV0b3NpemV9IGZyb20gJ0Bhbmd1bGFyL2Nkay90ZXh0LWZpZWxkJztcbmltcG9ydCB7QXBwRm9ybX0gZnJvbSAnLi4vZm9ybS5jbGFzcyc7XG5pbXBvcnQge2lzTm90TmlsfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7Zm9jdXNJbnB1dH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2lucHV0cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC10ZXh0LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGV4dC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRleHRGb3JtIGV4dGVuZHMgQXBwRm9ybTx7dGV4dDogc3RyaW5nfT4gaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBzaG93RXJyb3IgPSB0cnVlO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBtdWx0aWxpbmUgPSB0cnVlO1xuICBASW5wdXQoKSBhdXRvSGVpZ2h0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1heExlbmd0aCA9IDIwMDA7XG4gIEBJbnB1dCgpIGF1dG9mb2N1cyA9IGZhbHNlO1xuICBASW5wdXQoKSB2YWxpZGF0b3I6IFZhbGlkYXRvckZuID0gbnVsbDtcblxuICBAT3V0cHV0KCkgdGV4dEFyZWFDaGFuZ2VzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgQFZpZXdDaGlsZCgndGV4dEFyZWEnKSB0ZXh0QXJlYTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndGV4dElucHV0JykgdGV4dElucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKENka1RleHRhcmVhQXV0b3NpemUpIGF1dG9zaXplRGlyZWN0aXZlOiBDZGtUZXh0YXJlYUF1dG9zaXplO1xuXG4gIGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLCBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLCBwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcikge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIENvbXB1dGUgdmFsaWRhdG9yc1xuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBpc05vdE5pbCh0aGlzLm1heExlbmd0aCkgJiYgdGhpcy5tYXhMZW5ndGggPiAwID8gW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMubWF4TGVuZ3RoKV0gOiBbXTtcbiAgICBpZiAodGhpcy52YWxpZGF0b3IpIHZhbGlkYXRvcnMucHVzaCh0aGlzLnZhbGlkYXRvcik7XG5cbiAgICAvLyBDcmVhdGUgdGhlIGZvcm1cbiAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICB0ZXh0OiBbbnVsbCwgdmFsaWRhdG9ycy5sZW5ndGggPyBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycykgOiBudWxsXVxuICAgIH0pO1xuICAgIHRoaXMuY29udHJvbCA9IGZvcm0uZ2V0KCd0ZXh0JykgYXMgVW50eXBlZEZvcm1Db250cm9sO1xuICAgIHRoaXMuc2V0Rm9ybShmb3JtKTtcblxuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gIH1cblxuICB0ZXh0QXJlYUNoYW5nZWQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICB0aGlzLnRleHRBcmVhQ2hhbmdlcy5lbWl0KHRoaXMuY29udHJvbC52YWx1ZSk7XG4gIH1cblxuICBjb250YWluZXJSZXNpemUoKSB7XG4gICAgdGhpcy5hdXRvc2l6ZURpcmVjdGl2ZT8ucmVzaXplVG9GaXRDb250ZW50KHRydWUpO1xuICB9XG5cbiAgZm9jdXNJbnB1dCgpIHtcbiAgICBpZiAodGhpcy50ZXh0QXJlYSkgZm9jdXNJbnB1dCh0aGlzLnRleHRBcmVhKTtcbiAgICBpZiAodGhpcy50ZXh0SW5wdXQpIGZvY3VzSW5wdXQodGhpcy50ZXh0SW5wdXQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8Zm9ybSBjbGFzcz1cImZvcm0tY29udGFpbmVyXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0LmVtaXQoJGV2ZW50KVwiPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJtdWx0aWxpbmU7IGVsc2UgbW9ub2xpbmVcIj5cbiAgICA8bWF0LWxhYmVsICpuZ0lmPVwicGxhY2Vob2xkZXJcIj57e3BsYWNlaG9sZGVyfX08L21hdC1sYWJlbD5cbiAgICA8dGV4dGFyZWFcbiAgICAgICN0ZXh0QXJlYVxuICAgICAgbWF0SW5wdXRcbiAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgIFtyZWFkb25seV09XCJjb250cm9sLmRpc2FibGVkXCJcbiAgICAgIFtjbGFzcy5maXhlZC1oZWlnaHRdPVwiIWF1dG9IZWlnaHRcIlxuICAgICAgW2Nka1RleHRhcmVhQXV0b3NpemVdPVwiYXV0b0hlaWdodFwiXG4gICAgICAoa2V5dXApPVwidGV4dEFyZWFDaGFuZ2VkKCRldmVudClcIlxuICAgICAgKGtleWRvd24uY29udHJvbC5lbnRlcik9XCJvblN1Ym1pdC5lbWl0KCRldmVudClcIlxuICAgICAgW2F1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxuICAgID48L3RleHRhcmVhPlxuICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJjb250cm9sLmhhc0Vycm9yKCdtYXhsZW5ndGgnKVwiPlxuICAgICAge3sgJ0VSUk9SLkZJRUxEX01BWF9MRU5HVEgnIHwgdHJhbnNsYXRlOiBjb250cm9sLmVycm9yc1snbWF4bGVuZ3RoJ10gfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgICA8bWF0LWhpbnQgKm5nSWY9XCJtYXhMZW5ndGhcIiBhbGlnbj1cImVuZFwiPlxuICAgICAge3sgJ0lORk8uVEVYVF9QUk9HUkVTUycgfCB0cmFuc2xhdGU6IHsgY3VycmVudDogdGV4dEFyZWEudmFsdWU/Lmxlbmd0aCB8fCAwLCBtYXg6IG1heExlbmd0aCB9IH19XG4gICAgPC9tYXQtaGludD5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPG5nLXRlbXBsYXRlICNtb25vbGluZT5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8bWF0LWxhYmVsICpuZ0lmPVwicGxhY2Vob2xkZXJcIj57e3BsYWNlaG9sZGVyfX08L21hdC1sYWJlbD5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjdGV4dElucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cImNvbnRyb2wuZGlzYWJsZWRcIlxuICAgICAgICBbYXBwQXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgICAgIChrZXlkb3duLmNvbnRyb2wuZW50ZXIpPVwib25TdWJtaXQuZW1pdCgkZXZlbnQpXCJcbiAgICAgIC8+XG4gICAgICA8bWF0LWVycm9yICpuZ0lmPVwiY29udHJvbC5oYXNFcnJvcignbWF4bGVuZ3RoJylcIj5cbiAgICAgICAge3sgJ0VSUk9SLkZJRUxEX01BWF9MRU5HVEgnIHwgdHJhbnNsYXRlOiBjb250cm9sLmVycm9yc1snbWF4bGVuZ3RoJ10gfX1cbiAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImNvbnRyb2wuaGFzRXJyb3IoJ3BhdHRlcm4nKVwiPlxuICAgICAgICB7eyAnRVJST1IuRklFTERfSU5WQUxJRCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgPG1hdC1oaW50ICpuZ0lmPVwibWF4TGVuZ3RoXCIgYWxpZ249XCJlbmRcIj5cbiAgICAgICAge3sgJ0lORk8uVEVYVF9QUk9HUkVTUycgfCB0cmFuc2xhdGU6IHsgY3VycmVudDogdGV4dElucHV0LnZhbHVlPy5sZW5ndGggfHwgMCwgbWF4OiBtYXhMZW5ndGggfSB9fVxuICAgICAgPC9tYXQtaGludD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L25nLXRlbXBsYXRlPlxuPC9mb3JtPlxuIl19