@sumaris-net/ngx-components 4.0.0-rc1 → 4.0.0-rc11

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 (324) hide show
  1. package/esm2022/public_api.mjs +5 -2
  2. package/esm2022/src/app/admin/admin-routing.module.mjs +5 -5
  3. package/esm2022/src/app/admin/admin.module.mjs +6 -6
  4. package/esm2022/src/app/admin/services/filter/person.filter.mjs +3 -2
  5. package/esm2022/src/app/admin/services/person.service.mjs +5 -5
  6. package/esm2022/src/app/admin/services/validator/person.validator.mjs +5 -5
  7. package/esm2022/src/app/admin/users/users.mjs +19 -28
  8. package/esm2022/src/app/admin/users/users.module.mjs +5 -5
  9. package/esm2022/src/app/core/about/about.modal.mjs +6 -6
  10. package/esm2022/src/app/core/about/about.module.mjs +5 -5
  11. package/esm2022/src/app/core/account/account.module.mjs +5 -5
  12. package/esm2022/src/app/core/account/account.page.mjs +23 -21
  13. package/esm2022/src/app/core/account/new-token.modal.mjs +20 -15
  14. package/esm2022/src/app/core/account/token.table.mjs +25 -20
  15. package/esm2022/src/app/core/auth/auth.form.mjs +6 -6
  16. package/esm2022/src/app/core/auth/auth.modal.mjs +5 -5
  17. package/esm2022/src/app/core/auth/auth.module.mjs +5 -5
  18. package/esm2022/src/app/core/core.module.mjs +5 -5
  19. package/esm2022/src/app/core/core.testing.module.mjs +5 -5
  20. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +6 -6
  21. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +5 -5
  22. package/esm2022/src/app/core/form/entity/editor.class.mjs +18 -13
  23. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +6 -6
  24. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +17 -11
  25. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +5 -5
  26. package/esm2022/src/app/core/form/entity/entity.module.mjs +5 -5
  27. package/esm2022/src/app/core/form/form.class.mjs +5 -5
  28. package/esm2022/src/app/core/form/form.module.mjs +5 -5
  29. package/esm2022/src/app/core/form/list/list.form.mjs +6 -6
  30. package/esm2022/src/app/core/form/list/list.module.mjs +5 -5
  31. package/esm2022/src/app/core/form/properties/properties.form.mjs +7 -7
  32. package/esm2022/src/app/core/form/properties/properties.module.mjs +5 -5
  33. package/esm2022/src/app/core/form/properties/properties.table.mjs +12 -12
  34. package/esm2022/src/app/core/form/properties/property.validator.mjs +5 -5
  35. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +5 -5
  36. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +5 -5
  37. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +5 -5
  38. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +5 -5
  39. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +7 -7
  40. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +6 -11
  41. package/esm2022/src/app/core/graphql/graphql.module.mjs +6 -6
  42. package/esm2022/src/app/core/graphql/graphql.service.mjs +19 -18
  43. package/esm2022/src/app/core/home/home.mjs +7 -8
  44. package/esm2022/src/app/core/home/home.module.mjs +5 -5
  45. package/esm2022/src/app/core/icon/icon.component.mjs +4 -4
  46. package/esm2022/src/app/core/icon/icon.module.mjs +5 -5
  47. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +6 -6
  48. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +5 -5
  49. package/esm2022/src/app/core/menu/menu.component.mjs +16 -12
  50. package/esm2022/src/app/core/menu/menu.model.mjs +3 -2
  51. package/esm2022/src/app/core/menu/menu.module.mjs +5 -5
  52. package/esm2022/src/app/core/menu/menu.service.mjs +13 -7
  53. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +5 -5
  54. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +5 -5
  55. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +5 -5
  56. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +5 -5
  57. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +5 -5
  58. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +5 -5
  59. package/esm2022/src/app/core/peer/select-peer.modal.mjs +8 -7
  60. package/esm2022/src/app/core/peer/select-peer.module.mjs +5 -5
  61. package/esm2022/src/app/core/register/register-confirm.page.mjs +5 -5
  62. package/esm2022/src/app/core/register/register.form.mjs +6 -6
  63. package/esm2022/src/app/core/register/register.modal.mjs +5 -5
  64. package/esm2022/src/app/core/register/register.module.mjs +5 -5
  65. package/esm2022/src/app/core/services/account.service.mjs +52 -26
  66. package/esm2022/src/app/core/services/auth-guard.service.mjs +6 -6
  67. package/esm2022/src/app/core/services/base-entity-service.class.mjs +5 -5
  68. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +6 -6
  69. package/esm2022/src/app/core/services/config/core.config.mjs +7 -7
  70. package/esm2022/src/app/core/services/config.service.mjs +15 -13
  71. package/esm2022/src/app/core/services/crypto.service.mjs +4 -4
  72. package/esm2022/src/app/core/services/local-settings.service.mjs +6 -6
  73. package/esm2022/src/app/core/services/model/account.model.mjs +5 -3
  74. package/esm2022/src/app/core/services/model/config.model.mjs +8 -6
  75. package/esm2022/src/app/core/services/model/department.model.mjs +3 -2
  76. package/esm2022/src/app/core/services/model/peer.model.mjs +3 -2
  77. package/esm2022/src/app/core/services/model/person.model.mjs +3 -2
  78. package/esm2022/src/app/core/services/model/referential.model.mjs +7 -3
  79. package/esm2022/src/app/core/services/model/token.model.mjs +8 -3
  80. package/esm2022/src/app/core/services/network.service.mjs +60 -42
  81. package/esm2022/src/app/core/services/network.types.mjs +1 -1
  82. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +9 -9
  83. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +5 -5
  84. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +5 -5
  85. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +9 -9
  86. package/esm2022/src/app/core/services/platform.service.mjs +23 -12
  87. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +6 -6
  88. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +1 -1
  89. package/esm2022/src/app/core/services/testing/referential.validator.mjs +5 -5
  90. package/esm2022/src/app/core/services/validator/account.validator.mjs +5 -5
  91. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +5 -5
  92. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +5 -5
  93. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +5 -5
  94. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +5 -5
  95. package/esm2022/src/app/core/settings/settings.module.mjs +5 -5
  96. package/esm2022/src/app/core/settings/settings.page.mjs +7 -7
  97. package/esm2022/src/app/core/table/actions-column.component.mjs +5 -5
  98. package/esm2022/src/app/core/table/async-table.class.mjs +5 -5
  99. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +5 -5
  100. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +5 -5
  101. package/esm2022/src/app/core/table/memory-table.class.mjs +5 -5
  102. package/esm2022/src/app/core/table/table-select-columns.component.mjs +5 -5
  103. package/esm2022/src/app/core/table/table.class.mjs +9 -5
  104. package/esm2022/src/app/core/table/table.module.mjs +5 -5
  105. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +5 -5
  106. package/esm2022/src/app/core/table/testing/table.testing.mjs +7 -7
  107. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +5 -5
  108. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +5 -5
  109. package/esm2022/src/app/core/table/testing/table2.testing.mjs +7 -7
  110. package/esm2022/src/app/shared/audio/audio.mjs +6 -6
  111. package/esm2022/src/app/shared/audio/audio.testing.mjs +5 -5
  112. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +5 -5
  113. package/esm2022/src/app/shared/capacitor/keyboard.mjs +5 -5
  114. package/esm2022/src/app/shared/debug/debug.component.mjs +6 -6
  115. package/esm2022/src/app/shared/debug/debug.module.mjs +5 -5
  116. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +5 -5
  117. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +6 -6
  118. package/esm2022/src/app/shared/directives/directives.module.mjs +5 -5
  119. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +4 -4
  120. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +5 -5
  121. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +6 -6
  122. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +6 -6
  123. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +5 -5
  124. package/esm2022/src/app/shared/file/file.service.mjs +6 -6
  125. package/esm2022/src/app/shared/form/field.component.mjs +7 -7
  126. package/esm2022/src/app/shared/form/loading-spinner.mjs +4 -4
  127. package/esm2022/src/app/shared/gesture/gesture-config.mjs +4 -4
  128. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +5 -5
  129. package/esm2022/src/app/shared/help/help.modal.mjs +5 -5
  130. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +8 -9
  131. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +5 -5
  132. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +5 -5
  133. package/esm2022/src/app/shared/http/http.utils.mjs +15 -11
  134. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +6 -6
  135. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +5 -5
  136. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +1 -1
  137. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +5 -5
  138. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +5 -5
  139. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +5 -5
  140. package/esm2022/src/app/shared/image/image.module.mjs +5 -5
  141. package/esm2022/src/app/shared/image/image.service.mjs +6 -6
  142. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +1 -1
  143. package/esm2022/src/app/shared/logging/logging-service.class.mjs +6 -6
  144. package/esm2022/src/app/shared/logging/logging-service.module.mjs +5 -5
  145. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +9 -9
  146. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +5 -5
  147. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +6 -6
  148. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +6 -6
  149. package/esm2022/src/app/shared/material/badge/badge.module.mjs +5 -5
  150. package/esm2022/src/app/shared/material/badge/badge.test.mjs +5 -5
  151. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +5 -5
  152. package/esm2022/src/app/shared/material/boolean/material-boolean2.mjs +6 -6
  153. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +7 -7
  154. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +5 -5
  155. package/esm2022/src/app/shared/material/chips/chips.module.mjs +5 -5
  156. package/esm2022/src/app/shared/material/chips/material.chips.mjs +7 -7
  157. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +5 -5
  158. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +5 -5
  159. package/esm2022/src/app/shared/material/datetime/material.date.mjs +8 -8
  160. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +7 -7
  161. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +36 -10
  162. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +15 -8
  163. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +8 -7
  164. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +5 -5
  165. package/esm2022/src/app/shared/material/duration/duration.module.mjs +5 -5
  166. package/esm2022/src/app/shared/material/duration/material.duration.mjs +6 -6
  167. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +5 -5
  168. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +35 -10
  169. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +5 -5
  170. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +5 -5
  171. package/esm2022/src/app/shared/material/material.module.mjs +14 -9
  172. package/esm2022/src/app/shared/material/material.testing.module.mjs +16 -5
  173. package/esm2022/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +5 -5
  174. package/esm2022/src/app/shared/material/numpad/numpad.component.mjs +5 -5
  175. package/esm2022/src/app/shared/material/numpad/numpad.container.mjs +5 -5
  176. package/esm2022/src/app/shared/material/numpad/numpad.content.mjs +4 -4
  177. package/esm2022/src/app/shared/material/numpad/numpad.directive.mjs +5 -5
  178. package/esm2022/src/app/shared/material/numpad/numpad.dom-service.mjs +5 -5
  179. package/esm2022/src/app/shared/material/numpad/numpad.module.mjs +5 -5
  180. package/esm2022/src/app/shared/material/numpad/testing/numpad.test.mjs +5 -5
  181. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +5 -5
  182. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +5 -5
  183. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +6 -6
  184. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +5 -5
  185. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +5 -5
  186. package/esm2022/src/app/shared/material/testing/common.test.mjs +5 -5
  187. package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +31 -0
  188. package/esm2022/src/app/shared/material/text/text-form.component.mjs +97 -0
  189. package/esm2022/src/app/shared/material/text/text-form.module.mjs +63 -0
  190. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +41 -17
  191. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +1 -1
  192. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +5 -5
  193. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +5 -5
  194. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +25 -25
  195. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +4 -4
  196. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +6 -6
  197. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +9 -9
  198. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +6 -6
  199. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +6 -6
  200. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +4 -4
  201. package/esm2022/src/app/shared/pipes/form.pipes.mjs +21 -21
  202. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +5 -5
  203. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +10 -10
  204. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +13 -13
  205. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +7 -7
  206. package/esm2022/src/app/shared/pipes/math.pipes.mjs +13 -13
  207. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +4 -4
  208. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +5 -5
  209. package/esm2022/src/app/shared/pipes/pipes.module.mjs +5 -5
  210. package/esm2022/src/app/shared/pipes/property.pipes.mjs +9 -9
  211. package/esm2022/src/app/shared/pipes/string.pipes.mjs +31 -31
  212. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +10 -10
  213. package/esm2022/src/app/shared/pipes/types.pipes.mjs +13 -13
  214. package/esm2022/src/app/shared/rx-state.module.mjs +5 -5
  215. package/esm2022/src/app/shared/services/entity-service.class.mjs +1 -1
  216. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +13 -13
  217. package/esm2022/src/app/shared/services/progress-bar.service.mjs +4 -4
  218. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +6 -6
  219. package/esm2022/src/app/shared/services/startable-service.class.mjs +7 -7
  220. package/esm2022/src/app/shared/services/translate-context.service.mjs +5 -5
  221. package/esm2022/src/app/shared/services.mjs +2 -2
  222. package/esm2022/src/app/shared/shared-routing.module.mjs +9 -9
  223. package/esm2022/src/app/shared/shared.module.mjs +27 -13
  224. package/esm2022/src/app/shared/shared.testing.module.mjs +5 -5
  225. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +6 -6
  226. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +5 -5
  227. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +5 -5
  228. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +5 -5
  229. package/esm2022/src/app/shared/storage/storage.service.mjs +6 -6
  230. package/esm2022/src/app/shared/testing/observable.test.mjs +5 -5
  231. package/esm2022/src/app/shared/testing/tests.page.mjs +6 -6
  232. package/esm2022/src/app/shared/toast/toast.testing.mjs +5 -5
  233. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +5 -5
  234. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +5 -5
  235. package/esm2022/src/app/shared/toolbar/toolbar.mjs +7 -7
  236. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +5 -5
  237. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +5 -5
  238. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +5 -5
  239. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +5 -5
  240. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +5 -5
  241. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +6 -6
  242. package/esm2022/src/app/social/job/job.module.mjs +5 -5
  243. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +5 -5
  244. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +6 -6
  245. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +5 -5
  246. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +3 -2
  247. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +6 -6
  248. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +6 -6
  249. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +4 -4
  250. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +5 -5
  251. package/esm2022/src/app/social/message/message.form.mjs +59 -7
  252. package/esm2022/src/app/social/message/message.modal.mjs +21 -13
  253. package/esm2022/src/app/social/message/message.model.mjs +5 -1
  254. package/esm2022/src/app/social/message/message.module.mjs +9 -22
  255. package/esm2022/src/app/social/message/message.service.mjs +33 -11
  256. package/esm2022/src/app/social/social.module.mjs +5 -5
  257. package/esm2022/src/app/social/social.testing.module.mjs +5 -5
  258. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +6 -6
  259. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +6 -6
  260. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +6 -6
  261. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +3 -2
  262. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +5 -5
  263. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +6 -6
  264. package/esm2022/src/app/social/user-event/user-event.module.mjs +5 -5
  265. package/esm2022/src/app/social/user-event/user-event.service.mjs +40 -26
  266. package/esm2022/src/environments/environment.class.mjs +4 -1
  267. package/esm2022/src/environments/environment.loader.mjs +83 -0
  268. package/esm2022/src/environments/environment.mjs +18 -15
  269. package/fesm2022/sumaris-net.ngx-components.mjs +4422 -3975
  270. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  271. package/package.json +31 -6
  272. package/public_api.d.ts +4 -1
  273. package/src/app/core/account/account.page.d.ts +3 -2
  274. package/src/app/core/account/new-token.modal.d.ts +1 -3
  275. package/src/app/core/account/token.table.d.ts +5 -3
  276. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +1 -1
  277. package/src/app/core/form/entity/editor.class.d.ts +1 -1
  278. package/src/app/core/form/entity/entity-editor.class.d.ts +10 -6
  279. package/src/app/core/form/entity/entity-metadata.component.d.ts +1 -1
  280. package/src/app/core/form/text-popover/text-popover.component.d.ts +1 -1
  281. package/src/app/core/form/text-popover/text-popover.module.d.ts +4 -5
  282. package/src/app/core/graphql/graphql.service.d.ts +2 -4
  283. package/src/app/core/graphql/graphql.utils.d.ts +1 -1
  284. package/src/app/core/menu/menu.component.d.ts +6 -2
  285. package/src/app/core/menu/menu.service.d.ts +2 -0
  286. package/src/app/core/services/account.service.d.ts +4 -0
  287. package/src/app/core/services/config/core.config.d.ts +2 -2
  288. package/src/app/core/services/model/referential.model.d.ts +2 -1
  289. package/src/app/core/services/model/token.model.d.ts +1 -0
  290. package/src/app/core/services/network.service.d.ts +11 -7
  291. package/src/app/core/table/table.class.d.ts +1 -0
  292. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +2 -4
  293. package/src/app/shared/http/http.utils.d.ts +1 -0
  294. package/src/app/shared/inputs.d.ts +1 -1
  295. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +1 -1
  296. package/src/app/shared/material/datetime/material.datetime.d.ts +10 -4
  297. package/src/app/shared/material/latlong/material.latlong.d.ts +10 -4
  298. package/src/app/shared/material/material.module.d.ts +2 -1
  299. package/src/app/shared/material/material.testing.module.d.ts +14 -13
  300. package/src/app/shared/material/text/testing/text-form.testing.d.ts +13 -0
  301. package/src/app/{core/form/text-popover → shared/material/text}/text-form.component.d.ts +2 -2
  302. package/src/app/shared/material/text/text-form.module.d.ts +16 -0
  303. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +9 -3
  304. package/src/app/shared/services/entity-service.class.d.ts +1 -1
  305. package/src/app/shared/services/memory-entity-service.class.d.ts +7 -3
  306. package/src/app/shared/services.d.ts +1 -0
  307. package/src/app/shared/shared.module.d.ts +5 -3
  308. package/src/app/social/message/message.form.d.ts +8 -2
  309. package/src/app/social/message/message.modal.d.ts +5 -1
  310. package/src/app/social/message/message.model.d.ts +2 -0
  311. package/src/app/social/message/message.module.d.ts +2 -1
  312. package/src/app/social/message/message.service.d.ts +8 -3
  313. package/src/app/social/user-event/user-event.service.d.ts +5 -0
  314. package/src/assets/environments/environment-test.json +6 -0
  315. package/src/assets/i18n/en-US.json +25 -23
  316. package/src/assets/i18n/en.json +25 -23
  317. package/src/assets/i18n/fr.json +8 -5
  318. package/src/assets/manifest.json +1 -1
  319. package/src/environments/environment.class.d.ts +2 -0
  320. package/src/environments/environment.loader.d.ts +26 -0
  321. package/src/theme/_material.scss +20 -4
  322. package/src/theme/_ngx-components.scss +1 -1
  323. package/src/theme/_ngx-components.table.scss +24 -17
  324. package/esm2022/src/app/core/form/text-popover/text-form.component.mjs +0 -97
@@ -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.24",
6
6
  "default_locale": "fr",
7
7
  "description": "Angular components for building beautiful and responsive Apps",
8
8
  "icons": [{
@@ -8,7 +8,9 @@ export declare class Environment {
8
8
  name: string;
9
9
  version: string;
10
10
  production: boolean;
11
+ externalEnvironmentUrl?: string;
11
12
  baseUrl: string;
13
+ connectionTimeout?: number;
12
14
  sameUrlPeer?: boolean;
13
15
  defaultPeer?: {
14
16
  host: string;
@@ -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
+ }
@@ -1,16 +1,29 @@
1
1
  // --------------------------------------------------
2
2
  // Override material style
3
3
  // --------------------------------------------------
4
- .mat-tab-group.mat-secondary, .mat-tab-nav-bar.mat-secondary {
4
+ .mat-mdc-tab-group.mat-secondary, .mat-mdc-tab-nav-bar.mat-secondary {
5
5
  background-color: var(--ion-color-secondary, $secondary);
6
- .mat-tab-link {
6
+ .mat-mdc-tab-link {
7
7
  color: var(--ion-color-secondary-contrast);
8
8
  --mat-tab-header-label-text-tracking: normal;
9
9
  }
10
10
  }
11
- .mat-tab-group.mat-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary .mat-ink-bar {
11
+ .mat-mdc-tab-group.mat-primary .mat-ink-bar, .mat-mdc-tab-nav-bar.mat-primary .mat-ink-bar {
12
12
  background-color: var(--ion-color-primary, $primary);
13
13
  }
14
+ // Keep some style element that have changed after angular 15 migration
15
+ .mdc-tab {
16
+ min-width: 160px !important;
17
+ }
18
+ .mat-mdc-tab-group, .mat-mdc-tab-nav-bar {
19
+ --mat-tab-header-active-label-text-color: #000000de;
20
+ --mat-tab-header-active-focus-label-text-color: #000000de;
21
+ --mat-tab-header-active-hover-label-text-color: #000000de;
22
+ }
23
+ .mat-form-field-appearance-fill .mat-mdc-select-arrow-wrapper {
24
+ transform: translateY(0px) !important;
25
+ }
26
+
14
27
  // Icon, Button
15
28
  .mat-icon.mat-primary,
16
29
  .mat-icon-button.mat-primary,
@@ -35,6 +48,9 @@
35
48
  }
36
49
 
37
50
  // Badge
51
+ .mdc-tab .mat-badge-content {
52
+ padding-left: 2px;
53
+ }
38
54
  .mat-badge-primary .mat-badge-content {
39
55
  background-color: var(--ion-color-tertiary);
40
56
  color: var(--ion-color-tertiary-contrast);
@@ -124,7 +140,7 @@ mat-icon[slot] {
124
140
  pointer-events: none;
125
141
  }
126
142
 
127
-
143
+ // Form Fields
128
144
  .mat-mdc-form-field-errors {
129
145
  margin-top: -20px;
130
146
 
@@ -847,7 +847,7 @@ mat-button-toggle.mat-button-toggle-checked.mat-button-toggle-disabled {
847
847
  // --------------------------------------------------
848
848
 
849
849
  // --- Allow to hide headers
850
- mat-tab-group.mat-tab-group-header-hidden .mat-tab-header {
850
+ mat-tab-group.mat-tab-group-header-hidden .mat-mdc-tab-header {
851
851
  display: none;
852
852
  }
853
853
 
@@ -22,7 +22,7 @@
22
22
  --mat-table-row-item-label-text-tracking: 0.5px;
23
23
  --mat-form-field-container-text-tracking: 0.5px;
24
24
  --mdc-typography-body1-letter-spacing: 0.0178571429em;
25
- --mat-table-row-item-label-text-size: 16px;
25
+ --mat-table-row-item-label-text-size: 14px;
26
26
 
27
27
  .mat-mdc-header-cell {
28
28
  color: var(--ion-color-primary);
@@ -56,6 +56,8 @@
56
56
  }
57
57
 
58
58
  .mat-mdc-header-row {
59
+ --mat-table-header-headline-size: 12px;
60
+ --mat-table-header-headline-line-height: 12px;
59
61
  height: var(--app-table-header-height, 52px);
60
62
  border-bottom: 1px solid #{$app-table-border-color};
61
63
  }
@@ -214,7 +216,7 @@
214
216
  &.mat-row-selected {
215
217
  background-color: var(--ion-color-secondary100);
216
218
 
217
- &:hover {
219
+ &:not(.mat-row-error):hover {
218
220
  background-color: var(--ion-color-secondary100);
219
221
  }
220
222
 
@@ -270,6 +272,8 @@
270
272
  app-form-field,
271
273
  .mat-mdc-form-field {
272
274
  width: 100%;
275
+ --mat-form-field-container-text-size: 14px;
276
+ --mdc-filled-text-field-label-text-size: var(--mat-form-field-container-text-size);
273
277
  --mat-mdc-form-field-height: calc(var(--mat-row-height) - 2px);
274
278
  // TODO
275
279
  // use -- active- boder : 0;
@@ -318,9 +322,11 @@
318
322
  width: 100%;
319
323
  white-space: nowrap;
320
324
  overflow: inherit;
321
- padding: 0;
325
+
322
326
  padding-top: var(--mat-cell-padding-top) !important;
327
+ padding-right: 0;
323
328
  padding-bottom: 0;
329
+ padding-left: 0;
324
330
 
325
331
  .mat-mdc-input-element,
326
332
  input {
@@ -345,25 +351,26 @@
345
351
  // Suffix
346
352
  .mat-mdc-form-field-icon-suffix {
347
353
  white-space: nowrap;
354
+ }
348
355
 
349
- .mat-mdc-icon-button {
350
- width: 24px;
351
- height: 24px;
352
- padding: 2px 0 0 0;
353
-
354
- ion-icon, .mat-icon {
355
- $font-size: calculateRem(18px);
356
- font-size: $font-size;
357
- line-height: 1.125;
358
- }
359
-
360
- .mat-mdc-button-touch-target {
361
- width: 24px;
362
- }
356
+ // Specific icon button styles
357
+ .mat-mdc-icon-button {
358
+ width: 24px;
359
+ height: 24px;
360
+ padding: 2px 0 0 0;
361
+
362
+ ion-icon, .mat-icon {
363
+ $font-size: calculateRem(18px);
364
+ font-size: $font-size;
365
+ line-height: 1.125;
363
366
  }
364
367
 
368
+ .mat-mdc-button-touch-target {
369
+ width: 24px;
370
+ }
365
371
  }
366
372
 
373
+
367
374
  // Specific behavior for chips
368
375
  &.mat-mdc-form-field-type-mat-chip-grid {
369
376
  --mat-cell-padding-top: 7px;
@@ -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: "16.2.12", 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: "16.2.12", 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: "16.2.12", 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: function () { return [{ 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL3RleHQtcG9wb3Zlci90ZXh0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2Zvcm0vdGV4dC1wb3BvdmVyL3RleHQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBYyxZQUFZLEVBQVksS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFzRCxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7OztBQU9sRCxNQUFNLE9BQU8sUUFBUyxTQUFRLE9BQXVCO0lBaUI3QjtJQUE4QjtJQUFpQztJQWhCNUUsU0FBUyxHQUFHLElBQUksQ0FBQztJQUNqQixXQUFXLENBQVM7SUFDcEIsU0FBUyxHQUFHLElBQUksQ0FBQztJQUNqQixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ25CLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDakIsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNsQixTQUFTLEdBQWdCLElBQUksQ0FBQztJQUU3QixlQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUVoQyxRQUFRLENBQWE7SUFDcEIsU0FBUyxDQUFhO0lBQ2QsaUJBQWlCLENBQXNCO0lBRXZFLE9BQU8sQ0FBcUI7SUFFNUIsWUFBc0IsUUFBa0IsRUFBWSxFQUFxQixFQUFZLFdBQStCO1FBQ2xILEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQURJLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBWSxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUFZLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtJQUVwSCxDQUFDO0lBRUQsUUFBUTtRQUNOLHFCQUFxQjtRQUNyQixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoSCxJQUFJLElBQUksQ0FBQyxTQUFTO1lBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFcEQsa0JBQWtCO1FBQ2xCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ2xDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7U0FDeEUsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBdUIsQ0FBQztRQUN0RCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5CLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQW9CO1FBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QyxJQUFJLElBQUksQ0FBQyxTQUFTO1lBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRVMsWUFBWTtRQUNwQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7d0dBbkRVLFFBQVE7NEZBQVIsUUFBUSxtZ0JBYVIsbUJBQW1CLHVFQ3pCaEMseXZEQTRDQTs7NEZEaENhLFFBQVE7a0JBTHBCLFNBQVM7K0JBQ0UsZUFBZTtnS0FLaEIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFSSxlQUFlO3NCQUF4QixNQUFNO2dCQUVnQixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQ0csU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNVLGlCQUFpQjtzQkFBaEQsU0FBUzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0Nka1RleHRhcmVhQXV0b3NpemV9IGZyb20gJ0Bhbmd1bGFyL2Nkay90ZXh0LWZpZWxkJztcbmltcG9ydCB7QXBwRm9ybX0gZnJvbSAnLi4vZm9ybS5jbGFzcyc7XG5pbXBvcnQge2lzTm90TmlsfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7Zm9jdXNJbnB1dH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2lucHV0cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC10ZXh0LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGV4dC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRleHRGb3JtIGV4dGVuZHMgQXBwRm9ybTx7dGV4dDogc3RyaW5nfT4gaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBzaG93RXJyb3IgPSB0cnVlO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBtdWx0aWxpbmUgPSB0cnVlO1xuICBASW5wdXQoKSBhdXRvSGVpZ2h0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1heExlbmd0aCA9IDIwMDA7XG4gIEBJbnB1dCgpIGF1dG9mb2N1cyA9IGZhbHNlO1xuICBASW5wdXQoKSB2YWxpZGF0b3I6IFZhbGlkYXRvckZuID0gbnVsbDtcblxuICBAT3V0cHV0KCkgdGV4dEFyZWFDaGFuZ2VzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgQFZpZXdDaGlsZCgndGV4dEFyZWEnKSB0ZXh0QXJlYTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndGV4dElucHV0JykgdGV4dElucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKENka1RleHRhcmVhQXV0b3NpemUpIGF1dG9zaXplRGlyZWN0aXZlOiBDZGtUZXh0YXJlYUF1dG9zaXplO1xuXG4gIGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLCBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLCBwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcikge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIENvbXB1dGUgdmFsaWRhdG9yc1xuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBpc05vdE5pbCh0aGlzLm1heExlbmd0aCkgJiYgdGhpcy5tYXhMZW5ndGggPiAwID8gW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMubWF4TGVuZ3RoKV0gOiBbXTtcbiAgICBpZiAodGhpcy52YWxpZGF0b3IpIHZhbGlkYXRvcnMucHVzaCh0aGlzLnZhbGlkYXRvcik7XG5cbiAgICAvLyBDcmVhdGUgdGhlIGZvcm1cbiAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICB0ZXh0OiBbbnVsbCwgdmFsaWRhdG9ycy5sZW5ndGggPyBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycykgOiBudWxsXVxuICAgIH0pO1xuICAgIHRoaXMuY29udHJvbCA9IGZvcm0uZ2V0KCd0ZXh0JykgYXMgVW50eXBlZEZvcm1Db250cm9sO1xuICAgIHRoaXMuc2V0Rm9ybShmb3JtKTtcblxuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gIH1cblxuICB0ZXh0QXJlYUNoYW5nZWQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICB0aGlzLnRleHRBcmVhQ2hhbmdlcy5lbWl0KHRoaXMuY29udHJvbC52YWx1ZSk7XG4gIH1cblxuICBjb250YWluZXJSZXNpemUoKSB7XG4gICAgdGhpcy5hdXRvc2l6ZURpcmVjdGl2ZT8ucmVzaXplVG9GaXRDb250ZW50KHRydWUpO1xuICB9XG5cbiAgZm9jdXNJbnB1dCgpIHtcbiAgICBpZiAodGhpcy50ZXh0QXJlYSkgZm9jdXNJbnB1dCh0aGlzLnRleHRBcmVhKTtcbiAgICBpZiAodGhpcy50ZXh0SW5wdXQpIGZvY3VzSW5wdXQodGhpcy50ZXh0SW5wdXQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8Zm9ybSBjbGFzcz1cImZvcm0tY29udGFpbmVyXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0LmVtaXQoJGV2ZW50KVwiPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJtdWx0aWxpbmU7IGVsc2UgbW9ub2xpbmVcIj5cbiAgICA8bWF0LWxhYmVsICpuZ0lmPVwicGxhY2Vob2xkZXJcIj57e3BsYWNlaG9sZGVyfX08L21hdC1sYWJlbD5cbiAgICA8dGV4dGFyZWFcbiAgICAgICN0ZXh0QXJlYVxuICAgICAgbWF0SW5wdXRcbiAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgIFtyZWFkb25seV09XCJjb250cm9sLmRpc2FibGVkXCJcbiAgICAgIFtjbGFzcy5maXhlZC1oZWlnaHRdPVwiIWF1dG9IZWlnaHRcIlxuICAgICAgW2Nka1RleHRhcmVhQXV0b3NpemVdPVwiYXV0b0hlaWdodFwiXG4gICAgICAoa2V5dXApPVwidGV4dEFyZWFDaGFuZ2VkKCRldmVudClcIlxuICAgICAgKGtleWRvd24uY29udHJvbC5lbnRlcik9XCJvblN1Ym1pdC5lbWl0KCRldmVudClcIlxuICAgICAgW2F1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxuICAgID48L3RleHRhcmVhPlxuICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJjb250cm9sLmhhc0Vycm9yKCdtYXhsZW5ndGgnKVwiPlxuICAgICAge3sgJ0VSUk9SLkZJRUxEX01BWF9MRU5HVEgnIHwgdHJhbnNsYXRlOiBjb250cm9sLmVycm9yc1snbWF4bGVuZ3RoJ10gfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgICA8bWF0LWhpbnQgKm5nSWY9XCJtYXhMZW5ndGhcIiBhbGlnbj1cImVuZFwiPlxuICAgICAge3sgJ0lORk8uVEVYVF9QUk9HUkVTUycgfCB0cmFuc2xhdGU6IHsgY3VycmVudDogdGV4dEFyZWEudmFsdWU/Lmxlbmd0aCB8fCAwLCBtYXg6IG1heExlbmd0aCB9IH19XG4gICAgPC9tYXQtaGludD5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPG5nLXRlbXBsYXRlICNtb25vbGluZT5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8bWF0LWxhYmVsICpuZ0lmPVwicGxhY2Vob2xkZXJcIj57e3BsYWNlaG9sZGVyfX08L21hdC1sYWJlbD5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjdGV4dElucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cImNvbnRyb2wuZGlzYWJsZWRcIlxuICAgICAgICBbYXBwQXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgICAgIChrZXlkb3duLmNvbnRyb2wuZW50ZXIpPVwib25TdWJtaXQuZW1pdCgkZXZlbnQpXCJcbiAgICAgIC8+XG4gICAgICA8bWF0LWVycm9yICpuZ0lmPVwiY29udHJvbC5oYXNFcnJvcignbWF4bGVuZ3RoJylcIj5cbiAgICAgICAge3sgJ0VSUk9SLkZJRUxEX01BWF9MRU5HVEgnIHwgdHJhbnNsYXRlOiBjb250cm9sLmVycm9yc1snbWF4bGVuZ3RoJ10gfX1cbiAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImNvbnRyb2wuaGFzRXJyb3IoJ3BhdHRlcm4nKVwiPlxuICAgICAgICB7eyAnRVJST1IuRklFTERfSU5WQUxJRCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgPG1hdC1oaW50ICpuZ0lmPVwibWF4TGVuZ3RoXCIgYWxpZ249XCJlbmRcIj5cbiAgICAgICAge3sgJ0lORk8uVEVYVF9QUk9HUkVTUycgfCB0cmFuc2xhdGU6IHsgY3VycmVudDogdGV4dElucHV0LnZhbHVlPy5sZW5ndGggfHwgMCwgbWF4OiBtYXhMZW5ndGggfSB9fVxuICAgICAgPC9tYXQtaGludD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L25nLXRlbXBsYXRlPlxuPC9mb3JtPlxuIl19