@sumaris-net/ngx-components 18.4.5-alpha1 → 18.5.0-alpha1

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 (271) 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/services/person.service.mjs +3 -3
  4. package/esm2022/src/app/admin/services/validator/person.validator.mjs +3 -3
  5. package/esm2022/src/app/admin/users/users.mjs +3 -3
  6. package/esm2022/src/app/admin/users/users.module.mjs +4 -4
  7. package/esm2022/src/app/core/about/about.modal.mjs +3 -3
  8. package/esm2022/src/app/core/about/about.module.mjs +4 -4
  9. package/esm2022/src/app/core/account/account.module.mjs +4 -4
  10. package/esm2022/src/app/core/account/account.page.mjs +3 -3
  11. package/esm2022/src/app/core/account/new-token.form.mjs +3 -3
  12. package/esm2022/src/app/core/account/new-token.modal.mjs +3 -3
  13. package/esm2022/src/app/core/account/password/change-password.form.mjs +3 -3
  14. package/esm2022/src/app/core/account/password/change-password.module.mjs +4 -4
  15. package/esm2022/src/app/core/account/password/change-password.page.mjs +3 -3
  16. package/esm2022/src/app/core/account/token.table.mjs +3 -3
  17. package/esm2022/src/app/core/auth/auth.form.mjs +3 -3
  18. package/esm2022/src/app/core/auth/auth.modal.mjs +3 -3
  19. package/esm2022/src/app/core/auth/auth.module.mjs +4 -4
  20. package/esm2022/src/app/core/auth/reset-password.modal.mjs +3 -3
  21. package/esm2022/src/app/core/core.module.mjs +4 -4
  22. package/esm2022/src/app/core/core.testing.module.mjs +4 -4
  23. package/esm2022/src/app/core/form/array/testing/form-array-test.module.mjs +4 -4
  24. package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +3 -3
  25. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +3 -3
  26. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +4 -4
  27. package/esm2022/src/app/core/form/entity/editor.class.mjs +3 -3
  28. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +3 -3
  29. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +3 -3
  30. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +3 -3
  31. package/esm2022/src/app/core/form/entity/entity.module.mjs +4 -4
  32. package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +3 -3
  33. package/esm2022/src/app/core/form/form-container.class.mjs +3 -3
  34. package/esm2022/src/app/core/form/form.class.mjs +3 -3
  35. package/esm2022/src/app/core/form/form.module.mjs +4 -4
  36. package/esm2022/src/app/core/form/list/list.form.mjs +3 -3
  37. package/esm2022/src/app/core/form/list/list.module.mjs +4 -4
  38. package/esm2022/src/app/core/form/properties/properties.form.mjs +3 -3
  39. package/esm2022/src/app/core/form/properties/properties.module.mjs +4 -4
  40. package/esm2022/src/app/core/form/properties/properties.table.mjs +6 -6
  41. package/esm2022/src/app/core/form/properties/property.validator.mjs +3 -3
  42. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +3 -3
  43. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +4 -4
  44. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +3 -3
  45. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +4 -4
  46. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +3 -3
  47. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +4 -4
  48. package/esm2022/src/app/core/form/username/username.form.mjs +3 -3
  49. package/esm2022/src/app/core/form/username/username.module.mjs +4 -4
  50. package/esm2022/src/app/core/graphql/graphql.module.mjs +4 -4
  51. package/esm2022/src/app/core/graphql/graphql.service.mjs +3 -3
  52. package/esm2022/src/app/core/home/home.mjs +3 -3
  53. package/esm2022/src/app/core/home/home.module.mjs +4 -4
  54. package/esm2022/src/app/core/icon/icon.component.mjs +3 -3
  55. package/esm2022/src/app/core/icon/icon.module.mjs +4 -4
  56. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +3 -3
  57. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +4 -4
  58. package/esm2022/src/app/core/menu/menu.component.mjs +3 -3
  59. package/esm2022/src/app/core/menu/menu.module.mjs +4 -4
  60. package/esm2022/src/app/core/menu/menu.service.mjs +3 -3
  61. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +3 -3
  62. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +3 -3
  63. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +3 -3
  64. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +4 -4
  65. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +3 -3
  66. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +4 -4
  67. package/esm2022/src/app/core/peer/select-peer.modal.mjs +3 -3
  68. package/esm2022/src/app/core/peer/select-peer.module.mjs +4 -4
  69. package/esm2022/src/app/core/register/register-confirm.page.mjs +3 -3
  70. package/esm2022/src/app/core/register/register.form.mjs +3 -3
  71. package/esm2022/src/app/core/register/register.modal.mjs +3 -3
  72. package/esm2022/src/app/core/register/register.module.mjs +4 -4
  73. package/esm2022/src/app/core/services/account.service.mjs +3 -3
  74. package/esm2022/src/app/core/services/auth-guard.service.mjs +3 -3
  75. package/esm2022/src/app/core/services/base-entity-service.class.mjs +3 -3
  76. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +3 -3
  77. package/esm2022/src/app/core/services/config.service.mjs +3 -3
  78. package/esm2022/src/app/core/services/crypto.service.mjs +3 -3
  79. package/esm2022/src/app/core/services/local-settings.service.mjs +3 -3
  80. package/esm2022/src/app/core/services/network.service.mjs +27 -30
  81. package/esm2022/src/app/core/services/network.types.mjs +2 -20
  82. package/esm2022/src/app/core/services/network.utils.mjs +23 -1
  83. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +8 -8
  84. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +4 -4
  85. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +4 -4
  86. package/esm2022/src/app/core/services/pipes/pipes.module.mjs +4 -4
  87. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +3 -3
  88. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +8 -8
  89. package/esm2022/src/app/core/services/platform.service.mjs +3 -3
  90. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +3 -3
  91. package/esm2022/src/app/core/services/testing/referential.validator.mjs +3 -3
  92. package/esm2022/src/app/core/services/validator/account.validator.mjs +3 -3
  93. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +3 -3
  94. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +3 -3
  95. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +3 -3
  96. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +3 -3
  97. package/esm2022/src/app/core/settings/settings.module.mjs +4 -4
  98. package/esm2022/src/app/core/settings/settings.page.mjs +3 -3
  99. package/esm2022/src/app/core/table/async-table.class.mjs +3 -3
  100. package/esm2022/src/app/core/table/column/actions-column.component.mjs +3 -3
  101. package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +3 -3
  102. package/esm2022/src/app/core/table/column/row-field.component.mjs +3 -3
  103. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +3 -3
  104. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +3 -3
  105. package/esm2022/src/app/core/table/memory-table.class.mjs +3 -3
  106. package/esm2022/src/app/core/table/table-select-columns.component.mjs +3 -3
  107. package/esm2022/src/app/core/table/table.class.mjs +3 -3
  108. package/esm2022/src/app/core/table/table.module.mjs +4 -4
  109. package/esm2022/src/app/core/table/table.pipes.mjs +9 -9
  110. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +3 -3
  111. package/esm2022/src/app/core/table/testing/table.testing.mjs +3 -3
  112. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +4 -4
  113. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +3 -3
  114. package/esm2022/src/app/core/table/testing/table2.testing.mjs +3 -3
  115. package/esm2022/src/app/shared/audio/audio.mjs +3 -3
  116. package/esm2022/src/app/shared/audio/audio.testing.mjs +3 -3
  117. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +4 -4
  118. package/esm2022/src/app/shared/capacitor/keyboard.mjs +3 -3
  119. package/esm2022/src/app/shared/debug/debug.component.mjs +3 -3
  120. package/esm2022/src/app/shared/debug/debug.module.mjs +4 -4
  121. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +3 -3
  122. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +3 -3
  123. package/esm2022/src/app/shared/directives/directives.module.mjs +4 -4
  124. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +3 -3
  125. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +3 -3
  126. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +3 -3
  127. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +3 -3
  128. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +4 -4
  129. package/esm2022/src/app/shared/directives/throttled-click.directive.mjs +3 -3
  130. package/esm2022/src/app/shared/file/file.service.mjs +3 -3
  131. package/esm2022/src/app/shared/form/field.component.mjs +3 -3
  132. package/esm2022/src/app/shared/form/loading-spinner.mjs +3 -3
  133. package/esm2022/src/app/shared/gesture/gesture-config.mjs +3 -3
  134. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +3 -3
  135. package/esm2022/src/app/shared/help/help.modal.mjs +3 -3
  136. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +3 -3
  137. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +3 -3
  138. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +4 -4
  139. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +3 -3
  140. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +4 -4
  141. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +3 -3
  142. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +3 -3
  143. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +4 -4
  144. package/esm2022/src/app/shared/image/image.module.mjs +4 -4
  145. package/esm2022/src/app/shared/image/image.service.mjs +3 -3
  146. package/esm2022/src/app/shared/logging/logging-service.class.mjs +3 -3
  147. package/esm2022/src/app/shared/logging/logging-service.module.mjs +4 -4
  148. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +3 -3
  149. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +4 -4
  150. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +3 -3
  151. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +3 -3
  152. package/esm2022/src/app/shared/material/badge/badge.module.mjs +4 -4
  153. package/esm2022/src/app/shared/material/badge/badge.test.mjs +3 -3
  154. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +4 -4
  155. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +3 -3
  156. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +3 -3
  157. package/esm2022/src/app/shared/material/chips/chips.module.mjs +4 -4
  158. package/esm2022/src/app/shared/material/chips/material.chips.mjs +3 -3
  159. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +3 -3
  160. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +4 -4
  161. package/esm2022/src/app/shared/material/datetime/material.date.mjs +3 -3
  162. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +3 -3
  163. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +3 -3
  164. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +3 -3
  165. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +3 -3
  166. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +3 -3
  167. package/esm2022/src/app/shared/material/duration/duration.module.mjs +4 -4
  168. package/esm2022/src/app/shared/material/duration/material.duration.mjs +3 -3
  169. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +3 -3
  170. package/esm2022/src/app/shared/material/latlong/material.latlong-input.mjs +3 -3
  171. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +3 -3
  172. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +4 -4
  173. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +3 -3
  174. package/esm2022/src/app/shared/material/material.module.mjs +4 -4
  175. package/esm2022/src/app/shared/material/material.testing.module.mjs +4 -4
  176. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +3 -3
  177. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +3 -3
  178. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +3 -3
  179. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +4 -4
  180. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +3 -3
  181. package/esm2022/src/app/shared/material/test/test-component.mjs +6 -6
  182. package/esm2022/src/app/shared/material/testing/common.test.mjs +3 -3
  183. package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +3 -3
  184. package/esm2022/src/app/shared/material/text/text-form.component.mjs +3 -3
  185. package/esm2022/src/app/shared/material/text/text-form.module.mjs +4 -4
  186. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +3 -3
  187. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +4 -4
  188. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +3 -3
  189. package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +3 -3
  190. package/esm2022/src/app/shared/named-filter/testing/named-filter.testing.module.mjs +4 -4
  191. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +27 -27
  192. package/esm2022/src/app/shared/pipes/badge.pipes.mjs +3 -3
  193. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +3 -3
  194. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +4 -4
  195. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +6 -6
  196. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +4 -4
  197. package/esm2022/src/app/shared/pipes/dates.pipe.mjs +3 -3
  198. package/esm2022/src/app/shared/pipes/display-with.pipe.mjs +4 -4
  199. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +4 -4
  200. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +3 -3
  201. package/esm2022/src/app/shared/pipes/form.pipes.mjs +21 -21
  202. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +4 -4
  203. package/esm2022/src/app/shared/pipes/html.pipes.mjs +6 -6
  204. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +9 -9
  205. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +12 -12
  206. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +3 -3
  207. package/esm2022/src/app/shared/pipes/math.pipes.mjs +12 -12
  208. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +3 -3
  209. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +4 -4
  210. package/esm2022/src/app/shared/pipes/pipes.module.mjs +4 -4
  211. package/esm2022/src/app/shared/pipes/property.pipes.mjs +14 -14
  212. package/esm2022/src/app/shared/pipes/selection.pipes.mjs +21 -21
  213. package/esm2022/src/app/shared/pipes/string.pipes.mjs +30 -30
  214. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +8 -8
  215. package/esm2022/src/app/shared/pipes/types.pipes.mjs +15 -15
  216. package/esm2022/src/app/shared/rx-state/rx-state.module.mjs +4 -4
  217. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +3 -3
  218. package/esm2022/src/app/shared/services/progress-bar.service.mjs +3 -3
  219. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +3 -3
  220. package/esm2022/src/app/shared/services/startable-service.class.mjs +3 -3
  221. package/esm2022/src/app/shared/services/translate-context.service.mjs +3 -3
  222. package/esm2022/src/app/shared/shared-routing.module.mjs +7 -7
  223. package/esm2022/src/app/shared/shared.module.mjs +4 -4
  224. package/esm2022/src/app/shared/shared.testing.module.mjs +4 -4
  225. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +3 -3
  226. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +4 -4
  227. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +4 -4
  228. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +4 -4
  229. package/esm2022/src/app/shared/storage/storage.service.mjs +3 -3
  230. package/esm2022/src/app/shared/testing/maskito.test.mjs +3 -3
  231. package/esm2022/src/app/shared/testing/observable.test.mjs +3 -3
  232. package/esm2022/src/app/shared/testing/tests.page.mjs +3 -3
  233. package/esm2022/src/app/shared/toast/toast.testing.mjs +3 -3
  234. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +4 -4
  235. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +3 -3
  236. package/esm2022/src/app/shared/toolbar/toolbar.mjs +3 -3
  237. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +4 -4
  238. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +3 -3
  239. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +4 -4
  240. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +3 -3
  241. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +3 -3
  242. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +3 -3
  243. package/esm2022/src/app/social/job/job.module.mjs +4 -4
  244. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +3 -3
  245. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +3 -3
  246. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +3 -3
  247. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +3 -3
  248. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +3 -3
  249. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +3 -3
  250. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +4 -4
  251. package/esm2022/src/app/social/message/message.form.mjs +3 -3
  252. package/esm2022/src/app/social/message/message.modal.mjs +3 -3
  253. package/esm2022/src/app/social/message/message.module.mjs +4 -4
  254. package/esm2022/src/app/social/message/message.service.mjs +3 -3
  255. package/esm2022/src/app/social/social.module.mjs +4 -4
  256. package/esm2022/src/app/social/social.testing.module.mjs +4 -4
  257. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +3 -3
  258. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +3 -3
  259. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +3 -3
  260. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +4 -4
  261. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +3 -3
  262. package/esm2022/src/app/social/user-event/user-event.module.mjs +4 -4
  263. package/esm2022/src/app/social/user-event/user-event.service.mjs +3 -3
  264. package/esm2022/src/environments/environment.loader.mjs +3 -3
  265. package/esm2022/src/environments/environment.mjs +2 -2
  266. package/fesm2022/sumaris-net.ngx-components.mjs +1080 -1083
  267. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  268. package/package.json +17 -18
  269. package/src/app/core/services/network.service.d.ts +6 -6
  270. package/src/app/core/services/network.types.d.ts +1 -3
  271. package/src/app/core/services/network.utils.d.ts +5 -0
@@ -111,10 +111,10 @@ export class TextPopover {
111
111
  isEndSide(button) {
112
112
  return button?.side !== 'start';
113
113
  }
114
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: TextPopover, deps: [{ token: i1.PopoverController }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
115
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.11", type: TextPopover, selector: "app-text-popover", inputs: { showHeader: "showHeader", headerColor: "headerColor", showFooter: "showFooter", title: "title", text: "text", placeholder: "placeholder", editing: "editing", multiline: "multiline", autoHeight: "autoHeight", maxLength: "maxLength", autofocus: "autofocus", validator: "validator", headerButtons: "headerButtons", mobile: "mobile" }, viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true, static: true }], ngImport: i0, template: "<ion-header *ngIf=\"showHeader\">\n <ion-toolbar [color]=\"headerColor\">\n <ion-buttons slot=\"start\">\n <ion-button *ngIf=\"mobile && editing\" (click)=\"cancel()\" [title]=\"'COMMON.BTN_CANCEL' | translate\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n <ion-button\n *ngFor=\"let button of headerButtons | arrayFilter: isStartSide\"\n [fill]=\"button.fill\"\n [color]=\"button.color\"\n (click)=\"clickButton(button)\"\n >\n <ion-icon *ngIf=\"button.icon\" [slot]=\"button.text ? 'start' : 'icon-only'\" [name]=\"button.icon\"></ion-icon>\n <ion-text *ngIf=\"button.text\">{{ button.text | translate }}</ion-text>\n </ion-button>\n </ion-buttons>\n\n <ion-title *ngIf=\"title\">{{ title | translate }}</ion-title>\n\n <ion-buttons slot=\"end\">\n <ion-button\n *ngFor=\"let button of headerButtons | arrayFilter: isEndSide\"\n [fill]=\"button.fill\"\n [color]=\"button.color\"\n (click)=\"clickButton(button)\"\n >\n <ion-icon *ngIf=\"button.icon\" [slot]=\"button.text ? 'start' : 'icon-only'\" [name]=\"button.icon\"></ion-icon>\n <ion-text *ngIf=\"button.text\">{{ button.text | translate }}</ion-text>\n </ion-button>\n\n <ng-container *ngIf=\"mobile\">\n <ion-button\n *ngIf=\"editing\"\n (click)=\"onValidate($event)\"\n [disabled]=\"disabled\"\n [title]=\"'COMMON.BTN_VALIDATE_WITH_SHORTCUT_HELP' | translate\"\n >\n <ion-icon slot=\"icon-only\" name=\"checkmark\"></ion-icon>\n </ion-button>\n <ion-button *ngIf=\"!editing\" (click)=\"cancel()\" [title]=\"'COMMON.BTN_CLOSE' | translate\">\n <ion-icon slot=\"icon-only\" name=\"close\"></ion-icon>\n </ion-button>\n </ng-container>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\" [class.has-header]=\"showHeader\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <ion-item *ngIf=\"form.error\" visible-xs visible-sm visible-mobile lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"form.error | translate\"></ion-label>\n </ion-item>\n\n <app-text-form\n #form\n [standalone]=\"true\"\n [placeholder]=\"placeholder\"\n [multiline]=\"multiline\"\n [maxLength]=\"maxLength\"\n [autoHeight]=\"autoHeight\"\n [autofocus]=\"editing && autofocus\"\n [validator]=\"validator\"\n (onSubmit)=\"onValidate($event)\"\n ></app-text-form>\n</ion-content>\n\n<ion-footer *ngIf=\"showFooter\">\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col></ion-col>\n\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"onValidate($event)\"\n (keyup.enter)=\"onValidate($event)\"\n color=\"tertiary\"\n [disabled]=\"disabled\"\n [title]=\"'COMMON.BTN_VALIDATE_WITH_SHORTCUT_HELP' | translate\"\n >\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", styles: ["ion-content{--textarea-height: 11.5em}ion-content.has-header{--textarea-height: calc(11.5em - var(--ion-toolbar-height, 0em))}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.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: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.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: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "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.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i4.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: i5.TextForm, selector: "app-text-form", inputs: ["showError", "placeholder", "multiline", "autoSize", "autoSizeMinRows", "autoSizeMaxRows", "maxLength", "autofocus", "validator", "standalone", "formControl", "formControlName", "floatLabel", "appearance", "subscriptSizing", "autoHeight"], outputs: ["textAreaChanges"] }, { kind: "directive", type: i6.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "pipe", type: i7.ArrayFilterPipe, name: "arrayFilter" }] });
114
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextPopover, deps: [{ token: i1.PopoverController }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
115
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TextPopover, selector: "app-text-popover", inputs: { showHeader: "showHeader", headerColor: "headerColor", showFooter: "showFooter", title: "title", text: "text", placeholder: "placeholder", editing: "editing", multiline: "multiline", autoHeight: "autoHeight", maxLength: "maxLength", autofocus: "autofocus", validator: "validator", headerButtons: "headerButtons", mobile: "mobile" }, viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true, static: true }], ngImport: i0, template: "<ion-header *ngIf=\"showHeader\">\n <ion-toolbar [color]=\"headerColor\">\n <ion-buttons slot=\"start\">\n <ion-button *ngIf=\"mobile && editing\" (click)=\"cancel()\" [title]=\"'COMMON.BTN_CANCEL' | translate\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n <ion-button\n *ngFor=\"let button of headerButtons | arrayFilter: isStartSide\"\n [fill]=\"button.fill\"\n [color]=\"button.color\"\n (click)=\"clickButton(button)\"\n >\n <ion-icon *ngIf=\"button.icon\" [slot]=\"button.text ? 'start' : 'icon-only'\" [name]=\"button.icon\"></ion-icon>\n <ion-text *ngIf=\"button.text\">{{ button.text | translate }}</ion-text>\n </ion-button>\n </ion-buttons>\n\n <ion-title *ngIf=\"title\">{{ title | translate }}</ion-title>\n\n <ion-buttons slot=\"end\">\n <ion-button\n *ngFor=\"let button of headerButtons | arrayFilter: isEndSide\"\n [fill]=\"button.fill\"\n [color]=\"button.color\"\n (click)=\"clickButton(button)\"\n >\n <ion-icon *ngIf=\"button.icon\" [slot]=\"button.text ? 'start' : 'icon-only'\" [name]=\"button.icon\"></ion-icon>\n <ion-text *ngIf=\"button.text\">{{ button.text | translate }}</ion-text>\n </ion-button>\n\n <ng-container *ngIf=\"mobile\">\n <ion-button\n *ngIf=\"editing\"\n (click)=\"onValidate($event)\"\n [disabled]=\"disabled\"\n [title]=\"'COMMON.BTN_VALIDATE_WITH_SHORTCUT_HELP' | translate\"\n >\n <ion-icon slot=\"icon-only\" name=\"checkmark\"></ion-icon>\n </ion-button>\n <ion-button *ngIf=\"!editing\" (click)=\"cancel()\" [title]=\"'COMMON.BTN_CLOSE' | translate\">\n <ion-icon slot=\"icon-only\" name=\"close\"></ion-icon>\n </ion-button>\n </ng-container>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\" [class.has-header]=\"showHeader\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <ion-item *ngIf=\"form.error\" visible-xs visible-sm visible-mobile lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"form.error | translate\"></ion-label>\n </ion-item>\n\n <app-text-form\n #form\n [standalone]=\"true\"\n [placeholder]=\"placeholder\"\n [multiline]=\"multiline\"\n [maxLength]=\"maxLength\"\n [autoHeight]=\"autoHeight\"\n [autofocus]=\"editing && autofocus\"\n [validator]=\"validator\"\n (onSubmit)=\"onValidate($event)\"\n ></app-text-form>\n</ion-content>\n\n<ion-footer *ngIf=\"showFooter\">\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col></ion-col>\n\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"onValidate($event)\"\n (keyup.enter)=\"onValidate($event)\"\n color=\"tertiary\"\n [disabled]=\"disabled\"\n [title]=\"'COMMON.BTN_VALIDATE_WITH_SHORTCUT_HELP' | translate\"\n >\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", styles: ["ion-content{--textarea-height: 11.5em}ion-content.has-header{--textarea-height: calc(11.5em - var(--ion-toolbar-height, 0em))}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.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: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.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: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "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.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i4.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: i5.TextForm, selector: "app-text-form", inputs: ["showError", "placeholder", "multiline", "autoSize", "autoSizeMinRows", "autoSizeMaxRows", "maxLength", "autofocus", "validator", "standalone", "formControl", "formControlName", "floatLabel", "appearance", "subscriptSizing", "autoHeight"], outputs: ["textAreaChanges"] }, { kind: "directive", type: i6.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "pipe", type: i7.ArrayFilterPipe, name: "arrayFilter" }] });
116
116
  }
117
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: TextPopover, decorators: [{
117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextPopover, decorators: [{
118
118
  type: Component,
119
119
  args: [{ selector: 'app-text-popover', template: "<ion-header *ngIf=\"showHeader\">\n <ion-toolbar [color]=\"headerColor\">\n <ion-buttons slot=\"start\">\n <ion-button *ngIf=\"mobile && editing\" (click)=\"cancel()\" [title]=\"'COMMON.BTN_CANCEL' | translate\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n <ion-button\n *ngFor=\"let button of headerButtons | arrayFilter: isStartSide\"\n [fill]=\"button.fill\"\n [color]=\"button.color\"\n (click)=\"clickButton(button)\"\n >\n <ion-icon *ngIf=\"button.icon\" [slot]=\"button.text ? 'start' : 'icon-only'\" [name]=\"button.icon\"></ion-icon>\n <ion-text *ngIf=\"button.text\">{{ button.text | translate }}</ion-text>\n </ion-button>\n </ion-buttons>\n\n <ion-title *ngIf=\"title\">{{ title | translate }}</ion-title>\n\n <ion-buttons slot=\"end\">\n <ion-button\n *ngFor=\"let button of headerButtons | arrayFilter: isEndSide\"\n [fill]=\"button.fill\"\n [color]=\"button.color\"\n (click)=\"clickButton(button)\"\n >\n <ion-icon *ngIf=\"button.icon\" [slot]=\"button.text ? 'start' : 'icon-only'\" [name]=\"button.icon\"></ion-icon>\n <ion-text *ngIf=\"button.text\">{{ button.text | translate }}</ion-text>\n </ion-button>\n\n <ng-container *ngIf=\"mobile\">\n <ion-button\n *ngIf=\"editing\"\n (click)=\"onValidate($event)\"\n [disabled]=\"disabled\"\n [title]=\"'COMMON.BTN_VALIDATE_WITH_SHORTCUT_HELP' | translate\"\n >\n <ion-icon slot=\"icon-only\" name=\"checkmark\"></ion-icon>\n </ion-button>\n <ion-button *ngIf=\"!editing\" (click)=\"cancel()\" [title]=\"'COMMON.BTN_CLOSE' | translate\">\n <ion-icon slot=\"icon-only\" name=\"close\"></ion-icon>\n </ion-button>\n </ng-container>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\" [class.has-header]=\"showHeader\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <ion-item *ngIf=\"form.error\" visible-xs visible-sm visible-mobile lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"form.error | translate\"></ion-label>\n </ion-item>\n\n <app-text-form\n #form\n [standalone]=\"true\"\n [placeholder]=\"placeholder\"\n [multiline]=\"multiline\"\n [maxLength]=\"maxLength\"\n [autoHeight]=\"autoHeight\"\n [autofocus]=\"editing && autofocus\"\n [validator]=\"validator\"\n (onSubmit)=\"onValidate($event)\"\n ></app-text-form>\n</ion-content>\n\n<ion-footer *ngIf=\"showFooter\">\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col></ion-col>\n\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"onValidate($event)\"\n (keyup.enter)=\"onValidate($event)\"\n color=\"tertiary\"\n [disabled]=\"disabled\"\n [title]=\"'COMMON.BTN_VALIDATE_WITH_SHORTCUT_HELP' | translate\"\n >\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", styles: ["ion-content{--textarea-height: 11.5em}ion-content.has-header{--textarea-height: calc(11.5em - var(--ion-toolbar-height, 0em))}\n"] }]
120
120
  }], ctorParameters: () => [{ type: i1.PopoverController }, { type: i2.TranslateService }], propDecorators: { form: [{
@@ -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 AppTextPopoverModule {
8
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppTextPopoverModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.11", ngImport: i0, type: AppTextPopoverModule, declarations: [
8
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppTextPopoverModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AppTextPopoverModule, declarations: [
10
10
  // Components
11
11
  TextPopover], imports: [SharedModule, i1.TranslateModule], exports: [TranslateModule,
12
12
  // Components
13
13
  TextPopover] });
14
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppTextPopoverModule, imports: [SharedModule, TranslateModule.forChild(), TranslateModule] });
14
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppTextPopoverModule, imports: [SharedModule, TranslateModule.forChild(), TranslateModule] });
15
15
  }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppTextPopoverModule, decorators: [{
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppTextPopoverModule, decorators: [{
17
17
  type: NgModule,
18
18
  args: [{
19
19
  imports: [SharedModule, TranslateModule.forChild()],
@@ -34,10 +34,10 @@ export class AppUsernameForm extends AppForm {
34
34
  markForCheck() {
35
35
  this.cd.markForCheck();
36
36
  }
37
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppUsernameForm, deps: [{ token: i0.Injector }, { token: i1.UntypedFormBuilder }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
38
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.11", type: AppUsernameForm, selector: "app-username-form", inputs: { mobile: ["mobile", "mobile", booleanAttribute], usernamePlaceHolder: "usernamePlaceHolder", emailValidator: ["emailValidator", "emailValidator", booleanAttribute] }, usesInheritance: true, ngImport: i0, template: "<form *ngIf=\"form.controls; let controls\" [formGroup]=\"form\" class=\"form-container\">\n <!-- Username -->\n <mat-form-field>\n <mat-label>{{ usernamePlaceHolder | translate }}</mat-label>\n <input\n matInput\n [appAutofocus]=\"!mobile\"\n [autofocusDelay]=\"500\"\n formControlName=\"username\"\n autocomplete=\"off\"\n required\n />\n\n <!-- error -->\n <mat-error *ngIf=\"form.controls.username.hasError('required') && form.controls.username.touched\">\n {{ 'ERROR.FIELD_REQUIRED' | translate }}\n </mat-error>\n <mat-error\n *ngIf=\"\n form.controls.username.hasError('email') &&\n !form.controls.username.hasError('required') &&\n controls.email.touched\n \"\n >\n <span>{{ 'ERROR.FIELD_NOT_VALID_EMAIL' | translate }}</span>\n </mat-error>\n </mat-form-field>\n</form>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i5.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
37
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppUsernameForm, deps: [{ token: i0.Injector }, { token: i1.UntypedFormBuilder }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
38
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.13", type: AppUsernameForm, selector: "app-username-form", inputs: { mobile: ["mobile", "mobile", booleanAttribute], usernamePlaceHolder: "usernamePlaceHolder", emailValidator: ["emailValidator", "emailValidator", booleanAttribute] }, usesInheritance: true, ngImport: i0, template: "<form *ngIf=\"form.controls; let controls\" [formGroup]=\"form\" class=\"form-container\">\n <!-- Username -->\n <mat-form-field>\n <mat-label>{{ usernamePlaceHolder | translate }}</mat-label>\n <input\n matInput\n [appAutofocus]=\"!mobile\"\n [autofocusDelay]=\"500\"\n formControlName=\"username\"\n autocomplete=\"off\"\n required\n />\n\n <!-- error -->\n <mat-error *ngIf=\"form.controls.username.hasError('required') && form.controls.username.touched\">\n {{ 'ERROR.FIELD_REQUIRED' | translate }}\n </mat-error>\n <mat-error\n *ngIf=\"\n form.controls.username.hasError('email') &&\n !form.controls.username.hasError('required') &&\n controls.email.touched\n \"\n >\n <span>{{ 'ERROR.FIELD_NOT_VALID_EMAIL' | translate }}</span>\n </mat-error>\n </mat-form-field>\n</form>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i5.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
39
39
  }
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppUsernameForm, decorators: [{
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppUsernameForm, decorators: [{
41
41
  type: Component,
42
42
  args: [{ selector: 'app-username-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form *ngIf=\"form.controls; let controls\" [formGroup]=\"form\" class=\"form-container\">\n <!-- Username -->\n <mat-form-field>\n <mat-label>{{ usernamePlaceHolder | translate }}</mat-label>\n <input\n matInput\n [appAutofocus]=\"!mobile\"\n [autofocusDelay]=\"500\"\n formControlName=\"username\"\n autocomplete=\"off\"\n required\n />\n\n <!-- error -->\n <mat-error *ngIf=\"form.controls.username.hasError('required') && form.controls.username.touched\">\n {{ 'ERROR.FIELD_REQUIRED' | translate }}\n </mat-error>\n <mat-error\n *ngIf=\"\n form.controls.username.hasError('email') &&\n !form.controls.username.hasError('required') &&\n controls.email.touched\n \"\n >\n <span>{{ 'ERROR.FIELD_NOT_VALID_EMAIL' | translate }}</span>\n </mat-error>\n </mat-form-field>\n</form>\n" }]
43
43
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }], propDecorators: { mobile: [{
@@ -5,11 +5,11 @@ import { AppUsernameForm } from './username.form';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@ngx-translate/core";
7
7
  export class AppUsernameFormModule {
8
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppUsernameFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.11", ngImport: i0, type: AppUsernameFormModule, declarations: [AppUsernameForm], imports: [SharedModule, i1.TranslateModule], exports: [TranslateModule, AppUsernameForm] });
10
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppUsernameFormModule, imports: [SharedModule, TranslateModule.forChild(), TranslateModule] });
8
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppUsernameFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AppUsernameFormModule, declarations: [AppUsernameForm], imports: [SharedModule, i1.TranslateModule], exports: [TranslateModule, AppUsernameForm] });
10
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppUsernameFormModule, imports: [SharedModule, TranslateModule.forChild(), TranslateModule] });
11
11
  }
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppUsernameFormModule, decorators: [{
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppUsernameFormModule, decorators: [{
13
13
  type: NgModule,
14
14
  args: [{
15
15
  imports: [SharedModule, TranslateModule.forChild()],
@@ -3,11 +3,11 @@ import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
3
3
  import * as i0 from "@angular/core";
4
4
  export class AppGraphQLModule {
5
5
  constructor() { }
6
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppGraphQLModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.11", ngImport: i0, type: AppGraphQLModule });
8
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppGraphQLModule, providers: [provideHttpClient(withInterceptorsFromDi())] });
6
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppGraphQLModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AppGraphQLModule });
8
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppGraphQLModule, providers: [provideHttpClient(withInterceptorsFromDi())] });
9
9
  }
10
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppGraphQLModule, decorators: [{
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppGraphQLModule, decorators: [{
11
11
  type: NgModule,
12
12
  args: [{ imports: [], providers: [provideHttpClient(withInterceptorsFromDi())] }]
13
13
  }], ctorParameters: () => [] });
@@ -758,10 +758,10 @@ export class GraphqlService extends StartableService {
758
758
  }
759
759
  return undefined;
760
760
  }
761
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: GraphqlService, deps: [{ token: i1.Platform }, { token: i2.Apollo }, { token: i3.HttpLink }, { token: i4.NetworkService }, { token: i5.StorageService }, { token: ENVIRONMENT }, { token: APP_GRAPHQL_TYPE_POLICIES, optional: true }, { token: APP_GRAPHQL_FRAGMENTS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
762
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: GraphqlService, providedIn: 'root' });
761
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GraphqlService, deps: [{ token: i1.Platform }, { token: i2.Apollo }, { token: i3.HttpLink }, { token: i4.NetworkService }, { token: i5.StorageService }, { token: ENVIRONMENT }, { token: APP_GRAPHQL_TYPE_POLICIES, optional: true }, { token: APP_GRAPHQL_FRAGMENTS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
762
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GraphqlService, providedIn: 'root' });
763
763
  }
764
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: GraphqlService, decorators: [{
764
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GraphqlService, decorators: [{
765
765
  type: Injectable,
766
766
  args: [{
767
767
  providedIn: 'root',
@@ -290,10 +290,10 @@ export class HomePage extends RxState {
290
290
  markForCheck() {
291
291
  this.cd.markForCheck();
292
292
  }
293
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: HomePage, deps: [{ token: i1.AccountService }, { token: i2.ModalController }, { token: i3.TranslateService }, { token: i2.ToastController }, { token: i4.ConfigService }, { token: i5.PlatformService }, { token: i0.ChangeDetectorRef }, { token: i6.NetworkService }, { token: i7.LocalSettingsService }, { token: ENVIRONMENT }, { token: APP_LOCALES }, { token: APP_HOME_BUTTONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
294
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: HomePage, selector: "app-page-home", usesInheritance: true, ngImport: i0, template: "<app-toolbar [canGoBack]=\"false\" visible-xs visible-sm visible-mobile>\n <!-- Change locale button -->\n <ion-button slot=\"end\" [matMenuTriggerFor]=\"localeMenu\">\n <ion-icon slot=\"start\" name=\"language\"></ion-icon>\n </ion-button>\n</app-toolbar>\n\n<!-- Change locale menu -->\n<mat-menu #localeMenu=\"matMenu\">\n <ng-template matMenuContent>\n @for (item of locales; track item.key) {\n <button mat-menu-item (click)=\"changeLanguage(item.key)\">\n <ion-label>{{ item.value }}</ion-label>\n </button>\n }\n </ng-template>\n</mat-menu>\n\n<ion-content [ngStyle]=\"contentStyle\" no-padding-xs>\n @if (contentCredits | isNotNilOrBlank) {\n <span class=\"content-credits\">\n <ion-text>{{ contentCredits }}</ion-text>\n </span>\n }\n\n <!-- loading spinner -->\n <div class=\"loading-page\" [class.cdk-visually-hidden]=\"!(loading$ | push)\">\n @if (showSpinner) {\n <div class=\"spinner\">\n <p [innerHTML]=\"'COMMON.LOADING_DOTS' | translate\"></p>\n <div class=\"sk-cube1 sk-cube\"></div>\n <div class=\"sk-cube2 sk-cube\"></div>\n <div class=\"sk-cube4 sk-cube\"></div>\n <div class=\"sk-cube3 sk-cube\"></div>\n </div>\n }\n </div>\n\n <!-- Desktop: translucent top toolbar -->\n <div hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar translucent>\n <ion-buttons slot=\"start\">\n <ion-menu-toggle>\n <ion-button color=\"light\" fill=\"clear\">\n <ion-icon slot=\"icon-only\" name=\"menu\"></ion-icon>\n </ion-button>\n </ion-menu-toggle>\n </ion-buttons>\n\n <ion-buttons slot=\"end\">\n <!-- change locale button -->\n <ion-button\n color=\"secondary\"\n fill=\"solid\"\n [matMenuTriggerFor]=\"localeMenu\"\n [title]=\"'SETTINGS.LOCALE' | translate\"\n >\n <ion-icon slot=\"icon-only\" name=\"language\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </div>\n\n <!-- Install (and upgrade) card -->\n <app-install-upgrade-card [isLogin]=\"isLogin\" [showInstallButton]=\"true\"></app-install-upgrade-card>\n\n @if (!(loading$ | push)) {\n <!-- Welcome card -->\n <ion-card class=\"main welcome ion-padding ion-text-center ion-align-self-center\" @fadeInAnimation>\n <ion-card-header>\n <ion-card-title class=\"ion-text-center\">\n <span *ngIf=\"isWeb\" [innerHTML]=\"'HOME.WELCOME_WEB' | translate: { appName: appName }\"></span>\n <span *ngIf=\"!isWeb\" [innerHTML]=\"'HOME.WELCOME_APP' | translate: { appName: appName }\"></span>\n </ion-card-title>\n <ion-card-subtitle [innerHTML]=\"description\"></ion-card-subtitle>\n </ion-card-header>\n <ion-card-content class=\"ion-no-padding\">\n <ion-text color=\"primary\">\n <img *ngIf=\"logo\" [attr.src]=\"logo\" alt=\"Logo\" />\n </ion-text>\n <!-- register help text -->\n <ion-text *ngIf=\"!isLogin && canRegister\">\n <br />\n <span translate>HOME.REGISTER_HELP</span>\n </ion-text>\n <div class=\"ion-padding-top\">\n <!-- If NOT login -->\n <ng-container *ngIf=\"!isLogin; else loginButtons\">\n <ion-button *ngIf=\"canRegister\" expand=\"block\" color=\"tertiary\" (click)=\"register()\">\n <span translate>HOME.BTN_REGISTER</span>\n </ion-button>\n <ion-button expand=\"block\" color=\"light\" [routerLink]=\"['/']\" (click)=\"login()\">\n <span translate>AUTH.BTN_LOGIN</span>\n </ion-button>\n </ng-container>\n\n <!-- If user login -->\n <ng-template #loginButtons>\n <!-- Feature buttons -->\n <ng-container *rxIf=\"$filteredButtons; let buttons\">\n <ng-container *ngFor=\"let item of buttons\">\n <ion-button\n *ngIf=\"item.path\"\n expand=\"block\"\n color=\"tertiary\"\n [class]=\"item.cssClass\"\n [routerLink]=\"item.path\"\n routerDirection=\"root\"\n >\n <ion-icon slot=\"start\" class=\"ion-float-start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" class=\"ion-float-start\" *ngIf=\"item.matIcon\">{{ item.matIcon }}</mat-icon>\n <ion-text>{{ 'HOME.BTN_DATA_ENTRY' | translate: { name: (item.title | translate) } }}</ion-text>\n </ion-button>\n\n <!-- divider -->\n <div *ngIf=\"!item.path && !item.action\" [class]=\"item.cssClass\">\n <ion-label translate>{{ item.title }}&nbsp;</ion-label>\n </div>\n </ng-container>\n\n <!--<p *ngIf=\"buttons.length\" class=\"visible-mobile\">&nbsp;</p>-->\n </ng-container>\n\n <ion-button *ngIf=\"showAccountButton\" expand=\"block\" color=\"secondary\" [routerLink]=\"['/account']\">\n <ion-icon slot=\"start\" class=\"ion-float-start\" name=\"person-circle\"></ion-icon>\n <ion-text translate>HOME.BTN_MY_ACCOUNT</ion-text>\n </ion-button>\n\n <p hidden-xs hidden-sm hidden-mobile>\n <ion-text\n [innerHTML]=\"'HOME.NOT_THIS_ACCOUNT_QUESTION' | translate: { displayName: accountName }\"\n ></ion-text>\n <br />\n <ion-text>\n <a href=\"#\" (click)=\"logout($event)\">\n <span translate>HOME.BTN_DISCONNECT</span>\n </a>\n </ion-text>\n </p>\n </ng-template>\n </div>\n </ion-card-content>\n </ion-card>\n\n <!-- Page history -->\n @if (isLogin && (pageHistory$ | push); as pageHistory) {\n <ion-grid class=\"history-container ion-align-self-center\">\n <ion-row>\n @for (page of pageHistory; track page.path) {\n <ion-col size=\"12\" size-xl=\"\" class=\"ion-text-center\">\n <ion-card class=\"ion-align-self-start ion-text-start\" @fadeInAnimation>\n <ion-card-header class=\"ion-no-padding\">\n <!-- top bar -->\n <ion-card-subtitle>\n <button\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"removePageHistory(page.path)\"\n mat-icon-button\n class=\"ion-float-start ion-no-margin close-button\"\n >\n <mat-icon>close</mat-icon>\n </button>\n <ion-label [innerHTML]=\"page.subtitle | translate\"></ion-label>\n <ion-text class=\"ion-float-end\" [title]=\"page.time | dateFormat: { time: true }\">\n <small>\n <ion-icon name=\"time-outline\"></ion-icon>\n &nbsp;{{ page.time | dateFromNow }}\n </small>\n &nbsp;\n </ion-text>\n </ion-card-subtitle>\n\n <!-- main page -->\n <ion-card-title class=\"ion-no-margin ion-no-padding\">\n <ion-item\n detail=\"true\"\n tappable\n class=\"text-1x\"\n [routerLink]=\"page.path\"\n routerDirection=\"root\"\n lines=\"none\"\n >\n <!-- page icon-->\n <ion-icon *ngIf=\"page.icon\" slot=\"start\" [name]=\"page.icon\"></ion-icon>\n <mat-icon *ngIf=\"page.matIcon\" slot=\"start\">{{ page.matIcon }}</mat-icon>\n\n <ion-label color=\"primary\" [innerHTML]=\"page.title\"></ion-label>\n </ion-item>\n </ion-card-title>\n </ion-card-header>\n\n <!-- children pages -->\n @if (page.children | isNotEmptyArray) {\n <ion-card-content class=\"ion-no-padding ion-padding-start\">\n <ion-list class=\"ion-no-padding\">\n @for (childPage of page.children; track childPage.path) {\n <ion-item\n detail=\"true\"\n tappable\n class=\"text-1x\"\n [routerLink]=\"childPage.path\"\n routerDirection=\"root\"\n >\n <!-- page icon-->\n <ion-icon *ngIf=\"childPage.icon\" slot=\"start\" color=\"dark\" [name]=\"childPage.icon\"></ion-icon>\n <mat-icon *ngIf=\"childPage.matIcon\" slot=\"start\" color=\"dark\">\n {{ childPage.matIcon }}\n </mat-icon>\n\n <ion-label color=\"dark\" [innerHTML]=\"childPage.title\"></ion-label>\n </ion-item>\n }\n </ion-list>\n </ion-card-content>\n }\n </ion-card>\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n } @else if (showPartnerBanner) {\n <!-- Display partners logos -->\n <div class=\"bottom-banner ion-text-center ion-padding\" @fadeInAnimation>\n @for (item of $partners | async; track $index) {\n <a href=\"{{ item.siteUrl }}\">\n <img class=\"logo\" src=\"{{ item.logo }}\" alt=\"{{ item.label }}\" [title]=\"item.label\" />\n </a>\n }\n </div>\n }\n }\n</ion-content>\n", styles: ["h1,h2,h3,h4,h5{white-space:normal}.center,ion-content ion-card.welcome img{text-align:center;display:inline-block}ion-content{--background: transparent;background-size:cover;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-color:var(--ion-background-color);display:inline-block;padding:15px}ion-content .loading-page{display:block;height:100%;width:100%;position:absolute;background-color:transparent;z-index:5;transition:background .5s linear;-webkit-transition:background 1.5s linear}ion-content .loading-page.hidden{background-color:rgba(var(--ion-color-primary),0)}ion-content ion-card{z-index:9}ion-content ion-card ion-card-header{display:block}ion-content ion-card ion-card-header ion-card-subtitle,ion-content ion-card ion-card-header ion-card-title{display:block;width:100%}ion-content ion-card.main{min-width:240px;max-width:400px;margin-left:auto;margin-right:auto}ion-content ion-card.welcome{background-color:var(--ion-card-background-color)}ion-content ion-card.welcome button{margin-top:16px}ion-content ion-card.welcome img{max-width:250px}ion-content .history-container{margin-left:auto;margin-right:auto}ion-content .history-container ion-card{display:inline-block;box-sizing:border-box;z-index:8;min-width:240px;max-width:400px;width:100%;margin-left:auto;margin-right:auto;background-color:var(--ion-card-background-color)}ion-content .history-container ion-card ion-card-header ion-card-subtitle{height:40px}ion-content .history-container ion-card ion-card-header ion-card-subtitle button[float-start]{--mdc-icon-button-state-layer-size: 40px;padding:8px;z-index:99;margin:0}ion-content .history-container ion-card ion-card-header ion-card-subtitle ion-label{line-height:40px}ion-content .history-container ion-card ion-card-header ion-card-subtitle ion-label[float-end]{padding-right:16px;font-weight:400}ion-content .history-container ion-card ion-card-header ion-card-title ion-item{width:100%;--ion-item-background: $transparent;--ion-item-icon-color: var(--ion-color-primary);--ion-item-text-color: var(--ion-color-primary)}ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-icon[slot=start],ion-content .history-container ion-card ion-card-header ion-card-title ion-item mat-icon[slot=start]{margin-right:unset;margin-inline-end:16px!important;color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-text,ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-label{color:var(--ion-item-text-color)!important;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}ion-content .history-container ion-card ion-card-content ion-list{--ion-item-background: var(--ion-color-transparent)}ion-content .history-container ion-card ion-card-content ion-list ion-item{--ion-item-icon-color: var(--ion-color-dark);--ion-item-text-color: var(--ion-color-dark)}ion-content .history-container ion-card ion-card-content ion-list ion-item ion-icon[slot=start],ion-content .history-container ion-card ion-card-content ion-list ion-item mat-icon[slot=start]{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor;margin-right:unset;margin-inline-end:16px!important}ion-content .history-container ion-card ion-card-content ion-list ion-item ion-text,ion-content .history-container ion-card ion-card-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-content .bottom-banner{background-color:var(--ion-card-background-color);min-width:240px;z-index:0;position:absolute;left:16px;right:16px;bottom:16px}ion-content .bottom-banner img.logo{max-height:50px;margin-left:8px}ion-content ion-text{text-align:center}@media screen and (max-width: 575px){ion-content ion-card{min-width:160px;width:calc(100% - 20px);max-width:100%;margin-left:10px;margin-right:10px}ion-content ion-card h1{margin-top:0;font-size:20px}ion-content ion-card ion-card-content ion-button{margin-top:8px}ion-content .bottom-banner{display:block;position:unset}ion-content .bottom-banner img.logo{max-height:30px}}@media screen and (max-width: 767px) and (min-width: 576px){ion-content{min-height:555px}ion-content .bottom-banner img.logo{max-height:40px}}@media screen and (min-width: 768px){ion-content{min-height:calc(100% - 100px)}}.content-credits{position:absolute;right:5px;bottom:5px}.content-credits ion-text{padding-inline-start:4px;padding-inline-end:4px;font-size:.8rem;background-color:var(--ion-background-color, white);color:var(--ion-text-color);opacity:.65}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.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: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i2.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i2.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: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.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: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]" }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i9.RxIf, selector: "[rxIf]", inputs: ["rxIf", "rxIfStrategy", "rxIfElse", "rxIfThen", "rxIfSuspense", "rxIfComplete", "rxIfError", "rxIfContextTrigger", "rxIfNextTrigger", "rxIfSuspenseTrigger", "rxIfErrorTrigger", "rxIfCompleteTrigger", "rxIfParent", "rxIfPatchZone", "rxIfRenderCallback"] }, { 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.ToolbarComponent, selector: "app-toolbar", inputs: ["progressBarMode", "title", "color", "class", "backHref", "defaultBackHref", "hasValidate", "hasClose", "hasSearch", "canGoBack", "canShowMenu"], outputs: ["onValidate", "onClose", "onValidateAndClose", "onBackClick", "onSearch"] }, { kind: "directive", type: i14.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i15.AppInstallUpgradeCard, selector: "app-install-upgrade-card", inputs: ["isLogin", "showUpgradeWarning", "showOfflineWarning", "showInstallButton"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i16.RxPush, name: "push" }, { kind: "pipe", type: i17.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i18.DateFromNowPipe, name: "dateFromNow" }, { kind: "pipe", type: i19.NotEmptyArrayPipe, name: "isNotEmptyArray" }, { kind: "pipe", type: i20.IsNotNilOrBlankPipe, name: "isNotNilOrBlank" }], animations: [fadeInAnimation, slideUpDownAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
293
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HomePage, deps: [{ token: i1.AccountService }, { token: i2.ModalController }, { token: i3.TranslateService }, { token: i2.ToastController }, { token: i4.ConfigService }, { token: i5.PlatformService }, { token: i0.ChangeDetectorRef }, { token: i6.NetworkService }, { token: i7.LocalSettingsService }, { token: ENVIRONMENT }, { token: APP_LOCALES }, { token: APP_HOME_BUTTONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
294
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: HomePage, selector: "app-page-home", usesInheritance: true, ngImport: i0, template: "<app-toolbar [canGoBack]=\"false\" visible-xs visible-sm visible-mobile>\n <!-- Change locale button -->\n <ion-button slot=\"end\" [matMenuTriggerFor]=\"localeMenu\">\n <ion-icon slot=\"start\" name=\"language\"></ion-icon>\n </ion-button>\n</app-toolbar>\n\n<!-- Change locale menu -->\n<mat-menu #localeMenu=\"matMenu\">\n <ng-template matMenuContent>\n @for (item of locales; track item.key) {\n <button mat-menu-item (click)=\"changeLanguage(item.key)\">\n <ion-label>{{ item.value }}</ion-label>\n </button>\n }\n </ng-template>\n</mat-menu>\n\n<ion-content [ngStyle]=\"contentStyle\" no-padding-xs>\n @if (contentCredits | isNotNilOrBlank) {\n <span class=\"content-credits\">\n <ion-text>{{ contentCredits }}</ion-text>\n </span>\n }\n\n <!-- loading spinner -->\n <div class=\"loading-page\" [class.cdk-visually-hidden]=\"!(loading$ | push)\">\n @if (showSpinner) {\n <div class=\"spinner\">\n <p [innerHTML]=\"'COMMON.LOADING_DOTS' | translate\"></p>\n <div class=\"sk-cube1 sk-cube\"></div>\n <div class=\"sk-cube2 sk-cube\"></div>\n <div class=\"sk-cube4 sk-cube\"></div>\n <div class=\"sk-cube3 sk-cube\"></div>\n </div>\n }\n </div>\n\n <!-- Desktop: translucent top toolbar -->\n <div hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar translucent>\n <ion-buttons slot=\"start\">\n <ion-menu-toggle>\n <ion-button color=\"light\" fill=\"clear\">\n <ion-icon slot=\"icon-only\" name=\"menu\"></ion-icon>\n </ion-button>\n </ion-menu-toggle>\n </ion-buttons>\n\n <ion-buttons slot=\"end\">\n <!-- change locale button -->\n <ion-button\n color=\"secondary\"\n fill=\"solid\"\n [matMenuTriggerFor]=\"localeMenu\"\n [title]=\"'SETTINGS.LOCALE' | translate\"\n >\n <ion-icon slot=\"icon-only\" name=\"language\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </div>\n\n <!-- Install (and upgrade) card -->\n <app-install-upgrade-card [isLogin]=\"isLogin\" [showInstallButton]=\"true\"></app-install-upgrade-card>\n\n @if (!(loading$ | push)) {\n <!-- Welcome card -->\n <ion-card class=\"main welcome ion-padding ion-text-center ion-align-self-center\" @fadeInAnimation>\n <ion-card-header>\n <ion-card-title class=\"ion-text-center\">\n <span *ngIf=\"isWeb\" [innerHTML]=\"'HOME.WELCOME_WEB' | translate: { appName: appName }\"></span>\n <span *ngIf=\"!isWeb\" [innerHTML]=\"'HOME.WELCOME_APP' | translate: { appName: appName }\"></span>\n </ion-card-title>\n <ion-card-subtitle [innerHTML]=\"description\"></ion-card-subtitle>\n </ion-card-header>\n <ion-card-content class=\"ion-no-padding\">\n <ion-text color=\"primary\">\n <img *ngIf=\"logo\" [attr.src]=\"logo\" alt=\"Logo\" />\n </ion-text>\n <!-- register help text -->\n <ion-text *ngIf=\"!isLogin && canRegister\">\n <br />\n <span translate>HOME.REGISTER_HELP</span>\n </ion-text>\n <div class=\"ion-padding-top\">\n <!-- If NOT login -->\n <ng-container *ngIf=\"!isLogin; else loginButtons\">\n <ion-button *ngIf=\"canRegister\" expand=\"block\" color=\"tertiary\" (click)=\"register()\">\n <span translate>HOME.BTN_REGISTER</span>\n </ion-button>\n <ion-button expand=\"block\" color=\"light\" [routerLink]=\"['/']\" (click)=\"login()\">\n <span translate>AUTH.BTN_LOGIN</span>\n </ion-button>\n </ng-container>\n\n <!-- If user login -->\n <ng-template #loginButtons>\n <!-- Feature buttons -->\n <ng-container *rxIf=\"$filteredButtons; let buttons\">\n <ng-container *ngFor=\"let item of buttons\">\n <ion-button\n *ngIf=\"item.path\"\n expand=\"block\"\n color=\"tertiary\"\n [class]=\"item.cssClass\"\n [routerLink]=\"item.path\"\n routerDirection=\"root\"\n >\n <ion-icon slot=\"start\" class=\"ion-float-start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" class=\"ion-float-start\" *ngIf=\"item.matIcon\">{{ item.matIcon }}</mat-icon>\n <ion-text>{{ 'HOME.BTN_DATA_ENTRY' | translate: { name: (item.title | translate) } }}</ion-text>\n </ion-button>\n\n <!-- divider -->\n <div *ngIf=\"!item.path && !item.action\" [class]=\"item.cssClass\">\n <ion-label translate>{{ item.title }}&nbsp;</ion-label>\n </div>\n </ng-container>\n\n <!--<p *ngIf=\"buttons.length\" class=\"visible-mobile\">&nbsp;</p>-->\n </ng-container>\n\n <ion-button *ngIf=\"showAccountButton\" expand=\"block\" color=\"secondary\" [routerLink]=\"['/account']\">\n <ion-icon slot=\"start\" class=\"ion-float-start\" name=\"person-circle\"></ion-icon>\n <ion-text translate>HOME.BTN_MY_ACCOUNT</ion-text>\n </ion-button>\n\n <p hidden-xs hidden-sm hidden-mobile>\n <ion-text\n [innerHTML]=\"'HOME.NOT_THIS_ACCOUNT_QUESTION' | translate: { displayName: accountName }\"\n ></ion-text>\n <br />\n <ion-text>\n <a href=\"#\" (click)=\"logout($event)\">\n <span translate>HOME.BTN_DISCONNECT</span>\n </a>\n </ion-text>\n </p>\n </ng-template>\n </div>\n </ion-card-content>\n </ion-card>\n\n <!-- Page history -->\n @if (isLogin && (pageHistory$ | push); as pageHistory) {\n <ion-grid class=\"history-container ion-align-self-center\">\n <ion-row>\n @for (page of pageHistory; track page.path) {\n <ion-col size=\"12\" size-xl=\"\" class=\"ion-text-center\">\n <ion-card class=\"ion-align-self-start ion-text-start\" @fadeInAnimation>\n <ion-card-header class=\"ion-no-padding\">\n <!-- top bar -->\n <ion-card-subtitle>\n <button\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"removePageHistory(page.path)\"\n mat-icon-button\n class=\"ion-float-start ion-no-margin close-button\"\n >\n <mat-icon>close</mat-icon>\n </button>\n <ion-label [innerHTML]=\"page.subtitle | translate\"></ion-label>\n <ion-text class=\"ion-float-end\" [title]=\"page.time | dateFormat: { time: true }\">\n <small>\n <ion-icon name=\"time-outline\"></ion-icon>\n &nbsp;{{ page.time | dateFromNow }}\n </small>\n &nbsp;\n </ion-text>\n </ion-card-subtitle>\n\n <!-- main page -->\n <ion-card-title class=\"ion-no-margin ion-no-padding\">\n <ion-item\n detail=\"true\"\n tappable\n class=\"text-1x\"\n [routerLink]=\"page.path\"\n routerDirection=\"root\"\n lines=\"none\"\n >\n <!-- page icon-->\n <ion-icon *ngIf=\"page.icon\" slot=\"start\" [name]=\"page.icon\"></ion-icon>\n <mat-icon *ngIf=\"page.matIcon\" slot=\"start\">{{ page.matIcon }}</mat-icon>\n\n <ion-label color=\"primary\" [innerHTML]=\"page.title\"></ion-label>\n </ion-item>\n </ion-card-title>\n </ion-card-header>\n\n <!-- children pages -->\n @if (page.children | isNotEmptyArray) {\n <ion-card-content class=\"ion-no-padding ion-padding-start\">\n <ion-list class=\"ion-no-padding\">\n @for (childPage of page.children; track childPage.path) {\n <ion-item\n detail=\"true\"\n tappable\n class=\"text-1x\"\n [routerLink]=\"childPage.path\"\n routerDirection=\"root\"\n >\n <!-- page icon-->\n <ion-icon *ngIf=\"childPage.icon\" slot=\"start\" color=\"dark\" [name]=\"childPage.icon\"></ion-icon>\n <mat-icon *ngIf=\"childPage.matIcon\" slot=\"start\" color=\"dark\">\n {{ childPage.matIcon }}\n </mat-icon>\n\n <ion-label color=\"dark\" [innerHTML]=\"childPage.title\"></ion-label>\n </ion-item>\n }\n </ion-list>\n </ion-card-content>\n }\n </ion-card>\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n } @else if (showPartnerBanner) {\n <!-- Display partners logos -->\n <div class=\"bottom-banner ion-text-center ion-padding\" @fadeInAnimation>\n @for (item of $partners | async; track $index) {\n <a href=\"{{ item.siteUrl }}\">\n <img class=\"logo\" src=\"{{ item.logo }}\" alt=\"{{ item.label }}\" [title]=\"item.label\" />\n </a>\n }\n </div>\n }\n }\n</ion-content>\n", styles: ["h1,h2,h3,h4,h5{white-space:normal}.center,ion-content ion-card.welcome img{text-align:center;display:inline-block}ion-content{--background: transparent;background-size:cover;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-color:var(--ion-background-color);display:inline-block;padding:15px}ion-content .loading-page{display:block;height:100%;width:100%;position:absolute;background-color:transparent;z-index:5;transition:background .5s linear;-webkit-transition:background 1.5s linear}ion-content .loading-page.hidden{background-color:rgba(var(--ion-color-primary),0)}ion-content ion-card{z-index:9}ion-content ion-card ion-card-header{display:block}ion-content ion-card ion-card-header ion-card-subtitle,ion-content ion-card ion-card-header ion-card-title{display:block;width:100%}ion-content ion-card.main{min-width:240px;max-width:400px;margin-left:auto;margin-right:auto}ion-content ion-card.welcome{background-color:var(--ion-card-background-color)}ion-content ion-card.welcome button{margin-top:16px}ion-content ion-card.welcome img{max-width:250px}ion-content .history-container{margin-left:auto;margin-right:auto}ion-content .history-container ion-card{display:inline-block;box-sizing:border-box;z-index:8;min-width:240px;max-width:400px;width:100%;margin-left:auto;margin-right:auto;background-color:var(--ion-card-background-color)}ion-content .history-container ion-card ion-card-header ion-card-subtitle{height:40px}ion-content .history-container ion-card ion-card-header ion-card-subtitle button[float-start]{--mdc-icon-button-state-layer-size: 40px;padding:8px;z-index:99;margin:0}ion-content .history-container ion-card ion-card-header ion-card-subtitle ion-label{line-height:40px}ion-content .history-container ion-card ion-card-header ion-card-subtitle ion-label[float-end]{padding-right:16px;font-weight:400}ion-content .history-container ion-card ion-card-header ion-card-title ion-item{width:100%;--ion-item-background: $transparent;--ion-item-icon-color: var(--ion-color-primary);--ion-item-text-color: var(--ion-color-primary)}ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-icon[slot=start],ion-content .history-container ion-card ion-card-header ion-card-title ion-item mat-icon[slot=start]{margin-right:unset;margin-inline-end:16px!important;color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-text,ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-label{color:var(--ion-item-text-color)!important;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}ion-content .history-container ion-card ion-card-content ion-list{--ion-item-background: var(--ion-color-transparent)}ion-content .history-container ion-card ion-card-content ion-list ion-item{--ion-item-icon-color: var(--ion-color-dark);--ion-item-text-color: var(--ion-color-dark)}ion-content .history-container ion-card ion-card-content ion-list ion-item ion-icon[slot=start],ion-content .history-container ion-card ion-card-content ion-list ion-item mat-icon[slot=start]{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor;margin-right:unset;margin-inline-end:16px!important}ion-content .history-container ion-card ion-card-content ion-list ion-item ion-text,ion-content .history-container ion-card ion-card-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-content .bottom-banner{background-color:var(--ion-card-background-color);min-width:240px;z-index:0;position:absolute;left:16px;right:16px;bottom:16px}ion-content .bottom-banner img.logo{max-height:50px;margin-left:8px}ion-content ion-text{text-align:center}@media screen and (max-width: 575px){ion-content ion-card{min-width:160px;width:calc(100% - 20px);max-width:100%;margin-left:10px;margin-right:10px}ion-content ion-card h1{margin-top:0;font-size:20px}ion-content ion-card ion-card-content ion-button{margin-top:8px}ion-content .bottom-banner{display:block;position:unset}ion-content .bottom-banner img.logo{max-height:30px}}@media screen and (max-width: 767px) and (min-width: 576px){ion-content{min-height:555px}ion-content .bottom-banner img.logo{max-height:40px}}@media screen and (min-width: 768px){ion-content{min-height:calc(100% - 100px)}}.content-credits{position:absolute;right:5px;bottom:5px}.content-credits ion-text{padding-inline-start:4px;padding-inline-end:4px;font-size:.8rem;background-color:var(--ion-background-color, white);color:var(--ion-text-color);opacity:.65}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.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: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i2.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i2.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: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.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: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]" }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i9.RxIf, selector: "[rxIf]", inputs: ["rxIf", "rxIfStrategy", "rxIfElse", "rxIfThen", "rxIfSuspense", "rxIfComplete", "rxIfError", "rxIfContextTrigger", "rxIfNextTrigger", "rxIfSuspenseTrigger", "rxIfErrorTrigger", "rxIfCompleteTrigger", "rxIfParent", "rxIfPatchZone", "rxIfRenderCallback"] }, { 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.ToolbarComponent, selector: "app-toolbar", inputs: ["progressBarMode", "title", "color", "class", "backHref", "defaultBackHref", "hasValidate", "hasClose", "hasSearch", "canGoBack", "canShowMenu"], outputs: ["onValidate", "onClose", "onValidateAndClose", "onBackClick", "onSearch"] }, { kind: "directive", type: i14.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i15.AppInstallUpgradeCard, selector: "app-install-upgrade-card", inputs: ["isLogin", "showUpgradeWarning", "showOfflineWarning", "showInstallButton"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i16.RxPush, name: "push" }, { kind: "pipe", type: i17.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i18.DateFromNowPipe, name: "dateFromNow" }, { kind: "pipe", type: i19.NotEmptyArrayPipe, name: "isNotEmptyArray" }, { kind: "pipe", type: i20.IsNotNilOrBlankPipe, name: "isNotNilOrBlank" }], animations: [fadeInAnimation, slideUpDownAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
295
295
  }
296
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: HomePage, decorators: [{
296
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HomePage, decorators: [{
297
297
  type: Component,
298
298
  args: [{ selector: 'app-page-home', changeDetection: ChangeDetectionStrategy.OnPush, animations: [fadeInAnimation, slideUpDownAnimation], template: "<app-toolbar [canGoBack]=\"false\" visible-xs visible-sm visible-mobile>\n <!-- Change locale button -->\n <ion-button slot=\"end\" [matMenuTriggerFor]=\"localeMenu\">\n <ion-icon slot=\"start\" name=\"language\"></ion-icon>\n </ion-button>\n</app-toolbar>\n\n<!-- Change locale menu -->\n<mat-menu #localeMenu=\"matMenu\">\n <ng-template matMenuContent>\n @for (item of locales; track item.key) {\n <button mat-menu-item (click)=\"changeLanguage(item.key)\">\n <ion-label>{{ item.value }}</ion-label>\n </button>\n }\n </ng-template>\n</mat-menu>\n\n<ion-content [ngStyle]=\"contentStyle\" no-padding-xs>\n @if (contentCredits | isNotNilOrBlank) {\n <span class=\"content-credits\">\n <ion-text>{{ contentCredits }}</ion-text>\n </span>\n }\n\n <!-- loading spinner -->\n <div class=\"loading-page\" [class.cdk-visually-hidden]=\"!(loading$ | push)\">\n @if (showSpinner) {\n <div class=\"spinner\">\n <p [innerHTML]=\"'COMMON.LOADING_DOTS' | translate\"></p>\n <div class=\"sk-cube1 sk-cube\"></div>\n <div class=\"sk-cube2 sk-cube\"></div>\n <div class=\"sk-cube4 sk-cube\"></div>\n <div class=\"sk-cube3 sk-cube\"></div>\n </div>\n }\n </div>\n\n <!-- Desktop: translucent top toolbar -->\n <div hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar translucent>\n <ion-buttons slot=\"start\">\n <ion-menu-toggle>\n <ion-button color=\"light\" fill=\"clear\">\n <ion-icon slot=\"icon-only\" name=\"menu\"></ion-icon>\n </ion-button>\n </ion-menu-toggle>\n </ion-buttons>\n\n <ion-buttons slot=\"end\">\n <!-- change locale button -->\n <ion-button\n color=\"secondary\"\n fill=\"solid\"\n [matMenuTriggerFor]=\"localeMenu\"\n [title]=\"'SETTINGS.LOCALE' | translate\"\n >\n <ion-icon slot=\"icon-only\" name=\"language\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </div>\n\n <!-- Install (and upgrade) card -->\n <app-install-upgrade-card [isLogin]=\"isLogin\" [showInstallButton]=\"true\"></app-install-upgrade-card>\n\n @if (!(loading$ | push)) {\n <!-- Welcome card -->\n <ion-card class=\"main welcome ion-padding ion-text-center ion-align-self-center\" @fadeInAnimation>\n <ion-card-header>\n <ion-card-title class=\"ion-text-center\">\n <span *ngIf=\"isWeb\" [innerHTML]=\"'HOME.WELCOME_WEB' | translate: { appName: appName }\"></span>\n <span *ngIf=\"!isWeb\" [innerHTML]=\"'HOME.WELCOME_APP' | translate: { appName: appName }\"></span>\n </ion-card-title>\n <ion-card-subtitle [innerHTML]=\"description\"></ion-card-subtitle>\n </ion-card-header>\n <ion-card-content class=\"ion-no-padding\">\n <ion-text color=\"primary\">\n <img *ngIf=\"logo\" [attr.src]=\"logo\" alt=\"Logo\" />\n </ion-text>\n <!-- register help text -->\n <ion-text *ngIf=\"!isLogin && canRegister\">\n <br />\n <span translate>HOME.REGISTER_HELP</span>\n </ion-text>\n <div class=\"ion-padding-top\">\n <!-- If NOT login -->\n <ng-container *ngIf=\"!isLogin; else loginButtons\">\n <ion-button *ngIf=\"canRegister\" expand=\"block\" color=\"tertiary\" (click)=\"register()\">\n <span translate>HOME.BTN_REGISTER</span>\n </ion-button>\n <ion-button expand=\"block\" color=\"light\" [routerLink]=\"['/']\" (click)=\"login()\">\n <span translate>AUTH.BTN_LOGIN</span>\n </ion-button>\n </ng-container>\n\n <!-- If user login -->\n <ng-template #loginButtons>\n <!-- Feature buttons -->\n <ng-container *rxIf=\"$filteredButtons; let buttons\">\n <ng-container *ngFor=\"let item of buttons\">\n <ion-button\n *ngIf=\"item.path\"\n expand=\"block\"\n color=\"tertiary\"\n [class]=\"item.cssClass\"\n [routerLink]=\"item.path\"\n routerDirection=\"root\"\n >\n <ion-icon slot=\"start\" class=\"ion-float-start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" class=\"ion-float-start\" *ngIf=\"item.matIcon\">{{ item.matIcon }}</mat-icon>\n <ion-text>{{ 'HOME.BTN_DATA_ENTRY' | translate: { name: (item.title | translate) } }}</ion-text>\n </ion-button>\n\n <!-- divider -->\n <div *ngIf=\"!item.path && !item.action\" [class]=\"item.cssClass\">\n <ion-label translate>{{ item.title }}&nbsp;</ion-label>\n </div>\n </ng-container>\n\n <!--<p *ngIf=\"buttons.length\" class=\"visible-mobile\">&nbsp;</p>-->\n </ng-container>\n\n <ion-button *ngIf=\"showAccountButton\" expand=\"block\" color=\"secondary\" [routerLink]=\"['/account']\">\n <ion-icon slot=\"start\" class=\"ion-float-start\" name=\"person-circle\"></ion-icon>\n <ion-text translate>HOME.BTN_MY_ACCOUNT</ion-text>\n </ion-button>\n\n <p hidden-xs hidden-sm hidden-mobile>\n <ion-text\n [innerHTML]=\"'HOME.NOT_THIS_ACCOUNT_QUESTION' | translate: { displayName: accountName }\"\n ></ion-text>\n <br />\n <ion-text>\n <a href=\"#\" (click)=\"logout($event)\">\n <span translate>HOME.BTN_DISCONNECT</span>\n </a>\n </ion-text>\n </p>\n </ng-template>\n </div>\n </ion-card-content>\n </ion-card>\n\n <!-- Page history -->\n @if (isLogin && (pageHistory$ | push); as pageHistory) {\n <ion-grid class=\"history-container ion-align-self-center\">\n <ion-row>\n @for (page of pageHistory; track page.path) {\n <ion-col size=\"12\" size-xl=\"\" class=\"ion-text-center\">\n <ion-card class=\"ion-align-self-start ion-text-start\" @fadeInAnimation>\n <ion-card-header class=\"ion-no-padding\">\n <!-- top bar -->\n <ion-card-subtitle>\n <button\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"removePageHistory(page.path)\"\n mat-icon-button\n class=\"ion-float-start ion-no-margin close-button\"\n >\n <mat-icon>close</mat-icon>\n </button>\n <ion-label [innerHTML]=\"page.subtitle | translate\"></ion-label>\n <ion-text class=\"ion-float-end\" [title]=\"page.time | dateFormat: { time: true }\">\n <small>\n <ion-icon name=\"time-outline\"></ion-icon>\n &nbsp;{{ page.time | dateFromNow }}\n </small>\n &nbsp;\n </ion-text>\n </ion-card-subtitle>\n\n <!-- main page -->\n <ion-card-title class=\"ion-no-margin ion-no-padding\">\n <ion-item\n detail=\"true\"\n tappable\n class=\"text-1x\"\n [routerLink]=\"page.path\"\n routerDirection=\"root\"\n lines=\"none\"\n >\n <!-- page icon-->\n <ion-icon *ngIf=\"page.icon\" slot=\"start\" [name]=\"page.icon\"></ion-icon>\n <mat-icon *ngIf=\"page.matIcon\" slot=\"start\">{{ page.matIcon }}</mat-icon>\n\n <ion-label color=\"primary\" [innerHTML]=\"page.title\"></ion-label>\n </ion-item>\n </ion-card-title>\n </ion-card-header>\n\n <!-- children pages -->\n @if (page.children | isNotEmptyArray) {\n <ion-card-content class=\"ion-no-padding ion-padding-start\">\n <ion-list class=\"ion-no-padding\">\n @for (childPage of page.children; track childPage.path) {\n <ion-item\n detail=\"true\"\n tappable\n class=\"text-1x\"\n [routerLink]=\"childPage.path\"\n routerDirection=\"root\"\n >\n <!-- page icon-->\n <ion-icon *ngIf=\"childPage.icon\" slot=\"start\" color=\"dark\" [name]=\"childPage.icon\"></ion-icon>\n <mat-icon *ngIf=\"childPage.matIcon\" slot=\"start\" color=\"dark\">\n {{ childPage.matIcon }}\n </mat-icon>\n\n <ion-label color=\"dark\" [innerHTML]=\"childPage.title\"></ion-label>\n </ion-item>\n }\n </ion-list>\n </ion-card-content>\n }\n </ion-card>\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n } @else if (showPartnerBanner) {\n <!-- Display partners logos -->\n <div class=\"bottom-banner ion-text-center ion-padding\" @fadeInAnimation>\n @for (item of $partners | async; track $index) {\n <a href=\"{{ item.siteUrl }}\">\n <img class=\"logo\" src=\"{{ item.logo }}\" alt=\"{{ item.label }}\" [title]=\"item.label\" />\n </a>\n }\n </div>\n }\n }\n</ion-content>\n", styles: ["h1,h2,h3,h4,h5{white-space:normal}.center,ion-content ion-card.welcome img{text-align:center;display:inline-block}ion-content{--background: transparent;background-size:cover;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-color:var(--ion-background-color);display:inline-block;padding:15px}ion-content .loading-page{display:block;height:100%;width:100%;position:absolute;background-color:transparent;z-index:5;transition:background .5s linear;-webkit-transition:background 1.5s linear}ion-content .loading-page.hidden{background-color:rgba(var(--ion-color-primary),0)}ion-content ion-card{z-index:9}ion-content ion-card ion-card-header{display:block}ion-content ion-card ion-card-header ion-card-subtitle,ion-content ion-card ion-card-header ion-card-title{display:block;width:100%}ion-content ion-card.main{min-width:240px;max-width:400px;margin-left:auto;margin-right:auto}ion-content ion-card.welcome{background-color:var(--ion-card-background-color)}ion-content ion-card.welcome button{margin-top:16px}ion-content ion-card.welcome img{max-width:250px}ion-content .history-container{margin-left:auto;margin-right:auto}ion-content .history-container ion-card{display:inline-block;box-sizing:border-box;z-index:8;min-width:240px;max-width:400px;width:100%;margin-left:auto;margin-right:auto;background-color:var(--ion-card-background-color)}ion-content .history-container ion-card ion-card-header ion-card-subtitle{height:40px}ion-content .history-container ion-card ion-card-header ion-card-subtitle button[float-start]{--mdc-icon-button-state-layer-size: 40px;padding:8px;z-index:99;margin:0}ion-content .history-container ion-card ion-card-header ion-card-subtitle ion-label{line-height:40px}ion-content .history-container ion-card ion-card-header ion-card-subtitle ion-label[float-end]{padding-right:16px;font-weight:400}ion-content .history-container ion-card ion-card-header ion-card-title ion-item{width:100%;--ion-item-background: $transparent;--ion-item-icon-color: var(--ion-color-primary);--ion-item-text-color: var(--ion-color-primary)}ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-icon[slot=start],ion-content .history-container ion-card ion-card-header ion-card-title ion-item mat-icon[slot=start]{margin-right:unset;margin-inline-end:16px!important;color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-text,ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-label{color:var(--ion-item-text-color)!important;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}ion-content .history-container ion-card ion-card-content ion-list{--ion-item-background: var(--ion-color-transparent)}ion-content .history-container ion-card ion-card-content ion-list ion-item{--ion-item-icon-color: var(--ion-color-dark);--ion-item-text-color: var(--ion-color-dark)}ion-content .history-container ion-card ion-card-content ion-list ion-item ion-icon[slot=start],ion-content .history-container ion-card ion-card-content ion-list ion-item mat-icon[slot=start]{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor;margin-right:unset;margin-inline-end:16px!important}ion-content .history-container ion-card ion-card-content ion-list ion-item ion-text,ion-content .history-container ion-card ion-card-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-content .bottom-banner{background-color:var(--ion-card-background-color);min-width:240px;z-index:0;position:absolute;left:16px;right:16px;bottom:16px}ion-content .bottom-banner img.logo{max-height:50px;margin-left:8px}ion-content ion-text{text-align:center}@media screen and (max-width: 575px){ion-content ion-card{min-width:160px;width:calc(100% - 20px);max-width:100%;margin-left:10px;margin-right:10px}ion-content ion-card h1{margin-top:0;font-size:20px}ion-content ion-card ion-card-content ion-button{margin-top:8px}ion-content .bottom-banner{display:block;position:unset}ion-content .bottom-banner img.logo{max-height:30px}}@media screen and (max-width: 767px) and (min-width: 576px){ion-content{min-height:555px}ion-content .bottom-banner img.logo{max-height:40px}}@media screen and (min-width: 768px){ion-content{min-height:calc(100% - 100px)}}.content-credits{position:absolute;right:5px;bottom:5px}.content-credits ion-text{padding-inline-start:4px;padding-inline-end:4px;font-size:.8rem;background-color:var(--ion-background-color, white);color:var(--ion-text-color);opacity:.65}\n"] }]
299
299
  }], ctorParameters: () => [{ type: i1.AccountService }, { type: i2.ModalController }, { type: i3.TranslateService }, { type: i2.ToastController }, { type: i4.ConfigService }, { type: i5.PlatformService }, { type: i0.ChangeDetectorRef }, { type: i6.NetworkService }, { type: i7.LocalSettingsService }, { type: i21.Environment, decorators: [{
@@ -9,13 +9,13 @@ import { RxStateModule } from '../../shared/rx-state/rx-state.module';
9
9
  import * as i0 from "@angular/core";
10
10
  import * as i1 from "@ngx-translate/core";
11
11
  export class AppHomePageModule {
12
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppHomePageModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
13
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.11", ngImport: i0, type: AppHomePageModule, declarations: [HomePage], imports: [SharedModule,
12
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppHomePageModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
13
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AppHomePageModule, declarations: [HomePage], imports: [SharedModule,
14
14
  RouterModule, i1.TranslateModule, RxStateModule,
15
15
  // App modules
16
16
  AppAuthModule,
17
17
  AppInstallUpgradeCardModule], exports: [RouterModule, TranslateModule, HomePage] });
18
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppHomePageModule, imports: [SharedModule,
18
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppHomePageModule, imports: [SharedModule,
19
19
  RouterModule,
20
20
  TranslateModule.forChild(),
21
21
  RxStateModule,
@@ -23,7 +23,7 @@ export class AppHomePageModule {
23
23
  AppAuthModule,
24
24
  AppInstallUpgradeCardModule, RouterModule, TranslateModule] });
25
25
  }
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppHomePageModule, decorators: [{
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppHomePageModule, decorators: [{
27
27
  type: NgModule,
28
28
  args: [{
29
29
  imports: [
@@ -16,10 +16,10 @@ export class AppIconComponent {
16
16
  this.matSvgIcon = value.matSvgIcon;
17
17
  this.color = value.color || this.color; // Keep existing, if not defined in the reference
18
18
  }
19
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.11", type: AppIconComponent, selector: "app-icon", inputs: { icon: "icon", matIcon: "matIcon", matSvgIcon: "matSvgIcon", color: "color", height: "height", width: "width", ref: "ref" }, ngImport: i0, template: "<ion-icon\n *ngIf=\"icon; else matIconTemplate\"\n slot=\"icon-only\"\n [color]=\"color\"\n [name]=\"icon\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n></ion-icon>\n<ng-template #matIconTemplate>\n <mat-icon\n [svgIcon]=\"matSvgIcon\"\n [style.color]=\"'var(--ion-color-' + color + ')'\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n [style.font-size.px]=\"height || width\"\n >\n {{ matIcon }}\n </mat-icon>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
19
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AppIconComponent, selector: "app-icon", inputs: { icon: "icon", matIcon: "matIcon", matSvgIcon: "matSvgIcon", color: "color", height: "height", width: "width", ref: "ref" }, ngImport: i0, template: "<ion-icon\n *ngIf=\"icon; else matIconTemplate\"\n slot=\"icon-only\"\n [color]=\"color\"\n [name]=\"icon\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n></ion-icon>\n<ng-template #matIconTemplate>\n <mat-icon\n [svgIcon]=\"matSvgIcon\"\n [style.color]=\"'var(--ion-color-' + color + ')'\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n [style.font-size.px]=\"height || width\"\n >\n {{ matIcon }}\n </mat-icon>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
21
21
  }
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppIconComponent, decorators: [{
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppIconComponent, decorators: [{
23
23
  type: Component,
24
24
  args: [{ selector: 'app-icon', template: "<ion-icon\n *ngIf=\"icon; else matIconTemplate\"\n slot=\"icon-only\"\n [color]=\"color\"\n [name]=\"icon\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n></ion-icon>\n<ng-template #matIconTemplate>\n <mat-icon\n [svgIcon]=\"matSvgIcon\"\n [style.color]=\"'var(--ion-color-' + color + ')'\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n [style.font-size.px]=\"height || width\"\n >\n {{ matIcon }}\n </mat-icon>\n</ng-template>\n" }]
25
25
  }], propDecorators: { icon: [{
@@ -5,11 +5,11 @@ import { TranslateModule } from '@ngx-translate/core';
5
5
  import { AppIconComponent } from './icon.component';
6
6
  import * as i0 from "@angular/core";
7
7
  export class AppIconModule {
8
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppIconModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.11", ngImport: i0, type: AppIconModule, declarations: [AppIconComponent], imports: [SharedModule, TranslateModule], exports: [AppIconComponent] });
10
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppIconModule, imports: [SharedModule, TranslateModule] });
8
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppIconModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AppIconModule, declarations: [AppIconComponent], imports: [SharedModule, TranslateModule], exports: [AppIconComponent] });
10
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppIconModule, imports: [SharedModule, TranslateModule] });
11
11
  }
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppIconModule, decorators: [{
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppIconModule, decorators: [{
13
13
  type: NgModule,
14
14
  args: [{
15
15
  imports: [SharedModule, TranslateModule],
@@ -351,10 +351,10 @@ export class AppInstallUpgradeCard {
351
351
  return; // Skip if component has been destroyed
352
352
  await Toasts.show(this.toastController, this.translate, opts);
353
353
  }
354
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppInstallUpgradeCard, deps: [{ token: i1.ConfigService }, { token: i2.ToastController }, { token: i2.AlertController }, { token: i3.TranslateService }, { token: i0.ChangeDetectorRef }, { token: i4.PlatformService }, { token: i5.NetworkService }, { token: ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Component });
355
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: AppInstallUpgradeCard, selector: "app-install-upgrade-card", inputs: { isLogin: "isLogin", showUpgradeWarning: "showUpgradeWarning", showOfflineWarning: "showOfflineWarning", showInstallButton: "showInstallButton" }, ngImport: i0, template: "<!-- Offline mode card-->\n<ion-card\n *ngIf=\"showOfflineWarning && ((!loading && offline) || waitingNetwork)\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text class=\"ion-text-wrap\" *ngIf=\"!waitingNetwork; else waitingNetworkText\">\n <h4>\n <b *ngIf=\"isLogin; else notLogin\" [innerHTML]=\"'NETWORK.INFO.OFFLINE_OR_UNAUTHORIZED' | translate\"></b>\n <ng-template #notLogin>\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE' | translate\"></b>\n </ng-template>\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.OFFLINE_HELP' | translate\"></small>\n </h3>\n </ion-text>\n <ng-template #waitingNetworkText>\n <ion-text class=\"ion-text-wrap\" [innerHTML]=\"'NETWORK.INFO.RETRY_TO_CONNECT' | translate\"></ion-text>\n </ng-template>\n </ion-col>\n <ion-col size=\"auto\">\n <!-- Retry button -->\n <ion-button\n *ngIf=\"!waitingNetwork; else waitingSpinner\"\n color=\"tertiary\"\n class=\"ion-float-end\"\n (click)=\"tryOnline()\"\n >\n <span translate>NETWORK.BTN_CHECK_ALIVE</span>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Upgrade links -->\n<ion-card\n *ngIf=\"showUpgradeWarning && !loading && !offline && upgradeLinks\"\n color=\"accent\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of upgradeLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3>\n <span *ngIf=\"link.version\" [innerHTML]=\"'INFO.UPDATE_APP_TO_VERSION' | translate: link\"></span>\n <span *ngIf=\"!link.version\" [innerHTML]=\"'INFO.UPDATE_APP' | translate: link\"></span>\n </h3>\n <h4>\n <small *ngIf=\"last\" [innerHTML]=\"'INFO.UPDATE_APP_HELP' | translate\"></small>\n </h4>\n </ion-text>\n </ion-col>\n\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Install links -->\n<ion-card\n *ngIf=\"showInstallButton && !loading && !offline && installLinks\"\n color=\"secondary\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of installLinks; last as last\">\n <ion-col size=\"12\" size-sm=\"8\">\n <ion-text class=\"ion-text-wrap\">\n <h3\n [innerHTML]=\"\n 'INFO.DOWNLOAD_APP_TITLE' | translate: { name: link.name, platform: getPlatformName(link.platform) }\n \"\n ></h3>\n <h4><small *ngIf=\"last\" [innerHTML]=\"'INFO.DOWNLOAD_APP_HELP' | translate\"></small></h4>\n </ion-text>\n </ion-col>\n <ion-col size=\"12\" size-sm=\"4\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Display a download button, depending on the link URL, and the device platform -->\n<ng-template #downloadButton let-link>\n @if (link.filename) {\n @if (hasDownloader) {\n <!-- Download using platform -->\n @if (!link.location) {\n <ion-button\n (click)=\"download($event, asLink(link))\"\n [disabled]=\"link.downloading\"\n color=\"tertiary\"\n class=\"ion-float-end\"\n >\n <ion-icon slot=\"start\" *ngIf=\"!link.downloading\" name=\"download\"></ion-icon>\n <ion-spinner slot=\"start\" class=\"ion-no-padding\" *ngIf=\"link.downloading\"></ion-spinner>\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n } @else {\n <!-- Open APK button -->\n <ion-button (click)=\"openFile($event, link)\" color=\"tertiary\" class=\"ion-float-end\">\n <ion-label translate>COMMON.BTN_INSTALL</ion-label>\n </ion-button>\n }\n } @else {\n <!-- Web download button -->\n <ion-button [download]=\"link.filename\" [href]=\"link.url\" color=\"tertiary\" class=\"ion-float-end\">\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n }\n } @else {\n <!-- Web redirect button -->\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n }\n</ng-template>\n\n<!-- Waiting spinner -->\n<ng-template #waitingSpinner>\n <ion-spinner color=\"light\"></ion-spinner>\n</ng-template>\n", styles: ["ion-text small{font-size:85%}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.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: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.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: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], animations: [slideUpDownAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
354
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppInstallUpgradeCard, deps: [{ token: i1.ConfigService }, { token: i2.ToastController }, { token: i2.AlertController }, { token: i3.TranslateService }, { token: i0.ChangeDetectorRef }, { token: i4.PlatformService }, { token: i5.NetworkService }, { token: ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Component });
355
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppInstallUpgradeCard, selector: "app-install-upgrade-card", inputs: { isLogin: "isLogin", showUpgradeWarning: "showUpgradeWarning", showOfflineWarning: "showOfflineWarning", showInstallButton: "showInstallButton" }, ngImport: i0, template: "<!-- Offline mode card-->\n<ion-card\n *ngIf=\"showOfflineWarning && ((!loading && offline) || waitingNetwork)\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text class=\"ion-text-wrap\" *ngIf=\"!waitingNetwork; else waitingNetworkText\">\n <h4>\n <b *ngIf=\"isLogin; else notLogin\" [innerHTML]=\"'NETWORK.INFO.OFFLINE_OR_UNAUTHORIZED' | translate\"></b>\n <ng-template #notLogin>\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE' | translate\"></b>\n </ng-template>\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.OFFLINE_HELP' | translate\"></small>\n </h3>\n </ion-text>\n <ng-template #waitingNetworkText>\n <ion-text class=\"ion-text-wrap\" [innerHTML]=\"'NETWORK.INFO.RETRY_TO_CONNECT' | translate\"></ion-text>\n </ng-template>\n </ion-col>\n <ion-col size=\"auto\">\n <!-- Retry button -->\n <ion-button\n *ngIf=\"!waitingNetwork; else waitingSpinner\"\n color=\"tertiary\"\n class=\"ion-float-end\"\n (click)=\"tryOnline()\"\n >\n <span translate>NETWORK.BTN_CHECK_ALIVE</span>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Upgrade links -->\n<ion-card\n *ngIf=\"showUpgradeWarning && !loading && !offline && upgradeLinks\"\n color=\"accent\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of upgradeLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3>\n <span *ngIf=\"link.version\" [innerHTML]=\"'INFO.UPDATE_APP_TO_VERSION' | translate: link\"></span>\n <span *ngIf=\"!link.version\" [innerHTML]=\"'INFO.UPDATE_APP' | translate: link\"></span>\n </h3>\n <h4>\n <small *ngIf=\"last\" [innerHTML]=\"'INFO.UPDATE_APP_HELP' | translate\"></small>\n </h4>\n </ion-text>\n </ion-col>\n\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Install links -->\n<ion-card\n *ngIf=\"showInstallButton && !loading && !offline && installLinks\"\n color=\"secondary\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of installLinks; last as last\">\n <ion-col size=\"12\" size-sm=\"8\">\n <ion-text class=\"ion-text-wrap\">\n <h3\n [innerHTML]=\"\n 'INFO.DOWNLOAD_APP_TITLE' | translate: { name: link.name, platform: getPlatformName(link.platform) }\n \"\n ></h3>\n <h4><small *ngIf=\"last\" [innerHTML]=\"'INFO.DOWNLOAD_APP_HELP' | translate\"></small></h4>\n </ion-text>\n </ion-col>\n <ion-col size=\"12\" size-sm=\"4\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Display a download button, depending on the link URL, and the device platform -->\n<ng-template #downloadButton let-link>\n @if (link.filename) {\n @if (hasDownloader) {\n <!-- Download using platform -->\n @if (!link.location) {\n <ion-button\n (click)=\"download($event, asLink(link))\"\n [disabled]=\"link.downloading\"\n color=\"tertiary\"\n class=\"ion-float-end\"\n >\n <ion-icon slot=\"start\" *ngIf=\"!link.downloading\" name=\"download\"></ion-icon>\n <ion-spinner slot=\"start\" class=\"ion-no-padding\" *ngIf=\"link.downloading\"></ion-spinner>\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n } @else {\n <!-- Open APK button -->\n <ion-button (click)=\"openFile($event, link)\" color=\"tertiary\" class=\"ion-float-end\">\n <ion-label translate>COMMON.BTN_INSTALL</ion-label>\n </ion-button>\n }\n } @else {\n <!-- Web download button -->\n <ion-button [download]=\"link.filename\" [href]=\"link.url\" color=\"tertiary\" class=\"ion-float-end\">\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n }\n } @else {\n <!-- Web redirect button -->\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n }\n</ng-template>\n\n<!-- Waiting spinner -->\n<ng-template #waitingSpinner>\n <ion-spinner color=\"light\"></ion-spinner>\n</ng-template>\n", styles: ["ion-text small{font-size:85%}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.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: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.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: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], animations: [slideUpDownAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
356
356
  }
357
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppInstallUpgradeCard, decorators: [{
357
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppInstallUpgradeCard, decorators: [{
358
358
  type: Component,
359
359
  args: [{ selector: 'app-install-upgrade-card', changeDetection: ChangeDetectionStrategy.OnPush, animations: [slideUpDownAnimation], template: "<!-- Offline mode card-->\n<ion-card\n *ngIf=\"showOfflineWarning && ((!loading && offline) || waitingNetwork)\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text class=\"ion-text-wrap\" *ngIf=\"!waitingNetwork; else waitingNetworkText\">\n <h4>\n <b *ngIf=\"isLogin; else notLogin\" [innerHTML]=\"'NETWORK.INFO.OFFLINE_OR_UNAUTHORIZED' | translate\"></b>\n <ng-template #notLogin>\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE' | translate\"></b>\n </ng-template>\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.OFFLINE_HELP' | translate\"></small>\n </h3>\n </ion-text>\n <ng-template #waitingNetworkText>\n <ion-text class=\"ion-text-wrap\" [innerHTML]=\"'NETWORK.INFO.RETRY_TO_CONNECT' | translate\"></ion-text>\n </ng-template>\n </ion-col>\n <ion-col size=\"auto\">\n <!-- Retry button -->\n <ion-button\n *ngIf=\"!waitingNetwork; else waitingSpinner\"\n color=\"tertiary\"\n class=\"ion-float-end\"\n (click)=\"tryOnline()\"\n >\n <span translate>NETWORK.BTN_CHECK_ALIVE</span>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Upgrade links -->\n<ion-card\n *ngIf=\"showUpgradeWarning && !loading && !offline && upgradeLinks\"\n color=\"accent\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of upgradeLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3>\n <span *ngIf=\"link.version\" [innerHTML]=\"'INFO.UPDATE_APP_TO_VERSION' | translate: link\"></span>\n <span *ngIf=\"!link.version\" [innerHTML]=\"'INFO.UPDATE_APP' | translate: link\"></span>\n </h3>\n <h4>\n <small *ngIf=\"last\" [innerHTML]=\"'INFO.UPDATE_APP_HELP' | translate\"></small>\n </h4>\n </ion-text>\n </ion-col>\n\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Install links -->\n<ion-card\n *ngIf=\"showInstallButton && !loading && !offline && installLinks\"\n color=\"secondary\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of installLinks; last as last\">\n <ion-col size=\"12\" size-sm=\"8\">\n <ion-text class=\"ion-text-wrap\">\n <h3\n [innerHTML]=\"\n 'INFO.DOWNLOAD_APP_TITLE' | translate: { name: link.name, platform: getPlatformName(link.platform) }\n \"\n ></h3>\n <h4><small *ngIf=\"last\" [innerHTML]=\"'INFO.DOWNLOAD_APP_HELP' | translate\"></small></h4>\n </ion-text>\n </ion-col>\n <ion-col size=\"12\" size-sm=\"4\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Display a download button, depending on the link URL, and the device platform -->\n<ng-template #downloadButton let-link>\n @if (link.filename) {\n @if (hasDownloader) {\n <!-- Download using platform -->\n @if (!link.location) {\n <ion-button\n (click)=\"download($event, asLink(link))\"\n [disabled]=\"link.downloading\"\n color=\"tertiary\"\n class=\"ion-float-end\"\n >\n <ion-icon slot=\"start\" *ngIf=\"!link.downloading\" name=\"download\"></ion-icon>\n <ion-spinner slot=\"start\" class=\"ion-no-padding\" *ngIf=\"link.downloading\"></ion-spinner>\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n } @else {\n <!-- Open APK button -->\n <ion-button (click)=\"openFile($event, link)\" color=\"tertiary\" class=\"ion-float-end\">\n <ion-label translate>COMMON.BTN_INSTALL</ion-label>\n </ion-button>\n }\n } @else {\n <!-- Web download button -->\n <ion-button [download]=\"link.filename\" [href]=\"link.url\" color=\"tertiary\" class=\"ion-float-end\">\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n }\n } @else {\n <!-- Web redirect button -->\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n }\n</ng-template>\n\n<!-- Waiting spinner -->\n<ng-template #waitingSpinner>\n <ion-spinner color=\"light\"></ion-spinner>\n</ng-template>\n", styles: ["ion-text small{font-size:85%}\n"] }]
360
360
  }], ctorParameters: () => [{ type: i1.ConfigService }, { type: i2.ToastController }, { type: i2.AlertController }, { type: i3.TranslateService }, { type: i0.ChangeDetectorRef }, { type: i4.PlatformService }, { type: i5.NetworkService }, { type: i7.Environment, 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 AppInstallUpgradeCardModule {
8
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppInstallUpgradeCardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.11", ngImport: i0, type: AppInstallUpgradeCardModule, declarations: [
8
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppInstallUpgradeCardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AppInstallUpgradeCardModule, declarations: [
10
10
  // Components
11
11
  AppInstallUpgradeCard], imports: [SharedModule, i1.TranslateModule], exports: [TranslateModule,
12
12
  // Components
13
13
  AppInstallUpgradeCard] });
14
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppInstallUpgradeCardModule, imports: [SharedModule, TranslateModule.forChild(), TranslateModule] });
14
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppInstallUpgradeCardModule, imports: [SharedModule, TranslateModule.forChild(), TranslateModule] });
15
15
  }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppInstallUpgradeCardModule, decorators: [{
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppInstallUpgradeCardModule, decorators: [{
17
17
  type: NgModule,
18
18
  args: [{
19
19
  imports: [SharedModule, TranslateModule.forChild()],