@sumaris-net/ngx-components 4.0.0-rc8 → 18.0.0-rc1

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 (555) hide show
  1. package/README.md +5 -3
  2. package/doc/changelog.md +522 -280
  3. package/esm2022/public_api.mjs +38 -19
  4. package/esm2022/src/app/admin/admin-routing.module.mjs +10 -17
  5. package/esm2022/src/app/admin/admin.module.mjs +7 -9
  6. package/esm2022/src/app/admin/services/filter/person.filter.mjs +3 -3
  7. package/esm2022/src/app/admin/services/person.service.mjs +31 -31
  8. package/esm2022/src/app/admin/services/validator/person.validator.mjs +10 -10
  9. package/esm2022/src/app/admin/users/users.mjs +22 -19
  10. package/esm2022/src/app/admin/users/users.module.mjs +8 -10
  11. package/esm2022/src/app/core/about/about.modal.mjs +7 -7
  12. package/esm2022/src/app/core/about/about.module.mjs +8 -21
  13. package/esm2022/src/app/core/account/account.module.mjs +28 -18
  14. package/esm2022/src/app/core/account/account.page.mjs +19 -5
  15. package/esm2022/src/app/core/account/new-token.form.mjs +106 -0
  16. package/esm2022/src/app/core/account/new-token.modal.mjs +27 -86
  17. package/esm2022/src/app/core/account/password/change-password.form.mjs +60 -0
  18. package/esm2022/src/app/core/account/password/change-password.module.mjs +22 -0
  19. package/esm2022/src/app/core/account/password/change-password.page.mjs +144 -0
  20. package/esm2022/src/app/core/account/token.table.mjs +47 -35
  21. package/esm2022/src/app/core/auth/auth.form.mjs +47 -28
  22. package/esm2022/src/app/core/auth/auth.modal.mjs +6 -6
  23. package/esm2022/src/app/core/auth/auth.module.mjs +22 -13
  24. package/esm2022/src/app/core/auth/reset-password.modal.mjs +77 -0
  25. package/esm2022/src/app/core/core.module.mjs +28 -61
  26. package/esm2022/src/app/core/core.testing.module.mjs +34 -20
  27. package/esm2022/src/app/core/form/array/form-array.mjs +325 -0
  28. package/esm2022/src/app/core/form/array/testing/form-array-test.module.mjs +23 -0
  29. package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +94 -0
  30. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +24 -25
  31. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +9 -13
  32. package/esm2022/src/app/core/form/entity/editor.class.mjs +64 -517
  33. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +26 -42
  34. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +42 -41
  35. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +5 -5
  36. package/esm2022/src/app/core/form/entity/entity.module.mjs +8 -14
  37. package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +194 -0
  38. package/esm2022/src/app/core/form/form-container.class.mjs +327 -0
  39. package/esm2022/src/app/core/form/form.class.mjs +39 -56
  40. package/esm2022/src/app/core/form/form.module.mjs +14 -10
  41. package/esm2022/src/app/core/form/form.utils.mjs +23 -306
  42. package/esm2022/src/app/core/form/list/list.form.mjs +16 -14
  43. package/esm2022/src/app/core/form/list/list.module.mjs +8 -12
  44. package/esm2022/src/app/core/form/properties/properties.form.mjs +139 -57
  45. package/esm2022/src/app/core/form/properties/properties.module.mjs +9 -15
  46. package/esm2022/src/app/core/form/properties/properties.table.mjs +27 -28
  47. package/esm2022/src/app/core/form/properties/properties.utils.mjs +60 -0
  48. package/esm2022/src/app/core/form/properties/property.validator.mjs +23 -9
  49. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +18 -18
  50. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +8 -24
  51. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +15 -15
  52. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +10 -25
  53. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +7 -7
  54. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +9 -13
  55. package/esm2022/src/app/core/form/username/username.form.mjs +52 -0
  56. package/esm2022/src/app/core/form/username/username.module.mjs +20 -0
  57. package/esm2022/src/app/core/graphql/graphql.module.mjs +8 -16
  58. package/esm2022/src/app/core/graphql/graphql.service.mjs +101 -109
  59. package/esm2022/src/app/core/graphql/graphql.utils.mjs +12 -11
  60. package/esm2022/src/app/core/home/home.mjs +81 -52
  61. package/esm2022/src/app/core/home/home.module.mjs +10 -19
  62. package/esm2022/src/app/core/icon/icon.component.mjs +5 -5
  63. package/esm2022/src/app/core/icon/icon.module.mjs +8 -17
  64. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +33 -37
  65. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +9 -13
  66. package/esm2022/src/app/core/menu/menu.component.mjs +5 -6
  67. package/esm2022/src/app/core/menu/menu.model.mjs +21 -18
  68. package/esm2022/src/app/core/menu/menu.module.mjs +7 -12
  69. package/esm2022/src/app/core/menu/menu.service.mjs +44 -60
  70. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +4 -4
  71. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +7 -6
  72. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +43 -8
  73. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +8 -27
  74. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +6 -7
  75. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +9 -13
  76. package/esm2022/src/app/core/peer/select-peer.modal.mjs +31 -21
  77. package/esm2022/src/app/core/peer/select-peer.module.mjs +11 -23
  78. package/esm2022/src/app/core/register/register-confirm.page.mjs +18 -16
  79. package/esm2022/src/app/core/register/register.form.mjs +7 -7
  80. package/esm2022/src/app/core/register/register.modal.mjs +6 -6
  81. package/esm2022/src/app/core/register/register.module.mjs +8 -29
  82. package/esm2022/src/app/core/services/account.service.mjs +272 -170
  83. package/esm2022/src/app/core/services/auth-guard.service.mjs +13 -15
  84. package/esm2022/src/app/core/services/base-entity-service.class.mjs +55 -64
  85. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +39 -33
  86. package/esm2022/src/app/core/services/base58.mjs +8 -4
  87. package/esm2022/src/app/core/services/config/core.config.mjs +88 -37
  88. package/esm2022/src/app/core/services/config.service.mjs +81 -62
  89. package/esm2022/src/app/core/services/crypto.service.mjs +11 -11
  90. package/esm2022/src/app/core/services/errors.mjs +6 -5
  91. package/esm2022/src/app/core/services/local-settings.service.mjs +58 -44
  92. package/esm2022/src/app/core/services/model/account.model.mjs +12 -17
  93. package/esm2022/src/app/core/services/model/config.model.mjs +7 -7
  94. package/esm2022/src/app/core/services/model/department.model.mjs +3 -2
  95. package/esm2022/src/app/core/services/model/entity.decorators.mjs +6 -6
  96. package/esm2022/src/app/core/services/model/entity.model.mjs +27 -31
  97. package/esm2022/src/app/core/services/model/filter.model.mjs +12 -15
  98. package/esm2022/src/app/core/services/model/history.model.mjs +1 -1
  99. package/esm2022/src/app/core/services/model/model.enum.mjs +2 -2
  100. package/esm2022/src/app/core/services/model/peer.model.mjs +19 -9
  101. package/esm2022/src/app/core/services/model/person.model.mjs +26 -22
  102. package/esm2022/src/app/core/services/model/referential.model.mjs +36 -23
  103. package/esm2022/src/app/core/services/model/settings.model.mjs +2 -1
  104. package/esm2022/src/app/core/services/model/token.model.mjs +7 -3
  105. package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +3 -7
  106. package/esm2022/src/app/core/services/network.service.mjs +99 -76
  107. package/esm2022/src/app/core/services/network.types.mjs +1 -1
  108. package/esm2022/src/app/core/services/network.utils.mjs +3 -3
  109. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +11 -11
  110. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +6 -6
  111. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +9 -9
  112. package/esm2022/src/app/core/services/pipes/pipes.module.mjs +54 -0
  113. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +21 -0
  114. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +11 -11
  115. package/esm2022/src/app/core/services/platform.service.mjs +102 -69
  116. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +32 -39
  117. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +36 -45
  118. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +1 -1
  119. package/esm2022/src/app/core/services/testing/referential.validator.mjs +14 -14
  120. package/esm2022/src/app/core/services/validator/account.validator.mjs +5 -5
  121. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +5 -5
  122. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +34 -20
  123. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +5 -5
  124. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +12 -9
  125. package/esm2022/src/app/core/settings/settings.module.mjs +9 -21
  126. package/esm2022/src/app/core/settings/settings.page.mjs +76 -63
  127. package/esm2022/src/app/core/table/async-table.class.mjs +219 -201
  128. package/esm2022/src/app/core/table/column/actions-column.component.mjs +127 -0
  129. package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +117 -0
  130. package/esm2022/src/app/core/table/column/row-field.component.mjs +116 -0
  131. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +31 -33
  132. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +36 -36
  133. package/esm2022/src/app/core/table/memory-table.class.mjs +5 -5
  134. package/esm2022/src/app/core/table/table-select-columns.component.mjs +8 -8
  135. package/esm2022/src/app/core/table/table.class.mjs +193 -152
  136. package/esm2022/src/app/core/table/table.model.mjs +1 -1
  137. package/esm2022/src/app/core/table/table.module.mjs +35 -24
  138. package/esm2022/src/app/core/table/table.pipes.mjs +77 -0
  139. package/esm2022/src/app/core/table/table.utils.mjs +2 -4
  140. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +9 -5
  141. package/esm2022/src/app/core/table/testing/table.testing.mjs +116 -78
  142. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +8 -33
  143. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +4 -4
  144. package/esm2022/src/app/core/table/testing/table2.testing.mjs +68 -45
  145. package/esm2022/src/app/shared/alerts.mjs +49 -45
  146. package/esm2022/src/app/shared/audio/audio.mjs +25 -27
  147. package/esm2022/src/app/shared/audio/audio.testing.mjs +5 -5
  148. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +10 -25
  149. package/esm2022/src/app/shared/capacitor/keyboard.mjs +5 -5
  150. package/esm2022/src/app/shared/capacitor/plugins.mjs +1 -1
  151. package/esm2022/src/app/shared/constants.mjs +9 -4
  152. package/esm2022/src/app/shared/dates.mjs +18 -16
  153. package/esm2022/src/app/shared/debug/debug-service.class.mjs +1 -1
  154. package/esm2022/src/app/shared/debug/debug.component.mjs +5 -5
  155. package/esm2022/src/app/shared/debug/debug.module.mjs +8 -29
  156. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +8 -15
  157. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +4 -4
  158. package/esm2022/src/app/shared/directives/directives.module.mjs +8 -29
  159. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +4 -4
  160. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +4 -4
  161. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +4 -4
  162. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +4 -4
  163. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +4 -4
  164. package/esm2022/src/app/shared/events.mjs +6 -8
  165. package/esm2022/src/app/shared/file/csv.utils.mjs +38 -18
  166. package/esm2022/src/app/shared/file/file.service.mjs +11 -15
  167. package/esm2022/src/app/shared/file/file.utils.mjs +13 -11
  168. package/esm2022/src/app/shared/file/images.utils.mjs +29 -4
  169. package/esm2022/src/app/shared/file/json.utils.mjs +11 -4
  170. package/esm2022/src/app/shared/file/uri.utils.mjs +1 -1
  171. package/esm2022/src/app/shared/focusable.mjs +1 -1
  172. package/esm2022/src/app/shared/form/field.component.mjs +69 -43
  173. package/esm2022/src/app/shared/form/field.model.mjs +4 -4
  174. package/esm2022/src/app/shared/form/loading-spinner.mjs +5 -5
  175. package/esm2022/src/app/shared/forms.mjs +116 -43
  176. package/esm2022/src/app/shared/functions.mjs +139 -71
  177. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +14 -14
  178. package/esm2022/src/app/shared/gesture/gesture-config.mjs +10 -10
  179. package/esm2022/src/app/shared/gesture/hammer.utils.mjs +1 -1
  180. package/esm2022/src/app/shared/graph/colors.utils.mjs +14 -18
  181. package/esm2022/src/app/shared/graph/graph-colors.mjs +23 -29
  182. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +4 -4
  183. package/esm2022/src/app/shared/help/help.modal.mjs +6 -6
  184. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +5 -5
  185. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +44 -17
  186. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +9 -27
  187. package/esm2022/src/app/shared/http/http.utils.mjs +15 -11
  188. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +27 -27
  189. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +13 -10
  190. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +1 -1
  191. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +14 -17
  192. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +9 -13
  193. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +14 -11
  194. package/esm2022/src/app/shared/image/image.model.mjs +1 -1
  195. package/esm2022/src/app/shared/image/image.module.mjs +8 -13
  196. package/esm2022/src/app/shared/image/image.service.mjs +14 -12
  197. package/esm2022/src/app/shared/inputs.mjs +52 -20
  198. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +2 -3
  199. package/esm2022/src/app/shared/logging/log-level.model.mjs +1 -1
  200. package/esm2022/src/app/shared/logging/logger.model.mjs +2 -2
  201. package/esm2022/src/app/shared/logging/logging-service.class.mjs +17 -20
  202. package/esm2022/src/app/shared/logging/logging-service.module.mjs +6 -6
  203. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +7 -10
  204. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +348 -238
  205. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +13 -16
  206. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +5 -4
  207. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +51 -37
  208. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +99 -57
  209. package/esm2022/src/app/shared/material/badge/badge.module.mjs +8 -20
  210. package/esm2022/src/app/shared/material/badge/badge.test.mjs +5 -5
  211. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +19 -20
  212. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +209 -104
  213. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +15 -8
  214. package/esm2022/src/app/shared/material/chips/chips.module.mjs +12 -13
  215. package/esm2022/src/app/shared/material/chips/material.chips.mjs +228 -168
  216. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +20 -21
  217. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +12 -27
  218. package/esm2022/src/app/shared/material/datetime/material.date.mjs +167 -92
  219. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +128 -77
  220. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +297 -165
  221. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +34 -30
  222. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +31 -27
  223. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +26 -23
  224. package/esm2022/src/app/shared/material/duration/duration.module.mjs +11 -16
  225. package/esm2022/src/app/shared/material/duration/duration.utils.mjs +3 -6
  226. package/esm2022/src/app/shared/material/duration/material.duration.mjs +35 -34
  227. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +23 -22
  228. package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +217 -170
  229. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +182 -241
  230. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +10 -15
  231. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +19 -14
  232. package/esm2022/src/app/shared/material/material.animations.mjs +22 -22
  233. package/esm2022/src/app/shared/material/material.config.mjs +3 -0
  234. package/esm2022/src/app/shared/material/material.module.mjs +16 -16
  235. package/esm2022/src/app/shared/material/material.testing.module.mjs +50 -37
  236. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +12 -9
  237. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +4 -4
  238. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +26 -19
  239. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +7 -11
  240. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +8 -8
  241. package/esm2022/src/app/shared/material/testing/common.test.mjs +30 -24
  242. package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +30 -19
  243. package/esm2022/src/app/shared/material/text/text-form.component.mjs +128 -21
  244. package/esm2022/src/app/shared/material/text/text-form.module.mjs +8 -8
  245. package/esm2022/src/app/shared/modules.mjs +1 -1
  246. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +118 -37
  247. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +1 -1
  248. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +5 -5
  249. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +8 -8
  250. package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +74 -0
  251. package/esm2022/src/app/shared/named-filter/testing/named-filter.testing.module.mjs +28 -0
  252. package/esm2022/src/app/shared/observables.mjs +14 -18
  253. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +53 -38
  254. package/esm2022/src/app/shared/pipes/badge.pipes.mjs +24 -0
  255. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +8 -6
  256. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +8 -10
  257. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +15 -15
  258. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +6 -6
  259. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +6 -6
  260. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +6 -13
  261. package/esm2022/src/app/shared/pipes/form.pipes.mjs +72 -47
  262. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +15 -15
  263. package/esm2022/src/app/shared/pipes/html.pipes.mjs +52 -0
  264. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +14 -14
  265. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +17 -17
  266. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +37 -88
  267. package/esm2022/src/app/shared/pipes/math.pipes.mjs +16 -16
  268. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +5 -5
  269. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +6 -6
  270. package/esm2022/src/app/shared/pipes/pipes.module.mjs +117 -137
  271. package/esm2022/src/app/shared/pipes/property.pipes.mjs +86 -47
  272. package/esm2022/src/app/shared/pipes/selection.pipes.mjs +179 -0
  273. package/esm2022/src/app/shared/pipes/string.pipes.mjs +50 -49
  274. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +11 -11
  275. package/esm2022/src/app/shared/pipes/types.pipes.mjs +33 -17
  276. package/esm2022/src/app/shared/platforms.mjs +7 -5
  277. package/esm2022/src/app/shared/rx-state.module.mjs +7 -11
  278. package/esm2022/src/app/shared/services/entity-service.class.mjs +2 -2
  279. package/esm2022/src/app/shared/services/job.utils.mjs +7 -7
  280. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +43 -41
  281. package/esm2022/src/app/shared/services/progress-bar.service.mjs +4 -4
  282. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +11 -14
  283. package/esm2022/src/app/shared/services/startable-service.class.mjs +11 -17
  284. package/esm2022/src/app/shared/services/translate-context.service.mjs +18 -15
  285. package/esm2022/src/app/shared/services/validator-service.class.mjs +1 -1
  286. package/esm2022/src/app/shared/services.mjs +12 -12
  287. package/esm2022/src/app/shared/shared-routing.module.mjs +19 -18
  288. package/esm2022/src/app/shared/shared.module.mjs +29 -28
  289. package/esm2022/src/app/shared/shared.testing.module.mjs +18 -10
  290. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +39 -46
  291. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +8 -12
  292. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +9 -17
  293. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +10 -18
  294. package/esm2022/src/app/shared/storage/storage.service.mjs +4 -4
  295. package/esm2022/src/app/shared/storage/storage.utils.mjs +2 -2
  296. package/esm2022/src/app/shared/testing/maskito.test.mjs +41 -0
  297. package/esm2022/src/app/shared/testing/observable.test.mjs +11 -13
  298. package/esm2022/src/app/shared/testing/tests.page.mjs +6 -6
  299. package/esm2022/src/app/shared/toast/toast.testing.mjs +11 -11
  300. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +10 -25
  301. package/esm2022/src/app/shared/toast/toasts.mjs +9 -9
  302. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +10 -8
  303. package/esm2022/src/app/shared/toolbar/toolbar.mjs +31 -32
  304. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +8 -39
  305. package/esm2022/src/app/shared/types.mjs +1 -1
  306. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +12 -12
  307. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +10 -25
  308. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +7 -8
  309. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +21 -19
  310. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +2 -3
  311. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +64 -56
  312. package/esm2022/src/app/shared/validator/validators.mjs +60 -39
  313. package/esm2022/src/app/shared/version/versions.mjs +2 -2
  314. package/esm2022/src/app/social/job/job.module.mjs +8 -27
  315. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +9 -9
  316. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +49 -46
  317. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +10 -13
  318. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +1 -1
  319. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +39 -21
  320. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +6 -11
  321. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +11 -30
  322. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +8 -21
  323. package/esm2022/src/app/social/message/message.form.mjs +5 -5
  324. package/esm2022/src/app/social/message/message.modal.mjs +8 -8
  325. package/esm2022/src/app/social/message/message.model.mjs +8 -8
  326. package/esm2022/src/app/social/message/message.module.mjs +4 -4
  327. package/esm2022/src/app/social/message/message.service.mjs +7 -7
  328. package/esm2022/src/app/social/social.errors.mjs +2 -2
  329. package/esm2022/src/app/social/social.module.mjs +7 -32
  330. package/esm2022/src/app/social/social.testing.module.mjs +9 -20
  331. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +27 -23
  332. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +19 -22
  333. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +47 -23
  334. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +8 -8
  335. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +8 -21
  336. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +27 -15
  337. package/esm2022/src/app/social/user-event/user-event.model.mjs +1 -1
  338. package/esm2022/src/app/social/user-event/user-event.module.mjs +8 -28
  339. package/esm2022/src/app/social/user-event/user-event.service.mjs +61 -64
  340. package/esm2022/src/environments/environment.class.mjs +9 -1
  341. package/esm2022/src/environments/environment.loader.mjs +5 -11
  342. package/esm2022/src/environments/environment.mjs +19 -11
  343. package/fesm2022/sumaris-net.ngx-components.mjs +16117 -14592
  344. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  345. package/package.json +36 -18
  346. package/public_api.d.ts +30 -22
  347. package/src/app/admin/services/filter/person.filter.d.ts +1 -1
  348. package/src/app/admin/users/users.d.ts +5 -6
  349. package/src/app/core/account/account.module.d.ts +10 -8
  350. package/src/app/core/account/account.page.d.ts +25 -15
  351. package/src/app/core/account/new-token.form.d.ts +29 -0
  352. package/src/app/core/account/new-token.modal.d.ts +9 -21
  353. package/src/app/core/account/password/change-password.form.d.ts +19 -0
  354. package/src/app/core/account/password/change-password.module.d.ts +11 -0
  355. package/src/app/core/account/password/change-password.page.d.ts +36 -0
  356. package/src/app/core/account/token.table.d.ts +7 -5
  357. package/src/app/core/auth/auth.form.d.ts +11 -9
  358. package/src/app/core/auth/auth.module.d.ts +6 -4
  359. package/src/app/core/auth/reset-password.modal.d.ts +26 -0
  360. package/src/app/core/core.module.d.ts +21 -24
  361. package/src/app/core/core.testing.module.d.ts +2 -1
  362. package/src/app/core/form/array/form-array.d.ts +136 -0
  363. package/src/app/core/form/array/testing/form-array-test.module.d.ts +12 -0
  364. package/src/app/core/form/array/testing/form-array.test.d.ts +26 -0
  365. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +2 -3
  366. package/src/app/core/form/entity/editor.class.d.ts +19 -179
  367. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +10 -13
  368. package/src/app/core/form/entity/entity-editor.class.d.ts +12 -17
  369. package/src/app/core/form/entity/entity-metadata.component.d.ts +1 -1
  370. package/src/app/core/form/entity/tab-editor.class.d.ts +70 -0
  371. package/src/app/core/form/form-container.class.d.ts +126 -0
  372. package/src/app/core/form/form.class.d.ts +13 -26
  373. package/src/app/core/form/form.module.d.ts +2 -1
  374. package/src/app/core/form/form.utils.d.ts +60 -145
  375. package/src/app/core/form/list/list.form.d.ts +2 -2
  376. package/src/app/core/form/properties/properties.form.d.ts +34 -12
  377. package/src/app/core/form/properties/properties.table.d.ts +2 -2
  378. package/src/app/core/form/properties/properties.utils.d.ts +27 -0
  379. package/src/app/core/form/properties/property.validator.d.ts +9 -3
  380. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +3 -1
  381. package/src/app/core/form/username/username.form.d.ts +19 -0
  382. package/src/app/core/form/username/username.module.d.ts +9 -0
  383. package/src/app/core/graphql/graphql.module.d.ts +1 -2
  384. package/src/app/core/graphql/graphql.service.d.ts +2 -4
  385. package/src/app/core/home/home.d.ts +26 -6
  386. package/src/app/core/menu/testing/menu-other.testing.d.ts +1 -1
  387. package/src/app/core/menu/testing/menu.testing.d.ts +11 -3
  388. package/src/app/core/peer/select-peer.modal.d.ts +13 -7
  389. package/src/app/core/peer/select-peer.module.d.ts +3 -4
  390. package/src/app/core/services/account.service.d.ts +9 -0
  391. package/src/app/core/services/base-entity-service.class.d.ts +1 -1
  392. package/src/app/core/services/config/core.config.d.ts +12 -1
  393. package/src/app/core/services/config.service.d.ts +4 -3
  394. package/src/app/core/services/errors.d.ts +11 -0
  395. package/src/app/core/services/local-settings.service.d.ts +8 -4
  396. package/src/app/core/services/model/entity.model.d.ts +6 -5
  397. package/src/app/core/services/model/filter.model.d.ts +1 -1
  398. package/src/app/core/services/model/peer.model.d.ts +1 -0
  399. package/src/app/core/services/model/person.model.d.ts +6 -2
  400. package/src/app/core/services/model/referential.model.d.ts +8 -3
  401. package/src/app/core/services/model/settings.model.d.ts +4 -2
  402. package/src/app/core/services/model/token.model.d.ts +1 -0
  403. package/src/app/core/services/model/tree-item-entity.model.d.ts +1 -1
  404. package/src/app/core/services/network.service.d.ts +11 -7
  405. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +1 -1
  406. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +3 -1
  407. package/src/app/core/services/pipes/pipes.module.d.ts +11 -0
  408. package/src/app/core/services/pipes/referential-to-string.pipe.d.ts +13 -0
  409. package/src/app/core/services/platform.service.d.ts +8 -3
  410. package/src/app/core/services/testing/referential-filter.model.d.ts +1 -1
  411. package/src/app/core/services/validator/local-settings.validator.d.ts +6 -2
  412. package/src/app/core/settings/settings.module.d.ts +2 -1
  413. package/src/app/core/settings/settings.page.d.ts +34 -21
  414. package/src/app/core/table/async-table.class.d.ts +22 -17
  415. package/src/app/core/table/column/actions-column.component.d.ts +59 -0
  416. package/src/app/core/table/column/nav-actions-column.component.d.ts +46 -0
  417. package/src/app/core/table/column/row-field.component.d.ts +40 -0
  418. package/src/app/core/table/entities-async-table-datasource.class.d.ts +1 -0
  419. package/src/app/core/table/entities-table-datasource.class.d.ts +1 -0
  420. package/src/app/core/table/table.class.d.ts +14 -11
  421. package/src/app/core/table/table.module.d.ts +8 -4
  422. package/src/app/core/table/table.pipes.d.ts +28 -0
  423. package/src/app/core/table/testing/table.testing.d.ts +12 -13
  424. package/src/app/core/table/testing/table2.testing.d.ts +13 -10
  425. package/src/app/shared/alerts.d.ts +4 -2
  426. package/src/app/shared/constants.d.ts +5 -0
  427. package/src/app/shared/dates.d.ts +12 -5
  428. package/src/app/shared/directives/autofocus.directive.d.ts +0 -1
  429. package/src/app/shared/events.d.ts +1 -1
  430. package/src/app/shared/file/csv.utils.d.ts +5 -0
  431. package/src/app/shared/file/images.utils.d.ts +17 -0
  432. package/src/app/shared/file/json.utils.d.ts +3 -0
  433. package/src/app/shared/form/field.component.d.ts +6 -3
  434. package/src/app/shared/forms.d.ts +32 -0
  435. package/src/app/shared/functions.d.ts +27 -8
  436. package/src/app/shared/graph/graph-colors.d.ts +1 -1
  437. package/src/app/shared/guard/component-dirty.guard.d.ts +1 -6
  438. package/src/app/shared/hotkeys/hotkeys.service.d.ts +17 -3
  439. package/src/app/shared/http/http.utils.d.ts +1 -0
  440. package/src/app/shared/image/gallery/image-gallery.component.d.ts +10 -10
  441. package/src/app/shared/image/gallery/image-gallery.module.d.ts +2 -1
  442. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +2 -2
  443. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +2 -1
  444. package/src/app/shared/inputs.d.ts +8 -6
  445. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +20 -1
  446. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +56 -16
  447. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +1 -1
  448. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +2 -1
  449. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +3 -2
  450. package/src/app/shared/material/badge/badge.directive.d.ts +10 -4
  451. package/src/app/shared/material/boolean/boolean.module.d.ts +15 -14
  452. package/src/app/shared/material/boolean/material.boolean.d.ts +51 -25
  453. package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +1 -0
  454. package/src/app/shared/material/chips/chips.module.d.ts +2 -1
  455. package/src/app/shared/material/chips/material.chips.d.ts +46 -21
  456. package/src/app/shared/material/chips/testing/chips.test.d.ts +1 -0
  457. package/src/app/shared/material/datetime/datetime.module.d.ts +1 -1
  458. package/src/app/shared/material/datetime/material.date.d.ts +33 -18
  459. package/src/app/shared/material/datetime/material.dateshort.d.ts +29 -16
  460. package/src/app/shared/material/datetime/material.datetime.d.ts +41 -28
  461. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +3 -3
  462. package/src/app/shared/material/duration/duration.module.d.ts +1 -1
  463. package/src/app/shared/material/duration/material.duration.d.ts +1 -1
  464. package/src/app/shared/material/latlong/latlong.utils.d.ts +9 -1
  465. package/src/app/shared/material/latlong/material.latlong.d.ts +29 -32
  466. package/src/app/shared/material/latlong/material.latlong.module.d.ts +1 -1
  467. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +5 -1
  468. package/src/app/shared/material/material.config.d.ts +3 -0
  469. package/src/app/shared/material/material.module.d.ts +5 -6
  470. package/src/app/shared/material/material.testing.module.d.ts +8 -7
  471. package/src/app/shared/material/swipe/material.swipe.d.ts +4 -3
  472. package/src/app/shared/material/text/testing/text-form.testing.d.ts +10 -4
  473. package/src/app/shared/material/text/text-form.component.d.ts +42 -8
  474. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +30 -14
  475. package/src/app/shared/named-filter/named-filter.service.d.ts +12 -6
  476. package/src/app/shared/named-filter/testing/named-filter-selector.testing.d.ts +34 -0
  477. package/src/app/shared/named-filter/testing/named-filter.testing.module.d.ts +10 -0
  478. package/src/app/shared/pipes/arrays.pipe.d.ts +5 -0
  479. package/src/app/shared/pipes/badge.pipes.d.ts +7 -0
  480. package/src/app/shared/pipes/date-format.pipe.d.ts +3 -2
  481. package/src/app/shared/pipes/form.pipes.d.ts +18 -8
  482. package/src/app/shared/pipes/html.pipes.d.ts +15 -0
  483. package/src/app/shared/pipes/maps.pipe.d.ts +4 -4
  484. package/src/app/shared/pipes/maskito.pipe.d.ts +7 -9
  485. package/src/app/shared/pipes/pipes.module.d.ts +7 -4
  486. package/src/app/shared/pipes/property.pipes.d.ts +24 -3
  487. package/src/app/shared/pipes/selection.pipes.d.ts +62 -0
  488. package/src/app/shared/pipes/string.pipes.d.ts +6 -6
  489. package/src/app/shared/pipes/types.pipes.d.ts +6 -1
  490. package/src/app/shared/services/entity-service.class.d.ts +0 -2
  491. package/src/app/shared/services/memory-entity-service.class.d.ts +6 -3
  492. package/src/app/shared/services.d.ts +1 -0
  493. package/src/app/shared/shared.testing.module.d.ts +2 -1
  494. package/src/app/shared/storage/storage-explorer.component.d.ts +4 -3
  495. package/src/app/shared/testing/maskito.test.d.ts +10 -0
  496. package/src/app/shared/toolbar/toolbar.d.ts +7 -2
  497. package/src/app/shared/types.d.ts +5 -0
  498. package/src/app/shared/upload-file/upload-file.component.d.ts +1 -0
  499. package/src/app/shared/validator/form-error-adapter.class.d.ts +17 -11
  500. package/src/app/shared/validator/validators.d.ts +20 -9
  501. package/src/app/social/job/progression/job-progression.icon.d.ts +4 -5
  502. package/src/app/social/job/progression/job-progression.list.d.ts +1 -3
  503. package/src/app/social/job/progression/job-progression.service.d.ts +3 -4
  504. package/src/app/social/job/testing/job-progression.testing.d.ts +0 -1
  505. package/src/app/social/job/testing/job-progression.testing.service.d.ts +3 -11
  506. package/src/app/social/message/message.modal.d.ts +2 -2
  507. package/src/app/social/message/message.model.d.ts +1 -1
  508. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +4 -4
  509. package/src/app/social/user-event/testing/user-event.testing.d.ts +1 -0
  510. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +2 -3
  511. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +1 -0
  512. package/src/assets/i18n/en-US.json +48 -19
  513. package/src/assets/i18n/en.json +48 -20
  514. package/src/assets/i18n/fr.json +50 -20
  515. package/src/assets/manifest.json +1 -1
  516. package/src/environments/environment.class.d.ts +10 -0
  517. package/src/environments/environment.d.ts +0 -1
  518. package/src/environments/environment.loader.d.ts +0 -2
  519. package/src/theme/_functions.scss +15 -0
  520. package/src/theme/_icons.scss +1 -1
  521. package/src/theme/_ionic.globals.scss +8 -2
  522. package/src/theme/_ionic.scss +10 -10
  523. package/src/theme/_material.globals.scss +16 -43
  524. package/src/theme/_material.scss +45 -32
  525. package/src/theme/_mixins.scss +99 -18
  526. package/src/theme/_ngx-components.forms.scss +354 -0
  527. package/src/theme/_ngx-components.globals.scss +20 -10
  528. package/src/theme/_ngx-components.scss +194 -400
  529. package/src/theme/_ngx-components.table.scss +200 -207
  530. package/src/theme/_ngx-components.tabs.scss +54 -0
  531. package/src/theme/_responsive.scss +0 -31
  532. package/src/theme/_theme.scss +2 -0
  533. package/src/theme/_theme.variables.scss +172 -0
  534. package/esm2022/src/app/core/table/actions-column.component.mjs +0 -115
  535. package/esm2022/src/app/shared/material/boolean/material-boolean2.mjs +0 -266
  536. package/esm2022/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +0 -104
  537. package/esm2022/src/app/shared/material/numpad/numpad.component.mjs +0 -83
  538. package/esm2022/src/app/shared/material/numpad/numpad.container.mjs +0 -203
  539. package/esm2022/src/app/shared/material/numpad/numpad.content.mjs +0 -19
  540. package/esm2022/src/app/shared/material/numpad/numpad.directive.mjs +0 -168
  541. package/esm2022/src/app/shared/material/numpad/numpad.dom-service.mjs +0 -36
  542. package/esm2022/src/app/shared/material/numpad/numpad.model.mjs +0 -16
  543. package/esm2022/src/app/shared/material/numpad/numpad.module.mjs +0 -60
  544. package/esm2022/src/app/shared/material/numpad/testing/numpad.test.mjs +0 -48
  545. package/src/app/core/table/actions-column.component.d.ts +0 -48
  546. package/src/app/shared/material/boolean/material-boolean2.d.ts +0 -66
  547. package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +0 -22
  548. package/src/app/shared/material/numpad/numpad.component.d.ts +0 -26
  549. package/src/app/shared/material/numpad/numpad.container.d.ts +0 -40
  550. package/src/app/shared/material/numpad/numpad.content.d.ts +0 -7
  551. package/src/app/shared/material/numpad/numpad.directive.d.ts +0 -35
  552. package/src/app/shared/material/numpad/numpad.dom-service.d.ts +0 -16
  553. package/src/app/shared/material/numpad/numpad.model.d.ts +0 -30
  554. package/src/app/shared/material/numpad/numpad.module.d.ts +0 -16
  555. package/src/app/shared/material/numpad/testing/numpad.test.d.ts +0 -13
@@ -4,80 +4,88 @@ import { AppFormUtils } from '../../core/form/form.utils';
4
4
  import { SharedValidators } from './validators';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@ngx-translate/core";
7
+ import * as i2 from "../services/translate-context.service";
7
8
  export const APP_FORM_ERROR_I18N_KEYS = new InjectionToken('appFormErrorKeys');
8
9
  export class FormErrorTranslator {
9
10
  translate;
11
+ translateContext;
10
12
  errorI18nKeys;
11
- constructor(translate, errorI18nKeys) {
13
+ constructor(translate, translateContext, errorI18nKeys) {
12
14
  this.translate = translate;
15
+ this.translateContext = translateContext;
13
16
  this.errorI18nKeys = {
14
17
  ...SharedValidators.I18N_ERROR_KEYS,
15
- ...errorI18nKeys
18
+ ...errorI18nKeys,
16
19
  };
17
20
  }
18
21
  translateFormErrors(control, opts) {
19
22
  if (!control || !control.invalid)
20
23
  return '';
21
- const separator = opts && opts.separator || ', ';
24
+ const separator = (opts && opts.separator) || ', ';
22
25
  const recursive = !opts || opts.recursive !== false;
23
26
  const errors = AppFormUtils.getFormErrors(control, { recursive });
24
- return errors && Object.keys(errors).reduce((res, path) => {
25
- const childControl = control.get(path);
26
- // Should be a control map of errors
27
- if (childControl) {
28
- // Try to convert the control path
29
- const i18nPath = this.translateControlPath(path, opts);
30
- // OK, we have a field name: use it
31
- const columnErrors = Object.keys(childControl.errors).map(errorKey => this.translateError(errorKey, childControl.errors[errorKey]));
32
- if (isEmptyArray(columnErrors))
27
+ return (errors &&
28
+ Object.keys(errors).reduce((res, path) => {
29
+ const childControl = control.get(path);
30
+ // Should be a control map of errors
31
+ if (childControl) {
32
+ // Try to convert the control path
33
+ const i18nPath = this.translateFormPath(path, opts);
34
+ // OK, we have a field name: use it
35
+ const columnErrors = Object.keys(childControl.errors).map((errorKey) => this.translateError(errorKey, childControl.errors[errorKey]));
36
+ if (isEmptyArray(columnErrors))
37
+ return res;
38
+ // Add separator
39
+ if (res.length)
40
+ res += separator;
41
+ return res + i18nPath + ': ' + columnErrors.join(separator);
42
+ }
43
+ // Or try as global form error
44
+ const formError = this.translateError(path, errors[path]);
45
+ if (isNil(formError))
33
46
  return res;
34
- // Add separator
35
- if (res.length)
36
- res += separator;
37
- return res + i18nPath + ': ' + columnErrors.join(separator);
38
- }
39
- // Or try as global form error
40
- const formError = this.translateError(path, errors[path]);
41
- if (isNil(formError))
42
- return res;
43
- return res + (res.length ? separator : '') + formError;
44
- }, '');
47
+ return res + (res.length ? separator : '') + formError;
48
+ }, ''));
45
49
  }
46
50
  translateErrors(errors, opts) {
47
- const separator = opts && opts.separator || ', ';
48
- return errors && Object.keys(errors).reduce((res, path) => {
49
- const pathErrors = errors[path];
50
- // Should be a control map of errors
51
- if (pathErrors) {
52
- // Try to convert the control path
53
- const i18nPath = this.translateControlPath(path, opts);
54
- // OK, we have a field name: use it
55
- const columnErrors = Object.keys(pathErrors).map(errorKey => this.translateError(errorKey, pathErrors[errorKey]));
56
- if (isEmptyArray(columnErrors))
51
+ const separator = (opts && opts.separator) || ', ';
52
+ return (errors &&
53
+ Object.keys(errors).reduce((res, path) => {
54
+ const pathErrors = errors[path];
55
+ // Should be a control map of errors
56
+ if (pathErrors) {
57
+ // Try to convert the control path
58
+ const i18nPath = this.translateFormPath(path, opts);
59
+ // OK, we have a field name: use it
60
+ const columnErrors = Object.keys(pathErrors).map((errorKey) => this.translateError(errorKey, pathErrors[errorKey]));
61
+ if (isEmptyArray(columnErrors))
62
+ return res;
63
+ // Add separator
64
+ if (res.length)
65
+ res += separator;
66
+ return res + i18nPath + ': ' + columnErrors.join(separator);
67
+ }
68
+ // Or try as global form error
69
+ const formError = this.translateError(path, pathErrors);
70
+ if (isNil(formError))
57
71
  return res;
58
- // Add separator
59
- if (res.length)
60
- res += separator;
61
- return res + i18nPath + ': ' + columnErrors.join(separator);
62
- }
63
- // Or try as global form error
64
- const formError = this.translateError(path, pathErrors);
65
- if (isNil(formError))
66
- return res;
67
- return res + (res.length ? separator : '') + formError;
68
- }, '');
72
+ return res + (res.length ? separator : '') + formError;
73
+ }, ''));
69
74
  }
70
- translateControlPath(path, opts) {
71
- if (opts?.controlPathTranslator) {
72
- return opts?.controlPathTranslator.translateControlPath(path);
75
+ translateFormPath(path, opts) {
76
+ // Delegate to a path translator, if any
77
+ if (opts?.pathTranslator && opts.pathTranslator !== this) {
78
+ return opts.pathTranslator.translateFormPath(path, { ...opts, pathTranslator: null /*avoid recursive call*/ });
73
79
  }
74
- const i18nKey = (opts && opts.i18nPrefix || '') + changeCaseToUnderscore(path).toUpperCase();
75
- return this.translate.instant(i18nKey);
80
+ // Default translation
81
+ const fieldName = path.substring(path.lastIndexOf('.') + 1);
82
+ const i18nKey = (opts?.i18nPrefix || '') + changeCaseToUnderscore(fieldName).toUpperCase();
83
+ return this.translateContext.instant(i18nKey, opts?.i18nSuffix);
76
84
  }
77
85
  translateError(errorKey, errorContent) {
78
- const i18nKey = this.errorI18nKeys[errorKey]
86
+ const i18nKey = this.errorI18nKeys[errorKey] ||
79
87
  // Try to generate a standard error key, like 'ERROR.FIELD_xxx_xxx'
80
- || ('ERROR.FIELD_' + changeCaseToUnderscore(errorKey).toUpperCase());
88
+ 'ERROR.FIELD_' + changeCaseToUnderscore(errorKey).toUpperCase();
81
89
  let i18nMessage = this.translate.instant(i18nKey, errorContent);
82
90
  if (i18nKey !== i18nMessage)
83
91
  return i18nMessage;
@@ -91,16 +99,16 @@ export class FormErrorTranslator {
91
99
  console.error(`[form-error-adapter] Cannot translate error key '${errorKey}'. Please add more formErrorsKey into APP_FORM_ERROR_I18N_KEYS injection token`);
92
100
  return errorKey;
93
101
  }
94
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: FormErrorTranslator, deps: [{ token: i1.TranslateService }, { token: APP_FORM_ERROR_I18N_KEYS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
95
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: FormErrorTranslator, providedIn: 'root' });
102
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FormErrorTranslator, deps: [{ token: i1.TranslateService }, { token: i2.TranslateContextService }, { token: APP_FORM_ERROR_I18N_KEYS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
103
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FormErrorTranslator, providedIn: 'root' });
96
104
  }
97
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: FormErrorTranslator, decorators: [{
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FormErrorTranslator, decorators: [{
98
106
  type: Injectable,
99
107
  args: [{ providedIn: 'root' }]
100
- }], ctorParameters: () => [{ type: i1.TranslateService }, { type: undefined, decorators: [{
108
+ }], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.TranslateContextService }, { type: undefined, decorators: [{
101
109
  type: Optional
102
110
  }, {
103
111
  type: Inject,
104
112
  args: [APP_FORM_ERROR_I18N_KEYS]
105
113
  }] }] });
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lcnJvci1hZGFwdGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvdmFsaWRhdG9yL2Zvcm0tZXJyb3ItYWRhcHRlci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUN6RSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRzNFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxjQUFjLENBQUM7OztBQUs5QyxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FBb0Isa0JBQWtCLENBQUMsQ0FBQztBQWNsRyxNQUFNLE9BQU8sbUJBQW1CO0lBS3BCO0lBSE8sYUFBYSxDQUFvQjtJQUVsRCxZQUNVLFNBQTJCLEVBQ1csYUFBZ0M7UUFEdEUsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFHbkMsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNuQixHQUFHLGdCQUFnQixDQUFDLGVBQWU7WUFDbkMsR0FBRyxhQUFhO1NBQ2pCLENBQUM7SUFDSixDQUFDO0lBRUQsbUJBQW1CLENBQUMsT0FBd0IsRUFBRSxJQUFpQztRQUM3RSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUU1QyxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUM7UUFDakQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUM7UUFDcEQsTUFBTSxNQUFNLEdBQUcs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QUNuRCxJQUFJLFlBQVksS0FBSyxXQUFXO2dCQUFFLE9BQU8sV0FBVyxDQUFDO1NBQ3REO1FBRUQsNkJBQTZCO1FBQzdCLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0RBQW9ELFFBQVEsZ0ZBQWdGLENBQUMsQ0FBQztRQUU1SixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO3VHQWpHVSxtQkFBbUIsa0RBTVIsd0JBQXdCOzJHQU5uQyxtQkFBbUIsY0FEUCxNQUFNOzsyRkFDbEIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7MEJBTzNCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlLCBpc0VtcHR5QXJyYXksIGlzTmlsfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7QXBwRm9ybVV0aWxzfSBmcm9tICcuLi8uLi9jb3JlL2Zvcm0vZm9ybS51dGlscyc7XG5pbXBvcnQge1NoYXJlZFZhbGlkYXRvcnN9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQge09iamVjdE1hcH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtGb3JtRXJyb3JzfSBmcm9tICcuLi9mb3Jtcyc7XG5cblxuZXhwb3J0IGNvbnN0IEFQUF9GT1JNX0VSUk9SX0kxOE5fS0VZUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxPYmplY3RNYXA8c3RyaW5nPj4oJ2FwcEZvcm1FcnJvcktleXMnKTtcblxuZXhwb3J0IGludGVyZmFjZSBJRm9ybUNvbnRyb2xQYXRoVHJhbnNsYXRvciB7XG4gIHRyYW5zbGF0ZUNvbnRyb2xQYXRoOiAoY29udHJvbFBhdGg6IHN0cmluZykgPT4gc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1FcnJvclRyYW5zbGF0b3JPcHRpb25zIHtcbiAgaTE4blByZWZpeD86IHN0cmluZztcbiAgY29udHJvbFBhdGhUcmFuc2xhdG9yPzogSUZvcm1Db250cm9sUGF0aFRyYW5zbGF0b3I7XG4gIHNlcGFyYXRvcj86IHN0cmluZztcbiAgcmVjdXJzaXZlPzogYm9vbGVhbjtcbn1cblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgRm9ybUVycm9yVHJhbnNsYXRvciBpbXBsZW1lbnRzIElGb3JtQ29udHJvbFBhdGhUcmFuc2xhdG9yIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IGVycm9ySTE4bktleXM6IE9iamVjdE1hcDxzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0ZPUk1fRVJST1JfSTE4Tl9LRVlTKSBlcnJvckkxOG5LZXlzOiBPYmplY3RNYXA8c3RyaW5nPlxuICApIHtcbiAgICB0aGlzLmVycm9ySTE4bktleXMgPSB7XG4gICAgICAuLi5TaGFyZWRWYWxpZGF0b3JzLkkxOE5fRVJST1JfS0VZUyxcbiAgICAgIC4uLmVycm9ySTE4bktleXNcbiAgICB9O1xuICB9XG5cbiAgdHJhbnNsYXRlRm9ybUVycm9ycyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIG9wdHM/OiBGb3JtRXJyb3JUcmFuc2xhdG9yT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgaWYgKCFjb250cm9sIHx8ICFjb250cm9sLmludmFsaWQpIHJldHVybiAnJztcblxuICAgIGNvbnN0IHNlcGFyYXRvciA9IG9wdHMgJiYgb3B0cy5zZXBhcmF0b3IgfHwgJywgJztcbiAgICBjb25zdCByZWN1cnNpdmUgPSAhb3B0cyB8fCBvcHRzLnJlY3Vyc2l2ZSAhPT0gZmFsc2U7XG4gICAgY29uc3QgZXJyb3JzID0gQXBwRm9ybVV0aWxzLmdldEZvcm1FcnJvcnMoY29udHJvbCwge3JlY3Vyc2l2ZX0pO1xuICAgIHJldHVybiBlcnJvcnMgJiYgT2JqZWN0LmtleXMoZXJyb3JzKS5yZWR1Y2UoKHJlcywgcGF0aCkgPT4ge1xuXG4gICAgICBjb25zdCBjaGlsZENvbnRyb2wgPSBjb250cm9sLmdldChwYXRoKTtcbiAgICAgIC8vIFNob3VsZCBiZSBhIGNvbnRyb2wgbWFwIG9mIGVycm9yc1xuICAgICAgaWYgKGNoaWxkQ29udHJvbCkge1xuICAgICAgICAvLyBUcnkgdG8gY29udmVydCB0aGUgY29udHJvbCBwYXRoXG4gICAgICAgIGNvbnN0IGkxOG5QYXRoID0gdGhpcy50cmFuc2xhdGVDb250cm9sUGF0aChwYXRoLCBvcHRzKTtcblxuICAgICAgICAvLyBPSywgd2UgaGF2ZSBhIGZpZWxkIG5hbWU6IHVzZSBpdFxuICAgICAgICBjb25zdCBjb2x1bW5FcnJvcnMgPSBPYmplY3Qua2V5cyhjaGlsZENvbnRyb2wuZXJyb3JzKS5tYXAoZXJyb3JLZXkgPT4gdGhpcy50cmFuc2xhdGVFcnJvcihlcnJvcktleSwgY2hpbGRDb250cm9sLmVycm9yc1tlcnJvcktleV0pKTtcbiAgICAgICAgaWYgKGlzRW1wdHlBcnJheShjb2x1bW5FcnJvcnMpKSByZXR1cm4gcmVzO1xuICAgICAgICAvLyBBZGQgc2VwYXJhdG9yXG4gICAgICAgIGlmIChyZXMubGVuZ3RoKSByZXMgKz0gc2VwYXJhdG9yO1xuICAgICAgICByZXR1cm4gcmVzICsgaTE4blBhdGggKyAnOiAnICsgY29sdW1uRXJyb3JzLmpvaW4oc2VwYXJhdG9yKTtcbiAgICAgIH1cblxuICAgICAgLy8gT3IgdHJ5IGFzIGdsb2JhbCBmb3JtIGVycm9yXG4gICAgICBjb25zdCBmb3JtRXJyb3IgPSB0aGlzLnRyYW5zbGF0ZUVycm9yKHBhdGgsIGVycm9yc1twYXRoXSk7XG4gICAgICBpZiAoaXNOaWwoZm9ybUVycm9yKSkgcmV0dXJuIHJlcztcbiAgICAgIHJldHVybiByZXMgKyAocmVzLmxlbmd0aCA/IHNlcGFyYXRvciA6ICcnKSArIGZvcm1FcnJvcjtcbiAgICB9LCAnJyk7XG4gIH1cblxuICB0cmFuc2xhdGVFcnJvcnMoZXJyb3JzOiBGb3JtRXJyb3JzLCBvcHRzPzogRm9ybUVycm9yVHJhbnNsYXRvck9wdGlvbnMpOiBzdHJpbmcge1xuXG4gICAgY29uc3Qgc2VwYXJhdG9yID0gb3B0cyAmJiBvcHRzLnNlcGFyYXRvciB8fCAnLCAnO1xuICAgIHJldHVybiBlcnJvcnMgJiYgT2JqZWN0LmtleXMoZXJyb3JzKS5yZWR1Y2UoKHJlcywgcGF0aCkgPT4ge1xuXG4gICAgICBjb25zdCBwYXRoRXJyb3JzID0gZXJyb3JzW3BhdGhdO1xuICAgICAgLy8gU2hvdWxkIGJlIGEgY29udHJvbCBtYXAgb2YgZXJyb3JzXG5cbiAgICAgIGlmIChwYXRoRXJyb3JzKSB7XG4gICAgICAgIC8vIFRyeSB0byBjb252ZXJ0IHRoZSBjb250cm9sIHBhdGhcbiAgICAgICAgY29uc3QgaTE4blBhdGggPSB0aGlzLnRyYW5zbGF0ZUNvbnRyb2xQYXRoKHBhdGgsIG9wdHMpO1xuXG4gICAgICAgIC8vIE9LLCB3ZSBoYXZlIGEgZmllbGQgbmFtZTogdXNlIGl0XG4gICAgICAgIGNvbnN0IGNvbHVtbkVycm9ycyA9IE9iamVjdC5rZXlzKHBhdGhFcnJvcnMpLm1hcChlcnJvcktleSA9PiB0aGlzLnRyYW5zbGF0ZUVycm9yKGVycm9yS2V5LCBwYXRoRXJyb3JzW2Vycm9yS2V5XSkpO1xuICAgICAgICBpZiAoaXNFbXB0eUFycmF5KGNvbHVtbkVycm9ycykpIHJldHVybiByZXM7XG4gICAgICAgIC8vIEFkZCBzZXBhcmF0b3JcbiAgICAgICAgaWYgKHJlcy5sZW5ndGgpIHJlcyArPSBzZXBhcmF0b3I7XG4gICAgICAgIHJldHVybiByZXMgKyBpMThuUGF0aCArICc6ICcgKyBjb2x1bW5FcnJvcnMuam9pbihzZXBhcmF0b3IpO1xuICAgICAgfVxuXG4gICAgICAvLyBPciB0cnkgYXMgZ2xvYmFsIGZvcm0gZXJyb3JcbiAgICAgIGNvbnN0IGZvcm1FcnJvciA9IHRoaXMudHJhbnNsYXRlRXJyb3IocGF0aCwgcGF0aEVycm9ycyk7XG4gICAgICBpZiAoaXNOaWwoZm9ybUVycm9yKSkgcmV0dXJuIHJlcztcbiAgICAgIHJldHVybiByZXMgKyAocmVzLmxlbmd0aCA/IHNlcGFyYXRvciA6ICcnKSArIGZvcm1FcnJvcjtcbiAgICB9LCAnJyk7XG4gIH1cblxuICB0cmFuc2xhdGVDb250cm9sUGF0aChwYXRoOiBzdHJpbmcsIG9wdHM/OiBGb3JtRXJyb3JUcmFuc2xhdG9yT3B0aW9ucyk6IHN0cmluZ3tcbiAgICBpZiAob3B0cz8uY29udHJvbFBhdGhUcmFuc2xhdG9yKSB7XG4gICAgICByZXR1cm4gb3B0cz8uY29udHJvbFBhdGhUcmFuc2xhdG9yLnRyYW5zbGF0ZUNvbnRyb2xQYXRoKHBhdGgpO1xuICAgIH1cbiAgICBjb25zdCBpMThuS2V5ID0gKG9wdHMgJiYgb3B0cy5pMThuUHJlZml4IHx8ICcnKSArIGNoYW5nZUNhc2VUb1VuZGVyc2NvcmUocGF0aCkudG9VcHBlckNhc2UoKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChpMThuS2V5KTtcbiAgfVxuXG4gIHRyYW5zbGF0ZUVycm9yKGVycm9yS2V5OiBzdHJpbmcsIGVycm9yQ29udGVudD86IGFueSkge1xuXG4gICAgY29uc3QgaTE4bktleSA9IHRoaXMuZXJyb3JJMThuS2V5c1tlcnJvcktleV1cbiAgICAgIC8vIFRyeSB0byBnZW5lcmF0ZSBhIHN0YW5kYXJkIGVycm9yIGtleSwgbGlrZSAnRVJST1IuRklFTERfeHh4X3h4eCdcbiAgICAgIHx8ICgnRVJST1IuRklFTERfJyArIGNoYW5nZUNhc2VUb1VuZGVyc2NvcmUoZXJyb3JLZXkpLnRvVXBwZXJDYXNlKCkpO1xuXG4gICAgbGV0IGkxOG5NZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChpMThuS2V5LCBlcnJvckNvbnRlbnQpO1xuICAgIGlmIChpMThuS2V5ICE9PSBpMThuTWVzc2FnZSkgcmV0dXJuIGkxOG5NZXNzYWdlO1xuXG4gICAgLy8gVHJ5IHRvIHVzZSB0aGUgZXJyb3IgY29udGVudCwgYXMgYW4gaTE4biBrZXlcbiAgICBpZiAodHlwZW9mIGVycm9yQ29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGkxOG5NZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChlcnJvckNvbnRlbnQpO1xuICAgICAgaWYgKGVycm9yQ29udGVudCAhPT0gaTE4bk1lc3NhZ2UpIHJldHVybiBpMThuTWVzc2FnZTtcbiAgICB9XG5cbiAgICAvLyBOb3QgdHJhbnNsYXRlZDogc2hvdyBlcnJvclxuICAgIGNvbnNvbGUuZXJyb3IoYFtmb3JtLWVycm9yLWFkYXB0ZXJdIENhbm5vdCB0cmFuc2xhdGUgZXJyb3Iga2V5ICcke2Vycm9yS2V5fScuIFBsZWFzZSBhZGQgbW9yZSBmb3JtRXJyb3JzS2V5IGludG8gQVBQX0ZPUk1fRVJST1JfSTE4Tl9LRVlTIGluamVjdGlvbiB0b2tlbmApO1xuXG4gICAgcmV0dXJuIGVycm9yS2V5O1xuICB9XG59XG4iXX0=
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lcnJvci1hZGFwdGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvdmFsaWRhdG9yL2Zvcm0tZXJyb3ItYWRhcHRlci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7QUFLaEQsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxjQUFjLENBQW9CLGtCQUFrQixDQUFDLENBQUM7QUFrQmxHLE1BQU0sT0FBTyxtQkFBbUI7SUFJcEI7SUFDQTtJQUpPLGFBQWEsQ0FBb0I7SUFFbEQsWUFDVSxTQUEyQixFQUMzQixnQkFBeUMsRUFDSCxhQUFnQztRQUZ0RSxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBR2pELElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDbkIsR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlO1lBQ25DLEdBQUcsYUFBYTtTQUNqQixDQUFDO0lBQ0osQ0FBQztJQUVELG1CQUFtQixDQUFDLE9BQXdCLEVBQUUsSUFBZ0M7UUFDNUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFNUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQztRQUNuRCxNQUFNLFNBQVMsR0FBRyxDQUFD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LE1BQU0sT0FBTyxHQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO1lBQzVCLG1FQUFtRTtZQUNuRSxjQUFjLEdBQUcsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFbEUsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2hFLElBQUksT0FBTyxLQUFLLFdBQVc7WUFBRSxPQUFPLFdBQVcsQ0FBQztRQUVoRCwrQ0FBK0M7UUFDL0MsSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNyQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbkQsSUFBSSxZQUFZLEtBQUssV0FBVztnQkFBRSxPQUFPLFdBQVcsQ0FBQztRQUN2RCxDQUFDO1FBRUQsNkJBQTZCO1FBQzdCLE9BQU8sQ0FBQyxLQUFLLENBQ1gsb0RBQW9ELFFBQVEsZ0ZBQWdGLENBQzdJLENBQUM7UUFFRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO3VHQTFHVSxtQkFBbUIseUZBTVIsd0JBQXdCOzJHQU5uQyxtQkFBbUIsY0FETixNQUFNOzsyRkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBTzdCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2hhbmdlQ2FzZVRvVW5kZXJzY29yZSwgaXNFbXB0eUFycmF5LCBpc05pbCB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQXBwRm9ybVV0aWxzIH0gZnJvbSAnLi4vLi4vY29yZS9mb3JtL2Zvcm0udXRpbHMnO1xuaW1wb3J0IHsgU2hhcmVkVmFsaWRhdG9ycyB9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBPYmplY3RNYXAgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBGb3JtRXJyb3JzIH0gZnJvbSAnLi4vZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90cmFuc2xhdGUtY29udGV4dC5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IEFQUF9GT1JNX0VSUk9SX0kxOE5fS0VZUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxPYmplY3RNYXA8c3RyaW5nPj4oJ2FwcEZvcm1FcnJvcktleXMnKTtcblxuZXhwb3J0IGludGVyZmFjZSBJRm9ybVBhdGhUcmFuc2xhdG9yT3B0aW9ucyB7XG4gIGkxOG5QcmVmaXg/OiBzdHJpbmc7XG4gIGkxOG5TdWZmaXg/OiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSUZvcm1QYXRoVHJhbnNsYXRvcjxPIGV4dGVuZHMgSUZvcm1QYXRoVHJhbnNsYXRvck9wdGlvbnMgPSBJRm9ybVBhdGhUcmFuc2xhdG9yT3B0aW9ucz4ge1xuICB0cmFuc2xhdGVGb3JtUGF0aDogKHBhdGg6IHN0cmluZywgb3B0cz86IE8pID0+IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JtRXJyb3JUcmFuc2xhdGVPcHRpb25zIGV4dGVuZHMgSUZvcm1QYXRoVHJhbnNsYXRvck9wdGlvbnMge1xuICBwYXRoVHJhbnNsYXRvcj86IElGb3JtUGF0aFRyYW5zbGF0b3I7XG4gIHNlcGFyYXRvcj86IHN0cmluZztcbiAgcmVjdXJzaXZlPzogYm9vbGVhbjtcbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBGb3JtRXJyb3JUcmFuc2xhdG9yIGltcGxlbWVudHMgSUZvcm1QYXRoVHJhbnNsYXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JJMThuS2V5czogT2JqZWN0TWFwPHN0cmluZz47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVDb250ZXh0OiBUcmFuc2xhdGVDb250ZXh0U2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9GT1JNX0VSUk9SX0kxOE5fS0VZUykgZXJyb3JJMThuS2V5czogT2JqZWN0TWFwPHN0cmluZz5cbiAgKSB7XG4gICAgdGhpcy5lcnJvckkxOG5LZXlzID0ge1xuICAgICAgLi4uU2hhcmVkVmFsaWRhdG9ycy5JMThOX0VSUk9SX0tFWVMsXG4gICAgICAuLi5lcnJvckkxOG5LZXlzLFxuICAgIH07XG4gIH1cblxuICB0cmFuc2xhdGVGb3JtRXJyb3JzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgb3B0cz86IEZvcm1FcnJvclRyYW5zbGF0ZU9wdGlvbnMpOiBzdHJpbmcge1xuICAgIGlmICghY29udHJvbCB8fCAhY29udHJvbC5pbnZhbGlkKSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCBzZXBhcmF0b3IgPSAob3B0cyAmJiBvcHRzLnNlcGFyYXRvcikgfHwgJywgJztcbiAgICBjb25zdCByZWN1cnNpdmUgPSAhb3B0cyB8fCBvcHRzLnJlY3Vyc2l2ZSAhPT0gZmFsc2U7XG4gICAgY29uc3QgZXJyb3JzID0gQXBwRm9ybVV0aWxzLmdldEZvcm1FcnJvcnMoY29udHJvbCwgeyByZWN1cnNpdmUgfSk7XG4gICAgcmV0dXJuIChcbiAgICAgIGVycm9ycyAmJlxuICAgICAgT2JqZWN0LmtleXMoZXJyb3JzKS5yZWR1Y2UoKHJlcywgcGF0aCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZENvbnRyb2wgPSBjb250cm9sLmdldChwYXRoKTtcbiAgICAgICAgLy8gU2hvdWxkIGJlIGEgY29udHJvbCBtYXAgb2YgZXJyb3JzXG4gICAgICAgIGlmIChjaGlsZENvbnRyb2wpIHtcbiAgICAgICAgICAvLyBUcnkgdG8gY29udmVydCB0aGUgY29udHJvbCBwYXRoXG4gICAgICAgICAgY29uc3QgaTE4blBhdGggPSB0aGlzLnRyYW5zbGF0ZUZvcm1QYXRoKHBhdGgsIG9wdHMpO1xuXG4gICAgICAgICAgLy8gT0ssIHdlIGhhdmUgYSBmaWVsZCBuYW1lOiB1c2UgaXRcbiAgICAgICAgICBjb25zdCBjb2x1bW5FcnJvcnMgPSBPYmplY3Qua2V5cyhjaGlsZENvbnRyb2wuZXJyb3JzKS5tYXAoKGVycm9yS2V5KSA9PiB0aGlzLnRyYW5zbGF0ZUVycm9yKGVycm9yS2V5LCBjaGlsZENvbnRyb2wuZXJyb3JzW2Vycm9yS2V5XSkpO1xuICAgICAgICAgIGlmIChpc0VtcHR5QXJyYXkoY29sdW1uRXJyb3JzKSkgcmV0dXJuIHJlcztcbiAgICAgICAgICAvLyBBZGQgc2VwYXJhdG9yXG4gICAgICAgICAgaWYgKHJlcy5sZW5ndGgpIHJlcyArPSBzZXBhcmF0b3I7XG4gICAgICAgICAgcmV0dXJuIHJlcyArIGkxOG5QYXRoICsgJzogJyArIGNvbHVtbkVycm9ycy5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPciB0cnkgYXMgZ2xvYmFsIGZvcm0gZXJyb3JcbiAgICAgICAgY29uc3QgZm9ybUVycm9yID0gdGhpcy50cmFuc2xhdGVFcnJvcihwYXRoLCBlcnJvcnNbcGF0aF0pO1xuICAgICAgICBpZiAoaXNOaWwoZm9ybUVycm9yKSkgcmV0dXJuIHJlcztcbiAgICAgICAgcmV0dXJuIHJlcyArIChyZXMubGVuZ3RoID8gc2VwYXJhdG9yIDogJycpICsgZm9ybUVycm9yO1xuICAgICAgfSwgJycpXG4gICAgKTtcbiAgfVxuXG4gIHRyYW5zbGF0ZUVycm9ycyhlcnJvcnM6IEZvcm1FcnJvcnMsIG9wdHM/OiBGb3JtRXJyb3JUcmFuc2xhdGVPcHRpb25zKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZXBhcmF0b3IgPSAob3B0cyAmJiBvcHRzLnNlcGFyYXRvcikgfHwgJywgJztcbiAgICByZXR1cm4gKFxuICAgICAgZXJyb3JzICYmXG4gICAgICBPYmplY3Qua2V5cyhlcnJvcnMpLnJlZHVjZSgocmVzLCBwYXRoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdGhFcnJvcnMgPSBlcnJvcnNbcGF0aF07XG4gICAgICAgIC8vIFNob3VsZCBiZSBhIGNvbnRyb2wgbWFwIG9mIGVycm9yc1xuXG4gICAgICAgIGlmIChwYXRoRXJyb3JzKSB7XG4gICAgICAgICAgLy8gVHJ5IHRvIGNvbnZlcnQgdGhlIGNvbnRyb2wgcGF0aFxuICAgICAgICAgIGNvbnN0IGkxOG5QYXRoID0gdGhpcy50cmFuc2xhdGVGb3JtUGF0aChwYXRoLCBvcHRzKTtcblxuICAgICAgICAgIC8vIE9LLCB3ZSBoYXZlIGEgZmllbGQgbmFtZTogdXNlIGl0XG4gICAgICAgICAgY29uc3QgY29sdW1uRXJyb3JzID0gT2JqZWN0LmtleXMocGF0aEVycm9ycykubWFwKChlcnJvcktleSkgPT4gdGhpcy50cmFuc2xhdGVFcnJvcihlcnJvcktleSwgcGF0aEVycm9yc1tlcnJvcktleV0pKTtcbiAgICAgICAgICBpZiAoaXNFbXB0eUFycmF5KGNvbHVtbkVycm9ycykpIHJldHVybiByZXM7XG4gICAgICAgICAgLy8gQWRkIHNlcGFyYXRvclxuICAgICAgICAgIGlmIChyZXMubGVuZ3RoKSByZXMgKz0gc2VwYXJhdG9yO1xuICAgICAgICAgIHJldHVybiByZXMgKyBpMThuUGF0aCArICc6ICcgKyBjb2x1bW5FcnJvcnMuam9pbihzZXBhcmF0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3IgdHJ5IGFzIGdsb2JhbCBmb3JtIGVycm9yXG4gICAgICAgIGNvbnN0IGZvcm1FcnJvciA9IHRoaXMudHJhbnNsYXRlRXJyb3IocGF0aCwgcGF0aEVycm9ycyk7XG4gICAgICAgIGlmIChpc05pbChmb3JtRXJyb3IpKSByZXR1cm4gcmVzO1xuICAgICAgICByZXR1cm4gcmVzICsgKHJlcy5sZW5ndGggPyBzZXBhcmF0b3IgOiAnJykgKyBmb3JtRXJyb3I7XG4gICAgICB9LCAnJylcbiAgICApO1xuICB9XG5cbiAgdHJhbnNsYXRlRm9ybVBhdGgocGF0aDogc3RyaW5nLCBvcHRzPzogRm9ybUVycm9yVHJhbnNsYXRlT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgLy8gRGVsZWdhdGUgdG8gYSBwYXRoIHRyYW5zbGF0b3IsIGlmIGFueVxuICAgIGlmIChvcHRzPy5wYXRoVHJhbnNsYXRvciAmJiBvcHRzLnBhdGhUcmFuc2xhdG9yICE9PSB0aGlzKSB7XG4gICAgICByZXR1cm4gb3B0cy5wYXRoVHJhbnNsYXRvci50cmFuc2xhdGVGb3JtUGF0aChwYXRoLCB7IC4uLm9wdHMsIHBhdGhUcmFuc2xhdG9yOiBudWxsIC8qYXZvaWQgcmVjdXJzaXZlIGNhbGwqLyB9KTtcbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0IHRyYW5zbGF0aW9uXG4gICAgY29uc3QgZmllbGROYW1lID0gcGF0aC5zdWJzdHJpbmcocGF0aC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgY29uc3QgaTE4bktleSA9IChvcHRzPy5pMThuUHJlZml4IHx8ICcnKSArIGNoYW5nZUNhc2VUb1VuZGVyc2NvcmUoZmllbGROYW1lKS50b1VwcGVyQ2FzZSgpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZUNvbnRleHQuaW5zdGFudChpMThuS2V5LCBvcHRzPy5pMThuU3VmZml4KTtcbiAgfVxuXG4gIHRyYW5zbGF0ZUVycm9yKGVycm9yS2V5OiBzdHJpbmcsIGVycm9yQ29udGVudD86IGFueSkge1xuICAgIGNvbnN0IGkxOG5LZXkgPVxuICAgICAgdGhpcy5lcnJvckkxOG5LZXlzW2Vycm9yS2V5XSB8fFxuICAgICAgLy8gVHJ5IHRvIGdlbmVyYXRlIGEgc3RhbmRhcmQgZXJyb3Iga2V5LCBsaWtlICdFUlJPUi5GSUVMRF94eHhfeHh4J1xuICAgICAgJ0VSUk9SLkZJRUxEXycgKyBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlKGVycm9yS2V5KS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgbGV0IGkxOG5NZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChpMThuS2V5LCBlcnJvckNvbnRlbnQpO1xuICAgIGlmIChpMThuS2V5ICE9PSBpMThuTWVzc2FnZSkgcmV0dXJuIGkxOG5NZXNzYWdlO1xuXG4gICAgLy8gVHJ5IHRvIHVzZSB0aGUgZXJyb3IgY29udGVudCwgYXMgYW4gaTE4biBrZXlcbiAgICBpZiAodHlwZW9mIGVycm9yQ29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGkxOG5NZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChlcnJvckNvbnRlbnQpO1xuICAgICAgaWYgKGVycm9yQ29udGVudCAhPT0gaTE4bk1lc3NhZ2UpIHJldHVybiBpMThuTWVzc2FnZTtcbiAgICB9XG5cbiAgICAvLyBOb3QgdHJhbnNsYXRlZDogc2hvdyBlcnJvclxuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBgW2Zvcm0tZXJyb3ItYWRhcHRlcl0gQ2Fubm90IHRyYW5zbGF0ZSBlcnJvciBrZXkgJyR7ZXJyb3JLZXl9Jy4gUGxlYXNlIGFkZCBtb3JlIGZvcm1FcnJvcnNLZXkgaW50byBBUFBfRk9STV9FUlJPUl9JMThOX0tFWVMgaW5qZWN0aW9uIHRva2VuYFxuICAgICk7XG5cbiAgICByZXR1cm4gZXJyb3JLZXk7XG4gIH1cbn1cbiJdfQ==