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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (633) hide show
  1. package/esm2022/public_api.mjs +337 -0
  2. package/{esm2020 → esm2022}/src/app/admin/admin-routing.module.mjs +8 -8
  3. package/{esm2020 → esm2022}/src/app/admin/admin.module.mjs +11 -11
  4. package/esm2022/src/app/admin/services/filter/person.filter.mjs +68 -0
  5. package/esm2022/src/app/admin/services/person.service.mjs +174 -0
  6. package/esm2022/src/app/admin/services/validator/person.validator.mjs +72 -0
  7. package/esm2022/src/app/admin/users/users.mjs +273 -0
  8. package/esm2022/src/app/admin/users/users.module.mjs +58 -0
  9. package/{esm2020 → esm2022}/src/app/core/about/about.modal.mjs +18 -5
  10. package/{esm2020 → esm2022}/src/app/core/about/about.module.mjs +9 -9
  11. package/{esm2020 → esm2022}/src/app/core/account/account.module.mjs +22 -22
  12. package/esm2022/src/app/core/account/account.page.mjs +335 -0
  13. package/esm2022/src/app/core/account/new-token.modal.mjs +125 -0
  14. package/esm2022/src/app/core/account/token.table.mjs +141 -0
  15. package/esm2022/src/app/core/auth/auth.form.mjs +140 -0
  16. package/esm2022/src/app/core/auth/auth.modal.mjs +76 -0
  17. package/{esm2020 → esm2022}/src/app/core/auth/auth.module.mjs +16 -16
  18. package/{esm2020 → esm2022}/src/app/core/core.module.mjs +87 -87
  19. package/{esm2020 → esm2022}/src/app/core/core.testing.module.mjs +23 -23
  20. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +109 -0
  21. package/{esm2020 → esm2022}/src/app/core/form/buttons/form-buttons-bar.module.mjs +10 -10
  22. package/esm2022/src/app/core/form/entity/editor.class.mjs +713 -0
  23. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +436 -0
  24. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +724 -0
  25. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +24 -0
  26. package/{esm2020 → esm2022}/src/app/core/form/entity/entity.module.mjs +11 -11
  27. package/esm2022/src/app/core/form/form.class.mjs +353 -0
  28. package/{esm2020 → esm2022}/src/app/core/form/form.module.mjs +30 -30
  29. package/{esm2020 → esm2022}/src/app/core/form/form.utils.mjs +69 -60
  30. package/esm2022/src/app/core/form/list/list.form.mjs +233 -0
  31. package/{esm2020 → esm2022}/src/app/core/form/list/list.module.mjs +10 -10
  32. package/esm2022/src/app/core/form/properties/properties.form.mjs +143 -0
  33. package/{esm2020 → esm2022}/src/app/core/form/properties/properties.module.mjs +13 -13
  34. package/esm2022/src/app/core/form/properties/properties.table.mjs +269 -0
  35. package/esm2022/src/app/core/form/properties/property.validator.mjs +24 -0
  36. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +95 -0
  37. package/{esm2020 → esm2022}/src/app/core/form/properties/testing/properties-form.testing.module.mjs +11 -11
  38. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +73 -0
  39. package/{esm2020 → esm2022}/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +10 -10
  40. package/esm2022/src/app/core/form/text-popover/text-form.component.mjs +97 -0
  41. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +152 -0
  42. package/{esm2020 → esm2022}/src/app/core/form/text-popover/text-popover.module.mjs +12 -12
  43. package/{esm2020 → esm2022}/src/app/core/graphql/graphql.module.mjs +5 -5
  44. package/esm2022/src/app/core/graphql/graphql.service.mjs +787 -0
  45. package/{esm2020 → esm2022}/src/app/core/graphql/graphql.utils.mjs +2 -1
  46. package/esm2022/src/app/core/home/home.mjs +283 -0
  47. package/esm2022/src/app/core/home/home.module.mjs +51 -0
  48. package/esm2022/src/app/core/icon/icon.component.mjs +40 -0
  49. package/{esm2020 → esm2022}/src/app/core/icon/icon.module.mjs +7 -7
  50. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +358 -0
  51. package/{esm2020 → esm2022}/src/app/core/install/install-upgrade-card.module.mjs +10 -10
  52. package/esm2022/src/app/core/menu/menu.component.mjs +260 -0
  53. package/esm2022/src/app/core/menu/menu.model.mjs +268 -0
  54. package/esm2022/src/app/core/menu/menu.module.mjs +52 -0
  55. package/esm2022/src/app/core/menu/menu.service.mjs +665 -0
  56. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +109 -0
  57. package/{esm2020 → esm2022}/src/app/core/menu/testing/menu-other.testing.mjs +4 -4
  58. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +122 -0
  59. package/{esm2020 → esm2022}/src/app/core/menu/testing/menu.testing.module.mjs +12 -12
  60. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +29 -0
  61. package/{esm2020 → esm2022}/src/app/core/offline/update-offline-mode-card.module.mjs +10 -10
  62. package/esm2022/src/app/core/peer/select-peer.modal.mjs +192 -0
  63. package/{esm2020 → esm2022}/src/app/core/peer/select-peer.module.mjs +13 -13
  64. package/esm2022/src/app/core/register/register-confirm.page.mjs +88 -0
  65. package/esm2022/src/app/core/register/register.form.mjs +194 -0
  66. package/esm2022/src/app/core/register/register.modal.mjs +55 -0
  67. package/{esm2020 → esm2022}/src/app/core/register/register.module.mjs +13 -13
  68. package/esm2022/src/app/core/services/account.service.mjs +1217 -0
  69. package/esm2022/src/app/core/services/auth-guard.service.mjs +76 -0
  70. package/esm2022/src/app/core/services/base-entity-service.class.mjs +482 -0
  71. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +224 -0
  72. package/esm2022/src/app/core/services/base58.mjs +79 -0
  73. package/esm2022/src/app/core/services/config.service.mjs +365 -0
  74. package/esm2022/src/app/core/services/crypto.service.mjs +107 -0
  75. package/esm2022/src/app/core/services/local-settings.service.mjs +468 -0
  76. package/esm2022/src/app/core/services/model/account.model.mjs +153 -0
  77. package/esm2022/src/app/core/services/model/config.model.mjs +105 -0
  78. package/esm2022/src/app/core/services/model/department.model.mjs +33 -0
  79. package/esm2022/src/app/core/services/model/entity.decorators.mjs +97 -0
  80. package/esm2022/src/app/core/services/model/entity.model.mjs +228 -0
  81. package/esm2022/src/app/core/services/model/peer.model.mjs +82 -0
  82. package/esm2022/src/app/core/services/model/person.model.mjs +109 -0
  83. package/esm2022/src/app/core/services/model/referential.model.mjs +185 -0
  84. package/esm2022/src/app/core/services/model/token.model.mjs +52 -0
  85. package/esm2022/src/app/core/services/network.service.mjs +608 -0
  86. package/{esm2020 → esm2022}/src/app/core/services/pipes/account.pipes.mjs +9 -9
  87. package/{esm2020 → esm2022}/src/app/core/services/pipes/department-to-string.pipe.mjs +5 -5
  88. package/{esm2020 → esm2022}/src/app/core/services/pipes/person-to-string.pipe.mjs +5 -5
  89. package/{esm2020 → esm2022}/src/app/core/services/pipes/usage-mode.pipes.mjs +9 -9
  90. package/{esm2020 → esm2022}/src/app/core/services/platform.service.mjs +27 -5
  91. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +434 -0
  92. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +458 -0
  93. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +25 -0
  94. package/esm2022/src/app/core/services/testing/referential.validator.mjs +46 -0
  95. package/esm2022/src/app/core/services/validator/account.validator.mjs +45 -0
  96. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +49 -0
  97. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +67 -0
  98. package/{esm2020 → esm2022}/src/app/core/services/validator/user-settings.validator.mjs +4 -4
  99. package/{esm2020 → esm2022}/src/app/core/services/validator/user-token.validator.mjs +4 -4
  100. package/{esm2020 → esm2022}/src/app/core/settings/settings.module.mjs +9 -9
  101. package/esm2022/src/app/core/settings/settings.page.mjs +328 -0
  102. package/esm2022/src/app/core/table/actions-column.component.mjs +115 -0
  103. package/esm2022/src/app/core/table/async-table.class.mjs +1735 -0
  104. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +386 -0
  105. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +401 -0
  106. package/esm2022/src/app/core/table/memory-table.class.mjs +57 -0
  107. package/esm2022/src/app/core/table/table-select-columns.component.mjs +46 -0
  108. package/esm2022/src/app/core/table/table.class.mjs +1771 -0
  109. package/esm2022/src/app/core/table/table.model.mjs +16 -0
  110. package/{esm2020 → esm2022}/src/app/core/table/table.module.mjs +12 -12
  111. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +28 -0
  112. package/esm2022/src/app/core/table/testing/table.testing.mjs +291 -0
  113. package/{esm2020 → esm2022}/src/app/core/table/testing/table.testing.module.mjs +16 -16
  114. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +25 -0
  115. package/esm2022/src/app/core/table/testing/table2.testing.mjs +250 -0
  116. package/esm2022/src/app/shared/audio/audio.mjs +251 -0
  117. package/esm2022/src/app/shared/audio/audio.testing.mjs +32 -0
  118. package/{esm2020 → esm2022}/src/app/shared/audio/audio.testing.module.mjs +10 -10
  119. package/esm2022/src/app/shared/capacitor/keyboard.mjs +42 -0
  120. package/esm2022/src/app/shared/capacitor/plugins.mjs +9 -0
  121. package/esm2022/src/app/shared/dates.mjs +149 -0
  122. package/esm2022/src/app/shared/debug/debug.component.mjs +40 -0
  123. package/{esm2020 → esm2022}/src/app/shared/debug/debug.module.mjs +14 -14
  124. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +98 -0
  125. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +32 -0
  126. package/{esm2020 → esm2022}/src/app/shared/directives/directives.module.mjs +13 -13
  127. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +52 -0
  128. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +33 -0
  129. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +62 -0
  130. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +45 -0
  131. package/{esm2020 → esm2022}/src/app/shared/directives/resizable/resizable.module.mjs +5 -5
  132. package/esm2022/src/app/shared/file/file.service.mjs +122 -0
  133. package/{esm2020 → esm2022}/src/app/shared/file/file.utils.mjs +2 -2
  134. package/esm2022/src/app/shared/form/field.component.mjs +353 -0
  135. package/esm2022/src/app/shared/form/loading-spinner.mjs +35 -0
  136. package/{esm2020 → esm2022}/src/app/shared/functions.mjs +2 -2
  137. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +82 -0
  138. package/esm2022/src/app/shared/gesture/gesture-config.mjs +46 -0
  139. package/esm2022/src/app/shared/graph/graph-colors.mjs +219 -0
  140. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +59 -0
  141. package/esm2022/src/app/shared/help/help.modal.mjs +63 -0
  142. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +24 -0
  143. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +85 -0
  144. package/{esm2020 → esm2022}/src/app/shared/hotkeys/shared-hotkeys.module.mjs +12 -12
  145. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +388 -0
  146. package/{esm2020 → esm2022}/src/app/shared/image/gallery/image-gallery.module.mjs +22 -22
  147. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +26 -0
  148. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +90 -0
  149. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +41 -0
  150. package/{esm2020 → esm2022}/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +16 -16
  151. package/{esm2020 → esm2022}/src/app/shared/image/image.module.mjs +11 -11
  152. package/esm2022/src/app/shared/image/image.service.mjs +104 -0
  153. package/esm2022/src/app/shared/inputs.mjs +231 -0
  154. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +28 -0
  155. package/esm2022/src/app/shared/logging/logging-service.class.mjs +128 -0
  156. package/{esm2020 → esm2022}/src/app/shared/logging/logging-service.module.mjs +8 -8
  157. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +49 -0
  158. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +961 -0
  159. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +82 -0
  160. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +217 -0
  161. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +209 -0
  162. package/{esm2020 → esm2022}/src/app/shared/material/badge/badge.module.mjs +9 -9
  163. package/esm2022/src/app/shared/material/badge/badge.test.mjs +42 -0
  164. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +72 -0
  165. package/esm2022/src/app/shared/material/boolean/material-boolean2.mjs +266 -0
  166. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +271 -0
  167. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +54 -0
  168. package/{esm2020 → esm2022}/src/app/shared/material/chips/chips.module.mjs +30 -30
  169. package/esm2022/src/app/shared/material/chips/material.chips.mjs +719 -0
  170. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +148 -0
  171. package/{esm2020 → esm2022}/src/app/shared/material/datetime/datetime.module.mjs +38 -38
  172. package/esm2022/src/app/shared/material/datetime/material.date.mjs +396 -0
  173. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +406 -0
  174. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +523 -0
  175. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +125 -0
  176. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +122 -0
  177. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +115 -0
  178. package/esm2022/src/app/shared/material/duration/duration.module.mjs +70 -0
  179. package/{esm2020 → esm2022}/src/app/shared/material/duration/duration.utils.mjs +2 -2
  180. package/esm2022/src/app/shared/material/duration/material.duration.mjs +273 -0
  181. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +79 -0
  182. package/{esm2020 → esm2022}/src/app/shared/material/latlong/latlong.utils.mjs +3 -3
  183. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +415 -0
  184. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +72 -0
  185. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +113 -0
  186. package/{esm2020 → esm2022}/src/app/shared/material/material.module.mjs +131 -131
  187. package/{esm2020 → esm2022}/src/app/shared/material/material.testing.module.mjs +45 -45
  188. package/esm2022/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +104 -0
  189. package/esm2022/src/app/shared/material/numpad/numpad.component.mjs +83 -0
  190. package/esm2022/src/app/shared/material/numpad/numpad.container.mjs +203 -0
  191. package/esm2022/src/app/shared/material/numpad/numpad.content.mjs +19 -0
  192. package/esm2022/src/app/shared/material/numpad/numpad.directive.mjs +168 -0
  193. package/esm2022/src/app/shared/material/numpad/numpad.dom-service.mjs +36 -0
  194. package/esm2022/src/app/shared/material/numpad/numpad.model.mjs +16 -0
  195. package/{esm2020 → esm2022}/src/app/shared/material/numpad/numpad.module.mjs +20 -20
  196. package/esm2022/src/app/shared/material/numpad/testing/numpad.test.mjs +48 -0
  197. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +48 -0
  198. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +23 -0
  199. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +368 -0
  200. package/{esm2020 → esm2022}/src/app/shared/material/swipe/swipe.module.mjs +19 -19
  201. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +67 -0
  202. package/esm2022/src/app/shared/material/testing/common.test.mjs +105 -0
  203. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +212 -0
  204. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +49 -0
  205. package/{esm2020 → esm2022}/src/app/shared/named-filter/named-filter.module.mjs +5 -5
  206. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +69 -0
  207. package/{esm2020 → esm2022}/src/app/shared/pipes/arrays.pipe.mjs +25 -25
  208. package/{esm2020 → esm2022}/src/app/shared/pipes/colors.pipe.mjs +4 -4
  209. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +51 -0
  210. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +72 -0
  211. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +28 -0
  212. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +36 -0
  213. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +60 -0
  214. package/esm2022/src/app/shared/pipes/form.pipes.mjs +194 -0
  215. package/{esm2020 → esm2022}/src/app/shared/pipes/highlight.pipe.mjs +5 -5
  216. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +42 -0
  217. package/{esm2020 → esm2022}/src/app/shared/pipes/maps.pipe.mjs +13 -13
  218. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +118 -0
  219. package/{esm2020 → esm2022}/src/app/shared/pipes/math.pipes.mjs +13 -13
  220. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +19 -0
  221. package/{esm2020 → esm2022}/src/app/shared/pipes/number-format.pipe.mjs +5 -5
  222. package/esm2022/src/app/shared/pipes/pipes.module.mjs +256 -0
  223. package/esm2022/src/app/shared/pipes/property.pipes.mjs +97 -0
  224. package/{esm2020 → esm2022}/src/app/shared/pipes/string.pipes.mjs +31 -31
  225. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +44 -0
  226. package/{esm2020 → esm2022}/src/app/shared/pipes/types.pipes.mjs +14 -14
  227. package/esm2022/src/app/shared/rx-state.module.mjs +23 -0
  228. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +347 -0
  229. package/esm2022/src/app/shared/services/progress-bar.service.mjs +31 -0
  230. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +121 -0
  231. package/esm2022/src/app/shared/services/startable-service.class.mjs +113 -0
  232. package/esm2022/src/app/shared/services/translate-context.service.mjs +104 -0
  233. package/{esm2020 → esm2022}/src/app/shared/shared-routing.module.mjs +11 -11
  234. package/esm2022/src/app/shared/shared.module.mjs +217 -0
  235. package/{esm2020 → esm2022}/src/app/shared/shared.testing.module.mjs +40 -40
  236. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +286 -0
  237. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +46 -0
  238. package/{esm2020 → esm2022}/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +7 -7
  239. package/{esm2020 → esm2022}/src/app/shared/storage/storage-explorer.testing.module.mjs +6 -6
  240. package/esm2022/src/app/shared/storage/storage.service.mjs +134 -0
  241. package/{esm2020 → esm2022}/src/app/shared/storage/storage.utils.mjs +1 -1
  242. package/esm2022/src/app/shared/testing/observable.test.mjs +96 -0
  243. package/esm2022/src/app/shared/testing/tests.page.mjs +37 -0
  244. package/esm2022/src/app/shared/toast/toast.testing.mjs +52 -0
  245. package/{esm2020 → esm2022}/src/app/shared/toast/toast.testing.module.mjs +10 -10
  246. package/esm2022/src/app/shared/toast/toasts.mjs +144 -0
  247. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +60 -0
  248. package/esm2022/src/app/shared/toolbar/toolbar.mjs +264 -0
  249. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +57 -0
  250. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +59 -0
  251. package/{esm2020 → esm2022}/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +10 -10
  252. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +107 -0
  253. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +211 -0
  254. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +27 -0
  255. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +106 -0
  256. package/esm2022/src/app/shared/validator/validators.mjs +580 -0
  257. package/esm2022/src/app/shared/version/versions.mjs +81 -0
  258. package/{esm2020 → esm2022}/src/app/social/job/job.module.mjs +12 -12
  259. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +35 -0
  260. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +232 -0
  261. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +50 -0
  262. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +28 -0
  263. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +73 -0
  264. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +43 -0
  265. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +53 -0
  266. package/{esm2020 → esm2022}/src/app/social/job/testing/job.testing.module.mjs +9 -9
  267. package/esm2022/src/app/social/message/message.form.mjs +88 -0
  268. package/esm2022/src/app/social/message/message.modal.mjs +102 -0
  269. package/esm2022/src/app/social/message/message.model.mjs +71 -0
  270. package/{esm2020 → esm2022}/src/app/social/message/message.module.mjs +10 -10
  271. package/esm2022/src/app/social/message/message.service.mjs +88 -0
  272. package/{esm2020 → esm2022}/src/app/social/social.module.mjs +19 -19
  273. package/{esm2020 → esm2022}/src/app/social/social.testing.module.mjs +10 -10
  274. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +123 -0
  275. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +263 -0
  276. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +233 -0
  277. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +128 -0
  278. package/{esm2020 → esm2022}/src/app/social/user-event/testing/user-event.testing.module.mjs +9 -9
  279. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +116 -0
  280. package/esm2022/src/app/social/user-event/user-event.module.mjs +43 -0
  281. package/esm2022/src/app/social/user-event/user-event.service.mjs +498 -0
  282. package/esm2022/src/environments/environment.class.mjs +47 -0
  283. package/{fesm2020 → fesm2022}/sumaris-net.ngx-components.mjs +5555 -4021
  284. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -0
  285. package/package.json +11 -17
  286. package/public_api.d.ts +1 -0
  287. package/src/app/admin/users/users.d.ts +1 -1
  288. package/src/app/admin/users/users.module.d.ts +2 -1
  289. package/src/app/core/account/new-token.modal.d.ts +1 -1
  290. package/src/app/core/account/token.table.d.ts +1 -1
  291. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +1 -1
  292. package/src/app/core/form/entity/editor.class.d.ts +1 -1
  293. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +1 -1
  294. package/src/app/core/form/entity/entity-metadata.component.d.ts +1 -1
  295. package/src/app/core/form/form.class.d.ts +1 -1
  296. package/src/app/core/form/list/list.form.d.ts +1 -1
  297. package/src/app/core/form/properties/properties.form.d.ts +1 -1
  298. package/src/app/core/form/properties/properties.table.d.ts +1 -1
  299. package/src/app/core/form/text-popover/text-form.component.d.ts +1 -1
  300. package/src/app/core/form/text-popover/text-popover.component.d.ts +1 -1
  301. package/src/app/core/home/home.module.d.ts +4 -3
  302. package/src/app/core/icon/icon.component.d.ts +1 -1
  303. package/src/app/core/install/install-upgrade-card.component.d.ts +1 -1
  304. package/src/app/core/menu/menu.component.d.ts +1 -1
  305. package/src/app/core/menu/menu.module.d.ts +3 -5
  306. package/src/app/core/menu/menu.service.d.ts +1 -1
  307. package/src/app/core/menu/sub-menu-tab.directive.d.ts +1 -1
  308. package/src/app/core/offline/update-offline-mode-card.component.d.ts +1 -1
  309. package/src/app/core/peer/select-peer.modal.d.ts +1 -1
  310. package/src/app/core/services/base-entity-service.class.d.ts +1 -1
  311. package/src/app/core/services/model/person.model.d.ts +1 -1
  312. package/src/app/core/services/model/settings.model.d.ts +1 -1
  313. package/src/app/core/services/network.types.d.ts +2 -2
  314. package/src/app/core/services/storage/entity-store.class.d.ts +1 -1
  315. package/src/app/core/table/actions-column.component.d.ts +1 -1
  316. package/src/app/core/table/async-table.class.d.ts +1 -1
  317. package/src/app/core/table/memory-table.class.d.ts +1 -1
  318. package/src/app/core/table/table-select-columns.component.d.ts +1 -1
  319. package/src/app/core/table/table.class.d.ts +1 -1
  320. package/src/app/core/table/table.model.d.ts +1 -1
  321. package/src/app/core/table/testing/table.testing.d.ts +1 -1
  322. package/src/app/shared/audio/audio.d.ts +1 -1
  323. package/src/app/shared/debug/debug.component.d.ts +1 -1
  324. package/src/app/shared/directives/autofocus.directive.d.ts +1 -1
  325. package/src/app/shared/directives/ng-var.directive.d.ts +1 -1
  326. package/src/app/shared/directives/resizable/resizable.component.d.ts +1 -1
  327. package/src/app/shared/events.d.ts +1 -1
  328. package/src/app/shared/form/field.component.d.ts +1 -1
  329. package/src/app/shared/form/loading-spinner.d.ts +1 -1
  330. package/src/app/shared/help/help.modal.d.ts +1 -1
  331. package/src/app/shared/image/gallery/image-gallery.component.d.ts +1 -1
  332. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +1 -1
  333. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +10 -9
  334. package/src/app/shared/material/badge/badge.directive.d.ts +1 -1
  335. package/src/app/shared/material/boolean/boolean.module.d.ts +4 -5
  336. package/src/app/shared/material/boolean/material-boolean2.d.ts +1 -1
  337. package/src/app/shared/material/boolean/material.boolean.d.ts +1 -1
  338. package/src/app/shared/material/chips/material.chips.d.ts +1 -1
  339. package/src/app/shared/material/datetime/datetime.module.d.ts +2 -2
  340. package/src/app/shared/material/datetime/material.date.d.ts +2 -2
  341. package/src/app/shared/material/datetime/material.dateshort.d.ts +3 -3
  342. package/src/app/shared/material/datetime/material.datetime.d.ts +5 -4
  343. package/src/app/shared/material/duration/duration.module.d.ts +6 -5
  344. package/src/app/shared/material/duration/material.duration.d.ts +2 -2
  345. package/src/app/shared/material/latlong/material.latlong.d.ts +5 -5
  346. package/src/app/shared/material/latlong/material.latlong.module.d.ts +9 -8
  347. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +2 -0
  348. package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +1 -1
  349. package/src/app/shared/material/numpad/numpad.component.d.ts +1 -1
  350. package/src/app/shared/material/numpad/numpad.content.d.ts +1 -1
  351. package/src/app/shared/material/numpad/numpad.directive.d.ts +1 -1
  352. package/src/app/shared/material/swipe/material.swipe.d.ts +1 -1
  353. package/src/app/shared/material/testing/common.test.d.ts +4 -2
  354. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +1 -1
  355. package/src/app/shared/pipes/maskito.pipe.d.ts +16 -0
  356. package/src/app/shared/pipes/pipes.module.d.ts +5 -4
  357. package/src/app/shared/pipes/types.pipes.d.ts +3 -3
  358. package/src/app/shared/rx-state.module.d.ts +1 -1
  359. package/src/app/shared/services/job.utils.d.ts +1 -1
  360. package/src/app/shared/shared.module.d.ts +11 -12
  361. package/src/app/shared/storage/storage-explorer.component.d.ts +1 -1
  362. package/src/app/shared/storage/storage-explorer.module.d.ts +3 -3
  363. package/src/app/shared/storage/storage.service.d.ts +1 -1
  364. package/src/app/shared/storage/storage.utils.d.ts +1 -1
  365. package/src/app/shared/toolbar/modal-toolbar.d.ts +1 -1
  366. package/src/app/shared/toolbar/toolbar.d.ts +1 -1
  367. package/src/app/shared/toolbar/toolbar.module.d.ts +4 -3
  368. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +1 -1
  369. package/src/app/shared/upload-file/upload-file.component.d.ts +1 -1
  370. package/src/app/shared/upload-file/upload-file.model.d.ts +2 -2
  371. package/src/app/social/job/progression/job-progression.component.d.ts +1 -1
  372. package/src/app/social/job/progression/job-progression.icon.d.ts +1 -1
  373. package/src/app/social/job/progression/job-progression.list.d.ts +1 -1
  374. package/src/app/social/message/message.form.d.ts +1 -1
  375. package/src/app/social/message/message.modal.d.ts +1 -1
  376. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +4 -3
  377. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +1 -1
  378. package/src/app/social/user-event/user-event.model.d.ts +2 -2
  379. package/src/app/social/user-event/user-event.module.d.ts +3 -2
  380. package/src/assets/i18n/fr.json +2 -2
  381. package/src/theme/_material.globals.scss +2 -2
  382. package/src/theme/_material.scss +14 -1
  383. package/src/theme/_mixins.scss +2 -2
  384. package/src/theme/_ngx-components.scss +7 -8
  385. package/src/theme/_ngx-components.table.scss +12 -6
  386. package/esm2020/public_api.mjs +0 -336
  387. package/esm2020/src/app/admin/services/filter/person.filter.mjs +0 -59
  388. package/esm2020/src/app/admin/services/person.service.mjs +0 -170
  389. package/esm2020/src/app/admin/services/validator/person.validator.mjs +0 -71
  390. package/esm2020/src/app/admin/users/users.mjs +0 -259
  391. package/esm2020/src/app/admin/users/users.module.mjs +0 -54
  392. package/esm2020/src/app/core/account/account.page.mjs +0 -317
  393. package/esm2020/src/app/core/account/new-token.modal.mjs +0 -115
  394. package/esm2020/src/app/core/account/token.table.mjs +0 -137
  395. package/esm2020/src/app/core/auth/auth.form.mjs +0 -132
  396. package/esm2020/src/app/core/auth/auth.modal.mjs +0 -72
  397. package/esm2020/src/app/core/form/buttons/form-buttons-bar.component.mjs +0 -107
  398. package/esm2020/src/app/core/form/entity/editor.class.mjs +0 -679
  399. package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +0 -422
  400. package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +0 -690
  401. package/esm2020/src/app/core/form/entity/entity-metadata.component.mjs +0 -25
  402. package/esm2020/src/app/core/form/form.class.mjs +0 -345
  403. package/esm2020/src/app/core/form/list/list.form.mjs +0 -222
  404. package/esm2020/src/app/core/form/properties/properties.form.mjs +0 -132
  405. package/esm2020/src/app/core/form/properties/properties.table.mjs +0 -265
  406. package/esm2020/src/app/core/form/properties/property.validator.mjs +0 -23
  407. package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +0 -90
  408. package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.mjs +0 -70
  409. package/esm2020/src/app/core/form/text-popover/text-form.component.mjs +0 -89
  410. package/esm2020/src/app/core/form/text-popover/text-popover.component.mjs +0 -146
  411. package/esm2020/src/app/core/graphql/graphql.service.mjs +0 -774
  412. package/esm2020/src/app/core/home/home.mjs +0 -258
  413. package/esm2020/src/app/core/home/home.module.mjs +0 -48
  414. package/esm2020/src/app/core/icon/icon.component.mjs +0 -41
  415. package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +0 -344
  416. package/esm2020/src/app/core/menu/menu.component.mjs +0 -239
  417. package/esm2020/src/app/core/menu/menu.model.mjs +0 -247
  418. package/esm2020/src/app/core/menu/menu.module.mjs +0 -57
  419. package/esm2020/src/app/core/menu/menu.service.mjs +0 -654
  420. package/esm2020/src/app/core/menu/sub-menu-tab.directive.mjs +0 -98
  421. package/esm2020/src/app/core/menu/testing/menu.testing.mjs +0 -121
  422. package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +0 -27
  423. package/esm2020/src/app/core/peer/select-peer.modal.mjs +0 -183
  424. package/esm2020/src/app/core/register/register-confirm.page.mjs +0 -81
  425. package/esm2020/src/app/core/register/register.form.mjs +0 -183
  426. package/esm2020/src/app/core/register/register.modal.mjs +0 -52
  427. package/esm2020/src/app/core/services/account.service.mjs +0 -1206
  428. package/esm2020/src/app/core/services/auth-guard.service.mjs +0 -71
  429. package/esm2020/src/app/core/services/base-entity-service.class.mjs +0 -468
  430. package/esm2020/src/app/core/services/base-graphql-service.class.mjs +0 -221
  431. package/esm2020/src/app/core/services/base58.mjs +0 -78
  432. package/esm2020/src/app/core/services/config.service.mjs +0 -355
  433. package/esm2020/src/app/core/services/crypto.service.mjs +0 -107
  434. package/esm2020/src/app/core/services/local-settings.service.mjs +0 -460
  435. package/esm2020/src/app/core/services/model/account.model.mjs +0 -147
  436. package/esm2020/src/app/core/services/model/config.model.mjs +0 -92
  437. package/esm2020/src/app/core/services/model/department.model.mjs +0 -30
  438. package/esm2020/src/app/core/services/model/entity.decorators.mjs +0 -97
  439. package/esm2020/src/app/core/services/model/entity.model.mjs +0 -225
  440. package/esm2020/src/app/core/services/model/peer.model.mjs +0 -68
  441. package/esm2020/src/app/core/services/model/person.model.mjs +0 -97
  442. package/esm2020/src/app/core/services/model/referential.model.mjs +0 -164
  443. package/esm2020/src/app/core/services/model/token.model.mjs +0 -48
  444. package/esm2020/src/app/core/services/network.service.mjs +0 -590
  445. package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +0 -428
  446. package/esm2020/src/app/core/services/storage/entity-store.class.mjs +0 -449
  447. package/esm2020/src/app/core/services/testing/referential-filter.model.mjs +0 -23
  448. package/esm2020/src/app/core/services/testing/referential.validator.mjs +0 -45
  449. package/esm2020/src/app/core/services/validator/account.validator.mjs +0 -41
  450. package/esm2020/src/app/core/services/validator/base.validator.class.mjs +0 -47
  451. package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +0 -66
  452. package/esm2020/src/app/core/settings/settings.page.mjs +0 -312
  453. package/esm2020/src/app/core/table/actions-column.component.mjs +0 -102
  454. package/esm2020/src/app/core/table/async-table.class.mjs +0 -1698
  455. package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +0 -384
  456. package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +0 -399
  457. package/esm2020/src/app/core/table/memory-table.class.mjs +0 -53
  458. package/esm2020/src/app/core/table/table-select-columns.component.mjs +0 -43
  459. package/esm2020/src/app/core/table/table.class.mjs +0 -1733
  460. package/esm2020/src/app/core/table/table.model.mjs +0 -12
  461. package/esm2020/src/app/core/table/testing/table-validator.service.mjs +0 -27
  462. package/esm2020/src/app/core/table/testing/table.testing.mjs +0 -281
  463. package/esm2020/src/app/core/table/testing/table2-validator.service.mjs +0 -24
  464. package/esm2020/src/app/core/table/testing/table2.testing.mjs +0 -242
  465. package/esm2020/src/app/shared/audio/audio.mjs +0 -248
  466. package/esm2020/src/app/shared/audio/audio.testing.mjs +0 -31
  467. package/esm2020/src/app/shared/capacitor/keyboard.mjs +0 -40
  468. package/esm2020/src/app/shared/capacitor/plugins.mjs +0 -9
  469. package/esm2020/src/app/shared/dates.mjs +0 -149
  470. package/esm2020/src/app/shared/debug/debug.component.mjs +0 -39
  471. package/esm2020/src/app/shared/directives/autofocus.directive.mjs +0 -93
  472. package/esm2020/src/app/shared/directives/autotitle.directive.mjs +0 -30
  473. package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +0 -53
  474. package/esm2020/src/app/shared/directives/ng-var.directive.mjs +0 -31
  475. package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +0 -60
  476. package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +0 -40
  477. package/esm2020/src/app/shared/file/file.service.mjs +0 -117
  478. package/esm2020/src/app/shared/form/field.component.mjs +0 -334
  479. package/esm2020/src/app/shared/form/loading-spinner.mjs +0 -36
  480. package/esm2020/src/app/shared/geolocation/geolocation.utils.mjs +0 -80
  481. package/esm2020/src/app/shared/gesture/gesture-config.mjs +0 -49
  482. package/esm2020/src/app/shared/graph/graph-colors.mjs +0 -212
  483. package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +0 -57
  484. package/esm2020/src/app/shared/help/help.modal.mjs +0 -53
  485. package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +0 -23
  486. package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +0 -81
  487. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +0 -368
  488. package/esm2020/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +0 -27
  489. package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +0 -90
  490. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +0 -39
  491. package/esm2020/src/app/shared/image/image.service.mjs +0 -98
  492. package/esm2020/src/app/shared/inputs.mjs +0 -231
  493. package/esm2020/src/app/shared/interceptors/progess.interceptor.mjs +0 -27
  494. package/esm2020/src/app/shared/logging/logging-service.class.mjs +0 -121
  495. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +0 -47
  496. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +0 -925
  497. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +0 -78
  498. package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +0 -209
  499. package/esm2020/src/app/shared/material/badge/badge.directive.mjs +0 -199
  500. package/esm2020/src/app/shared/material/badge/badge.test.mjs +0 -41
  501. package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +0 -76
  502. package/esm2020/src/app/shared/material/boolean/material-boolean2.mjs +0 -248
  503. package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +0 -254
  504. package/esm2020/src/app/shared/material/boolean/testing/boolean.test.page.mjs +0 -51
  505. package/esm2020/src/app/shared/material/chips/material.chips.mjs +0 -688
  506. package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +0 -143
  507. package/esm2020/src/app/shared/material/datetime/material.date.mjs +0 -378
  508. package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +0 -387
  509. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +0 -501
  510. package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +0 -120
  511. package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +0 -118
  512. package/esm2020/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +0 -111
  513. package/esm2020/src/app/shared/material/duration/duration.module.mjs +0 -67
  514. package/esm2020/src/app/shared/material/duration/material.duration.mjs +0 -258
  515. package/esm2020/src/app/shared/material/duration/testing/mat-duration.test.mjs +0 -76
  516. package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +0 -383
  517. package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +0 -67
  518. package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +0 -102
  519. package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +0 -98
  520. package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +0 -80
  521. package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +0 -190
  522. package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +0 -17
  523. package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +0 -162
  524. package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +0 -32
  525. package/esm2020/src/app/shared/material/numpad/numpad.model.mjs +0 -15
  526. package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +0 -46
  527. package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +0 -46
  528. package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +0 -22
  529. package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +0 -345
  530. package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +0 -64
  531. package/esm2020/src/app/shared/material/testing/common.test.mjs +0 -95
  532. package/esm2020/src/app/shared/named-filter/named-filter-selector.component.mjs +0 -202
  533. package/esm2020/src/app/shared/named-filter/named-filter.model.mjs +0 -45
  534. package/esm2020/src/app/shared/named-filter/named-filter.service.mjs +0 -63
  535. package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +0 -48
  536. package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +0 -66
  537. package/esm2020/src/app/shared/pipes/date-from-now.pipe.mjs +0 -27
  538. package/esm2020/src/app/shared/pipes/duration.pipe.mjs +0 -34
  539. package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +0 -62
  540. package/esm2020/src/app/shared/pipes/form.pipes.mjs +0 -187
  541. package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +0 -46
  542. package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +0 -21
  543. package/esm2020/src/app/shared/pipes/pipes.module.mjs +0 -247
  544. package/esm2020/src/app/shared/pipes/property.pipes.mjs +0 -93
  545. package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +0 -43
  546. package/esm2020/src/app/shared/rx-state.module.mjs +0 -23
  547. package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +0 -339
  548. package/esm2020/src/app/shared/services/progress-bar.service.mjs +0 -33
  549. package/esm2020/src/app/shared/services/startable-observable-service.class.mjs +0 -121
  550. package/esm2020/src/app/shared/services/startable-service.class.mjs +0 -113
  551. package/esm2020/src/app/shared/services/translate-context.service.mjs +0 -103
  552. package/esm2020/src/app/shared/shared.module.mjs +0 -224
  553. package/esm2020/src/app/shared/storage/storage-explorer.component.mjs +0 -268
  554. package/esm2020/src/app/shared/storage/storage-explorer.module.mjs +0 -47
  555. package/esm2020/src/app/shared/storage/storage.service.mjs +0 -132
  556. package/esm2020/src/app/shared/testing/observable.test.mjs +0 -95
  557. package/esm2020/src/app/shared/testing/tests.page.mjs +0 -33
  558. package/esm2020/src/app/shared/toast/toast.testing.mjs +0 -51
  559. package/esm2020/src/app/shared/toast/toasts.mjs +0 -144
  560. package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +0 -58
  561. package/esm2020/src/app/shared/toolbar/toolbar.mjs +0 -251
  562. package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +0 -53
  563. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +0 -58
  564. package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +0 -97
  565. package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +0 -204
  566. package/esm2020/src/app/shared/upload-file/upload-file.model.mjs +0 -20
  567. package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +0 -104
  568. package/esm2020/src/app/shared/validator/validators.mjs +0 -580
  569. package/esm2020/src/app/shared/version/versions.mjs +0 -81
  570. package/esm2020/src/app/social/job/progression/job-progression.component.mjs +0 -34
  571. package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +0 -223
  572. package/esm2020/src/app/social/job/progression/job-progression.list.mjs +0 -46
  573. package/esm2020/src/app/social/job/progression/job-progression.model.mjs +0 -23
  574. package/esm2020/src/app/social/job/progression/job-progression.service.mjs +0 -71
  575. package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +0 -41
  576. package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +0 -55
  577. package/esm2020/src/app/social/message/message.form.mjs +0 -84
  578. package/esm2020/src/app/social/message/message.modal.mjs +0 -93
  579. package/esm2020/src/app/social/message/message.model.mjs +0 -64
  580. package/esm2020/src/app/social/message/message.service.mjs +0 -84
  581. package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +0 -114
  582. package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +0 -246
  583. package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +0 -227
  584. package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +0 -112
  585. package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +0 -111
  586. package/esm2020/src/app/social/user-event/user-event.module.mjs +0 -39
  587. package/esm2020/src/app/social/user-event/user-event.service.mjs +0 -488
  588. package/esm2020/src/environments/environment.class.mjs +0 -5
  589. package/fesm2015/sumaris-net.ngx-components.mjs +0 -41541
  590. package/fesm2015/sumaris-net.ngx-components.mjs.map +0 -1
  591. package/fesm2020/sumaris-net.ngx-components.mjs.map +0 -1
  592. /package/{esm2020 → esm2022}/src/app/core/services/config/core.config.mjs +0 -0
  593. /package/{esm2020 → esm2022}/src/app/core/services/errors.mjs +0 -0
  594. /package/{esm2020 → esm2022}/src/app/core/services/model/filter.model.mjs +0 -0
  595. /package/{esm2020 → esm2022}/src/app/core/services/model/history.model.mjs +0 -0
  596. /package/{esm2020 → esm2022}/src/app/core/services/model/model.enum.mjs +0 -0
  597. /package/{esm2020 → esm2022}/src/app/core/services/model/settings.model.mjs +0 -0
  598. /package/{esm2020 → esm2022}/src/app/core/services/model/tree-item-entity.model.mjs +0 -0
  599. /package/{esm2020 → esm2022}/src/app/core/services/network.types.mjs +0 -0
  600. /package/{esm2020 → esm2022}/src/app/core/services/network.utils.mjs +0 -0
  601. /package/{esm2020 → esm2022}/src/app/core/table/table.utils.mjs +0 -0
  602. /package/{esm2020 → esm2022}/src/app/shared/alerts.mjs +0 -0
  603. /package/{esm2020 → esm2022}/src/app/shared/constants.mjs +0 -0
  604. /package/{esm2020 → esm2022}/src/app/shared/debug/debug-service.class.mjs +0 -0
  605. /package/{esm2020 → esm2022}/src/app/shared/events.mjs +0 -0
  606. /package/{esm2020 → esm2022}/src/app/shared/file/csv.utils.mjs +0 -0
  607. /package/{esm2020 → esm2022}/src/app/shared/file/images.utils.mjs +0 -0
  608. /package/{esm2020 → esm2022}/src/app/shared/file/json.utils.mjs +0 -0
  609. /package/{esm2020 → esm2022}/src/app/shared/file/uri.utils.mjs +0 -0
  610. /package/{esm2020 → esm2022}/src/app/shared/focusable.mjs +0 -0
  611. /package/{esm2020 → esm2022}/src/app/shared/form/field.model.mjs +0 -0
  612. /package/{esm2020 → esm2022}/src/app/shared/forms.mjs +0 -0
  613. /package/{esm2020 → esm2022}/src/app/shared/gesture/hammer.utils.mjs +0 -0
  614. /package/{esm2020 → esm2022}/src/app/shared/graph/colors.utils.mjs +0 -0
  615. /package/{esm2020 → esm2022}/src/app/shared/http/http.utils.mjs +0 -0
  616. /package/{esm2020 → esm2022}/src/app/shared/image/image.model.mjs +0 -0
  617. /package/{esm2020 → esm2022}/src/app/shared/logging/log-level.model.mjs +0 -0
  618. /package/{esm2020 → esm2022}/src/app/shared/logging/logger.model.mjs +0 -0
  619. /package/{esm2020 → esm2022}/src/app/shared/logging/logging-service.config.mjs +0 -0
  620. /package/{esm2020 → esm2022}/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +0 -0
  621. /package/{esm2020 → esm2022}/src/app/shared/material/material.animations.mjs +0 -0
  622. /package/{esm2020 → esm2022}/src/app/shared/modules.mjs +0 -0
  623. /package/{esm2020 → esm2022}/src/app/shared/observables.mjs +0 -0
  624. /package/{esm2020 → esm2022}/src/app/shared/platforms.mjs +0 -0
  625. /package/{esm2020 → esm2022}/src/app/shared/services/entity-service.class.mjs +0 -0
  626. /package/{esm2020 → esm2022}/src/app/shared/services/job.utils.mjs +0 -0
  627. /package/{esm2020 → esm2022}/src/app/shared/services/validator-service.class.mjs +0 -0
  628. /package/{esm2020 → esm2022}/src/app/shared/services.mjs +0 -0
  629. /package/{esm2020 → esm2022}/src/app/shared/types.mjs +0 -0
  630. /package/{esm2020 → esm2022}/src/app/social/social.errors.mjs +0 -0
  631. /package/{esm2020 → esm2022}/src/app/social/user-event/user-event.model.mjs +0 -0
  632. /package/{esm2020 → esm2022}/src/environments/environment.mjs +0 -0
  633. /package/{esm2020 → esm2022}/sumaris-net.ngx-components.mjs +0 -0
@@ -0,0 +1,115 @@
1
+ import { Component } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ import { debounceTime } from 'rxjs/operators';
4
+ import { SharedFormGroupValidators, SharedValidators } from '../../../validator/validators';
5
+ import { AppFormUtils } from '../../../../core/form/form.utils';
6
+ import { DateUtils, toDateISOString } from '../../../dates';
7
+ import 'moment-timezone';
8
+ import { isMobile } from '../../../platforms';
9
+ import { timer } from 'rxjs';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/forms";
12
+ import * as i2 from "@angular/common";
13
+ import * as i3 from "@ionic/angular";
14
+ import * as i4 from "@angular/material/form-field";
15
+ import * as i5 from "@angular/material/input";
16
+ import * as i6 from "@angular/material/checkbox";
17
+ import * as i7 from "@angular/material/tabs";
18
+ import * as i8 from "../material.dateshort";
19
+ export class DateShortTestPage {
20
+ formBuilder;
21
+ cd;
22
+ showLogPanel = true;
23
+ logContent = '';
24
+ memoryHide = false;
25
+ memoryMobile = true;
26
+ memoryTimer;
27
+ form;
28
+ mode = 'mobile';
29
+ constructor(formBuilder, cd) {
30
+ this.formBuilder = formBuilder;
31
+ this.cd = cd;
32
+ this.form = formBuilder.group({
33
+ empty: [null, SharedValidators.validDate],
34
+ emptyRequired: [null, Validators.compose([Validators.required, SharedValidators.validDate])],
35
+ enable: [null, Validators.required],
36
+ disable: [null, Validators.required],
37
+ readonly: [null]
38
+ }, {
39
+ validators: SharedFormGroupValidators.dateRange('empty', 'enable')
40
+ });
41
+ const disableControl = this.form.get('disable');
42
+ disableControl.disable();
43
+ // Copy the 'enable' value, into the disable control
44
+ this.form.get('enable').valueChanges.subscribe(value => disableControl.setValue(value));
45
+ this.showLogPanel = this.showLogPanel || isMobile(window);
46
+ }
47
+ ngOnInit() {
48
+ setTimeout(() => this.loadData(), 250);
49
+ }
50
+ toggleMode(value) {
51
+ if (this.mode !== value) {
52
+ this.mode = value;
53
+ this.stopMemoryTimer();
54
+ }
55
+ }
56
+ // Load the form with data
57
+ async loadData() {
58
+ const now = DateUtils.moment();
59
+ const data = {
60
+ empty: null,
61
+ emptyRequired: null,
62
+ enable: toDateISOString(now),
63
+ disable: now.clone(),
64
+ readonly: now.clone()
65
+ };
66
+ this.form.setValue(data);
67
+ this.log('[test-page] Data loaded: ' + JSON.stringify(data));
68
+ this.form.get('empty').valueChanges
69
+ .pipe(debounceTime(300))
70
+ .subscribe(value => this.log('[test-page] Value n°1: ' + JSON.stringify(value)));
71
+ this.form.get('enable').valueChanges
72
+ .pipe(debounceTime(300))
73
+ .subscribe(value => this.log('[test-page] Value n°2: ' + JSON.stringify(value)));
74
+ }
75
+ doSubmit(event) {
76
+ this.form.markAllAsTouched();
77
+ this.log('[test-page] Form content: ' + JSON.stringify(this.form.value));
78
+ this.log('[test-page] Form status: ' + this.form.status);
79
+ if (this.form.invalid) {
80
+ this.log('[test-page] Form errors: ' + JSON.stringify(this.form.errors));
81
+ // DEBUG
82
+ AppFormUtils.logFormErrors(this.form);
83
+ }
84
+ }
85
+ log(message) {
86
+ console.debug(message);
87
+ if (this.showLogPanel) {
88
+ this.logContent += message + '<br/>';
89
+ this.cd.markForCheck();
90
+ }
91
+ }
92
+ clearLogPanel() {
93
+ this.logContent = '';
94
+ this.cd.markForCheck();
95
+ }
96
+ startMemoryTimer() {
97
+ this.memoryTimer = timer(50, 50)
98
+ .subscribe(() => {
99
+ this.memoryHide = !this.memoryHide;
100
+ });
101
+ }
102
+ stopMemoryTimer() {
103
+ this.memoryTimer?.unsubscribe();
104
+ this.memoryTimer = null;
105
+ this.memoryHide = false;
106
+ }
107
+ stringify = JSON.stringify;
108
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DateShortTestPage, deps: [{ token: i1.UntypedFormBuilder }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
109
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DateShortTestPage, selector: "app-data-short-test", ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Date short field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n\n <!-- Tab nav - mobile/desktop mode -->\n <nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n <a mat-tab-link\n [active]=\"mode==='mobile'\"\n (click)=\"toggleMode('mobile')\">\n <mat-label>Mobile</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='desktop'\"\n (click)=\"toggleMode('desktop')\">\n <mat-label>Desktop</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='memory'\"\n (click)=\"toggleMode('memory')\">\n <mat-label>Memory leak debug</mat-label>\n </a>\n <a mat-tab-link\n [active]=\"mode==='temp'\"\n (click)=\"toggleMode('temp')\">\n <mat-label>Temporary</mat-label>\n </a>\n </nav>\n\n <form #tabPanel class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n\n <ion-grid *ngIf=\"mode==='memory'\">\n\n <!-- debugging memory leak -->\n <ion-row><ion-col><ion-text><h4>Debug memory leak</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col size=\"auto\">\n <ion-button *ngIf=\"!memoryTimer\" (click)=\"startMemoryTimer()\">Start timer</ion-button>\n <ion-button *ngIf=\"memoryTimer\" (click)=\"stopMemoryTimer()\">Stop timer</ion-button>\n </ion-col>\n <ion-col size=\"4\">\n <mat-form-field floatLabel=\"auto\">\n <input matInput type=\"text\" hidden>\n <mat-checkbox (change)=\"memoryMobile=$event.checked\" [checked]=\"memoryMobile\">\n Mobile ?\n </mat-checkbox>\n </mat-form-field>\n </ion-col>\n <ion-col>\n <mat-date-short-field formControlName=\"empty\"\n *ngIf=\"!memoryHide\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"memoryMobile\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <ion-grid *ngIf=\"mode==='mobile'\">\n <!-- Mobile mode -->\n <ion-row><ion-col><ion-text><h4>Mobile mode</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.empty.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-short-field formControlName=\"empty\"\n placeholder=\"Date\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value (required)\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.emptyRequired.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-short-field formControlName=\"emptyRequired\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Enable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n With value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.enable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-short-field formControlName=\"enable\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.disable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-short-field formControlName=\"disable\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Readonly -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Readonly toggle\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.readonly.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-checkbox (change)=\"mobileReadonlyField.readonly=$event.checked\" [checked]=\"mobileReadonlyField.readonly\">\n </mat-checkbox>\n\n <mat-date-short-field #mobileReadonlyField formControlName=\"readonly\"\n placeholder=\"Date\"\n [readonly]=\"true\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <!-- debug console -->\n <ion-row>\n <!-- buttons -->\n <ion-col size=\"2\">\n <!-- submit form -->\n <ion-button (click)=\"doSubmit($event)\"\n fill=\"outline\">\n <ion-icon name=\"checkmark\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <!-- clear log -->\n <ion-button (click)=\"clearLogPanel()\"\n fill=\"outline\">\n <ion-icon name=\"trash\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col size=\"10\" *ngIf=\"showLogPanel\">\n <ion-text color=\"primary\">Log:<br/></ion-text>\n <div class=\"ion-padding-start\">\n <ion-text color=\"medium\">\n <small [innerHTML]=\"logContent\"></small>\n </ion-text>\n </div>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <ion-grid *ngIf=\"mode==='desktop'\">\n <!-- Desktop mode -->\n <ion-row><ion-col><ion-text><h4>Desktop mode</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>\n {{stringify(form.controls.empty.value)}}\n </pre><br/>\n <pre>\n formControl.valid? {{form.controls.empty?.valid}}\n textControl.valid? {{desktopEmptyField.textControl?.valid}}\n </pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-short-field formControlName=\"empty\" #desktopEmptyField\n placeholder=\"Date\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n\n <!-- Empty value + required -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value (required)\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.emptyRequired.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-short-field formControlName=\"emptyRequired\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Enable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n With value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.enable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-short-field formControlName=\"enable\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.disable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-short-field formControlName=\"disable\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"false\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Readonly -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Readonly toggle\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.readonly.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-checkbox (change)=\"desktopReadonlyField.readonly=$event.checked\" [checked]=\"desktopReadonlyField.readonly\">\n </mat-checkbox>\n\n <mat-date-short-field #desktopReadonlyField formControlName=\"readonly\"\n placeholder=\"Date\"\n [readonly]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n </ion-row>\n </ion-grid>\n\n </form>\n</ion-content>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i3.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i3.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i3.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i3.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: i3.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i3.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonBackButton, selector: "ion-back-button" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i7.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "animationDuration"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: i7.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["disabled", "disableRipple", "tabIndex", "active", "id"], exportAs: ["matTabLink"] }, { kind: "component", type: i8.MatDateShort, selector: "mat-date-short-field", inputs: ["mobile", "formControl", "formControlName", "placeholder", "floatLabel", "appearance", "required", "compact", "placeholderChar", "autofocus", "startDate", "clearable", "datePickerFilter", "readonly", "tabindex"] }] });
110
+ }
111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DateShortTestPage, decorators: [{
112
+ type: Component,
113
+ args: [{ selector: 'app-data-short-test', template: "<ion-header>\n <ion-toolbar color=\"primary\">\n\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Date short field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n\n <!-- Tab nav - mobile/desktop mode -->\n <nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n <a mat-tab-link\n [active]=\"mode==='mobile'\"\n (click)=\"toggleMode('mobile')\">\n <mat-label>Mobile</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='desktop'\"\n (click)=\"toggleMode('desktop')\">\n <mat-label>Desktop</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='memory'\"\n (click)=\"toggleMode('memory')\">\n <mat-label>Memory leak debug</mat-label>\n </a>\n <a mat-tab-link\n [active]=\"mode==='temp'\"\n (click)=\"toggleMode('temp')\">\n <mat-label>Temporary</mat-label>\n </a>\n </nav>\n\n <form #tabPanel class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n\n <ion-grid *ngIf=\"mode==='memory'\">\n\n <!-- debugging memory leak -->\n <ion-row><ion-col><ion-text><h4>Debug memory leak</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col size=\"auto\">\n <ion-button *ngIf=\"!memoryTimer\" (click)=\"startMemoryTimer()\">Start timer</ion-button>\n <ion-button *ngIf=\"memoryTimer\" (click)=\"stopMemoryTimer()\">Stop timer</ion-button>\n </ion-col>\n <ion-col size=\"4\">\n <mat-form-field floatLabel=\"auto\">\n <input matInput type=\"text\" hidden>\n <mat-checkbox (change)=\"memoryMobile=$event.checked\" [checked]=\"memoryMobile\">\n Mobile ?\n </mat-checkbox>\n </mat-form-field>\n </ion-col>\n <ion-col>\n <mat-date-short-field formControlName=\"empty\"\n *ngIf=\"!memoryHide\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"memoryMobile\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <ion-grid *ngIf=\"mode==='mobile'\">\n <!-- Mobile mode -->\n <ion-row><ion-col><ion-text><h4>Mobile mode</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.empty.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-short-field formControlName=\"empty\"\n placeholder=\"Date\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value (required)\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.emptyRequired.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-short-field formControlName=\"emptyRequired\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Enable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n With value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.enable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-short-field formControlName=\"enable\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.disable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-short-field formControlName=\"disable\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Readonly -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Readonly toggle\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.readonly.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-checkbox (change)=\"mobileReadonlyField.readonly=$event.checked\" [checked]=\"mobileReadonlyField.readonly\">\n </mat-checkbox>\n\n <mat-date-short-field #mobileReadonlyField formControlName=\"readonly\"\n placeholder=\"Date\"\n [readonly]=\"true\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <!-- debug console -->\n <ion-row>\n <!-- buttons -->\n <ion-col size=\"2\">\n <!-- submit form -->\n <ion-button (click)=\"doSubmit($event)\"\n fill=\"outline\">\n <ion-icon name=\"checkmark\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <!-- clear log -->\n <ion-button (click)=\"clearLogPanel()\"\n fill=\"outline\">\n <ion-icon name=\"trash\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col size=\"10\" *ngIf=\"showLogPanel\">\n <ion-text color=\"primary\">Log:<br/></ion-text>\n <div class=\"ion-padding-start\">\n <ion-text color=\"medium\">\n <small [innerHTML]=\"logContent\"></small>\n </ion-text>\n </div>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <ion-grid *ngIf=\"mode==='desktop'\">\n <!-- Desktop mode -->\n <ion-row><ion-col><ion-text><h4>Desktop mode</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>\n {{stringify(form.controls.empty.value)}}\n </pre><br/>\n <pre>\n formControl.valid? {{form.controls.empty?.valid}}\n textControl.valid? {{desktopEmptyField.textControl?.valid}}\n </pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-short-field formControlName=\"empty\" #desktopEmptyField\n placeholder=\"Date\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n\n <!-- Empty value + required -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value (required)\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.emptyRequired.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-short-field formControlName=\"emptyRequired\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Enable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n With value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.enable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-short-field formControlName=\"enable\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.disable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-short-field formControlName=\"disable\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"false\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Readonly -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Readonly toggle\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.readonly.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-checkbox (change)=\"desktopReadonlyField.readonly=$event.checked\" [checked]=\"desktopReadonlyField.readonly\">\n </mat-checkbox>\n\n <mat-date-short-field #desktopReadonlyField formControlName=\"readonly\"\n placeholder=\"Date\"\n [readonly]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-short-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n </ion-row>\n </ion-grid>\n\n </form>\n</ion-content>\n" }]
114
+ }], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }]; } });
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LWRhdGVzaG9ydC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvZGF0ZXRpbWUvdGVzdGluZy9tYXQtZGF0ZXNob3J0LnRlc3QudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kYXRldGltZS90ZXN0aW5nL21hdC1kYXRlc2hvcnQudGVzdC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsU0FBUyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBdUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBQyx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzFGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RCxPQUFPLEVBQUMsU0FBUyxFQUFFLGVBQWUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBZSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFNekMsTUFBTSxPQUFPLGlCQUFpQjtJQWFoQjtJQUNBO0lBWlosWUFBWSxHQUFHLElBQUksQ0FBQztJQUNwQixVQUFVLEdBQUcsRUFBRSxDQUFDO0lBRWhCLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsWUFBWSxHQUFHLElBQUksQ0FBQztJQUNwQixXQUFXLENBQWU7SUFFMUIsSUFBSSxDQUFtQjtJQUN2QixJQUFJLEdBQXVDLFFBQVEsQ0FBQztJQUVwRCxZQUNZLFdBQStCLEVBQy9CLEVBQXFCO1FBRHJCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUUvQixJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDNUIsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztZQUN6QyxhQUFhLEVBQUUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUM1RixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNuQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNwQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUM7U0FDakIsRUFBRTtZQUNELFVBQVUsRUFBRSx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQztTQUNuRSxDQUFDLENBQUM7UUFFSCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRCxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFekIsb0RBQW9EO1FBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFeEYsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsUUFBUTtRQUNOLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFLO1FBQ2QsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtZQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUNsQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRUQsMEJBQTBCO0lBQzFCLEtBQUssQ0FBQyxRQUFRO1FBQ1osTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRS9CLE1BQU0sSUFBSSxHQUFHO1lBQ1gsS0FBSyxFQUFFLElBQUk7WUFDWCxhQUFhLEVBQUUsSUFBSTtZQUNuQixNQUFNLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQztZQUM1QixPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRTtZQUNwQixRQUFRLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRTtTQUN0QixDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekIsSUFBSSxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWTthQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZCLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkYsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWTthQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZCLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFckYsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFLO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUV6RSxRQUFRO1lBQ1IsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBRUQsR0FBRyxDQUFDLE9BQWU7UUFDakIsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV2QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLFVBQVUsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLEVBQUUsRUFBQyxFQUFFLENBQUM7YUFDNUIsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7d0dBL0doQixpQkFBaUI7NEZBQWpCLGlCQUFpQiwyRENkOUIsdzJjQXlZQTs7NEZEM1hhLGlCQUFpQjtrQkFKN0IsU0FBUzsrQkFDRSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1VudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7U2hhcmVkRm9ybUdyb3VwVmFsaWRhdG9ycywgU2hhcmVkVmFsaWRhdG9yc30gZnJvbSAnLi4vLi4vLi4vdmFsaWRhdG9yL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHtBcHBGb3JtVXRpbHN9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvZm9ybS9mb3JtLnV0aWxzJztcbmltcG9ydCB7RGF0ZVV0aWxzLCB0b0RhdGVJU09TdHJpbmd9IGZyb20gJy4uLy4uLy4uL2RhdGVzJztcbmltcG9ydCAnbW9tZW50LXRpbWV6b25lJztcbmltcG9ydCB7aXNNb2JpbGV9IGZyb20gJy4uLy4uLy4uL3BsYXRmb3Jtcyc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbiwgdGltZXJ9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZGF0YS1zaG9ydC10ZXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hdC1kYXRlc2hvcnQudGVzdC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEYXRlU2hvcnRUZXN0UGFnZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgc2hvd0xvZ1BhbmVsID0gdHJ1ZTtcbiAgbG9nQ29udGVudCA9ICcnO1xuXG4gIG1lbW9yeUhpZGUgPSBmYWxzZTtcbiAgbWVtb3J5TW9iaWxlID0gdHJ1ZTtcbiAgbWVtb3J5VGltZXI6IFN1YnNjcmlwdGlvbjtcblxuICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBtb2RlOiAnbW9iaWxlJ3wnZGVza3RvcCd8J21lbW9yeSd8J3RlbXAnID0gJ21vYmlsZSc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICB0aGlzLmZvcm0gPSBmb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBlbXB0eTogW251bGwsIFNoYXJlZFZhbGlkYXRvcnMudmFsaWREYXRlXSxcbiAgICAgIGVtcHR5UmVxdWlyZWQ6IFtudWxsLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFNoYXJlZFZhbGlkYXRvcnMudmFsaWREYXRlXSldLFxuICAgICAgZW5hYmxlOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBkaXNhYmxlOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICByZWFkb25seTogW251bGxdXG4gICAgfSwge1xuICAgICAgdmFsaWRhdG9yczogU2hhcmVkRm9ybUdyb3VwVmFsaWRhdG9ycy5kYXRlUmFuZ2UoJ2VtcHR5JywgJ2VuYWJsZScpXG4gICAgfSk7XG5cbiAgICBjb25zdCBkaXNhYmxlQ29udHJvbCA9IHRoaXMuZm9ybS5nZXQoJ2Rpc2FibGUnKTtcbiAgICBkaXNhYmxlQ29udHJvbC5kaXNhYmxlKCk7XG5cbiAgICAvLyBDb3B5IHRoZSAnZW5hYmxlJyB2YWx1ZSwgaW50byB0aGUgZGlzYWJsZSBjb250cm9sXG4gICAgdGhpcy5mb3JtLmdldCgnZW5hYmxlJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiBkaXNhYmxlQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSkpO1xuXG4gICAgdGhpcy5zaG93TG9nUGFuZWwgPSB0aGlzLnNob3dMb2dQYW5lbCB8fCBpc01vYmlsZSh3aW5kb3cpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmxvYWREYXRhKCksIDI1MCk7XG4gIH1cblxuICB0b2dnbGVNb2RlKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMubW9kZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMubW9kZSA9IHZhbHVlO1xuICAgICAgdGhpcy5zdG9wTWVtb3J5VGltZXIoKTtcbiAgICB9XG4gIH1cblxuICAvLyBMb2FkIHRoZSBmb3JtIHdpdGggZGF0YVxuICBhc3luYyBsb2FkRGF0YSgpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlVXRpbHMubW9tZW50KCk7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgZW1wdHk6IG51bGwsIC8vIHRvRGF0ZUlTT1N0cmluZyhub3cuY2xvbmUoKS5hZGQoMiwgJ2hvdXJzJykpLFxuICAgICAgZW1wdHlSZXF1aXJlZDogbnVsbCxcbiAgICAgIGVuYWJsZTogdG9EYXRlSVNPU3RyaW5nKG5vdyksXG4gICAgICBkaXNhYmxlOiBub3cuY2xvbmUoKSxcbiAgICAgIHJlYWRvbmx5OiBub3cuY2xvbmUoKVxuICAgIH07XG5cbiAgICB0aGlzLmZvcm0uc2V0VmFsdWUoZGF0YSk7XG5cbiAgICB0aGlzLmxvZygnW3Rlc3QtcGFnZV0gRGF0YSBsb2FkZWQ6ICcgKyBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG5cbiAgICB0aGlzLmZvcm0uZ2V0KCdlbXB0eScpLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDMwMCkpXG4gICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMubG9nKCdbdGVzdC1wYWdlXSBWYWx1ZSBuwrAxOiAnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpKSk7XG5cbiAgICB0aGlzLmZvcm0uZ2V0KCdlbmFibGUnKS52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgzMDApKVxuICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLmxvZygnW3Rlc3QtcGFnZV0gVmFsdWUgbsKwMjogJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSkpO1xuXG4gIH1cblxuICBkb1N1Ym1pdChldmVudCkge1xuICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgdGhpcy5sb2coJ1t0ZXN0LXBhZ2VdIEZvcm0gY29udGVudDogJyArIEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS52YWx1ZSkpO1xuICAgIHRoaXMubG9nKCdbdGVzdC1wYWdlXSBGb3JtIHN0YXR1czogJyArIHRoaXMuZm9ybS5zdGF0dXMpO1xuICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xuICAgICAgdGhpcy5sb2coJ1t0ZXN0LXBhZ2VdIEZvcm0gZXJyb3JzOiAnICsgSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtLmVycm9ycykpO1xuXG4gICAgICAvLyBERUJVR1xuICAgICAgQXBwRm9ybVV0aWxzLmxvZ0Zvcm1FcnJvcnModGhpcy5mb3JtKTtcbiAgICB9XG4gIH1cblxuICBsb2cobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgY29uc29sZS5kZWJ1ZyhtZXNzYWdlKTtcblxuICAgIGlmICh0aGlzLnNob3dMb2dQYW5lbCkge1xuICAgICAgdGhpcy5sb2dDb250ZW50ICs9IG1lc3NhZ2UgKyAnPGJyLz4nO1xuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckxvZ1BhbmVsKCkge1xuICAgIHRoaXMubG9nQ29udGVudCA9ICcnO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBzdGFydE1lbW9yeVRpbWVyKCkge1xuICAgIHRoaXMubWVtb3J5VGltZXIgPSB0aW1lcig1MCw1MClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5tZW1vcnlIaWRlID0gIXRoaXMubWVtb3J5SGlkZTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0b3BNZW1vcnlUaW1lcigpIHtcbiAgICB0aGlzLm1lbW9yeVRpbWVyPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMubWVtb3J5VGltZXIgPSBudWxsO1xuICAgIHRoaXMubWVtb3J5SGlkZSA9IGZhbHNlO1xuICB9XG5cbiAgc3RyaW5naWZ5ID0gSlNPTi5zdHJpbmdpZnk7XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuXG59XG5cbiIsIjxpb24taGVhZGVyPlxuICA8aW9uLXRvb2xiYXIgY29sb3I9XCJwcmltYXJ5XCI+XG5cbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XG4gICAgICA8aW9uLWJhY2stYnV0dG9uPjwvaW9uLWJhY2stYnV0dG9uPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG5cbiAgICA8aW9uLXRpdGxlPkRhdGUgc2hvcnQgZmllbGQgdGVzdCBwYWdlPC9pb24tdGl0bGU+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1oZWFkZXI+XG5cbjxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG5cbiAgPCEtLSBUYWIgbmF2IC0gbW9iaWxlL2Rlc2t0b3AgbW9kZSAtLT5cbiAgPG5hdiBtYXQtdGFiLW5hdi1iYXIgW3RhYlBhbmVsXT1cInRhYlBhbmVsXCI+XG4gICAgPGEgbWF0LXRhYi1saW5rXG4gICAgICAgW2FjdGl2ZV09XCJtb2RlPT09J21vYmlsZSdcIlxuICAgICAgIChjbGljayk9XCJ0b2dnbGVNb2RlKCdtb2JpbGUnKVwiPlxuICAgICAgPG1hdC1sYWJlbD5Nb2JpbGU8L21hdC1sYWJlbD5cbiAgICA8L2E+XG4gICAgPGEgbWF0LXRhYi1saW5rIFthY3RpdmVdPVwibW9kZT09PSdkZXNrdG9wJ1wiXG4gICAgICAgKGNsaWNrKT1cInRvZ2dsZU1vZGUoJ2Rlc2t0b3AnKVwiPlxuICAgICAgPG1hdC1sYWJlbD5EZXNrdG9wPC9tYXQtbGFiZWw+XG4gICAgPC9hPlxuICAgIDxhIG1hdC10YWItbGluayBbYWN0aXZlXT1cIm1vZGU9PT0nbWVtb3J5J1wiXG4gICAgICAgKGNsaWNrKT1cInRvZ2dsZU1vZGUoJ21lbW9yeScpXCI+XG4gICAgICA8bWF0LWxhYmVsPk1lbW9yeSBsZWFrIGRlYnVnPC9tYXQtbGFiZWw+XG4gICAgPC9hPlxuICAgIDxhIG1hdC10YWItbGlua1xuICAgICAgIFthY3RpdmVdPVwibW9kZT09PSd0ZW1wJ1wiXG4gICAgICAgKGNsaWNrKT1cInRvZ2dsZU1vZGUoJ3RlbXAnKVwiPlxuICAgICAgPG1hdC1sYWJlbD5UZW1wb3Jhcnk8L21hdC1sYWJlbD5cbiAgICA8L2E+XG4gIDwvbmF2PlxuXG4gIDxmb3JtICN0YWJQYW5lbCBjbGFzcz1cImZvcm0tY29udGFpbmVyXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cImRvU3VibWl0KCRldmVudClcIj5cblxuICAgIDxpb24tZ3JpZCAqbmdJZj1cIm1vZGU9PT0nbWVtb3J5J1wiPlxuXG4gICAgICA8IS0tIGRlYnVnZ2luZyBtZW1vcnkgbGVhayAtLT5cbiAgICAgIDxpb24tcm93Pjxpb24tY29sPjxpb24tdGV4dD48aDQ+RGVidWcgbWVtb3J5IGxlYWs8L2g0PjwvaW9uLXRleHQ+PC9pb24tY29sPjwvaW9uLXJvdz5cbiAgICAgIDxpb24tcm93PlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiPlxuICAgICAgICAgIDxpb24tYnV0dG9uICpuZ0lmPVwiIW1lbW9yeVRpbWVyXCIgKGNsaWNrKT1cInN0YXJ0TWVtb3J5VGltZXIoKVwiPlN0YXJ0IHRpbWVyPC9pb24tYnV0dG9uPlxuICAgICAgICAgIDxpb24tYnV0dG9uICpuZ0lmPVwibWVtb3J5VGltZXJcIiAoY2xpY2spPVwic3RvcE1lbW9yeVRpbWVyKClcIj5TdG9wIHRpbWVyPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZsb2F0TGFiZWw9XCJhdXRvXCI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBoaWRkZW4+XG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwibWVtb3J5TW9iaWxlPSRldmVudC5jaGVja2VkXCIgW2NoZWNrZWRdPVwibWVtb3J5TW9iaWxlXCI+XG4gICAgICAgICAgICAgIE1vYmlsZSA/XG4gICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxtYXQtZGF0ZS1zaG9ydC1maWVsZCBmb3JtQ29udHJvbE5hbWU9XCJlbXB0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhbWVtb3J5SGlkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJtZW1vcnlNb2JpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGVhcmFibGVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG1hdFByZWZpeCBuYW1lPVwiY2FsZW5kYXItb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9tYXQtZGF0ZS1zaG9ydC1maWVsZD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLWdyaWQ+XG5cbiAgICA8aW9uLWdyaWQgKm5nSWY9XCJtb2RlPT09J21vYmlsZSdcIj5cbiAgICAgIDwhLS0gTW9iaWxlIG1vZGUgLS0+XG4gICAgICA8aW9uLXJvdz48aW9uLWNvbD48aW9uLXRleHQ+PGg0Pk1vYmlsZSBtb2RlPC9oND48L2lvbi10ZXh0PjwvaW9uLWNvbD48L2lvbi1yb3c+XG4gICAgICA8aW9uLXJvdz5cbiAgICAgICAgPGlvbi1jb2w+XG5cbiAgICAgICAgICA8IS0tIEVtcHR5IHZhbHVlIC0tPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgRW1wdHkgdmFsdWVcbiAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPjxwcmU+e3tzdHJpbmdpZnkoZm9ybS5jb250cm9scy5lbXB0eS52YWx1ZSl9fTwvcHJlPjwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxtYXQtZGF0ZS1zaG9ydC1maWVsZCBmb3JtQ29udHJvbE5hbWU9XCJlbXB0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGVhcmFibGVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBtYXRQcmVmaXggbmFtZT1cImNhbGVuZGFyLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1kYXRlLXNob3J0LWZpZWxkPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgICA8aW9uLWNvbD5cblxuICAgICAgICAgIDwhLS0gRW1wdHkgdmFsdWUgLS0+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICBFbXB0eSB2YWx1ZSAocmVxdWlyZWQpXG4gICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD48cHJlPnt7c3RyaW5naWZ5KGZvcm0uY29udHJvbHMuZW1wdHlSZXF1aXJlZC52YWx1ZSl9fTwvcHJlPjwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxtYXQtZGF0ZS1zaG9ydC1maWVsZCBmb3JtQ29udHJvbE5hbWU9XCJlbXB0eVJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG1hdFByZWZpeCBuYW1lPVwiY2FsZW5kYXItb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWRhdGUtc2hvcnQtZmllbGQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgIDwhLS0gRW5hYmxlICAtLT5cbiAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICBXaXRoIHZhbHVlXG4gICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD48cHJlPnt7c3RyaW5naWZ5KGZvcm0uY29udHJvbHMuZW5hYmxlLnZhbHVlKX19PC9wcmU+PC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPG1hdC1kYXRlLXNob3J0LWZpZWxkIGZvcm1Db250cm9sTmFtZT1cImVuYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG1hdFByZWZpeCBuYW1lPVwiY2FsZW5kYXItb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWRhdGUtc2hvcnQtZmllbGQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgIDwhLS0gRGlzYWJsZSAtLT5cbiAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICBEaXNhYmxlXG4gICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD48cHJlPnt7c3RyaW5naWZ5KGZvcm0uY29udHJvbHMuZGlzYWJsZS52YWx1ZSl9fTwvcHJlPjwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxtYXQtZGF0ZS1zaG9ydC1maWVsZCBmb3JtQ29udHJvbE5hbWU9XCJkaXNhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbWF0UHJlZml4IG5hbWU9XCJjYWxlbmRhci1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZGF0ZS1zaG9ydC1maWVsZD5cblxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgICA8IS0tIFJlYWRvbmx5ICAtLT5cbiAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICBSZWFkb25seSB0b2dnbGVcbiAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPjxwcmU+e3tzdHJpbmdpZnkoZm9ybS5jb250cm9scy5yZWFkb25seS52YWx1ZSl9fTwvcHJlPjwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCJtb2JpbGVSZWFkb25seUZpZWxkLnJlYWRvbmx5PSRldmVudC5jaGVja2VkXCIgW2NoZWNrZWRdPVwibW9iaWxlUmVhZG9ubHlGaWVsZC5yZWFkb25seVwiPlxuICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cblxuICAgICAgICAgICAgICA8bWF0LWRhdGUtc2hvcnQtZmllbGQgI21vYmlsZVJlYWRvbmx5RmllbGQgZm9ybUNvbnRyb2xOYW1lPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbWF0UHJlZml4IG5hbWU9XCJjYWxlbmRhci1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZGF0ZS1zaG9ydC1maWVsZD5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICA8L2lvbi1yb3c+XG4gICAgICA8IS0tIGRlYnVnIGNvbnNvbGUgLS0+XG4gICAgICA8aW9uLXJvdz5cbiAgICAgICAgPCEtLSBidXR0b25zIC0tPlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiMlwiPlxuICAgICAgICAgIDwhLS0gc3VibWl0IGZvcm0gLS0+XG4gICAgICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cImRvU3VibWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNoZWNrbWFya1wiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgICAgIDwhLS0gY2xlYXIgbG9nICAtLT5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiY2xlYXJMb2dQYW5lbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJ0cmFzaFwiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiMTBcIiAqbmdJZj1cInNob3dMb2dQYW5lbFwiPlxuICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cInByaW1hcnlcIj5Mb2c6PGJyLz48L2lvbi10ZXh0PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpb24tcGFkZGluZy1zdGFydFwiPlxuICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgIDxzbWFsbCBbaW5uZXJIVE1MXT1cImxvZ0NvbnRlbnRcIj48L3NtYWxsPlxuICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLWdyaWQ+XG5cbiAgICA8aW9uLWdyaWQgKm5nSWY9XCJtb2RlPT09J2Rlc2t0b3AnXCI+XG4gICAgICA8IS0tIERlc2t0b3AgbW9kZSAtLT5cbiAgICAgIDxpb24tcm93Pjxpb24tY29sPjxpb24tdGV4dD48aDQ+RGVza3RvcCBtb2RlPC9oND48L2lvbi10ZXh0PjwvaW9uLWNvbD48L2lvbi1yb3c+XG4gICAgICA8aW9uLXJvdz5cbiAgICAgICAgPGlvbi1jb2w+XG5cbiAgICAgICAgICA8IS0tIEVtcHR5IHZhbHVlIC0tPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgRW1wdHkgdmFsdWVcbiAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8cHJlPlxuICAgICAgICAgICAgICAgICAgICAgIHt7c3RyaW5naWZ5KGZvcm0uY29udHJvbHMuZW1wdHkudmFsdWUpfX1cbiAgICAgICAgICAgICAgICAgICAgPC9wcmU+PGJyLz5cbiAgICAgICAgICAgICAgICAgICAgPHByZT5cbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbC52YWxpZD8ge3tmb3JtLmNvbnRyb2xzLmVtcHR5Py52YWxpZH19XG4gICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRyb2wudmFsaWQ/IHt7ZGVza3RvcEVtcHR5RmllbGQudGV4dENvbnRyb2w/LnZhbGlkfX1cbiAgICAgICAgICAgICAgICAgICAgPC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8bWF0LWRhdGUtc2hvcnQtZmllbGQgZm9ybUNvbnRyb2xOYW1lPVwiZW1wdHlcIiAjZGVza3RvcEVtcHR5RmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGVhcmFibGVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBtYXRQcmVmaXggbmFtZT1cImNhbGVuZGFyLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1kYXRlLXNob3J0LWZpZWxkPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgICA8aW9uLWNvbD5cblxuICAgICAgICAgIDwhLS0gRW1wdHkgdmFsdWUgKyByZXF1aXJlZCAtLT5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgIEVtcHR5IHZhbHVlIChyZXF1aXJlZClcbiAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPjxwcmU+e3tzdHJpbmdpZnkoZm9ybS5jb250cm9scy5lbXB0eVJlcXVpcmVkLnZhbHVlKX19PC9wcmU+PC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPG1hdC1kYXRlLXNob3J0LWZpZWxkIGZvcm1Db250cm9sTmFtZT1cImVtcHR5UmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG1hdFByZWZpeCBuYW1lPVwiY2FsZW5kYXItb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWRhdGUtc2hvcnQtZmllbGQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgIDwhLS0gRW5hYmxlICAtLT5cbiAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICBXaXRoIHZhbHVlXG4gICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD48cHJlPnt7c3RyaW5naWZ5KGZvcm0uY29udHJvbHMuZW5hYmxlLnZhbHVlKX19PC9wcmU+PC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPG1hdC1kYXRlLXNob3J0LWZpZWxkIGZvcm1Db250cm9sTmFtZT1cImVuYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGVhcmFibGVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBtYXRQcmVmaXggbmFtZT1cImNhbGVuZGFyLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1kYXRlLXNob3J0LWZpZWxkPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgICA8IS0tIERpc2FibGUgLS0+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgRGlzYWJsZVxuICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICA8c21hbGw+PHByZT57e3N0cmluZ2lmeShmb3JtLmNvbnRyb2xzLmRpc2FibGUudmFsdWUpfX08L3ByZT48L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8bWF0LWRhdGUtc2hvcnQtZmllbGQgZm9ybUNvbnRyb2xOYW1lPVwiZGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBtYXRQcmVmaXggbmFtZT1cImNhbGVuZGFyLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1kYXRlLXNob3J0LWZpZWxkPlxuXG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgIDwhLS0gUmVhZG9ubHkgIC0tPlxuICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgIFJlYWRvbmx5IHRvZ2dsZVxuICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICA8c21hbGw+PHByZT57e3N0cmluZ2lmeShmb3JtLmNvbnRyb2xzLnJlYWRvbmx5LnZhbHVlKX19PC9wcmU+PC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAoY2hhbmdlKT1cImRlc2t0b3BSZWFkb25seUZpZWxkLnJlYWRvbmx5PSRldmVudC5jaGVja2VkXCIgW2NoZWNrZWRdPVwiZGVza3RvcFJlYWRvbmx5RmllbGQucmVhZG9ubHlcIj5cbiAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG5cbiAgICAgICAgICAgICAgPG1hdC1kYXRlLXNob3J0LWZpZWxkICNkZXNrdG9wUmVhZG9ubHlGaWVsZCBmb3JtQ29udHJvbE5hbWU9XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGVhcmFibGVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBtYXRQcmVmaXggbmFtZT1cImNhbGVuZGFyLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1kYXRlLXNob3J0LWZpZWxkPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLWdyaWQ+XG5cbiAgPC9mb3JtPlxuPC9pb24tY29udGVudD5cbiJdfQ==
@@ -0,0 +1,70 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { MatCommonModule, MatRippleModule } from '@angular/material/core';
3
+ import { TranslateModule } from '@ngx-translate/core';
4
+ import { CommonModule } from '@angular/common';
5
+ import { IonicModule } from '@ionic/angular';
6
+ import { SharedPipesModule } from '../../pipes/pipes.module';
7
+ import { ReactiveFormsModule } from '@angular/forms';
8
+ import { NgxMaterialTimepickerModule } from 'ngx-material-timepicker';
9
+ import { MatDuration } from './material.duration';
10
+ import { MatMomentDateModule } from '@angular/material-moment-adapter';
11
+ import { MatFormFieldModule } from '@angular/material/form-field';
12
+ import { MatInputModule } from '@angular/material/input';
13
+ import { MaskitoModule } from '@maskito/angular';
14
+ import { SharedDirectivesModule } from '../../directives/directives.module';
15
+ import * as i0 from "@angular/core";
16
+ import * as i1 from "@ngx-translate/core";
17
+ export class SharedMatDurationModule {
18
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SharedMatDurationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
19
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: SharedMatDurationModule, declarations: [MatDuration], imports: [CommonModule,
20
+ IonicModule,
21
+ ReactiveFormsModule,
22
+ SharedPipesModule,
23
+ MatCommonModule,
24
+ MatFormFieldModule,
25
+ MatInputModule,
26
+ NgxMaterialTimepickerModule,
27
+ MatRippleModule,
28
+ MatMomentDateModule, i1.TranslateModule, MaskitoModule,
29
+ SharedDirectivesModule], exports: [MatDuration] });
30
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SharedMatDurationModule, imports: [CommonModule,
31
+ IonicModule,
32
+ ReactiveFormsModule,
33
+ SharedPipesModule,
34
+ MatCommonModule,
35
+ MatFormFieldModule,
36
+ MatInputModule,
37
+ NgxMaterialTimepickerModule,
38
+ MatRippleModule,
39
+ MatMomentDateModule,
40
+ TranslateModule.forChild(),
41
+ MaskitoModule,
42
+ SharedDirectivesModule] });
43
+ }
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SharedMatDurationModule, decorators: [{
45
+ type: NgModule,
46
+ args: [{
47
+ imports: [
48
+ CommonModule,
49
+ IonicModule,
50
+ ReactiveFormsModule,
51
+ SharedPipesModule,
52
+ MatCommonModule,
53
+ MatFormFieldModule,
54
+ MatInputModule,
55
+ NgxMaterialTimepickerModule,
56
+ MatRippleModule,
57
+ MatMomentDateModule,
58
+ TranslateModule.forChild(),
59
+ MaskitoModule,
60
+ SharedDirectivesModule
61
+ ],
62
+ exports: [
63
+ MatDuration
64
+ ],
65
+ declarations: [
66
+ MatDuration
67
+ ]
68
+ }]
69
+ }] });
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb24ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvZHVyYXRpb24vZHVyYXRpb24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQzs7O0FBeUIxRSxNQUFNLE9BQU8sdUJBQXVCO3dHQUF2Qix1QkFBdUI7eUdBQXZCLHVCQUF1QixpQkFIaEMsV0FBVyxhQWxCWCxZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQjtZQUNuQixpQkFBaUI7WUFDakIsZUFBZTtZQUNmLGtCQUFrQjtZQUNsQixjQUFjO1lBQ2QsMkJBQTJCO1lBQzNCLGVBQWU7WUFDZixtQkFBbUIsc0JBRW5CLGFBQWE7WUFDYixzQkFBc0IsYUFHdEIsV0FBVzt5R0FNRix1QkFBdUIsWUFyQmhDLFlBQVk7WUFDWixXQUFXO1lBQ1gsbUJBQW1CO1lBQ25CLGlCQUFpQjtZQUNqQixlQUFlO1lBQ2Ysa0JBQWtCO1lBQ2xCLGNBQWM7WUFDZCwyQkFBMkI7WUFDM0IsZUFBZTtZQUNmLG1CQUFtQjtZQUNuQixlQUFlLENBQUMsUUFBUSxFQUFFO1lBQzFCLGFBQWE7WUFDYixzQkFBc0I7OzRGQVNiLHVCQUF1QjtrQkF2Qm5DLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGlCQUFpQjt3QkFDakIsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsMkJBQTJCO3dCQUMzQixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsZUFBZSxDQUFDLFFBQVEsRUFBRTt3QkFDMUIsYUFBYTt3QkFDYixzQkFBc0I7cUJBQ3ZCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxXQUFXO3FCQUNaO29CQUNELFlBQVksRUFBRTt3QkFDWixXQUFXO3FCQUNaO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01hdENvbW1vbk1vZHVsZSwgTWF0UmlwcGxlTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtJb25pY01vZHVsZX0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtTaGFyZWRQaXBlc01vZHVsZX0gZnJvbSAnLi4vLi4vcGlwZXMvcGlwZXMubW9kdWxlJztcbmltcG9ydCB7UmVhY3RpdmVGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtOZ3hNYXRlcmlhbFRpbWVwaWNrZXJNb2R1bGV9IGZyb20gJ25neC1tYXRlcmlhbC10aW1lcGlja2VyJztcbmltcG9ydCB7TWF0RHVyYXRpb259IGZyb20gJy4vbWF0ZXJpYWwuZHVyYXRpb24nO1xuaW1wb3J0IHtNYXRNb21lbnREYXRlTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC1tb21lbnQtYWRhcHRlcic7XG5pbXBvcnQge01hdEZvcm1GaWVsZE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQge01hdElucHV0TW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQge01hc2tpdG9Nb2R1bGV9IGZyb20gJ0BtYXNraXRvL2FuZ3VsYXInO1xuaW1wb3J0IHtTaGFyZWREaXJlY3RpdmVzTW9kdWxlfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2RpcmVjdGl2ZXMubW9kdWxlJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBJb25pY01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFNoYXJlZFBpcGVzTW9kdWxlLFxuICAgIE1hdENvbW1vbk1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTmd4TWF0ZXJpYWxUaW1lcGlja2VyTW9kdWxlLFxuICAgIE1hdFJpcHBsZU1vZHVsZSxcbiAgICBNYXRNb21lbnREYXRlTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZS5mb3JDaGlsZCgpLFxuICAgIE1hc2tpdG9Nb2R1bGUsXG4gICAgU2hhcmVkRGlyZWN0aXZlc01vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgTWF0RHVyYXRpb25cbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgTWF0RHVyYXRpb25cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTaGFyZWRNYXREdXJhdGlvbk1vZHVsZSB7XG59XG5cbiJdfQ==
@@ -19,7 +19,7 @@ export function parseDuration(input, maxDecimals, placeholderChar) {
19
19
  const durationParts = duration.split(':');
20
20
  const hour = parseInt(durationParts[0] || '0');
21
21
  const minute = parseInt(durationParts[1] || '0');
22
- const value = hour + (minute + 0.5) / 60;
22
+ const value = hour + (minute / 60);
23
23
  return roundFloat(value, maxDecimals);
24
24
  }
25
25
  function roundFloat(input, maxDecimals) {
@@ -33,4 +33,4 @@ function roundFloat(input, maxDecimals) {
33
33
  }
34
34
  return input;
35
35
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb24udXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kdXJhdGlvbi9kdXJhdGlvbi51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFFdEMsTUFBTSxVQUFXLGNBQWMsQ0FBQyxLQUFvQjtJQUNsRCxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV2RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDL0MsT0FBTztRQUNMLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUNoQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7S0FDbkMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxDQUFDO0FBRUQsd0NBQXdDO0FBQ3hDLE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBYSxFQUFFLFdBQW9CLEVBQUUsZUFBd0I7SUFFekYsSUFBSSxRQUFRLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUMzQixtQ0FBbUM7SUFDbkMsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQy9DLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUNsRDtJQUVELE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUMvQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBRWpELE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDekMsT0FBTyxVQUFVLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUFhLEVBQUUsV0FBb0I7SUFDckQsSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFO1FBQ25CLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFHLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQztLQUMxRDtJQUNELGdDQUFnQztTQUMzQixJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUU7UUFDMUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQztLQUNoQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9ERUNJTUFMUyA9IDI7XG5cbmV4cG9ydCAgZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24odmFsdWU6IG51bWJlciB8IG51bGwpOiBzdHJpbmcge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgaG91ciA9IE1hdGguZmxvb3IodmFsdWUpO1xuICBjb25zdCBtaW51dGUgPSBNYXRoLnJvdW5kKCh2YWx1ZSAtIGhvdXIpICogNjApO1xuICByZXR1cm4gW1xuICAgIGhvdXIudG9TdHJpbmcoKS5wYWRTdGFydCgzLCAnMCcpLFxuICAgIG1pbnV0ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgXS5qb2luKCc6Jyk7XG59XG5cbi8vIDExMToxMSAgPSAxMTEuMTggKHdpdGggbWF4RGVjaW1hbHM9MilcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKGlucHV0OiBzdHJpbmcsIG1heERlY2ltYWxzPzogbnVtYmVyLCBwbGFjZWhvbGRlckNoYXI/OiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcblxuICBsZXQgZHVyYXRpb24gPSBpbnB1dCB8fCAnJztcbiAgLy8gTWFrZSB0byByZW1vdmUgcGxhY2Vob2xkZXIgY2hhcnNcbiAgd2hpbGUgKGR1cmF0aW9uLmluZGV4T2YocGxhY2Vob2xkZXJDaGFyKSAhPT0gLTEpIHtcbiAgICBkdXJhdGlvbiA9IGR1cmF0aW9uLnJlcGxhY2UocGxhY2Vob2xkZXJDaGFyLCAnJyk7XG4gIH1cblxuICBjb25zdCBkdXJhdGlvblBhcnRzID0gZHVyYXRpb24uc3BsaXQoJzonKTtcbiAgY29uc3QgaG91ciA9IHBhcnNlSW50KGR1cmF0aW9uUGFydHNbMF0gfHwgJzAnKTtcbiAgY29uc3QgbWludXRlID0gcGFyc2VJbnQoZHVyYXRpb25QYXJ0c1sxXSB8fCAnMCcpO1xuXG4gIGNvbnN0IHZhbHVlID0gaG91ciArIChtaW51dGUgKyAwLjUpIC8gNjA7XG4gIHJldHVybiByb3VuZEZsb2F0KHZhbHVlLCBtYXhEZWNpbWFscyk7XG59XG5cbmZ1bmN0aW9uIHJvdW5kRmxvYXQoaW5wdXQ6IG51bWJlciwgbWF4RGVjaW1hbHM/OiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAobWF4RGVjaW1hbHMgPiAwKSB7XG4gICAgY29uc3QgcG93RGVjaW1hbCA9IE1hdGgucG93KDEwLCBtYXhEZWNpbWFscyk7XG4gICAgcmV0dXJuIE1hdGgudHJ1bmMoaW5wdXQgKiBwb3dEZWNpbWFsICsgMC41KSAvIHBvd0RlY2ltYWw7XG4gIH1cbiAgLy8gbm8gZGVjaW1hbHM6IHJvdW5kIHRvIGludGVnZXJcbiAgZWxzZSBpZiAobWF4RGVjaW1hbHMgPT09IDApIHtcbiAgICByZXR1cm4gTWF0aC50cnVuYyhpbnB1dCArIDAuNSk7XG4gIH1cbiAgcmV0dXJuIGlucHV0O1xufVxuIl19
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb24udXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kdXJhdGlvbi9kdXJhdGlvbi51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFFdEMsTUFBTSxVQUFXLGNBQWMsQ0FBQyxLQUFvQjtJQUNsRCxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV2RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDL0MsT0FBTztRQUNMLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUNoQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7S0FDbkMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxDQUFDO0FBRUQsd0NBQXdDO0FBQ3hDLE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBYSxFQUFFLFdBQW9CLEVBQUUsZUFBd0I7SUFFekYsSUFBSSxRQUFRLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUMzQixtQ0FBbUM7SUFDbkMsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQy9DLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUNsRDtJQUVELE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUMvQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBRWpELE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNuQyxPQUFPLFVBQVUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEtBQWEsRUFBRSxXQUFvQjtJQUNyRCxJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUU7UUFDbkIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxVQUFVLEdBQUcsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDO0tBQzFEO0lBQ0QsZ0NBQWdDO1NBQzNCLElBQUksV0FBVyxLQUFLLENBQUMsRUFBRTtRQUMxQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0tBQ2hDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYX0RFQ0lNQUxTID0gMjtcblxuZXhwb3J0ICBmdW5jdGlvbiBmb3JtYXREdXJhdGlvbih2YWx1ZTogbnVtYmVyIHwgbnVsbCk6IHN0cmluZyB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBob3VyID0gTWF0aC5mbG9vcih2YWx1ZSk7XG4gIGNvbnN0IG1pbnV0ZSA9IE1hdGgucm91bmQoKHZhbHVlIC0gaG91cikgKiA2MCk7XG4gIHJldHVybiBbXG4gICAgaG91ci50b1N0cmluZygpLnBhZFN0YXJ0KDMsICcwJyksXG4gICAgbWludXRlLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICBdLmpvaW4oJzonKTtcbn1cblxuLy8gMTExOjExICA9IDExMS4xOCAod2l0aCBtYXhEZWNpbWFscz0yKVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24oaW5wdXQ6IHN0cmluZywgbWF4RGVjaW1hbHM/OiBudW1iZXIsIHBsYWNlaG9sZGVyQ2hhcj86IHN0cmluZyk6IG51bWJlciB8IG51bGwge1xuXG4gIGxldCBkdXJhdGlvbiA9IGlucHV0IHx8ICcnO1xuICAvLyBNYWtlIHRvIHJlbW92ZSBwbGFjZWhvbGRlciBjaGFyc1xuICB3aGlsZSAoZHVyYXRpb24uaW5kZXhPZihwbGFjZWhvbGRlckNoYXIpICE9PSAtMSkge1xuICAgIGR1cmF0aW9uID0gZHVyYXRpb24ucmVwbGFjZShwbGFjZWhvbGRlckNoYXIsICcnKTtcbiAgfVxuXG4gIGNvbnN0IGR1cmF0aW9uUGFydHMgPSBkdXJhdGlvbi5zcGxpdCgnOicpO1xuICBjb25zdCBob3VyID0gcGFyc2VJbnQoZHVyYXRpb25QYXJ0c1swXSB8fCAnMCcpO1xuICBjb25zdCBtaW51dGUgPSBwYXJzZUludChkdXJhdGlvblBhcnRzWzFdIHx8ICcwJyk7XG5cbiAgY29uc3QgdmFsdWUgPSBob3VyICsgKG1pbnV0ZSAvIDYwKTtcbiAgcmV0dXJuIHJvdW5kRmxvYXQodmFsdWUsIG1heERlY2ltYWxzKTtcbn1cblxuZnVuY3Rpb24gcm91bmRGbG9hdChpbnB1dDogbnVtYmVyLCBtYXhEZWNpbWFscz86IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChtYXhEZWNpbWFscyA+IDApIHtcbiAgICBjb25zdCBwb3dEZWNpbWFsID0gTWF0aC5wb3coMTAsIG1heERlY2ltYWxzKTtcbiAgICByZXR1cm4gTWF0aC50cnVuYyhpbnB1dCAqIHBvd0RlY2ltYWwgKyAwLjUpIC8gcG93RGVjaW1hbDtcbiAgfVxuICAvLyBubyBkZWNpbWFsczogcm91bmQgdG8gaW50ZWdlclxuICBlbHNlIGlmIChtYXhEZWNpbWFscyA9PT0gMCkge1xuICAgIHJldHVybiBNYXRoLnRydW5jKGlucHV0ICsgMC41KTtcbiAgfVxuICByZXR1cm4gaW5wdXQ7XG59XG4iXX0=