@sumaris-net/ngx-components 1.23.54 → 2.0.0-rc10

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 (738) hide show
  1. package/doc/build.md +2 -2
  2. package/doc/changelog.md +8 -0
  3. package/esm2020/public_api.mjs +277 -0
  4. package/esm2020/src/app/admin/admin-routing.module.mjs +41 -0
  5. package/esm2020/src/app/admin/admin.module.mjs +34 -0
  6. package/esm2020/src/app/admin/services/filter/person.filter.mjs +59 -0
  7. package/esm2020/src/app/admin/services/person.service.mjs +161 -0
  8. package/esm2020/src/app/admin/services/validator/person.validator.mjs +34 -0
  9. package/esm2020/src/app/admin/users/list/users.mjs +233 -0
  10. package/esm2020/src/app/admin/users/list/users.module.mjs +58 -0
  11. package/esm2020/src/app/core/about/modal-about.mjs +71 -0
  12. package/esm2020/src/app/core/account/account.mjs +230 -0
  13. package/esm2020/src/app/core/auth/form/form-auth.mjs +131 -0
  14. package/esm2020/src/app/core/auth/modal/modal-auth.mjs +72 -0
  15. package/esm2020/src/app/core/core.module.mjs +223 -0
  16. package/esm2020/src/app/core/core.testing.module.mjs +86 -0
  17. package/esm2020/src/app/core/form/editor.class.mjs +675 -0
  18. package/esm2020/src/app/core/form/entity-editor-modal.class.mjs +421 -0
  19. package/esm2020/src/app/core/form/entity-editor.class.mjs +646 -0
  20. package/esm2020/src/app/core/form/entity-metadata.component.mjs +25 -0
  21. package/esm2020/src/app/core/form/form-buttons-bar.component.mjs +71 -0
  22. package/esm2020/src/app/core/form/form.class.mjs +340 -0
  23. package/esm2020/src/app/core/form/form.utils.mjs +299 -0
  24. package/esm2020/src/app/core/form/list.form.mjs +222 -0
  25. package/esm2020/src/app/core/form/properties/properties.form.mjs +129 -0
  26. package/esm2020/src/app/core/form/properties/property.validator.mjs +23 -0
  27. package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +90 -0
  28. package/esm2020/src/app/core/form/properties/testing/properties-form.testing.module.mjs +39 -0
  29. package/esm2020/src/app/core/graphql/graphql.module.mjs +22 -0
  30. package/esm2020/src/app/core/graphql/graphql.service.mjs +730 -0
  31. package/esm2020/src/app/core/graphql/graphql.utils.mjs +117 -0
  32. package/esm2020/src/app/core/home/home.mjs +257 -0
  33. package/esm2020/src/app/core/icon/icon.component.mjs +41 -0
  34. package/esm2020/src/app/core/icon/icon.module.mjs +29 -0
  35. package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +337 -0
  36. package/esm2020/src/app/core/install/install-upgrade-card.module.mjs +33 -0
  37. package/esm2020/src/app/core/menu/menu.component.mjs +317 -0
  38. package/{esm2015/src/app/core/menu/menu.model.js → esm2020/src/app/core/menu/menu.model.mjs} +0 -0
  39. package/esm2020/src/app/core/menu/menu.module.mjs +45 -0
  40. package/{esm2015/src/app/core/menu/menu.service.js → esm2020/src/app/core/menu/menu.service.mjs} +9 -7
  41. package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +27 -0
  42. package/esm2020/src/app/core/peer/select-peer.modal.mjs +130 -0
  43. package/esm2020/src/app/core/peer/select-peer.module.mjs +35 -0
  44. package/esm2020/src/app/core/register/confirm/confirm.mjs +81 -0
  45. package/esm2020/src/app/core/register/form/form-register.mjs +181 -0
  46. package/esm2020/src/app/core/register/modal/modal-register.mjs +52 -0
  47. package/esm2020/src/app/core/register/register.module.mjs +42 -0
  48. package/esm2020/src/app/core/services/account.service.mjs +1112 -0
  49. package/esm2020/src/app/core/services/auth-guard.service.mjs +71 -0
  50. package/esm2020/src/app/core/services/base-entity-service.class.mjs +432 -0
  51. package/esm2020/src/app/core/services/base-graphql-service.class.mjs +219 -0
  52. package/{esm2015/src/app/core/services/base58.js → esm2020/src/app/core/services/base58.mjs} +0 -0
  53. package/{esm2015/src/app/core/services/config/core.config.js → esm2020/src/app/core/services/config/core.config.mjs} +0 -0
  54. package/esm2020/src/app/core/services/config.service.mjs +354 -0
  55. package/{esm2015/src/app/core/services/crypto.service.js → esm2020/src/app/core/services/crypto.service.mjs} +7 -5
  56. package/{esm2015/src/app/core/services/errors.js → esm2020/src/app/core/services/errors.mjs} +0 -0
  57. package/esm2020/src/app/core/services/local-settings.service.mjs +442 -0
  58. package/esm2020/src/app/core/services/model/account.model.mjs +50 -0
  59. package/esm2020/src/app/core/services/model/config.model.mjs +89 -0
  60. package/esm2020/src/app/core/services/model/department.model.mjs +30 -0
  61. package/esm2020/src/app/core/services/model/entity.decorators.mjs +107 -0
  62. package/esm2020/src/app/core/services/model/entity.model.mjs +242 -0
  63. package/{esm2015/src/app/core/services/model/filter.model.js → esm2020/src/app/core/services/model/filter.model.mjs} +0 -0
  64. package/{esm2015/src/app/core/services/model/history.model.js → esm2020/src/app/core/services/model/history.model.mjs} +0 -0
  65. package/{esm2015/src/app/core/services/model/model.enum.js → esm2020/src/app/core/services/model/model.enum.mjs} +0 -0
  66. package/esm2020/src/app/core/services/model/peer.model.mjs +68 -0
  67. package/esm2020/src/app/core/services/model/person.model.mjs +83 -0
  68. package/esm2020/src/app/core/services/model/referential.model.mjs +153 -0
  69. package/esm2020/src/app/core/services/model/settings.model.mjs +75 -0
  70. package/esm2020/src/app/core/services/network.service.mjs +595 -0
  71. package/esm2020/src/app/core/services/network.utils.mjs +16 -0
  72. package/esm2020/src/app/core/services/pipes/account.pipes.mjs +38 -0
  73. package/esm2020/src/app/core/services/pipes/department-to-string.pipe.mjs +23 -0
  74. package/esm2020/src/app/core/services/pipes/person-to-string.pipe.mjs +23 -0
  75. package/esm2020/src/app/core/services/pipes/usage-mode.pipes.mjs +37 -0
  76. package/esm2020/src/app/core/services/platform.service.mjs +476 -0
  77. package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +422 -0
  78. package/esm2020/src/app/core/services/storage/entity-store.class.mjs +449 -0
  79. package/esm2020/src/app/core/services/testing/referential-filter.model.mjs +23 -0
  80. package/esm2020/src/app/core/services/testing/referential.validator.mjs +45 -0
  81. package/esm2020/src/app/core/services/validator/account.validator.mjs +52 -0
  82. package/esm2020/src/app/core/services/validator/base.validator.class.mjs +47 -0
  83. package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +66 -0
  84. package/esm2020/src/app/core/services/validator/user-settings.validator.mjs +29 -0
  85. package/esm2020/src/app/core/settings/settings.page.mjs +290 -0
  86. package/esm2020/src/app/core/table/actions-column.component.mjs +96 -0
  87. package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +394 -0
  88. package/esm2020/src/app/core/table/memory-table.class.mjs +53 -0
  89. package/esm2020/src/app/core/table/table-select-columns.component.mjs +43 -0
  90. package/esm2020/src/app/core/table/table.class.mjs +1669 -0
  91. package/esm2020/src/app/core/table/table.utils.mjs +13 -0
  92. package/esm2020/src/app/core/table/testing/table.testing.mjs +264 -0
  93. package/esm2020/src/app/core/table/testing/table.testing.module.mjs +38 -0
  94. package/esm2020/src/app/core/text-popover/testing/text-popover.testing.mjs +37 -0
  95. package/esm2020/src/app/core/text-popover/testing/text-popover.testing.module.mjs +45 -0
  96. package/esm2020/src/app/core/text-popover/text-form.component.mjs +84 -0
  97. package/esm2020/src/app/core/text-popover/text-popover.component.mjs +92 -0
  98. package/esm2020/src/app/shared/alerts.mjs +238 -0
  99. package/esm2020/src/app/shared/audio/audio.mjs +201 -0
  100. package/esm2020/src/app/shared/audio/audio.testing.mjs +31 -0
  101. package/esm2020/src/app/shared/audio/audio.testing.module.mjs +45 -0
  102. package/esm2020/src/app/shared/capacitor/keyboard.mjs +40 -0
  103. package/esm2020/src/app/shared/capacitor/plugins.mjs +9 -0
  104. package/{esm2015/src/app/shared/constants.js → esm2020/src/app/shared/constants.mjs} +2 -1
  105. package/esm2020/src/app/shared/dates.mjs +134 -0
  106. package/esm2020/src/app/shared/debug/debug.component.mjs +39 -0
  107. package/esm2020/src/app/shared/debug/debug.module.mjs +44 -0
  108. package/esm2020/src/app/shared/directives/autofocus.directive.mjs +92 -0
  109. package/esm2020/src/app/shared/directives/autotitle.directive.mjs +30 -0
  110. package/esm2020/src/app/shared/directives/directives.module.mjs +43 -0
  111. package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +53 -0
  112. package/esm2020/src/app/shared/directives/ng-var.directive.mjs +31 -0
  113. package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +59 -0
  114. package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +40 -0
  115. package/esm2020/src/app/shared/directives/resizable/resizable.module.mjs +17 -0
  116. package/esm2020/src/app/shared/events.mjs +64 -0
  117. package/esm2020/src/app/shared/file/csv.utils.mjs +74 -0
  118. package/esm2020/src/app/shared/file/file.service.mjs +117 -0
  119. package/esm2020/src/app/shared/file/file.utils.mjs +113 -0
  120. package/esm2020/src/app/shared/file/images.utils.mjs +161 -0
  121. package/{esm2015/src/app/shared/file/uri.utils.js → esm2020/src/app/shared/file/uri.utils.mjs} +0 -0
  122. package/{esm2015/src/app/shared/focusable.js → esm2020/src/app/shared/focusable.mjs} +0 -0
  123. package/esm2020/src/app/shared/form/field.component.mjs +244 -0
  124. package/{esm2015/src/app/shared/form/field.model.js → esm2020/src/app/shared/form/field.model.mjs} +1 -1
  125. package/esm2020/src/app/shared/form/loading-spinner.mjs +36 -0
  126. package/esm2020/src/app/shared/forms.mjs +374 -0
  127. package/esm2020/src/app/shared/functions.mjs +430 -0
  128. package/{esm2015/src/app/shared/gesture/gesture-config.js → esm2020/src/app/shared/gesture/gesture-config.mjs} +7 -5
  129. package/esm2020/src/app/shared/gesture/hammer.utils.mjs +2 -0
  130. package/{esm2015/src/app/shared/graph/colors.utils.js → esm2020/src/app/shared/graph/colors.utils.mjs} +0 -0
  131. package/{esm2015/src/app/shared/graph/graph-colors.js → esm2020/src/app/shared/graph/graph-colors.mjs} +0 -0
  132. package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +57 -0
  133. package/esm2020/src/app/shared/help/help.modal.mjs +53 -0
  134. package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +23 -0
  135. package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +84 -0
  136. package/esm2020/src/app/shared/hotkeys/shared-hotkeys.module.mjs +42 -0
  137. package/esm2020/src/app/shared/http/http.utils.mjs +52 -0
  138. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +279 -0
  139. package/esm2020/src/app/shared/image/gallery/image-gallery.module.mjs +46 -0
  140. package/esm2020/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +27 -0
  141. package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +89 -0
  142. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +33 -0
  143. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +56 -0
  144. package/esm2020/src/app/shared/image/image.model.mjs +2 -0
  145. package/esm2020/src/app/shared/image/image.module.mjs +29 -0
  146. package/esm2020/src/app/shared/image/image.service.mjs +99 -0
  147. package/{esm2015/src/app/shared/inputs.js → esm2020/src/app/shared/inputs.mjs} +4 -4
  148. package/{esm2015/src/app/shared/interceptors/progess.interceptor.js → esm2020/src/app/shared/interceptors/progess.interceptor.mjs} +0 -0
  149. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +47 -0
  150. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +834 -0
  151. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +78 -0
  152. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +19 -0
  153. package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +205 -0
  154. package/esm2020/src/app/shared/material/badge/badge.directive.mjs +176 -0
  155. package/esm2020/src/app/shared/material/badge/badge.module.mjs +32 -0
  156. package/esm2020/src/app/shared/material/badge/badge.test.mjs +28 -0
  157. package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +68 -0
  158. package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +253 -0
  159. package/esm2020/src/app/shared/material/chips/chips.module.mjs +76 -0
  160. package/esm2020/src/app/shared/material/chips/material.chips.mjs +690 -0
  161. package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +136 -0
  162. package/esm2020/src/app/shared/material/datetime/datetime.module.mjs +91 -0
  163. package/esm2020/src/app/shared/material/datetime/material.date.mjs +388 -0
  164. package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +327 -0
  165. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +434 -0
  166. package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +110 -0
  167. package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +111 -0
  168. package/esm2020/src/app/shared/material/duration/duration.module.mjs +67 -0
  169. package/{esm2015/src/app/shared/material/duration/duration.utils.js → esm2020/src/app/shared/material/duration/duration.utils.mjs} +0 -0
  170. package/esm2020/src/app/shared/material/duration/material.duration.mjs +257 -0
  171. package/esm2020/src/app/shared/material/latlong/latlong.utils.mjs +266 -0
  172. package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +381 -0
  173. package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +67 -0
  174. package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +74 -0
  175. package/{esm2015/src/app/shared/material/material.animations.js → esm2020/src/app/shared/material/material.animations.mjs} +0 -0
  176. package/esm2020/src/app/shared/material/material.module.mjs +224 -0
  177. package/esm2020/src/app/shared/material/material.testing.module.mjs +157 -0
  178. package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +98 -0
  179. package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +80 -0
  180. package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +190 -0
  181. package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +17 -0
  182. package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +162 -0
  183. package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +37 -0
  184. package/{esm2015/src/app/shared/material/numpad/numpad.model.js → esm2020/src/app/shared/material/numpad/numpad.model.mjs} +1 -1
  185. package/esm2020/src/app/shared/material/numpad/numpad.module.mjs +60 -0
  186. package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +46 -0
  187. package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +42 -0
  188. package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +22 -0
  189. package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +334 -0
  190. package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +51 -0
  191. package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +65 -0
  192. package/esm2020/src/app/shared/observables.mjs +103 -0
  193. package/esm2020/src/app/shared/pipes/arrays.pipe.mjs +135 -0
  194. package/esm2020/src/app/shared/pipes/colors.pipe.mjs +23 -0
  195. package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +49 -0
  196. package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +42 -0
  197. package/{esm2015/src/app/shared/pipes/date-from-now.pipe.js → esm2020/src/app/shared/pipes/date-from-now.pipe.mjs} +13 -12
  198. package/{esm2015/src/app/shared/pipes/duration.pipe.js → esm2020/src/app/shared/pipes/duration.pipe.mjs} +13 -12
  199. package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +62 -0
  200. package/esm2020/src/app/shared/pipes/form.pipes.mjs +187 -0
  201. package/esm2020/src/app/shared/pipes/highlight.pipe.mjs +48 -0
  202. package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +46 -0
  203. package/esm2020/src/app/shared/pipes/maps.pipe.mjs +63 -0
  204. package/esm2020/src/app/shared/pipes/math.pipes.mjs +59 -0
  205. package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +21 -0
  206. package/{esm2015/src/app/shared/pipes/number-format.pipe.js → esm2020/src/app/shared/pipes/number-format.pipe.mjs} +14 -9
  207. package/esm2020/src/app/shared/pipes/pipes.module.mjs +210 -0
  208. package/esm2020/src/app/shared/pipes/property.pipes.mjs +96 -0
  209. package/esm2020/src/app/shared/pipes/string.pipes.mjs +69 -0
  210. package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +43 -0
  211. package/esm2020/src/app/shared/platforms.mjs +49 -0
  212. package/esm2020/src/app/shared/services/entity-service.class.mjs +7 -0
  213. package/esm2020/src/app/shared/services/job.utils.mjs +92 -0
  214. package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +337 -0
  215. package/esm2020/src/app/shared/services/progress-bar.service.mjs +32 -0
  216. package/esm2020/src/app/shared/services/startable-observable-service.class.mjs +119 -0
  217. package/esm2020/src/app/shared/services/startable-service.class.mjs +105 -0
  218. package/esm2020/src/app/shared/services/storage/storage.service.mjs +132 -0
  219. package/esm2020/src/app/shared/services/storage/storage.utils.mjs +13 -0
  220. package/esm2020/src/app/shared/services/translate-context.service.mjs +81 -0
  221. package/esm2020/src/app/shared/services/validator-service.class.mjs +2 -0
  222. package/esm2020/src/app/shared/services.mjs +62 -0
  223. package/esm2020/src/app/shared/shared-routing.module.mjs +63 -0
  224. package/esm2020/src/app/shared/shared.module.mjs +208 -0
  225. package/esm2020/src/app/shared/shared.testing.module.mjs +76 -0
  226. package/esm2020/src/app/shared/testing/observable.test.mjs +96 -0
  227. package/esm2020/src/app/shared/testing/tests.page.mjs +33 -0
  228. package/esm2020/src/app/shared/toast/toast.testing.mjs +51 -0
  229. package/esm2020/src/app/shared/toast/toast.testing.module.mjs +45 -0
  230. package/esm2020/src/app/shared/toast/toasts.mjs +144 -0
  231. package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +58 -0
  232. package/esm2020/src/app/shared/toolbar/toolbar.mjs +226 -0
  233. package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +53 -0
  234. package/{esm2015/src/app/shared/types.js → esm2020/src/app/shared/types.mjs} +0 -0
  235. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +57 -0
  236. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +45 -0
  237. package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +97 -0
  238. package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +204 -0
  239. package/esm2020/src/app/shared/upload-file/upload-file.model.mjs +20 -0
  240. package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +104 -0
  241. package/esm2020/src/app/shared/validator/validators.mjs +544 -0
  242. package/{esm2015/src/app/shared/version/versions.js → esm2020/src/app/shared/version/versions.mjs} +0 -0
  243. package/esm2020/src/app/social/job/job.model.mjs +26 -0
  244. package/esm2020/src/app/social/job/job.module.mjs +35 -0
  245. package/esm2020/src/app/social/job/job.service.mjs +71 -0
  246. package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +210 -0
  247. package/esm2020/src/app/social/job/progression/job-progression.list.mjs +22 -0
  248. package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +53 -0
  249. package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +55 -0
  250. package/esm2020/src/app/social/job/testing/job.testing.module.mjs +35 -0
  251. package/esm2020/src/app/social/message/message.form.mjs +81 -0
  252. package/esm2020/src/app/social/message/message.modal.mjs +93 -0
  253. package/esm2020/src/app/social/message/message.model.mjs +65 -0
  254. package/esm2020/src/app/social/message/message.module.mjs +35 -0
  255. package/esm2020/src/app/social/message/message.service.mjs +84 -0
  256. package/{esm2015/src/app/social/social.errors.js → esm2020/src/app/social/social.errors.mjs} +0 -0
  257. package/esm2020/src/app/social/social.module.mjs +47 -0
  258. package/esm2020/src/app/social/social.testing.module.mjs +51 -0
  259. package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +108 -0
  260. package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +212 -0
  261. package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +228 -0
  262. package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +107 -0
  263. package/esm2020/src/app/social/user-event/testing/user-event.testing.module.mjs +35 -0
  264. package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +111 -0
  265. package/esm2020/src/app/social/user-event/user-event.model.mjs +2 -0
  266. package/esm2020/src/app/social/user-event/user-event.module.mjs +39 -0
  267. package/esm2020/src/app/social/user-event/user-event.service.mjs +486 -0
  268. package/{esm2015/src/app/vendor.js → esm2020/src/app/vendor.mjs} +3 -3
  269. package/esm2020/src/environments/environment.class.mjs +5 -0
  270. package/esm2020/src/environments/environment.mjs +86 -0
  271. package/esm2020/sumaris-net.ngx-components.mjs +5 -0
  272. package/fesm2015/sumaris-net.ngx-components.mjs +33165 -0
  273. package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -0
  274. package/fesm2020/sumaris-net.ngx-components.mjs +32458 -0
  275. package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -0
  276. package/index.d.ts +5 -0
  277. package/package.json +30 -32
  278. package/public_api.d.ts +40 -6
  279. package/resources/README.md +8 -0
  280. package/src/app/admin/admin-routing.module.d.ts +7 -0
  281. package/src/app/admin/admin.module.d.ts +7 -0
  282. package/src/app/admin/services/person.service.d.ts +3 -0
  283. package/src/app/admin/services/validator/person.validator.d.ts +8 -5
  284. package/src/app/admin/users/list/users.d.ts +10 -7
  285. package/src/app/admin/users/list/users.module.d.ts +14 -0
  286. package/src/app/core/about/modal-about.d.ts +3 -0
  287. package/src/app/core/account/account.d.ts +11 -8
  288. package/src/app/core/auth/form/form-auth.d.ts +6 -3
  289. package/src/app/core/auth/modal/modal-auth.d.ts +3 -0
  290. package/src/app/core/core.module.d.ts +36 -0
  291. package/src/app/core/core.testing.module.d.ts +10 -0
  292. package/src/app/core/form/editor.class.d.ts +7 -2
  293. package/src/app/core/form/entity-editor-modal.class.d.ts +9 -6
  294. package/src/app/core/form/entity-editor.class.d.ts +4 -1
  295. package/src/app/core/form/entity-metadata.component.d.ts +3 -0
  296. package/src/app/core/form/form-buttons-bar.component.d.ts +3 -0
  297. package/src/app/core/form/form.class.d.ts +12 -9
  298. package/src/app/core/form/form.utils.d.ts +6 -6
  299. package/src/app/core/form/list.form.d.ts +11 -8
  300. package/src/app/core/form/properties/properties.form.d.ts +43 -0
  301. package/src/app/core/form/properties/property.validator.d.ts +13 -0
  302. package/src/app/core/form/properties/testing/properties-form.test.d.ts +19 -0
  303. package/src/app/core/form/properties/testing/properties-form.testing.module.d.ts +12 -0
  304. package/src/app/core/graphql/graphql.module.d.ts +5 -0
  305. package/src/app/core/graphql/graphql.service.d.ts +9 -2
  306. package/src/app/core/graphql/graphql.utils.d.ts +8 -0
  307. package/src/app/core/home/home.d.ts +4 -1
  308. package/src/app/core/icon/icon.component.d.ts +5 -2
  309. package/src/app/core/icon/icon.module.d.ts +7 -0
  310. package/src/app/core/install/install-upgrade-card.component.d.ts +5 -2
  311. package/src/app/core/install/install-upgrade-card.module.d.ts +10 -0
  312. package/src/app/core/menu/menu.component.d.ts +7 -5
  313. package/src/app/core/menu/menu.module.d.ts +8 -0
  314. package/src/app/core/menu/menu.service.d.ts +3 -0
  315. package/src/app/core/offline/update-offline-mode-card.component.d.ts +4 -1
  316. package/src/app/core/peer/select-peer.modal.d.ts +8 -5
  317. package/src/app/core/peer/select-peer.module.d.ts +9 -0
  318. package/src/app/core/register/confirm/confirm.d.ts +3 -0
  319. package/src/app/core/register/form/form-register.d.ts +10 -7
  320. package/src/app/core/register/modal/modal-register.d.ts +3 -0
  321. package/src/app/core/register/register.module.d.ts +12 -0
  322. package/src/app/core/services/account.service.d.ts +5 -2
  323. package/src/app/core/services/auth-guard.service.d.ts +3 -0
  324. package/src/app/core/services/base-entity-service.class.d.ts +3 -0
  325. package/src/app/core/services/base-graphql-service.class.d.ts +3 -0
  326. package/src/app/core/services/config.service.d.ts +4 -1
  327. package/src/app/core/services/crypto.service.d.ts +3 -0
  328. package/src/app/core/services/local-settings.service.d.ts +5 -1
  329. package/src/app/core/services/network.service.d.ts +6 -5
  330. package/src/app/core/services/pipes/account.pipes.d.ts +7 -0
  331. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +4 -0
  332. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +4 -0
  333. package/src/app/core/services/pipes/usage-mode.pipes.d.ts +7 -0
  334. package/src/app/core/services/platform.service.d.ts +22 -21
  335. package/src/app/core/services/storage/entities-storage.service.d.ts +5 -2
  336. package/src/app/core/services/storage/entity-store.class.d.ts +3 -3
  337. package/src/app/core/services/testing/referential.validator.d.ts +8 -5
  338. package/src/app/core/services/validator/account.validator.d.ts +6 -3
  339. package/src/app/core/services/validator/base.validator.class.d.ts +8 -5
  340. package/src/app/core/services/validator/local-settings.validator.d.ts +8 -5
  341. package/src/app/core/services/validator/user-settings.validator.d.ts +6 -3
  342. package/src/app/core/settings/settings.page.d.ts +8 -5
  343. package/src/app/core/table/actions-column.component.d.ts +4 -1
  344. package/src/app/core/table/entities-table-datasource.class.d.ts +16 -15
  345. package/src/app/core/table/memory-table.class.d.ts +3 -0
  346. package/src/app/core/table/table-select-columns.component.d.ts +4 -5
  347. package/src/app/core/table/table.class.d.ts +17 -13
  348. package/src/app/core/table/table.utils.d.ts +2 -1
  349. package/src/app/core/table/testing/table.testing.d.ts +14 -16
  350. package/src/app/core/table/testing/table.testing.module.d.ts +9 -0
  351. package/src/app/core/text-popover/testing/text-popover.testing.d.ts +4 -1
  352. package/src/app/core/text-popover/testing/text-popover.testing.module.d.ts +9 -0
  353. package/src/app/core/text-popover/text-form.component.d.ts +7 -4
  354. package/src/app/core/text-popover/text-popover.component.d.ts +3 -0
  355. package/src/app/shared/alerts.d.ts +4 -4
  356. package/src/app/shared/audio/audio.d.ts +20 -11
  357. package/src/app/shared/audio/audio.testing.d.ts +13 -0
  358. package/src/app/shared/audio/audio.testing.module.d.ts +11 -0
  359. package/src/app/shared/capacitor/keyboard.d.ts +16 -0
  360. package/src/app/shared/capacitor/plugins.d.ts +7 -0
  361. package/src/app/shared/constants.d.ts +1 -0
  362. package/src/app/shared/debug/debug.component.d.ts +13 -0
  363. package/src/app/shared/debug/debug.module.d.ts +12 -0
  364. package/src/app/shared/directives/autofocus.directive.d.ts +9 -7
  365. package/src/app/shared/directives/autotitle.directive.d.ts +3 -0
  366. package/src/app/shared/directives/directives.module.d.ts +10 -0
  367. package/src/app/shared/directives/drag-and-drop.directive.d.ts +3 -0
  368. package/src/app/shared/directives/ng-var.directive.d.ts +3 -0
  369. package/src/app/shared/directives/resizable/resizable.component.d.ts +3 -0
  370. package/src/app/shared/directives/resizable/resizable.directive.d.ts +3 -0
  371. package/src/app/shared/directives/resizable/resizable.module.d.ts +6 -0
  372. package/src/app/shared/file/file.service.d.ts +3 -0
  373. package/src/app/shared/file/file.utils.d.ts +1 -1
  374. package/src/app/shared/form/field.component.d.ts +12 -3
  375. package/src/app/shared/form/field.model.d.ts +2 -2
  376. package/src/app/shared/form/loading-spinner.d.ts +3 -0
  377. package/src/app/shared/forms.d.ts +13 -13
  378. package/src/app/shared/gesture/gesture-config.d.ts +3 -0
  379. package/src/app/shared/gesture/hammer.utils.d.ts +11 -11
  380. package/src/app/shared/guard/component-dirty.guard.d.ts +3 -0
  381. package/src/app/shared/help/help.modal.d.ts +4 -1
  382. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +3 -0
  383. package/src/app/shared/hotkeys/hotkeys.service.d.ts +4 -1
  384. package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +9 -0
  385. package/src/app/shared/image/gallery/image-gallery.component.d.ts +77 -0
  386. package/src/app/shared/image/gallery/image-gallery.module.d.ts +12 -0
  387. package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +12 -0
  388. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +33 -0
  389. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +15 -0
  390. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +12 -0
  391. package/src/app/shared/image/image.model.d.ts +5 -0
  392. package/src/app/shared/image/image.module.d.ts +8 -0
  393. package/src/app/shared/image/image.service.d.ts +32 -0
  394. package/src/app/shared/inputs.d.ts +3 -3
  395. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +36 -0
  396. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +11 -40
  397. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +19 -0
  398. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +4 -0
  399. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +12 -9
  400. package/src/app/shared/material/badge/badge.directive.d.ts +30 -0
  401. package/src/app/shared/material/badge/badge.module.d.ts +10 -0
  402. package/src/app/shared/material/badge/badge.test.d.ts +13 -0
  403. package/src/app/shared/material/boolean/boolean.module.d.ts +17 -0
  404. package/src/app/shared/material/boolean/material.boolean.d.ts +7 -4
  405. package/src/app/shared/material/chips/chips.module.d.ts +19 -0
  406. package/src/app/shared/material/chips/material.chips.d.ts +11 -8
  407. package/src/app/shared/material/chips/testing/chips.test.d.ts +8 -5
  408. package/src/app/shared/material/datetime/datetime.module.d.ts +22 -0
  409. package/src/app/shared/material/datetime/material.date.d.ts +19 -18
  410. package/src/app/shared/material/datetime/material.dateshort.d.ts +10 -9
  411. package/src/app/shared/material/datetime/material.datetime.d.ts +21 -20
  412. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +11 -9
  413. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +11 -9
  414. package/src/app/shared/material/duration/duration.module.d.ts +16 -0
  415. package/src/app/shared/material/duration/material.duration.d.ts +8 -5
  416. package/src/app/shared/material/latlong/material.latlong.d.ts +8 -5
  417. package/src/app/shared/material/latlong/material.latlong.module.d.ts +17 -0
  418. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +10 -7
  419. package/src/app/shared/material/material.module.d.ts +43 -0
  420. package/src/app/shared/material/material.testing.module.d.ts +20 -0
  421. package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +3 -0
  422. package/src/app/shared/material/numpad/numpad.component.d.ts +4 -1
  423. package/src/app/shared/material/numpad/numpad.container.d.ts +5 -2
  424. package/src/app/shared/material/numpad/numpad.content.d.ts +3 -0
  425. package/src/app/shared/material/numpad/numpad.directive.d.ts +4 -1
  426. package/src/app/shared/material/numpad/numpad.dom-service.d.ts +3 -0
  427. package/src/app/shared/material/numpad/numpad.model.d.ts +1 -1
  428. package/src/app/shared/material/numpad/numpad.module.d.ts +14 -0
  429. package/src/app/shared/material/numpad/testing/numpad.test.d.ts +7 -4
  430. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +3 -0
  431. package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +3 -0
  432. package/src/app/shared/material/swipe/material.swipe.d.ts +6 -3
  433. package/src/app/shared/material/swipe/swipe.module.d.ts +13 -0
  434. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +7 -4
  435. package/src/app/shared/pipes/arrays.pipe.d.ts +17 -0
  436. package/src/app/shared/pipes/colors.pipe.d.ts +9 -0
  437. package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +4 -0
  438. package/src/app/shared/pipes/date-format.pipe.d.ts +4 -0
  439. package/src/app/shared/pipes/date-from-now.pipe.d.ts +4 -0
  440. package/src/app/shared/pipes/duration.pipe.d.ts +4 -0
  441. package/src/app/shared/pipes/file-size.pipe.d.ts +3 -0
  442. package/src/app/shared/pipes/form.pipes.d.ts +18 -5
  443. package/src/app/shared/pipes/highlight.pipe.d.ts +4 -0
  444. package/src/app/shared/pipes/latlong-format.pipe.d.ts +7 -0
  445. package/src/app/shared/pipes/maps.pipe.d.ts +10 -0
  446. package/src/app/shared/pipes/math.pipes.d.ts +10 -0
  447. package/src/app/shared/pipes/ng-init.pipe.d.ts +3 -0
  448. package/src/app/shared/pipes/number-format.pipe.d.ts +4 -0
  449. package/src/app/shared/pipes/pipes.module.d.ts +24 -0
  450. package/src/app/shared/pipes/property.pipes.d.ts +6 -0
  451. package/src/app/shared/pipes/string.pipes.d.ts +11 -0
  452. package/src/app/shared/pipes/translate-context.pipe.d.ts +7 -0
  453. package/src/app/shared/platforms.d.ts +1 -0
  454. package/src/app/shared/services/memory-entity-service.class.d.ts +3 -0
  455. package/src/app/shared/services/progress-bar.service.d.ts +4 -1
  456. package/src/app/shared/services/startable-observable-service.class.d.ts +1 -1
  457. package/src/app/shared/services/startable-service.class.d.ts +1 -1
  458. package/src/app/shared/services/storage/storage.service.d.ts +23 -0
  459. package/src/app/shared/services/storage/storage.utils.d.ts +19 -0
  460. package/src/app/shared/services/translate-context.service.d.ts +3 -0
  461. package/src/app/shared/services/validator-service.class.d.ts +2 -2
  462. package/src/app/shared/shared-routing.module.d.ts +7 -0
  463. package/src/app/shared/shared.module.d.ts +23 -0
  464. package/src/app/shared/shared.testing.module.d.ts +12 -0
  465. package/src/app/shared/testing/observable.test.d.ts +3 -0
  466. package/src/app/shared/testing/tests.page.d.ts +3 -0
  467. package/src/app/shared/toast/toast.testing.d.ts +6 -5
  468. package/src/app/shared/toast/toast.testing.module.d.ts +9 -0
  469. package/src/app/shared/toast/toasts.d.ts +5 -2
  470. package/src/app/shared/toolbar/modal-toolbar.d.ts +5 -2
  471. package/src/app/shared/toolbar/toolbar.d.ts +9 -5
  472. package/src/app/shared/toolbar/toolbar.module.d.ts +15 -0
  473. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +4 -1
  474. package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +9 -0
  475. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +3 -0
  476. package/src/app/shared/upload-file/upload-file.component.d.ts +3 -0
  477. package/src/app/shared/validator/form-error-adapter.class.d.ts +3 -0
  478. package/src/app/shared/validator/validators.d.ts +9 -9
  479. package/src/app/social/job/job.module.d.ts +9 -0
  480. package/src/app/social/job/job.service.d.ts +3 -0
  481. package/src/app/social/job/progression/job-progression.icon.d.ts +4 -1
  482. package/src/app/social/job/progression/job-progression.list.d.ts +3 -0
  483. package/src/app/social/job/testing/job-progression.testing.d.ts +3 -0
  484. package/src/app/social/job/testing/job-progression.testing.service.d.ts +3 -0
  485. package/src/app/social/job/testing/job.testing.module.d.ts +9 -0
  486. package/src/app/social/message/message.form.d.ts +5 -2
  487. package/src/app/social/message/message.modal.d.ts +5 -2
  488. package/src/app/social/message/message.module.d.ts +9 -0
  489. package/src/app/social/message/message.service.d.ts +3 -0
  490. package/src/app/social/social.module.d.ts +10 -0
  491. package/src/app/social/social.testing.module.d.ts +9 -0
  492. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +4 -1
  493. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +7 -4
  494. package/src/app/social/user-event/testing/user-event.testing.d.ts +3 -0
  495. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +1 -0
  496. package/src/app/social/user-event/testing/user-event.testing.module.d.ts +9 -0
  497. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +5 -1
  498. package/src/app/social/user-event/user-event.model.d.ts +3 -2
  499. package/src/app/social/user-event/user-event.module.d.ts +10 -0
  500. package/src/app/social/user-event/user-event.service.d.ts +16 -11
  501. package/src/assets/audio/beep-notification.mp3 +0 -0
  502. package/src/assets/i18n/fr.json +9 -2
  503. package/src/environments/environment.class.d.ts +2 -0
  504. package/src/environments/environment.d.ts +1 -1
  505. package/src/theme/_icons.scss +1 -1
  506. package/src/theme/_ionic.globals.scss +4 -0
  507. package/src/theme/_material.globals.scss +32 -32
  508. package/src/theme/_material.scss +32 -6
  509. package/src/theme/_mixins.scss +4 -4
  510. package/src/theme/_ngx-components.scss +27 -0
  511. package/src/theme/_print.scss +24 -0
  512. package/bundles/sumaris-net.ngx-components.umd.js +0 -35963
  513. package/bundles/sumaris-net.ngx-components.umd.js.map +0 -1
  514. package/bundles/sumaris-net.ngx-components.umd.min.js +0 -25
  515. package/bundles/sumaris-net.ngx-components.umd.min.js.map +0 -1
  516. package/esm2015/public_api.js +0 -245
  517. package/esm2015/src/app/admin/admin-routing.module.js +0 -34
  518. package/esm2015/src/app/admin/admin.module.js +0 -34
  519. package/esm2015/src/app/admin/services/filter/person.filter.js +0 -59
  520. package/esm2015/src/app/admin/services/person.service.js +0 -175
  521. package/esm2015/src/app/admin/services/validator/person.validator.js +0 -37
  522. package/esm2015/src/app/admin/users/list/users.js +0 -221
  523. package/esm2015/src/app/core/about/modal-about.js +0 -63
  524. package/esm2015/src/app/core/account/account.js +0 -240
  525. package/esm2015/src/app/core/auth/form/form-auth.js +0 -134
  526. package/esm2015/src/app/core/auth/modal/modal-auth.js +0 -78
  527. package/esm2015/src/app/core/core.module.js +0 -127
  528. package/esm2015/src/app/core/core.testing.module.js +0 -51
  529. package/esm2015/src/app/core/form/editor.class.js +0 -702
  530. package/esm2015/src/app/core/form/entity-editor-modal.class.js +0 -435
  531. package/esm2015/src/app/core/form/entity-editor.class.js +0 -676
  532. package/esm2015/src/app/core/form/entity-metadata.component.js +0 -22
  533. package/esm2015/src/app/core/form/form-buttons-bar.component.js +0 -63
  534. package/esm2015/src/app/core/form/form.class.js +0 -346
  535. package/esm2015/src/app/core/form/form.utils.js +0 -299
  536. package/esm2015/src/app/core/form/list.form.js +0 -219
  537. package/esm2015/src/app/core/form/properties.form.js +0 -119
  538. package/esm2015/src/app/core/graphql/graphql.module.js +0 -18
  539. package/esm2015/src/app/core/graphql/graphql.service.js +0 -734
  540. package/esm2015/src/app/core/graphql/graphql.utils.js +0 -106
  541. package/esm2015/src/app/core/home/home.js +0 -265
  542. package/esm2015/src/app/core/icon/icon.component.js +0 -32
  543. package/esm2015/src/app/core/icon/icon.module.js +0 -26
  544. package/esm2015/src/app/core/install/install-upgrade-card.component.js +0 -358
  545. package/esm2015/src/app/core/menu/menu.component.js +0 -329
  546. package/esm2015/src/app/core/menu/menu.module.js +0 -28
  547. package/esm2015/src/app/core/offline/update-offline-mode-card.component.js +0 -26
  548. package/esm2015/src/app/core/peer/select-peer.modal.js +0 -134
  549. package/esm2015/src/app/core/register/confirm/confirm.js +0 -86
  550. package/esm2015/src/app/core/register/form/form-register.js +0 -172
  551. package/esm2015/src/app/core/register/modal/modal-register.js +0 -55
  552. package/esm2015/src/app/core/services/account.service.js +0 -1165
  553. package/esm2015/src/app/core/services/auth-guard.service.js +0 -77
  554. package/esm2015/src/app/core/services/base-entity-service.class.js +0 -454
  555. package/esm2015/src/app/core/services/base-graphql-service.class.js +0 -221
  556. package/esm2015/src/app/core/services/config.service.js +0 -385
  557. package/esm2015/src/app/core/services/local-settings.service.js +0 -460
  558. package/esm2015/src/app/core/services/model/account.model.js +0 -50
  559. package/esm2015/src/app/core/services/model/config.model.js +0 -89
  560. package/esm2015/src/app/core/services/model/department.model.js +0 -30
  561. package/esm2015/src/app/core/services/model/entity.decorators.js +0 -104
  562. package/esm2015/src/app/core/services/model/entity.model.js +0 -245
  563. package/esm2015/src/app/core/services/model/peer.model.js +0 -68
  564. package/esm2015/src/app/core/services/model/person.model.js +0 -83
  565. package/esm2015/src/app/core/services/model/referential.model.js +0 -155
  566. package/esm2015/src/app/core/services/model/settings.model.js +0 -75
  567. package/esm2015/src/app/core/services/network.service.js +0 -631
  568. package/esm2015/src/app/core/services/network.utils.js +0 -19
  569. package/esm2015/src/app/core/services/pipes/account.pipes.js +0 -28
  570. package/esm2015/src/app/core/services/pipes/department-to-string.pipe.js +0 -18
  571. package/esm2015/src/app/core/services/pipes/person-to-string.pipe.js +0 -18
  572. package/esm2015/src/app/core/services/pipes/usage-mode.pipes.js +0 -27
  573. package/esm2015/src/app/core/services/platform.service.js +0 -549
  574. package/esm2015/src/app/core/services/storage/entities-storage.service.js +0 -452
  575. package/esm2015/src/app/core/services/storage/entity-store.class.js +0 -461
  576. package/esm2015/src/app/core/services/testing/referential-filter.model.js +0 -23
  577. package/esm2015/src/app/core/services/testing/referential.validator.js +0 -44
  578. package/esm2015/src/app/core/services/validator/account.validator.js +0 -55
  579. package/esm2015/src/app/core/services/validator/base.validator.class.js +0 -48
  580. package/esm2015/src/app/core/services/validator/local-settings.validator.js +0 -72
  581. package/esm2015/src/app/core/services/validator/user-settings.validator.js +0 -30
  582. package/esm2015/src/app/core/settings/settings.page.js +0 -305
  583. package/esm2015/src/app/core/table/actions-column.component.js +0 -74
  584. package/esm2015/src/app/core/table/entities-table-datasource.class.js +0 -405
  585. package/esm2015/src/app/core/table/memory-table.class.js +0 -59
  586. package/esm2015/src/app/core/table/table-select-columns.component.js +0 -44
  587. package/esm2015/src/app/core/table/table.class.js +0 -1685
  588. package/esm2015/src/app/core/table/table.utils.js +0 -13
  589. package/esm2015/src/app/core/table/testing/table.testing.js +0 -242
  590. package/esm2015/src/app/core/table/testing/table.testing.module.js +0 -26
  591. package/esm2015/src/app/core/text-popover/testing/text-popover.testing.js +0 -37
  592. package/esm2015/src/app/core/text-popover/testing/text-popover.testing.module.js +0 -33
  593. package/esm2015/src/app/core/text-popover/text-form.component.js +0 -72
  594. package/esm2015/src/app/core/text-popover/text-popover.component.js +0 -90
  595. package/esm2015/src/app/shared/alerts.js +0 -251
  596. package/esm2015/src/app/shared/audio/audio.js +0 -178
  597. package/esm2015/src/app/shared/dates.js +0 -134
  598. package/esm2015/src/app/shared/directives/autofocus.directive.js +0 -90
  599. package/esm2015/src/app/shared/directives/autotitle.directive.js +0 -27
  600. package/esm2015/src/app/shared/directives/directives.module.js +0 -30
  601. package/esm2015/src/app/shared/directives/drag-and-drop.directive.js +0 -43
  602. package/esm2015/src/app/shared/directives/ng-var.directive.js +0 -32
  603. package/esm2015/src/app/shared/directives/resizable/resizable.component.js +0 -54
  604. package/esm2015/src/app/shared/directives/resizable/resizable.directive.js +0 -34
  605. package/esm2015/src/app/shared/directives/resizable/resizable.module.js +0 -12
  606. package/esm2015/src/app/shared/events.js +0 -61
  607. package/esm2015/src/app/shared/file/csv.utils.js +0 -70
  608. package/esm2015/src/app/shared/file/file.service.js +0 -120
  609. package/esm2015/src/app/shared/file/file.utils.js +0 -116
  610. package/esm2015/src/app/shared/file/images.utils.js +0 -166
  611. package/esm2015/src/app/shared/form/field.component.js +0 -206
  612. package/esm2015/src/app/shared/form/loading-spinner.js +0 -24
  613. package/esm2015/src/app/shared/forms.js +0 -358
  614. package/esm2015/src/app/shared/functions.js +0 -431
  615. package/esm2015/src/app/shared/gesture/hammer.utils.js +0 -2
  616. package/esm2015/src/app/shared/guard/component-dirty.guard.js +0 -61
  617. package/esm2015/src/app/shared/help/help.modal.js +0 -56
  618. package/esm2015/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.js +0 -20
  619. package/esm2015/src/app/shared/hotkeys/hotkeys.service.js +0 -91
  620. package/esm2015/src/app/shared/hotkeys/shared-hotkeys.module.js +0 -29
  621. package/esm2015/src/app/shared/http/http.utils.js +0 -57
  622. package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +0 -823
  623. package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.module.js +0 -46
  624. package/esm2015/src/app/shared/material/autocomplete/testing/autocomplete.test.js +0 -200
  625. package/esm2015/src/app/shared/material/badge/badge-icon.directive.js +0 -135
  626. package/esm2015/src/app/shared/material/badge/badge-icon.module.js +0 -23
  627. package/esm2015/src/app/shared/material/badge/badge-icon.test.js +0 -17
  628. package/esm2015/src/app/shared/material/boolean/boolean.module.js +0 -41
  629. package/esm2015/src/app/shared/material/boolean/material.boolean.js +0 -223
  630. package/esm2015/src/app/shared/material/chips/chips.module.js +0 -45
  631. package/esm2015/src/app/shared/material/chips/material.chips.js +0 -635
  632. package/esm2015/src/app/shared/material/chips/testing/chips.test.js +0 -138
  633. package/esm2015/src/app/shared/material/datetime/datetime.module.js +0 -54
  634. package/esm2015/src/app/shared/material/datetime/material.date.js +0 -375
  635. package/esm2015/src/app/shared/material/datetime/material.dateshort.js +0 -316
  636. package/esm2015/src/app/shared/material/datetime/material.datetime.js +0 -398
  637. package/esm2015/src/app/shared/material/datetime/testing/mat-date-time.test.js +0 -110
  638. package/esm2015/src/app/shared/material/datetime/testing/mat-date.test.js +0 -108
  639. package/esm2015/src/app/shared/material/duration/duration.module.js +0 -40
  640. package/esm2015/src/app/shared/material/duration/material.duration.js +0 -246
  641. package/esm2015/src/app/shared/material/latlong/latlong.utils.js +0 -249
  642. package/esm2015/src/app/shared/material/latlong/material.latlong.js +0 -350
  643. package/esm2015/src/app/shared/material/latlong/material.latlong.module.js +0 -41
  644. package/esm2015/src/app/shared/material/latlong/testing/latlong.test.js +0 -70
  645. package/esm2015/src/app/shared/material/material.module.js +0 -93
  646. package/esm2015/src/app/shared/material/material.testing.module.js +0 -121
  647. package/esm2015/src/app/shared/material/numpad/numpad.append-to-input.directive.js +0 -96
  648. package/esm2015/src/app/shared/material/numpad/numpad.component.js +0 -73
  649. package/esm2015/src/app/shared/material/numpad/numpad.container.js +0 -149
  650. package/esm2015/src/app/shared/material/numpad/numpad.content.js +0 -14
  651. package/esm2015/src/app/shared/material/numpad/numpad.directive.js +0 -148
  652. package/esm2015/src/app/shared/material/numpad/numpad.dom-service.js +0 -37
  653. package/esm2015/src/app/shared/material/numpad/numpad.module.js +0 -39
  654. package/esm2015/src/app/shared/material/numpad/testing/numpad.test.js +0 -44
  655. package/esm2015/src/app/shared/material/paginator/material.paginator-i18n.js +0 -44
  656. package/esm2015/src/app/shared/material/stepper/material.stepper-i18n.js +0 -24
  657. package/esm2015/src/app/shared/material/swipe/material.swipe.js +0 -308
  658. package/esm2015/src/app/shared/material/swipe/swipe.module.js +0 -33
  659. package/esm2015/src/app/shared/material/swipe/testing/swipe.test.js +0 -68
  660. package/esm2015/src/app/shared/observables.js +0 -106
  661. package/esm2015/src/app/shared/pipes/arrays.pipe.js +0 -110
  662. package/esm2015/src/app/shared/pipes/date-diff-duration.pipe.js +0 -50
  663. package/esm2015/src/app/shared/pipes/date-format.pipe.js +0 -43
  664. package/esm2015/src/app/shared/pipes/file-size.pipe.js +0 -58
  665. package/esm2015/src/app/shared/pipes/form.pipes.js +0 -177
  666. package/esm2015/src/app/shared/pipes/highlight.pipe.js +0 -43
  667. package/esm2015/src/app/shared/pipes/latlong-format.pipe.js +0 -36
  668. package/esm2015/src/app/shared/pipes/maps.pipe.js +0 -48
  669. package/esm2015/src/app/shared/pipes/math.pipes.js +0 -44
  670. package/esm2015/src/app/shared/pipes/ng-init.pipe.js +0 -18
  671. package/esm2015/src/app/shared/pipes/pipes.module.js +0 -117
  672. package/esm2015/src/app/shared/pipes/property.pipes.js +0 -98
  673. package/esm2015/src/app/shared/pipes/string.pipes.js +0 -53
  674. package/esm2015/src/app/shared/pipes/translate-context.pipe.js +0 -36
  675. package/esm2015/src/app/shared/platforms.js +0 -45
  676. package/esm2015/src/app/shared/services/entity-service.class.js +0 -8
  677. package/esm2015/src/app/shared/services/job.utils.js +0 -96
  678. package/esm2015/src/app/shared/services/memory-entity-service.class.js +0 -348
  679. package/esm2015/src/app/shared/services/progress-bar.service.js +0 -30
  680. package/esm2015/src/app/shared/services/startable-observable-service.class.js +0 -124
  681. package/esm2015/src/app/shared/services/startable-service.class.js +0 -110
  682. package/esm2015/src/app/shared/services/storage.utils.js +0 -41
  683. package/esm2015/src/app/shared/services/translate-context.service.js +0 -83
  684. package/esm2015/src/app/shared/services/validator-service.class.js +0 -2
  685. package/esm2015/src/app/shared/services.js +0 -61
  686. package/esm2015/src/app/shared/shared-routing.module.js +0 -54
  687. package/esm2015/src/app/shared/shared.module.js +0 -135
  688. package/esm2015/src/app/shared/shared.testing.module.js +0 -33
  689. package/esm2015/src/app/shared/testing/observable.test.js +0 -97
  690. package/esm2015/src/app/shared/testing/tests.page.js +0 -34
  691. package/esm2015/src/app/shared/toast/toast.testing.js +0 -39
  692. package/esm2015/src/app/shared/toast/toast.testing.module.js +0 -33
  693. package/esm2015/src/app/shared/toast/toasts.js +0 -119
  694. package/esm2015/src/app/shared/toolbar/modal-toolbar.js +0 -53
  695. package/esm2015/src/app/shared/toolbar/toolbar.js +0 -213
  696. package/esm2015/src/app/shared/upload-file/testing/upload-file.testing.js +0 -59
  697. package/esm2015/src/app/shared/upload-file/testing/upload-file.testing.module.js +0 -33
  698. package/esm2015/src/app/shared/upload-file/upload-file-popover.component.js +0 -98
  699. package/esm2015/src/app/shared/upload-file/upload-file.component.js +0 -202
  700. package/esm2015/src/app/shared/upload-file/upload-file.model.js +0 -20
  701. package/esm2015/src/app/shared/validator/form-error-adapter.class.js +0 -99
  702. package/esm2015/src/app/shared/validator/validators.js +0 -537
  703. package/esm2015/src/app/social/job/job.model.js +0 -26
  704. package/esm2015/src/app/social/job/job.module.js +0 -25
  705. package/esm2015/src/app/social/job/job.service.js +0 -66
  706. package/esm2015/src/app/social/job/progression/job-progression.icon.js +0 -208
  707. package/esm2015/src/app/social/job/progression/job-progression.list.js +0 -20
  708. package/esm2015/src/app/social/job/testing/job-progression.testing.js +0 -49
  709. package/esm2015/src/app/social/job/testing/job-progression.testing.service.js +0 -52
  710. package/esm2015/src/app/social/job/testing/job.testing.module.js +0 -25
  711. package/esm2015/src/app/social/message/message.form.js +0 -73
  712. package/esm2015/src/app/social/message/message.modal.js +0 -96
  713. package/esm2015/src/app/social/message/message.model.js +0 -65
  714. package/esm2015/src/app/social/message/message.module.js +0 -25
  715. package/esm2015/src/app/social/message/message.service.js +0 -87
  716. package/esm2015/src/app/social/social.module.js +0 -28
  717. package/esm2015/src/app/social/social.testing.module.js +0 -39
  718. package/esm2015/src/app/social/user-event/notification/user-event-notification.icon.js +0 -106
  719. package/esm2015/src/app/social/user-event/notification/user-event-notification.list.js +0 -203
  720. package/esm2015/src/app/social/user-event/testing/user-event.testing.js +0 -230
  721. package/esm2015/src/app/social/user-event/testing/user-event.testing.model.js +0 -103
  722. package/esm2015/src/app/social/user-event/testing/user-event.testing.module.js +0 -25
  723. package/esm2015/src/app/social/user-event/testing/user-event.testing.service.js +0 -117
  724. package/esm2015/src/app/social/user-event/user-event.model.js +0 -2
  725. package/esm2015/src/app/social/user-event/user-event.module.js +0 -27
  726. package/esm2015/src/app/social/user-event/user-event.service.js +0 -509
  727. package/esm2015/src/environments/environment.class.js +0 -5
  728. package/esm2015/src/environments/environment.js +0 -81
  729. package/esm2015/sumaris-net.ngx-components.js +0 -22
  730. package/fesm2015/sumaris-net.ngx-components.js +0 -30450
  731. package/fesm2015/sumaris-net.ngx-components.js.map +0 -1
  732. package/src/app/core/form/properties.form.d.ts +0 -40
  733. package/src/app/shared/material/badge/badge-icon.directive.d.ts +0 -28
  734. package/src/app/shared/material/badge/badge-icon.module.d.ts +0 -2
  735. package/src/app/shared/material/badge/badge-icon.test.d.ts +0 -9
  736. package/src/app/shared/services/storage.utils.d.ts +0 -13
  737. package/sumaris-net.ngx-components.d.ts +0 -21
  738. package/sumaris-net.ngx-components.metadata.json +0 -1
@@ -0,0 +1,226 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Optional, Output, ViewChild } from '@angular/core';
2
+ import { isNotNil, isNotNilOrBlank, toBoolean } from '../functions';
3
+ import { debounceTime, distinctUntilChanged, startWith, tap } from 'rxjs/operators';
4
+ import { HAMMER_PRESS_TIME } from '../gesture/gesture-config';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/router";
7
+ import * as i2 from "@ionic/angular";
8
+ import * as i3 from "../services/progress-bar.service";
9
+ import * as i4 from "@angular/common";
10
+ import * as i5 from "@angular/material/progress-bar";
11
+ import * as i6 from "../pipes/colors.pipe";
12
+ export class ToolbarToken {
13
+ }
14
+ export class ToolbarComponent {
15
+ constructor(route, router, routerOutlet, cd, progressBarService) {
16
+ this.route = route;
17
+ this.router = router;
18
+ this.routerOutlet = routerOutlet;
19
+ this.cd = cd;
20
+ this._closeTapCount = 0;
21
+ this._validateTapCount = 0;
22
+ this.title = '';
23
+ this.color = 'primary';
24
+ this.class = '';
25
+ this.hasValidate = false;
26
+ this.hasClose = false;
27
+ this.canShowMenu = true;
28
+ this.onValidate = new EventEmitter();
29
+ this.onClose = new EventEmitter();
30
+ this.onValidateAndClose = new EventEmitter();
31
+ this.onBackClick = new EventEmitter();
32
+ this.onSearch = new EventEmitter();
33
+ this.showSearchBar = false;
34
+ // Listen progress bar service mode
35
+ if (progressBarService) {
36
+ this.progressBarMode$ = progressBarService.onProgressChanged
37
+ .pipe(startWith('none'), tap((mode) => '[toolbar] Updating progressBarMode: ' + mode), debounceTime(100), // wait 100ms, to group changes
38
+ distinctUntilChanged());
39
+ }
40
+ }
41
+ set backHref(value) {
42
+ if (value !== this._backHref) {
43
+ this._backHref = value;
44
+ this.canGoBack = this.canGoBack || isNotNil(value);
45
+ this.cd.markForCheck();
46
+ }
47
+ }
48
+ get backHref() {
49
+ return this._backHref;
50
+ }
51
+ set defaultBackHref(value) {
52
+ if (value !== this._defaultBackHref) {
53
+ this._defaultBackHref = value;
54
+ this.canGoBack = this.canGoBack || isNotNil(value);
55
+ this.cd.markForCheck();
56
+ }
57
+ }
58
+ get defaultBackHref() {
59
+ return this._defaultBackHref;
60
+ }
61
+ ngOnInit() {
62
+ this.hasValidate = toBoolean(this.hasValidate, this.onValidate.observers.length > 0);
63
+ this.canGoBack = toBoolean(this.canGoBack, this.routerOutlet.canGoBack()
64
+ || isNotNilOrBlank(this._backHref)
65
+ || isNotNilOrBlank(this._defaultBackHref));
66
+ this.hasSearch = toBoolean(this.hasSearch, this.onSearch.observers.length > 0);
67
+ }
68
+ ngOnDestroy() {
69
+ this.onBackClick.complete();
70
+ this.onBackClick.unsubscribe();
71
+ this.onValidate.complete();
72
+ this.onValidate.unsubscribe();
73
+ this.onClose.complete();
74
+ this.onClose.unsubscribe();
75
+ this.onValidateAndClose.complete();
76
+ this.onValidateAndClose.unsubscribe();
77
+ this.onSearch.complete();
78
+ this.onSearch.unsubscribe();
79
+ }
80
+ async toggleSearchBar() {
81
+ this.showSearchBar = !this.showSearchBar;
82
+ if (this.showSearchBar && this.searchbar) {
83
+ setTimeout(async () => {
84
+ await this.searchbar.setFocus();
85
+ }, 300);
86
+ }
87
+ }
88
+ doBackClick(event) {
89
+ this.onBackClick.emit(event);
90
+ // Stop propagation, if need (can be cancelled by onBackClick observers)
91
+ if (event.defaultPrevented)
92
+ return;
93
+ // Execute the back action
94
+ this.goBack();
95
+ }
96
+ async goBack() {
97
+ console.debug('[toolbar] calling goBack()');
98
+ if (this._backHref) {
99
+ const replaceUrl = !this.routerOutlet.canGoBack();
100
+ // Relative href
101
+ if (this._backHref.startsWith('.')) {
102
+ await this.router.navigate([this._backHref], { relativeTo: this.route, replaceUrl });
103
+ }
104
+ else {
105
+ await this.router.navigateByUrl(this._backHref, { replaceUrl });
106
+ }
107
+ }
108
+ else if (this.routerOutlet.canGoBack()) {
109
+ await this.routerOutlet.pop();
110
+ }
111
+ else if (this._defaultBackHref) {
112
+ // Relative href
113
+ if (this._defaultBackHref.startsWith('.')) {
114
+ await this.router.navigate([this._defaultBackHref], { relativeTo: this.route, replaceUrl: true });
115
+ }
116
+ else {
117
+ await this.router.navigateByUrl(this._defaultBackHref, {
118
+ replaceUrl: true
119
+ });
120
+ }
121
+ }
122
+ else {
123
+ console.error('[toolbar] Cannot go back. Missing attribute \'defaultBackHref\' or \'backHref\'');
124
+ }
125
+ }
126
+ tapClose(event) {
127
+ // DEV only
128
+ // console.debug("[toolbar] tapClose", event.tapCount);
129
+ if (this._validateTapCount > 0)
130
+ return;
131
+ // Distinguish simple and double tap
132
+ this._closeTapCount = event.tapCount;
133
+ setTimeout(() => {
134
+ // Event is obsolete (a new tap event occur)
135
+ if (event.tapCount < this._closeTapCount) {
136
+ // Ignore event
137
+ }
138
+ // If event still the last tap event: process it
139
+ else {
140
+ this.onClose.emit(event.srcEvent || event);
141
+ // Reset tab count
142
+ this._closeTapCount = 0;
143
+ }
144
+ }, 500);
145
+ }
146
+ tapValidate(event) {
147
+ // DEV only
148
+ //console.debug("[toolbar] tapValidate", event.tapCount);
149
+ if (this.onValidateAndClose.observers.length) {
150
+ this.onValidate.emit(event.srcEvent || event);
151
+ }
152
+ // Distinguish simple and double tap
153
+ else {
154
+ this._validateTapCount = event.tapCount;
155
+ setTimeout(() => {
156
+ // Event is obsolete (a new tap event occur)
157
+ if (event.tapCount < this._validateTapCount) {
158
+ // Ignore event
159
+ }
160
+ // If event still the last tap event: process it
161
+ else {
162
+ if (this._validateTapCount === 1) {
163
+ this.onValidate.emit(event.srcEvent || event);
164
+ }
165
+ else if (this._validateTapCount >= 2) {
166
+ this.onValidateAndClose.emit(event.srcEvent || event);
167
+ }
168
+ // Reset tab count
169
+ this._validateTapCount = 0;
170
+ }
171
+ }, HAMMER_PRESS_TIME + 10);
172
+ }
173
+ }
174
+ ionSearchBarChanged(event) {
175
+ this.onSearch.emit(event);
176
+ }
177
+ }
178
+ ToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: ToolbarComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.IonRouterOutlet }, { token: i0.ChangeDetectorRef }, { token: i3.ProgressBarService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
179
+ ToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.5", type: ToolbarComponent, selector: "app-toolbar", inputs: { title: "title", color: "color", class: "class", backHref: "backHref", defaultBackHref: "defaultBackHref", hasValidate: "hasValidate", hasClose: "hasClose", hasSearch: "hasSearch", canGoBack: "canGoBack", canShowMenu: "canShowMenu" }, outputs: { onValidate: "onValidate", onClose: "onClose", onValidateAndClose: "onValidateAndClose", onBackClick: "onBackClick", onSearch: "onSearch" }, providers: [
180
+ { provide: ToolbarToken, useExisting: ToolbarComponent }
181
+ ], viewQueries: [{ propertyName: "searchbar", first: true, predicate: ["searchbar"], descendants: true, static: true }, { propertyName: "menuToggle", first: true, predicate: ["menuToggle"], descendants: true, static: true }], ngImport: i0, template: "<ion-header [class]=\"class\">\n <ion-toolbar [color]=\"color\">\n\n <ion-buttons slot=\"start\">\n\n <!-- back button -->\n <ion-button class=\"back-button\"\n *ngIf=\"canGoBack\"\n (click)=\"doBackClick($event)\"\n routerDirection=\"back\" >\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n\n <!-- show menu button -->\n <ion-menu-toggle #menuToggle\n [menu]=\"'left'\"\n [class.cdk-visually-hidden]=\"canGoBack || !canShowMenu\">\n <ion-button>\n <ion-icon slot=\"icon-only\" name=\"menu\"></ion-icon>\n </ion-button>\n </ion-menu-toggle>\n\n <ng-content select=\"[slot=start]\"></ng-content>\n </ion-buttons>\n\n <ion-title [innerHTML]=\"title\"></ion-title>\n\n <ng-content select=\"ion-title\"></ng-content>\n\n <ng-content select=\"ion-buttons[slot=end]\"></ng-content>\n\n <ion-buttons slot=\"end\" collapse=\"true\">\n\n <ng-content select=\"[slot=end]\"></ng-content>\n\n <!-- search bar -->\n <ion-searchbar #searchbar animated\n type=\"search\"\n *ngIf=\"hasSearch\"\n [class.cdk-visually-hidden]=\"!showSearchBar\"\n show-cancel-button=\"always\"\n (ionChange)=\"ionSearchBarChanged($event)\"\n (ionCancel)=\"toggleSearchBar()\">\n </ion-searchbar>\n\n <!-- search button -->\n <ion-button (click)=\"toggleSearchBar()\"\n *ngIf=\"hasSearch && !showSearchBar\">\n <ion-icon slot=\"icon-only\" name=\"search\"></ion-icon>\n </ion-button>\n\n <!-- close button -->\n <ion-button *ngIf=\"hasClose\"\n (tap)=\"tapClose($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"close\"></ion-icon>\n </ion-button>\n\n <!-- validate button -->\n <ion-button *ngIf=\"hasValidate\"\n (tap)=\"tapValidate($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"save\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n\n <!-- progress bar -->\n <mat-progress-bar [color]=\"color|matColor\" [mode]=\"progressBarMode$ | async\">\n </mat-progress-bar>\n</ion-header>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: i2.IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "mode", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.MatColorPipe, name: "matColor" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
182
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: ToolbarComponent, decorators: [{
183
+ type: Component,
184
+ args: [{ selector: 'app-toolbar', providers: [
185
+ { provide: ToolbarToken, useExisting: ToolbarComponent }
186
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header [class]=\"class\">\n <ion-toolbar [color]=\"color\">\n\n <ion-buttons slot=\"start\">\n\n <!-- back button -->\n <ion-button class=\"back-button\"\n *ngIf=\"canGoBack\"\n (click)=\"doBackClick($event)\"\n routerDirection=\"back\" >\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n\n <!-- show menu button -->\n <ion-menu-toggle #menuToggle\n [menu]=\"'left'\"\n [class.cdk-visually-hidden]=\"canGoBack || !canShowMenu\">\n <ion-button>\n <ion-icon slot=\"icon-only\" name=\"menu\"></ion-icon>\n </ion-button>\n </ion-menu-toggle>\n\n <ng-content select=\"[slot=start]\"></ng-content>\n </ion-buttons>\n\n <ion-title [innerHTML]=\"title\"></ion-title>\n\n <ng-content select=\"ion-title\"></ng-content>\n\n <ng-content select=\"ion-buttons[slot=end]\"></ng-content>\n\n <ion-buttons slot=\"end\" collapse=\"true\">\n\n <ng-content select=\"[slot=end]\"></ng-content>\n\n <!-- search bar -->\n <ion-searchbar #searchbar animated\n type=\"search\"\n *ngIf=\"hasSearch\"\n [class.cdk-visually-hidden]=\"!showSearchBar\"\n show-cancel-button=\"always\"\n (ionChange)=\"ionSearchBarChanged($event)\"\n (ionCancel)=\"toggleSearchBar()\">\n </ion-searchbar>\n\n <!-- search button -->\n <ion-button (click)=\"toggleSearchBar()\"\n *ngIf=\"hasSearch && !showSearchBar\">\n <ion-icon slot=\"icon-only\" name=\"search\"></ion-icon>\n </ion-button>\n\n <!-- close button -->\n <ion-button *ngIf=\"hasClose\"\n (tap)=\"tapClose($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"close\"></ion-icon>\n </ion-button>\n\n <!-- validate button -->\n <ion-button *ngIf=\"hasValidate\"\n (tap)=\"tapValidate($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"save\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n\n <!-- progress bar -->\n <mat-progress-bar [color]=\"color|matColor\" [mode]=\"progressBarMode$ | async\">\n </mat-progress-bar>\n</ion-header>\n" }]
187
+ }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.IonRouterOutlet }, { type: i0.ChangeDetectorRef }, { type: i3.ProgressBarService, decorators: [{
188
+ type: Optional
189
+ }] }]; }, propDecorators: { title: [{
190
+ type: Input
191
+ }], color: [{
192
+ type: Input
193
+ }], class: [{
194
+ type: Input
195
+ }], backHref: [{
196
+ type: Input
197
+ }], defaultBackHref: [{
198
+ type: Input
199
+ }], hasValidate: [{
200
+ type: Input
201
+ }], hasClose: [{
202
+ type: Input
203
+ }], hasSearch: [{
204
+ type: Input
205
+ }], canGoBack: [{
206
+ type: Input
207
+ }], canShowMenu: [{
208
+ type: Input
209
+ }], onValidate: [{
210
+ type: Output
211
+ }], onClose: [{
212
+ type: Output
213
+ }], onValidateAndClose: [{
214
+ type: Output
215
+ }], onBackClick: [{
216
+ type: Output
217
+ }], onSearch: [{
218
+ type: Output
219
+ }], searchbar: [{
220
+ type: ViewChild,
221
+ args: ['searchbar', { static: true }]
222
+ }], menuToggle: [{
223
+ type: ViewChild,
224
+ args: ['menuToggle', { static: true }]
225
+ }] } });
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3Rvb2xiYXIvdG9vbGJhci50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3Rvb2xiYXIvdG9vbGJhci5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSXpKLE9BQU8sRUFBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNsRSxPQUFPLEVBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdsRixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7QUFJNUQsTUFBTSxPQUFnQixZQUFZO0NBS2pDO0FBV0QsTUFBTSxPQUFPLGdCQUFnQjtJQXlEM0IsWUFDVSxLQUFxQixFQUNyQixNQUFjLEVBQ2QsWUFBNkIsRUFDN0IsRUFBcUIsRUFDakIsa0JBQXNDO1FBSjFDLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxpQkFBWSxHQUFaLFlBQVksQ0FBaUI7UUFDN0IsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUEzRHZCLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUlyQixVQUFLLEdBQVcsRUFBRSxDQUFDO1FBRW5CLFVBQUssR0FBYyxTQUFTLENBQUM7UUFHdEMsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQTBCRixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBR2pC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MUI7SUFDSCxDQUFDO0lBRVMsbUJBQW1CLENBQUMsS0FBWTtRQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUEwRCxDQUFDLENBQUM7SUFDakYsQ0FBQzs7NkdBaE5VLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLGliQUxoQjtRQUNULEVBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUM7S0FDdkQseVBDekJILDA2RUF1RUE7MkZEM0NhLGdCQUFnQjtrQkFUNUIsU0FBUzsrQkFDRSxhQUFhLGFBR1o7d0JBQ1QsRUFBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsa0JBQWtCLEVBQUM7cUJBQ3ZELG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNOzswQkFnRTVDLFFBQVE7NENBdkRGLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBR04sS0FBSztzQkFESixLQUFLO2dCQUdPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBWU8sZUFBZTtzQkFBM0IsS0FBSztnQkFZRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBS2lDLFNBQVM7c0JBQWhELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFDRyxVQUFVO3NCQUFsRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UHJvZ3Jlc3NCYXJTZXJ2aWNlLCBQcm9ncmVzc01vZGV9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyZXNzLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7SW9uTWVudVRvZ2dsZSwgSW9uUm91dGVyT3V0bGV0LCBJb25TZWFyY2hiYXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7aXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgdG9Cb29sZWFufSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBzdGFydFdpdGgsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7SGFtbWVyVGFwRXZlbnR9IGZyb20gJy4uL2dlc3R1cmUvaGFtbWVyLnV0aWxzJztcbmltcG9ydCB7SEFNTUVSX1BSRVNTX1RJTUV9IGZyb20gJy4uL2dlc3R1cmUvZ2VzdHVyZS1jb25maWcnO1xuaW1wb3J0IHtBcHBDb2xvcnN9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7U2VhcmNoYmFyQ2hhbmdlRXZlbnREZXRhaWwgYXMgSVNlYXJjaGJhclNlYXJjaGJhckNoYW5nZUV2ZW50RGV0YWlsfSBmcm9tICdAaW9uaWMvY29yZS9kaXN0L3R5cGVzL2NvbXBvbmVudHMvc2VhcmNoYmFyL3NlYXJjaGJhci1pbnRlcmZhY2UnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVG9vbGJhclRva2VuIHtcbiAgYWJzdHJhY3Qgb25CYWNrQ2xpY2s6IE9ic2VydmFibGU8RXZlbnQ+O1xuICBhYnN0cmFjdCBkb0JhY2tDbGljayhldmVudDogRXZlbnQpO1xuICBhYnN0cmFjdCBnb0JhY2soKTogUHJvbWlzZTx2b2lkPjtcbiAgYWJzdHJhY3QgY2FuR29CYWNrOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdG9vbGJhcicsXG4gIHRlbXBsYXRlVXJsOiAndG9vbGJhci5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdG9vbGJhci5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtwcm92aWRlOiBUb29sYmFyVG9rZW4sIHVzZUV4aXN0aW5nOiBUb29sYmFyQ29tcG9uZW50fVxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBUb29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgVG9vbGJhclRva2VuLCBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHJpdmF0ZSBfY2xvc2VUYXBDb3VudCA9IDA7XG4gIHByaXZhdGUgX3ZhbGlkYXRlVGFwQ291bnQgPSAwO1xuICBwcml2YXRlIF9kZWZhdWx0QmFja0hyZWY6IHN0cmluZztcbiAgcHJpdmF0ZSBfYmFja0hyZWY6IHN0cmluZztcblxuICBASW5wdXQoKSB0aXRsZTogU3RyaW5nID0gJyc7XG5cbiAgQElucHV0KCkgY29sb3I6IEFwcENvbG9ycyA9ICdwcmltYXJ5JztcblxuICBASW5wdXQoKVxuICBjbGFzcyA9ICcnO1xuXG4gIEBJbnB1dCgpIHNldCBiYWNrSHJlZih2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9iYWNrSHJlZikge1xuICAgICAgdGhpcy5fYmFja0hyZWYgPSB2YWx1ZTtcbiAgICAgIHRoaXMuY2FuR29CYWNrID0gdGhpcy5jYW5Hb0JhY2sgfHwgaXNOb3ROaWwodmFsdWUpO1xuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBnZXQgYmFja0hyZWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYmFja0hyZWY7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZGVmYXVsdEJhY2tIcmVmKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuX2RlZmF1bHRCYWNrSHJlZikge1xuICAgICAgdGhpcy5fZGVmYXVsdEJhY2tIcmVmID0gdmFsdWU7XG4gICAgICB0aGlzLmNhbkdvQmFjayA9IHRoaXMuY2FuR29CYWNrIHx8IGlzTm90TmlsKHZhbHVlKTtcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRlZmF1bHRCYWNrSHJlZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0QmFja0hyZWY7XG4gIH1cblxuICBASW5wdXQoKSBoYXNWYWxpZGF0ZSA9IGZhbHNlO1xuICBASW5wdXQoKSBoYXNDbG9zZSA9IGZhbHNlO1xuICBASW5wdXQoKSBoYXNTZWFyY2g6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNhbkdvQmFjazogYm9vbGVhbjtcbiAgQElucHV0KCkgY2FuU2hvd01lbnUgPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSBvblZhbGlkYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uQ2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICBAT3V0cHV0KCkgb25WYWxpZGF0ZUFuZENsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uQmFja0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxDdXN0b21FdmVudDxJU2VhcmNoYmFyU2VhcmNoYmFyQ2hhbmdlRXZlbnREZXRhaWw+PigpO1xuXG4gIHByb2dyZXNzQmFyTW9kZSQ6IE9ic2VydmFibGU8UHJvZ3Jlc3NNb2RlPjtcbiAgc2hvd1NlYXJjaEJhciA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaGJhcicsIHtzdGF0aWM6IHRydWV9KSBzZWFyY2hiYXI6IElvblNlYXJjaGJhcjtcbiAgQFZpZXdDaGlsZCgnbWVudVRvZ2dsZScsIHtzdGF0aWM6IHRydWV9KSBtZW51VG9nZ2xlOiBJb25NZW51VG9nZ2xlO1xuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJvdXRlck91dGxldDogSW9uUm91dGVyT3V0bGV0LFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIHByb2dyZXNzQmFyU2VydmljZTogUHJvZ3Jlc3NCYXJTZXJ2aWNlXG4gICkge1xuXG4gICAgLy8gTGlzdGVuIHByb2dyZXNzIGJhciBzZXJ2aWNlIG1vZGVcbiAgICBpZiAocHJvZ3Jlc3NCYXJTZXJ2aWNlKSB7XG4gICAgICB0aGlzLnByb2dyZXNzQmFyTW9kZSQgPSBwcm9ncmVzc0JhclNlcnZpY2Uub25Qcm9ncmVzc0NoYW5nZWRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoPFByb2dyZXNzTW9kZT4oJ25vbmUnIGFzIFByb2dyZXNzTW9kZSksXG4gICAgICAgICAgdGFwKChtb2RlKSA9PiAnW3Rvb2xiYXJdIFVwZGF0aW5nIHByb2dyZXNzQmFyTW9kZTogJyArIG1vZGUpLFxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApLCAvLyB3YWl0IDEwMG1zLCB0byBncm91cCBjaGFuZ2VzXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaGFzVmFsaWRhdGUgPSB0b0Jvb2xlYW4odGhpcy5oYXNWYWxpZGF0ZSwgdGhpcy5vblZhbGlkYXRlLm9ic2VydmVycy5sZW5ndGggPiAwKTtcbiAgICB0aGlzLmNhbkdvQmFjayA9IHRvQm9vbGVhbih0aGlzLmNhbkdvQmFjaywgdGhpcy5yb3V0ZXJPdXRsZXQuY2FuR29CYWNrKClcbiAgICAgIHx8IGlzTm90TmlsT3JCbGFuayh0aGlzLl9iYWNrSHJlZilcbiAgICAgIHx8IGlzTm90TmlsT3JCbGFuayh0aGlzLl9kZWZhdWx0QmFja0hyZWYpKTtcbiAgICB0aGlzLmhhc1NlYXJjaCA9IHRvQm9vbGVhbih0aGlzLmhhc1NlYXJjaCwgdGhpcy5vblNlYXJjaC5vYnNlcnZlcnMubGVuZ3RoID4gMCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm9uQmFja0NsaWNrLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vbkJhY2tDbGljay51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25WYWxpZGF0ZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25WYWxpZGF0ZS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25DbG9zZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25DbG9zZS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25WYWxpZGF0ZUFuZENsb3NlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vblZhbGlkYXRlQW5kQ2xvc2UudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU2VhcmNoLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vblNlYXJjaC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgYXN5bmMgdG9nZ2xlU2VhcmNoQmFyKCkge1xuICAgIHRoaXMuc2hvd1NlYXJjaEJhciA9ICF0aGlzLnNob3dTZWFyY2hCYXI7XG4gICAgaWYgKHRoaXMuc2hvd1NlYXJjaEJhciAmJiB0aGlzLnNlYXJjaGJhcikge1xuICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2VhcmNoYmFyLnNldEZvY3VzKCk7XG4gICAgICB9LCAzMDApO1xuICAgIH1cbiAgfVxuXG4gIGRvQmFja0NsaWNrKGV2ZW50OiBFdmVudCkge1xuXG4gICAgdGhpcy5vbkJhY2tDbGljay5lbWl0KGV2ZW50KTtcblxuICAgIC8vIFN0b3AgcHJvcGFnYXRpb24sIGlmIG5lZWQgKGNhbiBiZSBjYW5jZWxsZWQgYnkgb25CYWNrQ2xpY2sgb2JzZXJ2ZXJzKVxuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG5cbiAgICAvLyBFeGVjdXRlIHRoZSBiYWNrIGFjdGlvblxuICAgIHRoaXMuZ29CYWNrKCk7XG4gIH1cblxuICBhc3luYyBnb0JhY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5kZWJ1ZygnW3Rvb2xiYXJdIGNhbGxpbmcgZ29CYWNrKCknKTtcbiAgICBpZiAodGhpcy5fYmFja0hyZWYpIHtcbiAgICAgIGNvbnN0IHJlcGxhY2VVcmwgPSAhdGhpcy5yb3V0ZXJPdXRsZXQuY2FuR29CYWNrKCk7XG4gICAgICAvLyBSZWxhdGl2ZSBocmVmXG4gICAgICBpZiAodGhpcy5fYmFja0hyZWYuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLl9iYWNrSHJlZl0sIHtyZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLCByZXBsYWNlVXJsfSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLl9iYWNrSHJlZiwge3JlcGxhY2VVcmx9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5yb3V0ZXJPdXRsZXQuY2FuR29CYWNrKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMucm91dGVyT3V0bGV0LnBvcCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9kZWZhdWx0QmFja0hyZWYpIHtcbiAgICAgIC8vIFJlbGF0aXZlIGhyZWZcbiAgICAgIGlmICh0aGlzLl9kZWZhdWx0QmFja0hyZWYuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLl9kZWZhdWx0QmFja0hyZWZdLCB7cmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgcmVwbGFjZVVybDogdHJ1ZX0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5fZGVmYXVsdEJhY2tIcmVmLCB7XG4gICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1t0b29sYmFyXSBDYW5ub3QgZ28gYmFjay4gTWlzc2luZyBhdHRyaWJ1dGUgXFwnZGVmYXVsdEJhY2tIcmVmXFwnIG9yIFxcJ2JhY2tIcmVmXFwnJyk7XG4gICAgfVxuICB9XG5cbiAgdGFwQ2xvc2UoZXZlbnQ6IEhhbW1lclRhcEV2ZW50KSB7XG4gICAgLy8gREVWIG9ubHlcbiAgICAvLyBjb25zb2xlLmRlYnVnKFwiW3Rvb2xiYXJdIHRhcENsb3NlXCIsIGV2ZW50LnRhcENvdW50KTtcbiAgICBpZiAodGhpcy5fdmFsaWRhdGVUYXBDb3VudCA+IDApIHJldHVybjtcblxuICAgIC8vIERpc3Rpbmd1aXNoIHNpbXBsZSBhbmQgZG91YmxlIHRhcFxuICAgIHRoaXMuX2Nsb3NlVGFwQ291bnQgPSBldmVudC50YXBDb3VudDtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIEV2ZW50IGlzIG9ic29sZXRlIChhIG5ldyB0YXAgZXZlbnQgb2NjdXIpXG4gICAgICBpZiAoZXZlbnQudGFwQ291bnQgPCB0aGlzLl9jbG9zZVRhcENvdW50KSB7XG4gICAgICAgIC8vIElnbm9yZSBldmVudFxuICAgICAgfVxuXG4gICAgICAvLyBJZiBldmVudCBzdGlsbCB0aGUgbGFzdCB0YXAgZXZlbnQ6IHByb2Nlc3MgaXRcbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLm9uQ2xvc2UuZW1pdChldmVudC5zcmNFdmVudCB8fCBldmVudCk7XG5cbiAgICAgICAgLy8gUmVzZXQgdGFiIGNvdW50XG4gICAgICAgIHRoaXMuX2Nsb3NlVGFwQ291bnQgPSAwO1xuICAgICAgfVxuICAgIH0sIDUwMCk7XG4gIH1cblxuICB0YXBWYWxpZGF0ZShldmVudDogSGFtbWVyVGFwRXZlbnQpIHtcbiAgICAvLyBERVYgb25seVxuICAgIC8vY29uc29sZS5kZWJ1ZyhcIlt0b29sYmFyXSB0YXBWYWxpZGF0ZVwiLCBldmVudC50YXBDb3VudCk7XG5cbiAgICBpZiAodGhpcy5vblZhbGlkYXRlQW5kQ2xvc2Uub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5vblZhbGlkYXRlLmVtaXQoZXZlbnQuc3JjRXZlbnQgfHwgZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIERpc3Rpbmd1aXNoIHNpbXBsZSBhbmQgZG91YmxlIHRhcFxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fdmFsaWRhdGVUYXBDb3VudCA9IGV2ZW50LnRhcENvdW50O1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vIEV2ZW50IGlzIG9ic29sZXRlIChhIG5ldyB0YXAgZXZlbnQgb2NjdXIpXG4gICAgICAgIGlmIChldmVudC50YXBDb3VudCA8IHRoaXMuX3ZhbGlkYXRlVGFwQ291bnQpIHtcbiAgICAgICAgICAvLyBJZ25vcmUgZXZlbnRcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGV2ZW50IHN0aWxsIHRoZSBsYXN0IHRhcCBldmVudDogcHJvY2VzcyBpdFxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5fdmFsaWRhdGVUYXBDb3VudCA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy5vblZhbGlkYXRlLmVtaXQoZXZlbnQuc3JjRXZlbnQgfHwgZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmICh0aGlzLl92YWxpZGF0ZVRhcENvdW50ID49IDIpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWxpZGF0ZUFuZENsb3NlLmVtaXQoZXZlbnQuc3JjRXZlbnQgfHwgZXZlbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFJlc2V0IHRhYiBjb3VudFxuICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlVGFwQ291bnQgPSAwO1xuICAgICAgICB9XG4gICAgICB9LCBIQU1NRVJfUFJFU1NfVElNRSsxMCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGlvblNlYXJjaEJhckNoYW5nZWQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5vblNlYXJjaC5lbWl0KGV2ZW50IGFzIEN1c3RvbUV2ZW50PElTZWFyY2hiYXJTZWFyY2hiYXJDaGFuZ2VFdmVudERldGFpbD4pO1xuICB9XG59XG4iLCI8aW9uLWhlYWRlciBbY2xhc3NdPVwiY2xhc3NcIj5cbiAgPGlvbi10b29sYmFyIFtjb2xvcl09XCJjb2xvclwiPlxuXG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuXG4gICAgICA8IS0tIGJhY2sgYnV0dG9uIC0tPlxuICAgICAgPGlvbi1idXR0b24gY2xhc3M9XCJiYWNrLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNhbkdvQmFja1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZG9CYWNrQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICByb3V0ZXJEaXJlY3Rpb249XCJiYWNrXCIgPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJhcnJvdy1iYWNrXCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgPCEtLSBzaG93IG1lbnUgYnV0dG9uIC0tPlxuICAgICAgPGlvbi1tZW51LXRvZ2dsZSAjbWVudVRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICAgICBbbWVudV09XCInbGVmdCdcIlxuICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCJjYW5Hb0JhY2sgfHwgIWNhblNob3dNZW51XCI+XG4gICAgICAgIDxpb24tYnV0dG9uPlxuICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cIm1lbnVcIj48L2lvbi1pY29uPlxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2lvbi1tZW51LXRvZ2dsZT5cblxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3Nsb3Q9c3RhcnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvaW9uLWJ1dHRvbnM+XG5cbiAgICA8aW9uLXRpdGxlIFtpbm5lckhUTUxdPVwidGl0bGVcIj48L2lvbi10aXRsZT5cblxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlvbi10aXRsZVwiPjwvbmctY29udGVudD5cblxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlvbi1idXR0b25zW3Nsb3Q9ZW5kXVwiPjwvbmctY29udGVudD5cblxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCIgY29sbGFwc2U9XCJ0cnVlXCI+XG5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzbG90PWVuZF1cIj48L25nLWNvbnRlbnQ+XG5cbiAgICAgIDwhLS0gc2VhcmNoIGJhciAtLT5cbiAgICAgIDxpb24tc2VhcmNoYmFyICNzZWFyY2hiYXIgYW5pbWF0ZWRcbiAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiIXNob3dTZWFyY2hCYXJcIlxuICAgICAgICAgICAgICAgICAgICAgc2hvdy1jYW5jZWwtYnV0dG9uPVwiYWx3YXlzXCJcbiAgICAgICAgICAgICAgICAgICAgIChpb25DaGFuZ2UpPVwiaW9uU2VhcmNoQmFyQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgIChpb25DYW5jZWwpPVwidG9nZ2xlU2VhcmNoQmFyKClcIj5cbiAgICAgIDwvaW9uLXNlYXJjaGJhcj5cblxuICAgICAgPCEtLSBzZWFyY2ggYnV0dG9uIC0tPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInRvZ2dsZVNlYXJjaEJhcigpXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzU2VhcmNoICYmICFzaG93U2VhcmNoQmFyXCI+XG4gICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cInNlYXJjaFwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG5cbiAgICAgIDwhLS0gY2xvc2UgYnV0dG9uIC0tPlxuICAgICAgPGlvbi1idXR0b24gKm5nSWY9XCJoYXNDbG9zZVwiXG4gICAgICAgICAgICAgICAgICAodGFwKT1cInRhcENsb3NlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2aXNpYmxlLXhzIHZpc2libGUtc20gdmlzaWJsZS1tb2JpbGVcIj5cbiAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwiY2xvc2VcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuXG4gICAgICA8IS0tIHZhbGlkYXRlIGJ1dHRvbiAtLT5cbiAgICAgIDxpb24tYnV0dG9uICpuZ0lmPVwiaGFzVmFsaWRhdGVcIlxuICAgICAgICAgICAgICAgICAgKHRhcCk9XCJ0YXBWYWxpZGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmlzaWJsZS14cyB2aXNpYmxlLXNtIHZpc2libGUtbW9iaWxlXCI+XG4gICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cInNhdmVcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gIDwvaW9uLXRvb2xiYXI+XG5cbiAgPCEtLSBwcm9ncmVzcyBiYXIgLS0+XG4gIDxtYXQtcHJvZ3Jlc3MtYmFyIFtjb2xvcl09XCJjb2xvcnxtYXRDb2xvclwiIFttb2RlXT1cInByb2dyZXNzQmFyTW9kZSQgfCBhc3luY1wiPlxuICA8L21hdC1wcm9ncmVzcy1iYXI+XG48L2lvbi1oZWFkZXI+XG4iXX0=
@@ -0,0 +1,53 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { TranslateModule } from '@ngx-translate/core';
4
+ import { IonicModule } from '@ionic/angular';
5
+ import { ToolbarComponent } from './toolbar';
6
+ import { ModalToolbarComponent } from './modal-toolbar';
7
+ import { HammerModule } from '@angular/platform-browser';
8
+ import { MatProgressBarModule } from '@angular/material/progress-bar';
9
+ import { SharedPipesModule } from '../pipes/pipes.module';
10
+ import { MatIconModule } from '@angular/material/icon';
11
+ import * as i0 from "@angular/core";
12
+ export class SharedToolbarModule {
13
+ }
14
+ SharedToolbarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: SharedToolbarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
15
+ SharedToolbarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.5", ngImport: i0, type: SharedToolbarModule, declarations: [ToolbarComponent,
16
+ ModalToolbarComponent], imports: [CommonModule,
17
+ IonicModule,
18
+ TranslateModule,
19
+ HammerModule,
20
+ SharedPipesModule,
21
+ MatProgressBarModule,
22
+ MatIconModule], exports: [ToolbarComponent,
23
+ ModalToolbarComponent] });
24
+ SharedToolbarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: SharedToolbarModule, imports: [CommonModule,
25
+ IonicModule,
26
+ TranslateModule,
27
+ HammerModule,
28
+ SharedPipesModule,
29
+ MatProgressBarModule,
30
+ MatIconModule] });
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: SharedToolbarModule, decorators: [{
32
+ type: NgModule,
33
+ args: [{
34
+ imports: [
35
+ CommonModule,
36
+ IonicModule,
37
+ TranslateModule,
38
+ HammerModule,
39
+ SharedPipesModule,
40
+ MatProgressBarModule,
41
+ MatIconModule
42
+ ],
43
+ declarations: [
44
+ ToolbarComponent,
45
+ ModalToolbarComponent
46
+ ],
47
+ exports: [
48
+ ToolbarComponent,
49
+ ModalToolbarComponent
50
+ ]
51
+ }]
52
+ }] });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC90b29sYmFyL3Rvb2xiYXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzNDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7O0FBdUJyRCxNQUFNLE9BQU8sbUJBQW1COztnSEFBbkIsbUJBQW1CO2lIQUFuQixtQkFBbUIsaUJBUjVCLGdCQUFnQjtRQUNoQixxQkFBcUIsYUFYckIsWUFBWTtRQUNaLFdBQVc7UUFDWCxlQUFlO1FBQ2YsWUFBWTtRQUNaLGlCQUFpQjtRQUVqQixvQkFBb0I7UUFDcEIsYUFBYSxhQU9iLGdCQUFnQjtRQUNoQixxQkFBcUI7aUhBR1osbUJBQW1CLFlBbEI1QixZQUFZO1FBQ1osV0FBVztRQUNYLGVBQWU7UUFDZixZQUFZO1FBQ1osaUJBQWlCO1FBRWpCLG9CQUFvQjtRQUNwQixhQUFhOzJGQVdKLG1CQUFtQjtrQkFwQi9CLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxlQUFlO3dCQUNmLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUVqQixvQkFBb0I7d0JBQ3BCLGFBQWE7cUJBQ2Q7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLGdCQUFnQjt3QkFDaEIscUJBQXFCO3FCQUN0QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsZ0JBQWdCO3dCQUNoQixxQkFBcUI7cUJBQ3RCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7SW9uaWNNb2R1bGV9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7VG9vbGJhckNvbXBvbmVudH0gZnJvbSAnLi90b29sYmFyJztcbmltcG9ydCB7TW9kYWxUb29sYmFyQ29tcG9uZW50fSBmcm9tICcuL21vZGFsLXRvb2xiYXInO1xuaW1wb3J0IHtIYW1tZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtNYXRQcm9ncmVzc0Jhck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcbmltcG9ydCB7U2hhcmVkUGlwZXNNb2R1bGV9IGZyb20gJy4uL3BpcGVzL3BpcGVzLm1vZHVsZSc7XG5pbXBvcnQge01hdEljb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuXG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSW9uaWNNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIEhhbW1lck1vZHVsZSxcbiAgICBTaGFyZWRQaXBlc01vZHVsZSxcblxuICAgIE1hdFByb2dyZXNzQmFyTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGVcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgVG9vbGJhckNvbXBvbmVudCxcbiAgICBNb2RhbFRvb2xiYXJDb21wb25lbnRcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIFRvb2xiYXJDb21wb25lbnQsXG4gICAgTW9kYWxUb29sYmFyQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgU2hhcmVkVG9vbGJhck1vZHVsZSB7XG5cbn1cbiJdfQ==
@@ -0,0 +1,57 @@
1
+ import { Component } from '@angular/core';
2
+ import { Subject, timer } from 'rxjs';
3
+ import { HttpEventType, HttpResponse } from '@angular/common/http';
4
+ import { map, takeUntil } from 'rxjs/operators';
5
+ import { sleep } from '../../functions';
6
+ import { FilesUtils } from '../../file/file.utils';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@ionic/angular";
9
+ import * as i2 from "@ngx-translate/core";
10
+ export class UploadFileTestingPage {
11
+ constructor(popoverController) {
12
+ this.popoverController = popoverController;
13
+ }
14
+ async showPopover(event, opts) {
15
+ const { data } = await FilesUtils.showUploadPopover(this.popoverController, event, {
16
+ uploadFn: (file) => this.uploadFile(file),
17
+ deleteFn: (file) => this.deleteFile(file),
18
+ ...opts
19
+ });
20
+ const filenames = (data || []).map(file => file.response?.body?.finalName);
21
+ console.info('Popover result: ', filenames);
22
+ }
23
+ /**
24
+ * Simulate a upload function, with progression
25
+ * @param file
26
+ */
27
+ uploadFile(file) {
28
+ const $stop = new Subject();
29
+ const loadStep = file.size / 10;
30
+ let loaded = 0;
31
+ return timer(0, 250)
32
+ .pipe(takeUntil($stop), map(() => {
33
+ loaded += loadStep;
34
+ // Return progression
35
+ if (loaded < file.size) {
36
+ //return {type: HttpEventType.UploadProgress, total: file.size, loaded };
37
+ return { type: HttpEventType.UploadProgress, loaded: -1 };
38
+ }
39
+ // Stop the timer
40
+ setTimeout(() => $stop.next(), 100);
41
+ // Return final response
42
+ return new HttpResponse({ body: { finalName: file.name } });
43
+ }));
44
+ }
45
+ async deleteFile(file) {
46
+ console.info('[testing] Simulate remote deletion... (waiting 2s)');
47
+ await sleep(2000);
48
+ return true;
49
+ }
50
+ }
51
+ UploadFileTestingPage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: UploadFileTestingPage, deps: [{ token: i1.PopoverController }], target: i0.ɵɵFactoryTarget.Component });
52
+ UploadFileTestingPage.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.5", type: UploadFileTestingPage, selector: "upload-file-testing", ngImport: i0, template: "<ion-toolbar color=\"primary\">\n <ion-title>File upload</ion-title>\n</ion-toolbar>\n\n<ion-content class=\"ion-padding\">\n\n <p>Popover examples:</p>\n\n <ion-button (click)=\"showPopover($event, {uniqueFile: true})\" color=\"tertiary\">\n <span translate>COMMON.BTN_IMPORT</span>&nbsp;(unique file)\n </ion-button>\n\n <ion-button (click)=\"showPopover($event, {uniqueFile: false})\" color=\"tertiary\">\n <span translate>COMMON.BTN_IMPORT</span>&nbsp;(many files)\n </ion-button>\n\n <ion-button (click)=\"showPopover($event, {uniqueFile: false, instantUpload: true})\" color=\"tertiary\">\n <span translate>COMMON.BTN_IMPORT</span>&nbsp;(instant upload)\n </ion-button>\n\n <ion-button (click)=\"showPopover($event, {uniqueFile: false, instantUpload: true, maxParallelUpload: 3})\" color=\"tertiary\">\n <span translate>COMMON.BTN_IMPORT</span>&nbsp;(max parallel upload)\n </ion-button>\n\n</ion-content>\n", dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { 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"] }] });
53
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: UploadFileTestingPage, decorators: [{
54
+ type: Component,
55
+ args: [{ selector: 'upload-file-testing', template: "<ion-toolbar color=\"primary\">\n <ion-title>File upload</ion-title>\n</ion-toolbar>\n\n<ion-content class=\"ion-padding\">\n\n <p>Popover examples:</p>\n\n <ion-button (click)=\"showPopover($event, {uniqueFile: true})\" color=\"tertiary\">\n <span translate>COMMON.BTN_IMPORT</span>&nbsp;(unique file)\n </ion-button>\n\n <ion-button (click)=\"showPopover($event, {uniqueFile: false})\" color=\"tertiary\">\n <span translate>COMMON.BTN_IMPORT</span>&nbsp;(many files)\n </ion-button>\n\n <ion-button (click)=\"showPopover($event, {uniqueFile: false, instantUpload: true})\" color=\"tertiary\">\n <span translate>COMMON.BTN_IMPORT</span>&nbsp;(instant upload)\n </ion-button>\n\n <ion-button (click)=\"showPopover($event, {uniqueFile: false, instantUpload: true, maxParallelUpload: 3})\" color=\"tertiary\">\n <span translate>COMMON.BTN_IMPORT</span>&nbsp;(max parallel upload)\n </ion-button>\n\n</ion-content>\n" }]
56
+ }], ctorParameters: function () { return [{ type: i1.PopoverController }]; } });
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUudGVzdGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3VwbG9hZC1maWxlL3Rlc3RpbmcvdXBsb2FkLWZpbGUudGVzdGluZy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3VwbG9hZC1maWxlL3Rlc3RpbmcvdXBsb2FkLWZpbGUudGVzdGluZy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHeEMsT0FBTyxFQUFhLE9BQU8sRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRSxPQUFPLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV0QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7Ozs7QUFNakQsTUFBTSxPQUFPLHFCQUFxQjtJQUVoQyxZQUNVLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBRTlDLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQVksRUFBRSxJQUE2QztRQUMzRSxNQUFNLEVBQUMsSUFBSSxFQUFDLEdBQUcsTUFBTSxVQUFVLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBRTtZQUM3RSxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ3pDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDekMsR0FBRyxJQUFJO1NBQ1IsQ0FBQyxDQUFDO1FBRUwsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDM0UsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLElBQVU7UUFDbkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNoQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO2FBQ2pCLElBQUksQ0FDSCxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQ2hCLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxNQUFNLElBQUksUUFBUSxDQUFDO1lBRW5CLHFCQUFxQjtZQUNyQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUN0Qix5RUFBeUU7Z0JBQ3pFLE9BQU8sRUFBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUMxRDtZQUVELGlCQUFpQjtZQUNqQixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRXBDLHdCQUF3QjtZQUN4QixPQUFPLElBQUksWUFBWSxDQUFDLEVBQUMsSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFHLElBQUksQ0FBQyxJQUFJLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUVMLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLElBQVU7UUFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7a0hBcERVLHFCQUFxQjtzR0FBckIscUJBQXFCLDJEQ2RsQyx5NkJBeUJBOzJGRFhhLHFCQUFxQjtrQkFKakMsU0FBUzsrQkFDRSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BvcG92ZXJDb250cm9sbGVyfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge1VwbG9hZEZpbGVQb3BvdmVyT3B0aW9uc30gZnJvbSAnLi4vdXBsb2FkLWZpbGUtcG9wb3Zlci5jb21wb25lbnQnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0LCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0h0dHBFdmVudFR5cGUsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHttYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtzbGVlcH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7RmlsZUV2ZW50fSBmcm9tICcuLi91cGxvYWQtZmlsZS5tb2RlbCc7XG5pbXBvcnQge0ZpbGVzVXRpbHN9IGZyb20gJy4uLy4uL2ZpbGUvZmlsZS51dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3VwbG9hZC1maWxlLXRlc3RpbmcnLFxuICB0ZW1wbGF0ZVVybDogJ3VwbG9hZC1maWxlLnRlc3RpbmcuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVXBsb2FkRmlsZVRlc3RpbmdQYWdlICB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBwb3BvdmVyQ29udHJvbGxlcjogUG9wb3ZlckNvbnRyb2xsZXJcbiAgKSB7XG4gIH1cblxuICBhc3luYyBzaG93UG9wb3ZlcihldmVudDogRXZlbnQsIG9wdHM/OiBQYXJ0aWFsPFVwbG9hZEZpbGVQb3BvdmVyT3B0aW9uczxhbnk+Pikge1xuICAgIGNvbnN0IHtkYXRhfSA9IGF3YWl0IEZpbGVzVXRpbHMuc2hvd1VwbG9hZFBvcG92ZXIodGhpcy5wb3BvdmVyQ29udHJvbGxlciwgZXZlbnQsIHtcbiAgICAgICAgdXBsb2FkRm46IChmaWxlKSA9PiB0aGlzLnVwbG9hZEZpbGUoZmlsZSksXG4gICAgICAgIGRlbGV0ZUZuOiAoZmlsZSkgPT4gdGhpcy5kZWxldGVGaWxlKGZpbGUpLFxuICAgICAgICAuLi5vcHRzXG4gICAgICB9KTtcblxuICAgIGNvbnN0IGZpbGVuYW1lcyA9IChkYXRhIHx8IFtdKS5tYXAoZmlsZSA9PiBmaWxlLnJlc3BvbnNlPy5ib2R5Py5maW5hbE5hbWUpO1xuICAgIGNvbnNvbGUuaW5mbygnUG9wb3ZlciByZXN1bHQ6ICcsIGZpbGVuYW1lcyk7XG4gIH1cblxuICAvKipcbiAgICogU2ltdWxhdGUgYSB1cGxvYWQgZnVuY3Rpb24sIHdpdGggcHJvZ3Jlc3Npb25cbiAgICogQHBhcmFtIGZpbGVcbiAgICovXG4gIHVwbG9hZEZpbGUoZmlsZTogRmlsZSk6IE9ic2VydmFibGU8RmlsZUV2ZW50PHsgZmluYWxOYW1lOiBzdHJpbmc7IH0+PiB7XG4gICAgY29uc3QgJHN0b3AgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIGNvbnN0IGxvYWRTdGVwID0gZmlsZS5zaXplIC8gMTA7XG4gICAgbGV0IGxvYWRlZCA9IDA7XG4gICAgcmV0dXJuIHRpbWVyKDAsIDI1MClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwoJHN0b3ApLFxuICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgIGxvYWRlZCArPSBsb2FkU3RlcDtcblxuICAgICAgICAgIC8vIFJldHVybiBwcm9ncmVzc2lvblxuICAgICAgICAgIGlmIChsb2FkZWQgPCBmaWxlLnNpemUpIHtcbiAgICAgICAgICAgIC8vcmV0dXJuIHt0eXBlOiBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzLCB0b3RhbDogZmlsZS5zaXplLCBsb2FkZWQgfTtcbiAgICAgICAgICAgIHJldHVybiB7dHlwZTogSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcywgbG9hZGVkOiAtMSB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFN0b3AgdGhlIHRpbWVyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiAkc3RvcC5uZXh0KCksIDEwMCk7XG5cbiAgICAgICAgICAvLyBSZXR1cm4gZmluYWwgcmVzcG9uc2VcbiAgICAgICAgICByZXR1cm4gbmV3IEh0dHBSZXNwb25zZSh7Ym9keToge2ZpbmFsTmFtZSA6IGZpbGUubmFtZX19KTtcbiAgICAgICAgfSlcbiAgICAgIClcblxuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmlsZShmaWxlOiBGaWxlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5pbmZvKCdbdGVzdGluZ10gU2ltdWxhdGUgcmVtb3RlIGRlbGV0aW9uLi4uICh3YWl0aW5nIDJzKScpO1xuICAgIGF3YWl0IHNsZWVwKDIwMDApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iLCI8aW9uLXRvb2xiYXIgY29sb3I9XCJwcmltYXJ5XCI+XG4gIDxpb24tdGl0bGU+RmlsZSB1cGxvYWQ8L2lvbi10aXRsZT5cbjwvaW9uLXRvb2xiYXI+XG5cbjxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG5cbiAgPHA+UG9wb3ZlciBleGFtcGxlczo8L3A+XG5cbiAgPGlvbi1idXR0b24gKGNsaWNrKT1cInNob3dQb3BvdmVyKCRldmVudCwge3VuaXF1ZUZpbGU6IHRydWV9KVwiIGNvbG9yPVwidGVydGlhcnlcIj5cbiAgICA8c3BhbiB0cmFuc2xhdGU+Q09NTU9OLkJUTl9JTVBPUlQ8L3NwYW4+Jm5ic3A7KHVuaXF1ZSBmaWxlKVxuICA8L2lvbi1idXR0b24+XG5cbiAgPGlvbi1idXR0b24gKGNsaWNrKT1cInNob3dQb3BvdmVyKCRldmVudCwge3VuaXF1ZUZpbGU6IGZhbHNlfSlcIiBjb2xvcj1cInRlcnRpYXJ5XCI+XG4gICAgPHNwYW4gdHJhbnNsYXRlPkNPTU1PTi5CVE5fSU1QT1JUPC9zcGFuPiZuYnNwOyhtYW55IGZpbGVzKVxuICA8L2lvbi1idXR0b24+XG5cbiAgPGlvbi1idXR0b24gKGNsaWNrKT1cInNob3dQb3BvdmVyKCRldmVudCwge3VuaXF1ZUZpbGU6IGZhbHNlLCBpbnN0YW50VXBsb2FkOiB0cnVlfSlcIiBjb2xvcj1cInRlcnRpYXJ5XCI+XG4gICAgPHNwYW4gdHJhbnNsYXRlPkNPTU1PTi5CVE5fSU1QT1JUPC9zcGFuPiZuYnNwOyhpbnN0YW50IHVwbG9hZClcbiAgPC9pb24tYnV0dG9uPlxuXG4gIDxpb24tYnV0dG9uIChjbGljayk9XCJzaG93UG9wb3ZlcigkZXZlbnQsIHt1bmlxdWVGaWxlOiBmYWxzZSwgaW5zdGFudFVwbG9hZDogdHJ1ZSwgbWF4UGFyYWxsZWxVcGxvYWQ6IDN9KVwiIGNvbG9yPVwidGVydGlhcnlcIj5cbiAgICA8c3BhbiB0cmFuc2xhdGU+Q09NTU9OLkJUTl9JTVBPUlQ8L3NwYW4+Jm5ic3A7KG1heCBwYXJhbGxlbCB1cGxvYWQpXG4gIDwvaW9uLWJ1dHRvbj5cblxuPC9pb24tY29udGVudD5cbiJdfQ==
@@ -0,0 +1,45 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { RouterModule } from '@angular/router';
3
+ import { IonicModule } from '@ionic/angular';
4
+ import { CommonModule } from '@angular/common';
5
+ import { TranslateModule } from '@ngx-translate/core';
6
+ import { UploadFileTestingPage } from './upload-file.testing';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@ngx-translate/core";
9
+ import * as i2 from "@angular/router";
10
+ const routes = [
11
+ {
12
+ path: 'upload-file',
13
+ pathMatch: 'full',
14
+ component: UploadFileTestingPage
15
+ }
16
+ ];
17
+ export class UploadFileTestingModule {
18
+ }
19
+ UploadFileTestingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: UploadFileTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
20
+ UploadFileTestingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.5", ngImport: i0, type: UploadFileTestingModule, declarations: [UploadFileTestingPage], imports: [CommonModule,
21
+ IonicModule, i1.TranslateModule, i2.RouterModule], exports: [RouterModule,
22
+ UploadFileTestingPage] });
23
+ UploadFileTestingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: UploadFileTestingModule, imports: [CommonModule,
24
+ IonicModule,
25
+ TranslateModule.forChild(),
26
+ RouterModule.forChild(routes), RouterModule] });
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: UploadFileTestingModule, decorators: [{
28
+ type: NgModule,
29
+ args: [{
30
+ imports: [
31
+ CommonModule,
32
+ IonicModule,
33
+ TranslateModule.forChild(),
34
+ RouterModule.forChild(routes)
35
+ ],
36
+ declarations: [
37
+ UploadFileTestingPage
38
+ ],
39
+ exports: [
40
+ RouterModule,
41
+ UploadFileTestingPage
42
+ ]
43
+ }]
44
+ }] });
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUudGVzdGluZy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC91cGxvYWQtZmlsZS90ZXN0aW5nL3VwbG9hZC1maWxlLnRlc3RpbmcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFDLFlBQVksRUFBUyxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDOzs7O0FBRTVELE1BQU0sTUFBTSxHQUFXO0lBQ3JCO1FBQ0UsSUFBSSxFQUFFLGFBQWE7UUFDbkIsU0FBUyxFQUFFLE1BQU07UUFDakIsU0FBUyxFQUFFLHFCQUFxQjtLQUNqQztDQUNGLENBQUM7QUFpQkYsTUFBTSxPQUFPLHVCQUF1Qjs7b0hBQXZCLHVCQUF1QjtxSEFBdkIsdUJBQXVCLGlCQVBoQyxxQkFBcUIsYUFOckIsWUFBWTtRQUNaLFdBQVcsa0RBUVgsWUFBWTtRQUNaLHFCQUFxQjtxSEFHWix1QkFBdUIsWUFiaEMsWUFBWTtRQUNaLFdBQVc7UUFDWCxlQUFlLENBQUMsUUFBUSxFQUFFO1FBQzFCLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBTTdCLFlBQVk7MkZBSUgsdUJBQXVCO2tCQWZuQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsZUFBZSxDQUFDLFFBQVEsRUFBRTt3QkFDMUIsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7cUJBQzlCO29CQUNELFlBQVksRUFBRTt3QkFDWixxQkFBcUI7cUJBQ3RCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLHFCQUFxQjtxQkFDdEI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Um91dGVyTW9kdWxlLCBSb3V0ZXN9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0lvbmljTW9kdWxlfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7VXBsb2FkRmlsZVRlc3RpbmdQYWdlfSBmcm9tICcuL3VwbG9hZC1maWxlLnRlc3RpbmcnO1xuXG5jb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAge1xuICAgIHBhdGg6ICd1cGxvYWQtZmlsZScsXG4gICAgcGF0aE1hdGNoOiAnZnVsbCcsXG4gICAgY29tcG9uZW50OiBVcGxvYWRGaWxlVGVzdGluZ1BhZ2VcbiAgfVxuXTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBJb25pY01vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUuZm9yQ2hpbGQoKSxcbiAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQocm91dGVzKVxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBVcGxvYWRGaWxlVGVzdGluZ1BhZ2VcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIFJvdXRlck1vZHVsZSxcbiAgICBVcGxvYWRGaWxlVGVzdGluZ1BhZ2VcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBVcGxvYWRGaWxlVGVzdGluZ01vZHVsZSB7XG59XG4iXX0=
@@ -0,0 +1,97 @@
1
+ import { ChangeDetectionStrategy, Component, Input, ViewChild, ViewEncapsulation } from '@angular/core';
2
+ import { isEmptyArray, isNotEmptyArray, isNotNilOrBlank } from '../functions';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@ionic/angular";
5
+ import * as i2 from "@ngx-translate/core";
6
+ import * as i3 from "@angular/common";
7
+ import * as i4 from "./upload-file.component";
8
+ export class UploadFilePopover {
9
+ constructor(popoverController, translate, cd) {
10
+ this.popoverController = popoverController;
11
+ this.translate = translate;
12
+ this.cd = cd;
13
+ this.uniqueFile = false;
14
+ this.instantUpload = false;
15
+ this.importing = false;
16
+ }
17
+ get files() {
18
+ return this.uploader.files;
19
+ }
20
+ get disabled() {
21
+ return this.importing || isEmptyArray(this.files);
22
+ }
23
+ get valid() {
24
+ return isNotEmptyArray(this.files);
25
+ }
26
+ async onValidate(event) {
27
+ event?.stopPropagation();
28
+ // Avoid multiple call
29
+ if (this.importing)
30
+ return;
31
+ console.debug('[upload-file-popover] Validate form: will upload all files...');
32
+ try {
33
+ this.importing = true;
34
+ this.resetError();
35
+ try {
36
+ // Wait processing files finished
37
+ await this.uploader.waitIdle();
38
+ // upload all files
39
+ await this.uploader.uploadFiles();
40
+ const files = (this.uploader.processedFiles || [])
41
+ .filter(file => !file.deleting); // Remove deleting file (deletion in progress)
42
+ // Nothing to upload: close popover
43
+ if (isEmptyArray(files))
44
+ return this.cancel();
45
+ // check errors
46
+ const errors = files.map(file => file.error).filter(isNotNilOrBlank);
47
+ // If error: stop
48
+ if (errors.length) {
49
+ errors.forEach((error) => console.error(error));
50
+ throw { message: 'FILE.UPLOAD.ERROR' };
51
+ }
52
+ // return files
53
+ await this.popoverController.dismiss(files);
54
+ }
55
+ catch (err) {
56
+ this.error = (err && err.message) || err;
57
+ }
58
+ }
59
+ finally {
60
+ this.importing = false;
61
+ this.cd.markForCheck();
62
+ }
63
+ }
64
+ cancel() {
65
+ return this.popoverController.dismiss();
66
+ }
67
+ resetError() {
68
+ if (this.error) {
69
+ this.error = null;
70
+ this.cd.markForCheck();
71
+ }
72
+ }
73
+ }
74
+ UploadFilePopover.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: UploadFilePopover, deps: [{ token: i1.PopoverController }, { token: i2.TranslateService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
75
+ UploadFilePopover.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.5", type: UploadFilePopover, selector: "app-upload-file-popover", inputs: { fileExtension: "fileExtension", title: "title", uniqueFile: "uniqueFile", instantUpload: "instantUpload", uploadFn: "uploadFn", deleteFn: "deleteFn", maxParallelUpload: "maxParallelUpload" }, viewQueries: [{ propertyName: "uploader", first: true, predicate: ["uploader"], descendants: true, static: true }], ngImport: i0, template: "\n<ion-content class=\"ion-no-padding\" scrollY=\"false\">\n <div class=\"modal-content\">\n <app-upload-file\n #uploader\n [uploadFn]=\"uploadFn\"\n [deleteFn]=\"deleteFn\"\n [fileExtension]=\"fileExtension\"\n [instantUpload]=\"instantUpload\"\n [uniqueFile]=\"uniqueFile\"\n [maxParallelUpload]=\"maxParallelUpload\"\n ></app-upload-file>\n </div>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col>\n <div *ngIf=\"importing\" class=\"importing-info\">\n <ion-text color=\"medium\"><small translate>FILE.UPLOAD.IMPORTING</small></ion-text>\n &nbsp;<ion-spinner name=\"dots\" color=\"accent\"></ion-spinner>\n </div>\n <ion-item *ngIf=\"error\" lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"ion-text-wrap\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n </ion-col>\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 >\n <ion-label translate>COMMON.BTN_IMPORT</ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", styles: [".importing-info{padding-inline-start:var(--ion-padding);display:inline-flex;flex-wrap:nowrap;padding-top:8px}\n"], dependencies: [{ 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", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { 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.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.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i4.UploadFileComponent, selector: "app-upload-file", inputs: ["fileExtension", "uniqueFile", "instantUpload", "uploadFn", "deleteFn", "maxParallelUpload"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: UploadFilePopover, decorators: [{
77
+ type: Component,
78
+ args: [{ selector: 'app-upload-file-popover', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n<ion-content class=\"ion-no-padding\" scrollY=\"false\">\n <div class=\"modal-content\">\n <app-upload-file\n #uploader\n [uploadFn]=\"uploadFn\"\n [deleteFn]=\"deleteFn\"\n [fileExtension]=\"fileExtension\"\n [instantUpload]=\"instantUpload\"\n [uniqueFile]=\"uniqueFile\"\n [maxParallelUpload]=\"maxParallelUpload\"\n ></app-upload-file>\n </div>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col>\n <div *ngIf=\"importing\" class=\"importing-info\">\n <ion-text color=\"medium\"><small translate>FILE.UPLOAD.IMPORTING</small></ion-text>\n &nbsp;<ion-spinner name=\"dots\" color=\"accent\"></ion-spinner>\n </div>\n <ion-item *ngIf=\"error\" lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"ion-text-wrap\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n </ion-col>\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 >\n <ion-label translate>COMMON.BTN_IMPORT</ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", styles: [".importing-info{padding-inline-start:var(--ion-padding);display:inline-flex;flex-wrap:nowrap;padding-top:8px}\n"] }]
79
+ }], ctorParameters: function () { return [{ type: i1.PopoverController }, { type: i2.TranslateService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { uploader: [{
80
+ type: ViewChild,
81
+ args: ['uploader', { static: true }]
82
+ }], fileExtension: [{
83
+ type: Input
84
+ }], title: [{
85
+ type: Input
86
+ }], uniqueFile: [{
87
+ type: Input
88
+ }], instantUpload: [{
89
+ type: Input
90
+ }], uploadFn: [{
91
+ type: Input
92
+ }], deleteFn: [{
93
+ type: Input
94
+ }], maxParallelUpload: [{
95
+ type: Input
96
+ }] } });
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUtcG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC91cGxvYWQtZmlsZS91cGxvYWQtZmlsZS1wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3VwbG9hZC1maWxlL3VwbG9hZC1maWxlLXBvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUl6SCxPQUFPLEVBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUMsTUFBTSxjQUFjLENBQUM7Ozs7OztBQXNCNUUsTUFBTSxPQUFPLGlCQUFpQjtJQTJCNUIsWUFBc0IsaUJBQW9DLEVBQ3BDLFNBQTJCLEVBQzNCLEVBQXFCO1FBRnJCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUF2QmxDLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFLL0IsY0FBUyxHQUFHLEtBQUssQ0FBQztJQWtCbEIsQ0FBQztJQWZELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQU9ELEtB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dG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UG9wb3ZlckNvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7VXBsb2FkRmlsZUNvbXBvbmVudH0gZnJvbSAnLi91cGxvYWQtZmlsZS5jb21wb25lbnQnO1xuaW1wb3J0IHtGaWxlRGVsZXRlRm4sIEZpbGVVcGxvYWRGbiwgVXBsb2FkRmlsZX0gZnJvbSAnLi91cGxvYWQtZmlsZS5tb2RlbCc7XG5pbXBvcnQge2lzRW1wdHlBcnJheSwgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbE9yQmxhbmt9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVwbG9hZEZpbGVQb3BvdmVyT3B0aW9uczxUPiB7XG4gIHRpdGxlPzogc3RyaW5nO1xuXG4gIHVwbG9hZEZuOiBGaWxlVXBsb2FkRm48VD47XG4gIGRlbGV0ZUZuPzogRmlsZURlbGV0ZUZuPGFueT47XG5cbiAgaW5zdGFudFVwbG9hZD86IGJvb2xlYW47XG4gIHVuaXF1ZUZpbGU/OiBib29sZWFuO1xuICBmaWxlRXh0ZW5zaW9uPzogc3RyaW5nO1xuICBtYXhQYXJhbGxlbFVwbG9hZD86IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXVwbG9hZC1maWxlLXBvcG92ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLWZpbGUtcG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3VwbG9hZC1maWxlLXBvcG92ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFVwbG9hZEZpbGVQb3BvdmVyIGltcGxlbWVudHMgVXBsb2FkRmlsZVBvcG92ZXJPcHRpb25zPGFueT4ge1xuXG4gIEBWaWV3Q2hpbGQoJ3VwbG9hZGVyJywgeyBzdGF0aWM6IHRydWUgfSkgdXBsb2FkZXI6IFVwbG9hZEZpbGVDb21wb25lbnQ7XG5cbiAgQElucHV0KCkgZmlsZUV4dGVuc2lvbjogc3RyaW5nO1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSB1bmlxdWVGaWxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGluc3RhbnRVcGxvYWQgPSBmYWxzZTtcbiAgQElucHV0KCkgdXBsb2FkRm46IEZpbGVVcGxvYWRGbjxhbnk+O1xuICBASW5wdXQoKSBkZWxldGVGbjogRmlsZURlbGV0ZUZuPGFueT47XG4gIEBJbnB1dCgpIG1heFBhcmFsbGVsVXBsb2FkOiBudW1iZXI7XG5cbiAgaW1wb3J0aW5nID0gZmFsc2U7XG4gIGVycm9yOiBzdHJpbmc7XG5cbiAgZ2V0IGZpbGVzKCk6IFVwbG9hZEZpbGU8YW55PltdIHtcbiAgICByZXR1cm4gdGhpcy51cGxvYWRlci5maWxlcztcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbXBvcnRpbmcgfHwgaXNFbXB0eUFycmF5KHRoaXMuZmlsZXMpO1xuICB9XG5cbiAgZ2V0IHZhbGlkKCkge1xuICAgIHJldHVybiBpc05vdEVtcHR5QXJyYXkodGhpcy5maWxlcyk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcG9wb3ZlckNvbnRyb2xsZXI6IFBvcG92ZXJDb250cm9sbGVyLFxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gIH1cblxuICBhc3luYyBvblZhbGlkYXRlKGV2ZW50OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIEF2b2lkIG11bHRpcGxlIGNhbGxcbiAgICBpZiAodGhpcy5pbXBvcnRpbmcpIHJldHVybjtcblxuICAgIGNvbnNvbGUuZGVidWcoJ1t1cGxvYWQtZmlsZS1wb3BvdmVyXSBWYWxpZGF0ZSBmb3JtOiB3aWxsIHVwbG9hZCBhbGwgZmlsZXMuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmltcG9ydGluZyA9IHRydWU7XG4gICAgICB0aGlzLnJlc2V0RXJyb3IoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gV2FpdCBwcm9jZXNzaW5nIGZpbGVzIGZpbmlzaGVkXG4gICAgICAgIGF3YWl0IHRoaXMudXBsb2FkZXIud2FpdElkbGUoKTtcblxuICAgICAgICAvLyB1cGxvYWQgYWxsIGZpbGVzXG4gICAgICAgIGF3YWl0IHRoaXMudXBsb2FkZXIudXBsb2FkRmlsZXMoKTtcblxuICAgICAgICBjb25zdCBmaWxlczogVXBsb2FkRmlsZTxhbnk+W10gPSAodGhpcy51cGxvYWRlci5wcm9jZXNzZWRGaWxlcyB8fCBbXSlcbiAgICAgICAgICAuZmlsdGVyKGZpbGUgPT4gIWZpbGUuZGVsZXRpbmcpOyAvLyBSZW1vdmUgZGVsZXRpbmcgZmlsZSAoZGVsZXRpb24gaW4gcHJvZ3Jlc3MpXG5cbiAgICAgICAgLy8gTm90aGluZyB0byB1cGxvYWQ6IGNsb3NlIHBvcG92ZXJcbiAgICAgICAgaWYgKGlzRW1wdHlBcnJheShmaWxlcykpIHJldHVybiB0aGlzLmNhbmNlbCgpO1xuXG4gICAgICAgIC8vIGNoZWNrIGVycm9yc1xuICAgICAgICBjb25zdCBlcnJvcnMgPSBmaWxlcy5tYXAoZmlsZSA9PiBmaWxlLmVycm9yKS5maWx0ZXIoaXNOb3ROaWxPckJsYW5rKTtcblxuICAgICAgICAvLyBJZiBlcnJvcjogc3RvcFxuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgIGVycm9ycy5mb3JFYWNoKChlcnJvcikgPT4gY29uc29sZS5lcnJvcihlcnJvcikpO1xuICAgICAgICAgIHRocm93IHttZXNzYWdlOiAnRklMRS5VUExPQUQuRVJST1InfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJldHVybiBmaWxlc1xuICAgICAgICBhd2FpdCB0aGlzLnBvcG92ZXJDb250cm9sbGVyLmRpc21pc3MoZmlsZXMpO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmVycm9yID0gKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmltcG9ydGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucG9wb3ZlckNvbnRyb2xsZXIuZGlzbWlzcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0RXJyb3IoKSB7XG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cbn1cbiIsIlxuPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIiBzY3JvbGxZPVwiZmFsc2VcIj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cbiAgICA8YXBwLXVwbG9hZC1maWxlXG4gICAgICAjdXBsb2FkZXJcbiAgICAgIFt1cGxvYWRGbl09XCJ1cGxvYWRGblwiXG4gICAgICBbZGVsZXRlRm5dPVwiZGVsZXRlRm5cIlxuICAgICAgW2ZpbGVFeHRlbnNpb25dPVwiZmlsZUV4dGVuc2lvblwiXG4gICAgICBbaW5zdGFudFVwbG9hZF09XCJpbnN0YW50VXBsb2FkXCJcbiAgICAgIFt1bmlxdWVGaWxlXT1cInVuaXF1ZUZpbGVcIlxuICAgICAgW21heFBhcmFsbGVsVXBsb2FkXT1cIm1heFBhcmFsbGVsVXBsb2FkXCJcbiAgICA+PC9hcHAtdXBsb2FkLWZpbGU+XG4gIDwvZGl2PlxuPC9pb24tY29udGVudD5cblxuPGlvbi1mb290ZXI+XG4gIDxpb24tdG9vbGJhcj5cbiAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCIgbm93cmFwPlxuICAgICAgPGlvbi1jb2w+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpbXBvcnRpbmdcIiBjbGFzcz1cImltcG9ydGluZy1pbmZvXCI+XG4gICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+PHNtYWxsIHRyYW5zbGF0ZT5GSUxFLlVQTE9BRC5JTVBPUlRJTkc8L3NtYWxsPjwvaW9uLXRleHQ+XG4gICAgICAgICAgJm5ic3A7PGlvbi1zcGlubmVyIG5hbWU9XCJkb3RzXCIgY29sb3I9XCJhY2NlbnRcIj48L2lvbi1zcGlubmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGlvbi1pdGVtICpuZ0lmPVwiZXJyb3JcIiBsaW5lcz1cIm5vbmVcIj5cbiAgICAgICAgICA8aW9uLWljb24gY29sb3I9XCJkYW5nZXJcIiBzbG90PVwic3RhcnRcIiBuYW1lPVwiYWxlcnQtY2lyY2xlXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwiZGFuZ2VyXCIgY2xhc3M9XCJpb24tdGV4dC13cmFwXCIgW2lubmVySFRNTF09XCJlcnJvciB8IHRyYW5zbGF0ZVwiPjwvaW9uLWxhYmVsPlxuICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgPC9pb24tY29sPlxuICAgICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYXJrXCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+XG4gICAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkJUTl9DQU5DRUw8L2lvbi1sYWJlbD5cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIFtmaWxsXT1cImRpc2FibGVkID8gJ2NsZWFyJyA6ICdzb2xpZCdcIlxuICAgICAgICAgIChjbGljayk9XCJvblZhbGlkYXRlKCRldmVudClcIlxuICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvblZhbGlkYXRlKCRldmVudClcIlxuICAgICAgICAgIGNvbG9yPVwidGVydGlhcnlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5DT01NT04uQlROX0lNUE9SVDwvaW9uLWxhYmVsPlxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2lvbi1jb2w+XG4gICAgPC9pb24tcm93PlxuICA8L2lvbi10b29sYmFyPlxuPC9pb24tZm9vdGVyPlxuIl19