@sumaris-net/ngx-components 18.24.24 → 21.0.0-rc10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (801) hide show
  1. package/README.md +2 -0
  2. package/doc/build.md +2 -2
  3. package/doc/changelog.md +6 -5
  4. package/fesm2022/sumaris-net-ngx-components-testing.mjs +496 -0
  5. package/fesm2022/sumaris-net-ngx-components-testing.mjs.map +1 -0
  6. package/fesm2022/sumaris-net.ngx-components.mjs +2782 -2426
  7. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  8. package/package.json +20 -15
  9. package/src/assets/environments/environment-test.json +2 -2
  10. package/src/assets/i18n/fr.json +6 -5
  11. package/src/assets/manifest.json +1 -1
  12. package/src/theme/_icons.scss +8 -12
  13. package/src/theme/_ionic.globals.scss +15 -1
  14. package/src/theme/_material.globals.scss +4 -1
  15. package/src/theme/_material.scss +16 -13
  16. package/src/theme/_mixins.scss +7 -1
  17. package/src/theme/_ngx-components.forms.scss +87 -84
  18. package/src/theme/_ngx-components.globals.scss +2 -0
  19. package/src/theme/_ngx-components.scss +20 -5
  20. package/src/theme/_ngx-components.table.scss +37 -26
  21. package/src/theme/_ngx-components.tabs.scss +16 -14
  22. package/src/theme/_responsive.scss +2 -0
  23. package/src/theme/_roboto.scss +3 -0
  24. package/src/theme/_theme.scss +11 -14
  25. package/src/theme/_theme.variables.scss +11 -2
  26. package/src/theme/ionic/ionic.functions.color.scss +13 -5
  27. package/src/theme/ionic/ionic.globals.scss +4 -4
  28. package/src/theme/ionic/ionic.theme.default.scss +2 -0
  29. package/types/sumaris-net-ngx-components-testing.d.ts +286 -0
  30. package/types/sumaris-net.ngx-components.d.ts +14216 -0
  31. package/esm2022/public_api.mjs +0 -403
  32. package/esm2022/src/app/admin/admin-routing.module.mjs +0 -34
  33. package/esm2022/src/app/admin/admin.module.mjs +0 -32
  34. package/esm2022/src/app/admin/users/person.filter.mjs +0 -157
  35. package/esm2022/src/app/admin/users/person.service.mjs +0 -226
  36. package/esm2022/src/app/admin/users/person.validator.mjs +0 -78
  37. package/esm2022/src/app/admin/users/users-select.modal.mjs +0 -167
  38. package/esm2022/src/app/admin/users/users.mjs +0 -502
  39. package/esm2022/src/app/admin/users/users.module.mjs +0 -59
  40. package/esm2022/src/app/admin/users/users.utils.mjs +0 -29
  41. package/esm2022/src/app/core/about/about.modal.mjs +0 -119
  42. package/esm2022/src/app/core/about/about.module.mjs +0 -22
  43. package/esm2022/src/app/core/account/account.module.mjs +0 -75
  44. package/esm2022/src/app/core/account/account.page.mjs +0 -426
  45. package/esm2022/src/app/core/account/new-token.form.mjs +0 -109
  46. package/esm2022/src/app/core/account/new-token.modal.mjs +0 -66
  47. package/esm2022/src/app/core/account/password/change-password.form.mjs +0 -63
  48. package/esm2022/src/app/core/account/password/change-password.module.mjs +0 -22
  49. package/esm2022/src/app/core/account/password/change-password.page.mjs +0 -150
  50. package/esm2022/src/app/core/account/token.table.mjs +0 -160
  51. package/esm2022/src/app/core/auth/auth.form.mjs +0 -159
  52. package/esm2022/src/app/core/auth/auth.modal.mjs +0 -76
  53. package/esm2022/src/app/core/auth/auth.module.mjs +0 -56
  54. package/esm2022/src/app/core/auth/reset-password.modal.mjs +0 -89
  55. package/esm2022/src/app/core/core.module.mjs +0 -157
  56. package/esm2022/src/app/core/core.testing.module.mjs +0 -128
  57. package/esm2022/src/app/core/form/array/form-array.mjs +0 -328
  58. package/esm2022/src/app/core/form/array/testing/form-array-test.module.mjs +0 -23
  59. package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +0 -97
  60. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +0 -111
  61. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +0 -31
  62. package/esm2022/src/app/core/form/entity/editor.class.mjs +0 -268
  63. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +0 -420
  64. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +0 -753
  65. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +0 -25
  66. package/esm2022/src/app/core/form/entity/entity.module.mjs +0 -33
  67. package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +0 -190
  68. package/esm2022/src/app/core/form/form-container.class.mjs +0 -371
  69. package/esm2022/src/app/core/form/form.class.mjs +0 -342
  70. package/esm2022/src/app/core/form/form.module.mjs +0 -77
  71. package/esm2022/src/app/core/form/form.utils.mjs +0 -238
  72. package/esm2022/src/app/core/form/list/list.form.mjs +0 -243
  73. package/esm2022/src/app/core/form/list/list.module.mjs +0 -31
  74. package/esm2022/src/app/core/form/properties/properties-file.service.mjs +0 -133
  75. package/esm2022/src/app/core/form/properties/properties.form.mjs +0 -397
  76. package/esm2022/src/app/core/form/properties/properties.module.mjs +0 -85
  77. package/esm2022/src/app/core/form/properties/properties.table.mjs +0 -267
  78. package/esm2022/src/app/core/form/properties/properties.utils.mjs +0 -304
  79. package/esm2022/src/app/core/form/properties/property.validator.mjs +0 -70
  80. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +0 -103
  81. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +0 -23
  82. package/esm2022/src/app/core/form/text/testing/text-form.testing.mjs +0 -42
  83. package/esm2022/src/app/core/form/text/testing/text-form.testing.module.mjs +0 -25
  84. package/esm2022/src/app/core/form/text/text-form.component.mjs +0 -205
  85. package/esm2022/src/app/core/form/text/text-form.module.mjs +0 -31
  86. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +0 -73
  87. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +0 -22
  88. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +0 -164
  89. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +0 -32
  90. package/esm2022/src/app/core/form/username/username.form.mjs +0 -55
  91. package/esm2022/src/app/core/form/username/username.module.mjs +0 -20
  92. package/esm2022/src/app/core/graphql/graphql.module.mjs +0 -14
  93. package/esm2022/src/app/core/graphql/graphql.service.mjs +0 -781
  94. package/esm2022/src/app/core/graphql/graphql.utils.mjs +0 -119
  95. package/esm2022/src/app/core/home/home.mjs +0 -472
  96. package/esm2022/src/app/core/home/home.module.mjs +0 -54
  97. package/esm2022/src/app/core/icon/icon.component.mjs +0 -40
  98. package/esm2022/src/app/core/icon/icon.module.mjs +0 -20
  99. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +0 -394
  100. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +0 -31
  101. package/esm2022/src/app/core/menu/menu.component.mjs +0 -273
  102. package/esm2022/src/app/core/menu/menu.model.mjs +0 -327
  103. package/esm2022/src/app/core/menu/menu.module.mjs +0 -47
  104. package/esm2022/src/app/core/menu/menu.service.mjs +0 -666
  105. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +0 -113
  106. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +0 -51
  107. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +0 -165
  108. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +0 -60
  109. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +0 -28
  110. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +0 -31
  111. package/esm2022/src/app/core/peer/select-peer.modal.mjs +0 -350
  112. package/esm2022/src/app/core/peer/select-peer.module.mjs +0 -36
  113. package/esm2022/src/app/core/register/register-confirm.page.mjs +0 -90
  114. package/esm2022/src/app/core/register/register.form.mjs +0 -197
  115. package/esm2022/src/app/core/register/register.modal.mjs +0 -55
  116. package/esm2022/src/app/core/register/register.module.mjs +0 -23
  117. package/esm2022/src/app/core/services/account.service.mjs +0 -1403
  118. package/esm2022/src/app/core/services/auth-guard.service.mjs +0 -74
  119. package/esm2022/src/app/core/services/base-entity-service.class.mjs +0 -499
  120. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +0 -224
  121. package/esm2022/src/app/core/services/base58.mjs +0 -83
  122. package/esm2022/src/app/core/services/config/core.config.mjs +0 -293
  123. package/esm2022/src/app/core/services/config.service.mjs +0 -384
  124. package/esm2022/src/app/core/services/crypto.service.mjs +0 -110
  125. package/esm2022/src/app/core/services/errors.mjs +0 -54
  126. package/esm2022/src/app/core/services/local-settings.service.mjs +0 -540
  127. package/esm2022/src/app/core/services/model/account.model.mjs +0 -192
  128. package/esm2022/src/app/core/services/model/config.model.mjs +0 -111
  129. package/esm2022/src/app/core/services/model/department.model.mjs +0 -35
  130. package/esm2022/src/app/core/services/model/entity.decorators.mjs +0 -97
  131. package/esm2022/src/app/core/services/model/entity.model.mjs +0 -347
  132. package/esm2022/src/app/core/services/model/filter.model.mjs +0 -169
  133. package/esm2022/src/app/core/services/model/history.model.mjs +0 -2
  134. package/esm2022/src/app/core/services/model/model.enum.mjs +0 -11
  135. package/esm2022/src/app/core/services/model/node-feature.model.mjs +0 -31
  136. package/esm2022/src/app/core/services/model/peer.model.mjs +0 -114
  137. package/esm2022/src/app/core/services/model/person.model.mjs +0 -118
  138. package/esm2022/src/app/core/services/model/referential.model.mjs +0 -207
  139. package/esm2022/src/app/core/services/model/settings.model.mjs +0 -6
  140. package/esm2022/src/app/core/services/model/token.model.mjs +0 -57
  141. package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +0 -234
  142. package/esm2022/src/app/core/services/network.service.mjs +0 -759
  143. package/esm2022/src/app/core/services/network.types.mjs +0 -2
  144. package/esm2022/src/app/core/services/network.utils.mjs +0 -35
  145. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +0 -38
  146. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +0 -23
  147. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +0 -23
  148. package/esm2022/src/app/core/services/pipes/pipes.module.mjs +0 -58
  149. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +0 -36
  150. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +0 -37
  151. package/esm2022/src/app/core/services/platform.service.mjs +0 -788
  152. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +0 -427
  153. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +0 -450
  154. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +0 -25
  155. package/esm2022/src/app/core/services/testing/referential.validator.mjs +0 -46
  156. package/esm2022/src/app/core/services/validator/account.validator.mjs +0 -46
  157. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +0 -49
  158. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +0 -57
  159. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +0 -27
  160. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +0 -55
  161. package/esm2022/src/app/core/settings/settings.module.mjs +0 -23
  162. package/esm2022/src/app/core/settings/settings.page.mjs +0 -406
  163. package/esm2022/src/app/core/table/async-table.class.mjs +0 -1888
  164. package/esm2022/src/app/core/table/column/actions-column.component.mjs +0 -137
  165. package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +0 -120
  166. package/esm2022/src/app/core/table/column/row-field.component.mjs +0 -116
  167. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +0 -415
  168. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +0 -407
  169. package/esm2022/src/app/core/table/memory-table.class.mjs +0 -57
  170. package/esm2022/src/app/core/table/table-select-columns.component.mjs +0 -46
  171. package/esm2022/src/app/core/table/table.class.mjs +0 -1918
  172. package/esm2022/src/app/core/table/table.model.mjs +0 -21
  173. package/esm2022/src/app/core/table/table.module.mjs +0 -51
  174. package/esm2022/src/app/core/table/table.pipes.mjs +0 -76
  175. package/esm2022/src/app/core/table/table.utils.mjs +0 -34
  176. package/esm2022/src/app/core/table/testing/nested-table.testing.mjs +0 -326
  177. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +0 -32
  178. package/esm2022/src/app/core/table/testing/table.testing.mjs +0 -342
  179. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +0 -47
  180. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +0 -25
  181. package/esm2022/src/app/core/table/testing/table2.testing.mjs +0 -322
  182. package/esm2022/src/app/shared/alerts.mjs +0 -243
  183. package/esm2022/src/app/shared/audio/audio.mjs +0 -255
  184. package/esm2022/src/app/shared/audio/audio.testing.mjs +0 -32
  185. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +0 -30
  186. package/esm2022/src/app/shared/base64.utils.mjs +0 -59
  187. package/esm2022/src/app/shared/capacitor/keyboard.mjs +0 -42
  188. package/esm2022/src/app/shared/capacitor/plugins.mjs +0 -10
  189. package/esm2022/src/app/shared/constants.mjs +0 -20
  190. package/esm2022/src/app/shared/dates.mjs +0 -216
  191. package/esm2022/src/app/shared/debug/debug-service.class.mjs +0 -3
  192. package/esm2022/src/app/shared/debug/debug.component.mjs +0 -44
  193. package/esm2022/src/app/shared/debug/debug.module.mjs +0 -23
  194. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +0 -91
  195. package/esm2022/src/app/shared/directives/autoresize.directive.mjs +0 -75
  196. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +0 -30
  197. package/esm2022/src/app/shared/directives/autotooltip.directive.mjs +0 -35
  198. package/esm2022/src/app/shared/directives/cell-selection/cell-identifier.directive.mjs +0 -55
  199. package/esm2022/src/app/shared/directives/cell-selection/cell-selection.directive.mjs +0 -206
  200. package/esm2022/src/app/shared/directives/cell-selection/cell-selection.service.mjs +0 -204
  201. package/esm2022/src/app/shared/directives/directives.module.mjs +0 -53
  202. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +0 -52
  203. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +0 -33
  204. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +0 -62
  205. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +0 -96
  206. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +0 -17
  207. package/esm2022/src/app/shared/directives/throttled-click.directive.mjs +0 -43
  208. package/esm2022/src/app/shared/events.mjs +0 -64
  209. package/esm2022/src/app/shared/file/csv.utils.mjs +0 -97
  210. package/esm2022/src/app/shared/file/file.service.mjs +0 -118
  211. package/esm2022/src/app/shared/file/file.utils.mjs +0 -117
  212. package/esm2022/src/app/shared/file/images.utils.mjs +0 -218
  213. package/esm2022/src/app/shared/file/json.utils.mjs +0 -58
  214. package/esm2022/src/app/shared/file/uri.utils.mjs +0 -29
  215. package/esm2022/src/app/shared/file/url.utils.mjs +0 -213
  216. package/esm2022/src/app/shared/focusable.mjs +0 -6
  217. package/esm2022/src/app/shared/form/field.component.mjs +0 -388
  218. package/esm2022/src/app/shared/form/field.model.mjs +0 -100
  219. package/esm2022/src/app/shared/form/loading-spinner.mjs +0 -35
  220. package/esm2022/src/app/shared/forms.mjs +0 -593
  221. package/esm2022/src/app/shared/functions.mjs +0 -900
  222. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +0 -94
  223. package/esm2022/src/app/shared/gesture/gesture-config.mjs +0 -46
  224. package/esm2022/src/app/shared/gesture/hammer.utils.mjs +0 -2
  225. package/esm2022/src/app/shared/graph/colors.utils.mjs +0 -85
  226. package/esm2022/src/app/shared/graph/graph-colors.mjs +0 -214
  227. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +0 -68
  228. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +0 -23
  229. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +0 -147
  230. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +0 -24
  231. package/esm2022/src/app/shared/html.utils.mjs +0 -35
  232. package/esm2022/src/app/shared/http/http.utils.mjs +0 -56
  233. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +0 -452
  234. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +0 -62
  235. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +0 -26
  236. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +0 -92
  237. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +0 -37
  238. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +0 -59
  239. package/esm2022/src/app/shared/image/image.model.mjs +0 -2
  240. package/esm2022/src/app/shared/image/image.module.mjs +0 -24
  241. package/esm2022/src/app/shared/image/image.service.mjs +0 -118
  242. package/esm2022/src/app/shared/inputs.mjs +0 -281
  243. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +0 -27
  244. package/esm2022/src/app/shared/logging/log-level.model.mjs +0 -48
  245. package/esm2022/src/app/shared/logging/logger.model.mjs +0 -47
  246. package/esm2022/src/app/shared/logging/logging-service.class.mjs +0 -125
  247. package/esm2022/src/app/shared/logging/logging-service.config.mjs +0 -2
  248. package/esm2022/src/app/shared/logging/logging-service.module.mjs +0 -30
  249. package/esm2022/src/app/shared/markdown/markdown.component.mjs +0 -321
  250. package/esm2022/src/app/shared/markdown/markdown.directive.mjs +0 -34
  251. package/esm2022/src/app/shared/markdown/markdown.modal.mjs +0 -99
  252. package/esm2022/src/app/shared/markdown/markdown.module.mjs +0 -87
  253. package/esm2022/src/app/shared/markdown/markdown.service.mjs +0 -204
  254. package/esm2022/src/app/shared/markdown/markdown.utils.mjs +0 -87
  255. package/esm2022/src/app/shared/markdown/testing/markdown.test.mjs +0 -55
  256. package/esm2022/src/app/shared/markdown/testing/markdown.testing.module.mjs +0 -30
  257. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +0 -46
  258. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +0 -1373
  259. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +0 -81
  260. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +0 -18
  261. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +0 -244
  262. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +0 -251
  263. package/esm2022/src/app/shared/material/badge/badge.module.mjs +0 -20
  264. package/esm2022/src/app/shared/material/badge/badge.test.mjs +0 -42
  265. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +0 -70
  266. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +0 -374
  267. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +0 -83
  268. package/esm2022/src/app/shared/material/chips/chips.module.mjs +0 -74
  269. package/esm2022/src/app/shared/material/chips/material.chips.mjs +0 -843
  270. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +0 -151
  271. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +0 -79
  272. package/esm2022/src/app/shared/material/datetime/material.date.mjs +0 -474
  273. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +0 -457
  274. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +0 -852
  275. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +0 -140
  276. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +0 -127
  277. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +0 -118
  278. package/esm2022/src/app/shared/material/duration/duration.module.mjs +0 -61
  279. package/esm2022/src/app/shared/material/duration/duration.utils.mjs +0 -16
  280. package/esm2022/src/app/shared/material/duration/material.duration.mjs +0 -283
  281. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +0 -85
  282. package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +0 -319
  283. package/esm2022/src/app/shared/material/latlong/material.latlong-input.mjs +0 -471
  284. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +0 -231
  285. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +0 -68
  286. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +0 -138
  287. package/esm2022/src/app/shared/material/material.animations.mjs +0 -200
  288. package/esm2022/src/app/shared/material/material.config.mjs +0 -3
  289. package/esm2022/src/app/shared/material/material.module.mjs +0 -224
  290. package/esm2022/src/app/shared/material/material.testing.module.mjs +0 -234
  291. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +0 -51
  292. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +0 -23
  293. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +0 -379
  294. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +0 -52
  295. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +0 -67
  296. package/esm2022/src/app/shared/material/test/test-component.mjs +0 -264
  297. package/esm2022/src/app/shared/material/testing/common.test.mjs +0 -111
  298. package/esm2022/src/app/shared/modules.mjs +0 -12
  299. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +0 -306
  300. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +0 -49
  301. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +0 -24
  302. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +0 -69
  303. package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +0 -74
  304. package/esm2022/src/app/shared/named-filter/testing/named-filter.testing.module.mjs +0 -28
  305. package/esm2022/src/app/shared/observables.mjs +0 -104
  306. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +0 -251
  307. package/esm2022/src/app/shared/pipes/badge.pipes.mjs +0 -25
  308. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +0 -29
  309. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +0 -50
  310. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +0 -72
  311. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +0 -28
  312. package/esm2022/src/app/shared/pipes/date-from.pipe.mjs +0 -29
  313. package/esm2022/src/app/shared/pipes/dates.pipe.mjs +0 -18
  314. package/esm2022/src/app/shared/pipes/display-with.pipe.mjs +0 -23
  315. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +0 -34
  316. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +0 -53
  317. package/esm2022/src/app/shared/pipes/form.pipes.mjs +0 -258
  318. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +0 -50
  319. package/esm2022/src/app/shared/pipes/html.pipes.mjs +0 -102
  320. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +0 -42
  321. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +0 -65
  322. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +0 -67
  323. package/esm2022/src/app/shared/pipes/math.pipes.mjs +0 -77
  324. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +0 -19
  325. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +0 -17
  326. package/esm2022/src/app/shared/pipes/observable.pipes.mjs +0 -63
  327. package/esm2022/src/app/shared/pipes/pipes.module.mjs +0 -316
  328. package/esm2022/src/app/shared/pipes/property.pipes.mjs +0 -148
  329. package/esm2022/src/app/shared/pipes/selection.pipes.mjs +0 -177
  330. package/esm2022/src/app/shared/pipes/string.pipes.mjs +0 -196
  331. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +0 -44
  332. package/esm2022/src/app/shared/pipes/types.pipes.mjs +0 -74
  333. package/esm2022/src/app/shared/pipes/url.pipes.mjs +0 -35
  334. package/esm2022/src/app/shared/platforms.mjs +0 -81
  335. package/esm2022/src/app/shared/print/print.service.mjs +0 -305
  336. package/esm2022/src/app/shared/regexps.mjs +0 -103
  337. package/esm2022/src/app/shared/rx-state/rx-state.decorators.mjs +0 -193
  338. package/esm2022/src/app/shared/rx-state/rx-state.module.mjs +0 -19
  339. package/esm2022/src/app/shared/rx-state/rx-state.types.mjs +0 -2
  340. package/esm2022/src/app/shared/services/entity-service.class.mjs +0 -44
  341. package/esm2022/src/app/shared/services/job.utils.mjs +0 -92
  342. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +0 -362
  343. package/esm2022/src/app/shared/services/progress-bar.service.mjs +0 -31
  344. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +0 -144
  345. package/esm2022/src/app/shared/services/startable-service.class.mjs +0 -118
  346. package/esm2022/src/app/shared/services/translate-context.service.mjs +0 -107
  347. package/esm2022/src/app/shared/services/validator-service.class.mjs +0 -2
  348. package/esm2022/src/app/shared/services.mjs +0 -85
  349. package/esm2022/src/app/shared/shared-routing.module.mjs +0 -72
  350. package/esm2022/src/app/shared/shared.module.mjs +0 -229
  351. package/esm2022/src/app/shared/shared.testing.module.mjs +0 -108
  352. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +0 -281
  353. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +0 -42
  354. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +0 -27
  355. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +0 -25
  356. package/esm2022/src/app/shared/storage/storage.service.mjs +0 -134
  357. package/esm2022/src/app/shared/storage/storage.utils.mjs +0 -13
  358. package/esm2022/src/app/shared/testing/maskito.test.mjs +0 -41
  359. package/esm2022/src/app/shared/testing/observable.test.mjs +0 -94
  360. package/esm2022/src/app/shared/testing/tests.page.mjs +0 -37
  361. package/esm2022/src/app/shared/toast/toast.testing.mjs +0 -54
  362. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +0 -31
  363. package/esm2022/src/app/shared/toast/toasts.mjs +0 -134
  364. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +0 -62
  365. package/esm2022/src/app/shared/toolbar/toolbar.mjs +0 -279
  366. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +0 -26
  367. package/esm2022/src/app/shared/types.mjs +0 -2
  368. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +0 -59
  369. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +0 -30
  370. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +0 -114
  371. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +0 -216
  372. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +0 -26
  373. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +0 -122
  374. package/esm2022/src/app/shared/validator/validators.mjs +0 -658
  375. package/esm2022/src/app/shared/version/versions.mjs +0 -80
  376. package/esm2022/src/app/social/config/social.config.mjs +0 -9
  377. package/esm2022/src/app/social/feed/feed.component.mjs +0 -317
  378. package/esm2022/src/app/social/feed/feed.directive.mjs +0 -151
  379. package/esm2022/src/app/social/feed/feed.model.mjs +0 -60
  380. package/esm2022/src/app/social/feed/feed.module.mjs +0 -24
  381. package/esm2022/src/app/social/feed/feed.page.mjs +0 -67
  382. package/esm2022/src/app/social/feed/feed.service.mjs +0 -222
  383. package/esm2022/src/app/social/feed/testing/feed.testing.mjs +0 -66
  384. package/esm2022/src/app/social/feed/testing/feed.testing.module.mjs +0 -23
  385. package/esm2022/src/app/social/job/job.module.mjs +0 -23
  386. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +0 -38
  387. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +0 -241
  388. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +0 -50
  389. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +0 -29
  390. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +0 -91
  391. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +0 -38
  392. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +0 -34
  393. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +0 -22
  394. package/esm2022/src/app/social/message/message.form.mjs +0 -149
  395. package/esm2022/src/app/social/message/message.modal.mjs +0 -116
  396. package/esm2022/src/app/social/message/message.model.mjs +0 -86
  397. package/esm2022/src/app/social/message/message.module.mjs +0 -25
  398. package/esm2022/src/app/social/message/message.service.mjs +0 -198
  399. package/esm2022/src/app/social/social.errors.mjs +0 -11
  400. package/esm2022/src/app/social/social.module.mjs +0 -22
  401. package/esm2022/src/app/social/social.testing.module.mjs +0 -72
  402. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +0 -191
  403. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +0 -280
  404. package/esm2022/src/app/social/user-event/notification/user-event-notification.modal.mjs +0 -84
  405. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +0 -273
  406. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +0 -129
  407. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +0 -22
  408. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +0 -128
  409. package/esm2022/src/app/social/user-event/user-event.model.mjs +0 -2
  410. package/esm2022/src/app/social/user-event/user-event.module.mjs +0 -24
  411. package/esm2022/src/app/social/user-event/user-event.service.mjs +0 -512
  412. package/esm2022/src/environments/environment.class.mjs +0 -69
  413. package/esm2022/src/environments/environment.loader.mjs +0 -77
  414. package/esm2022/src/environments/environment.mjs +0 -133
  415. package/esm2022/sumaris-net.ngx-components.mjs +0 -5
  416. package/index.d.ts +0 -5
  417. package/public_api.d.ts +0 -364
  418. package/src/app/admin/admin-routing.module.d.ts +0 -9
  419. package/src/app/admin/admin.module.d.ts +0 -10
  420. package/src/app/admin/users/person.filter.d.ts +0 -37
  421. package/src/app/admin/users/person.service.d.ts +0 -61
  422. package/src/app/admin/users/person.validator.d.ts +0 -23
  423. package/src/app/admin/users/users-select.modal.d.ts +0 -73
  424. package/src/app/admin/users/users.d.ts +0 -89
  425. package/src/app/admin/users/users.module.d.ts +0 -15
  426. package/src/app/admin/users/users.utils.d.ts +0 -6
  427. package/src/app/core/about/about.modal.d.ts +0 -44
  428. package/src/app/core/about/about.module.d.ts +0 -11
  429. package/src/app/core/account/account.module.d.ts +0 -18
  430. package/src/app/core/account/account.page.d.ts +0 -93
  431. package/src/app/core/account/new-token.form.d.ts +0 -30
  432. package/src/app/core/account/new-token.modal.d.ts +0 -29
  433. package/src/app/core/account/password/change-password.form.d.ts +0 -19
  434. package/src/app/core/account/password/change-password.module.d.ts +0 -11
  435. package/src/app/core/account/password/change-password.page.d.ts +0 -36
  436. package/src/app/core/account/token.table.d.ts +0 -28
  437. package/src/app/core/auth/auth.form.d.ts +0 -38
  438. package/src/app/core/auth/auth.modal.d.ts +0 -24
  439. package/src/app/core/auth/auth.module.d.ts +0 -13
  440. package/src/app/core/auth/reset-password.modal.d.ts +0 -29
  441. package/src/app/core/core.module.d.ts +0 -28
  442. package/src/app/core/core.testing.module.d.ts +0 -16
  443. package/src/app/core/form/array/form-array.d.ts +0 -147
  444. package/src/app/core/form/array/testing/form-array-test.module.d.ts +0 -12
  445. package/src/app/core/form/array/testing/form-array.test.d.ts +0 -27
  446. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +0 -38
  447. package/src/app/core/form/buttons/form-buttons-bar.module.d.ts +0 -9
  448. package/src/app/core/form/entity/editor.class.d.ts +0 -86
  449. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +0 -126
  450. package/src/app/core/form/entity/entity-editor.class.d.ts +0 -211
  451. package/src/app/core/form/entity/entity-metadata.component.d.ts +0 -13
  452. package/src/app/core/form/entity/entity.module.d.ts +0 -11
  453. package/src/app/core/form/entity/tab-editor.class.d.ts +0 -66
  454. package/src/app/core/form/form-container.class.d.ts +0 -132
  455. package/src/app/core/form/form.class.d.ts +0 -148
  456. package/src/app/core/form/form.module.d.ts +0 -15
  457. package/src/app/core/form/form.utils.d.ts +0 -301
  458. package/src/app/core/form/list/list.form.d.ts +0 -83
  459. package/src/app/core/form/list/list.module.d.ts +0 -9
  460. package/src/app/core/form/properties/properties-file.service.d.ts +0 -26
  461. package/src/app/core/form/properties/properties.form.d.ts +0 -109
  462. package/src/app/core/form/properties/properties.module.d.ts +0 -18
  463. package/src/app/core/form/properties/properties.table.d.ts +0 -73
  464. package/src/app/core/form/properties/properties.utils.d.ts +0 -59
  465. package/src/app/core/form/properties/property.validator.d.ts +0 -27
  466. package/src/app/core/form/properties/testing/properties-form.test.d.ts +0 -22
  467. package/src/app/core/form/properties/testing/properties-form.testing.module.d.ts +0 -12
  468. package/src/app/core/form/text/testing/text-form.testing.d.ts +0 -19
  469. package/src/app/core/form/text/testing/text-form.testing.module.d.ts +0 -14
  470. package/src/app/core/form/text/text-form.component.d.ts +0 -66
  471. package/src/app/core/form/text/text-form.module.d.ts +0 -9
  472. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +0 -16
  473. package/src/app/core/form/text-popover/testing/text-popover.testing.module.d.ts +0 -11
  474. package/src/app/core/form/text-popover/text-popover.component.d.ts +0 -81
  475. package/src/app/core/form/text-popover/text-popover.module.d.ts +0 -10
  476. package/src/app/core/form/username/username.form.d.ts +0 -19
  477. package/src/app/core/form/username/username.module.d.ts +0 -9
  478. package/src/app/core/graphql/graphql.module.d.ts +0 -7
  479. package/src/app/core/graphql/graphql.service.d.ts +0 -138
  480. package/src/app/core/graphql/graphql.utils.d.ts +0 -47
  481. package/src/app/core/home/home.d.ts +0 -135
  482. package/src/app/core/home/home.module.d.ts +0 -16
  483. package/src/app/core/icon/icon.component.d.ts +0 -13
  484. package/src/app/core/icon/icon.module.d.ts +0 -9
  485. package/src/app/core/install/install-upgrade-card.component.d.ts +0 -63
  486. package/src/app/core/install/install-upgrade-card.module.d.ts +0 -9
  487. package/src/app/core/menu/menu.component.d.ts +0 -69
  488. package/src/app/core/menu/menu.model.d.ts +0 -163
  489. package/src/app/core/menu/menu.module.d.ts +0 -12
  490. package/src/app/core/menu/menu.service.d.ts +0 -93
  491. package/src/app/core/menu/sub-menu-tab.directive.d.ts +0 -29
  492. package/src/app/core/menu/testing/menu-other.testing.d.ts +0 -15
  493. package/src/app/core/menu/testing/menu.testing.d.ts +0 -53
  494. package/src/app/core/menu/testing/menu.testing.module.d.ts +0 -12
  495. package/src/app/core/offline/update-offline-mode-card.component.d.ts +0 -11
  496. package/src/app/core/offline/update-offline-mode-card.module.d.ts +0 -9
  497. package/src/app/core/peer/select-peer.modal.d.ts +0 -108
  498. package/src/app/core/peer/select-peer.module.d.ts +0 -12
  499. package/src/app/core/register/register-confirm.page.d.ts +0 -24
  500. package/src/app/core/register/register.form.d.ts +0 -49
  501. package/src/app/core/register/register.modal.d.ts +0 -14
  502. package/src/app/core/register/register.module.d.ts +0 -12
  503. package/src/app/core/services/account.service.d.ts +0 -236
  504. package/src/app/core/services/auth-guard.service.d.ts +0 -17
  505. package/src/app/core/services/base-entity-service.class.d.ts +0 -134
  506. package/src/app/core/services/base-graphql-service.class.d.ts +0 -77
  507. package/src/app/core/services/base58.d.ts +0 -7
  508. package/src/app/core/services/config/core.config.d.ts +0 -52
  509. package/src/app/core/services/config.service.d.ts +0 -63
  510. package/src/app/core/services/crypto.service.d.ts +0 -45
  511. package/src/app/core/services/errors.d.ts +0 -65
  512. package/src/app/core/services/local-settings.service.d.ts +0 -130
  513. package/src/app/core/services/model/account.model.d.ts +0 -66
  514. package/src/app/core/services/model/config.model.d.ts +0 -37
  515. package/src/app/core/services/model/department.model.d.ts +0 -11
  516. package/src/app/core/services/model/entity.decorators.d.ts +0 -17
  517. package/src/app/core/services/model/entity.model.d.ts +0 -133
  518. package/src/app/core/services/model/filter.model.d.ts +0 -37
  519. package/src/app/core/services/model/history.model.d.ts +0 -20
  520. package/src/app/core/services/model/model.enum.d.ts +0 -7
  521. package/src/app/core/services/model/node-feature.model.d.ts +0 -14
  522. package/src/app/core/services/model/peer.model.d.ts +0 -35
  523. package/src/app/core/services/model/person.model.d.ts +0 -39
  524. package/src/app/core/services/model/referential.model.d.ts +0 -85
  525. package/src/app/core/services/model/settings.model.d.ts +0 -29
  526. package/src/app/core/services/model/token.model.d.ts +0 -22
  527. package/src/app/core/services/model/tree-item-entity.model.d.ts +0 -62
  528. package/src/app/core/services/network.service.d.ts +0 -184
  529. package/src/app/core/services/network.types.d.ts +0 -4
  530. package/src/app/core/services/network.utils.d.ts +0 -39
  531. package/src/app/core/services/pipes/account.pipes.d.ts +0 -15
  532. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +0 -9
  533. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +0 -11
  534. package/src/app/core/services/pipes/pipes.module.d.ts +0 -11
  535. package/src/app/core/services/pipes/referential-to-string.pipe.d.ts +0 -23
  536. package/src/app/core/services/pipes/usage-mode.pipes.d.ts +0 -15
  537. package/src/app/core/services/platform.service.d.ts +0 -127
  538. package/src/app/core/services/storage/entities-storage.service.d.ts +0 -108
  539. package/src/app/core/services/storage/entity-store.class.d.ts +0 -113
  540. package/src/app/core/services/testing/referential-filter.model.d.ts +0 -9
  541. package/src/app/core/services/testing/referential.validator.d.ts +0 -22
  542. package/src/app/core/services/validator/account.validator.d.ts +0 -24
  543. package/src/app/core/services/validator/base.validator.class.d.ts +0 -21
  544. package/src/app/core/services/validator/local-settings.validator.d.ts +0 -18
  545. package/src/app/core/services/validator/user-settings.validator.d.ts +0 -10
  546. package/src/app/core/services/validator/user-token.validator.d.ts +0 -13
  547. package/src/app/core/settings/settings.module.d.ts +0 -12
  548. package/src/app/core/settings/settings.page.d.ts +0 -89
  549. package/src/app/core/table/async-table.class.d.ts +0 -445
  550. package/src/app/core/table/column/actions-column.component.d.ts +0 -65
  551. package/src/app/core/table/column/nav-actions-column.component.d.ts +0 -47
  552. package/src/app/core/table/column/row-field.component.d.ts +0 -41
  553. package/src/app/core/table/entities-async-table-datasource.class.d.ts +0 -103
  554. package/src/app/core/table/entities-table-datasource.class.d.ts +0 -102
  555. package/src/app/core/table/memory-table.class.d.ts +0 -25
  556. package/src/app/core/table/table-select-columns.component.d.ts +0 -22
  557. package/src/app/core/table/table.class.d.ts +0 -427
  558. package/src/app/core/table/table.model.d.ts +0 -31
  559. package/src/app/core/table/table.module.d.ts +0 -14
  560. package/src/app/core/table/table.pipes.d.ts +0 -30
  561. package/src/app/core/table/table.utils.d.ts +0 -13
  562. package/src/app/core/table/testing/nested-table.testing.d.ts +0 -54
  563. package/src/app/core/table/testing/table-validator.service.d.ts +0 -17
  564. package/src/app/core/table/testing/table.testing.d.ts +0 -55
  565. package/src/app/core/table/testing/table.testing.module.d.ts +0 -17
  566. package/src/app/core/table/testing/table2-validator.service.d.ts +0 -15
  567. package/src/app/core/table/testing/table2.testing.d.ts +0 -53
  568. package/src/app/shared/alerts.d.ts +0 -55
  569. package/src/app/shared/audio/audio.d.ts +0 -45
  570. package/src/app/shared/audio/audio.testing.d.ts +0 -13
  571. package/src/app/shared/audio/audio.testing.module.d.ts +0 -11
  572. package/src/app/shared/base64.utils.d.ts +0 -7
  573. package/src/app/shared/capacitor/keyboard.d.ts +0 -16
  574. package/src/app/shared/capacitor/plugins.d.ts +0 -8
  575. package/src/app/shared/constants.d.ts +0 -16
  576. package/src/app/shared/dates.d.ts +0 -85
  577. package/src/app/shared/debug/debug-service.class.d.ts +0 -5
  578. package/src/app/shared/debug/debug.component.d.ts +0 -14
  579. package/src/app/shared/debug/debug.module.d.ts +0 -12
  580. package/src/app/shared/directives/autofocus.directive.d.ts +0 -18
  581. package/src/app/shared/directives/autoresize.directive.d.ts +0 -20
  582. package/src/app/shared/directives/autotitle.directive.d.ts +0 -11
  583. package/src/app/shared/directives/autotooltip.directive.d.ts +0 -14
  584. package/src/app/shared/directives/cell-selection/cell-identifier.directive.d.ts +0 -17
  585. package/src/app/shared/directives/cell-selection/cell-selection.directive.d.ts +0 -29
  586. package/src/app/shared/directives/cell-selection/cell-selection.service.d.ts +0 -67
  587. package/src/app/shared/directives/directives.module.d.ts +0 -15
  588. package/src/app/shared/directives/drag-and-drop.directive.d.ts +0 -17
  589. package/src/app/shared/directives/ng-var.directive.d.ts +0 -12
  590. package/src/app/shared/directives/resizable/resizable.component.d.ts +0 -21
  591. package/src/app/shared/directives/resizable/resizable.directive.d.ts +0 -24
  592. package/src/app/shared/directives/resizable/resizable.module.d.ts +0 -8
  593. package/src/app/shared/directives/throttled-click.directive.d.ts +0 -16
  594. package/src/app/shared/events.d.ts +0 -29
  595. package/src/app/shared/file/csv.utils.d.ts +0 -30
  596. package/src/app/shared/file/file.service.d.ts +0 -23
  597. package/src/app/shared/file/file.utils.d.ts +0 -20
  598. package/src/app/shared/file/images.utils.d.ts +0 -42
  599. package/src/app/shared/file/json.utils.d.ts +0 -19
  600. package/src/app/shared/file/uri.utils.d.ts +0 -8
  601. package/src/app/shared/file/url.utils.d.ts +0 -108
  602. package/src/app/shared/focusable.d.ts +0 -4
  603. package/src/app/shared/form/field.component.d.ts +0 -83
  604. package/src/app/shared/form/field.model.d.ts +0 -88
  605. package/src/app/shared/form/loading-spinner.d.ts +0 -8
  606. package/src/app/shared/forms.d.ts +0 -170
  607. package/src/app/shared/functions.d.ts +0 -325
  608. package/src/app/shared/geolocation/geolocation.utils.d.ts +0 -25
  609. package/src/app/shared/gesture/gesture-config.d.ts +0 -15
  610. package/src/app/shared/gesture/hammer.utils.d.ts +0 -16
  611. package/src/app/shared/graph/colors.utils.d.ts +0 -34
  612. package/src/app/shared/graph/graph-colors.d.ts +0 -63
  613. package/src/app/shared/guard/component-dirty.guard.d.ts +0 -14
  614. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +0 -8
  615. package/src/app/shared/hotkeys/hotkeys.service.d.ts +0 -48
  616. package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +0 -11
  617. package/src/app/shared/html.utils.d.ts +0 -17
  618. package/src/app/shared/http/http.utils.d.ts +0 -28
  619. package/src/app/shared/image/gallery/image-gallery.component.d.ts +0 -139
  620. package/src/app/shared/image/gallery/image-gallery.module.d.ts +0 -15
  621. package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +0 -12
  622. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +0 -33
  623. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +0 -16
  624. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +0 -13
  625. package/src/app/shared/image/image.model.d.ts +0 -7
  626. package/src/app/shared/image/image.module.d.ts +0 -8
  627. package/src/app/shared/image/image.service.d.ts +0 -39
  628. package/src/app/shared/inputs.d.ts +0 -37
  629. package/src/app/shared/interceptors/progess.interceptor.d.ts +0 -8
  630. package/src/app/shared/logging/log-level.model.d.ts +0 -38
  631. package/src/app/shared/logging/logger.model.d.ts +0 -68
  632. package/src/app/shared/logging/logging-service.class.d.ts +0 -39
  633. package/src/app/shared/logging/logging-service.config.d.ts +0 -25
  634. package/src/app/shared/logging/logging-service.module.d.ts +0 -9
  635. package/src/app/shared/markdown/markdown.component.d.ts +0 -86
  636. package/src/app/shared/markdown/markdown.directive.d.ts +0 -13
  637. package/src/app/shared/markdown/markdown.modal.d.ts +0 -49
  638. package/src/app/shared/markdown/markdown.module.d.ts +0 -17
  639. package/src/app/shared/markdown/markdown.service.d.ts +0 -37
  640. package/src/app/shared/markdown/markdown.utils.d.ts +0 -26
  641. package/src/app/shared/markdown/testing/markdown.test.d.ts +0 -18
  642. package/src/app/shared/markdown/testing/markdown.testing.module.d.ts +0 -12
  643. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +0 -74
  644. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +0 -231
  645. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +0 -23
  646. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +0 -5
  647. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +0 -48
  648. package/src/app/shared/material/badge/badge.directive.d.ts +0 -43
  649. package/src/app/shared/material/badge/badge.module.d.ts +0 -10
  650. package/src/app/shared/material/badge/badge.test.d.ts +0 -21
  651. package/src/app/shared/material/boolean/boolean.module.d.ts +0 -21
  652. package/src/app/shared/material/boolean/material.boolean.d.ts +0 -94
  653. package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +0 -31
  654. package/src/app/shared/material/chips/chips.module.d.ts +0 -22
  655. package/src/app/shared/material/chips/material.chips.d.ts +0 -167
  656. package/src/app/shared/material/chips/testing/chips.test.d.ts +0 -32
  657. package/src/app/shared/material/datetime/datetime.module.d.ts +0 -25
  658. package/src/app/shared/material/datetime/material.date.d.ts +0 -90
  659. package/src/app/shared/material/datetime/material.dateshort.d.ts +0 -89
  660. package/src/app/shared/material/datetime/material.datetime.d.ts +0 -136
  661. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +0 -38
  662. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +0 -32
  663. package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +0 -31
  664. package/src/app/shared/material/duration/duration.module.d.ts +0 -18
  665. package/src/app/shared/material/duration/duration.utils.d.ts +0 -2
  666. package/src/app/shared/material/duration/material.duration.d.ts +0 -64
  667. package/src/app/shared/material/duration/testing/mat-duration.test.d.ts +0 -23
  668. package/src/app/shared/material/latlong/latlong.utils.d.ts +0 -59
  669. package/src/app/shared/material/latlong/material.latlong-input.d.ts +0 -93
  670. package/src/app/shared/material/latlong/material.latlong.d.ts +0 -90
  671. package/src/app/shared/material/latlong/material.latlong.module.d.ts +0 -21
  672. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +0 -30
  673. package/src/app/shared/material/material.animations.d.ts +0 -8
  674. package/src/app/shared/material/material.config.d.ts +0 -3
  675. package/src/app/shared/material/material.module.d.ts +0 -44
  676. package/src/app/shared/material/material.testing.module.d.ts +0 -31
  677. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +0 -12
  678. package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +0 -10
  679. package/src/app/shared/material/swipe/material.swipe.d.ts +0 -89
  680. package/src/app/shared/material/swipe/swipe.module.d.ts +0 -16
  681. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +0 -22
  682. package/src/app/shared/material/test/test-component.d.ts +0 -75
  683. package/src/app/shared/material/testing/common.test.d.ts +0 -25
  684. package/src/app/shared/modules.d.ts +0 -9
  685. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +0 -63
  686. package/src/app/shared/named-filter/named-filter.model.d.ts +0 -32
  687. package/src/app/shared/named-filter/named-filter.module.d.ts +0 -13
  688. package/src/app/shared/named-filter/named-filter.service.d.ts +0 -32
  689. package/src/app/shared/named-filter/testing/named-filter-selector.testing.d.ts +0 -34
  690. package/src/app/shared/named-filter/testing/named-filter.testing.module.d.ts +0 -10
  691. package/src/app/shared/observables.d.ts +0 -32
  692. package/src/app/shared/pipes/arrays.pipe.d.ts +0 -93
  693. package/src/app/shared/pipes/badge.pipes.d.ts +0 -7
  694. package/src/app/shared/pipes/colors.pipe.d.ts +0 -9
  695. package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +0 -25
  696. package/src/app/shared/pipes/date-format.pipe.d.ts +0 -35
  697. package/src/app/shared/pipes/date-from-now.pipe.d.ts +0 -14
  698. package/src/app/shared/pipes/date-from.pipe.d.ts +0 -14
  699. package/src/app/shared/pipes/dates.pipe.d.ts +0 -10
  700. package/src/app/shared/pipes/display-with.pipe.d.ts +0 -8
  701. package/src/app/shared/pipes/duration.pipe.d.ts +0 -23
  702. package/src/app/shared/pipes/file-size.pipe.d.ts +0 -30
  703. package/src/app/shared/pipes/form.pipes.d.ts +0 -84
  704. package/src/app/shared/pipes/highlight.pipe.d.ts +0 -11
  705. package/src/app/shared/pipes/html.pipes.d.ts +0 -50
  706. package/src/app/shared/pipes/latlong-format.pipe.d.ts +0 -20
  707. package/src/app/shared/pipes/maps.pipe.d.ts +0 -23
  708. package/src/app/shared/pipes/maskito.pipe.d.ts +0 -14
  709. package/src/app/shared/pipes/math.pipes.d.ts +0 -26
  710. package/src/app/shared/pipes/ng-init.pipe.d.ts +0 -8
  711. package/src/app/shared/pipes/number-format.pipe.d.ts +0 -9
  712. package/src/app/shared/pipes/observable.pipes.d.ts +0 -25
  713. package/src/app/shared/pipes/pipes.module.d.ts +0 -36
  714. package/src/app/shared/pipes/property.pipes.d.ts +0 -46
  715. package/src/app/shared/pipes/selection.pipes.d.ts +0 -62
  716. package/src/app/shared/pipes/string.pipes.d.ts +0 -72
  717. package/src/app/shared/pipes/translate-context.pipe.d.ts +0 -17
  718. package/src/app/shared/pipes/types.pipes.d.ts +0 -30
  719. package/src/app/shared/pipes/url.pipes.d.ts +0 -27
  720. package/src/app/shared/platforms.d.ts +0 -16
  721. package/src/app/shared/print/print.service.d.ts +0 -94
  722. package/src/app/shared/regexps.d.ts +0 -32
  723. package/src/app/shared/rx-state/rx-state.decorators.d.ts +0 -33
  724. package/src/app/shared/rx-state/rx-state.module.d.ts +0 -10
  725. package/src/app/shared/rx-state/rx-state.types.d.ts +0 -5
  726. package/src/app/shared/services/entity-service.class.d.ts +0 -117
  727. package/src/app/shared/services/job.utils.d.ts +0 -20
  728. package/src/app/shared/services/memory-entity-service.class.d.ts +0 -87
  729. package/src/app/shared/services/progress-bar.service.d.ts +0 -20
  730. package/src/app/shared/services/startable-observable-service.class.d.ts +0 -51
  731. package/src/app/shared/services/startable-service.class.d.ts +0 -38
  732. package/src/app/shared/services/translate-context.service.d.ts +0 -29
  733. package/src/app/shared/services/validator-service.class.d.ts +0 -11
  734. package/src/app/shared/services.d.ts +0 -17
  735. package/src/app/shared/shared-routing.module.d.ts +0 -23
  736. package/src/app/shared/shared.module.d.ts +0 -33
  737. package/src/app/shared/shared.testing.module.d.ts +0 -20
  738. package/src/app/shared/storage/storage-explorer.component.d.ts +0 -60
  739. package/src/app/shared/storage/storage-explorer.module.d.ts +0 -13
  740. package/src/app/shared/storage/storage-explorer.testing-routing.module.d.ts +0 -9
  741. package/src/app/shared/storage/storage-explorer.testing.module.d.ts +0 -10
  742. package/src/app/shared/storage/storage.service.d.ts +0 -22
  743. package/src/app/shared/storage/storage.utils.d.ts +0 -19
  744. package/src/app/shared/testing/maskito.test.d.ts +0 -10
  745. package/src/app/shared/testing/observable.test.d.ts +0 -25
  746. package/src/app/shared/testing/tests.page.d.ts +0 -20
  747. package/src/app/shared/toast/toast.testing.d.ts +0 -15
  748. package/src/app/shared/toast/toast.testing.module.d.ts +0 -12
  749. package/src/app/shared/toast/toasts.d.ts +0 -16
  750. package/src/app/shared/toolbar/modal-toolbar.d.ts +0 -21
  751. package/src/app/shared/toolbar/toolbar.d.ts +0 -72
  752. package/src/app/shared/toolbar/toolbar.module.d.ts +0 -16
  753. package/src/app/shared/types.d.ts +0 -45
  754. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +0 -21
  755. package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +0 -11
  756. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +0 -49
  757. package/src/app/shared/upload-file/upload-file.component.d.ts +0 -50
  758. package/src/app/shared/upload-file/upload-file.model.d.ts +0 -30
  759. package/src/app/shared/validator/form-error-adapter.class.d.ts +0 -33
  760. package/src/app/shared/validator/validators.d.ts +0 -145
  761. package/src/app/shared/version/versions.d.ts +0 -14
  762. package/src/app/social/config/social.config.d.ts +0 -4
  763. package/src/app/social/feed/feed.component.d.ts +0 -91
  764. package/src/app/social/feed/feed.directive.d.ts +0 -32
  765. package/src/app/social/feed/feed.model.d.ts +0 -69
  766. package/src/app/social/feed/feed.module.d.ts +0 -13
  767. package/src/app/social/feed/feed.page.d.ts +0 -24
  768. package/src/app/social/feed/feed.service.d.ts +0 -85
  769. package/src/app/social/feed/testing/feed.testing.d.ts +0 -23
  770. package/src/app/social/feed/testing/feed.testing.module.d.ts +0 -12
  771. package/src/app/social/job/job.module.d.ts +0 -12
  772. package/src/app/social/job/progression/job-progression.component.d.ts +0 -24
  773. package/src/app/social/job/progression/job-progression.icon.d.ts +0 -63
  774. package/src/app/social/job/progression/job-progression.list.d.ts +0 -20
  775. package/src/app/social/job/progression/job-progression.model.d.ts +0 -10
  776. package/src/app/social/job/progression/job-progression.service.d.ts +0 -33
  777. package/src/app/social/job/testing/job-progression.testing.d.ts +0 -13
  778. package/src/app/social/job/testing/job-progression.testing.service.d.ts +0 -9
  779. package/src/app/social/job/testing/job.testing.module.d.ts +0 -11
  780. package/src/app/social/message/message.form.d.ts +0 -36
  781. package/src/app/social/message/message.modal.d.ts +0 -47
  782. package/src/app/social/message/message.model.d.ts +0 -36
  783. package/src/app/social/message/message.module.d.ts +0 -14
  784. package/src/app/social/message/message.service.d.ts +0 -44
  785. package/src/app/social/social.errors.d.ts +0 -10
  786. package/src/app/social/social.module.d.ts +0 -20
  787. package/src/app/social/social.testing.module.d.ts +0 -14
  788. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +0 -47
  789. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +0 -77
  790. package/src/app/social/user-event/notification/user-event-notification.modal.d.ts +0 -37
  791. package/src/app/social/user-event/testing/user-event.testing.d.ts +0 -44
  792. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +0 -42
  793. package/src/app/social/user-event/testing/user-event.testing.module.d.ts +0 -11
  794. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +0 -41
  795. package/src/app/social/user-event/user-event.model.d.ts +0 -44
  796. package/src/app/social/user-event/user-event.module.d.ts +0 -14
  797. package/src/app/social/user-event/user-event.service.d.ts +0 -124
  798. package/src/environments/environment.class.d.ts +0 -86
  799. package/src/environments/environment.d.ts +0 -2
  800. package/src/environments/environment.loader.d.ts +0 -24
  801. package/src/theme/_globals.scss +0 -5
@@ -1,474 +0,0 @@
1
- import { booleanAttribute, ChangeDetectionStrategy, Component, forwardRef, Inject, Input, Optional, ViewChild, } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR, Validators } from '@angular/forms';
3
- import { isMoment } from 'moment';
4
- import { SharedValidators } from '../../validator/validators';
5
- import { isBlankString, isNil, isNotNil, isNotNilBoolean, nullIfNilOrBlank } from '../../functions';
6
- import { filter, skip } from 'rxjs/operators';
7
- import { setTabIndex } from '../../inputs';
8
- import { Subscription } from 'rxjs';
9
- import { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';
10
- import { isFocusableElement } from '../../focusable';
11
- import { DateUtils, fromDateISOString, toDateISOString } from '../../dates';
12
- import { isMobile } from '../../platforms';
13
- import { maskitoDateOptionsGenerator, maskitoWithPlaceholder } from '@maskito/kit';
14
- import { MAT_FORM_FIELD_DEFAULT_APPEARANCE, MAT_FORM_FIELD_DEFAULT_SUBSCRIPT_SIZING } from '../material.config';
15
- import * as i0 from "@angular/core";
16
- import * as i1 from "@angular/material-moment-adapter";
17
- import * as i2 from "@ngx-translate/core";
18
- import * as i3 from "@angular/forms";
19
- import * as i4 from "@angular/common";
20
- import * as i5 from "@ionic/angular";
21
- import * as i6 from "@angular/material/form-field";
22
- import * as i7 from "@angular/material/input";
23
- import * as i8 from "@angular/material/icon";
24
- import * as i9 from "@angular/material/button";
25
- import * as i10 from "@angular/material/datepicker";
26
- import * as i11 from "@maskito/angular";
27
- import * as i12 from "../../directives/autofocus.directive";
28
- import * as i13 from "../../pipes/date-format.pipe";
29
- import * as i14 from "../../pipes/arrays.pipe";
30
- import * as i15 from "../../pipes/maps.pipe";
31
- import * as i16 from "../../pipes/types.pipes";
32
- const DEFAULT_VALUE_ACCESSOR = {
33
- provide: NG_VALUE_ACCESSOR,
34
- useExisting: forwardRef(() => MatDate),
35
- multi: true,
36
- };
37
- const I18N_KEYS = ['COMMON.DATE_PATTERN', 'COMMON.DATE_PLACEHOLDER'];
38
- const noop = () => { };
39
- export class MatDate {
40
- dateAdapter;
41
- translate;
42
- formBuilder;
43
- cd;
44
- formGroupDir;
45
- _onChangeCallback = noop;
46
- _onTouchedCallback = noop;
47
- _subscription = new Subscription();
48
- _writing = true;
49
- _disabling = false;
50
- _tabindex;
51
- _readonly = false;
52
- _appearance = null;
53
- _subscriptSizing = null;
54
- _defaultAppearance;
55
- _defaultSubscriptSizing;
56
- textControl;
57
- datePattern;
58
- locale;
59
- maskitoOptions;
60
- datePlaceholder;
61
- formControl;
62
- formControlName;
63
- placeholder;
64
- floatLabel = 'auto';
65
- mobile;
66
- compact = false;
67
- autofocus = false;
68
- clearable = false;
69
- required;
70
- startDate = null;
71
- timezone = null;
72
- datePickerFilter;
73
- set appearance(value) {
74
- this._appearance = value;
75
- }
76
- get appearance() {
77
- return this._appearance || this._defaultAppearance;
78
- }
79
- set subscriptSizing(value) {
80
- this._subscriptSizing = value;
81
- }
82
- get subscriptSizing() {
83
- return this._subscriptSizing || this._defaultSubscriptSizing;
84
- }
85
- set readonly(value) {
86
- this._readonly = value;
87
- this.markForCheck();
88
- }
89
- get readonly() {
90
- return this._readonly;
91
- }
92
- set tabindex(value) {
93
- if (this._tabindex !== value) {
94
- this._tabindex = value;
95
- if (!this._writing)
96
- this.updateTabIndex();
97
- }
98
- }
99
- get tabindex() {
100
- return this._tabindex;
101
- }
102
- get value() {
103
- return this.formControl.value;
104
- }
105
- get disabled() {
106
- return this.formControl.disabled;
107
- }
108
- datePicker;
109
- _matInput;
110
- constructor(dateAdapter, translate, formBuilder, cd, formGroupDir, defaultOptions) {
111
- this.dateAdapter = dateAdapter;
112
- this.translate = translate;
113
- this.formBuilder = formBuilder;
114
- this.cd = cd;
115
- this.formGroupDir = formGroupDir;
116
- this.locale = (translate.currentLang || translate.defaultLang).substring(0, 2);
117
- this._defaultSubscriptSizing = defaultOptions?.subscriptSizing || MAT_FORM_FIELD_DEFAULT_SUBSCRIPT_SIZING;
118
- this._defaultAppearance = defaultOptions?.appearance || MAT_FORM_FIELD_DEFAULT_APPEARANCE;
119
- }
120
- ngOnInit() {
121
- this.formControl =
122
- this.formControl || (this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName));
123
- if (!this.formControl)
124
- throw new Error("Missing mandatory attribute 'formControl' or 'formControlName' in <mat-date-field>.");
125
- this.mobile = isNotNil(this.mobile) ? this.mobile : isMobile(window);
126
- this.required = isNotNilBoolean(this.required)
127
- ? this.required
128
- : this.formControl.hasValidator(Validators.required) || isBlankString(this.required);
129
- // Add 'validDate' validator (when existing validator are null or required, to be sure to keep it)
130
- if (!this.formControl.validator || this.formControl.validator === Validators.required) {
131
- this.formControl.setValidators(this.required ? [Validators.required, SharedValidators.validDateAllowNoTime] : SharedValidators.validDateAllowNoTime);
132
- }
133
- else {
134
- this.formControl.setValidators(this.required
135
- ? [this.formControl.validator, Validators.required, SharedValidators.validDateAllowNoTime]
136
- : [this.formControl.validator, SharedValidators.validDateAllowNoTime]);
137
- }
138
- // Create the text control
139
- this.textControl = this.formBuilder.control(null,
140
- // Important: should copy errors from the model formControl
141
- () => this.formControl.errors);
142
- // Get patterns to display date
143
- this.updateTranslations(this.translate.instant(I18N_KEYS));
144
- this._subscription.add(this.translate
145
- .get(I18N_KEYS)
146
- .pipe(skip(1))
147
- .subscribe((translations) => this.updateTranslations(translations)));
148
- this._subscription.add(this.textControl.valueChanges.subscribe((value) => this.onFormChange(value)));
149
- // Listen status changes (when done outside the component - e.g. when setErrors() is calling on the formControl)
150
- this._subscription.add(this.formControl.statusChanges
151
- .pipe(filter((_) => !this.readonly && !this._writing && !this._disabling) // Skip
152
- )
153
- .subscribe(() => {
154
- this.textControl.updateValueAndValidity({ emitEvent: false });
155
- if (this.formControl.touched && !this.textControl.touched) {
156
- this.textControl.markAsTouched();
157
- }
158
- this.markForCheck();
159
- }));
160
- this._writing = false;
161
- }
162
- ngAfterViewInit() {
163
- this.updateTabIndex();
164
- }
165
- ngOnDestroy() {
166
- this._subscription.unsubscribe();
167
- }
168
- writeValue(value) {
169
- if (this._writing)
170
- return; // Skip
171
- this._writing = true;
172
- // DEBUG
173
- //console.debug("[mat-date] writeValue() with:", value);
174
- // Convert into date
175
- // Important: clone, because startOf will update the existing date
176
- const date = isMoment(value) ? value.clone() : fromDateISOString(value);
177
- if (!date || !date.isValid()) {
178
- this.textControl.patchValue(null, { emitEvent: false });
179
- if (this.formControl.value) {
180
- this.formControl.patchValue(null, { emitEvent: false });
181
- this._onChangeCallback(null);
182
- }
183
- }
184
- else {
185
- // Move to the expected TZ (keeping local hour - e.g. midnight)
186
- const day = ((this.timezone && date.tz(this.timezone)) || date)
187
- // Reset hour
188
- .startOf('day');
189
- const dayStr = this.dateAdapter.format(day, this.datePattern);
190
- if (this.textControl.value !== dayStr) {
191
- // Update text control
192
- this.textControl.patchValue(dayStr, { emitEvent: false });
193
- }
194
- }
195
- this._writing = false;
196
- this.markForCheck();
197
- }
198
- registerOnChange(fn) {
199
- this._onChangeCallback = fn;
200
- }
201
- registerOnTouched(fn) {
202
- this._onTouchedCallback = fn;
203
- }
204
- setDisabledState(isDisabled) {
205
- if (this._disabling)
206
- return;
207
- this._disabling = true;
208
- if (isDisabled) {
209
- this.textControl.disable({ emitEvent: false });
210
- }
211
- else {
212
- this.textControl.enable({ emitEvent: false });
213
- }
214
- this._disabling = false;
215
- this.markForCheck();
216
- }
217
- openDatePicker(event) {
218
- if (!this.datePicker)
219
- return;
220
- this._preventEvent(event);
221
- if (!this.datePicker.opened) {
222
- // DEBUG
223
- //console.debug('[mat-date] Opening date picker...');
224
- this.datePicker.open();
225
- }
226
- }
227
- focus() {
228
- if (!this._matInput)
229
- return;
230
- setTimeout(() => {
231
- if (isFocusableElement(this._matInput.nativeElement)) {
232
- this._matInput.nativeElement.focus();
233
- }
234
- });
235
- }
236
- clear(event) {
237
- this._preventEvent(event);
238
- this.textControl.patchValue(null, { emitEvent: false });
239
- this.formControl.setValue(null, { emitEvent: false });
240
- this._onChangeCallback(null);
241
- this.markAsTouched();
242
- this.markAsDirty();
243
- }
244
- /* -- protected functions -- */
245
- _onDatePickerChange(event) {
246
- // Make sure event is valid
247
- if (!event || (event.value !== null && !isMoment(event.value))) {
248
- console.warn('Invalid MatDatepicker event. Skipping', event);
249
- return; // Skip
250
- }
251
- let value = event.value;
252
- // No value, but mobile mode: use the current date
253
- if (!value && this.mobile) {
254
- value = DateUtils.resetTime(DateUtils.moment().locale(this.locale), this.timezone);
255
- this.formControl.setValue(toDateISOString(value), {
256
- emitEvent: false, // Will call writeValue()
257
- });
258
- return;
259
- }
260
- const date = value
261
- ?.clone()
262
- .locale(this.locale) // set as time as locale time
263
- .startOf('day') // reset hour
264
- .utc(true);
265
- const dateStr = (date && this.dateAdapter.format(date, this.datePattern)) || null;
266
- if (this.textControl.value !== dateStr) {
267
- // DEBUG
268
- //console.debug("[mat-date] onDatePickerChange() new value:", dateStr);
269
- this.textControl.setValue(dateStr, {
270
- emitEvent: true, // Will call onFormChange
271
- });
272
- }
273
- }
274
- _openDatePickerIfMobile(event) {
275
- if (!this.mobile || event?.defaultPrevented || this.datePicker?.opened || this.disabled)
276
- return;
277
- //console.debug('[mat-date] Preparing to open date picker... ');
278
- this._preventEvent(event);
279
- // Open the picker
280
- this.openDatePicker(event);
281
- }
282
- _onBlur() {
283
- if (this.textControl.touched) {
284
- // Auto fill data in case of partial input
285
- this.writeValue(this.formControl.value);
286
- }
287
- // Check if touched
288
- this._checkIfTouched();
289
- }
290
- _checkIfTouched() {
291
- if (this.textControl.touched) {
292
- this._onTouchedCallback();
293
- this.markForCheck();
294
- }
295
- }
296
- _preventEvent(event) {
297
- if (!event)
298
- return;
299
- event.preventDefault();
300
- if (event.stopPropagation)
301
- event.stopPropagation();
302
- if (event.stopImmediatePropagation)
303
- event.stopImmediatePropagation();
304
- }
305
- /* -- private methods -- */
306
- updateTranslations(translations) {
307
- const datePattern = translations['COMMON.DATE_PATTERN'] !== 'COMMON.DATE_PATTERN' ? translations['COMMON.DATE_PATTERN'] : 'DD/MM/YYYY';
308
- this.updatePattern(datePattern);
309
- const datePlaceholder = translations['COMMON.DATE_PLACEHOLDER'] !== 'COMMON.DATE_PLACEHOLDER'
310
- ? translations['COMMON.DATE_PLACEHOLDER']
311
- : this.datePattern?.toLowerCase();
312
- this.updateMaskOptions(datePlaceholder);
313
- }
314
- updatePattern(pattern) {
315
- if (this.datePattern !== pattern) {
316
- this.datePattern = pattern;
317
- this.markForCheck();
318
- }
319
- }
320
- updateMaskOptions(datePlaceholder) {
321
- if (this.datePlaceholder != datePlaceholder) {
322
- this.datePlaceholder = datePlaceholder;
323
- const dateOptions = maskitoDateOptionsGenerator({
324
- mode: this.datePattern.toLowerCase(),
325
- separator: '/',
326
- });
327
- const { plugins, // plugins keeps caret inside actual value and remove placeholder on blur
328
- ...placeholderOptions
329
- // pass 'true' as second argument to add plugin to hide placeholder when input is not focused
330
- } = maskitoWithPlaceholder(this.datePlaceholder, true);
331
- this.maskitoOptions = {
332
- ...dateOptions,
333
- plugins: plugins.concat(dateOptions.plugins || []),
334
- preprocessors: [
335
- // Always put it BEFORE all other preprocessors
336
- ...placeholderOptions.preprocessors,
337
- ...dateOptions.preprocessors,
338
- ],
339
- postprocessors: [
340
- ...dateOptions.postprocessors,
341
- // Always put it AFTER all other postprocessors
342
- ...placeholderOptions.postprocessors,
343
- ],
344
- };
345
- this.markForCheck();
346
- }
347
- }
348
- onFormChange(dateStr) {
349
- if (this._writing)
350
- return; // Skip if call by self
351
- this._writing = true;
352
- if (dateStr === this.datePlaceholder) {
353
- dateStr = null;
354
- }
355
- else {
356
- dateStr = nullIfNilOrBlank(dateStr);
357
- }
358
- //console.debug(`[mat-date] onFormChange() - controls values: `, dateStr);
359
- // Force '0' for empty month (otherwise moment will use the current month)
360
- dateStr = dateStr
361
- ?.replace(/[^\d/]/g, '') // Keep only digits and slashes
362
- .replace('//', '/0/')
363
- // Force '0' for empty year (otherwise moment will use the current year)
364
- .replace(/\/$/, '/0');
365
- // Parse date (strict = false)
366
- let date = (dateStr && this.dateAdapter.parse(dateStr, this.datePattern)) || null;
367
- // Move to the expected TZ, and keep the local hour (= midnight) to have midnight at local time
368
- if (this.timezone) {
369
- date = date?.tz(this.timezone, true);
370
- }
371
- date = date
372
- ?.startOf('day') // Reset hour
373
- // Convert to UTC (avoid TZ offset in final string);
374
- .utc();
375
- // Set model value
376
- this.emitChange(date, dateStr);
377
- // Force the day control to update its validity (same errors as formControl - see ngOnInit())
378
- this.textControl.updateValueAndValidity();
379
- this._writing = false;
380
- }
381
- emitChange(date, defaultValue) {
382
- // Convert to model value (ISO date string)
383
- // IMPORTANT: If date is invalid, then keep the invalid string value
384
- // to allow SharedValidators.validDate() to raise an error
385
- const controlValue = date?.isValid() ? toDateISOString(date) : defaultValue || null;
386
- if (this.formControl.value !== controlValue) {
387
- // DEBUG
388
- //console.debug('[mat-date] Emit new value: ' + controlValue);
389
- // Update formControl value (this is need to update datePicker also, in desktop mode)
390
- if (!this.mobile && date?.isValid()) {
391
- this.formControl.setValue(controlValue, { emitEvent: false });
392
- }
393
- // Changes comes from inside function: use the callback
394
- this._onChangeCallback(controlValue);
395
- // Check if need to update controls
396
- this._checkIfTouched();
397
- }
398
- }
399
- updateTabIndex() {
400
- if (isNil(this._tabindex) || this._tabindex === -1)
401
- return; // skip
402
- // Focus to input
403
- setTimeout(() => {
404
- setTabIndex(this._matInput, this._tabindex);
405
- this.markForCheck();
406
- });
407
- }
408
- markAsTouched(opts) {
409
- this.textControl.markAsTouched(opts);
410
- this._onTouchedCallback();
411
- this.markForCheck();
412
- }
413
- markAsDirty(opts) {
414
- this.formControl.markAsDirty(opts);
415
- }
416
- markForCheck() {
417
- this.cd.markForCheck();
418
- }
419
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MatDate, deps: [{ token: i1.MomentDateAdapter }, { token: i2.TranslateService }, { token: i3.UntypedFormBuilder }, { token: i0.ChangeDetectorRef }, { token: i3.FormGroupDirective, optional: true }, { token: MAT_FORM_FIELD_DEFAULT_OPTIONS }], target: i0.ɵɵFactoryTarget.Component });
420
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: MatDate, selector: "mat-date-field", inputs: { formControl: "formControl", formControlName: "formControlName", placeholder: "placeholder", floatLabel: "floatLabel", mobile: ["mobile", "mobile", booleanAttribute], compact: ["compact", "compact", booleanAttribute], autofocus: ["autofocus", "autofocus", booleanAttribute], clearable: ["clearable", "clearable", booleanAttribute], required: ["required", "required", booleanAttribute], startDate: "startDate", timezone: "timezone", datePickerFilter: "datePickerFilter", appearance: "appearance", subscriptSizing: "subscriptSizing", readonly: "readonly", tabindex: "tabindex" }, providers: [DEFAULT_VALUE_ACCESSOR], viewQueries: [{ propertyName: "datePicker", first: true, predicate: ["datePicker"], descendants: true }, { propertyName: "_matInput", first: true, predicate: ["matInput"], descendants: true }], ngImport: i0, template: "<!-- readonly -->\n@if (readonly) {\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"mat-form-field-disabled\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <input matInput hidden type=\"text\" readonly [formControl]=\"formControl\" />\n <ion-text>{{ formControl.value | dateFormat: { pattern: datePattern } }}</ion-text>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n <!-- hints -->\n <mat-hint [class.cdk-visually-hidden]=\"formControl.invalid\">\n <ng-container *ngTemplateOutlet=\"matHintTemplate\"></ng-container>\n </mat-hint>\n </mat-form-field>\n} @else {\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n (focus)=\"_openDatePickerIfMobile($event)\"\n (click)=\"_openDatePickerIfMobile($event)\"\n [appearance]=\"appearance\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <!-- Desktop -->\n @if (!mobile) {\n <input\n matInput\n #matInput\n autocomplete=\"off\"\n type=\"text\"\n [maskito]=\"maskitoOptions\"\n [formControl]=\"textControl\"\n (blur)=\"_onBlur()\"\n (keyup.arrowDown)=\"openDatePicker($event)\"\n (keyup.escape)=\"_preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\"\n />\n <input\n type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly\n />\n } @else {\n <!-- Mobile -->\n <input\n #matInput\n autocomplete=\"off\"\n type=\"text\"\n class=\"mat-mdc-form-field-input-control mdc-text-field__input\"\n [formControl]=\"textControl\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly\n />\n <input\n matInput\n type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly\n />\n }\n\n <div matSuffix>\n <button type=\"button\" mat-icon-button tabindex=\"-1\" (click)=\"openDatePicker($event)\" [disabled]=\"disabled\">\n <mat-icon>{{ mobile ? 'date_range' : 'keyboard_arrow_down' }}</mat-icon>\n </button>\n\n @if (clearable) {\n <button\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clear($event)\"\n [hidden]=\"formControl.disabled || !formControl.value\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n <!-- errors -->\n <mat-error *ngIf=\"formControl.touched && formControl.errors | mapKeys | arrayFirst; let errorKey\">\n @switch (errorKey) {\n @case ('required') {\n <span translate>ERROR.FIELD_REQUIRED</span>\n }\n @case ('validDate') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE</span>\n }\n @case ('dateIsAfter') {\n <span>\n {{ 'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}\n </span>\n }\n @case ('dateIsBefore') {\n <span>\n {{ 'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}\n </span>\n }\n @case ('dateRange') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</span>\n }\n @case ('dateMaxDuration') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</span>\n }\n @case ('dateMinDuration') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</span>\n }\n @case ('msg') {\n <span>\n {{ formControl.errors.msg?.key || formControl.errors.msg | translate: formControl.errors.msg?.params }}\n </span>\n }\n }\n </mat-error>\n <ng-container *ngTemplateOutlet=\"matErrorTemplate\"></ng-container>\n <!-- hints -->\n @if (!formControl.invalid) {\n <mat-hint>\n <ng-container *ngTemplateOutlet=\"matHintTemplate\"></ng-container>\n </mat-hint>\n }\n </mat-form-field>\n\n <mat-datepicker #datePicker [touchUi]=\"mobile\" [disabled]=\"disabled\" [startAt]=\"startDate\">\n <!-- Date picker buttons -->\n @if (mobile) {\n <mat-datepicker-actions>\n <ion-button fill=\"clear\" color=\"dark\" matDatepickerCancel>\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button fill=\"solid\" color=\"tertiary\" matDatepickerApply>\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </mat-datepicker-actions>\n }\n </mat-datepicker>\n}\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n\n<ng-template #matErrorTemplate>\n <ng-content select=\"mat-error,[matError]\"></ng-content>\n</ng-template>\n\n<ng-template #matHintTemplate>\n <div class=\"mat-mdc-form-field-hint-wrapper\">\n <ng-content select=\"mat-hint:not([align='end']),[matHint]\"></ng-content>\n <div class=\"mat-mdc-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint[align='end']\"></ng-content>\n </div>\n</ng-template>\n", styles: [":host{display:inline-block;width:100%;position:relative}mat-form-field input[readonly]{-webkit-user-select:none!important;user-select:none!important}mat-form-field .datetime-md{padding:0!important}mat-form-field button[hidden]{display:none}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i5.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i5.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i6.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i6.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i7.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: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i10.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i10.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i10.MatDatepickerActions, selector: "mat-datepicker-actions, mat-date-range-picker-actions" }, { kind: "directive", type: i10.MatDatepickerCancel, selector: "[matDatepickerCancel], [matDateRangePickerCancel]" }, { kind: "directive", type: i10.MatDatepickerApply, selector: "[matDatepickerApply], [matDateRangePickerApply]" }, { kind: "directive", type: i11.MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i12.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "pipe", type: i13.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i14.ArrayFirstPipe, name: "arrayFirst" }, { kind: "pipe", type: i15.MapKeysPipe, name: "mapKeys" }, { kind: "pipe", type: i16.AsFloatLabelTypePipe, name: "asFloatLabelType" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
421
- }
422
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MatDate, decorators: [{
423
- type: Component,
424
- args: [{ selector: 'mat-date-field', providers: [DEFAULT_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- readonly -->\n@if (readonly) {\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"mat-form-field-disabled\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <input matInput hidden type=\"text\" readonly [formControl]=\"formControl\" />\n <ion-text>{{ formControl.value | dateFormat: { pattern: datePattern } }}</ion-text>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n <!-- hints -->\n <mat-hint [class.cdk-visually-hidden]=\"formControl.invalid\">\n <ng-container *ngTemplateOutlet=\"matHintTemplate\"></ng-container>\n </mat-hint>\n </mat-form-field>\n} @else {\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n (focus)=\"_openDatePickerIfMobile($event)\"\n (click)=\"_openDatePickerIfMobile($event)\"\n [appearance]=\"appearance\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <!-- Desktop -->\n @if (!mobile) {\n <input\n matInput\n #matInput\n autocomplete=\"off\"\n type=\"text\"\n [maskito]=\"maskitoOptions\"\n [formControl]=\"textControl\"\n (blur)=\"_onBlur()\"\n (keyup.arrowDown)=\"openDatePicker($event)\"\n (keyup.escape)=\"_preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\"\n />\n <input\n type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly\n />\n } @else {\n <!-- Mobile -->\n <input\n #matInput\n autocomplete=\"off\"\n type=\"text\"\n class=\"mat-mdc-form-field-input-control mdc-text-field__input\"\n [formControl]=\"textControl\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly\n />\n <input\n matInput\n type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly\n />\n }\n\n <div matSuffix>\n <button type=\"button\" mat-icon-button tabindex=\"-1\" (click)=\"openDatePicker($event)\" [disabled]=\"disabled\">\n <mat-icon>{{ mobile ? 'date_range' : 'keyboard_arrow_down' }}</mat-icon>\n </button>\n\n @if (clearable) {\n <button\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clear($event)\"\n [hidden]=\"formControl.disabled || !formControl.value\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n <!-- errors -->\n <mat-error *ngIf=\"formControl.touched && formControl.errors | mapKeys | arrayFirst; let errorKey\">\n @switch (errorKey) {\n @case ('required') {\n <span translate>ERROR.FIELD_REQUIRED</span>\n }\n @case ('validDate') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE</span>\n }\n @case ('dateIsAfter') {\n <span>\n {{ 'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}\n </span>\n }\n @case ('dateIsBefore') {\n <span>\n {{ 'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}\n </span>\n }\n @case ('dateRange') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</span>\n }\n @case ('dateMaxDuration') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</span>\n }\n @case ('dateMinDuration') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</span>\n }\n @case ('msg') {\n <span>\n {{ formControl.errors.msg?.key || formControl.errors.msg | translate: formControl.errors.msg?.params }}\n </span>\n }\n }\n </mat-error>\n <ng-container *ngTemplateOutlet=\"matErrorTemplate\"></ng-container>\n <!-- hints -->\n @if (!formControl.invalid) {\n <mat-hint>\n <ng-container *ngTemplateOutlet=\"matHintTemplate\"></ng-container>\n </mat-hint>\n }\n </mat-form-field>\n\n <mat-datepicker #datePicker [touchUi]=\"mobile\" [disabled]=\"disabled\" [startAt]=\"startDate\">\n <!-- Date picker buttons -->\n @if (mobile) {\n <mat-datepicker-actions>\n <ion-button fill=\"clear\" color=\"dark\" matDatepickerCancel>\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button fill=\"solid\" color=\"tertiary\" matDatepickerApply>\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </mat-datepicker-actions>\n }\n </mat-datepicker>\n}\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n\n<ng-template #matErrorTemplate>\n <ng-content select=\"mat-error,[matError]\"></ng-content>\n</ng-template>\n\n<ng-template #matHintTemplate>\n <div class=\"mat-mdc-form-field-hint-wrapper\">\n <ng-content select=\"mat-hint:not([align='end']),[matHint]\"></ng-content>\n <div class=\"mat-mdc-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint[align='end']\"></ng-content>\n </div>\n</ng-template>\n", styles: [":host{display:inline-block;width:100%;position:relative}mat-form-field input[readonly]{-webkit-user-select:none!important;user-select:none!important}mat-form-field .datetime-md{padding:0!important}mat-form-field button[hidden]{display:none}\n"] }]
425
- }], ctorParameters: () => [{ type: i1.MomentDateAdapter }, { type: i2.TranslateService }, { type: i3.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }, { type: i3.FormGroupDirective, decorators: [{
426
- type: Optional
427
- }] }, { type: undefined, decorators: [{
428
- type: Inject,
429
- args: [MAT_FORM_FIELD_DEFAULT_OPTIONS]
430
- }] }], propDecorators: { formControl: [{
431
- type: Input
432
- }], formControlName: [{
433
- type: Input
434
- }], placeholder: [{
435
- type: Input
436
- }], floatLabel: [{
437
- type: Input
438
- }], mobile: [{
439
- type: Input,
440
- args: [{ transform: booleanAttribute }]
441
- }], compact: [{
442
- type: Input,
443
- args: [{ transform: booleanAttribute }]
444
- }], autofocus: [{
445
- type: Input,
446
- args: [{ transform: booleanAttribute }]
447
- }], clearable: [{
448
- type: Input,
449
- args: [{ transform: booleanAttribute }]
450
- }], required: [{
451
- type: Input,
452
- args: [{ transform: booleanAttribute }]
453
- }], startDate: [{
454
- type: Input
455
- }], timezone: [{
456
- type: Input
457
- }], datePickerFilter: [{
458
- type: Input
459
- }], appearance: [{
460
- type: Input
461
- }], subscriptSizing: [{
462
- type: Input
463
- }], readonly: [{
464
- type: Input
465
- }], tabindex: [{
466
- type: Input
467
- }], datePicker: [{
468
- type: ViewChild,
469
- args: ['datePicker']
470
- }], _matInput: [{
471
- type: ViewChild,
472
- args: ['matInput']
473
- }] } });
474
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuZGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2RhdGV0aW1lL21hdGVyaWFsLmRhdGUudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kYXRldGltZS9tYXRlcmlhbC5kYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGdCQUFnQixFQUNoQix1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFFUixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUE0QyxpQkFBaUIsRUFBMEMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakosT0FBTyxFQUFFLFFBQVEsRUFBVSxNQUFNLFFBQVEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEcsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQWdCLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSw4QkFBOEIsRUFBdUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVuSixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1B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QUMsOEJBQThCO3lDQXBFL0IsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDa0MsTUFBTTtzQkFBN0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxPQUFPO3NCQUE5QyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLFNBQVM7c0JBQWhELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsU0FBUztzQkFBaEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxRQUFRO3NCQUEvQyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUM3QixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdGLFVBQVU7c0JBRGIsS0FBSztnQkFVRixlQUFlO3NCQURsQixLQUFLO2dCQVNPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBU08sUUFBUTtzQkFBcEIsS0FBSztnQkFtQm1CLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDQSxTQUFTO3NCQUEvQixTQUFTO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBQcm92aWRlcixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5HX1ZBTFVFX0FDQ0VTU09SLCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGlzTW9tZW50LCBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgU2hhcmVkVmFsaWRhdG9ycyB9IGZyb20gJy4uLy4uL3ZhbGlkYXRvci92YWxpZGF0b3JzJztcbmltcG9ydCB7IGlzQmxhbmtTdHJpbmcsIGlzTmlsLCBpc05vdE5pbCwgaXNOb3ROaWxCb29sZWFuLCBudWxsSWZOaWxPckJsYW5rIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IGZpbHRlciwgc2tpcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElucHV0RWxlbWVudCwgc2V0VGFiSW5kZXggfSBmcm9tICcuLi8uLi9pbnB1dHMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMsIE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UsIE1hdEZvcm1GaWVsZERlZmF1bHRPcHRpb25zLCBTdWJzY3JpcHRTaXppbmcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IERhdGVGaWx0ZXJGbiwgTWF0RGF0ZXBpY2tlciwgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IGlzRm9jdXNhYmxlRWxlbWVudCB9IGZyb20gJy4uLy4uL2ZvY3VzYWJsZSc7XG5pbXBvcnQgeyBEYXRlVXRpbHMsIGZyb21EYXRlSVNPU3RyaW5nLCB0b0RhdGVJU09TdHJpbmcgfSBmcm9tICcuLi8uLi9kYXRlcyc7XG5pbXBvcnQgeyBpc01vYmlsZSB9IGZyb20gJy4uLy4uL3BsYXRmb3Jtcyc7XG5pbXBvcnQgeyBNb21lbnREYXRlQWRhcHRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsLW1vbWVudC1hZGFwdGVyJztcbmltcG9ydCB7IE1hc2tpdG9PcHRpb25zIH0gZnJvbSAnQG1hc2tpdG8vY29yZSc7XG5pbXBvcnQgeyBNYXNraXRvRGF0ZU1vZGUsIG1hc2tpdG9EYXRlT3B0aW9uc0dlbmVyYXRvciwgbWFza2l0b1dpdGhQbGFjZWhvbGRlciB9IGZyb20gJ0BtYXNraXRvL2tpdCc7XG5pbXBvcnQgeyBNQVRfRk9STV9GSUVMRF9ERUZBVUxUX0FQUEVBUkFOQ0UsIE1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfU1VCU0NSSVBUX1NJWklORyB9IGZyb20gJy4uL21hdGVyaWFsLmNvbmZpZyc7XG5pbXBvcnQgeyBBcHBGbG9hdExhYmVsVHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuY29uc3QgREVGQVVMVF9WQUxVRV9BQ0NFU1NPUjogUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNYXREYXRlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuY29uc3QgSTE4Tl9LRVlTID0gWydDT01NT04uREFURV9QQVRURVJOJywgJ0NPTU1PTi5EQVRFX1BMQUNFSE9MREVSJ107XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWF0LWRhdGUtZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwuZGF0ZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwuZGF0ZS5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0RFRkFVTFRfVkFMVUVfQUNDRVNTT1JdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTWF0RGF0ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgSW5wdXRFbGVtZW50IHtcbiAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX29uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF93cml0aW5nID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfZGlzYWJsaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX3RhYmluZGV4OiBudW1iZXI7XG4gIHByaXZhdGUgX3JlYWRvbmx5ID0gZmFsc2U7XG4gIHByaXZhdGUgX2FwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0U2l6aW5nOiBTdWJzY3JpcHRTaXppbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdEFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRTdWJzY3JpcHRTaXppbmc6IFN1YnNjcmlwdFNpemluZztcblxuICBwcm90ZWN0ZWQgdGV4dENvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcbiAgcHJvdGVjdGVkIGRhdGVQYXR0ZXJuOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBsb2NhbGU6IHN0cmluZztcbiAgcHJvdGVjdGVkIG1hc2tpdG9PcHRpb25zOiBNYXNraXRvT3B0aW9ucztcbiAgcHJvdGVjdGVkIGRhdGVQbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIGZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBmbG9hdExhYmVsOiBBcHBGbG9hdExhYmVsVHlwZSA9ICdhdXRvJztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIG1vYmlsZTogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNvbXBhY3QgPSBmYWxzZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGF1dG9mb2N1cyA9IGZhbHNlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2xlYXJhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZXF1aXJlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgc3RhcnREYXRlOiBNb21lbnQgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgdGltZXpvbmU6IHN0cmluZyA9IG51bGw7XG4gIEBJbnB1dCgpIGRhdGVQaWNrZXJGaWx0ZXI6IERhdGVGaWx0ZXJGbjxNb21lbnQ+O1xuXG4gIEBJbnB1dCgpXG4gIHNldCBhcHBlYXJhbmNlKHZhbHVlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlKSB7XG4gICAgdGhpcy5fYXBwZWFyYW5jZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGFwcGVhcmFuY2UoKTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVhcmFuY2UgfHwgdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgc3Vic2NyaXB0U2l6aW5nKHZhbHVlOiBTdWJzY3JpcHRTaXppbmcpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRTaXppbmcgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBzdWJzY3JpcHRTaXppbmcoKTogU3Vic2NyaXB0U2l6aW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3Vic2NyaXB0U2l6aW5nIHx8IHRoaXMuX2RlZmF1bHRTdWJzY3JpcHRTaXppbmc7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgcmVhZG9ubHkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZWFkb25seSA9IHZhbHVlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRvbmx5O1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHRhYmluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fdGFiaW5kZXggIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl90YWJpbmRleCA9IHZhbHVlO1xuICAgICAgaWYgKCF0aGlzLl93cml0aW5nKSB0aGlzLnVwZGF0ZVRhYkluZGV4KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRhYmluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmluZGV4O1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbnRyb2wuZGlzYWJsZWQ7XG4gIH1cblxuICBAVmlld0NoaWxkKCdkYXRlUGlja2VyJykgZGF0ZVBpY2tlcjogTWF0RGF0ZXBpY2tlcjxNb21lbnQ+O1xuICBAVmlld0NoaWxkKCdtYXRJbnB1dCcpIF9tYXRJbnB1dDogRWxlbWVudFJlZjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRhdGVBZGFwdGVyOiBNb21lbnREYXRlQWRhcHRlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtR3JvdXBEaXI6IEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgICBASW5qZWN0KE1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUykgZGVmYXVsdE9wdGlvbnM/OiBNYXRGb3JtRmllbGREZWZhdWx0T3B0aW9uc1xuICApIHtcbiAgICB0aGlzLmxvY2FsZSA9ICh0cmFuc2xhdGUuY3VycmVudExhbmcgfHwgdHJhbnNsYXRlLmRlZmF1bHRMYW5nKS5zdWJzdHJpbmcoMCwgMik7XG4gICAgdGhpcy5fZGVmYXVsdFN1YnNjcmlwdFNpemluZyA9IGRlZmF1bHRPcHRpb25zPy5zdWJzY3JpcHRTaXppbmcgfHwgTUFUX0ZPUk1fRklFTERfREVGQVVMVF9TVUJTQ1JJUFRfU0laSU5HO1xuICAgIHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlID0gZGVmYXVsdE9wdGlvbnM/LmFwcGVhcmFuY2UgfHwgTUFUX0ZPUk1fRklFTERfREVGQVVMVF9BUFBFQVJBTkNFO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtQ29udHJvbCA9XG4gICAgICB0aGlzLmZvcm1Db250cm9sIHx8ICh0aGlzLmZvcm1Db250cm9sTmFtZSAmJiB0aGlzLmZvcm1Hcm91cERpciAmJiAodGhpcy5mb3JtR3JvdXBEaXIuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpIGFzIFVudHlwZWRGb3JtQ29udHJvbCkpO1xuICAgIGlmICghdGhpcy5mb3JtQ29udHJvbCkgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBtYW5kYXRvcnkgYXR0cmlidXRlICdmb3JtQ29udHJvbCcgb3IgJ2Zvcm1Db250cm9sTmFtZScgaW4gPG1hdC1kYXRlLWZpZWxkPi5cIik7XG5cbiAgICB0aGlzLm1vYmlsZSA9IGlzTm90TmlsKHRoaXMubW9iaWxlKSA/IHRoaXMubW9iaWxlIDogaXNNb2JpbGUod2luZG93KTtcbiAgICB0aGlzLnJlcXVpcmVkID0gaXNOb3ROaWxCb29sZWFuKHRoaXMucmVxdWlyZWQpXG4gICAgICA/IHRoaXMucmVxdWlyZWRcbiAgICAgIDogdGhpcy5mb3JtQ29udHJvbC5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZCkgfHwgaXNCbGFua1N0cmluZyh0aGlzLnJlcXVpcmVkKTtcblxuICAgIC8vIEFkZCAndmFsaWREYXRlJyB2YWxpZGF0b3IgKHdoZW4gZXhpc3RpbmcgdmFsaWRhdG9yIGFyZSBudWxsIG9yIHJlcXVpcmVkLCB0byBiZSBzdXJlIHRvIGtlZXAgaXQpXG4gICAgaWYgKCF0aGlzLmZvcm1Db250cm9sLnZhbGlkYXRvciB8fCB0aGlzLmZvcm1Db250cm9sLnZhbGlkYXRvciA9PT0gVmFsaWRhdG9ycy5yZXF1aXJlZCkge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKFxuICAgICAgICB0aGlzLnJlcXVpcmVkID8gW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFNoYXJlZFZhbGlkYXRvcnMudmFsaWREYXRlQWxsb3dOb1RpbWVdIDogU2hhcmVkVmFsaWRhdG9ycy52YWxpZERhdGVBbGxvd05vVGltZVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKFxuICAgICAgICB0aGlzLnJlcXVpcmVkXG4gICAgICAgICAgPyBbdGhpcy5mb3JtQ29udHJvbC52YWxpZGF0b3IsIFZhbGlkYXRvcnMucmVxdWlyZWQsIFNoYXJlZFZhbGlkYXRvcnMudmFsaWREYXRlQWxsb3dOb1RpbWVdXG4gICAgICAgICAgOiBbdGhpcy5mb3JtQ29udHJvbC52YWxpZGF0b3IsIFNoYXJlZFZhbGlkYXRvcnMudmFsaWREYXRlQWxsb3dOb1RpbWVdXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgdGV4dCBjb250cm9sXG4gICAgdGhpcy50ZXh0Q29udHJvbCA9IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcbiAgICAgIG51bGwsXG4gICAgICAvLyBJbXBvcnRhbnQ6IHNob3VsZCBjb3B5IGVycm9ycyBmcm9tIHRoZSBtb2RlbCBmb3JtQ29udHJvbFxuICAgICAgKCkgPT4gdGhpcy5mb3JtQ29udHJvbC5lcnJvcnNcbiAgICApO1xuXG4gICAgLy8gR2V0IHBhdHRlcm5zIHRvIGRpc3BsYXkgZGF0ZVxuICAgIHRoaXMudXBkYXRlVHJhbnNsYXRpb25zKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoSTE4Tl9LRVlTKSk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMudHJhbnNsYXRlXG4gICAgICAgIC5nZXQoSTE4Tl9LRVlTKVxuICAgICAgICAucGlwZShza2lwKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKCh0cmFuc2xhdGlvbnMpID0+IHRoaXMudXBkYXRlVHJhbnNsYXRpb25zKHRyYW5zbGF0aW9ucykpXG4gICAgKTtcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy50ZXh0Q29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5vbkZvcm1DaGFuZ2UodmFsdWUpKSk7XG5cbiAgICAvLyBMaXN0ZW4gc3RhdHVzIGNoYW5nZXMgKHdoZW4gZG9uZSBvdXRzaWRlIHRoZSBjb21wb25lbnQgIC0gZS5nLiB3aGVuIHNldEVycm9ycygpIGlzIGNhbGxpbmcgb24gdGhlIGZvcm1Db250cm9sKVxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnN0YXR1c0NoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKChfKSA9PiAhdGhpcy5yZWFkb25seSAmJiAhdGhpcy5fd3JpdGluZyAmJiAhdGhpcy5fZGlzYWJsaW5nKSAvLyBTa2lwXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy50ZXh0Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICBpZiAodGhpcy5mb3JtQ29udHJvbC50b3VjaGVkICYmICF0aGlzLnRleHRDb250cm9sLnRvdWNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dENvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy51cGRhdGVUYWJJbmRleCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fd3JpdGluZykgcmV0dXJuOyAvLyBTa2lwXG4gICAgdGhpcy5fd3JpdGluZyA9IHRydWU7XG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZyhcIlttYXQtZGF0ZV0gd3JpdGVWYWx1ZSgpIHdpdGg6XCIsIHZhbHVlKTtcblxuICAgIC8vIENvbnZlcnQgaW50byBkYXRlXG4gICAgLy8gSW1wb3J0YW50OiBjbG9uZSwgYmVjYXVzZSBzdGFydE9mIHdpbGwgdXBkYXRlIHRoZSBleGlzdGluZyBkYXRlXG4gICAgY29uc3QgZGF0ZSA9IGlzTW9tZW50KHZhbHVlKSA/IHZhbHVlLmNsb25lKCkgOiBmcm9tRGF0ZUlTT1N0cmluZyh2YWx1ZSk7XG5cbiAgICBpZiAoIWRhdGUgfHwgIWRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLnRleHRDb250cm9sLnBhdGNoVmFsdWUobnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayhudWxsKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTW92ZSB0byB0aGUgZXhwZWN0ZWQgVFogKGtlZXBpbmcgbG9jYWwgaG91ciAtIGUuZy4gbWlkbmlnaHQpXG4gICAgICBjb25zdCBkYXkgPSAoKHRoaXMudGltZXpvbmUgJiYgZGF0ZS50eih0aGlzLnRpbWV6b25lKSkgfHwgZGF0ZSlcbiAgICAgICAgLy8gUmVzZXQgaG91clxuICAgICAgICAuc3RhcnRPZignZGF5Jyk7XG4gICAgICBjb25zdCBkYXlTdHIgPSB0aGlzLmRhdGVBZGFwdGVyLmZvcm1hdChkYXksIHRoaXMuZGF0ZVBhdHRlcm4pO1xuXG4gICAgICBpZiAodGhpcy50ZXh0Q29udHJvbC52YWx1ZSAhPT0gZGF5U3RyKSB7XG4gICAgICAgIC8vIFVwZGF0ZSB0ZXh0IGNvbnRyb2xcbiAgICAgICAgdGhpcy50ZXh0Q29udHJvbC5wYXRjaFZhbHVlKGRheVN0ciwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzYWJsaW5nKSByZXR1cm47XG5cbiAgICB0aGlzLl9kaXNhYmxpbmcgPSB0cnVlO1xuICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLnRleHRDb250cm9sLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRleHRDb250cm9sLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICAgIHRoaXMuX2Rpc2FibGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9wZW5EYXRlUGlja2VyKGV2ZW50PzogRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuZGF0ZVBpY2tlcikgcmV0dXJuO1xuICAgIHRoaXMuX3ByZXZlbnRFdmVudChldmVudCk7XG4gICAgaWYgKCF0aGlzLmRhdGVQaWNrZXIub3BlbmVkKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9jb25zb2xlLmRlYnVnKCdbbWF0LWRhdGVdIE9wZW5pbmcgZGF0ZSBwaWNrZXIuLi4nKTtcblxuICAgICAgdGhpcy5kYXRlUGlja2VyLm9wZW4oKTtcbiAgICB9XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICBpZiAoIXRoaXMuX21hdElucHV0KSByZXR1cm47XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChpc0ZvY3VzYWJsZUVsZW1lbnQodGhpcy5fbWF0SW5wdXQubmF0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgdGhpcy5fbWF0SW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2xlYXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5fcHJldmVudEV2ZW50KGV2ZW50KTtcblxuICAgIHRoaXMudGV4dENvbnRyb2wucGF0Y2hWYWx1ZShudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayhudWxsKTtcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgZnVuY3Rpb25zIC0tICovXG5cbiAgcHJvdGVjdGVkIF9vbkRhdGVQaWNrZXJDaGFuZ2UoZXZlbnQ6IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50PE1vbWVudD4pOiB2b2lkIHtcbiAgICAvLyBNYWtlIHN1cmUgZXZlbnQgaXMgdmFsaWRcbiAgICBpZiAoIWV2ZW50IHx8IChldmVudC52YWx1ZSAhPT0gbnVsbCAmJiAhaXNNb21lbnQoZXZlbnQudmFsdWUpKSkge1xuICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIE1hdERhdGVwaWNrZXIgZXZlbnQuIFNraXBwaW5nJywgZXZlbnQpO1xuICAgICAgcmV0dXJuOyAvLyBTa2lwXG4gICAgfVxuXG4gICAgbGV0IHZhbHVlID0gZXZlbnQudmFsdWU7XG5cbiAgICAvLyBObyB2YWx1ZSwgYnV0IG1vYmlsZSBtb2RlOiB1c2UgdGhlIGN1cnJlbnQgZGF0ZVxuICAgIGlmICghdmFsdWUgJiYgdGhpcy5tb2JpbGUpIHtcbiAgICAgIHZhbHVlID0gRGF0ZVV0aWxzLnJlc2V0VGltZShEYXRlVXRpbHMubW9tZW50KCkubG9jYWxlKHRoaXMubG9jYWxlKSwgdGhpcy50aW1lem9uZSk7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHRvRGF0ZUlTT1N0cmluZyh2YWx1ZSksIHtcbiAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSwgLy8gV2lsbCBjYWxsIHdyaXRlVmFsdWUoKVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGF0ZSA9IHZhbHVlXG4gICAgICA/LmNsb25lKClcbiAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUpIC8vIHNldCBhcyB0aW1lIGFzIGxvY2FsZSB0aW1lXG4gICAgICAuc3RhcnRPZignZGF5JykgLy8gcmVzZXQgaG91clxuICAgICAgLnV0Yyh0cnVlKTtcbiAgICBjb25zdCBkYXRlU3RyID0gKGRhdGUgJiYgdGhpcy5kYXRlQWRhcHRlci5mb3JtYXQoZGF0ZSwgdGhpcy5kYXRlUGF0dGVybikpIHx8IG51bGw7XG5cbiAgICBpZiAodGhpcy50ZXh0Q29udHJvbC52YWx1ZSAhPT0gZGF0ZVN0cikge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlttYXQtZGF0ZV0gb25EYXRlUGlja2VyQ2hhbmdlKCkgbmV3IHZhbHVlOlwiLCBkYXRlU3RyKTtcblxuICAgICAgdGhpcy50ZXh0Q29udHJvbC5zZXRWYWx1ZShkYXRlU3RyLCB7XG4gICAgICAgIGVtaXRFdmVudDogdHJ1ZSwgLy8gV2lsbCBjYWxsIG9uRm9ybUNoYW5nZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9vcGVuRGF0ZVBpY2tlcklmTW9iaWxlKGV2ZW50OiBFdmVudCkge1xuICAgIGlmICghdGhpcy5tb2JpbGUgfHwgZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQgfHwgdGhpcy5kYXRlUGlja2VyPy5vcGVuZWQgfHwgdGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgLy9jb25zb2xlLmRlYnVnKCdbbWF0LWRhdGVdIFByZXBhcmluZyB0byBvcGVuIGRhdGUgcGlja2VyLi4uICcpO1xuXG4gICAgdGhpcy5fcHJldmVudEV2ZW50KGV2ZW50KTtcblxuICAgIC8vIE9wZW4gdGhlIHBpY2tlclxuICAgIHRoaXMub3BlbkRhdGVQaWNrZXIoZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9vbkJsdXIoKSB7XG4gICAgaWYgKHRoaXMudGV4dENvbnRyb2wudG91Y2hlZCkge1xuICAgICAgLy8gQXV0byBmaWxsIGRhdGEgaW4gY2FzZSBvZiBwYXJ0aWFsIGlucHV0XG4gICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5mb3JtQ29udHJvbC52YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdG91Y2hlZFxuICAgIHRoaXMuX2NoZWNrSWZUb3VjaGVkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2NoZWNrSWZUb3VjaGVkKCkge1xuICAgIGlmICh0aGlzLnRleHRDb250cm9sLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG5cbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9wcmV2ZW50RXZlbnQoZXZlbnQ/OiBFdmVudCkge1xuICAgIGlmICghZXZlbnQpIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmIChldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLyogLS0gcHJpdmF0ZSBtZXRob2RzIC0tICovXG5cbiAgcHJpdmF0ZSB1cGRhdGVUcmFuc2xhdGlvbnModHJhbnNsYXRpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgY29uc3QgZGF0ZVBhdHRlcm4gPSB0cmFuc2xhdGlvbnNbJ0NPTU1PTi5EQVRFX1BBVFRFUk4nXSAhPT0gJ0NPTU1PTi5EQVRFX1BBVFRFUk4nID8gdHJhbnNsYXRpb25zWydDT01NT04uREFURV9QQVRURVJOJ10gOiAnREQvTU0vWVlZWSc7XG4gICAgdGhpcy51cGRhdGVQYXR0ZXJuKGRhdGVQYXR0ZXJuKTtcblxuICAgIGNvbnN0IGRhdGVQbGFjZWhvbGRlciA9XG4gICAgICB0cmFuc2xhdGlvbnNbJ0NPTU1PTi5EQVRFX1BMQUNFSE9MREVSJ10gIT09ICdDT01NT04uREFURV9QTEFDRUhPTERFUidcbiAgICAgICAgPyB0cmFuc2xhdGlvbnNbJ0NPTU1PTi5EQVRFX1BMQUNFSE9MREVSJ11cbiAgICAgICAgOiB0aGlzLmRhdGVQYXR0ZXJuPy50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMudXBkYXRlTWFza09wdGlvbnMoZGF0ZVBsYWNlaG9sZGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUGF0dGVybihwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5kYXRlUGF0dGVybiAhPT0gcGF0dGVybikge1xuICAgICAgdGhpcy5kYXRlUGF0dGVybiA9IHBhdHRlcm47XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWFza09wdGlvbnMoZGF0ZVBsYWNlaG9sZGVyOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5kYXRlUGxhY2Vob2xkZXIgIT0gZGF0ZVBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLmRhdGVQbGFjZWhvbGRlciA9IGRhdGVQbGFjZWhvbGRlcjtcblxuICAgICAgY29uc3QgZGF0ZU9wdGlvbnMgPSBtYXNraXRvRGF0ZU9wdGlvbnNHZW5lcmF0b3Ioe1xuICAgICAgICBtb2RlOiB0aGlzLmRhdGVQYXR0ZXJuLnRvTG93ZXJDYXNlKCkgYXMgTWFza2l0b0RhdGVNb2RlLFxuICAgICAgICBzZXBhcmF0b3I6ICcvJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsdWdpbnMsIC8vIHBsdWdpbnMga2VlcHMgY2FyZXQgaW5zaWRlIGFjdHVhbCB2YWx1ZSBhbmQgcmVtb3ZlIHBsYWNlaG9sZGVyIG9uIGJsdXJcbiAgICAgICAgLi4ucGxhY2Vob2xkZXJPcHRpb25zXG4gICAgICAgIC8vIHBhc3MgJ3RydWUnIGFzIHNlY29uZCBhcmd1bWVudCB0byBhZGQgcGx1Z2luIHRvIGhpZGUgcGxhY2Vob2xkZXIgd2hlbiBpbnB1dCBpcyBub3QgZm9jdXNlZFxuICAgICAgfSA9IG1hc2tpdG9XaXRoUGxhY2Vob2xkZXIodGhpcy5kYXRlUGxhY2Vob2xkZXIsIHRydWUpO1xuXG4gICAgICB0aGlzLm1hc2tpdG9PcHRpb25zID0ge1xuICAgICAgICAuLi5kYXRlT3B0aW9ucyxcbiAgICAgICAgcGx1Z2luczogcGx1Z2lucy5jb25jYXQoZGF0ZU9wdGlvbnMucGx1Z2lucyB8fCBbXSksXG4gICAgICAgIHByZXByb2Nlc3NvcnM6IFtcbiAgICAgICAgICAvLyBBbHdheXMgcHV0IGl0IEJFRk9SRSBhbGwgb3RoZXIgcHJlcHJvY2Vzc29yc1xuICAgICAgICAgIC4uLnBsYWNlaG9sZGVyT3B0aW9ucy5wcmVwcm9jZXNzb3JzLFxuICAgICAgICAgIC4uLmRhdGVPcHRpb25zLnByZXByb2Nlc3NvcnMsXG4gICAgICAgIF0sXG4gICAgICAgIHBvc3Rwcm9jZXNzb3JzOiBbXG4gICAgICAgICAgLi4uZGF0ZU9wdGlvbnMucG9zdHByb2Nlc3NvcnMsXG4gICAgICAgICAgLy8gQWx3YXlzIHB1dCBpdCBBRlRFUiBhbGwgb3RoZXIgcG9zdHByb2Nlc3NvcnNcbiAgICAgICAgICAuLi5wbGFjZWhvbGRlck9wdGlvbnMucG9zdHByb2Nlc3NvcnMsXG4gICAgICAgIF0sXG4gICAgICB9IGFzIFJlcXVpcmVkPE1hc2tpdG9PcHRpb25zPjtcblxuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uRm9ybUNoYW5nZShkYXRlU3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fd3JpdGluZykgcmV0dXJuOyAvLyBTa2lwIGlmIGNhbGwgYnkgc2VsZlxuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuXG4gICAgaWYgKGRhdGVTdHIgPT09IHRoaXMuZGF0ZVBsYWNlaG9sZGVyKSB7XG4gICAgICBkYXRlU3RyID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZVN0ciA9IG51bGxJZk5pbE9yQmxhbmsoZGF0ZVN0cik7XG4gICAgfVxuXG4gICAgLy9jb25zb2xlLmRlYnVnKGBbbWF0LWRhdGVdIG9uRm9ybUNoYW5nZSgpIC0gY29udHJvbHMgdmFsdWVzOiBgLCBkYXRlU3RyKTtcblxuICAgIC8vIEZvcmNlICcwJyBmb3IgZW1wdHkgbW9udGggKG90aGVyd2lzZSBtb21lbnQgd2lsbCB1c2UgdGhlIGN1cnJlbnQgbW9udGgpXG4gICAgZGF0ZVN0ciA9IGRhdGVTdHJcbiAgICAgID8ucmVwbGFjZSgvW15cXGQvXS9nLCAnJykgLy8gS2VlcCBvbmx5ICBkaWdpdHMgYW5kIHNsYXNoZXNcbiAgICAgIC5yZXBsYWNlKCcvLycsICcvMC8nKVxuICAgICAgLy8gRm9yY2UgJzAnIGZvciBlbXB0eSB5ZWFyIChvdGhlcndpc2UgbW9tZW50IHdpbGwgdXNlIHRoZSBjdXJyZW50IHllYXIpXG4gICAgICAucmVwbGFjZSgvXFwvJC8sICcvMCcpO1xuXG4gICAgLy8gUGFyc2UgZGF0ZSAoc3RyaWN0ID0gZmFsc2UpXG4gICAgbGV0IGRhdGU6IE1vbWVudCA9IChkYXRlU3RyICYmIHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2UoZGF0ZVN0ciwgdGhpcy5kYXRlUGF0dGVybikpIHx8IG51bGw7XG5cbiAgICAvLyBNb3ZlIHRvIHRoZSBleHBlY3RlZCBUWiwgYW5kIGtlZXAgdGhlIGxvY2FsIGhvdXIgKD0gbWlkbmlnaHQpIHRvIGhhdmUgbWlkbmlnaHQgYXQgbG9jYWwgdGltZVxuICAgIGlmICh0aGlzLnRpbWV6b25lKSB7XG4gICAgICBkYXRlID0gZGF0ZT8udHoodGhpcy50aW1lem9uZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZGF0ZSA9IGRhdGVcbiAgICAgID8uc3RhcnRPZignZGF5JykgLy8gUmVzZXQgaG91clxuICAgICAgLy8gQ29udmVydCB0byBVVEMgKGF2b2lkIFRaIG9mZnNldCBpbiBmaW5hbCBzdHJpbmcpO1xuICAgICAgLnV0YygpO1xuXG4gICAgLy8gU2V0IG1vZGVsIHZhbHVlXG4gICAgdGhpcy5lbWl0Q2hhbmdlKGRhdGUsIGRhdGVTdHIpO1xuXG4gICAgLy8gRm9yY2UgdGhlIGRheSBjb250cm9sIHRvIHVwZGF0ZSBpdHMgdmFsaWRpdHkgKHNhbWUgZXJyb3JzIGFzIGZvcm1Db250cm9sIC0gc2VlIG5nT25Jbml0KCkpXG4gICAgdGhpcy50ZXh0Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG5cbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDaGFuZ2UoZGF0ZTogTW9tZW50LCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcpIHtcbiAgICAvLyBDb252ZXJ0IHRvIG1vZGVsIHZhbHVlIChJU08gZGF0ZSBzdHJpbmcpXG4gICAgLy8gSU1QT1JUQU5UOiBJZiBkYXRlIGlzIGludmFsaWQsIHRoZW4ga2VlcCB0aGUgaW52YWxpZCBzdHJpbmcgdmFsdWVcbiAgICAvLyB0byBhbGxvdyBTaGFyZWRWYWxpZGF0b3JzLnZhbGlkRGF0ZSgpIHRvIHJhaXNlIGFuIGVycm9yXG4gICAgY29uc3QgY29udHJvbFZhbHVlID0gZGF0ZT8uaXNWYWxpZCgpID8gdG9EYXRlSVNPU3RyaW5nKGRhdGUpIDogZGVmYXVsdFZhbHVlIHx8IG51bGw7XG5cbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC52YWx1ZSAhPT0gY29udHJvbFZhbHVlKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9jb25zb2xlLmRlYnVnKCdbbWF0LWRhdGVdIEVtaXQgbmV3IHZhbHVlOiAnICsgY29udHJvbFZhbHVlKTtcblxuICAgICAgLy8gVXBkYXRlIGZvcm1Db250cm9sIHZhbHVlICh0aGlzIGlzIG5lZWQgdG8gdXBkYXRlIGRhdGVQaWNrZXIgYWxzbywgaW4gZGVza3RvcCBtb2RlKVxuICAgICAgaWYgKCF0aGlzLm1vYmlsZSAmJiBkYXRlPy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShjb250cm9sVmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hhbmdlcyBjb21lcyBmcm9tIGluc2lkZSBmdW5jdGlvbjogdXNlIHRoZSBjYWxsYmFja1xuICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayhjb250cm9sVmFsdWUpO1xuXG4gICAgICAvLyBDaGVjayBpZiBuZWVkIHRvIHVwZGF0ZSBjb250cm9sc1xuICAgICAgdGhpcy5fY2hlY2tJZlRvdWNoZWQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRhYkluZGV4KCkge1xuICAgIGlmIChpc05pbCh0aGlzLl90YWJpbmRleCkgfHwgdGhpcy5fdGFiaW5kZXggPT09IC0xKSByZXR1cm47IC8vIHNraXBcblxuICAgIC8vIEZvY3VzIHRvIGlucHV0XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRUYWJJbmRleCh0aGlzLl9tYXRJbnB1dCwgdGhpcy5fdGFiaW5kZXgpO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0FzVG91Y2hlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW4gfSkge1xuICAgIHRoaXMudGV4dENvbnRyb2wubWFya0FzVG91Y2hlZChvcHRzKTtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcmtBc0RpcnR5KG9wdHM/OiBhbnkpIHtcbiAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KG9wdHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPCEtLSByZWFkb25seSAtLT5cbkBpZiAocmVhZG9ubHkpIHtcbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbCB8IGFzRmxvYXRMYWJlbFR5cGVcIlxuICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgIFtzdWJzY3JpcHRTaXppbmddPVwic3Vic2NyaXB0U2l6aW5nXCJcbiAgICBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkXCJcbiAgPlxuICAgIDxkaXYgbWF0UHJlZml4PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFByZWZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgQGlmIChmbG9hdExhYmVsICE9PSAnbmV2ZXInICYmICEhcGxhY2Vob2xkZXIpIHtcbiAgICAgIDxtYXQtbGFiZWw+e3sgcGxhY2Vob2xkZXIgfX08L21hdC1sYWJlbD5cbiAgICB9XG4gICAgPGlucHV0IG1hdElucHV0IGhpZGRlbiB0eXBlPVwidGV4dFwiIHJlYWRvbmx5IFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiIC8+XG4gICAgPGlvbi10ZXh0Pnt7IGZvcm1Db250cm9sLnZhbHVlIHwgZGF0ZUZvcm1hdDogeyBwYXR0ZXJuOiBkYXRlUGF0dGVybiB9IH19PC9pb24tdGV4dD5cbiAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBoaW50cyAtLT5cbiAgICA8bWF0LWhpbnQgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiZm9ybUNvbnRyb2wuaW52YWxpZFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdEhpbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbWF0LWhpbnQ+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG59IEBlbHNlIHtcbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbCB8IGFzRmxvYXRMYWJlbFR5cGVcIlxuICAgIChmb2N1cyk9XCJfb3BlbkRhdGVQaWNrZXJJZk1vYmlsZSgkZXZlbnQpXCJcbiAgICAoY2xpY2spPVwiX29wZW5EYXRlUGlja2VySWZNb2JpbGUoJGV2ZW50KVwiXG4gICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gID5cbiAgICA8ZGl2IG1hdFByZWZpeD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRQcmVmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgQGlmIChmbG9hdExhYmVsICE9PSAnbmV2ZXInICYmICEhcGxhY2Vob2xkZXIpIHtcbiAgICAgIDxtYXQtbGFiZWw+e3sgcGxhY2Vob2xkZXIgfX08L21hdC1sYWJlbD5cbiAgICB9XG4gICAgPCEtLSBEZXNrdG9wIC0tPlxuICAgIEBpZiAoIW1vYmlsZSkge1xuICAgICAgPGlucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgICNtYXRJbnB1dFxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFttYXNraXRvXT1cIm1hc2tpdG9PcHRpb25zXCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cInRleHRDb250cm9sXCJcbiAgICAgICAgKGJsdXIpPVwiX29uQmx1cigpXCJcbiAgICAgICAgKGtleXVwLmFycm93RG93bik9XCJvcGVuRGF0ZVBpY2tlcigkZXZlbnQpXCJcbiAgICAgICAgKGtleXVwLmVzY2FwZSk9XCJfcHJldmVudEV2ZW50KCRldmVudClcIlxuICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICBbYXBwQXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgICAvPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgaGlkZGVuXG4gICAgICAgIFttYXREYXRlcGlja2VyXT1cImRhdGVQaWNrZXJcIlxuICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJkYXRlUGlja2VyRmlsdGVyXCJcbiAgICAgICAgKGRhdGVDaGFuZ2UpPVwiX29uRGF0ZVBpY2tlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgcmVhZG9ubHlcbiAgICAgIC8+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8IS0tIE1vYmlsZSAtLT5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjbWF0SW5wdXRcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9sIG1kYy10ZXh0LWZpZWxkX19pbnB1dFwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJ0ZXh0Q29udHJvbFwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgIHJlYWRvbmx5XG4gICAgICAvPlxuICAgICAgPGlucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgaGlkZGVuXG4gICAgICAgIFttYXREYXRlcGlja2VyXT1cImRhdGVQaWNrZXJcIlxuICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJkYXRlUGlja2VyRmlsdGVyXCJcbiAgICAgICAgKGRhdGVDaGFuZ2UpPVwiX29uRGF0ZVBpY2tlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgcmVhZG9ubHlcbiAgICAgIC8+XG4gICAgfVxuXG4gICAgPGRpdiBtYXRTdWZmaXg+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gdGFiaW5kZXg9XCItMVwiIChjbGljayk9XCJvcGVuRGF0ZVBpY2tlcigkZXZlbnQpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgIDxtYXQtaWNvbj57eyBtb2JpbGUgPyAnZGF0ZV9yYW5nZScgOiAna2V5Ym9hcmRfYXJyb3dfZG93bicgfX08L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIEBpZiAoY2xlYXJhYmxlKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXIoJGV2ZW50KVwiXG4gICAgICAgICAgW2hpZGRlbl09XCJmb3JtQ29udHJvbC5kaXNhYmxlZCB8fCAhZm9ybUNvbnRyb2wudmFsdWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBlcnJvcnMgLS0+XG4gICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm1Db250cm9sLnRvdWNoZWQgJiYgZm9ybUNvbnRyb2wuZXJyb3JzIHwgbWFwS2V5cyB8IGFycmF5Rmlyc3Q7IGxldCBlcnJvcktleVwiPlxuICAgICAgQHN3aXRjaCAoZXJyb3JLZXkpIHtcbiAgICAgICAgQGNhc2UgKCdyZXF1aXJlZCcpIHtcbiAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKCd2YWxpZERhdGUnKSB7XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPkVSUk9SLkZJRUxEX05PVF9WQUxJRF9EQVRFPC9zcGFuPlxuICAgICAgICB9XG4gICAgICAgIEBjYXNlICgnZGF0ZUlzQWZ0ZXInKSB7XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICB7eyAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfQUZURVInIHwgdHJhbnNsYXRlOiBmb3JtQ29udHJvbC5lcnJvcnMuZGF0ZUlzQWZ0ZXIgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKCdkYXRlSXNCZWZvcmUnKSB7XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICB7eyAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfQkVGT1JFJyB8IHRyYW5zbGF0ZTogZm9ybUNvbnRyb2wuZXJyb3JzLmRhdGVJc0JlZm9yZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoJ2RhdGVSYW5nZScpIHtcbiAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+RVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfUkFOR0U8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKCdkYXRlTWF4RHVyYXRpb24nKSB7XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPkVSUk9SLkZJRUxEX05PVF9WQUxJRF9EQVRFX01BWF9EVVJBVElPTjwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoJ2RhdGVNaW5EdXJhdGlvbicpIHtcbiAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+RVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfTUlOX0RVUkFUSU9OPC9zcGFuPlxuICAgICAgICB9XG4gICAgICAgIEBjYXNlICgnbXNnJykge1xuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAge3sgZm9ybUNvbnRyb2wuZXJyb3JzLm1zZz8ua2V5IHx8IGZvcm1Db250cm9sLmVycm9ycy5tc2cgfCB0cmFuc2xhdGU6IGZvcm1Db250cm9sLmVycm9ycy5tc2c/LnBhcmFtcyB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRFcnJvclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPCEtLSBoaW50cyAtLT5cbiAgICBAaWYgKCFmb3JtQ29udHJvbC5pbnZhbGlkKSB7XG4gICAgICA8bWF0LWhpbnQ+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRIaW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbWF0LWhpbnQ+XG4gICAgfVxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDxtYXQtZGF0ZXBpY2tlciAjZGF0ZVBpY2tlciBbdG91Y2hVaV09XCJtb2JpbGVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbc3RhcnRBdF09XCJzdGFydERhdGVcIj5cbiAgICA8IS0tIERhdGUgcGlja2VyIGJ1dHRvbnMgLS0+XG4gICAgQGlmIChtb2JpbGUpIHtcbiAgICAgIDxtYXQtZGF0ZXBpY2tlci1hY3Rpb25zPlxuICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiBjb2xvcj1cImRhcmtcIiBtYXREYXRlcGlja2VyQ2FuY2VsPlxuICAgICAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5CVE5fQ0FOQ0VMPC9pb24tbGFiZWw+XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiIG1hdERhdGVwaWNrZXJBcHBseT5cbiAgICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5DT01NT04uQlROX1ZBTElEQVRFPC9pb24tbGFiZWw+XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvbWF0LWRhdGVwaWNrZXItYWN0aW9ucz5cbiAgICB9XG4gIDwvbWF0LWRhdGVwaWNrZXI+XG59XG5cbjxuZy10ZW1wbGF0ZSAjbWF0UHJlZml4VGVtcGxhdGU+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRQcmVmaXhdXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtYXRTdWZmaXhUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21hdEVycm9yVGVtcGxhdGU+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1lcnJvcixbbWF0RXJyb3JdXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtYXRIaW50VGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtaGludC13cmFwcGVyXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWhpbnQ6bm90KFthbGlnbj0nZW5kJ10pLFttYXRIaW50XVwiPjwvbmctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLWhpbnQtc3BhY2VyXCI+PC9kaXY+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWhpbnRbYWxpZ249J2VuZCddXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=