@sumaris-net/ngx-components 18.23.58 → 18.23.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/esm2022/src/app/admin/admin-routing.module.mjs +4 -4
  2. package/esm2022/src/app/admin/admin.module.mjs +4 -4
  3. package/esm2022/src/app/admin/users/person.service.mjs +6 -6
  4. package/esm2022/src/app/admin/users/person.validator.mjs +3 -3
  5. package/esm2022/src/app/admin/users/users-select.modal.mjs +3 -3
  6. package/esm2022/src/app/admin/users/users.mjs +3 -3
  7. package/esm2022/src/app/admin/users/users.module.mjs +4 -4
  8. package/esm2022/src/app/core/about/about.modal.mjs +3 -3
  9. package/esm2022/src/app/core/about/about.module.mjs +4 -4
  10. package/esm2022/src/app/core/account/account.module.mjs +4 -4
  11. package/esm2022/src/app/core/account/account.page.mjs +3 -3
  12. package/esm2022/src/app/core/account/new-token.form.mjs +3 -3
  13. package/esm2022/src/app/core/account/new-token.modal.mjs +3 -3
  14. package/esm2022/src/app/core/account/password/change-password.form.mjs +3 -3
  15. package/esm2022/src/app/core/account/password/change-password.module.mjs +4 -4
  16. package/esm2022/src/app/core/account/password/change-password.page.mjs +3 -3
  17. package/esm2022/src/app/core/account/token.table.mjs +3 -3
  18. package/esm2022/src/app/core/auth/auth.form.mjs +3 -3
  19. package/esm2022/src/app/core/auth/auth.modal.mjs +3 -3
  20. package/esm2022/src/app/core/auth/auth.module.mjs +4 -4
  21. package/esm2022/src/app/core/auth/reset-password.modal.mjs +3 -3
  22. package/esm2022/src/app/core/core.module.mjs +4 -4
  23. package/esm2022/src/app/core/core.testing.module.mjs +4 -4
  24. package/esm2022/src/app/core/form/array/testing/form-array-test.module.mjs +4 -4
  25. package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +3 -3
  26. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +3 -3
  27. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +4 -4
  28. package/esm2022/src/app/core/form/entity/editor.class.mjs +3 -3
  29. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +3 -3
  30. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +3 -3
  31. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +3 -3
  32. package/esm2022/src/app/core/form/entity/entity.module.mjs +4 -4
  33. package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +3 -3
  34. package/esm2022/src/app/core/form/form-container.class.mjs +3 -3
  35. package/esm2022/src/app/core/form/form.class.mjs +3 -3
  36. package/esm2022/src/app/core/form/form.module.mjs +4 -4
  37. package/esm2022/src/app/core/form/list/list.form.mjs +3 -3
  38. package/esm2022/src/app/core/form/list/list.module.mjs +4 -4
  39. package/esm2022/src/app/core/form/properties/properties-file.service.mjs +3 -3
  40. package/esm2022/src/app/core/form/properties/properties.form.mjs +3 -3
  41. package/esm2022/src/app/core/form/properties/properties.module.mjs +4 -4
  42. package/esm2022/src/app/core/form/properties/properties.table.mjs +6 -6
  43. package/esm2022/src/app/core/form/properties/property.validator.mjs +3 -3
  44. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +3 -3
  45. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +4 -4
  46. package/esm2022/src/app/core/form/text/testing/text-form.testing.mjs +3 -3
  47. package/esm2022/src/app/core/form/text/testing/text-form.testing.module.mjs +4 -4
  48. package/esm2022/src/app/core/form/text/text-form.component.mjs +3 -3
  49. package/esm2022/src/app/core/form/text/text-form.module.mjs +4 -4
  50. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +3 -3
  51. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +4 -4
  52. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +3 -3
  53. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +4 -4
  54. package/esm2022/src/app/core/form/username/username.form.mjs +3 -3
  55. package/esm2022/src/app/core/form/username/username.module.mjs +4 -4
  56. package/esm2022/src/app/core/graphql/graphql.module.mjs +4 -4
  57. package/esm2022/src/app/core/graphql/graphql.service.mjs +3 -3
  58. package/esm2022/src/app/core/home/home.mjs +3 -3
  59. package/esm2022/src/app/core/home/home.module.mjs +4 -4
  60. package/esm2022/src/app/core/icon/icon.component.mjs +3 -3
  61. package/esm2022/src/app/core/icon/icon.module.mjs +4 -4
  62. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +3 -3
  63. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +4 -4
  64. package/esm2022/src/app/core/menu/menu.component.mjs +3 -3
  65. package/esm2022/src/app/core/menu/menu.module.mjs +4 -4
  66. package/esm2022/src/app/core/menu/menu.service.mjs +3 -3
  67. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +3 -3
  68. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +3 -3
  69. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +3 -3
  70. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +4 -4
  71. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +3 -3
  72. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +4 -4
  73. package/esm2022/src/app/core/peer/select-peer.modal.mjs +3 -3
  74. package/esm2022/src/app/core/peer/select-peer.module.mjs +4 -4
  75. package/esm2022/src/app/core/register/register-confirm.page.mjs +3 -3
  76. package/esm2022/src/app/core/register/register.form.mjs +3 -3
  77. package/esm2022/src/app/core/register/register.modal.mjs +3 -3
  78. package/esm2022/src/app/core/register/register.module.mjs +4 -4
  79. package/esm2022/src/app/core/services/account.service.mjs +3 -3
  80. package/esm2022/src/app/core/services/auth-guard.service.mjs +3 -3
  81. package/esm2022/src/app/core/services/base-entity-service.class.mjs +3 -3
  82. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +3 -3
  83. package/esm2022/src/app/core/services/config.service.mjs +3 -3
  84. package/esm2022/src/app/core/services/crypto.service.mjs +3 -3
  85. package/esm2022/src/app/core/services/local-settings.service.mjs +3 -3
  86. package/esm2022/src/app/core/services/network.service.mjs +3 -3
  87. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +8 -8
  88. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +4 -4
  89. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +4 -4
  90. package/esm2022/src/app/core/services/pipes/pipes.module.mjs +4 -4
  91. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +6 -6
  92. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +8 -8
  93. package/esm2022/src/app/core/services/platform.service.mjs +3 -3
  94. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +3 -3
  95. package/esm2022/src/app/core/services/testing/referential.validator.mjs +3 -3
  96. package/esm2022/src/app/core/services/validator/account.validator.mjs +3 -3
  97. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +3 -3
  98. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +3 -3
  99. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +3 -3
  100. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +3 -3
  101. package/esm2022/src/app/core/settings/settings.module.mjs +4 -4
  102. package/esm2022/src/app/core/settings/settings.page.mjs +3 -3
  103. package/esm2022/src/app/core/table/async-table.class.mjs +3 -3
  104. package/esm2022/src/app/core/table/column/actions-column.component.mjs +3 -3
  105. package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +3 -3
  106. package/esm2022/src/app/core/table/column/row-field.component.mjs +3 -3
  107. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +3 -3
  108. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +3 -3
  109. package/esm2022/src/app/core/table/memory-table.class.mjs +3 -3
  110. package/esm2022/src/app/core/table/table-select-columns.component.mjs +3 -3
  111. package/esm2022/src/app/core/table/table.class.mjs +3 -3
  112. package/esm2022/src/app/core/table/table.module.mjs +4 -4
  113. package/esm2022/src/app/core/table/table.pipes.mjs +9 -9
  114. package/esm2022/src/app/core/table/testing/nested-table.testing.mjs +3 -3
  115. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +3 -3
  116. package/esm2022/src/app/core/table/testing/table.testing.mjs +3 -3
  117. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +4 -4
  118. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +3 -3
  119. package/esm2022/src/app/core/table/testing/table2.testing.mjs +3 -3
  120. package/esm2022/src/app/shared/audio/audio.mjs +3 -3
  121. package/esm2022/src/app/shared/audio/audio.testing.mjs +3 -3
  122. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +4 -4
  123. package/esm2022/src/app/shared/capacitor/keyboard.mjs +3 -3
  124. package/esm2022/src/app/shared/debug/debug.component.mjs +3 -3
  125. package/esm2022/src/app/shared/debug/debug.module.mjs +4 -4
  126. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +3 -3
  127. package/esm2022/src/app/shared/directives/autoresize.directive.mjs +3 -3
  128. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +3 -3
  129. package/esm2022/src/app/shared/directives/autotooltip.directive.mjs +3 -3
  130. package/esm2022/src/app/shared/directives/cell-selection/cell-identifier.directive.mjs +3 -3
  131. package/esm2022/src/app/shared/directives/cell-selection/cell-selection.directive.mjs +3 -3
  132. package/esm2022/src/app/shared/directives/cell-selection/cell-selection.service.mjs +3 -3
  133. package/esm2022/src/app/shared/directives/directives.module.mjs +4 -4
  134. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +3 -3
  135. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +3 -3
  136. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +3 -3
  137. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +3 -3
  138. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +4 -4
  139. package/esm2022/src/app/shared/directives/throttled-click.directive.mjs +3 -3
  140. package/esm2022/src/app/shared/file/file.service.mjs +3 -3
  141. package/esm2022/src/app/shared/form/field.component.mjs +3 -3
  142. package/esm2022/src/app/shared/form/loading-spinner.mjs +3 -3
  143. package/esm2022/src/app/shared/gesture/gesture-config.mjs +3 -3
  144. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +3 -3
  145. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +3 -3
  146. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +3 -3
  147. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +4 -4
  148. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +3 -3
  149. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +4 -4
  150. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +3 -3
  151. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +3 -3
  152. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +4 -4
  153. package/esm2022/src/app/shared/image/image.module.mjs +4 -4
  154. package/esm2022/src/app/shared/image/image.service.mjs +3 -3
  155. package/esm2022/src/app/shared/logging/logging-service.class.mjs +3 -3
  156. package/esm2022/src/app/shared/logging/logging-service.module.mjs +4 -4
  157. package/esm2022/src/app/shared/markdown/markdown.component.mjs +3 -3
  158. package/esm2022/src/app/shared/markdown/markdown.directive.mjs +3 -3
  159. package/esm2022/src/app/shared/markdown/markdown.modal.mjs +3 -3
  160. package/esm2022/src/app/shared/markdown/markdown.module.mjs +4 -4
  161. package/esm2022/src/app/shared/markdown/markdown.service.mjs +3 -3
  162. package/esm2022/src/app/shared/markdown/testing/markdown.test.mjs +3 -3
  163. package/esm2022/src/app/shared/markdown/testing/markdown.testing.module.mjs +4 -4
  164. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +3 -3
  165. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +4 -4
  166. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +3 -3
  167. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +3 -3
  168. package/esm2022/src/app/shared/material/badge/badge.module.mjs +4 -4
  169. package/esm2022/src/app/shared/material/badge/badge.test.mjs +3 -3
  170. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +4 -4
  171. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +3 -3
  172. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +3 -3
  173. package/esm2022/src/app/shared/material/chips/chips.module.mjs +4 -4
  174. package/esm2022/src/app/shared/material/chips/material.chips.mjs +3 -3
  175. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +3 -3
  176. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +4 -4
  177. package/esm2022/src/app/shared/material/datetime/material.date.mjs +3 -3
  178. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +3 -3
  179. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +3 -3
  180. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +3 -3
  181. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +3 -3
  182. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +3 -3
  183. package/esm2022/src/app/shared/material/duration/duration.module.mjs +4 -4
  184. package/esm2022/src/app/shared/material/duration/material.duration.mjs +3 -3
  185. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +3 -3
  186. package/esm2022/src/app/shared/material/latlong/material.latlong-input.mjs +3 -3
  187. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +3 -3
  188. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +4 -4
  189. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +3 -3
  190. package/esm2022/src/app/shared/material/material.module.mjs +4 -4
  191. package/esm2022/src/app/shared/material/material.testing.module.mjs +4 -4
  192. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +3 -3
  193. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +3 -3
  194. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +3 -3
  195. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +4 -4
  196. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +3 -3
  197. package/esm2022/src/app/shared/material/test/test-component.mjs +6 -6
  198. package/esm2022/src/app/shared/material/testing/common.test.mjs +3 -3
  199. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +3 -3
  200. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +4 -4
  201. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +3 -3
  202. package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +3 -3
  203. package/esm2022/src/app/shared/named-filter/testing/named-filter.testing.module.mjs +4 -4
  204. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +45 -45
  205. package/esm2022/src/app/shared/pipes/badge.pipes.mjs +3 -3
  206. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +3 -3
  207. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +4 -4
  208. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +6 -6
  209. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +4 -4
  210. package/esm2022/src/app/shared/pipes/date-from.pipe.mjs +4 -4
  211. package/esm2022/src/app/shared/pipes/dates.pipe.mjs +3 -3
  212. package/esm2022/src/app/shared/pipes/display-with.pipe.mjs +4 -4
  213. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +4 -4
  214. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +3 -3
  215. package/esm2022/src/app/shared/pipes/form.pipes.mjs +21 -21
  216. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +4 -4
  217. package/esm2022/src/app/shared/pipes/html.pipes.mjs +12 -12
  218. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +9 -9
  219. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +12 -12
  220. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +3 -3
  221. package/esm2022/src/app/shared/pipes/math.pipes.mjs +16 -16
  222. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +3 -3
  223. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +3 -3
  224. package/esm2022/src/app/shared/pipes/observable.pipes.mjs +12 -12
  225. package/esm2022/src/app/shared/pipes/pipes.module.mjs +4 -4
  226. package/esm2022/src/app/shared/pipes/property.pipes.mjs +17 -17
  227. package/esm2022/src/app/shared/pipes/selection.pipes.mjs +21 -21
  228. package/esm2022/src/app/shared/pipes/string.pipes.mjs +39 -39
  229. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +8 -8
  230. package/esm2022/src/app/shared/pipes/types.pipes.mjs +15 -15
  231. package/esm2022/src/app/shared/pipes/url.pipes.mjs +3 -3
  232. package/esm2022/src/app/shared/print/print.service.mjs +3 -3
  233. package/esm2022/src/app/shared/rx-state/rx-state.module.mjs +4 -4
  234. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +3 -3
  235. package/esm2022/src/app/shared/services/progress-bar.service.mjs +3 -3
  236. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +3 -3
  237. package/esm2022/src/app/shared/services/startable-service.class.mjs +3 -3
  238. package/esm2022/src/app/shared/services/translate-context.service.mjs +3 -3
  239. package/esm2022/src/app/shared/shared-routing.module.mjs +7 -7
  240. package/esm2022/src/app/shared/shared.module.mjs +4 -4
  241. package/esm2022/src/app/shared/shared.testing.module.mjs +4 -4
  242. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +3 -3
  243. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +4 -4
  244. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +4 -4
  245. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +4 -4
  246. package/esm2022/src/app/shared/storage/storage.service.mjs +3 -3
  247. package/esm2022/src/app/shared/testing/maskito.test.mjs +3 -3
  248. package/esm2022/src/app/shared/testing/observable.test.mjs +3 -3
  249. package/esm2022/src/app/shared/testing/tests.page.mjs +3 -3
  250. package/esm2022/src/app/shared/toast/toast.testing.mjs +3 -3
  251. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +4 -4
  252. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +3 -3
  253. package/esm2022/src/app/shared/toolbar/toolbar.mjs +3 -3
  254. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +4 -4
  255. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +3 -3
  256. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +4 -4
  257. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +3 -3
  258. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +3 -3
  259. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +3 -3
  260. package/esm2022/src/app/social/feed/feed.component.mjs +5 -5
  261. package/esm2022/src/app/social/feed/feed.directive.mjs +3 -3
  262. package/esm2022/src/app/social/feed/feed.module.mjs +4 -4
  263. package/esm2022/src/app/social/feed/feed.page.mjs +3 -3
  264. package/esm2022/src/app/social/feed/feed.service.mjs +3 -3
  265. package/esm2022/src/app/social/feed/testing/feed.testing.mjs +3 -3
  266. package/esm2022/src/app/social/feed/testing/feed.testing.module.mjs +4 -4
  267. package/esm2022/src/app/social/job/job.module.mjs +4 -4
  268. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +3 -3
  269. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +3 -3
  270. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +3 -3
  271. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +3 -3
  272. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +3 -3
  273. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +3 -3
  274. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +4 -4
  275. package/esm2022/src/app/social/message/message.form.mjs +3 -3
  276. package/esm2022/src/app/social/message/message.modal.mjs +3 -3
  277. package/esm2022/src/app/social/message/message.module.mjs +4 -4
  278. package/esm2022/src/app/social/message/message.service.mjs +3 -3
  279. package/esm2022/src/app/social/social.module.mjs +4 -4
  280. package/esm2022/src/app/social/social.testing.module.mjs +4 -4
  281. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +3 -3
  282. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +3 -3
  283. package/esm2022/src/app/social/user-event/notification/user-event-notification.modal.mjs +3 -3
  284. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +3 -3
  285. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +4 -4
  286. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +3 -3
  287. package/esm2022/src/app/social/user-event/user-event.module.mjs +4 -4
  288. package/esm2022/src/app/social/user-event/user-event.service.mjs +3 -3
  289. package/esm2022/src/environments/environment.loader.mjs +3 -3
  290. package/fesm2022/sumaris-net.ngx-components.mjs +1180 -1180
  291. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  292. package/package.json +1 -1
  293. package/src/assets/manifest.json +1 -1
@@ -65,10 +65,10 @@ export class FormButtonsBarComponent {
65
65
  this.onSaveAndNext.complete();
66
66
  this.onSaveAndClose.complete();
67
67
  }
68
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormButtonsBarComponent, deps: [{ token: i1.Hotkeys }, { token: i2.MenuService }], target: i0.ɵɵFactoryTarget.Component });
69
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FormButtonsBarComponent, selector: "app-form-buttons-bar", inputs: { disabled: "disabled", disabledCancel: "disabledCancel", disabledEscape: "disabledEscape", classList: "classList", saveButtonColor: "saveButtonColor", backText: "backText", cancelText: "cancelText", nextText: "nextText", showBack: "showBack", showCancel: "showCancel", showNext: "showNext", showSave: "showSave" }, outputs: { onCancel: "onCancel", onSave: "onSave", onNext: "onNext", onBack: "onBack", onSaveAndClose: "onSaveAndClose", onSaveAndNext: "onSaveAndNext" }, providers: [{ provide: FormButtonsBarToken, useExisting: FormButtonsBarComponent }], ngImport: i0, template: "<ion-toolbar [class]=\"classList\">\n <ion-row class=\"ion-no-padding\" nowrap>\n <!-- show menu button -->\n <ion-col size=\"auto\" class=\"hidden-xs hidden-sm\">\n <ion-menu-toggle>\n <button\n mat-icon-button\n color=\"accent\"\n [title]=\"!showTooltip ? ('COMMON.BTN_SHOW_MENU' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('COMMON.BTN_SHOW_MENU' | translate) : ''\"\n (click)=\"menu.toggleSplitPaneWhen()\"\n >\n <mat-icon><span>&#xbb;</span></mat-icon>\n </button>\n </ion-menu-toggle>\n </ion-col>\n\n <ion-col class=\"app-form-buttons-bar-content\">\n <ng-content></ng-content>\n </ion-col>\n\n <ion-col size=\"auto\" class=\"app-form-buttons-bar-buttons\">\n <ng-content select=\"[slot=end]\"></ng-content>\n\n <!-- back -->\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n (click)=\"onBack.emit($event)\"\n (keyup.enter)=\"onBack.emit($event)\"\n *ngIf=\"showBack && onBack.observed\"\n class=\"back\"\n >\n <ion-label>{{ backText | translate }}</ion-label>\n </ion-button>\n\n <!-- cancel -->\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n *ngIf=\"showCancel\"\n (click)=\"onCancel.emit($event)\"\n (keyup.enter)=\"onCancel.emit($event)\"\n [disabled]=\"disabledCancel\"\n class=\"cancel\"\n >\n <ion-icon slot=\"start\" name=\"refresh\"></ion-icon>\n <ion-label>{{ cancelText | translate }}</ion-label>\n </ion-button>\n\n <!-- next -->\n <ion-button\n fill=\"solid\"\n *ngIf=\"showNext && onNext.observed\"\n (click)=\"onNext.emit($event)\"\n (keyup.enter)=\"onNext.emit($event)\"\n class=\"next\"\n >\n <ion-label>{{ nextText | translate }}</ion-label>\n <ion-icon slot=\"end\" name=\"arrow-forward\"></ion-icon>\n </ion-button>\n\n <!-- save -->\n @if (showSave && onSave.observed) {\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"onSave.emit($event)\"\n (keyup.enter)=\"onSave.emit($event)\"\n [color]=\"saveButtonColor\"\n [disabled]=\"disabled\"\n [title]=\"!showTooltip ? ('COMMON.BTN_SAVE_WITH_SHORTCUT_HELP' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('COMMON.BTN_SAVE_WITH_SHORTCUT_HELP' | translate) : ''\"\n class=\"save\"\n >\n <ion-label>\n <span [innerHTML]=\"'COMMON.BTN_SAVE_WITH_SHORTCUT' | translate\"></span>\n </ion-label>\n </ion-button>\n }\n\n <ng-content select=\"[slot=afterSave]\"></ng-content>\n </ion-col>\n </ion-row>\n</ion-toolbar>\n", styles: [":host{width:100%}:host ion-toolbar{height:var(--app-form-buttons-bar-height);padding:0 6px}:host ion-col{padding:0}:host ion-col:has(ion-button){align-content:center}:host ion-col ion-button{margin-top:0;margin-bottom:0}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i4.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i4.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i4.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i4.IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: i4.IonRow, selector: "ion-row" }, { kind: "component", type: i4.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
68
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormButtonsBarComponent, deps: [{ token: i1.Hotkeys }, { token: i2.MenuService }], target: i0.ɵɵFactoryTarget.Component });
69
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FormButtonsBarComponent, selector: "app-form-buttons-bar", inputs: { disabled: "disabled", disabledCancel: "disabledCancel", disabledEscape: "disabledEscape", classList: "classList", saveButtonColor: "saveButtonColor", backText: "backText", cancelText: "cancelText", nextText: "nextText", showBack: "showBack", showCancel: "showCancel", showNext: "showNext", showSave: "showSave" }, outputs: { onCancel: "onCancel", onSave: "onSave", onNext: "onNext", onBack: "onBack", onSaveAndClose: "onSaveAndClose", onSaveAndNext: "onSaveAndNext" }, providers: [{ provide: FormButtonsBarToken, useExisting: FormButtonsBarComponent }], ngImport: i0, template: "<ion-toolbar [class]=\"classList\">\n <ion-row class=\"ion-no-padding\" nowrap>\n <!-- show menu button -->\n <ion-col size=\"auto\" class=\"hidden-xs hidden-sm\">\n <ion-menu-toggle>\n <button\n mat-icon-button\n color=\"accent\"\n [title]=\"!showTooltip ? ('COMMON.BTN_SHOW_MENU' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('COMMON.BTN_SHOW_MENU' | translate) : ''\"\n (click)=\"menu.toggleSplitPaneWhen()\"\n >\n <mat-icon><span>&#xbb;</span></mat-icon>\n </button>\n </ion-menu-toggle>\n </ion-col>\n\n <ion-col class=\"app-form-buttons-bar-content\">\n <ng-content></ng-content>\n </ion-col>\n\n <ion-col size=\"auto\" class=\"app-form-buttons-bar-buttons\">\n <ng-content select=\"[slot=end]\"></ng-content>\n\n <!-- back -->\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n (click)=\"onBack.emit($event)\"\n (keyup.enter)=\"onBack.emit($event)\"\n *ngIf=\"showBack && onBack.observed\"\n class=\"back\"\n >\n <ion-label>{{ backText | translate }}</ion-label>\n </ion-button>\n\n <!-- cancel -->\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n *ngIf=\"showCancel\"\n (click)=\"onCancel.emit($event)\"\n (keyup.enter)=\"onCancel.emit($event)\"\n [disabled]=\"disabledCancel\"\n class=\"cancel\"\n >\n <ion-icon slot=\"start\" name=\"refresh\"></ion-icon>\n <ion-label>{{ cancelText | translate }}</ion-label>\n </ion-button>\n\n <!-- next -->\n <ion-button\n fill=\"solid\"\n *ngIf=\"showNext && onNext.observed\"\n (click)=\"onNext.emit($event)\"\n (keyup.enter)=\"onNext.emit($event)\"\n class=\"next\"\n >\n <ion-label>{{ nextText | translate }}</ion-label>\n <ion-icon slot=\"end\" name=\"arrow-forward\"></ion-icon>\n </ion-button>\n\n <!-- save -->\n @if (showSave && onSave.observed) {\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"onSave.emit($event)\"\n (keyup.enter)=\"onSave.emit($event)\"\n [color]=\"saveButtonColor\"\n [disabled]=\"disabled\"\n [title]=\"!showTooltip ? ('COMMON.BTN_SAVE_WITH_SHORTCUT_HELP' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('COMMON.BTN_SAVE_WITH_SHORTCUT_HELP' | translate) : ''\"\n class=\"save\"\n >\n <ion-label>\n <span [innerHTML]=\"'COMMON.BTN_SAVE_WITH_SHORTCUT' | translate\"></span>\n </ion-label>\n </ion-button>\n }\n\n <ng-content select=\"[slot=afterSave]\"></ng-content>\n </ion-col>\n </ion-row>\n</ion-toolbar>\n", styles: [":host{width:100%}:host ion-toolbar{height:var(--app-form-buttons-bar-height);padding:0 6px}:host ion-col{padding:0}:host ion-col:has(ion-button){align-content:center}:host ion-col ion-button{margin-top:0;margin-bottom:0}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i4.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i4.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i4.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i4.IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: i4.IonRow, selector: "ion-row" }, { kind: "component", type: i4.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
70
70
  }
71
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormButtonsBarComponent, decorators: [{
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormButtonsBarComponent, decorators: [{
72
72
  type: Component,
73
73
  args: [{ selector: 'app-form-buttons-bar', providers: [{ provide: FormButtonsBarToken, useExisting: FormButtonsBarComponent }], template: "<ion-toolbar [class]=\"classList\">\n <ion-row class=\"ion-no-padding\" nowrap>\n <!-- show menu button -->\n <ion-col size=\"auto\" class=\"hidden-xs hidden-sm\">\n <ion-menu-toggle>\n <button\n mat-icon-button\n color=\"accent\"\n [title]=\"!showTooltip ? ('COMMON.BTN_SHOW_MENU' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('COMMON.BTN_SHOW_MENU' | translate) : ''\"\n (click)=\"menu.toggleSplitPaneWhen()\"\n >\n <mat-icon><span>&#xbb;</span></mat-icon>\n </button>\n </ion-menu-toggle>\n </ion-col>\n\n <ion-col class=\"app-form-buttons-bar-content\">\n <ng-content></ng-content>\n </ion-col>\n\n <ion-col size=\"auto\" class=\"app-form-buttons-bar-buttons\">\n <ng-content select=\"[slot=end]\"></ng-content>\n\n <!-- back -->\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n (click)=\"onBack.emit($event)\"\n (keyup.enter)=\"onBack.emit($event)\"\n *ngIf=\"showBack && onBack.observed\"\n class=\"back\"\n >\n <ion-label>{{ backText | translate }}</ion-label>\n </ion-button>\n\n <!-- cancel -->\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n *ngIf=\"showCancel\"\n (click)=\"onCancel.emit($event)\"\n (keyup.enter)=\"onCancel.emit($event)\"\n [disabled]=\"disabledCancel\"\n class=\"cancel\"\n >\n <ion-icon slot=\"start\" name=\"refresh\"></ion-icon>\n <ion-label>{{ cancelText | translate }}</ion-label>\n </ion-button>\n\n <!-- next -->\n <ion-button\n fill=\"solid\"\n *ngIf=\"showNext && onNext.observed\"\n (click)=\"onNext.emit($event)\"\n (keyup.enter)=\"onNext.emit($event)\"\n class=\"next\"\n >\n <ion-label>{{ nextText | translate }}</ion-label>\n <ion-icon slot=\"end\" name=\"arrow-forward\"></ion-icon>\n </ion-button>\n\n <!-- save -->\n @if (showSave && onSave.observed) {\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"onSave.emit($event)\"\n (keyup.enter)=\"onSave.emit($event)\"\n [color]=\"saveButtonColor\"\n [disabled]=\"disabled\"\n [title]=\"!showTooltip ? ('COMMON.BTN_SAVE_WITH_SHORTCUT_HELP' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('COMMON.BTN_SAVE_WITH_SHORTCUT_HELP' | translate) : ''\"\n class=\"save\"\n >\n <ion-label>\n <span [innerHTML]=\"'COMMON.BTN_SAVE_WITH_SHORTCUT' | translate\"></span>\n </ion-label>\n </ion-button>\n }\n\n <ng-content select=\"[slot=afterSave]\"></ng-content>\n </ion-col>\n </ion-row>\n</ion-toolbar>\n", styles: [":host{width:100%}:host ion-toolbar{height:var(--app-form-buttons-bar-height);padding:0 6px}:host ion-col{padding:0}:host ion-col:has(ion-button){align-content:center}:host ion-col ion-button{margin-top:0;margin-bottom:0}\n"] }]
74
74
  }], ctorParameters: () => [{ type: i1.Hotkeys }, { type: i2.MenuService }], propDecorators: { disabled: [{
@@ -5,15 +5,15 @@ import { TranslateModule } from '@ngx-translate/core';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@ngx-translate/core";
7
7
  export class AppFormButtonsBarModule {
8
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppFormButtonsBarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AppFormButtonsBarModule, declarations: [
8
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppFormButtonsBarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AppFormButtonsBarModule, declarations: [
10
10
  // Components
11
11
  FormButtonsBarComponent], imports: [SharedModule, i1.TranslateModule], exports: [TranslateModule,
12
12
  // Components
13
13
  FormButtonsBarComponent] });
14
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppFormButtonsBarModule, imports: [SharedModule, TranslateModule.forChild(), TranslateModule] });
14
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppFormButtonsBarModule, imports: [SharedModule, TranslateModule.forChild(), TranslateModule] });
15
15
  }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppFormButtonsBarModule, decorators: [{
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppFormButtonsBarModule, decorators: [{
17
17
  type: NgModule,
18
18
  args: [{
19
19
  imports: [SharedModule, TranslateModule.forChild()],
@@ -248,10 +248,10 @@ export class AppEditor extends AppFormContainer {
248
248
  throw new Error("Missing toastController in component's constructor");
249
249
  await Toasts.show(this.toastController, this.translate, opts);
250
250
  }
251
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppEditor, deps: [{ token: i1.ActivatedRoute, optional: true }, { token: i1.Router }, { token: i2.NavController }, { token: i2.AlertController }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Directive });
252
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: AppEditor, viewQueries: [{ propertyName: "toolbar", first: true, predicate: ToolbarToken, descendants: true }, { propertyName: "formButtonsBar", first: true, predicate: FormButtonsBarToken, descendants: true, static: true }, { propertyName: "content", first: true, predicate: IonContent, descendants: true, static: true }], usesInheritance: true, ngImport: i0 });
251
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppEditor, deps: [{ token: i1.ActivatedRoute, optional: true }, { token: i1.Router }, { token: i2.NavController }, { token: i2.AlertController }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Directive });
252
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: AppEditor, viewQueries: [{ propertyName: "toolbar", first: true, predicate: ToolbarToken, descendants: true }, { propertyName: "formButtonsBar", first: true, predicate: FormButtonsBarToken, descendants: true, static: true }, { propertyName: "content", first: true, predicate: IonContent, descendants: true, static: true }], usesInheritance: true, ngImport: i0 });
253
253
  }
254
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppEditor, decorators: [{
254
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppEditor, decorators: [{
255
255
  type: Directive
256
256
  }], ctorParameters: () => [{ type: i1.ActivatedRoute, decorators: [{
257
257
  type: Optional
@@ -391,10 +391,10 @@ export class AppEntityEditorModal extends AppTabEditor {
391
391
  this.markForCheck();
392
392
  }
393
393
  }
394
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppEntityEditorModal, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
395
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: AppEntityEditorModal, inputs: { data: "data", mobile: "mobile", usageMode: "usageMode", onAfterModalInit: "onAfterModalInit", onDelete: "onDelete", i18nSuffix: "i18nSuffix", isNew: "isNew", isNewData: "isNewData", disabled: "disabled" }, usesInheritance: true, ngImport: i0 });
394
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppEntityEditorModal, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
395
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: AppEntityEditorModal, inputs: { data: "data", mobile: "mobile", usageMode: "usageMode", onAfterModalInit: "onAfterModalInit", onDelete: "onDelete", i18nSuffix: "i18nSuffix", isNew: "isNew", isNewData: "isNewData", disabled: "disabled" }, usesInheritance: true, ngImport: i0 });
396
396
  }
397
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppEntityEditorModal, decorators: [{
397
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppEntityEditorModal, decorators: [{
398
398
  type: Directive
399
399
  }], ctorParameters: () => [{ type: i0.Injector }, { type: undefined }, { type: undefined, decorators: [{
400
400
  type: Optional
@@ -737,10 +737,10 @@ export class AppEntityEditor extends AppTabEditor {
737
737
  this.markForCheck();
738
738
  }
739
739
  }
740
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppEntityEditor, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
741
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: AppEntityEditor, usesInheritance: true, ngImport: i0 });
740
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppEntityEditor, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
741
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: AppEntityEditor, usesInheritance: true, ngImport: i0 });
742
742
  }
743
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppEntityEditor, decorators: [{
743
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppEntityEditor, decorators: [{
744
744
  type: Directive
745
745
  }], ctorParameters: () => [{ type: i0.Injector }, { type: undefined }, { type: undefined }, { type: AppEditorOptions, decorators: [{
746
746
  type: Optional
@@ -11,10 +11,10 @@ import * as i6 from "../../services/pipes/person-to-string.pipe";
11
11
  export class EntityMetadataComponent {
12
12
  value;
13
13
  showRecorder = true;
14
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EntityMetadataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: EntityMetadataComponent, selector: "app-entity-metadata", inputs: { value: "value", showRecorder: "showRecorder" }, ngImport: i0, template: "@if (value?.id) {\n <ion-card @fadeInAnimation>\n <!-- recorder -->\n @if (showRecorder && (value.recorderDepartment || value.recorderPerson)) {\n <ion-item color=\"transparent\">\n <!-- recorder avatar -->\n @if (value.recorderPerson; as recorderPerson) {\n <ion-avatar slot=\"start\">\n @if (recorderPerson.avatar; as avatarUrl) {\n <ion-img [src]=\"avatarUrl\"/>\n } @else if (recorderPerson?.id | isNotNil) {\n <svg width=\"38\" height=\"38\" [data-jdenticon-value]=\"recorderPerson.id\"></svg>\n }\n </ion-avatar>\n }\n\n <!-- recorder name -->\n <ion-label>\n <ion-card-subtitle translate>COMMON.RECORDER</ion-card-subtitle>\n @if (value.recorderPerson; as recorderPerson) {\n <ion-card-title class=\"ion-text-nowrap\">\n {{ recorderPerson | personToString }}\n </ion-card-title>\n @if (value.recorderDepartment) {\n <ion-card-subtitle>{{ value.recorderDepartment.label || value.recorderDepartment.name }}</ion-card-subtitle>\n }\n } @else if (value.recorderDepartment) {\n <ion-card-title>{{ value.recorderDepartment.label || value.recorderDepartment.name }}</ion-card-title>\n }\n\n\n </ion-label>\n\n <ng-content select=\"[recorderSuffix]\"></ng-content>\n </ion-item>\n }\n\n <ng-content select=\"[afterRecorder]\"></ng-content>\n\n <ion-card-content>\n <ion-label class=\"ion-text-wrap status\">\n <!-- creation date -->\n @if (value.creationDate) {\n <ion-text>\n <ion-icon name=\"calendar\"></ion-icon>\n &nbsp;\n <span translate>COMMON.CREATED_ON</span>\n <span>\n &nbsp;\n <b>{{ value.creationDate | dateFormat: {time: true} }}</b>\n </span>\n </ion-text>\n }\n\n <!-- update date -->\n @if (value.updateDate != value.creationDate && value.updateDate; as updateDate) {\n <ion-text>\n @if (value.creationDate) {\n <br/>\n }\n <ion-label>\n <ion-icon name=\"time-outline\"></ion-icon>\n &nbsp;\n <span translate>COMMON.UPDATED_ON</span>\n <span>&nbsp;{{ updateDate | dateFormat: {time: true, seconds: true} }}</span>\n </ion-label>\n </ion-text>\n }\n </ion-label>\n\n <ng-content></ng-content>\n </ion-card-content>\n </ion-card>\n}\n", styles: ["ion-card{background-color:var(--ion-color-light-tint)}ion-card ion-item ion-avatar{--avatar-border-width: 1px;--avatar-border-opacity: .5;--avatar-size: 40px;--avatar-svg-background-color: var(--ion-background-color);--avatar-img-background-color: var(--ion-color-secondary);height:var(--avatar-size, 40px);width:var(--avatar-size, 40px);border:solid var(--avatar-border-width, 1px) rgba(var(--ion-color-secondary-rgb),var(--avatar-border-opacity, .5))}ion-card ion-item ion-avatar ::ng-deep ion-img img{background-color:var(--avatar-img-background-color)}ion-card ion-item ion-avatar svg{background-color:var(--avatar-svg-background-color);border-radius:50%;height:calc(var(--avatar-size, 40px) - var(--avatar-border-width, 1px) * 2);width:calc(var(--avatar-size, 40px) - var(--avatar-border-width, 1px) * 2)}ion-card ion-item ion-card-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}ion-card ion-card-content{background-color:var(--ion-color-light-tint)}ion-card ion-card-content ion-label.status,ion-card ion-card-content * ion-label.status{font-size:12px!important;color:var(--ion-color-step-850)}\n"], dependencies: [{ kind: "component", type: i1.IonAvatar, selector: "ion-avatar" }, { kind: "component", type: i1.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i1.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i1.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i3.SvgJdenticonDirective, selector: "svg[data-jdenticon-hash],svg[data-jdenticon-value]", inputs: ["data-jdenticon-hash", "data-jdenticon-value", "width", "height"] }, { kind: "pipe", type: i4.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i5.IsNotNilPipe, name: "isNotNil" }, { kind: "pipe", type: i6.PersonToStringPipe, name: "personToString" }], animations: [fadeInAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
14
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EntityMetadataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: EntityMetadataComponent, selector: "app-entity-metadata", inputs: { value: "value", showRecorder: "showRecorder" }, ngImport: i0, template: "@if (value?.id) {\n <ion-card @fadeInAnimation>\n <!-- recorder -->\n @if (showRecorder && (value.recorderDepartment || value.recorderPerson)) {\n <ion-item color=\"transparent\">\n <!-- recorder avatar -->\n @if (value.recorderPerson; as recorderPerson) {\n <ion-avatar slot=\"start\">\n @if (recorderPerson.avatar; as avatarUrl) {\n <ion-img [src]=\"avatarUrl\"/>\n } @else if (recorderPerson?.id | isNotNil) {\n <svg width=\"38\" height=\"38\" [data-jdenticon-value]=\"recorderPerson.id\"></svg>\n }\n </ion-avatar>\n }\n\n <!-- recorder name -->\n <ion-label>\n <ion-card-subtitle translate>COMMON.RECORDER</ion-card-subtitle>\n @if (value.recorderPerson; as recorderPerson) {\n <ion-card-title class=\"ion-text-nowrap\">\n {{ recorderPerson | personToString }}\n </ion-card-title>\n @if (value.recorderDepartment) {\n <ion-card-subtitle>{{ value.recorderDepartment.label || value.recorderDepartment.name }}</ion-card-subtitle>\n }\n } @else if (value.recorderDepartment) {\n <ion-card-title>{{ value.recorderDepartment.label || value.recorderDepartment.name }}</ion-card-title>\n }\n\n\n </ion-label>\n\n <ng-content select=\"[recorderSuffix]\"></ng-content>\n </ion-item>\n }\n\n <ng-content select=\"[afterRecorder]\"></ng-content>\n\n <ion-card-content>\n <ion-label class=\"ion-text-wrap status\">\n <!-- creation date -->\n @if (value.creationDate) {\n <ion-text>\n <ion-icon name=\"calendar\"></ion-icon>\n &nbsp;\n <span translate>COMMON.CREATED_ON</span>\n <span>\n &nbsp;\n <b>{{ value.creationDate | dateFormat: {time: true} }}</b>\n </span>\n </ion-text>\n }\n\n <!-- update date -->\n @if (value.updateDate != value.creationDate && value.updateDate; as updateDate) {\n <ion-text>\n @if (value.creationDate) {\n <br/>\n }\n <ion-label>\n <ion-icon name=\"time-outline\"></ion-icon>\n &nbsp;\n <span translate>COMMON.UPDATED_ON</span>\n <span>&nbsp;{{ updateDate | dateFormat: {time: true, seconds: true} }}</span>\n </ion-label>\n </ion-text>\n }\n </ion-label>\n\n <ng-content></ng-content>\n </ion-card-content>\n </ion-card>\n}\n", styles: ["ion-card{background-color:var(--ion-color-light-tint)}ion-card ion-item ion-avatar{--avatar-border-width: 1px;--avatar-border-opacity: .5;--avatar-size: 40px;--avatar-svg-background-color: var(--ion-background-color);--avatar-img-background-color: var(--ion-color-secondary);height:var(--avatar-size, 40px);width:var(--avatar-size, 40px);border:solid var(--avatar-border-width, 1px) rgba(var(--ion-color-secondary-rgb),var(--avatar-border-opacity, .5))}ion-card ion-item ion-avatar ::ng-deep ion-img img{background-color:var(--avatar-img-background-color)}ion-card ion-item ion-avatar svg{background-color:var(--avatar-svg-background-color);border-radius:50%;height:calc(var(--avatar-size, 40px) - var(--avatar-border-width, 1px) * 2);width:calc(var(--avatar-size, 40px) - var(--avatar-border-width, 1px) * 2)}ion-card ion-item ion-card-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}ion-card ion-card-content{background-color:var(--ion-color-light-tint)}ion-card ion-card-content ion-label.status,ion-card ion-card-content * ion-label.status{font-size:12px!important;color:var(--ion-color-step-850)}\n"], dependencies: [{ kind: "component", type: i1.IonAvatar, selector: "ion-avatar" }, { kind: "component", type: i1.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i1.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i1.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i3.SvgJdenticonDirective, selector: "svg[data-jdenticon-hash],svg[data-jdenticon-value]", inputs: ["data-jdenticon-hash", "data-jdenticon-value", "width", "height"] }, { kind: "pipe", type: i4.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i5.IsNotNilPipe, name: "isNotNil" }, { kind: "pipe", type: i6.PersonToStringPipe, name: "personToString" }], animations: [fadeInAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
16
16
  }
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EntityMetadataComponent, decorators: [{
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EntityMetadataComponent, decorators: [{
18
18
  type: Component,
19
19
  args: [{ selector: 'app-entity-metadata', animations: [fadeInAnimation], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (value?.id) {\n <ion-card @fadeInAnimation>\n <!-- recorder -->\n @if (showRecorder && (value.recorderDepartment || value.recorderPerson)) {\n <ion-item color=\"transparent\">\n <!-- recorder avatar -->\n @if (value.recorderPerson; as recorderPerson) {\n <ion-avatar slot=\"start\">\n @if (recorderPerson.avatar; as avatarUrl) {\n <ion-img [src]=\"avatarUrl\"/>\n } @else if (recorderPerson?.id | isNotNil) {\n <svg width=\"38\" height=\"38\" [data-jdenticon-value]=\"recorderPerson.id\"></svg>\n }\n </ion-avatar>\n }\n\n <!-- recorder name -->\n <ion-label>\n <ion-card-subtitle translate>COMMON.RECORDER</ion-card-subtitle>\n @if (value.recorderPerson; as recorderPerson) {\n <ion-card-title class=\"ion-text-nowrap\">\n {{ recorderPerson | personToString }}\n </ion-card-title>\n @if (value.recorderDepartment) {\n <ion-card-subtitle>{{ value.recorderDepartment.label || value.recorderDepartment.name }}</ion-card-subtitle>\n }\n } @else if (value.recorderDepartment) {\n <ion-card-title>{{ value.recorderDepartment.label || value.recorderDepartment.name }}</ion-card-title>\n }\n\n\n </ion-label>\n\n <ng-content select=\"[recorderSuffix]\"></ng-content>\n </ion-item>\n }\n\n <ng-content select=\"[afterRecorder]\"></ng-content>\n\n <ion-card-content>\n <ion-label class=\"ion-text-wrap status\">\n <!-- creation date -->\n @if (value.creationDate) {\n <ion-text>\n <ion-icon name=\"calendar\"></ion-icon>\n &nbsp;\n <span translate>COMMON.CREATED_ON</span>\n <span>\n &nbsp;\n <b>{{ value.creationDate | dateFormat: {time: true} }}</b>\n </span>\n </ion-text>\n }\n\n <!-- update date -->\n @if (value.updateDate != value.creationDate && value.updateDate; as updateDate) {\n <ion-text>\n @if (value.creationDate) {\n <br/>\n }\n <ion-label>\n <ion-icon name=\"time-outline\"></ion-icon>\n &nbsp;\n <span translate>COMMON.UPDATED_ON</span>\n <span>&nbsp;{{ updateDate | dateFormat: {time: true, seconds: true} }}</span>\n </ion-label>\n </ion-text>\n }\n </ion-label>\n\n <ng-content></ng-content>\n </ion-card-content>\n </ion-card>\n}\n", styles: ["ion-card{background-color:var(--ion-color-light-tint)}ion-card ion-item ion-avatar{--avatar-border-width: 1px;--avatar-border-opacity: .5;--avatar-size: 40px;--avatar-svg-background-color: var(--ion-background-color);--avatar-img-background-color: var(--ion-color-secondary);height:var(--avatar-size, 40px);width:var(--avatar-size, 40px);border:solid var(--avatar-border-width, 1px) rgba(var(--ion-color-secondary-rgb),var(--avatar-border-opacity, .5))}ion-card ion-item ion-avatar ::ng-deep ion-img img{background-color:var(--avatar-img-background-color)}ion-card ion-item ion-avatar svg{background-color:var(--avatar-svg-background-color);border-radius:50%;height:calc(var(--avatar-size, 40px) - var(--avatar-border-width, 1px) * 2);width:calc(var(--avatar-size, 40px) - var(--avatar-border-width, 1px) * 2)}ion-card ion-item ion-card-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}ion-card ion-card-content{background-color:var(--ion-color-light-tint)}ion-card ion-card-content ion-label.status,ion-card ion-card-content * ion-label.status{font-size:12px!important;color:var(--ion-color-step-850)}\n"] }]
20
20
  }], propDecorators: { value: [{
@@ -7,15 +7,15 @@ import { CorePipesModule } from "../../services/pipes/pipes.module";
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "@ngx-translate/core";
9
9
  export class AppEntityFormModule {
10
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppEntityFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
11
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AppEntityFormModule, declarations: [
10
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppEntityFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
11
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AppEntityFormModule, declarations: [
12
12
  // Other components
13
13
  EntityMetadataComponent], imports: [SharedModule, i1.TranslateModule, NgxJdenticonModule, CorePipesModule], exports: [TranslateModule,
14
14
  // Components
15
15
  EntityMetadataComponent] });
16
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppEntityFormModule, imports: [SharedModule, TranslateModule.forChild(), NgxJdenticonModule, CorePipesModule, TranslateModule] });
16
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppEntityFormModule, imports: [SharedModule, TranslateModule.forChild(), NgxJdenticonModule, CorePipesModule, TranslateModule] });
17
17
  }
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppEntityFormModule, decorators: [{
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppEntityFormModule, decorators: [{
19
19
  type: NgModule,
20
20
  args: [{
21
21
  imports: [SharedModule, TranslateModule.forChild(), NgxJdenticonModule, CorePipesModule],
@@ -168,10 +168,10 @@ export class AppTabEditor extends AppEditor {
168
168
  state: { animated: false },
169
169
  });
170
170
  }
171
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppTabEditor, deps: [{ token: i1.ActivatedRoute, optional: true }, { token: i1.Router }, { token: i2.NavController }, { token: i2.AlertController }, { token: i3.TranslateService }, { token: AppTabEditorOptions, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
172
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: AppTabEditor, inputs: { queryTabIndexParamName: "queryTabIndexParamName", selectedTabIndex: "selectedTabIndex" }, outputs: { selectedTabIndexChange: "selectedTabIndexChange" }, viewQueries: [{ propertyName: "tabGroup", first: true, predicate: ["tabGroup"], descendants: true, static: true }], usesInheritance: true, ngImport: i0 });
171
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppTabEditor, deps: [{ token: i1.ActivatedRoute, optional: true }, { token: i1.Router }, { token: i2.NavController }, { token: i2.AlertController }, { token: i3.TranslateService }, { token: AppTabEditorOptions, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
172
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: AppTabEditor, inputs: { queryTabIndexParamName: "queryTabIndexParamName", selectedTabIndex: "selectedTabIndex" }, outputs: { selectedTabIndexChange: "selectedTabIndexChange" }, viewQueries: [{ propertyName: "tabGroup", first: true, predicate: ["tabGroup"], descendants: true, static: true }], usesInheritance: true, ngImport: i0 });
173
173
  }
174
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppTabEditor, decorators: [{
174
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppTabEditor, decorators: [{
175
175
  type: Directive
176
176
  }], ctorParameters: () => [{ type: i1.ActivatedRoute, decorators: [{
177
177
  type: Optional
@@ -336,10 +336,10 @@ export class AppFormContainer {
336
336
  console.warn(`${prefix} Unknown children sub-form: `, c);
337
337
  }
338
338
  }
339
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppFormContainer, deps: [], target: i0.ɵɵFactoryTarget.Directive });
340
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: AppFormContainer, inputs: { debug: "debug" }, ngImport: i0 });
339
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppFormContainer, deps: [], target: i0.ɵɵFactoryTarget.Directive });
340
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: AppFormContainer, inputs: { debug: "debug" }, ngImport: i0 });
341
341
  }
342
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppFormContainer, decorators: [{
342
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppFormContainer, decorators: [{
343
343
  type: Directive
344
344
  }], ctorParameters: () => [], propDecorators: { debug: [{
345
345
  type: Input
@@ -319,10 +319,10 @@ export class AppForm {
319
319
  }
320
320
  }
321
321
  }
322
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppForm, deps: [{ token: i0.Injector }, { token: i1.UntypedFormGroup }], target: i0.ɵɵFactoryTarget.Directive });
323
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.14", type: AppForm, inputs: { debug: ["debug", "debug", booleanAttribute], tabindex: ["tabindex", "tabindex", numberAttribute], errorTranslateOptions: "errorTranslateOptions", form: "form" }, outputs: { onCancel: "onCancel", onSubmit: "onSubmit" }, ngImport: i0 });
322
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppForm, deps: [{ token: i0.Injector }, { token: i1.UntypedFormGroup }], target: i0.ɵɵFactoryTarget.Directive });
323
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.13", type: AppForm, inputs: { debug: ["debug", "debug", booleanAttribute], tabindex: ["tabindex", "tabindex", numberAttribute], errorTranslateOptions: "errorTranslateOptions", form: "form" }, outputs: { onCancel: "onCancel", onSubmit: "onSubmit" }, ngImport: i0 });
324
324
  }
325
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppForm, decorators: [{
325
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppForm, decorators: [{
326
326
  type: Directive
327
327
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.UntypedFormGroup }], propDecorators: { debug: [{
328
328
  type: Input,
@@ -11,8 +11,8 @@ import { AppTextFormModule } from './text/text-form.module';
11
11
  import * as i0 from "@angular/core";
12
12
  import * as i1 from "@ngx-translate/core";
13
13
  export class AppFormModule {
14
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
15
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AppFormModule, imports: [SharedModule, i1.TranslateModule,
14
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
15
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AppFormModule, imports: [SharedModule, i1.TranslateModule,
16
16
  // Sub modules
17
17
  AppEntityFormModule,
18
18
  AppListFormModule,
@@ -28,7 +28,7 @@ export class AppFormModule {
28
28
  AppTextFormModule,
29
29
  AppTextPopoverModule,
30
30
  AppFormButtonsBarModule] });
31
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppFormModule, imports: [SharedModule,
31
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppFormModule, imports: [SharedModule,
32
32
  TranslateModule.forChild(),
33
33
  // Sub modules
34
34
  AppEntityFormModule,
@@ -46,7 +46,7 @@ export class AppFormModule {
46
46
  AppTextPopoverModule,
47
47
  AppFormButtonsBarModule] });
48
48
  }
49
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppFormModule, decorators: [{
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppFormModule, decorators: [{
50
50
  type: NgModule,
51
51
  args: [{
52
52
  imports: [
@@ -212,10 +212,10 @@ export class AppListForm extends AppForm {
212
212
  markForCheck() {
213
213
  this.cd.markForCheck();
214
214
  }
215
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppListForm, deps: [{ token: i0.Injector }, { token: i1.UntypedFormBuilder }, { token: i2.DateAdapter }, { token: i3.LocalSettingsService }, { token: i0.ChangeDetectorRef }, { token: i1.FormGroupDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
216
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AppListForm, selector: "app-list-form", inputs: { formArrayName: "formArrayName", formArray: "formArray", options: "options", displayWithFn: ["displayWith", "displayWithFn"], equalsFn: ["equals", "equalsFn"], isEmptyFn: ["isEmpty", "isEmptyFn"] }, outputs: { onNewItem: "onNewItem", selectionChanges: "selectionChanges" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!loading; else listSkeleton\">\n <!-- List -->\n <ion-list class=\"ion-no-padding\">\n <ng-container *ngFor=\"let itemControl of itemControls; index as i; last as last\">\n <ion-item\n *ngIf=\"itemControl.value; let item\"\n [class.disabled]=\"disabled\"\n tappable\n (click)=\"onItemClick($event, item)\"\n [color]=\"selection.isSelected(item) ? 'secondary100' : undefined\"\n [button]=\"selectionChanges.observers | isNotEmptyArray\"\n >\n <ion-label>{{ displayWith(item) }}</ion-label>\n\n <!-- buttons -->\n <ion-buttons slot=\"end\" *ngIf=\"enabled\" class=\"action-buttons\">\n <ion-button fill=\"clear\" (click)=\"removeAt(i)\">\n <ion-icon slot=\"icon-only\" name=\"trash\"></ion-icon>\n </ion-button>\n\n <ion-button\n *ngFor=\"let button of options.buttons\"\n fill=\"clear\"\n [color]=\"button.color\"\n [class.cdk-visually-hidden]=\"button.disabled | async\"\n (click)=\"onItemButtonClick(button, $event, item, i)\"\n [title]=\"!showTooltip ? (button.title || '' | translate) : ''\"\n [matTooltip]=\"showTooltip ? (button.title || '' | translate) : ''\"\n >\n <ion-icon slot=\"icon-only\" [name]=\"button.icon\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-item>\n </ng-container>\n </ion-list>\n\n <!-- Add button -->\n <ion-button\n color=\"tertiary\"\n fill=\"clear\"\n *ngIf=\"enabled && onNewItem.observed; else emptyText\"\n [title]=\"!showTooltip ? ('COMMON.BTN_ADD' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('COMMON.BTN_ADD' | translate) : ''\"\n (click)=\"onNewClick($event)\"\n >\n <ion-icon slot=\"start\" name=\"add\"></ion-icon>\n <ion-label translate>COMMON.BTN_ADD</ion-label>\n </ion-button>\n\n <!-- Empty (if readonly) -->\n <ng-template #emptyText>\n <ion-text *ngIf=\"!length\" color=\"medium\"><i translate>COMMON.EMPTY_OPTION</i></ion-text>\n </ng-template>\n</ng-container>\n\n<ng-template #listSkeleton>\n <ion-list>\n <ng-container *ngTemplateOutlet=\"itemSkeleton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"itemSkeleton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"itemSkeleton\"></ng-container>\n </ion-list>\n</ng-template>\n\n<ng-template #itemSkeleton>\n <ion-item>\n <ion-label>\n <ion-skeleton-text animated style=\"width: 60%\"></ion-skeleton-text>\n </ion-label>\n </ion-item>\n</ng-template>\n", styles: [":host{--ion-item-background-selected: var(--ion-color-secondary100);--ion-item-color-selected: var(--ion-color-secondary100-contrast)}ion-item.disabled ion-label{color:var(--ion-color-medium-shade, grey)}ion-item{--min-height: 48px;background-color:var(--ion-item-background)}ion-item ion-text,ion-item ion-label{color:var(--ion-item-color)}ion-item .action-buttons{visibility:hidden;display:none}ion-item:hover{height:var(--min-height);--ion-item-background-color: var(--ion-color-light);--ion-item-color: var(--ion-color-light-contrast)}ion-item:hover .action-buttons{margin-top:-1px;visibility:visible;display:block}ion-item.selected{--ion-item-background-color-hover: var(--ion-item-background-selected) !important;--ion-item-color-hover: var(--ion-item-color-selected) !important}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i5.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i5.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i5.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i5.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i5.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i5.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i5.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i6.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }, { kind: "pipe", type: i8.NotEmptyArrayPipe, name: "isNotEmptyArray" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
215
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppListForm, deps: [{ token: i0.Injector }, { token: i1.UntypedFormBuilder }, { token: i2.DateAdapter }, { token: i3.LocalSettingsService }, { token: i0.ChangeDetectorRef }, { token: i1.FormGroupDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
216
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AppListForm, selector: "app-list-form", inputs: { formArrayName: "formArrayName", formArray: "formArray", options: "options", displayWithFn: ["displayWith", "displayWithFn"], equalsFn: ["equals", "equalsFn"], isEmptyFn: ["isEmpty", "isEmptyFn"] }, outputs: { onNewItem: "onNewItem", selectionChanges: "selectionChanges" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!loading; else listSkeleton\">\n <!-- List -->\n <ion-list class=\"ion-no-padding\">\n <ng-container *ngFor=\"let itemControl of itemControls; index as i; last as last\">\n <ion-item\n *ngIf=\"itemControl.value; let item\"\n [class.disabled]=\"disabled\"\n tappable\n (click)=\"onItemClick($event, item)\"\n [color]=\"selection.isSelected(item) ? 'secondary100' : undefined\"\n [button]=\"selectionChanges.observers | isNotEmptyArray\"\n >\n <ion-label>{{ displayWith(item) }}</ion-label>\n\n <!-- buttons -->\n <ion-buttons slot=\"end\" *ngIf=\"enabled\" class=\"action-buttons\">\n <ion-button fill=\"clear\" (click)=\"removeAt(i)\">\n <ion-icon slot=\"icon-only\" name=\"trash\"></ion-icon>\n </ion-button>\n\n <ion-button\n *ngFor=\"let button of options.buttons\"\n fill=\"clear\"\n [color]=\"button.color\"\n [class.cdk-visually-hidden]=\"button.disabled | async\"\n (click)=\"onItemButtonClick(button, $event, item, i)\"\n [title]=\"!showTooltip ? (button.title || '' | translate) : ''\"\n [matTooltip]=\"showTooltip ? (button.title || '' | translate) : ''\"\n >\n <ion-icon slot=\"icon-only\" [name]=\"button.icon\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-item>\n </ng-container>\n </ion-list>\n\n <!-- Add button -->\n <ion-button\n color=\"tertiary\"\n fill=\"clear\"\n *ngIf=\"enabled && onNewItem.observed; else emptyText\"\n [title]=\"!showTooltip ? ('COMMON.BTN_ADD' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('COMMON.BTN_ADD' | translate) : ''\"\n (click)=\"onNewClick($event)\"\n >\n <ion-icon slot=\"start\" name=\"add\"></ion-icon>\n <ion-label translate>COMMON.BTN_ADD</ion-label>\n </ion-button>\n\n <!-- Empty (if readonly) -->\n <ng-template #emptyText>\n <ion-text *ngIf=\"!length\" color=\"medium\"><i translate>COMMON.EMPTY_OPTION</i></ion-text>\n </ng-template>\n</ng-container>\n\n<ng-template #listSkeleton>\n <ion-list>\n <ng-container *ngTemplateOutlet=\"itemSkeleton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"itemSkeleton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"itemSkeleton\"></ng-container>\n </ion-list>\n</ng-template>\n\n<ng-template #itemSkeleton>\n <ion-item>\n <ion-label>\n <ion-skeleton-text animated style=\"width: 60%\"></ion-skeleton-text>\n </ion-label>\n </ion-item>\n</ng-template>\n", styles: [":host{--ion-item-background-selected: var(--ion-color-secondary100);--ion-item-color-selected: var(--ion-color-secondary100-contrast)}ion-item.disabled ion-label{color:var(--ion-color-medium-shade, grey)}ion-item{--min-height: 48px;background-color:var(--ion-item-background)}ion-item ion-text,ion-item ion-label{color:var(--ion-item-color)}ion-item .action-buttons{visibility:hidden;display:none}ion-item:hover{height:var(--min-height);--ion-item-background-color: var(--ion-color-light);--ion-item-color: var(--ion-color-light-contrast)}ion-item:hover .action-buttons{margin-top:-1px;visibility:visible;display:block}ion-item.selected{--ion-item-background-color-hover: var(--ion-item-background-selected) !important;--ion-item-color-hover: var(--ion-item-color-selected) !important}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i5.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i5.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i5.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i5.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i5.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i5.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i5.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i6.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }, { kind: "pipe", type: i8.NotEmptyArrayPipe, name: "isNotEmptyArray" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
217
217
  }
218
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppListForm, decorators: [{
218
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppListForm, decorators: [{
219
219
  type: Component,
220
220
  args: [{ selector: 'app-list-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"!loading; else listSkeleton\">\n <!-- List -->\n <ion-list class=\"ion-no-padding\">\n <ng-container *ngFor=\"let itemControl of itemControls; index as i; last as last\">\n <ion-item\n *ngIf=\"itemControl.value; let item\"\n [class.disabled]=\"disabled\"\n tappable\n (click)=\"onItemClick($event, item)\"\n [color]=\"selection.isSelected(item) ? 'secondary100' : undefined\"\n [button]=\"selectionChanges.observers | isNotEmptyArray\"\n >\n <ion-label>{{ displayWith(item) }}</ion-label>\n\n <!-- buttons -->\n <ion-buttons slot=\"end\" *ngIf=\"enabled\" class=\"action-buttons\">\n <ion-button fill=\"clear\" (click)=\"removeAt(i)\">\n <ion-icon slot=\"icon-only\" name=\"trash\"></ion-icon>\n </ion-button>\n\n <ion-button\n *ngFor=\"let button of options.buttons\"\n fill=\"clear\"\n [color]=\"button.color\"\n [class.cdk-visually-hidden]=\"button.disabled | async\"\n (click)=\"onItemButtonClick(button, $event, item, i)\"\n [title]=\"!showTooltip ? (button.title || '' | translate) : ''\"\n [matTooltip]=\"showTooltip ? (button.title || '' | translate) : ''\"\n >\n <ion-icon slot=\"icon-only\" [name]=\"button.icon\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-item>\n </ng-container>\n </ion-list>\n\n <!-- Add button -->\n <ion-button\n color=\"tertiary\"\n fill=\"clear\"\n *ngIf=\"enabled && onNewItem.observed; else emptyText\"\n [title]=\"!showTooltip ? ('COMMON.BTN_ADD' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('COMMON.BTN_ADD' | translate) : ''\"\n (click)=\"onNewClick($event)\"\n >\n <ion-icon slot=\"start\" name=\"add\"></ion-icon>\n <ion-label translate>COMMON.BTN_ADD</ion-label>\n </ion-button>\n\n <!-- Empty (if readonly) -->\n <ng-template #emptyText>\n <ion-text *ngIf=\"!length\" color=\"medium\"><i translate>COMMON.EMPTY_OPTION</i></ion-text>\n </ng-template>\n</ng-container>\n\n<ng-template #listSkeleton>\n <ion-list>\n <ng-container *ngTemplateOutlet=\"itemSkeleton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"itemSkeleton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"itemSkeleton\"></ng-container>\n </ion-list>\n</ng-template>\n\n<ng-template #itemSkeleton>\n <ion-item>\n <ion-label>\n <ion-skeleton-text animated style=\"width: 60%\"></ion-skeleton-text>\n </ion-label>\n </ion-item>\n</ng-template>\n", styles: [":host{--ion-item-background-selected: var(--ion-color-secondary100);--ion-item-color-selected: var(--ion-color-secondary100-contrast)}ion-item.disabled ion-label{color:var(--ion-color-medium-shade, grey)}ion-item{--min-height: 48px;background-color:var(--ion-item-background)}ion-item ion-text,ion-item ion-label{color:var(--ion-item-color)}ion-item .action-buttons{visibility:hidden;display:none}ion-item:hover{height:var(--min-height);--ion-item-background-color: var(--ion-color-light);--ion-item-color: var(--ion-color-light-contrast)}ion-item:hover .action-buttons{margin-top:-1px;visibility:visible;display:block}ion-item.selected{--ion-item-background-color-hover: var(--ion-item-background-selected) !important;--ion-item-color-hover: var(--ion-item-color-selected) !important}\n"] }]
221
221
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.UntypedFormBuilder }, { type: i2.DateAdapter }, { type: i3.LocalSettingsService }, { type: i0.ChangeDetectorRef }, { type: i1.FormGroupDirective, decorators: [{
@@ -5,15 +5,15 @@ import { TranslateModule } from '@ngx-translate/core';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@ngx-translate/core";
7
7
  export class AppListFormModule {
8
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppListFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AppListFormModule, declarations: [
8
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppListFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AppListFormModule, declarations: [
10
10
  // Other components
11
11
  AppListForm], imports: [SharedModule, i1.TranslateModule], exports: [TranslateModule,
12
12
  // Components
13
13
  AppListForm] });
14
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppListFormModule, imports: [SharedModule, TranslateModule.forChild(), TranslateModule] });
14
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppListFormModule, imports: [SharedModule, TranslateModule.forChild(), TranslateModule] });
15
15
  }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppListFormModule, decorators: [{
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppListFormModule, decorators: [{
17
17
  type: NgModule,
18
18
  args: [{
19
19
  imports: [SharedModule, TranslateModule.forChild()],
@@ -120,10 +120,10 @@ export class PropertiesFileService {
120
120
  throw new Error("Missing toastController in component's constructor");
121
121
  return Toasts.show(this.toastController, this.translate, opts);
122
122
  }
123
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PropertiesFileService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive });
124
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: PropertiesFileService, inputs: { i18nColumnPrefix: "i18nColumnPrefix", importPolicy: "importPolicy" }, ngImport: i0 });
123
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PropertiesFileService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive });
124
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: PropertiesFileService, inputs: { i18nColumnPrefix: "i18nColumnPrefix", importPolicy: "importPolicy" }, ngImport: i0 });
125
125
  }
126
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PropertiesFileService, decorators: [{
126
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PropertiesFileService, decorators: [{
127
127
  type: Directive
128
128
  }], ctorParameters: () => [{ type: i0.Injector }], propDecorators: { i18nColumnPrefix: [{
129
129
  type: Input
@@ -336,10 +336,10 @@ export class AppPropertiesForm extends AppForm {
336
336
  isEmptyProperty(obj) {
337
337
  return isNil(obj?.key) || isNil(obj.value);
338
338
  }
339
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppPropertiesForm, deps: [{ token: i0.Injector }, { token: i1.UntypedFormBuilder }, { token: i2.DateAdapter }, { token: i0.ChangeDetectorRef }, { token: i3.PropertyValidator }, { token: i1.FormGroupDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
340
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AppPropertiesForm, selector: "app-properties-form", inputs: { showToolbar: ["showToolbar", "showToolbar", booleanAttribute], formArrayName: "formArrayName", formArray: "formArray", options: "options", chipColor: "chipColor", mobile: ["mobile", "mobile", booleanAttribute], appearance: "appearance", subscriptSizing: "subscriptSizing", showHintKey: ["showHintKey", "showHintKey", booleanAttribute], hintKeyPrefix: "hintKeyPrefix", showMoreButton: ["showMoreButton", "showMoreButton", booleanAttribute], addButtonText: "addButtonText", addButtonTitle: "addButtonTitle", showAddButton: ["showAddButton", "showAddButton", booleanAttribute], panelClass: "panelClass", panelWidth: "panelWidth", canDownload: ["canDownload", "canDownload", booleanAttribute], canImport: ["canImport", "canImport", booleanAttribute], showMoreButtonTitle: "showMoreButtonTitle", definitions: "definitions", importPolicy: "importPolicy" }, providers: [{ provide: PropertyValidator, useClass: PropertyValidator }, RxState], usesInheritance: true, ngImport: i0, template: "@if (showToolbar) {\n <mat-toolbar>\n <div class=\"toolbar-spacer\"></div>\n\n <ion-item lines=\"none\" (click)=\"toggleShowHintKeys()\">\n <ion-label color=\"dark\">{{ 'FILE.PROPERTIES.BTN_SHOW_HINT_KEY' | translate }}</ion-label>\n <ion-toggle color=\"primary\" [checked]=\"showHintKey\"></ion-toggle>\n </ion-item>\n\n <!-- options sub menu -->\n @if (canDownload || canImport) {\n <button\n slot=\"end\"\n mat-icon-button\n [matMenuTriggerFor]=\"optionsMenu\"\n [title]=\"!showTooltip ? ('COMMON.BTN_OPTIONS' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('COMMON.BTN_OPTIONS' | translate) : ''\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n }\n </mat-toolbar>\n}\n\n<!-- Options menu -->\n<mat-menu #optionsMenu=\"matMenu\">\n <!-- Download as CSV -->\n @if (canDownload) {\n <button mat-menu-item [disabled]=\"loading\" [matMenuTriggerFor]=\"downloadMenu\">\n <mat-icon>download</mat-icon>\n <ion-label translate>COMMON.BTN_DOWNLOAD_DOTS</ion-label>\n </button>\n }\n\n <!-- Import from file -->\n @if (canImport) {\n <button mat-menu-item [disabled]=\"loading || disabled\" [matMenuTriggerFor]=\"importMenu\">\n <mat-icon>upload</mat-icon>\n <ion-label translate>COMMON.BTN_IMPORT_FROM_FILE_DOTS</ion-label>\n </button>\n }\n</mat-menu>\n\n<!-- Download menu -->\n<mat-menu #downloadMenu=\"matMenu\">\n <button mat-menu-item [disabled]=\"loading\" (click)=\"exportToCsv()\">\n <ion-label translate>FILE.PROPERTIES.BTN_DOWNLOAD_AS_CSV</ion-label>\n </button>\n</mat-menu>\n\n<!-- Import menu -->\n<mat-menu #importMenu=\"matMenu\">\n <!-- import from file -->\n <button mat-menu-item (click)=\"importFromCsv($event)\">\n <ion-label translate>FILE.PROPERTIES.BTN_IMPORT_FROM_CSV</ion-label>\n </button>\n\n <!-- import policy -->\n <mat-divider></mat-divider>\n <button mat-menu-item [matMenuTriggerFor]=\"importPolicyMenu\">\n <ion-label translate>FILE.UPLOAD.BTN_IMPORT_POLICY_DOTS</ion-label>\n </button>\n</mat-menu>\n\n<!-- Import policy menu -->\n<mat-menu #importPolicyMenu=\"matMenu\" class=\"ion-no-padding\">\n <ng-template matMenuContent>\n <!-- header-->\n <ion-row class=\"mat-menu-header ion-no-padding column\">\n <ion-col>\n <ion-label translate>FILE.UPLOAD.IMPORT_POLICY.TITLE</ion-label>\n </ion-col>\n </ion-row>\n @for (policy of _importPolicies; track policy) {\n <button mat-menu-item (click)=\"importPolicy = policy\">\n <mat-icon>{{ importPolicy === policy ? 'check_box' : 'check_box_outline_blank' }}</mat-icon>\n <ion-label>{{ 'FILE.UPLOAD.IMPORT_POLICY.' + policy | uppercase | translate }}</ion-label>\n </button>\n }\n </ng-template>\n</mat-menu>\n\n<!-- Properties -->\n<form [formGroup]=\"form\" class=\"form-container\">\n @if (loadingSubject | async) {\n <ion-list [inset]=\"mobile\">\n <ng-container *ngTemplateOutlet=\"propertyRowSkeleton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"propertyRowSkeleton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"propertyRowSkeleton\"></ng-container>\n </ion-list>\n } @else {\n <ion-list formArrayName=\"properties\" [inset]=\"mobile\">\n <!-- Show more options -->\n @if ((_definitionKeys$ | async | isNotEmptyArray) && formArray?.length === 0) {\n <ion-item lines=\"none\">\n <ion-button\n color=\"light\"\n [title]=\"!showTooltip ? (addButtonTitle | translate) : ''\"\n [matTooltip]=\"showTooltip ? (addButtonTitle | translate) : ''\"\n (click)=\"_helper.add()\"\n >\n <ion-label>{{ addButtonText | translate }}</ion-label>\n <mat-icon slot=\"end\">arrow_drop_down</mat-icon>\n </ion-button>\n </ion-item>\n }\n\n @for (fieldForm of fieldForms; track i; let i = $index) {\n <ion-item lines=\"none\" [class.outline]=\"appearance === 'outline'\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row [formGroupName]=\"i\" class=\"ion-no-padding\">\n @let definition = getDefinitionAt(i);\n\n <!-- property key -->\n @if (fieldForm | formGetControl: 'key'; as control) {\n <ion-col\n size=\"12\"\n size-sm=\"6\"\n [title]=\"!showTooltip ? ((definition | propertyGet: 'label' | translate) || '') : ''\"\n [matTooltip]=\"showTooltip ? ((definition | propertyGet: 'label' | translate) || '') : ''\"\n class=\"ion-no-padding\"\n >\n <mat-autocomplete-field\n floatLabel=\"auto\"\n [formControl]=\"control\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"showHintKey ? 'fixed' : subscriptSizing\"\n (selectionChange)=\"updateDefinitionAt(i)\"\n [tabindex]=\"tabindex + i * 2\"\n [config]=\"_autocompleteConfig\"\n [placeholder]=\"'SETTINGS.PROPERTY_KEY' | translate\"\n [required]=\"true\"\n (focus)=\"_focusedControlIndex = i\"\n [readonly]=\"definition?.disabled\"\n [mobile]=\"mobile\"\n [panelClass]=\"panelClass\"\n [panelWidth]=\"panelWidth\"\n >\n <mat-hint [class.cdk-visually-hidden]=\"!showHintKey\">\n @let keyValue = control.value;\n {{ hintKeyPrefix || '' }}{{ keyValue?.key || keyValue || '' }}\n </mat-hint>\n </mat-autocomplete-field>\n </ion-col>\n }\n\n <!-- property value -->\n <ion-col size=\"\" size-sm=\"\" class=\"ion-no-padding ion-padding-start-xs\">\n @if (definition) {\n <app-form-field\n floatLabel=\"auto\"\n [label]=\"mobile ? ('SETTINGS.PROPERTY_VALUE' | translate) : ' '\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n [definition]=\"definition\"\n [formControl]=\"fieldForm | formGetControl: 'value'\"\n [placeholder]=\"'SETTINGS.PROPERTY_VALUE' | translate\"\n [chipColor]=\"chipColor\"\n [required]=\"true\"\n [hideRequiredMarker]=\"true\"\n [tabindex]=\"tabindex + i * 2 + 1\"\n [readonly]=\"definition?.disabled\"\n [panelClass]=\"panelClass\"\n [panelWidth]=\"panelWidth\"\n ></app-form-field>\n } @else {\n <!-- unknown definition -->\n <mat-form-field [appearance]=\"appearance\" [subscriptSizing]=\"subscriptSizing\">\n @if (mobile) {\n <mat-label>{{ 'SETTINGS.PROPERTY_VALUE' | translate }}</mat-label>\n }\n <input\n type=\"text\"\n matInput\n [formControl]=\"fieldForm | formGetControl: 'value'\"\n [placeholder]=\"mobile ? '' : ('SETTINGS.PROPERTY_VALUE' | translate)\"\n [required]=\"true\"\n [tabindex]=\"20 + i * 2 + 1\"\n />\n </mat-form-field>\n }\n </ion-col>\n\n <ion-col size=\"auto\" class=\"ion-no-padding\">\n @if (_helper.isLast(i)) {\n <button\n type=\"button\"\n mat-icon-button\n color=\"light\"\n [disabled]=\"\n disabled || (fieldForm.value | asBoolean: isEmptyProperty) || (_definitionKeys | isEmptyArray)\n \"\n [title]=\"!showTooltip ? ('SETTINGS.BTN_ADD_PROPERTY' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('SETTINGS.BTN_ADD_PROPERTY' | translate) : ''\"\n (click)=\"_helper.add()\"\n [tabindex]=\"20 + i * 2 + 2\"\n >\n <mat-icon>add</mat-icon>\n </button>\n }\n <button\n type=\"button\"\n mat-icon-button\n color=\"light\"\n [disabled]=\"definition?.disabled || disabled\"\n [title]=\"!showTooltip ? ('COMMON.BTN_DELETE' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('COMMON.BTN_DELETE' | translate) : ''\"\n (click)=\"removeAt(i)\"\n [tabindex]=\"-1\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-item>\n }\n </ion-list>\n }\n</form>\n\n<ng-template #propertyRowSkeleton>\n <ion-item lines=\"none\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n <!-- property key -->\n <ion-col size=\"6\" class=\"ion-no-padding\">\n <mat-form-field [subscriptSizing]=\"subscriptSizing\">\n <input matInput hidden disabled />\n <ion-skeleton-text [animated]=\"true\" style=\"width: 60%\"></ion-skeleton-text>\n <ion-icon name=\"arrow-dropdown\" matSuffix></ion-icon>\n </mat-form-field>\n </ion-col>\n <!-- value -->\n <ion-col class=\"ion-no-padding\">\n <mat-form-field [subscriptSizing]=\"subscriptSizing\">\n <input matInput hidden disabled />\n <ion-skeleton-text [animated]=\"true\" style=\"width: 60%\"></ion-skeleton-text>\n </mat-form-field>\n </ion-col>\n <!-- buttons -->\n <ion-col size=\"auto\">\n <button type=\"button\" mat-icon-button color=\"light\" disabled>\n <mat-icon>close</mat-icon>\n </button>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-item>\n</ng-template>\n", styles: [":host ion-item ion-row ion-col{--ion-padding-start: 0;min-width:48px}:host ion-item.outline{overflow:visible}:host ion-item.outline ion-grid,:host ion-item.outline ion-row,:host ion-item.outline ion-col{overflow:visible}\n"], dependencies: [{ kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i5.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i5.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i5.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i5.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i5.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i5.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i5.IonRow, selector: "ion-row" }, { kind: "component", type: i5.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i5.IonToggle, selector: "ion-toggle", inputs: ["alignment", "checked", "color", "disabled", "enableOnOffLabels", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "directive", type: i5.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i6.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { 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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { 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: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i8.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: "component", type: i9.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i12.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i13.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i14.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i15.MatAutocompleteField, selector: "mat-autocomplete-field", inputs: ["equals", "logPrefix", "formControl", "formControlName", "floatLabel", "label", "appearance", "subscriptSizing", "placeholder", "suggestFn", "required", "hideRequiredMarker", "mobile", "clearable", "debounceTime", "displaySeparator", "displayWith", "displayAttributes", "displayColumnSizes", "displayColumnNames", "highlightAccent", "showAllOnFocus", "showPanelOnFocus", "reloadItemsOnFocus", "clearInvalidValueOnBlur", "autofocus", "config", "i18nPrefix", "noResultMessage", "panelClass", "panelWidth", "disableRipple", "matAutocompletePosition", "multiple", "fetchMoreThreshold", "suggestLengthThreshold", "showLoadingSpinner", "debug", "showSearchBar", "stickySearchBar", "applyImplicitValue", "dropButtonTitle", "clearButtonTitle", "trimSearchText", "splitSearchText", "selectInputContentOnFocus", "selectInputContentOnFocusDelay", "previewImplicitValue", "showFavorites", "toggleFavoriteTitle", "favoriteItems", "colSizes", "class", "filter", "readonly", "tabindex", "items"], outputs: ["click", "blur", "focus", "dropButtonClick", "keydown.escape", "keydown.backspace", "keyup.enter", "arrowUp", "arrowDown", "enter", "selectionChange", "openedChange", "toggleFavorite"] }, { kind: "component", type: i16.AppFormField, selector: "app-form-field", inputs: ["definition", "readonly", "disabled", "formControl", "formControlName", "placeholder", "compact", "required", "hideRequiredMarker", "floatLabel", "label", "appearance", "subscriptSizing", "tabindex", "autofocus", "clearable", "chipColor", "class", "debug", "panelClass", "panelWidth"], outputs: ["keyup.enter"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }, { kind: "pipe", type: i17.PropertyGetPipe, name: "propertyGet" }, { kind: "pipe", type: i18.NotEmptyArrayPipe, name: "isNotEmptyArray" }, { kind: "pipe", type: i18.EmptyArrayPipe, name: "isEmptyArray" }, { kind: "pipe", type: i19.FormGetControlPipe, name: "formGetControl" }, { kind: "pipe", type: i20.AsBooleanPipe, name: "asBoolean" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
339
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppPropertiesForm, deps: [{ token: i0.Injector }, { token: i1.UntypedFormBuilder }, { token: i2.DateAdapter }, { token: i0.ChangeDetectorRef }, { token: i3.PropertyValidator }, { token: i1.FormGroupDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
340
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppPropertiesForm, selector: "app-properties-form", inputs: { showToolbar: ["showToolbar", "showToolbar", booleanAttribute], formArrayName: "formArrayName", formArray: "formArray", options: "options", chipColor: "chipColor", mobile: ["mobile", "mobile", booleanAttribute], appearance: "appearance", subscriptSizing: "subscriptSizing", showHintKey: ["showHintKey", "showHintKey", booleanAttribute], hintKeyPrefix: "hintKeyPrefix", showMoreButton: ["showMoreButton", "showMoreButton", booleanAttribute], addButtonText: "addButtonText", addButtonTitle: "addButtonTitle", showAddButton: ["showAddButton", "showAddButton", booleanAttribute], panelClass: "panelClass", panelWidth: "panelWidth", canDownload: ["canDownload", "canDownload", booleanAttribute], canImport: ["canImport", "canImport", booleanAttribute], showMoreButtonTitle: "showMoreButtonTitle", definitions: "definitions", importPolicy: "importPolicy" }, providers: [{ provide: PropertyValidator, useClass: PropertyValidator }, RxState], usesInheritance: true, ngImport: i0, template: "@if (showToolbar) {\n <mat-toolbar>\n <div class=\"toolbar-spacer\"></div>\n\n <ion-item lines=\"none\" (click)=\"toggleShowHintKeys()\">\n <ion-label color=\"dark\">{{ 'FILE.PROPERTIES.BTN_SHOW_HINT_KEY' | translate }}</ion-label>\n <ion-toggle color=\"primary\" [checked]=\"showHintKey\"></ion-toggle>\n </ion-item>\n\n <!-- options sub menu -->\n @if (canDownload || canImport) {\n <button\n slot=\"end\"\n mat-icon-button\n [matMenuTriggerFor]=\"optionsMenu\"\n [title]=\"!showTooltip ? ('COMMON.BTN_OPTIONS' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('COMMON.BTN_OPTIONS' | translate) : ''\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n }\n </mat-toolbar>\n}\n\n<!-- Options menu -->\n<mat-menu #optionsMenu=\"matMenu\">\n <!-- Download as CSV -->\n @if (canDownload) {\n <button mat-menu-item [disabled]=\"loading\" [matMenuTriggerFor]=\"downloadMenu\">\n <mat-icon>download</mat-icon>\n <ion-label translate>COMMON.BTN_DOWNLOAD_DOTS</ion-label>\n </button>\n }\n\n <!-- Import from file -->\n @if (canImport) {\n <button mat-menu-item [disabled]=\"loading || disabled\" [matMenuTriggerFor]=\"importMenu\">\n <mat-icon>upload</mat-icon>\n <ion-label translate>COMMON.BTN_IMPORT_FROM_FILE_DOTS</ion-label>\n </button>\n }\n</mat-menu>\n\n<!-- Download menu -->\n<mat-menu #downloadMenu=\"matMenu\">\n <button mat-menu-item [disabled]=\"loading\" (click)=\"exportToCsv()\">\n <ion-label translate>FILE.PROPERTIES.BTN_DOWNLOAD_AS_CSV</ion-label>\n </button>\n</mat-menu>\n\n<!-- Import menu -->\n<mat-menu #importMenu=\"matMenu\">\n <!-- import from file -->\n <button mat-menu-item (click)=\"importFromCsv($event)\">\n <ion-label translate>FILE.PROPERTIES.BTN_IMPORT_FROM_CSV</ion-label>\n </button>\n\n <!-- import policy -->\n <mat-divider></mat-divider>\n <button mat-menu-item [matMenuTriggerFor]=\"importPolicyMenu\">\n <ion-label translate>FILE.UPLOAD.BTN_IMPORT_POLICY_DOTS</ion-label>\n </button>\n</mat-menu>\n\n<!-- Import policy menu -->\n<mat-menu #importPolicyMenu=\"matMenu\" class=\"ion-no-padding\">\n <ng-template matMenuContent>\n <!-- header-->\n <ion-row class=\"mat-menu-header ion-no-padding column\">\n <ion-col>\n <ion-label translate>FILE.UPLOAD.IMPORT_POLICY.TITLE</ion-label>\n </ion-col>\n </ion-row>\n @for (policy of _importPolicies; track policy) {\n <button mat-menu-item (click)=\"importPolicy = policy\">\n <mat-icon>{{ importPolicy === policy ? 'check_box' : 'check_box_outline_blank' }}</mat-icon>\n <ion-label>{{ 'FILE.UPLOAD.IMPORT_POLICY.' + policy | uppercase | translate }}</ion-label>\n </button>\n }\n </ng-template>\n</mat-menu>\n\n<!-- Properties -->\n<form [formGroup]=\"form\" class=\"form-container\">\n @if (loadingSubject | async) {\n <ion-list [inset]=\"mobile\">\n <ng-container *ngTemplateOutlet=\"propertyRowSkeleton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"propertyRowSkeleton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"propertyRowSkeleton\"></ng-container>\n </ion-list>\n } @else {\n <ion-list formArrayName=\"properties\" [inset]=\"mobile\">\n <!-- Show more options -->\n @if ((_definitionKeys$ | async | isNotEmptyArray) && formArray?.length === 0) {\n <ion-item lines=\"none\">\n <ion-button\n color=\"light\"\n [title]=\"!showTooltip ? (addButtonTitle | translate) : ''\"\n [matTooltip]=\"showTooltip ? (addButtonTitle | translate) : ''\"\n (click)=\"_helper.add()\"\n >\n <ion-label>{{ addButtonText | translate }}</ion-label>\n <mat-icon slot=\"end\">arrow_drop_down</mat-icon>\n </ion-button>\n </ion-item>\n }\n\n @for (fieldForm of fieldForms; track i; let i = $index) {\n <ion-item lines=\"none\" [class.outline]=\"appearance === 'outline'\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row [formGroupName]=\"i\" class=\"ion-no-padding\">\n @let definition = getDefinitionAt(i);\n\n <!-- property key -->\n @if (fieldForm | formGetControl: 'key'; as control) {\n <ion-col\n size=\"12\"\n size-sm=\"6\"\n [title]=\"!showTooltip ? ((definition | propertyGet: 'label' | translate) || '') : ''\"\n [matTooltip]=\"showTooltip ? ((definition | propertyGet: 'label' | translate) || '') : ''\"\n class=\"ion-no-padding\"\n >\n <mat-autocomplete-field\n floatLabel=\"auto\"\n [formControl]=\"control\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"showHintKey ? 'fixed' : subscriptSizing\"\n (selectionChange)=\"updateDefinitionAt(i)\"\n [tabindex]=\"tabindex + i * 2\"\n [config]=\"_autocompleteConfig\"\n [placeholder]=\"'SETTINGS.PROPERTY_KEY' | translate\"\n [required]=\"true\"\n (focus)=\"_focusedControlIndex = i\"\n [readonly]=\"definition?.disabled\"\n [mobile]=\"mobile\"\n [panelClass]=\"panelClass\"\n [panelWidth]=\"panelWidth\"\n >\n <mat-hint [class.cdk-visually-hidden]=\"!showHintKey\">\n @let keyValue = control.value;\n {{ hintKeyPrefix || '' }}{{ keyValue?.key || keyValue || '' }}\n </mat-hint>\n </mat-autocomplete-field>\n </ion-col>\n }\n\n <!-- property value -->\n <ion-col size=\"\" size-sm=\"\" class=\"ion-no-padding ion-padding-start-xs\">\n @if (definition) {\n <app-form-field\n floatLabel=\"auto\"\n [label]=\"mobile ? ('SETTINGS.PROPERTY_VALUE' | translate) : ' '\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n [definition]=\"definition\"\n [formControl]=\"fieldForm | formGetControl: 'value'\"\n [placeholder]=\"'SETTINGS.PROPERTY_VALUE' | translate\"\n [chipColor]=\"chipColor\"\n [required]=\"true\"\n [hideRequiredMarker]=\"true\"\n [tabindex]=\"tabindex + i * 2 + 1\"\n [readonly]=\"definition?.disabled\"\n [panelClass]=\"panelClass\"\n [panelWidth]=\"panelWidth\"\n ></app-form-field>\n } @else {\n <!-- unknown definition -->\n <mat-form-field [appearance]=\"appearance\" [subscriptSizing]=\"subscriptSizing\">\n @if (mobile) {\n <mat-label>{{ 'SETTINGS.PROPERTY_VALUE' | translate }}</mat-label>\n }\n <input\n type=\"text\"\n matInput\n [formControl]=\"fieldForm | formGetControl: 'value'\"\n [placeholder]=\"mobile ? '' : ('SETTINGS.PROPERTY_VALUE' | translate)\"\n [required]=\"true\"\n [tabindex]=\"20 + i * 2 + 1\"\n />\n </mat-form-field>\n }\n </ion-col>\n\n <ion-col size=\"auto\" class=\"ion-no-padding\">\n @if (_helper.isLast(i)) {\n <button\n type=\"button\"\n mat-icon-button\n color=\"light\"\n [disabled]=\"\n disabled || (fieldForm.value | asBoolean: isEmptyProperty) || (_definitionKeys | isEmptyArray)\n \"\n [title]=\"!showTooltip ? ('SETTINGS.BTN_ADD_PROPERTY' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('SETTINGS.BTN_ADD_PROPERTY' | translate) : ''\"\n (click)=\"_helper.add()\"\n [tabindex]=\"20 + i * 2 + 2\"\n >\n <mat-icon>add</mat-icon>\n </button>\n }\n <button\n type=\"button\"\n mat-icon-button\n color=\"light\"\n [disabled]=\"definition?.disabled || disabled\"\n [title]=\"!showTooltip ? ('COMMON.BTN_DELETE' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('COMMON.BTN_DELETE' | translate) : ''\"\n (click)=\"removeAt(i)\"\n [tabindex]=\"-1\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-item>\n }\n </ion-list>\n }\n</form>\n\n<ng-template #propertyRowSkeleton>\n <ion-item lines=\"none\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n <!-- property key -->\n <ion-col size=\"6\" class=\"ion-no-padding\">\n <mat-form-field [subscriptSizing]=\"subscriptSizing\">\n <input matInput hidden disabled />\n <ion-skeleton-text [animated]=\"true\" style=\"width: 60%\"></ion-skeleton-text>\n <ion-icon name=\"arrow-dropdown\" matSuffix></ion-icon>\n </mat-form-field>\n </ion-col>\n <!-- value -->\n <ion-col class=\"ion-no-padding\">\n <mat-form-field [subscriptSizing]=\"subscriptSizing\">\n <input matInput hidden disabled />\n <ion-skeleton-text [animated]=\"true\" style=\"width: 60%\"></ion-skeleton-text>\n </mat-form-field>\n </ion-col>\n <!-- buttons -->\n <ion-col size=\"auto\">\n <button type=\"button\" mat-icon-button color=\"light\" disabled>\n <mat-icon>close</mat-icon>\n </button>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-item>\n</ng-template>\n", styles: [":host ion-item ion-row ion-col{--ion-padding-start: 0;min-width:48px}:host ion-item.outline{overflow:visible}:host ion-item.outline ion-grid,:host ion-item.outline ion-row,:host ion-item.outline ion-col{overflow:visible}\n"], dependencies: [{ kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i5.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i5.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i5.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i5.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i5.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i5.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i5.IonRow, selector: "ion-row" }, { kind: "component", type: i5.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i5.IonToggle, selector: "ion-toggle", inputs: ["alignment", "checked", "color", "disabled", "enableOnOffLabels", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "directive", type: i5.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i6.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { 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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { 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: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i8.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: "component", type: i9.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i12.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i13.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i14.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i15.MatAutocompleteField, selector: "mat-autocomplete-field", inputs: ["equals", "logPrefix", "formControl", "formControlName", "floatLabel", "label", "appearance", "subscriptSizing", "placeholder", "suggestFn", "required", "hideRequiredMarker", "mobile", "clearable", "debounceTime", "displaySeparator", "displayWith", "displayAttributes", "displayColumnSizes", "displayColumnNames", "highlightAccent", "showAllOnFocus", "showPanelOnFocus", "reloadItemsOnFocus", "clearInvalidValueOnBlur", "autofocus", "config", "i18nPrefix", "noResultMessage", "panelClass", "panelWidth", "disableRipple", "matAutocompletePosition", "multiple", "fetchMoreThreshold", "suggestLengthThreshold", "showLoadingSpinner", "debug", "showSearchBar", "stickySearchBar", "applyImplicitValue", "dropButtonTitle", "clearButtonTitle", "trimSearchText", "splitSearchText", "selectInputContentOnFocus", "selectInputContentOnFocusDelay", "previewImplicitValue", "showFavorites", "toggleFavoriteTitle", "favoriteItems", "colSizes", "class", "filter", "readonly", "tabindex", "items"], outputs: ["click", "blur", "focus", "dropButtonClick", "keydown.escape", "keydown.backspace", "keyup.enter", "arrowUp", "arrowDown", "enter", "selectionChange", "openedChange", "toggleFavorite"] }, { kind: "component", type: i16.AppFormField, selector: "app-form-field", inputs: ["definition", "readonly", "disabled", "formControl", "formControlName", "placeholder", "compact", "required", "hideRequiredMarker", "floatLabel", "label", "appearance", "subscriptSizing", "tabindex", "autofocus", "clearable", "chipColor", "class", "debug", "panelClass", "panelWidth"], outputs: ["keyup.enter"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }, { kind: "pipe", type: i17.PropertyGetPipe, name: "propertyGet" }, { kind: "pipe", type: i18.NotEmptyArrayPipe, name: "isNotEmptyArray" }, { kind: "pipe", type: i18.EmptyArrayPipe, name: "isEmptyArray" }, { kind: "pipe", type: i19.FormGetControlPipe, name: "formGetControl" }, { kind: "pipe", type: i20.AsBooleanPipe, name: "asBoolean" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
341
341
  }
342
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppPropertiesForm, decorators: [{
342
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppPropertiesForm, decorators: [{
343
343
  type: Component,
344
344
  args: [{ selector: 'app-properties-form', providers: [{ provide: PropertyValidator, useClass: PropertyValidator }, RxState], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (showToolbar) {\n <mat-toolbar>\n <div class=\"toolbar-spacer\"></div>\n\n <ion-item lines=\"none\" (click)=\"toggleShowHintKeys()\">\n <ion-label color=\"dark\">{{ 'FILE.PROPERTIES.BTN_SHOW_HINT_KEY' | translate }}</ion-label>\n <ion-toggle color=\"primary\" [checked]=\"showHintKey\"></ion-toggle>\n </ion-item>\n\n <!-- options sub menu -->\n @if (canDownload || canImport) {\n <button\n slot=\"end\"\n mat-icon-button\n [matMenuTriggerFor]=\"optionsMenu\"\n [title]=\"!showTooltip ? ('COMMON.BTN_OPTIONS' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('COMMON.BTN_OPTIONS' | translate) : ''\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n }\n </mat-toolbar>\n}\n\n<!-- Options menu -->\n<mat-menu #optionsMenu=\"matMenu\">\n <!-- Download as CSV -->\n @if (canDownload) {\n <button mat-menu-item [disabled]=\"loading\" [matMenuTriggerFor]=\"downloadMenu\">\n <mat-icon>download</mat-icon>\n <ion-label translate>COMMON.BTN_DOWNLOAD_DOTS</ion-label>\n </button>\n }\n\n <!-- Import from file -->\n @if (canImport) {\n <button mat-menu-item [disabled]=\"loading || disabled\" [matMenuTriggerFor]=\"importMenu\">\n <mat-icon>upload</mat-icon>\n <ion-label translate>COMMON.BTN_IMPORT_FROM_FILE_DOTS</ion-label>\n </button>\n }\n</mat-menu>\n\n<!-- Download menu -->\n<mat-menu #downloadMenu=\"matMenu\">\n <button mat-menu-item [disabled]=\"loading\" (click)=\"exportToCsv()\">\n <ion-label translate>FILE.PROPERTIES.BTN_DOWNLOAD_AS_CSV</ion-label>\n </button>\n</mat-menu>\n\n<!-- Import menu -->\n<mat-menu #importMenu=\"matMenu\">\n <!-- import from file -->\n <button mat-menu-item (click)=\"importFromCsv($event)\">\n <ion-label translate>FILE.PROPERTIES.BTN_IMPORT_FROM_CSV</ion-label>\n </button>\n\n <!-- import policy -->\n <mat-divider></mat-divider>\n <button mat-menu-item [matMenuTriggerFor]=\"importPolicyMenu\">\n <ion-label translate>FILE.UPLOAD.BTN_IMPORT_POLICY_DOTS</ion-label>\n </button>\n</mat-menu>\n\n<!-- Import policy menu -->\n<mat-menu #importPolicyMenu=\"matMenu\" class=\"ion-no-padding\">\n <ng-template matMenuContent>\n <!-- header-->\n <ion-row class=\"mat-menu-header ion-no-padding column\">\n <ion-col>\n <ion-label translate>FILE.UPLOAD.IMPORT_POLICY.TITLE</ion-label>\n </ion-col>\n </ion-row>\n @for (policy of _importPolicies; track policy) {\n <button mat-menu-item (click)=\"importPolicy = policy\">\n <mat-icon>{{ importPolicy === policy ? 'check_box' : 'check_box_outline_blank' }}</mat-icon>\n <ion-label>{{ 'FILE.UPLOAD.IMPORT_POLICY.' + policy | uppercase | translate }}</ion-label>\n </button>\n }\n </ng-template>\n</mat-menu>\n\n<!-- Properties -->\n<form [formGroup]=\"form\" class=\"form-container\">\n @if (loadingSubject | async) {\n <ion-list [inset]=\"mobile\">\n <ng-container *ngTemplateOutlet=\"propertyRowSkeleton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"propertyRowSkeleton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"propertyRowSkeleton\"></ng-container>\n </ion-list>\n } @else {\n <ion-list formArrayName=\"properties\" [inset]=\"mobile\">\n <!-- Show more options -->\n @if ((_definitionKeys$ | async | isNotEmptyArray) && formArray?.length === 0) {\n <ion-item lines=\"none\">\n <ion-button\n color=\"light\"\n [title]=\"!showTooltip ? (addButtonTitle | translate) : ''\"\n [matTooltip]=\"showTooltip ? (addButtonTitle | translate) : ''\"\n (click)=\"_helper.add()\"\n >\n <ion-label>{{ addButtonText | translate }}</ion-label>\n <mat-icon slot=\"end\">arrow_drop_down</mat-icon>\n </ion-button>\n </ion-item>\n }\n\n @for (fieldForm of fieldForms; track i; let i = $index) {\n <ion-item lines=\"none\" [class.outline]=\"appearance === 'outline'\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row [formGroupName]=\"i\" class=\"ion-no-padding\">\n @let definition = getDefinitionAt(i);\n\n <!-- property key -->\n @if (fieldForm | formGetControl: 'key'; as control) {\n <ion-col\n size=\"12\"\n size-sm=\"6\"\n [title]=\"!showTooltip ? ((definition | propertyGet: 'label' | translate) || '') : ''\"\n [matTooltip]=\"showTooltip ? ((definition | propertyGet: 'label' | translate) || '') : ''\"\n class=\"ion-no-padding\"\n >\n <mat-autocomplete-field\n floatLabel=\"auto\"\n [formControl]=\"control\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"showHintKey ? 'fixed' : subscriptSizing\"\n (selectionChange)=\"updateDefinitionAt(i)\"\n [tabindex]=\"tabindex + i * 2\"\n [config]=\"_autocompleteConfig\"\n [placeholder]=\"'SETTINGS.PROPERTY_KEY' | translate\"\n [required]=\"true\"\n (focus)=\"_focusedControlIndex = i\"\n [readonly]=\"definition?.disabled\"\n [mobile]=\"mobile\"\n [panelClass]=\"panelClass\"\n [panelWidth]=\"panelWidth\"\n >\n <mat-hint [class.cdk-visually-hidden]=\"!showHintKey\">\n @let keyValue = control.value;\n {{ hintKeyPrefix || '' }}{{ keyValue?.key || keyValue || '' }}\n </mat-hint>\n </mat-autocomplete-field>\n </ion-col>\n }\n\n <!-- property value -->\n <ion-col size=\"\" size-sm=\"\" class=\"ion-no-padding ion-padding-start-xs\">\n @if (definition) {\n <app-form-field\n floatLabel=\"auto\"\n [label]=\"mobile ? ('SETTINGS.PROPERTY_VALUE' | translate) : ' '\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n [definition]=\"definition\"\n [formControl]=\"fieldForm | formGetControl: 'value'\"\n [placeholder]=\"'SETTINGS.PROPERTY_VALUE' | translate\"\n [chipColor]=\"chipColor\"\n [required]=\"true\"\n [hideRequiredMarker]=\"true\"\n [tabindex]=\"tabindex + i * 2 + 1\"\n [readonly]=\"definition?.disabled\"\n [panelClass]=\"panelClass\"\n [panelWidth]=\"panelWidth\"\n ></app-form-field>\n } @else {\n <!-- unknown definition -->\n <mat-form-field [appearance]=\"appearance\" [subscriptSizing]=\"subscriptSizing\">\n @if (mobile) {\n <mat-label>{{ 'SETTINGS.PROPERTY_VALUE' | translate }}</mat-label>\n }\n <input\n type=\"text\"\n matInput\n [formControl]=\"fieldForm | formGetControl: 'value'\"\n [placeholder]=\"mobile ? '' : ('SETTINGS.PROPERTY_VALUE' | translate)\"\n [required]=\"true\"\n [tabindex]=\"20 + i * 2 + 1\"\n />\n </mat-form-field>\n }\n </ion-col>\n\n <ion-col size=\"auto\" class=\"ion-no-padding\">\n @if (_helper.isLast(i)) {\n <button\n type=\"button\"\n mat-icon-button\n color=\"light\"\n [disabled]=\"\n disabled || (fieldForm.value | asBoolean: isEmptyProperty) || (_definitionKeys | isEmptyArray)\n \"\n [title]=\"!showTooltip ? ('SETTINGS.BTN_ADD_PROPERTY' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('SETTINGS.BTN_ADD_PROPERTY' | translate) : ''\"\n (click)=\"_helper.add()\"\n [tabindex]=\"20 + i * 2 + 2\"\n >\n <mat-icon>add</mat-icon>\n </button>\n }\n <button\n type=\"button\"\n mat-icon-button\n color=\"light\"\n [disabled]=\"definition?.disabled || disabled\"\n [title]=\"!showTooltip ? ('COMMON.BTN_DELETE' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('COMMON.BTN_DELETE' | translate) : ''\"\n (click)=\"removeAt(i)\"\n [tabindex]=\"-1\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-item>\n }\n </ion-list>\n }\n</form>\n\n<ng-template #propertyRowSkeleton>\n <ion-item lines=\"none\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n <!-- property key -->\n <ion-col size=\"6\" class=\"ion-no-padding\">\n <mat-form-field [subscriptSizing]=\"subscriptSizing\">\n <input matInput hidden disabled />\n <ion-skeleton-text [animated]=\"true\" style=\"width: 60%\"></ion-skeleton-text>\n <ion-icon name=\"arrow-dropdown\" matSuffix></ion-icon>\n </mat-form-field>\n </ion-col>\n <!-- value -->\n <ion-col class=\"ion-no-padding\">\n <mat-form-field [subscriptSizing]=\"subscriptSizing\">\n <input matInput hidden disabled />\n <ion-skeleton-text [animated]=\"true\" style=\"width: 60%\"></ion-skeleton-text>\n </mat-form-field>\n </ion-col>\n <!-- buttons -->\n <ion-col size=\"auto\">\n <button type=\"button\" mat-icon-button color=\"light\" disabled>\n <mat-icon>close</mat-icon>\n </button>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-item>\n</ng-template>\n", styles: [":host ion-item ion-row ion-col{--ion-padding-start: 0;min-width:48px}:host ion-item.outline{overflow:visible}:host ion-item.outline ion-grid,:host ion-item.outline ion-row,:host ion-item.outline ion-col{overflow:visible}\n"] }]
345
345
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.UntypedFormBuilder }, { type: i2.DateAdapter }, { type: i0.ChangeDetectorRef }, { type: i3.PropertyValidator }, { type: i1.FormGroupDirective, decorators: [{