@sumaris-net/ngx-components 18.23.62 → 21.0.0-rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (799) hide show
  1. package/README.md +2 -0
  2. package/doc/build.md +3 -5
  3. package/fesm2022/sumaris-net.ngx-components.mjs +2383 -2150
  4. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  5. package/package.json +15 -15
  6. package/src/assets/environments/environment-test.json +2 -2
  7. package/src/assets/i18n/en-US.json +4 -1
  8. package/src/assets/i18n/en.json +4 -1
  9. package/src/assets/i18n/fr.json +10 -6
  10. package/src/assets/manifest.json +1 -1
  11. package/src/theme/_icons.scss +8 -12
  12. package/src/theme/_ionic.globals.scss +8 -1
  13. package/src/theme/_material.globals.scss +4 -1
  14. package/src/theme/_material.scss +16 -13
  15. package/src/theme/_mixins.scss +7 -1
  16. package/src/theme/_ngx-components.forms.scss +87 -84
  17. package/src/theme/_ngx-components.globals.scss +2 -0
  18. package/src/theme/_ngx-components.scss +19 -4
  19. package/src/theme/_ngx-components.table.scss +31 -26
  20. package/src/theme/_ngx-components.tabs.scss +16 -14
  21. package/src/theme/_responsive.scss +2 -0
  22. package/src/theme/_roboto.scss +3 -0
  23. package/src/theme/_theme.scss +11 -14
  24. package/src/theme/_theme.variables.scss +6 -1
  25. package/src/theme/ionic/ionic.functions.color.scss +13 -5
  26. package/src/theme/ionic/ionic.globals.scss +4 -4
  27. package/src/theme/ionic/ionic.theme.default.scss +2 -0
  28. package/types/sumaris-net.ngx-components.d.ts +14132 -0
  29. package/esm2022/public_api.mjs +0 -403
  30. package/esm2022/src/app/admin/admin-routing.module.mjs +0 -34
  31. package/esm2022/src/app/admin/admin.module.mjs +0 -32
  32. package/esm2022/src/app/admin/users/person.filter.mjs +0 -157
  33. package/esm2022/src/app/admin/users/person.service.mjs +0 -226
  34. package/esm2022/src/app/admin/users/person.validator.mjs +0 -78
  35. package/esm2022/src/app/admin/users/users-select.modal.mjs +0 -167
  36. package/esm2022/src/app/admin/users/users.mjs +0 -502
  37. package/esm2022/src/app/admin/users/users.module.mjs +0 -59
  38. package/esm2022/src/app/admin/users/users.utils.mjs +0 -29
  39. package/esm2022/src/app/core/about/about.modal.mjs +0 -119
  40. package/esm2022/src/app/core/about/about.module.mjs +0 -22
  41. package/esm2022/src/app/core/account/account.module.mjs +0 -75
  42. package/esm2022/src/app/core/account/account.page.mjs +0 -426
  43. package/esm2022/src/app/core/account/new-token.form.mjs +0 -109
  44. package/esm2022/src/app/core/account/new-token.modal.mjs +0 -66
  45. package/esm2022/src/app/core/account/password/change-password.form.mjs +0 -63
  46. package/esm2022/src/app/core/account/password/change-password.module.mjs +0 -22
  47. package/esm2022/src/app/core/account/password/change-password.page.mjs +0 -150
  48. package/esm2022/src/app/core/account/token.table.mjs +0 -160
  49. package/esm2022/src/app/core/auth/auth.form.mjs +0 -159
  50. package/esm2022/src/app/core/auth/auth.modal.mjs +0 -76
  51. package/esm2022/src/app/core/auth/auth.module.mjs +0 -56
  52. package/esm2022/src/app/core/auth/reset-password.modal.mjs +0 -89
  53. package/esm2022/src/app/core/core.module.mjs +0 -157
  54. package/esm2022/src/app/core/core.testing.module.mjs +0 -128
  55. package/esm2022/src/app/core/form/array/form-array.mjs +0 -328
  56. package/esm2022/src/app/core/form/array/testing/form-array-test.module.mjs +0 -23
  57. package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +0 -97
  58. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +0 -111
  59. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +0 -31
  60. package/esm2022/src/app/core/form/entity/editor.class.mjs +0 -268
  61. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +0 -420
  62. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +0 -748
  63. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +0 -25
  64. package/esm2022/src/app/core/form/entity/entity.module.mjs +0 -33
  65. package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +0 -190
  66. package/esm2022/src/app/core/form/form-container.class.mjs +0 -347
  67. package/esm2022/src/app/core/form/form.class.mjs +0 -342
  68. package/esm2022/src/app/core/form/form.module.mjs +0 -77
  69. package/esm2022/src/app/core/form/form.utils.mjs +0 -238
  70. package/esm2022/src/app/core/form/list/list.form.mjs +0 -243
  71. package/esm2022/src/app/core/form/list/list.module.mjs +0 -31
  72. package/esm2022/src/app/core/form/properties/properties-file.service.mjs +0 -133
  73. package/esm2022/src/app/core/form/properties/properties.form.mjs +0 -397
  74. package/esm2022/src/app/core/form/properties/properties.module.mjs +0 -85
  75. package/esm2022/src/app/core/form/properties/properties.table.mjs +0 -267
  76. package/esm2022/src/app/core/form/properties/properties.utils.mjs +0 -304
  77. package/esm2022/src/app/core/form/properties/property.validator.mjs +0 -70
  78. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +0 -103
  79. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +0 -23
  80. package/esm2022/src/app/core/form/text/testing/text-form.testing.mjs +0 -42
  81. package/esm2022/src/app/core/form/text/testing/text-form.testing.module.mjs +0 -25
  82. package/esm2022/src/app/core/form/text/text-form.component.mjs +0 -205
  83. package/esm2022/src/app/core/form/text/text-form.module.mjs +0 -31
  84. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +0 -73
  85. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +0 -22
  86. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +0 -164
  87. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +0 -32
  88. package/esm2022/src/app/core/form/username/username.form.mjs +0 -55
  89. package/esm2022/src/app/core/form/username/username.module.mjs +0 -20
  90. package/esm2022/src/app/core/graphql/graphql.module.mjs +0 -14
  91. package/esm2022/src/app/core/graphql/graphql.service.mjs +0 -781
  92. package/esm2022/src/app/core/graphql/graphql.utils.mjs +0 -119
  93. package/esm2022/src/app/core/home/home.mjs +0 -472
  94. package/esm2022/src/app/core/home/home.module.mjs +0 -54
  95. package/esm2022/src/app/core/icon/icon.component.mjs +0 -40
  96. package/esm2022/src/app/core/icon/icon.module.mjs +0 -20
  97. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +0 -394
  98. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +0 -31
  99. package/esm2022/src/app/core/menu/menu.component.mjs +0 -273
  100. package/esm2022/src/app/core/menu/menu.model.mjs +0 -327
  101. package/esm2022/src/app/core/menu/menu.module.mjs +0 -47
  102. package/esm2022/src/app/core/menu/menu.service.mjs +0 -666
  103. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +0 -113
  104. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +0 -51
  105. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +0 -165
  106. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +0 -60
  107. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +0 -28
  108. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +0 -31
  109. package/esm2022/src/app/core/peer/select-peer.modal.mjs +0 -350
  110. package/esm2022/src/app/core/peer/select-peer.module.mjs +0 -36
  111. package/esm2022/src/app/core/register/register-confirm.page.mjs +0 -90
  112. package/esm2022/src/app/core/register/register.form.mjs +0 -197
  113. package/esm2022/src/app/core/register/register.modal.mjs +0 -55
  114. package/esm2022/src/app/core/register/register.module.mjs +0 -23
  115. package/esm2022/src/app/core/services/account.service.mjs +0 -1403
  116. package/esm2022/src/app/core/services/auth-guard.service.mjs +0 -74
  117. package/esm2022/src/app/core/services/base-entity-service.class.mjs +0 -499
  118. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +0 -224
  119. package/esm2022/src/app/core/services/base58.mjs +0 -83
  120. package/esm2022/src/app/core/services/config/core.config.mjs +0 -293
  121. package/esm2022/src/app/core/services/config.service.mjs +0 -384
  122. package/esm2022/src/app/core/services/crypto.service.mjs +0 -107
  123. package/esm2022/src/app/core/services/errors.mjs +0 -54
  124. package/esm2022/src/app/core/services/local-settings.service.mjs +0 -540
  125. package/esm2022/src/app/core/services/model/account.model.mjs +0 -192
  126. package/esm2022/src/app/core/services/model/config.model.mjs +0 -111
  127. package/esm2022/src/app/core/services/model/department.model.mjs +0 -35
  128. package/esm2022/src/app/core/services/model/entity.decorators.mjs +0 -97
  129. package/esm2022/src/app/core/services/model/entity.model.mjs +0 -347
  130. package/esm2022/src/app/core/services/model/filter.model.mjs +0 -169
  131. package/esm2022/src/app/core/services/model/history.model.mjs +0 -2
  132. package/esm2022/src/app/core/services/model/model.enum.mjs +0 -11
  133. package/esm2022/src/app/core/services/model/node-feature.model.mjs +0 -31
  134. package/esm2022/src/app/core/services/model/peer.model.mjs +0 -114
  135. package/esm2022/src/app/core/services/model/person.model.mjs +0 -118
  136. package/esm2022/src/app/core/services/model/referential.model.mjs +0 -207
  137. package/esm2022/src/app/core/services/model/settings.model.mjs +0 -6
  138. package/esm2022/src/app/core/services/model/token.model.mjs +0 -57
  139. package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +0 -234
  140. package/esm2022/src/app/core/services/network.service.mjs +0 -759
  141. package/esm2022/src/app/core/services/network.types.mjs +0 -2
  142. package/esm2022/src/app/core/services/network.utils.mjs +0 -35
  143. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +0 -38
  144. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +0 -23
  145. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +0 -23
  146. package/esm2022/src/app/core/services/pipes/pipes.module.mjs +0 -58
  147. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +0 -36
  148. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +0 -37
  149. package/esm2022/src/app/core/services/platform.service.mjs +0 -780
  150. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +0 -427
  151. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +0 -450
  152. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +0 -25
  153. package/esm2022/src/app/core/services/testing/referential.validator.mjs +0 -46
  154. package/esm2022/src/app/core/services/validator/account.validator.mjs +0 -46
  155. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +0 -49
  156. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +0 -57
  157. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +0 -27
  158. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +0 -55
  159. package/esm2022/src/app/core/settings/settings.module.mjs +0 -23
  160. package/esm2022/src/app/core/settings/settings.page.mjs +0 -406
  161. package/esm2022/src/app/core/table/async-table.class.mjs +0 -1882
  162. package/esm2022/src/app/core/table/column/actions-column.component.mjs +0 -137
  163. package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +0 -120
  164. package/esm2022/src/app/core/table/column/row-field.component.mjs +0 -116
  165. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +0 -415
  166. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +0 -407
  167. package/esm2022/src/app/core/table/memory-table.class.mjs +0 -57
  168. package/esm2022/src/app/core/table/table-select-columns.component.mjs +0 -46
  169. package/esm2022/src/app/core/table/table.class.mjs +0 -1918
  170. package/esm2022/src/app/core/table/table.model.mjs +0 -21
  171. package/esm2022/src/app/core/table/table.module.mjs +0 -51
  172. package/esm2022/src/app/core/table/table.pipes.mjs +0 -76
  173. package/esm2022/src/app/core/table/table.utils.mjs +0 -34
  174. package/esm2022/src/app/core/table/testing/nested-table.testing.mjs +0 -326
  175. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +0 -32
  176. package/esm2022/src/app/core/table/testing/table.testing.mjs +0 -342
  177. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +0 -47
  178. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +0 -25
  179. package/esm2022/src/app/core/table/testing/table2.testing.mjs +0 -322
  180. package/esm2022/src/app/shared/alerts.mjs +0 -243
  181. package/esm2022/src/app/shared/audio/audio.mjs +0 -255
  182. package/esm2022/src/app/shared/audio/audio.testing.mjs +0 -32
  183. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +0 -30
  184. package/esm2022/src/app/shared/base64.utils.mjs +0 -59
  185. package/esm2022/src/app/shared/capacitor/keyboard.mjs +0 -42
  186. package/esm2022/src/app/shared/capacitor/plugins.mjs +0 -10
  187. package/esm2022/src/app/shared/constants.mjs +0 -18
  188. package/esm2022/src/app/shared/dates.mjs +0 -212
  189. package/esm2022/src/app/shared/debug/debug-service.class.mjs +0 -3
  190. package/esm2022/src/app/shared/debug/debug.component.mjs +0 -44
  191. package/esm2022/src/app/shared/debug/debug.module.mjs +0 -23
  192. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +0 -91
  193. package/esm2022/src/app/shared/directives/autoresize.directive.mjs +0 -75
  194. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +0 -30
  195. package/esm2022/src/app/shared/directives/autotooltip.directive.mjs +0 -35
  196. package/esm2022/src/app/shared/directives/cell-selection/cell-identifier.directive.mjs +0 -55
  197. package/esm2022/src/app/shared/directives/cell-selection/cell-selection.directive.mjs +0 -206
  198. package/esm2022/src/app/shared/directives/cell-selection/cell-selection.service.mjs +0 -204
  199. package/esm2022/src/app/shared/directives/directives.module.mjs +0 -53
  200. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +0 -52
  201. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +0 -33
  202. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +0 -62
  203. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +0 -96
  204. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +0 -17
  205. package/esm2022/src/app/shared/directives/throttled-click.directive.mjs +0 -43
  206. package/esm2022/src/app/shared/events.mjs +0 -64
  207. package/esm2022/src/app/shared/file/csv.utils.mjs +0 -97
  208. package/esm2022/src/app/shared/file/file.service.mjs +0 -118
  209. package/esm2022/src/app/shared/file/file.utils.mjs +0 -117
  210. package/esm2022/src/app/shared/file/images.utils.mjs +0 -186
  211. package/esm2022/src/app/shared/file/json.utils.mjs +0 -58
  212. package/esm2022/src/app/shared/file/uri.utils.mjs +0 -29
  213. package/esm2022/src/app/shared/file/url.utils.mjs +0 -213
  214. package/esm2022/src/app/shared/focusable.mjs +0 -6
  215. package/esm2022/src/app/shared/form/field.component.mjs +0 -388
  216. package/esm2022/src/app/shared/form/field.model.mjs +0 -100
  217. package/esm2022/src/app/shared/form/loading-spinner.mjs +0 -35
  218. package/esm2022/src/app/shared/forms.mjs +0 -593
  219. package/esm2022/src/app/shared/functions.mjs +0 -825
  220. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +0 -94
  221. package/esm2022/src/app/shared/gesture/gesture-config.mjs +0 -46
  222. package/esm2022/src/app/shared/gesture/hammer.utils.mjs +0 -2
  223. package/esm2022/src/app/shared/graph/colors.utils.mjs +0 -85
  224. package/esm2022/src/app/shared/graph/graph-colors.mjs +0 -214
  225. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +0 -68
  226. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +0 -23
  227. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +0 -147
  228. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +0 -24
  229. package/esm2022/src/app/shared/html.utils.mjs +0 -35
  230. package/esm2022/src/app/shared/http/http.utils.mjs +0 -56
  231. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +0 -452
  232. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +0 -62
  233. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +0 -26
  234. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +0 -92
  235. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +0 -37
  236. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +0 -59
  237. package/esm2022/src/app/shared/image/image.model.mjs +0 -2
  238. package/esm2022/src/app/shared/image/image.module.mjs +0 -24
  239. package/esm2022/src/app/shared/image/image.service.mjs +0 -117
  240. package/esm2022/src/app/shared/inputs.mjs +0 -281
  241. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +0 -27
  242. package/esm2022/src/app/shared/logging/log-level.model.mjs +0 -48
  243. package/esm2022/src/app/shared/logging/logger.model.mjs +0 -47
  244. package/esm2022/src/app/shared/logging/logging-service.class.mjs +0 -125
  245. package/esm2022/src/app/shared/logging/logging-service.config.mjs +0 -2
  246. package/esm2022/src/app/shared/logging/logging-service.module.mjs +0 -30
  247. package/esm2022/src/app/shared/markdown/markdown.component.mjs +0 -321
  248. package/esm2022/src/app/shared/markdown/markdown.directive.mjs +0 -34
  249. package/esm2022/src/app/shared/markdown/markdown.modal.mjs +0 -99
  250. package/esm2022/src/app/shared/markdown/markdown.module.mjs +0 -87
  251. package/esm2022/src/app/shared/markdown/markdown.service.mjs +0 -204
  252. package/esm2022/src/app/shared/markdown/markdown.utils.mjs +0 -87
  253. package/esm2022/src/app/shared/markdown/testing/markdown.test.mjs +0 -55
  254. package/esm2022/src/app/shared/markdown/testing/markdown.testing.module.mjs +0 -30
  255. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +0 -46
  256. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +0 -1356
  257. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +0 -81
  258. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +0 -18
  259. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +0 -242
  260. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +0 -251
  261. package/esm2022/src/app/shared/material/badge/badge.module.mjs +0 -20
  262. package/esm2022/src/app/shared/material/badge/badge.test.mjs +0 -42
  263. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +0 -70
  264. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +0 -374
  265. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +0 -83
  266. package/esm2022/src/app/shared/material/chips/chips.module.mjs +0 -74
  267. package/esm2022/src/app/shared/material/chips/material.chips.mjs +0 -843
  268. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +0 -151
  269. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +0 -79
  270. package/esm2022/src/app/shared/material/datetime/material.date.mjs +0 -473
  271. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +0 -457
  272. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +0 -850
  273. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +0 -140
  274. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +0 -127
  275. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +0 -118
  276. package/esm2022/src/app/shared/material/duration/duration.module.mjs +0 -61
  277. package/esm2022/src/app/shared/material/duration/duration.utils.mjs +0 -16
  278. package/esm2022/src/app/shared/material/duration/material.duration.mjs +0 -283
  279. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +0 -85
  280. package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +0 -319
  281. package/esm2022/src/app/shared/material/latlong/material.latlong-input.mjs +0 -471
  282. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +0 -231
  283. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +0 -68
  284. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +0 -138
  285. package/esm2022/src/app/shared/material/material.animations.mjs +0 -200
  286. package/esm2022/src/app/shared/material/material.config.mjs +0 -3
  287. package/esm2022/src/app/shared/material/material.module.mjs +0 -224
  288. package/esm2022/src/app/shared/material/material.testing.module.mjs +0 -234
  289. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +0 -51
  290. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +0 -23
  291. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +0 -379
  292. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +0 -52
  293. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +0 -67
  294. package/esm2022/src/app/shared/material/test/test-component.mjs +0 -264
  295. package/esm2022/src/app/shared/material/testing/common.test.mjs +0 -111
  296. package/esm2022/src/app/shared/modules.mjs +0 -12
  297. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +0 -306
  298. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +0 -49
  299. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +0 -24
  300. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +0 -69
  301. package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +0 -74
  302. package/esm2022/src/app/shared/named-filter/testing/named-filter.testing.module.mjs +0 -28
  303. package/esm2022/src/app/shared/observables.mjs +0 -104
  304. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +0 -251
  305. package/esm2022/src/app/shared/pipes/badge.pipes.mjs +0 -25
  306. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +0 -29
  307. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +0 -50
  308. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +0 -72
  309. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +0 -28
  310. package/esm2022/src/app/shared/pipes/date-from.pipe.mjs +0 -29
  311. package/esm2022/src/app/shared/pipes/dates.pipe.mjs +0 -18
  312. package/esm2022/src/app/shared/pipes/display-with.pipe.mjs +0 -23
  313. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +0 -34
  314. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +0 -53
  315. package/esm2022/src/app/shared/pipes/form.pipes.mjs +0 -219
  316. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +0 -50
  317. package/esm2022/src/app/shared/pipes/html.pipes.mjs +0 -102
  318. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +0 -42
  319. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +0 -65
  320. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +0 -67
  321. package/esm2022/src/app/shared/pipes/math.pipes.mjs +0 -77
  322. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +0 -19
  323. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +0 -17
  324. package/esm2022/src/app/shared/pipes/observable.pipes.mjs +0 -63
  325. package/esm2022/src/app/shared/pipes/pipes.module.mjs +0 -304
  326. package/esm2022/src/app/shared/pipes/property.pipes.mjs +0 -148
  327. package/esm2022/src/app/shared/pipes/selection.pipes.mjs +0 -177
  328. package/esm2022/src/app/shared/pipes/string.pipes.mjs +0 -183
  329. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +0 -44
  330. package/esm2022/src/app/shared/pipes/types.pipes.mjs +0 -74
  331. package/esm2022/src/app/shared/pipes/url.pipes.mjs +0 -35
  332. package/esm2022/src/app/shared/platforms.mjs +0 -81
  333. package/esm2022/src/app/shared/print/print.service.mjs +0 -305
  334. package/esm2022/src/app/shared/regexps.mjs +0 -103
  335. package/esm2022/src/app/shared/rx-state/rx-state.decorators.mjs +0 -193
  336. package/esm2022/src/app/shared/rx-state/rx-state.module.mjs +0 -19
  337. package/esm2022/src/app/shared/rx-state/rx-state.types.mjs +0 -2
  338. package/esm2022/src/app/shared/services/entity-service.class.mjs +0 -44
  339. package/esm2022/src/app/shared/services/job.utils.mjs +0 -92
  340. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +0 -362
  341. package/esm2022/src/app/shared/services/progress-bar.service.mjs +0 -31
  342. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +0 -144
  343. package/esm2022/src/app/shared/services/startable-service.class.mjs +0 -118
  344. package/esm2022/src/app/shared/services/translate-context.service.mjs +0 -107
  345. package/esm2022/src/app/shared/services/validator-service.class.mjs +0 -2
  346. package/esm2022/src/app/shared/services.mjs +0 -85
  347. package/esm2022/src/app/shared/shared-routing.module.mjs +0 -72
  348. package/esm2022/src/app/shared/shared.module.mjs +0 -229
  349. package/esm2022/src/app/shared/shared.testing.module.mjs +0 -108
  350. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +0 -281
  351. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +0 -42
  352. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +0 -27
  353. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +0 -25
  354. package/esm2022/src/app/shared/storage/storage.service.mjs +0 -134
  355. package/esm2022/src/app/shared/storage/storage.utils.mjs +0 -13
  356. package/esm2022/src/app/shared/testing/maskito.test.mjs +0 -41
  357. package/esm2022/src/app/shared/testing/observable.test.mjs +0 -94
  358. package/esm2022/src/app/shared/testing/tests.page.mjs +0 -37
  359. package/esm2022/src/app/shared/toast/toast.testing.mjs +0 -54
  360. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +0 -31
  361. package/esm2022/src/app/shared/toast/toasts.mjs +0 -134
  362. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +0 -62
  363. package/esm2022/src/app/shared/toolbar/toolbar.mjs +0 -272
  364. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +0 -26
  365. package/esm2022/src/app/shared/types.mjs +0 -2
  366. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +0 -59
  367. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +0 -30
  368. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +0 -108
  369. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +0 -216
  370. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +0 -26
  371. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +0 -122
  372. package/esm2022/src/app/shared/validator/validators.mjs +0 -658
  373. package/esm2022/src/app/shared/version/versions.mjs +0 -81
  374. package/esm2022/src/app/social/config/social.config.mjs +0 -9
  375. package/esm2022/src/app/social/feed/feed.component.mjs +0 -317
  376. package/esm2022/src/app/social/feed/feed.directive.mjs +0 -151
  377. package/esm2022/src/app/social/feed/feed.model.mjs +0 -60
  378. package/esm2022/src/app/social/feed/feed.module.mjs +0 -24
  379. package/esm2022/src/app/social/feed/feed.page.mjs +0 -67
  380. package/esm2022/src/app/social/feed/feed.service.mjs +0 -222
  381. package/esm2022/src/app/social/feed/testing/feed.testing.mjs +0 -66
  382. package/esm2022/src/app/social/feed/testing/feed.testing.module.mjs +0 -23
  383. package/esm2022/src/app/social/job/job.module.mjs +0 -23
  384. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +0 -38
  385. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +0 -241
  386. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +0 -50
  387. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +0 -29
  388. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +0 -91
  389. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +0 -38
  390. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +0 -34
  391. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +0 -22
  392. package/esm2022/src/app/social/message/message.form.mjs +0 -149
  393. package/esm2022/src/app/social/message/message.modal.mjs +0 -116
  394. package/esm2022/src/app/social/message/message.model.mjs +0 -86
  395. package/esm2022/src/app/social/message/message.module.mjs +0 -25
  396. package/esm2022/src/app/social/message/message.service.mjs +0 -198
  397. package/esm2022/src/app/social/social.errors.mjs +0 -11
  398. package/esm2022/src/app/social/social.module.mjs +0 -22
  399. package/esm2022/src/app/social/social.testing.module.mjs +0 -72
  400. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +0 -191
  401. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +0 -280
  402. package/esm2022/src/app/social/user-event/notification/user-event-notification.modal.mjs +0 -84
  403. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +0 -273
  404. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +0 -129
  405. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +0 -22
  406. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +0 -128
  407. package/esm2022/src/app/social/user-event/user-event.model.mjs +0 -2
  408. package/esm2022/src/app/social/user-event/user-event.module.mjs +0 -24
  409. package/esm2022/src/app/social/user-event/user-event.service.mjs +0 -512
  410. package/esm2022/src/environments/environment.class.mjs +0 -69
  411. package/esm2022/src/environments/environment.loader.mjs +0 -77
  412. package/esm2022/src/environments/environment.mjs +0 -133
  413. package/esm2022/sumaris-net.ngx-components.mjs +0 -5
  414. package/index.d.ts +0 -5
  415. package/public_api.d.ts +0 -364
  416. package/src/app/admin/admin-routing.module.d.ts +0 -9
  417. package/src/app/admin/admin.module.d.ts +0 -10
  418. package/src/app/admin/users/person.filter.d.ts +0 -37
  419. package/src/app/admin/users/person.service.d.ts +0 -61
  420. package/src/app/admin/users/person.validator.d.ts +0 -23
  421. package/src/app/admin/users/users-select.modal.d.ts +0 -73
  422. package/src/app/admin/users/users.d.ts +0 -89
  423. package/src/app/admin/users/users.module.d.ts +0 -15
  424. package/src/app/admin/users/users.utils.d.ts +0 -6
  425. package/src/app/core/about/about.modal.d.ts +0 -44
  426. package/src/app/core/about/about.module.d.ts +0 -11
  427. package/src/app/core/account/account.module.d.ts +0 -18
  428. package/src/app/core/account/account.page.d.ts +0 -93
  429. package/src/app/core/account/new-token.form.d.ts +0 -30
  430. package/src/app/core/account/new-token.modal.d.ts +0 -29
  431. package/src/app/core/account/password/change-password.form.d.ts +0 -19
  432. package/src/app/core/account/password/change-password.module.d.ts +0 -11
  433. package/src/app/core/account/password/change-password.page.d.ts +0 -36
  434. package/src/app/core/account/token.table.d.ts +0 -28
  435. package/src/app/core/auth/auth.form.d.ts +0 -38
  436. package/src/app/core/auth/auth.modal.d.ts +0 -24
  437. package/src/app/core/auth/auth.module.d.ts +0 -13
  438. package/src/app/core/auth/reset-password.modal.d.ts +0 -29
  439. package/src/app/core/core.module.d.ts +0 -28
  440. package/src/app/core/core.testing.module.d.ts +0 -16
  441. package/src/app/core/form/array/form-array.d.ts +0 -147
  442. package/src/app/core/form/array/testing/form-array-test.module.d.ts +0 -12
  443. package/src/app/core/form/array/testing/form-array.test.d.ts +0 -27
  444. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +0 -38
  445. package/src/app/core/form/buttons/form-buttons-bar.module.d.ts +0 -9
  446. package/src/app/core/form/entity/editor.class.d.ts +0 -85
  447. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +0 -126
  448. package/src/app/core/form/entity/entity-editor.class.d.ts +0 -211
  449. package/src/app/core/form/entity/entity-metadata.component.d.ts +0 -13
  450. package/src/app/core/form/entity/entity.module.d.ts +0 -11
  451. package/src/app/core/form/entity/tab-editor.class.d.ts +0 -66
  452. package/src/app/core/form/form-container.class.d.ts +0 -131
  453. package/src/app/core/form/form.class.d.ts +0 -148
  454. package/src/app/core/form/form.module.d.ts +0 -15
  455. package/src/app/core/form/form.utils.d.ts +0 -301
  456. package/src/app/core/form/list/list.form.d.ts +0 -83
  457. package/src/app/core/form/list/list.module.d.ts +0 -9
  458. package/src/app/core/form/properties/properties-file.service.d.ts +0 -26
  459. package/src/app/core/form/properties/properties.form.d.ts +0 -109
  460. package/src/app/core/form/properties/properties.module.d.ts +0 -18
  461. package/src/app/core/form/properties/properties.table.d.ts +0 -73
  462. package/src/app/core/form/properties/properties.utils.d.ts +0 -59
  463. package/src/app/core/form/properties/property.validator.d.ts +0 -27
  464. package/src/app/core/form/properties/testing/properties-form.test.d.ts +0 -22
  465. package/src/app/core/form/properties/testing/properties-form.testing.module.d.ts +0 -12
  466. package/src/app/core/form/text/testing/text-form.testing.d.ts +0 -19
  467. package/src/app/core/form/text/testing/text-form.testing.module.d.ts +0 -14
  468. package/src/app/core/form/text/text-form.component.d.ts +0 -66
  469. package/src/app/core/form/text/text-form.module.d.ts +0 -9
  470. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +0 -16
  471. package/src/app/core/form/text-popover/testing/text-popover.testing.module.d.ts +0 -11
  472. package/src/app/core/form/text-popover/text-popover.component.d.ts +0 -81
  473. package/src/app/core/form/text-popover/text-popover.module.d.ts +0 -10
  474. package/src/app/core/form/username/username.form.d.ts +0 -19
  475. package/src/app/core/form/username/username.module.d.ts +0 -9
  476. package/src/app/core/graphql/graphql.module.d.ts +0 -7
  477. package/src/app/core/graphql/graphql.service.d.ts +0 -138
  478. package/src/app/core/graphql/graphql.utils.d.ts +0 -47
  479. package/src/app/core/home/home.d.ts +0 -135
  480. package/src/app/core/home/home.module.d.ts +0 -16
  481. package/src/app/core/icon/icon.component.d.ts +0 -13
  482. package/src/app/core/icon/icon.module.d.ts +0 -9
  483. package/src/app/core/install/install-upgrade-card.component.d.ts +0 -63
  484. package/src/app/core/install/install-upgrade-card.module.d.ts +0 -9
  485. package/src/app/core/menu/menu.component.d.ts +0 -69
  486. package/src/app/core/menu/menu.model.d.ts +0 -161
  487. package/src/app/core/menu/menu.module.d.ts +0 -12
  488. package/src/app/core/menu/menu.service.d.ts +0 -93
  489. package/src/app/core/menu/sub-menu-tab.directive.d.ts +0 -29
  490. package/src/app/core/menu/testing/menu-other.testing.d.ts +0 -15
  491. package/src/app/core/menu/testing/menu.testing.d.ts +0 -53
  492. package/src/app/core/menu/testing/menu.testing.module.d.ts +0 -12
  493. package/src/app/core/offline/update-offline-mode-card.component.d.ts +0 -11
  494. package/src/app/core/offline/update-offline-mode-card.module.d.ts +0 -9
  495. package/src/app/core/peer/select-peer.modal.d.ts +0 -108
  496. package/src/app/core/peer/select-peer.module.d.ts +0 -12
  497. package/src/app/core/register/register-confirm.page.d.ts +0 -24
  498. package/src/app/core/register/register.form.d.ts +0 -49
  499. package/src/app/core/register/register.modal.d.ts +0 -14
  500. package/src/app/core/register/register.module.d.ts +0 -12
  501. package/src/app/core/services/account.service.d.ts +0 -236
  502. package/src/app/core/services/auth-guard.service.d.ts +0 -17
  503. package/src/app/core/services/base-entity-service.class.d.ts +0 -134
  504. package/src/app/core/services/base-graphql-service.class.d.ts +0 -77
  505. package/src/app/core/services/base58.d.ts +0 -7
  506. package/src/app/core/services/config/core.config.d.ts +0 -52
  507. package/src/app/core/services/config.service.d.ts +0 -63
  508. package/src/app/core/services/crypto.service.d.ts +0 -44
  509. package/src/app/core/services/errors.d.ts +0 -65
  510. package/src/app/core/services/local-settings.service.d.ts +0 -130
  511. package/src/app/core/services/model/account.model.d.ts +0 -66
  512. package/src/app/core/services/model/config.model.d.ts +0 -37
  513. package/src/app/core/services/model/department.model.d.ts +0 -11
  514. package/src/app/core/services/model/entity.decorators.d.ts +0 -17
  515. package/src/app/core/services/model/entity.model.d.ts +0 -133
  516. package/src/app/core/services/model/filter.model.d.ts +0 -37
  517. package/src/app/core/services/model/history.model.d.ts +0 -20
  518. package/src/app/core/services/model/model.enum.d.ts +0 -7
  519. package/src/app/core/services/model/node-feature.model.d.ts +0 -14
  520. package/src/app/core/services/model/peer.model.d.ts +0 -35
  521. package/src/app/core/services/model/person.model.d.ts +0 -39
  522. package/src/app/core/services/model/referential.model.d.ts +0 -85
  523. package/src/app/core/services/model/settings.model.d.ts +0 -29
  524. package/src/app/core/services/model/token.model.d.ts +0 -22
  525. package/src/app/core/services/model/tree-item-entity.model.d.ts +0 -62
  526. package/src/app/core/services/network.service.d.ts +0 -184
  527. package/src/app/core/services/network.types.d.ts +0 -4
  528. package/src/app/core/services/network.utils.d.ts +0 -39
  529. package/src/app/core/services/pipes/account.pipes.d.ts +0 -15
  530. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +0 -9
  531. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +0 -11
  532. package/src/app/core/services/pipes/pipes.module.d.ts +0 -11
  533. package/src/app/core/services/pipes/referential-to-string.pipe.d.ts +0 -23
  534. package/src/app/core/services/pipes/usage-mode.pipes.d.ts +0 -15
  535. package/src/app/core/services/platform.service.d.ts +0 -126
  536. package/src/app/core/services/storage/entities-storage.service.d.ts +0 -108
  537. package/src/app/core/services/storage/entity-store.class.d.ts +0 -113
  538. package/src/app/core/services/testing/referential-filter.model.d.ts +0 -9
  539. package/src/app/core/services/testing/referential.validator.d.ts +0 -22
  540. package/src/app/core/services/validator/account.validator.d.ts +0 -24
  541. package/src/app/core/services/validator/base.validator.class.d.ts +0 -21
  542. package/src/app/core/services/validator/local-settings.validator.d.ts +0 -18
  543. package/src/app/core/services/validator/user-settings.validator.d.ts +0 -10
  544. package/src/app/core/services/validator/user-token.validator.d.ts +0 -13
  545. package/src/app/core/settings/settings.module.d.ts +0 -12
  546. package/src/app/core/settings/settings.page.d.ts +0 -89
  547. package/src/app/core/table/async-table.class.d.ts +0 -443
  548. package/src/app/core/table/column/actions-column.component.d.ts +0 -65
  549. package/src/app/core/table/column/nav-actions-column.component.d.ts +0 -47
  550. package/src/app/core/table/column/row-field.component.d.ts +0 -41
  551. package/src/app/core/table/entities-async-table-datasource.class.d.ts +0 -103
  552. package/src/app/core/table/entities-table-datasource.class.d.ts +0 -102
  553. package/src/app/core/table/memory-table.class.d.ts +0 -25
  554. package/src/app/core/table/table-select-columns.component.d.ts +0 -22
  555. package/src/app/core/table/table.class.d.ts +0 -427
  556. package/src/app/core/table/table.model.d.ts +0 -31
  557. package/src/app/core/table/table.module.d.ts +0 -14
  558. package/src/app/core/table/table.pipes.d.ts +0 -30
  559. package/src/app/core/table/table.utils.d.ts +0 -13
  560. package/src/app/core/table/testing/nested-table.testing.d.ts +0 -54
  561. package/src/app/core/table/testing/table-validator.service.d.ts +0 -17
  562. package/src/app/core/table/testing/table.testing.d.ts +0 -55
  563. package/src/app/core/table/testing/table.testing.module.d.ts +0 -17
  564. package/src/app/core/table/testing/table2-validator.service.d.ts +0 -15
  565. package/src/app/core/table/testing/table2.testing.d.ts +0 -53
  566. package/src/app/shared/alerts.d.ts +0 -55
  567. package/src/app/shared/audio/audio.d.ts +0 -45
  568. package/src/app/shared/audio/audio.testing.d.ts +0 -13
  569. package/src/app/shared/audio/audio.testing.module.d.ts +0 -11
  570. package/src/app/shared/base64.utils.d.ts +0 -7
  571. package/src/app/shared/capacitor/keyboard.d.ts +0 -16
  572. package/src/app/shared/capacitor/plugins.d.ts +0 -8
  573. package/src/app/shared/constants.d.ts +0 -15
  574. package/src/app/shared/dates.d.ts +0 -85
  575. package/src/app/shared/debug/debug-service.class.d.ts +0 -5
  576. package/src/app/shared/debug/debug.component.d.ts +0 -14
  577. package/src/app/shared/debug/debug.module.d.ts +0 -12
  578. package/src/app/shared/directives/autofocus.directive.d.ts +0 -18
  579. package/src/app/shared/directives/autoresize.directive.d.ts +0 -20
  580. package/src/app/shared/directives/autotitle.directive.d.ts +0 -11
  581. package/src/app/shared/directives/autotooltip.directive.d.ts +0 -14
  582. package/src/app/shared/directives/cell-selection/cell-identifier.directive.d.ts +0 -17
  583. package/src/app/shared/directives/cell-selection/cell-selection.directive.d.ts +0 -29
  584. package/src/app/shared/directives/cell-selection/cell-selection.service.d.ts +0 -67
  585. package/src/app/shared/directives/directives.module.d.ts +0 -15
  586. package/src/app/shared/directives/drag-and-drop.directive.d.ts +0 -17
  587. package/src/app/shared/directives/ng-var.directive.d.ts +0 -12
  588. package/src/app/shared/directives/resizable/resizable.component.d.ts +0 -21
  589. package/src/app/shared/directives/resizable/resizable.directive.d.ts +0 -24
  590. package/src/app/shared/directives/resizable/resizable.module.d.ts +0 -8
  591. package/src/app/shared/directives/throttled-click.directive.d.ts +0 -16
  592. package/src/app/shared/events.d.ts +0 -29
  593. package/src/app/shared/file/csv.utils.d.ts +0 -30
  594. package/src/app/shared/file/file.service.d.ts +0 -23
  595. package/src/app/shared/file/file.utils.d.ts +0 -20
  596. package/src/app/shared/file/images.utils.d.ts +0 -36
  597. package/src/app/shared/file/json.utils.d.ts +0 -19
  598. package/src/app/shared/file/uri.utils.d.ts +0 -8
  599. package/src/app/shared/file/url.utils.d.ts +0 -108
  600. package/src/app/shared/focusable.d.ts +0 -4
  601. package/src/app/shared/form/field.component.d.ts +0 -83
  602. package/src/app/shared/form/field.model.d.ts +0 -88
  603. package/src/app/shared/form/loading-spinner.d.ts +0 -8
  604. package/src/app/shared/forms.d.ts +0 -170
  605. package/src/app/shared/functions.d.ts +0 -296
  606. package/src/app/shared/geolocation/geolocation.utils.d.ts +0 -25
  607. package/src/app/shared/gesture/gesture-config.d.ts +0 -15
  608. package/src/app/shared/gesture/hammer.utils.d.ts +0 -16
  609. package/src/app/shared/graph/colors.utils.d.ts +0 -34
  610. package/src/app/shared/graph/graph-colors.d.ts +0 -63
  611. package/src/app/shared/guard/component-dirty.guard.d.ts +0 -14
  612. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +0 -8
  613. package/src/app/shared/hotkeys/hotkeys.service.d.ts +0 -48
  614. package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +0 -11
  615. package/src/app/shared/html.utils.d.ts +0 -17
  616. package/src/app/shared/http/http.utils.d.ts +0 -28
  617. package/src/app/shared/image/gallery/image-gallery.component.d.ts +0 -139
  618. package/src/app/shared/image/gallery/image-gallery.module.d.ts +0 -15
  619. package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +0 -12
  620. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +0 -33
  621. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +0 -16
  622. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +0 -13
  623. package/src/app/shared/image/image.model.d.ts +0 -7
  624. package/src/app/shared/image/image.module.d.ts +0 -8
  625. package/src/app/shared/image/image.service.d.ts +0 -37
  626. package/src/app/shared/inputs.d.ts +0 -37
  627. package/src/app/shared/interceptors/progess.interceptor.d.ts +0 -8
  628. package/src/app/shared/logging/log-level.model.d.ts +0 -38
  629. package/src/app/shared/logging/logger.model.d.ts +0 -68
  630. package/src/app/shared/logging/logging-service.class.d.ts +0 -39
  631. package/src/app/shared/logging/logging-service.config.d.ts +0 -25
  632. package/src/app/shared/logging/logging-service.module.d.ts +0 -9
  633. package/src/app/shared/markdown/markdown.component.d.ts +0 -86
  634. package/src/app/shared/markdown/markdown.directive.d.ts +0 -13
  635. package/src/app/shared/markdown/markdown.modal.d.ts +0 -49
  636. package/src/app/shared/markdown/markdown.module.d.ts +0 -17
  637. package/src/app/shared/markdown/markdown.service.d.ts +0 -37
  638. package/src/app/shared/markdown/markdown.utils.d.ts +0 -26
  639. package/src/app/shared/markdown/testing/markdown.test.d.ts +0 -18
  640. package/src/app/shared/markdown/testing/markdown.testing.module.d.ts +0 -12
  641. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +0 -74
  642. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +0 -224
  643. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +0 -23
  644. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +0 -5
  645. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +0 -48
  646. package/src/app/shared/material/badge/badge.directive.d.ts +0 -43
  647. package/src/app/shared/material/badge/badge.module.d.ts +0 -10
  648. package/src/app/shared/material/badge/badge.test.d.ts +0 -21
  649. package/src/app/shared/material/boolean/boolean.module.d.ts +0 -21
  650. package/src/app/shared/material/boolean/material.boolean.d.ts +0 -94
  651. package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +0 -31
  652. package/src/app/shared/material/chips/chips.module.d.ts +0 -22
  653. package/src/app/shared/material/chips/material.chips.d.ts +0 -167
  654. package/src/app/shared/material/chips/testing/chips.test.d.ts +0 -32
  655. package/src/app/shared/material/datetime/datetime.module.d.ts +0 -25
  656. package/src/app/shared/material/datetime/material.date.d.ts +0 -90
  657. package/src/app/shared/material/datetime/material.dateshort.d.ts +0 -89
  658. package/src/app/shared/material/datetime/material.datetime.d.ts +0 -136
  659. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +0 -38
  660. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +0 -32
  661. package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +0 -31
  662. package/src/app/shared/material/duration/duration.module.d.ts +0 -18
  663. package/src/app/shared/material/duration/duration.utils.d.ts +0 -2
  664. package/src/app/shared/material/duration/material.duration.d.ts +0 -64
  665. package/src/app/shared/material/duration/testing/mat-duration.test.d.ts +0 -23
  666. package/src/app/shared/material/latlong/latlong.utils.d.ts +0 -59
  667. package/src/app/shared/material/latlong/material.latlong-input.d.ts +0 -93
  668. package/src/app/shared/material/latlong/material.latlong.d.ts +0 -90
  669. package/src/app/shared/material/latlong/material.latlong.module.d.ts +0 -21
  670. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +0 -30
  671. package/src/app/shared/material/material.animations.d.ts +0 -8
  672. package/src/app/shared/material/material.config.d.ts +0 -3
  673. package/src/app/shared/material/material.module.d.ts +0 -44
  674. package/src/app/shared/material/material.testing.module.d.ts +0 -31
  675. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +0 -12
  676. package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +0 -10
  677. package/src/app/shared/material/swipe/material.swipe.d.ts +0 -89
  678. package/src/app/shared/material/swipe/swipe.module.d.ts +0 -16
  679. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +0 -22
  680. package/src/app/shared/material/test/test-component.d.ts +0 -75
  681. package/src/app/shared/material/testing/common.test.d.ts +0 -25
  682. package/src/app/shared/modules.d.ts +0 -9
  683. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +0 -63
  684. package/src/app/shared/named-filter/named-filter.model.d.ts +0 -32
  685. package/src/app/shared/named-filter/named-filter.module.d.ts +0 -13
  686. package/src/app/shared/named-filter/named-filter.service.d.ts +0 -32
  687. package/src/app/shared/named-filter/testing/named-filter-selector.testing.d.ts +0 -34
  688. package/src/app/shared/named-filter/testing/named-filter.testing.module.d.ts +0 -10
  689. package/src/app/shared/observables.d.ts +0 -32
  690. package/src/app/shared/pipes/arrays.pipe.d.ts +0 -93
  691. package/src/app/shared/pipes/badge.pipes.d.ts +0 -7
  692. package/src/app/shared/pipes/colors.pipe.d.ts +0 -9
  693. package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +0 -25
  694. package/src/app/shared/pipes/date-format.pipe.d.ts +0 -35
  695. package/src/app/shared/pipes/date-from-now.pipe.d.ts +0 -14
  696. package/src/app/shared/pipes/date-from.pipe.d.ts +0 -14
  697. package/src/app/shared/pipes/dates.pipe.d.ts +0 -10
  698. package/src/app/shared/pipes/display-with.pipe.d.ts +0 -8
  699. package/src/app/shared/pipes/duration.pipe.d.ts +0 -23
  700. package/src/app/shared/pipes/file-size.pipe.d.ts +0 -30
  701. package/src/app/shared/pipes/form.pipes.d.ts +0 -69
  702. package/src/app/shared/pipes/highlight.pipe.d.ts +0 -11
  703. package/src/app/shared/pipes/html.pipes.d.ts +0 -50
  704. package/src/app/shared/pipes/latlong-format.pipe.d.ts +0 -20
  705. package/src/app/shared/pipes/maps.pipe.d.ts +0 -23
  706. package/src/app/shared/pipes/maskito.pipe.d.ts +0 -14
  707. package/src/app/shared/pipes/math.pipes.d.ts +0 -26
  708. package/src/app/shared/pipes/ng-init.pipe.d.ts +0 -8
  709. package/src/app/shared/pipes/number-format.pipe.d.ts +0 -9
  710. package/src/app/shared/pipes/observable.pipes.d.ts +0 -25
  711. package/src/app/shared/pipes/pipes.module.d.ts +0 -36
  712. package/src/app/shared/pipes/property.pipes.d.ts +0 -46
  713. package/src/app/shared/pipes/selection.pipes.d.ts +0 -62
  714. package/src/app/shared/pipes/string.pipes.d.ts +0 -67
  715. package/src/app/shared/pipes/translate-context.pipe.d.ts +0 -17
  716. package/src/app/shared/pipes/types.pipes.d.ts +0 -30
  717. package/src/app/shared/pipes/url.pipes.d.ts +0 -27
  718. package/src/app/shared/platforms.d.ts +0 -16
  719. package/src/app/shared/print/print.service.d.ts +0 -94
  720. package/src/app/shared/regexps.d.ts +0 -32
  721. package/src/app/shared/rx-state/rx-state.decorators.d.ts +0 -33
  722. package/src/app/shared/rx-state/rx-state.module.d.ts +0 -10
  723. package/src/app/shared/rx-state/rx-state.types.d.ts +0 -5
  724. package/src/app/shared/services/entity-service.class.d.ts +0 -117
  725. package/src/app/shared/services/job.utils.d.ts +0 -20
  726. package/src/app/shared/services/memory-entity-service.class.d.ts +0 -87
  727. package/src/app/shared/services/progress-bar.service.d.ts +0 -20
  728. package/src/app/shared/services/startable-observable-service.class.d.ts +0 -51
  729. package/src/app/shared/services/startable-service.class.d.ts +0 -38
  730. package/src/app/shared/services/translate-context.service.d.ts +0 -29
  731. package/src/app/shared/services/validator-service.class.d.ts +0 -11
  732. package/src/app/shared/services.d.ts +0 -17
  733. package/src/app/shared/shared-routing.module.d.ts +0 -23
  734. package/src/app/shared/shared.module.d.ts +0 -33
  735. package/src/app/shared/shared.testing.module.d.ts +0 -20
  736. package/src/app/shared/storage/storage-explorer.component.d.ts +0 -60
  737. package/src/app/shared/storage/storage-explorer.module.d.ts +0 -13
  738. package/src/app/shared/storage/storage-explorer.testing-routing.module.d.ts +0 -9
  739. package/src/app/shared/storage/storage-explorer.testing.module.d.ts +0 -10
  740. package/src/app/shared/storage/storage.service.d.ts +0 -22
  741. package/src/app/shared/storage/storage.utils.d.ts +0 -19
  742. package/src/app/shared/testing/maskito.test.d.ts +0 -10
  743. package/src/app/shared/testing/observable.test.d.ts +0 -25
  744. package/src/app/shared/testing/tests.page.d.ts +0 -20
  745. package/src/app/shared/toast/toast.testing.d.ts +0 -15
  746. package/src/app/shared/toast/toast.testing.module.d.ts +0 -12
  747. package/src/app/shared/toast/toasts.d.ts +0 -16
  748. package/src/app/shared/toolbar/modal-toolbar.d.ts +0 -21
  749. package/src/app/shared/toolbar/toolbar.d.ts +0 -70
  750. package/src/app/shared/toolbar/toolbar.module.d.ts +0 -16
  751. package/src/app/shared/types.d.ts +0 -45
  752. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +0 -21
  753. package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +0 -11
  754. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +0 -41
  755. package/src/app/shared/upload-file/upload-file.component.d.ts +0 -50
  756. package/src/app/shared/upload-file/upload-file.model.d.ts +0 -30
  757. package/src/app/shared/validator/form-error-adapter.class.d.ts +0 -33
  758. package/src/app/shared/validator/validators.d.ts +0 -145
  759. package/src/app/shared/version/versions.d.ts +0 -26
  760. package/src/app/social/config/social.config.d.ts +0 -4
  761. package/src/app/social/feed/feed.component.d.ts +0 -91
  762. package/src/app/social/feed/feed.directive.d.ts +0 -32
  763. package/src/app/social/feed/feed.model.d.ts +0 -69
  764. package/src/app/social/feed/feed.module.d.ts +0 -13
  765. package/src/app/social/feed/feed.page.d.ts +0 -24
  766. package/src/app/social/feed/feed.service.d.ts +0 -85
  767. package/src/app/social/feed/testing/feed.testing.d.ts +0 -23
  768. package/src/app/social/feed/testing/feed.testing.module.d.ts +0 -12
  769. package/src/app/social/job/job.module.d.ts +0 -12
  770. package/src/app/social/job/progression/job-progression.component.d.ts +0 -24
  771. package/src/app/social/job/progression/job-progression.icon.d.ts +0 -63
  772. package/src/app/social/job/progression/job-progression.list.d.ts +0 -20
  773. package/src/app/social/job/progression/job-progression.model.d.ts +0 -10
  774. package/src/app/social/job/progression/job-progression.service.d.ts +0 -33
  775. package/src/app/social/job/testing/job-progression.testing.d.ts +0 -13
  776. package/src/app/social/job/testing/job-progression.testing.service.d.ts +0 -9
  777. package/src/app/social/job/testing/job.testing.module.d.ts +0 -11
  778. package/src/app/social/message/message.form.d.ts +0 -36
  779. package/src/app/social/message/message.modal.d.ts +0 -47
  780. package/src/app/social/message/message.model.d.ts +0 -36
  781. package/src/app/social/message/message.module.d.ts +0 -14
  782. package/src/app/social/message/message.service.d.ts +0 -44
  783. package/src/app/social/social.errors.d.ts +0 -10
  784. package/src/app/social/social.module.d.ts +0 -20
  785. package/src/app/social/social.testing.module.d.ts +0 -14
  786. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +0 -47
  787. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +0 -77
  788. package/src/app/social/user-event/notification/user-event-notification.modal.d.ts +0 -37
  789. package/src/app/social/user-event/testing/user-event.testing.d.ts +0 -44
  790. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +0 -42
  791. package/src/app/social/user-event/testing/user-event.testing.module.d.ts +0 -11
  792. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +0 -41
  793. package/src/app/social/user-event/user-event.model.d.ts +0 -44
  794. package/src/app/social/user-event/user-event.module.d.ts +0 -14
  795. package/src/app/social/user-event/user-event.service.d.ts +0 -124
  796. package/src/environments/environment.class.d.ts +0 -86
  797. package/src/environments/environment.d.ts +0 -2
  798. package/src/environments/environment.loader.d.ts +0 -24
  799. package/src/theme/_globals.scss +0 -5
@@ -1,273 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, inject, Inject, Input, Optional, ViewChild } from '@angular/core';
2
- import { fadeInSlowAnimation } from '../../shared/material/material.animations';
3
- import { Subscription } from 'rxjs';
4
- import { distinctUntilChanged } from 'rxjs/operators';
5
- import { ENVIRONMENT } from '../../../environments/environment.class';
6
- import { DEFAULT_MENU_SHOW_WHEN } from './menu.service';
7
- import { firstNotNilPromise } from '../../shared/observables';
8
- import { PersonUtils } from '../services/model/person.model';
9
- import { APP_BASE_HREF } from '@angular/common';
10
- import { APP_SHOW_TOOLTIP } from '../../shared/constants';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "../services/account.service";
13
- import * as i2 from "@ionic/angular";
14
- import * as i3 from "@ngx-translate/core";
15
- import * as i4 from "./menu.service";
16
- import * as i5 from "@angular/router";
17
- import * as i6 from "@angular/common";
18
- import * as i7 from "@rx-angular/template/for";
19
- import * as i8 from "@rx-angular/template/if";
20
- import * as i9 from "@rx-angular/template/let";
21
- import * as i10 from "@angular/material/toolbar";
22
- import * as i11 from "@angular/material/icon";
23
- import * as i12 from "@angular/material/button";
24
- import * as i13 from "@angular/material/tooltip";
25
- import * as i14 from "@rx-angular/template/push";
26
- import * as i15 from "../../../environments/environment.class";
27
- export class MenuComponent {
28
- accountService;
29
- navController;
30
- menu;
31
- modalCtrl;
32
- translate;
33
- cd;
34
- menuService;
35
- router;
36
- environment;
37
- appBaseHref;
38
- route;
39
- id = 'menu';
40
- menuId = 'left';
41
- side = 'left';
42
- contentId = 'menu-content';
43
- logo;
44
- appName;
45
- rxStrategy = 'normal';
46
- appVersion;
47
- splitPane;
48
- loading = true;
49
- isLogin = false;
50
- accountName;
51
- accountAvatar;
52
- accountEmail;
53
- defaultAvatarImage;
54
- _debug;
55
- _subscription = new Subscription();
56
- showTooltip = inject(APP_SHOW_TOOLTIP, { optional: true });
57
- constructor(accountService, navController, menu, modalCtrl, translate, cd, menuService, router, environment, appBaseHref, route // Modal editor give 'null'
58
- ) {
59
- this.accountService = accountService;
60
- this.navController = navController;
61
- this.menu = menu;
62
- this.modalCtrl = modalCtrl;
63
- this.translate = translate;
64
- this.cd = cd;
65
- this.menuService = menuService;
66
- this.router = router;
67
- this.environment = environment;
68
- this.appBaseHref = appBaseHref;
69
- this.route = route;
70
- console.debug('[menu-component] Create');
71
- this.appVersion = environment.version;
72
- this.defaultAvatarImage = (appBaseHref || '/') + PersonUtils.DEFAULT_AVATAR_IMAGE;
73
- this._debug = !environment.production;
74
- }
75
- async ngOnInit() {
76
- this.splitPane.when = await firstNotNilPromise(this.menuService.splitPaneWhen);
77
- this._subscription.add(this.menuService.accountChanges.subscribe((account) => {
78
- if (account)
79
- this.onLogin(account);
80
- else
81
- this.onLogout(true);
82
- }));
83
- // Listen to menu service event
84
- this._subscription.add(this.menuService.splitPaneWhen.subscribe((value) => this.setSplitPaneWhen(value)));
85
- this._subscription.add(this.menuService.enabled.subscribe((value) => this.enable(value)));
86
- this._subscription.add(this.menuService.opened
87
- // Avoid duplicated events
88
- .pipe(distinctUntilChanged())
89
- .subscribe((value) => (value ? this.open({ emitEvent: false }) : this.close({ emitEvent: false }))));
90
- // TODO : Find a more reliable way to do this :
91
- // Must be donne after menuService subscription :
92
- // - In MenuService.ngOnStart accountChanges change will be emitted before the service is ready
93
- // - This is required because subjectData be filled after get account change
94
- // and MenuService await for subjectData be filled to be ready
95
- await this.menuService.ready();
96
- }
97
- async onLogin(account) {
98
- console.info('[menu] Update (on login)');
99
- this.accountAvatar = account.avatar;
100
- this.accountName = account.displayName;
101
- this.accountEmail = account.email;
102
- this.isLogin = true;
103
- this.markAsLoaded({ emitEvent: false });
104
- this.markForCheck();
105
- }
106
- async onLogout(skipRedirect) {
107
- if (!this.isLogin) {
108
- this.markAsLoaded();
109
- return; // Skip if already logout
110
- }
111
- if (!skipRedirect) {
112
- console.debug('[menu] Logout');
113
- }
114
- else {
115
- console.debug('[menu] Update (on logout)');
116
- }
117
- this.accountAvatar = null;
118
- this.accountEmail = null;
119
- this.accountName = null;
120
- // Wait the end of fadeout, to reset the account
121
- if (!skipRedirect) {
122
- await this.navController.navigateRoot('/');
123
- }
124
- this.isLogin = false;
125
- this.markAsLoaded({ emitEvent: false });
126
- this.markForCheck();
127
- }
128
- trackByFn(index, item) {
129
- return item.id.toString();
130
- }
131
- async enable(value) {
132
- const enabled = await this.menu.isEnabled(this.menuId);
133
- if (enabled !== value) {
134
- await this.menu.enable(value, this.menuId);
135
- if (!value)
136
- await this.close();
137
- }
138
- }
139
- async open(opts) {
140
- console.debug('[menu] Checking open event...');
141
- const opened = await this.menu.isOpen(this.menuId);
142
- if (!opened) {
143
- console.debug('[menu] Opening menu');
144
- await this.menu.open(this.menuId);
145
- // Propagate to service
146
- if (!opts || opts.emitEvent !== false) {
147
- this.menuService._markAsOpened();
148
- }
149
- }
150
- return true;
151
- }
152
- async close(opts) {
153
- console.debug('[menu] Checking close event...');
154
- const opened = await this.menu.isOpen(this.menuId);
155
- if (opened) {
156
- console.debug('[menu] Closing menu');
157
- await this.menu.close(this.menuId);
158
- // Propagate to service
159
- if (!opts || opts.emitEvent !== false) {
160
- this.menuService._markAsClosed();
161
- }
162
- }
163
- return true;
164
- }
165
- async setSplitPaneWhen(value) {
166
- console.debug('[menu] Checking splitPane when...');
167
- if (this.splitPane.when !== value) {
168
- console.debug('[menu] Set splitPane when to ' + value);
169
- this.splitPane.when = value;
170
- this.detectChanges();
171
- // Propagate to the menu service
172
- setTimeout(() => this.menuService.setSplitPaneShowWhen(value), 200);
173
- }
174
- }
175
- toggleSplitPaneShow(event) {
176
- if (event && event.defaultPrevented)
177
- return;
178
- if (event)
179
- event.preventDefault();
180
- if (this.splitPane.when === false) {
181
- return this.setSplitPaneWhen(DEFAULT_MENU_SHOW_WHEN);
182
- }
183
- else {
184
- return this.setSplitPaneWhen(false);
185
- }
186
- }
187
- executeAction(event, item) {
188
- this.close();
189
- // Delegate execution to service
190
- return this.menuService.executeAction(event, item);
191
- }
192
- onSwipeRight(event) {
193
- // Skip, if not a valid swipe event
194
- if (!event || event.pointerType !== 'touch' || event.velocity < 0.4) {
195
- //event.preventDefault();
196
- return false;
197
- }
198
- // Will open the left menu, so cancelled this swipe event
199
- const startX = event.center.x - event.distance;
200
- if (startX <= 50) {
201
- // DEBUG
202
- //console.debug("[menu] Cancel swipe right, because near the left menu {x: " + startX + ", velocity: " + event.velocity + "}");
203
- event.preventDefault();
204
- return false;
205
- }
206
- // OK: continue
207
- // DEBUG
208
- //console.debug("[menu] Received swipe right {x: " + startX + ", velocity: " + event.velocity + "}");
209
- }
210
- markAsLoaded(opts) {
211
- if (this.loading) {
212
- setTimeout(() => {
213
- this.loading = false;
214
- if (!opts || opts.emitEvent !== false)
215
- this.markForCheck();
216
- }, 450);
217
- }
218
- }
219
- markAsLoading(opts) {
220
- if (!this.loading) {
221
- this.loading = true;
222
- if (!opts || opts.emitEvent !== false)
223
- this.markForCheck();
224
- }
225
- }
226
- detectChanges() {
227
- this.cd.detectChanges();
228
- }
229
- markForCheck() {
230
- this.cd.detectChanges();
231
- }
232
- togglePinned(event, item) {
233
- event.preventDefault();
234
- event.stopPropagation();
235
- this.menuService.togglePinned(item);
236
- }
237
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MenuComponent, deps: [{ token: i1.AccountService }, { token: i2.NavController }, { token: i2.MenuController }, { token: i2.ModalController }, { token: i3.TranslateService }, { token: i0.ChangeDetectorRef }, { token: i4.MenuService }, { token: i5.Router }, { token: ENVIRONMENT }, { token: APP_BASE_HREF, optional: true }, { token: i5.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Component });
238
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: MenuComponent, selector: "app-menu", inputs: { id: "id", menuId: "menuId", side: "side", contentId: "contentId", logo: "logo", appName: "appName", rxStrategy: "rxStrategy", appVersion: "appVersion" }, viewQueries: [{ propertyName: "splitPane", first: true, predicate: ["splitPane"], descendants: true, static: true }], ngImport: i0, template: "<ion-split-pane #splitPane [contentId]=\"contentId\" (swiperight)=\"onSwipeRight($event)\">\n <ion-menu [id]=\"id\" [menuId]=\"menuId\" [contentId]=\"contentId\">\n <ion-header>\n <ion-toolbar *ngIf=\"!loading && isLogin; else notLogin\" @fadeInSlowAnimation class=\"user-toolbar\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <button\n type=\"button\"\n mat-flat-button\n class=\"user-avatar\"\n [class.primary]=\"!accountAvatar\"\n [style.background-image]=\"'url(' + (accountAvatar || defaultAvatarImage) + ')'\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"!showTooltip ? ('MENU.BTN_MY_ACCOUNT' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('MENU.BTN_MY_ACCOUNT' | translate) : ''\"\n ></button>\n </ion-col>\n <ion-col size=\"8\" class=\"user-logo\">\n <img\n *ngIf=\"logo; else noLogo\"\n [attr.src]=\"logo\"\n [title]=\"!showTooltip ? ('APP_NAME' | translate: { appName: appName }) : ''\"\n [matTooltip]=\"showTooltip ? ('APP_NAME' | translate: { appName: appName }) : ''\"\n alt=\"Logo\"\n width=\"108px\"\n />\n <ng-template #noLogo>\n <span style=\"width: 108px\">{{ appName }}</span>\n </ng-template>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col>\n <button\n mat-button\n type=\"button\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n (click)=\"close()\"\n [title]=\"!showTooltip ? ('MENU.BTN_MY_ACCOUNT' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('MENU.BTN_MY_ACCOUNT' | translate) : ''\"\n >\n <ion-label class=\"ion-text-wrap ion-text-start\">\n <h3 class=\"no-margin username\">\n <b>{{ accountName }}</b>\n </h3>\n <h4>{{ accountEmail }}</h4>\n </ion-label>\n </button>\n </ion-col>\n\n <!-- Insertion headerBottomRight -->\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"headerBottomRight\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-toolbar>\n\n <!-- User not logged -->\n <ng-template #notLogin>\n <mat-toolbar\n class=\"ion-padding\"\n *ngIf=\"!loading\"\n style=\"height: unset; display: block; margin: auto; text-align: center\"\n >\n <img\n *ngIf=\"logo\"\n [attr.src]=\"logo\"\n [title]=\"!showTooltip ? ('APP_NAME' | translate: { appName: appName }) : ''\"\n [matTooltip]=\"showTooltip ? ('APP_NAME' | translate: { appName: appName }) : ''\"\n width=\"150px;\"\n alt=\"logo\"\n />\n <span *ngIf=\"!logo\" style=\"width: 150px\">{{ appName }}</span>\n </mat-toolbar>\n </ng-template>\n </ion-header>\n\n <ion-content [class.has-user-header]=\"isLogin\">\n <!-- will close the menu, after a click, in mobile -->\n <ion-menu-toggle auto-hide=\"false\">\n <ion-list lines=\"none\" *ngIf=\"!loading\">\n <ng-container *rxFor=\"let item of menuService.dataSubject; strategy: rxStrategy; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: { $implicit: item, level: 0 }\"></ng-container>\n </ng-container>\n </ion-list>\n </ion-menu-toggle>\n </ion-content>\n\n <ion-footer class=\"hidden-xxs hidden-xs hidden-sm hidden-md\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button mat-icon-button color=\"accent\" (click)=\"menuService.openAboutModal()\">\n <mat-icon slot=\"icon-only\">help_outline</mat-icon>\n </ion-button>\n </ion-buttons>\n\n <ion-title (click)=\"menuService.openAboutModal()\" color=\"medium\">\n {{ 'MENU.FOOTER_VERSION_ABOUT' | translate: { version: appVersion } }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <button\n mat-icon-button\n color=\"accent\"\n (click)=\"toggleSplitPaneShow($event)\"\n class=\"hidden-xs hidden-sm hidden-md\"\n [title]=\"!showTooltip ? ((splitPane.when ? 'COMMON.BTN_HIDE_MENU' : 'COMMON.BTN_SHOW_MENU') | translate) : ''\"\n [matTooltip]=\"showTooltip ? ((splitPane.when ? 'COMMON.BTN_HIDE_MENU' : 'COMMON.BTN_SHOW_MENU') | translate) : ''\"\n >\n <mat-icon>\n <span>{{ splitPane.when ? '&#xab;' : '&#xbb;' }}</span>\n </mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n </ion-menu>\n\n <ng-content></ng-content>\n</ion-split-pane>\n\n<ng-template #headerBottomRight>\n <ng-content select=\"[headerBottomRight]\"></ng-content>\n</ng-template>\n\n<ng-template #menuItem let-item let-level=\"level\">\n @if (item.divider) {\n <!-- divider -->\n <ion-item-divider class=\"{{ item.cssClass }} {{ item.color }}\" @fadeInSlowAnimation>\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{ item.matIcon }}</mat-icon>\n <ion-label *ngIf=\"item.cssClass !== 'flex-spacer'\">\n <span *rxIf=\"item.$title; let title; else: skeletonText\" [innerHTML]=\"title | translate\"></span>\n </ion-label>\n </ion-item-divider>\n } @else if (item.path && !item.action) {\n <!-- tappable link -->\n <ion-item\n @fadeInSlowAnimation\n class=\"{{ item.cssClass }} {{ item.color }}\"\n [class.menu-item-sub]=\"level !== 0\"\n tappable\n [routerLink]=\"item.path\"\n [queryParams]=\"item.pathParams\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n [routerLinkActiveOptions]=\"{\n paths: item.path === '/' || level !== 0 ? 'exact' : 'subset',\n queryParams: item.pathParams?.tab || level === 0 ? 'subset' : 'exact',\n matrixParams: 'exact',\n fragment: 'ignored',\n }\"\n >\n @if (item.icon) {\n <ion-icon slot=\"start\" [name]=\"item.icon\"></ion-icon>\n } @else if (item.matIcon) {\n <mat-icon slot=\"start\">{{ item.matIcon }}</mat-icon>\n }\n <ion-label *rxLet=\"item.$title; let title\">\n <span *ngIf=\"title; else skeletonText\" [innerHTML]=\"title | translate\"></span>\n <!--<span *ngIf=\"_debug\"> {{item.id}}</span>-->\n </ion-label>\n\n <ion-badge *rxIf=\"item.$badge; let badge\" [color]=\"item.$badgeColor | push\">\n {{badge}}\n </ion-badge>\n\n <!-- pin button -->\n <ng-container *ngTemplateOutlet=\"pinButton; context: { $implicit: item, level: level }\"></ng-container>\n </ion-item>\n } @else if (item.action) {\n <!-- action -->\n <ion-item\n @fadeInSlowAnimation\n class=\"{{ item.cssClass }} {{ item.color }} text-1x\"\n [class.menu-item-sub]=\"level !== 0\"\n tappable\n (click)=\"executeAction($event, item)\"\n >\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{ item.matIcon }}</mat-icon>\n <ion-label>\n <span *rxIf=\"item.$title; let title; else: skeletonText\" [innerHTML]=\"title | translate\"></span>\n <!--<span *ngIf=\"_debug\"> {{item.id}}</span>-->\n </ion-label>\n\n <ion-badge *rxIf=\"item.$badge; let badge\" [color]=\"item.$badgeColor | push\">\n {{badge}}\n </ion-badge>\n\n <!-- pin button -->\n <ng-container *ngTemplateOutlet=\"pinButton; context: { $implicit: item, level: level }\"></ng-container>\n </ion-item>\n }\n\n <!-- children -->\n @if (item.$children) {\n <div class=\"sub-menu-container\">\n <ng-container *rxFor=\"let child of item.$children; strategy: rxStrategy; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: { $implicit: child, level: level + 1 }\"></ng-container>\n </ng-container>\n </div>\n }\n</ng-template>\n\n<ng-template #pinButton let-item let-level=\"level\">\n <!-- pin button -->\n @if (level && item.pinnable) {\n <ion-button\n slot=\"end\"\n shape=\"round\"\n fill=\"clear\"\n size=\"small\"\n [class.visible-hover]=\"!item.pinned\"\n (click)=\"togglePinned($event, item)\"\n >\n <!--<mat-icon slot=\"icon-only\" [color]=\"item.pinned ? 'primary' : undefined\">push_pin</mat-icon>-->\n <ion-icon slot=\"icon-only\" [name]=\"item.pinned ? 'pin' : 'pin-outline'\"></ion-icon>\n </ion-button>\n }\n</ng-template>\n\n<ng-template #skeletonText let-width let-animated>\n <ion-skeleton-text [animated]=\"animated\" [style.width.%]=\"width || 60\"></ion-skeleton-text>\n</ng-template>\n", styles: [":host{--menu-item-margin: 0;--ion-item-background: transparent;--ion-item-divider-background: transparent;--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint);--ion-item-background-selected: var(--ion-color-secondary100);--ion-item-text-color-selected: var(--ion-color-primary);--ion-item-icon-color-selected: var(--ion-color-primary);--ion-item-text-color-disable: var(--ion-color-medium);--ion-item-icon-color-disable: var(--ion-color-medium);--menu-item-background-selected-sub: var(--ion-color-secondary50);--menu-item-border-width-sub: 0 0 1px 0;--menu-item-margin-start-sub: 16px}@keyframes fadeinout{0%{opacity:0;display:none}75%{opacity:0;display:none}to{opacity:1;display:flex}}ion-menu ion-header ion-text{color:var(--ion-color-primary)}ion-menu ion-header ion-toolbar.user-toolbar{--ion-toolbar-height: 128px}ion-menu ion-header .user-avatar{-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;background-repeat:no-repeat;background-position:center;background-color:var(--ion-color-secondary);border:solid 1px rgba(var(--ion-color-secondary-rgb),.5);overflow:hidden!important;font-size:var(--avatar-size, 60px)!important;line-height:var(--avatar-size, 60px);height:var(--avatar-size, 60px)!important;width:var(--avatar-size, 60px)!important;border-radius:50%;display:inline-block}ion-menu ion-header .user-avatar:hover{background-color:var(--ion-color-secondary-shade);border:solid 2px var(--ion-color-secondary-shade)}ion-menu ion-header .user-logo{text-align:right}ion-menu ion-header .user-logo img{max-width:120px;max-height:var(--avatar-size, 60px);width:auto}ion-menu ion-header .username{padding-top:0;margin-top:0;margin-bottom:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}ion-menu ion-header button[mat-button]{padding:0;width:100%;justify-content:flex-start;text-align:start!important;color:var(--ion-item-text-color)}ion-menu ion-header button[mat-button].selected{background-color:var(--ion-item-background-selected);color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list{min-height:100%;display:flex;flex-direction:column;justify-content:flex-start}ion-menu ion-content ion-list ion-menu-toggle.flex-spacer{flex:1 1 auto;display:flex;flex-direction:column;justify-content:flex-end}ion-menu ion-content ion-list ion-item{display:block}ion-menu ion-content ion-list ion-item.primary{--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint)}ion-menu ion-content ion-list ion-item.secondary{--ion-item-icon-color: var(--ion-color-secondary-tint);--ion-item-text-color: var(--ion-color-secondary-tint)}ion-menu ion-content ion-list ion-item.tertiary{--ion-item-icon-color: var(--ion-color-tertiary-tint);--ion-item-text-color: var(--ion-color-tertiary-tint)}ion-menu ion-content ion-list ion-item.danger{--ion-item-icon-color: var(--ion-color-danger-tint);--ion-item-text-color: var(--ion-color-danger-tint)}ion-menu ion-content ion-list ion-item.medium{--ion-item-icon-color: var(--ion-color-medium-shade);--ion-item-text-color: var(--ion-color-medium-shade)}ion-menu ion-content ion-list ion-item.dark{--ion-item-icon-color: var(--ion-color-dark-tint);--ion-item-text-color: var(--ion-color-dark-tint)}ion-menu ion-content ion-list ion-item mat-icon,ion-menu ion-content ion-list ion-item ion-icon{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item ion-text,ion-menu ion-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-menu ion-content ion-list ion-item span{margin-left:var(--menu-item-margin)}ion-menu ion-content ion-list ion-item.selected{background-color:var(--ion-item-background-selected)!important;--color-hover: var(--ion-item-background-selected) !important}ion-menu ion-content ion-list ion-item.selected mat-icon,ion-menu ion-content ion-list ion-item.selected ion-icon{color:var(--ion-item-icon-color-selected)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item.selected ion-text,ion-menu ion-content ion-list ion-item.selected ion-label{color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list ion-item.selected:hover{--color-hover: var(--ion-item-background-selected) !important;--ion-item-icon-color-selected: var(--ion-item-icon-color) !important;--ion-item-text-color-selected: var(--ion-item-text-color) !important}ion-menu ion-content ion-list ion-item.selected.menu-item-sub{background-color:var(--menu-item-background-selected-sub)!important}ion-menu ion-content ion-list ion-item.menu-item-sub{--min-height: 34px;--padding-vertical: 8px;--padding-start: 8px;--padding-horizontal: 8px;--inner-border-width: var(--menu-item-border-width-sub);font-size:.8em;overflow:unset}ion-menu ion-content ion-list ion-item.menu-item-sub ion-icon[slot],ion-menu ion-content ion-list ion-item.menu-item-sub mat-icon[slot]{font-size:calc(var(--min-height) / 2 - 1px);height:calc(var(--min-height) / 2 - 1px);margin-top:calc(var(--padding-vertical) + 2px);margin-inline-end:calc(var(--padding-horizontal) + 2px);margin-bottom:calc(var(--padding-vertical) + 2px)}ion-menu ion-content ion-list ion-item.menu-item-sub ion-label{margin-top:var(--padding-vertical);margin-bottom:var(--padding-vertical)}ion-menu ion-content ion-list ion-item.menu-item-sub .item-inner{border-width:var(--inner-border-width);border-style:var(--border-style);border-color:var(--border-color);box-shadow:var(--inner-box-shadow)}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end]{-webkit-margin-start:unset;margin-inline-start:unset}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end] mat-icon[slot=icon-only],ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end] ion-icon[slot=icon-only]{margin:0}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end].visible-hover{opacity:0;display:none;animation:fadeinout 1s linear 1 backwards}ion-menu ion-content ion-list ion-item.menu-item-sub:hover ion-button.visible-hover{opacity:1;display:flex}ion-menu ion-content ion-list .sub-menu-container{margin-inline-start:var(--menu-item-margin-start-sub, 16px)}ion-menu ion-footer{display:block!important}ion-menu ion-footer ion-toolbar ion-title{cursor:pointer;font-size:12pt;font-weight:400;text-align:center;padding:0 8px}ion-menu ion-footer ion-toolbar ion-button{--width: 40px}@media screen and (max-width: 767px){ion-menu ion-footer{display:none!important;visibility:hidden!important}}@media screen and (min-width: 768px){ion-menu ion-scroll{overflow-y:auto!important}ion-menu .user-avatar{font-size:var(--avatar-size, 80px)!important;line-height:var(--avatar-size, 80px);height:var(--avatar-size, 80px)!important;width:var(--avatar-size, 80px)!important}ion-menu .user-logo img{max-height:var(--avatar-size, 80px)}}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.IonBadge, selector: "ion-badge", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonItemDivider, selector: "ion-item-divider", inputs: ["color", "mode", "sticky"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonMenu, selector: "ion-menu", inputs: ["contentId", "disabled", "maxEdgeStart", "menuId", "side", "swipeGesture", "type"] }, { kind: "component", type: i2.IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i2.IonSplitPane, selector: "ion-split-pane", inputs: ["contentId", "disabled", "when"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]" }, { kind: "directive", type: i7.RxFor, selector: "[rxFor][rxForOf]", inputs: ["rxForOf", "rxForTemplate", "rxForStrategy", "rxForParent", "rxForPatchZone", "rxForTrackBy", "rxForRenderCallback"] }, { kind: "directive", type: i8.RxIf, selector: "[rxIf]", inputs: ["rxIf", "rxIfStrategy", "rxIfElse", "rxIfThen", "rxIfSuspense", "rxIfComplete", "rxIfError", "rxIfContextTrigger", "rxIfNextTrigger", "rxIfSuspenseTrigger", "rxIfErrorTrigger", "rxIfCompleteTrigger", "rxIfParent", "rxIfPatchZone", "rxIfRenderCallback"] }, { kind: "directive", type: i9.RxLet, selector: "[rxLet]", inputs: ["rxLet", "rxLetStrategy", "rxLetComplete", "rxLetError", "rxLetSuspense", "rxLetContextTrigger", "rxLetCompleteTrigger", "rxLetErrorTrigger", "rxLetSuspenseTrigger", "rxLetNextTrigger", "rxLetRenderCallback", "rxLetParent", "rxLetPatchZone"], outputs: ["rendered"] }, { kind: "component", type: i10.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i12.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i13.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i5.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i14.RxPush, name: "push" }], animations: [fadeInSlowAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
239
- }
240
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MenuComponent, decorators: [{
241
- type: Component,
242
- args: [{ selector: 'app-menu', animations: [fadeInSlowAnimation], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-split-pane #splitPane [contentId]=\"contentId\" (swiperight)=\"onSwipeRight($event)\">\n <ion-menu [id]=\"id\" [menuId]=\"menuId\" [contentId]=\"contentId\">\n <ion-header>\n <ion-toolbar *ngIf=\"!loading && isLogin; else notLogin\" @fadeInSlowAnimation class=\"user-toolbar\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <button\n type=\"button\"\n mat-flat-button\n class=\"user-avatar\"\n [class.primary]=\"!accountAvatar\"\n [style.background-image]=\"'url(' + (accountAvatar || defaultAvatarImage) + ')'\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"!showTooltip ? ('MENU.BTN_MY_ACCOUNT' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('MENU.BTN_MY_ACCOUNT' | translate) : ''\"\n ></button>\n </ion-col>\n <ion-col size=\"8\" class=\"user-logo\">\n <img\n *ngIf=\"logo; else noLogo\"\n [attr.src]=\"logo\"\n [title]=\"!showTooltip ? ('APP_NAME' | translate: { appName: appName }) : ''\"\n [matTooltip]=\"showTooltip ? ('APP_NAME' | translate: { appName: appName }) : ''\"\n alt=\"Logo\"\n width=\"108px\"\n />\n <ng-template #noLogo>\n <span style=\"width: 108px\">{{ appName }}</span>\n </ng-template>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col>\n <button\n mat-button\n type=\"button\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n (click)=\"close()\"\n [title]=\"!showTooltip ? ('MENU.BTN_MY_ACCOUNT' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('MENU.BTN_MY_ACCOUNT' | translate) : ''\"\n >\n <ion-label class=\"ion-text-wrap ion-text-start\">\n <h3 class=\"no-margin username\">\n <b>{{ accountName }}</b>\n </h3>\n <h4>{{ accountEmail }}</h4>\n </ion-label>\n </button>\n </ion-col>\n\n <!-- Insertion headerBottomRight -->\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"headerBottomRight\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-toolbar>\n\n <!-- User not logged -->\n <ng-template #notLogin>\n <mat-toolbar\n class=\"ion-padding\"\n *ngIf=\"!loading\"\n style=\"height: unset; display: block; margin: auto; text-align: center\"\n >\n <img\n *ngIf=\"logo\"\n [attr.src]=\"logo\"\n [title]=\"!showTooltip ? ('APP_NAME' | translate: { appName: appName }) : ''\"\n [matTooltip]=\"showTooltip ? ('APP_NAME' | translate: { appName: appName }) : ''\"\n width=\"150px;\"\n alt=\"logo\"\n />\n <span *ngIf=\"!logo\" style=\"width: 150px\">{{ appName }}</span>\n </mat-toolbar>\n </ng-template>\n </ion-header>\n\n <ion-content [class.has-user-header]=\"isLogin\">\n <!-- will close the menu, after a click, in mobile -->\n <ion-menu-toggle auto-hide=\"false\">\n <ion-list lines=\"none\" *ngIf=\"!loading\">\n <ng-container *rxFor=\"let item of menuService.dataSubject; strategy: rxStrategy; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: { $implicit: item, level: 0 }\"></ng-container>\n </ng-container>\n </ion-list>\n </ion-menu-toggle>\n </ion-content>\n\n <ion-footer class=\"hidden-xxs hidden-xs hidden-sm hidden-md\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button mat-icon-button color=\"accent\" (click)=\"menuService.openAboutModal()\">\n <mat-icon slot=\"icon-only\">help_outline</mat-icon>\n </ion-button>\n </ion-buttons>\n\n <ion-title (click)=\"menuService.openAboutModal()\" color=\"medium\">\n {{ 'MENU.FOOTER_VERSION_ABOUT' | translate: { version: appVersion } }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <button\n mat-icon-button\n color=\"accent\"\n (click)=\"toggleSplitPaneShow($event)\"\n class=\"hidden-xs hidden-sm hidden-md\"\n [title]=\"!showTooltip ? ((splitPane.when ? 'COMMON.BTN_HIDE_MENU' : 'COMMON.BTN_SHOW_MENU') | translate) : ''\"\n [matTooltip]=\"showTooltip ? ((splitPane.when ? 'COMMON.BTN_HIDE_MENU' : 'COMMON.BTN_SHOW_MENU') | translate) : ''\"\n >\n <mat-icon>\n <span>{{ splitPane.when ? '&#xab;' : '&#xbb;' }}</span>\n </mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n </ion-menu>\n\n <ng-content></ng-content>\n</ion-split-pane>\n\n<ng-template #headerBottomRight>\n <ng-content select=\"[headerBottomRight]\"></ng-content>\n</ng-template>\n\n<ng-template #menuItem let-item let-level=\"level\">\n @if (item.divider) {\n <!-- divider -->\n <ion-item-divider class=\"{{ item.cssClass }} {{ item.color }}\" @fadeInSlowAnimation>\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{ item.matIcon }}</mat-icon>\n <ion-label *ngIf=\"item.cssClass !== 'flex-spacer'\">\n <span *rxIf=\"item.$title; let title; else: skeletonText\" [innerHTML]=\"title | translate\"></span>\n </ion-label>\n </ion-item-divider>\n } @else if (item.path && !item.action) {\n <!-- tappable link -->\n <ion-item\n @fadeInSlowAnimation\n class=\"{{ item.cssClass }} {{ item.color }}\"\n [class.menu-item-sub]=\"level !== 0\"\n tappable\n [routerLink]=\"item.path\"\n [queryParams]=\"item.pathParams\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n [routerLinkActiveOptions]=\"{\n paths: item.path === '/' || level !== 0 ? 'exact' : 'subset',\n queryParams: item.pathParams?.tab || level === 0 ? 'subset' : 'exact',\n matrixParams: 'exact',\n fragment: 'ignored',\n }\"\n >\n @if (item.icon) {\n <ion-icon slot=\"start\" [name]=\"item.icon\"></ion-icon>\n } @else if (item.matIcon) {\n <mat-icon slot=\"start\">{{ item.matIcon }}</mat-icon>\n }\n <ion-label *rxLet=\"item.$title; let title\">\n <span *ngIf=\"title; else skeletonText\" [innerHTML]=\"title | translate\"></span>\n <!--<span *ngIf=\"_debug\"> {{item.id}}</span>-->\n </ion-label>\n\n <ion-badge *rxIf=\"item.$badge; let badge\" [color]=\"item.$badgeColor | push\">\n {{badge}}\n </ion-badge>\n\n <!-- pin button -->\n <ng-container *ngTemplateOutlet=\"pinButton; context: { $implicit: item, level: level }\"></ng-container>\n </ion-item>\n } @else if (item.action) {\n <!-- action -->\n <ion-item\n @fadeInSlowAnimation\n class=\"{{ item.cssClass }} {{ item.color }} text-1x\"\n [class.menu-item-sub]=\"level !== 0\"\n tappable\n (click)=\"executeAction($event, item)\"\n >\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{ item.matIcon }}</mat-icon>\n <ion-label>\n <span *rxIf=\"item.$title; let title; else: skeletonText\" [innerHTML]=\"title | translate\"></span>\n <!--<span *ngIf=\"_debug\"> {{item.id}}</span>-->\n </ion-label>\n\n <ion-badge *rxIf=\"item.$badge; let badge\" [color]=\"item.$badgeColor | push\">\n {{badge}}\n </ion-badge>\n\n <!-- pin button -->\n <ng-container *ngTemplateOutlet=\"pinButton; context: { $implicit: item, level: level }\"></ng-container>\n </ion-item>\n }\n\n <!-- children -->\n @if (item.$children) {\n <div class=\"sub-menu-container\">\n <ng-container *rxFor=\"let child of item.$children; strategy: rxStrategy; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: { $implicit: child, level: level + 1 }\"></ng-container>\n </ng-container>\n </div>\n }\n</ng-template>\n\n<ng-template #pinButton let-item let-level=\"level\">\n <!-- pin button -->\n @if (level && item.pinnable) {\n <ion-button\n slot=\"end\"\n shape=\"round\"\n fill=\"clear\"\n size=\"small\"\n [class.visible-hover]=\"!item.pinned\"\n (click)=\"togglePinned($event, item)\"\n >\n <!--<mat-icon slot=\"icon-only\" [color]=\"item.pinned ? 'primary' : undefined\">push_pin</mat-icon>-->\n <ion-icon slot=\"icon-only\" [name]=\"item.pinned ? 'pin' : 'pin-outline'\"></ion-icon>\n </ion-button>\n }\n</ng-template>\n\n<ng-template #skeletonText let-width let-animated>\n <ion-skeleton-text [animated]=\"animated\" [style.width.%]=\"width || 60\"></ion-skeleton-text>\n</ng-template>\n", styles: [":host{--menu-item-margin: 0;--ion-item-background: transparent;--ion-item-divider-background: transparent;--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint);--ion-item-background-selected: var(--ion-color-secondary100);--ion-item-text-color-selected: var(--ion-color-primary);--ion-item-icon-color-selected: var(--ion-color-primary);--ion-item-text-color-disable: var(--ion-color-medium);--ion-item-icon-color-disable: var(--ion-color-medium);--menu-item-background-selected-sub: var(--ion-color-secondary50);--menu-item-border-width-sub: 0 0 1px 0;--menu-item-margin-start-sub: 16px}@keyframes fadeinout{0%{opacity:0;display:none}75%{opacity:0;display:none}to{opacity:1;display:flex}}ion-menu ion-header ion-text{color:var(--ion-color-primary)}ion-menu ion-header ion-toolbar.user-toolbar{--ion-toolbar-height: 128px}ion-menu ion-header .user-avatar{-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;background-repeat:no-repeat;background-position:center;background-color:var(--ion-color-secondary);border:solid 1px rgba(var(--ion-color-secondary-rgb),.5);overflow:hidden!important;font-size:var(--avatar-size, 60px)!important;line-height:var(--avatar-size, 60px);height:var(--avatar-size, 60px)!important;width:var(--avatar-size, 60px)!important;border-radius:50%;display:inline-block}ion-menu ion-header .user-avatar:hover{background-color:var(--ion-color-secondary-shade);border:solid 2px var(--ion-color-secondary-shade)}ion-menu ion-header .user-logo{text-align:right}ion-menu ion-header .user-logo img{max-width:120px;max-height:var(--avatar-size, 60px);width:auto}ion-menu ion-header .username{padding-top:0;margin-top:0;margin-bottom:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}ion-menu ion-header button[mat-button]{padding:0;width:100%;justify-content:flex-start;text-align:start!important;color:var(--ion-item-text-color)}ion-menu ion-header button[mat-button].selected{background-color:var(--ion-item-background-selected);color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list{min-height:100%;display:flex;flex-direction:column;justify-content:flex-start}ion-menu ion-content ion-list ion-menu-toggle.flex-spacer{flex:1 1 auto;display:flex;flex-direction:column;justify-content:flex-end}ion-menu ion-content ion-list ion-item{display:block}ion-menu ion-content ion-list ion-item.primary{--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint)}ion-menu ion-content ion-list ion-item.secondary{--ion-item-icon-color: var(--ion-color-secondary-tint);--ion-item-text-color: var(--ion-color-secondary-tint)}ion-menu ion-content ion-list ion-item.tertiary{--ion-item-icon-color: var(--ion-color-tertiary-tint);--ion-item-text-color: var(--ion-color-tertiary-tint)}ion-menu ion-content ion-list ion-item.danger{--ion-item-icon-color: var(--ion-color-danger-tint);--ion-item-text-color: var(--ion-color-danger-tint)}ion-menu ion-content ion-list ion-item.medium{--ion-item-icon-color: var(--ion-color-medium-shade);--ion-item-text-color: var(--ion-color-medium-shade)}ion-menu ion-content ion-list ion-item.dark{--ion-item-icon-color: var(--ion-color-dark-tint);--ion-item-text-color: var(--ion-color-dark-tint)}ion-menu ion-content ion-list ion-item mat-icon,ion-menu ion-content ion-list ion-item ion-icon{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item ion-text,ion-menu ion-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-menu ion-content ion-list ion-item span{margin-left:var(--menu-item-margin)}ion-menu ion-content ion-list ion-item.selected{background-color:var(--ion-item-background-selected)!important;--color-hover: var(--ion-item-background-selected) !important}ion-menu ion-content ion-list ion-item.selected mat-icon,ion-menu ion-content ion-list ion-item.selected ion-icon{color:var(--ion-item-icon-color-selected)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item.selected ion-text,ion-menu ion-content ion-list ion-item.selected ion-label{color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list ion-item.selected:hover{--color-hover: var(--ion-item-background-selected) !important;--ion-item-icon-color-selected: var(--ion-item-icon-color) !important;--ion-item-text-color-selected: var(--ion-item-text-color) !important}ion-menu ion-content ion-list ion-item.selected.menu-item-sub{background-color:var(--menu-item-background-selected-sub)!important}ion-menu ion-content ion-list ion-item.menu-item-sub{--min-height: 34px;--padding-vertical: 8px;--padding-start: 8px;--padding-horizontal: 8px;--inner-border-width: var(--menu-item-border-width-sub);font-size:.8em;overflow:unset}ion-menu ion-content ion-list ion-item.menu-item-sub ion-icon[slot],ion-menu ion-content ion-list ion-item.menu-item-sub mat-icon[slot]{font-size:calc(var(--min-height) / 2 - 1px);height:calc(var(--min-height) / 2 - 1px);margin-top:calc(var(--padding-vertical) + 2px);margin-inline-end:calc(var(--padding-horizontal) + 2px);margin-bottom:calc(var(--padding-vertical) + 2px)}ion-menu ion-content ion-list ion-item.menu-item-sub ion-label{margin-top:var(--padding-vertical);margin-bottom:var(--padding-vertical)}ion-menu ion-content ion-list ion-item.menu-item-sub .item-inner{border-width:var(--inner-border-width);border-style:var(--border-style);border-color:var(--border-color);box-shadow:var(--inner-box-shadow)}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end]{-webkit-margin-start:unset;margin-inline-start:unset}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end] mat-icon[slot=icon-only],ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end] ion-icon[slot=icon-only]{margin:0}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end].visible-hover{opacity:0;display:none;animation:fadeinout 1s linear 1 backwards}ion-menu ion-content ion-list ion-item.menu-item-sub:hover ion-button.visible-hover{opacity:1;display:flex}ion-menu ion-content ion-list .sub-menu-container{margin-inline-start:var(--menu-item-margin-start-sub, 16px)}ion-menu ion-footer{display:block!important}ion-menu ion-footer ion-toolbar ion-title{cursor:pointer;font-size:12pt;font-weight:400;text-align:center;padding:0 8px}ion-menu ion-footer ion-toolbar ion-button{--width: 40px}@media screen and (max-width: 767px){ion-menu ion-footer{display:none!important;visibility:hidden!important}}@media screen and (min-width: 768px){ion-menu ion-scroll{overflow-y:auto!important}ion-menu .user-avatar{font-size:var(--avatar-size, 80px)!important;line-height:var(--avatar-size, 80px);height:var(--avatar-size, 80px)!important;width:var(--avatar-size, 80px)!important}ion-menu .user-logo img{max-height:var(--avatar-size, 80px)}}\n"] }]
243
- }], ctorParameters: () => [{ type: i1.AccountService }, { type: i2.NavController }, { type: i2.MenuController }, { type: i2.ModalController }, { type: i3.TranslateService }, { type: i0.ChangeDetectorRef }, { type: i4.MenuService }, { type: i5.Router }, { type: i15.Environment, decorators: [{
244
- type: Inject,
245
- args: [ENVIRONMENT]
246
- }] }, { type: undefined, decorators: [{
247
- type: Optional
248
- }, {
249
- type: Inject,
250
- args: [APP_BASE_HREF]
251
- }] }, { type: i5.ActivatedRoute, decorators: [{
252
- type: Optional
253
- }] }], propDecorators: { id: [{
254
- type: Input
255
- }], menuId: [{
256
- type: Input
257
- }], side: [{
258
- type: Input
259
- }], contentId: [{
260
- type: Input
261
- }], logo: [{
262
- type: Input
263
- }], appName: [{
264
- type: Input
265
- }], rxStrategy: [{
266
- type: Input
267
- }], appVersion: [{
268
- type: Input
269
- }], splitPane: [{
270
- type: ViewChild,
271
- args: ['splitPane', { static: true }]
272
- }] } });
273
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvbWVudS9tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9tZW51L21lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0xSSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVoRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsc0JBQXNCLEVBQWtDLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTMUQsTUFBTSxPQUFPLGFBQWE7SUEwQlo7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNxQjtJQUNjO0lBQ3ZCO0lBbkNmLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDWixNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ2hCLElBQUksR0FBRyxNQUFNLENBQUM7SUFDZCxTQUFTLEdBQUcsY0FBYyxDQUFD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UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQzt3R0F2T1UsYUFBYSw0UEFrQ2QsV0FBVyxhQUNDLGFBQWE7NEZBbkN4QixhQUFhLDBVQzVCMUIsK3JTQXdPQSwya1lEL01jLENBQUMsbUJBQW1CLENBQUM7OzRGQUd0QixhQUFhO2tCQVB6QixTQUFTOytCQUNFLFVBQVUsY0FHUixDQUFDLG1CQUFtQixDQUFDLG1CQUNoQix1QkFBdUIsQ0FBQyxNQUFNOzswQkFvQzVDLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsYUFBYTs7MEJBQ2hDLFFBQVE7eUNBbkNGLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRW9DLFNBQVM7c0JBQWxELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBpbmplY3QsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3B0aW9uYWwsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW9uU3BsaXRQYW5lLCBNZW51Q29udHJvbGxlciwgTW9kYWxDb250cm9sbGVyLCBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuXG5pbXBvcnQgeyBBY2NvdW50IH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FjY291bnQuc2VydmljZSc7XG5cbmltcG9ydCB7IGZhZGVJblNsb3dBbmltYXRpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvbWF0ZXJpYWwvbWF0ZXJpYWwuYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IERFRkFVTFRfTUVOVV9TSE9XX1dIRU4sIE1lbnVTZXJ2aWNlLCBTcGxpdFBhbmVTaG93V2hlbiB9IGZyb20gJy4vbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7IElNZW51SXRlbSwgTWVudUl0ZW0gfSBmcm9tICcuL21lbnUubW9kZWwnO1xuaW1wb3J0IHsgZmlyc3ROb3ROaWxQcm9taXNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUnhTdHJhdGVneU5hbWVzIH0gZnJvbSAnQHJ4LWFuZ3VsYXIvY2RrL3JlbmRlci1zdHJhdGVnaWVzJztcbmltcG9ydCB7IFBlcnNvblV0aWxzIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvcGVyc29uLm1vZGVsJztcbmltcG9ydCB7IEFQUF9CQVNFX0hSRUYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBBUFBfU0hPV19UT09MVElQIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2NvbnN0YW50cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1tZW51JyxcbiAgdGVtcGxhdGVVcmw6ICdtZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWVudS5jb21wb25lbnQuc2NzcyddLFxuICBhbmltYXRpb25zOiBbZmFkZUluU2xvd0FuaW1hdGlvbl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgaWQgPSAnbWVudSc7XG4gIEBJbnB1dCgpIG1lbnVJZCA9ICdsZWZ0JztcbiAgQElucHV0KCkgc2lkZSA9ICdsZWZ0JztcbiAgQElucHV0KCkgY29udGVudElkID0gJ21lbnUtY29udGVudCc7XG4gIEBJbnB1dCgpIGxvZ286IHN0cmluZztcbiAgQElucHV0KCkgYXBwTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSByeFN0cmF0ZWd5OiBSeFN0cmF0ZWd5TmFtZXMgPSAnbm9ybWFsJztcbiAgQElucHV0KCkgYXBwVmVyc2lvbjogc3RyaW5nO1xuXG4gIEBWaWV3Q2hpbGQoJ3NwbGl0UGFuZScsIHsgc3RhdGljOiB0cnVlIH0pIHNwbGl0UGFuZTogSW9uU3BsaXRQYW5lO1xuXG4gIGxvYWRpbmcgPSB0cnVlO1xuICBpc0xvZ2luID0gZmFsc2U7XG4gIGFjY291bnROYW1lOiBzdHJpbmc7XG4gIGFjY291bnRBdmF0YXI6IHN0cmluZztcbiAgYWNjb3VudEVtYWlsOiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRBdmF0YXJJbWFnZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlYnVnOiBib29sZWFuO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgc2hvd1Rvb2x0aXAgPSBpbmplY3QoQVBQX1NIT1dfVE9PTFRJUCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBuYXZDb250cm9sbGVyOiBOYXZDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCBtZW51OiBNZW51Q29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCBtZW51U2VydmljZTogTWVudVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfQkFTRV9IUkVGKSBwcm90ZWN0ZWQgYXBwQmFzZUhyZWY6IHN0cmluZyxcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgcm91dGU6IEFjdGl2YXRlZFJvdXRlIC8vIE1vZGFsIGVkaXRvciBnaXZlICdudWxsJ1xuICApIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbWVudS1jb21wb25lbnRdIENyZWF0ZScpO1xuICAgIHRoaXMuYXBwVmVyc2lvbiA9IGVudmlyb25tZW50LnZlcnNpb247XG4gICAgdGhpcy5kZWZhdWx0QXZhdGFySW1hZ2UgPSAoYXBwQmFzZUhyZWYgfHwgJy8nKSArIFBlcnNvblV0aWxzLkRFRkFVTFRfQVZBVEFSX0lNQUdFO1xuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNwbGl0UGFuZS53aGVuID0gYXdhaXQgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMubWVudVNlcnZpY2Uuc3BsaXRQYW5lV2hlbik7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5tZW51U2VydmljZS5hY2NvdW50Q2hhbmdlcy5zdWJzY3JpYmUoKGFjY291bnQpID0+IHtcbiAgICAgICAgaWYgKGFjY291bnQpIHRoaXMub25Mb2dpbihhY2NvdW50KTtcbiAgICAgICAgZWxzZSB0aGlzLm9uTG9nb3V0KHRydWUpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIHRvIG1lbnUgc2VydmljZSBldmVudFxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5tZW51U2VydmljZS5zcGxpdFBhbmVXaGVuLnN1YnNjcmliZSgodmFsdWUpID0+IHRoaXMuc2V0U3BsaXRQYW5lV2hlbih2YWx1ZSkpKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHRoaXMubWVudVNlcnZpY2UuZW5hYmxlZC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLmVuYWJsZSh2YWx1ZSkpKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5tZW51U2VydmljZS5vcGVuZWRcbiAgICAgICAgLy8gQXZvaWQgZHVwbGljYXRlZCBldmVudHNcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+ICh2YWx1ZSA/IHRoaXMub3Blbih7IGVtaXRFdmVudDogZmFsc2UgfSkgOiB0aGlzLmNsb3NlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KSkpXG4gICAgKTtcblxuICAgIC8vIFRPRE8gOiBGaW5kIGEgbW9yZSByZWxpYWJsZSB3YXkgdG8gZG8gdGhpcyA6XG4gICAgLy8gICAgTXVzdCBiZSBkb25uZSBhZnRlciBtZW51U2VydmljZSBzdWJzY3JpcHRpb24gOlxuICAgIC8vICAgIC0gSW4gTWVudVNlcnZpY2UubmdPblN0YXJ0IGFjY291bnRDaGFuZ2VzIGNoYW5nZSB3aWxsIGJlIGVtaXR0ZWQgYmVmb3JlIHRoZSBzZXJ2aWNlIGlzIHJlYWR5XG4gICAgLy8gICAgLSBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2Ugc3ViamVjdERhdGEgYmUgZmlsbGVkIGFmdGVyIGdldCBhY2NvdW50IGNoYW5nZVxuICAgIC8vICAgICAgYW5kIE1lbnVTZXJ2aWNlIGF3YWl0IGZvciBzdWJqZWN0RGF0YSBiZSBmaWxsZWQgdG8gYmUgcmVhZHlcbiAgICBhd2FpdCB0aGlzLm1lbnVTZXJ2aWNlLnJlYWR5KCk7XG4gIH1cblxuICBhc3luYyBvbkxvZ2luKGFjY291bnQ6IEFjY291bnQpIHtcbiAgICBjb25zb2xlLmluZm8oJ1ttZW51XSBVcGRhdGUgKG9uIGxvZ2luKScpO1xuICAgIHRoaXMuYWNjb3VudEF2YXRhciA9IGFjY291bnQuYXZhdGFyO1xuICAgIHRoaXMuYWNjb3VudE5hbWUgPSBhY2NvdW50LmRpc3BsYXlOYW1lO1xuICAgIHRoaXMuYWNjb3VudEVtYWlsID0gYWNjb3VudC5lbWFpbDtcbiAgICB0aGlzLmlzTG9naW4gPSB0cnVlO1xuICAgIHRoaXMubWFya0FzTG9hZGVkKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgYXN5bmMgb25Mb2dvdXQoc2tpcFJlZGlyZWN0PzogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5pc0xvZ2luKSB7XG4gICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgICAgcmV0dXJuOyAvLyBTa2lwIGlmIGFscmVhZHkgbG9nb3V0XG4gICAgfVxuXG4gICAgaWYgKCFza2lwUmVkaXJlY3QpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBMb2dvdXQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIFVwZGF0ZSAob24gbG9nb3V0KScpO1xuICAgIH1cbiAgICB0aGlzLmFjY291bnRBdmF0YXIgPSBudWxsO1xuICAgIHRoaXMuYWNjb3VudEVtYWlsID0gbnVsbDtcbiAgICB0aGlzLmFjY291bnROYW1lID0gbnVsbDtcblxuICAgIC8vIFdhaXQgdGhlIGVuZCBvZiBmYWRlb3V0LCB0byByZXNldCB0aGUgYWNjb3VudFxuICAgIGlmICghc2tpcFJlZGlyZWN0KSB7XG4gICAgICBhd2FpdCB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVSb290KCcvJyk7XG4gICAgfVxuXG4gICAgdGhpcy5pc0xvZ2luID0gZmFsc2U7XG4gICAgdGhpcy5tYXJrQXNMb2FkZWQoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogSU1lbnVJdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIGVuYWJsZSh2YWx1ZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVuYWJsZWQgPSBhd2FpdCB0aGlzLm1lbnUuaXNFbmFibGVkKHRoaXMubWVudUlkKTtcbiAgICBpZiAoZW5hYmxlZCAhPT0gdmFsdWUpIHtcbiAgICAgIGF3YWl0IHRoaXMubWVudS5lbmFibGUodmFsdWUsIHRoaXMubWVudUlkKTtcbiAgICAgIGlmICghdmFsdWUpIGF3YWl0IHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvcGVuKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBDaGVja2luZyBvcGVuIGV2ZW50Li4uJyk7XG4gICAgY29uc3Qgb3BlbmVkID0gYXdhaXQgdGhpcy5tZW51LmlzT3Blbih0aGlzLm1lbnVJZCk7XG4gICAgaWYgKCFvcGVuZWQpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBPcGVuaW5nIG1lbnUnKTtcbiAgICAgIGF3YWl0IHRoaXMubWVudS5vcGVuKHRoaXMubWVudUlkKTtcblxuICAgICAgLy8gUHJvcGFnYXRlIHRvIHNlcnZpY2VcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tZW51U2VydmljZS5fbWFya0FzT3BlbmVkKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgY2xvc2Uob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIENoZWNraW5nIGNsb3NlIGV2ZW50Li4uJyk7XG4gICAgY29uc3Qgb3BlbmVkID0gYXdhaXQgdGhpcy5tZW51LmlzT3Blbih0aGlzLm1lbnVJZCk7XG4gICAgaWYgKG9wZW5lZCkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIENsb3NpbmcgbWVudScpO1xuICAgICAgYXdhaXQgdGhpcy5tZW51LmNsb3NlKHRoaXMubWVudUlkKTtcblxuICAgICAgLy8gUHJvcGFnYXRlIHRvIHNlcnZpY2VcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tZW51U2VydmljZS5fbWFya0FzQ2xvc2VkKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgc2V0U3BsaXRQYW5lV2hlbih2YWx1ZTogU3BsaXRQYW5lU2hvd1doZW4pIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gQ2hlY2tpbmcgc3BsaXRQYW5lIHdoZW4uLi4nKTtcbiAgICBpZiAodGhpcy5zcGxpdFBhbmUud2hlbiAhPT0gdmFsdWUpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBTZXQgc3BsaXRQYW5lIHdoZW4gdG8gJyArIHZhbHVlKTtcbiAgICAgIHRoaXMuc3BsaXRQYW5lLndoZW4gPSB2YWx1ZTtcbiAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAvLyBQcm9wYWdhdGUgdG8gdGhlIG1lbnUgc2VydmljZVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm1lbnVTZXJ2aWNlLnNldFNwbGl0UGFuZVNob3dXaGVuKHZhbHVlKSwgMjAwKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVTcGxpdFBhbmVTaG93KGV2ZW50PzogRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmIChldmVudCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICh0aGlzLnNwbGl0UGFuZS53aGVuID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0U3BsaXRQYW5lV2hlbihERUZBVUxUX01FTlVfU0hPV19XSEVOKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0U3BsaXRQYW5lV2hlbihmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZXhlY3V0ZUFjdGlvbihldmVudDogRXZlbnQsIGl0ZW06IE1lbnVJdGVtKSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuXG4gICAgLy8gRGVsZWdhdGUgZXhlY3V0aW9uIHRvIHNlcnZpY2VcbiAgICByZXR1cm4gdGhpcy5tZW51U2VydmljZS5leGVjdXRlQWN0aW9uKGV2ZW50LCBpdGVtKTtcbiAgfVxuXG4gIG9uU3dpcGVSaWdodChldmVudCkge1xuICAgIC8vIFNraXAsIGlmIG5vdCBhIHZhbGlkIHN3aXBlIGV2ZW50XG4gICAgaWYgKCFldmVudCB8fCBldmVudC5wb2ludGVyVHlwZSAhPT0gJ3RvdWNoJyB8fCBldmVudC52ZWxvY2l0eSA8IDAuNCkge1xuICAgICAgLy9ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFdpbGwgb3BlbiB0aGUgbGVmdCBtZW51LCBzbyBjYW5jZWxsZWQgdGhpcyBzd2lwZSBldmVudFxuICAgIGNvbnN0IHN0YXJ0WCA9IGV2ZW50LmNlbnRlci54IC0gZXZlbnQuZGlzdGFuY2U7XG4gICAgaWYgKHN0YXJ0WCA8PSA1MCkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlttZW51XSBDYW5jZWwgc3dpcGUgcmlnaHQsIGJlY2F1c2UgbmVhciB0aGUgbGVmdCBtZW51IHt4OiBcIiArIHN0YXJ0WCArIFwiLCB2ZWxvY2l0eTogXCIgKyBldmVudC52ZWxvY2l0eSArIFwifVwiKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gT0s6IGNvbnRpbnVlXG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZyhcIlttZW51XSBSZWNlaXZlZCBzd2lwZSByaWdodCB7eDogXCIgKyBzdGFydFggKyBcIiwgdmVsb2NpdHk6IFwiICsgZXZlbnQudmVsb2NpdHkgKyBcIn1cIik7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0FzTG9hZGVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSwgNDUwKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0FzTG9hZGluZyhvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMubG9hZGluZykge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZGV0ZWN0Q2hhbmdlcygpIHtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlUGlubmVkKGV2ZW50OiBFdmVudCwgaXRlbTogSU1lbnVJdGVtKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLm1lbnVTZXJ2aWNlLnRvZ2dsZVBpbm5lZChpdGVtKTtcbiAgfVxufVxuIiwiPGlvbi1zcGxpdC1wYW5lICNzcGxpdFBhbmUgW2NvbnRlbnRJZF09XCJjb250ZW50SWRcIiAoc3dpcGVyaWdodCk9XCJvblN3aXBlUmlnaHQoJGV2ZW50KVwiPlxuICA8aW9uLW1lbnUgW2lkXT1cImlkXCIgW21lbnVJZF09XCJtZW51SWRcIiBbY29udGVudElkXT1cImNvbnRlbnRJZFwiPlxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyICpuZ0lmPVwiIWxvYWRpbmcgJiYgaXNMb2dpbjsgZWxzZSBub3RMb2dpblwiIEBmYWRlSW5TbG93QW5pbWF0aW9uIGNsYXNzPVwidXNlci10b29sYmFyXCI+XG4gICAgICAgIDxpb24tZ3JpZD5cbiAgICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBtYXQtZmxhdC1idXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cInVzZXItYXZhdGFyXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucHJpbWFyeV09XCIhYWNjb3VudEF2YXRhclwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtaW1hZ2VdPVwiJ3VybCgnICsgKGFjY291bnRBdmF0YXIgfHwgZGVmYXVsdEF2YXRhckltYWdlKSArICcpJ1wiXG4gICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvYWNjb3VudCddXCJcbiAgICAgICAgICAgICAgICByb3V0ZXJEaXJlY3Rpb249XCJyb290XCJcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiaW9uLWNvbG9yLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbG9zZSgpXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiIXNob3dUb29sdGlwID8gKCdNRU5VLkJUTl9NWV9BQ0NPVU5UJyB8IHRyYW5zbGF0ZSkgOiAnJ1wiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwic2hvd1Rvb2x0aXAgPyAoJ01FTlUuQlROX01ZX0FDQ09VTlQnIHwgdHJhbnNsYXRlKSA6ICcnXCJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjhcIiBjbGFzcz1cInVzZXItbG9nb1wiPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJsb2dvOyBlbHNlIG5vTG9nb1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuc3JjXT1cImxvZ29cIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIhc2hvd1Rvb2x0aXAgPyAoJ0FQUF9OQU1FJyB8IHRyYW5zbGF0ZTogeyBhcHBOYW1lOiBhcHBOYW1lIH0pIDogJydcIlxuICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cInNob3dUb29sdGlwID8gKCdBUFBfTkFNRScgfCB0cmFuc2xhdGU6IHsgYXBwTmFtZTogYXBwTmFtZSB9KSA6ICcnXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJMb2dvXCJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwOHB4XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0xvZ28+XG4gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJ3aWR0aDogMTA4cHhcIj57eyBhcHBOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9hY2NvdW50J11cIlxuICAgICAgICAgICAgICAgIHJvdXRlckRpcmVjdGlvbj1cInJvb3RcIlxuICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJzZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlKClcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIhc2hvd1Rvb2x0aXAgPyAoJ01FTlUuQlROX01ZX0FDQ09VTlQnIHwgdHJhbnNsYXRlKSA6ICcnXCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJzaG93VG9vbHRpcCA/ICgnTUVOVS5CVE5fTVlfQUNDT1VOVCcgfCB0cmFuc2xhdGUpIDogJydcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImlvbi10ZXh0LXdyYXAgaW9uLXRleHQtc3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIm5vLW1hcmdpbiB1c2VybmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICA8Yj57eyBhY2NvdW50TmFtZSB9fTwvYj5cbiAgICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICAgICA8aDQ+e3sgYWNjb3VudEVtYWlsIH19PC9oND5cbiAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG5cbiAgICAgICAgICAgIDwhLS0gSW5zZXJ0aW9uIGhlYWRlckJvdHRvbVJpZ2h0IC0tPlxuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlckJvdHRvbVJpZ2h0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICA8L2lvbi1ncmlkPlxuICAgICAgPC9pb24tdG9vbGJhcj5cblxuICAgICAgPCEtLSBVc2VyIG5vdCBsb2dnZWQgLS0+XG4gICAgICA8bmctdGVtcGxhdGUgI25vdExvZ2luPlxuICAgICAgICA8bWF0LXRvb2xiYXJcbiAgICAgICAgICBjbGFzcz1cImlvbi1wYWRkaW5nXCJcbiAgICAgICAgICAqbmdJZj1cIiFsb2FkaW5nXCJcbiAgICAgICAgICBzdHlsZT1cImhlaWdodDogdW5zZXQ7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IGF1dG87IHRleHQtYWxpZ246IGNlbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAqbmdJZj1cImxvZ29cIlxuICAgICAgICAgICAgW2F0dHIuc3JjXT1cImxvZ29cIlxuICAgICAgICAgICAgW3RpdGxlXT1cIiFzaG93VG9vbHRpcCA/ICgnQVBQX05BTUUnIHwgdHJhbnNsYXRlOiB7IGFwcE5hbWU6IGFwcE5hbWUgfSkgOiAnJ1wiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJzaG93VG9vbHRpcCA/ICgnQVBQX05BTUUnIHwgdHJhbnNsYXRlOiB7IGFwcE5hbWU6IGFwcE5hbWUgfSkgOiAnJ1wiXG4gICAgICAgICAgICB3aWR0aD1cIjE1MHB4O1wiXG4gICAgICAgICAgICBhbHQ9XCJsb2dvXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWxvZ29cIiBzdHlsZT1cIndpZHRoOiAxNTBweFwiPnt7IGFwcE5hbWUgfX08L3NwYW4+XG4gICAgICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvaW9uLWhlYWRlcj5cblxuICAgIDxpb24tY29udGVudCBbY2xhc3MuaGFzLXVzZXItaGVhZGVyXT1cImlzTG9naW5cIj5cbiAgICAgIDwhLS0gd2lsbCBjbG9zZSB0aGUgbWVudSwgYWZ0ZXIgYSBjbGljaywgaW4gbW9iaWxlIC0tPlxuICAgICAgPGlvbi1tZW51LXRvZ2dsZSBhdXRvLWhpZGU9XCJmYWxzZVwiPlxuICAgICAgICA8aW9uLWxpc3QgbGluZXM9XCJub25lXCIgKm5nSWY9XCIhbG9hZGluZ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnJ4Rm9yPVwibGV0IGl0ZW0gb2YgbWVudVNlcnZpY2UuZGF0YVN1YmplY3Q7IHN0cmF0ZWd5OiByeFN0cmF0ZWd5OyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZW51SXRlbTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0sIGxldmVsOiAwIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9pb24tbGlzdD5cbiAgICAgIDwvaW9uLW1lbnUtdG9nZ2xlPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG5cbiAgICA8aW9uLWZvb3RlciBjbGFzcz1cImhpZGRlbi14eHMgaGlkZGVuLXhzIGhpZGRlbi1zbSBoaWRkZW4tbWRcIj5cbiAgICAgIDxpb24tdG9vbGJhcj5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cImFjY2VudFwiIChjbGljayk9XCJtZW51U2VydmljZS5vcGVuQWJvdXRNb2RhbCgpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gc2xvdD1cImljb24tb25seVwiPmhlbHBfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuXG4gICAgICAgIDxpb24tdGl0bGUgKGNsaWNrKT1cIm1lbnVTZXJ2aWNlLm9wZW5BYm91dE1vZGFsKClcIiBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgIHt7ICdNRU5VLkZPT1RFUl9WRVJTSU9OX0FCT1VUJyB8IHRyYW5zbGF0ZTogeyB2ZXJzaW9uOiBhcHBWZXJzaW9uIH0gfX1cbiAgICAgICAgPC9pb24tdGl0bGU+XG5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwiYWNjZW50XCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTcGxpdFBhbmVTaG93KCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJoaWRkZW4teHMgaGlkZGVuLXNtIGhpZGRlbi1tZFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiIXNob3dUb29sdGlwID8gKChzcGxpdFBhbmUud2hlbiA/ICdDT01NT04uQlROX0hJREVfTUVOVScgOiAnQ09NTU9OLkJUTl9TSE9XX01FTlUnKSB8IHRyYW5zbGF0ZSkgOiAnJ1wiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJzaG93VG9vbHRpcCA/ICgoc3BsaXRQYW5lLndoZW4gPyAnQ09NTU9OLkJUTl9ISURFX01FTlUnIDogJ0NPTU1PTi5CVE5fU0hPV19NRU5VJykgfCB0cmFuc2xhdGUpIDogJydcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgc3BsaXRQYW5lLndoZW4gPyAnJiN4YWI7JyA6ICcmI3hiYjsnIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24tZm9vdGVyPlxuICA8L2lvbi1tZW51PlxuXG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvaW9uLXNwbGl0LXBhbmU+XG5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyQm90dG9tUmlnaHQ+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIltoZWFkZXJCb3R0b21SaWdodF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21lbnVJdGVtIGxldC1pdGVtIGxldC1sZXZlbD1cImxldmVsXCI+XG4gIEBpZiAoaXRlbS5kaXZpZGVyKSB7XG4gICAgPCEtLSBkaXZpZGVyIC0tPlxuICAgIDxpb24taXRlbS1kaXZpZGVyIGNsYXNzPVwie3sgaXRlbS5jc3NDbGFzcyB9fSB7eyBpdGVtLmNvbG9yIH19XCIgQGZhZGVJblNsb3dBbmltYXRpb24+XG4gICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgKm5nSWY9XCJpdGVtLmljb25cIiBbbmFtZV09XCJpdGVtLmljb25cIj48L2lvbi1pY29uPlxuICAgICAgPG1hdC1pY29uIHNsb3Q9XCJzdGFydFwiICpuZ0lmPVwiaXRlbS5tYXRJY29uXCI+e3sgaXRlbS5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgIDxpb24tbGFiZWwgKm5nSWY9XCJpdGVtLmNzc0NsYXNzICE9PSAnZmxleC1zcGFjZXInXCI+XG4gICAgICAgIDxzcGFuICpyeElmPVwiaXRlbS4kdGl0bGU7IGxldCB0aXRsZTsgZWxzZTogc2tlbGV0b25UZXh0XCIgW2lubmVySFRNTF09XCJ0aXRsZSB8IHRyYW5zbGF0ZVwiPjwvc3Bhbj5cbiAgICAgIDwvaW9uLWxhYmVsPlxuICAgIDwvaW9uLWl0ZW0tZGl2aWRlcj5cbiAgfSBAZWxzZSBpZiAoaXRlbS5wYXRoICYmICFpdGVtLmFjdGlvbikge1xuICAgIDwhLS0gdGFwcGFibGUgbGluayAtLT5cbiAgICA8aW9uLWl0ZW1cbiAgICAgIEBmYWRlSW5TbG93QW5pbWF0aW9uXG4gICAgICBjbGFzcz1cInt7IGl0ZW0uY3NzQ2xhc3MgfX0ge3sgaXRlbS5jb2xvciB9fVwiXG4gICAgICBbY2xhc3MubWVudS1pdGVtLXN1Yl09XCJsZXZlbCAhPT0gMFwiXG4gICAgICB0YXBwYWJsZVxuICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5wYXRoXCJcbiAgICAgIFtxdWVyeVBhcmFtc109XCJpdGVtLnBhdGhQYXJhbXNcIlxuICAgICAgcm91dGVyRGlyZWN0aW9uPVwicm9vdFwiXG4gICAgICByb3V0ZXJMaW5rQWN0aXZlPVwic2VsZWN0ZWRcIlxuICAgICAgW3JvdXRlckxpbmtBY3RpdmVPcHRpb25zXT1cIntcbiAgICAgICAgcGF0aHM6IGl0ZW0ucGF0aCA9PT0gJy8nIHx8IGxldmVsICE9PSAwID8gJ2V4YWN0JyA6ICdzdWJzZXQnLFxuICAgICAgICBxdWVyeVBhcmFtczogaXRlbS5wYXRoUGFyYW1zPy50YWIgfHwgbGV2ZWwgPT09IDAgPyAnc3Vic2V0JyA6ICdleGFjdCcsXG4gICAgICAgIG1hdHJpeFBhcmFtczogJ2V4YWN0JyxcbiAgICAgICAgZnJhZ21lbnQ6ICdpZ25vcmVkJyxcbiAgICAgIH1cIlxuICAgID5cbiAgICAgIEBpZiAoaXRlbS5pY29uKSB7XG4gICAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBbbmFtZV09XCJpdGVtLmljb25cIj48L2lvbi1pY29uPlxuICAgICAgfSBAZWxzZSBpZiAoaXRlbS5tYXRJY29uKSB7XG4gICAgICAgIDxtYXQtaWNvbiBzbG90PVwic3RhcnRcIj57eyBpdGVtLm1hdEljb24gfX08L21hdC1pY29uPlxuICAgICAgfVxuICAgICAgPGlvbi1sYWJlbCAqcnhMZXQ9XCJpdGVtLiR0aXRsZTsgbGV0IHRpdGxlXCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwidGl0bGU7IGVsc2Ugc2tlbGV0b25UZXh0XCIgW2lubmVySFRNTF09XCJ0aXRsZSB8IHRyYW5zbGF0ZVwiPjwvc3Bhbj5cbiAgICAgICAgPCEtLTxzcGFuICpuZ0lmPVwiX2RlYnVnXCI+IHt7aXRlbS5pZH19PC9zcGFuPi0tPlxuICAgICAgPC9pb24tbGFiZWw+XG5cbiAgICAgIDxpb24tYmFkZ2UgKnJ4SWY9XCJpdGVtLiRiYWRnZTsgbGV0IGJhZGdlXCIgW2NvbG9yXT1cIml0ZW0uJGJhZGdlQ29sb3IgfCBwdXNoXCI+XG4gICAgICAgIHt7YmFkZ2V9fVxuICAgICAgPC9pb24tYmFkZ2U+XG5cbiAgICAgIDwhLS0gcGluIGJ1dHRvbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwaW5CdXR0b247IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtLCBsZXZlbDogbGV2ZWwgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaW9uLWl0ZW0+XG4gIH0gQGVsc2UgaWYgKGl0ZW0uYWN0aW9uKSB7XG4gICAgPCEtLSBhY3Rpb24gLS0+XG4gICAgPGlvbi1pdGVtXG4gICAgICBAZmFkZUluU2xvd0FuaW1hdGlvblxuICAgICAgY2xhc3M9XCJ7eyBpdGVtLmNzc0NsYXNzIH19IHt7IGl0ZW0uY29sb3IgfX0gdGV4dC0xeFwiXG4gICAgICBbY2xhc3MubWVudS1pdGVtLXN1Yl09XCJsZXZlbCAhPT0gMFwiXG4gICAgICB0YXBwYWJsZVxuICAgICAgKGNsaWNrKT1cImV4ZWN1dGVBY3Rpb24oJGV2ZW50LCBpdGVtKVwiXG4gICAgPlxuICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiICpuZ0lmPVwiaXRlbS5pY29uXCIgW25hbWVdPVwiaXRlbS5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgIDxtYXQtaWNvbiBzbG90PVwic3RhcnRcIiAqbmdJZj1cIml0ZW0ubWF0SWNvblwiPnt7IGl0ZW0ubWF0SWNvbiB9fTwvbWF0LWljb24+XG4gICAgICA8aW9uLWxhYmVsPlxuICAgICAgICA8c3BhbiAqcnhJZj1cIml0ZW0uJHRpdGxlOyBsZXQgdGl0bGU7IGVsc2U6IHNrZWxldG9uVGV4dFwiIFtpbm5lckhUTUxdPVwidGl0bGUgfCB0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgICAgIDwhLS08c3BhbiAqbmdJZj1cIl9kZWJ1Z1wiPiB7e2l0ZW0uaWR9fTwvc3Bhbj4tLT5cbiAgICAgIDwvaW9uLWxhYmVsPlxuXG4gICAgICA8aW9uLWJhZGdlICpyeElmPVwiaXRlbS4kYmFkZ2U7IGxldCBiYWRnZVwiIFtjb2xvcl09XCJpdGVtLiRiYWRnZUNvbG9yIHwgcHVzaFwiPlxuICAgICAgICB7e2JhZGdlfX1cbiAgICAgIDwvaW9uLWJhZGdlPlxuXG4gICAgICA8IS0tIHBpbiBidXR0b24gLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGluQnV0dG9uOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSwgbGV2ZWw6IGxldmVsIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2lvbi1pdGVtPlxuICB9XG5cbiAgPCEtLSBjaGlsZHJlbiAtLT5cbiAgQGlmIChpdGVtLiRjaGlsZHJlbikge1xuICAgIDxkaXYgY2xhc3M9XCJzdWItbWVudS1jb250YWluZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKnJ4Rm9yPVwibGV0IGNoaWxkIG9mIGl0ZW0uJGNoaWxkcmVuOyBzdHJhdGVneTogcnhTdHJhdGVneTsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZW51SXRlbTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNoaWxkLCBsZXZlbDogbGV2ZWwgKyAxIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3BpbkJ1dHRvbiBsZXQtaXRlbSBsZXQtbGV2ZWw9XCJsZXZlbFwiPlxuICA8IS0tIHBpbiBidXR0b24gLS0+XG4gIEBpZiAobGV2ZWwgJiYgaXRlbS5waW5uYWJsZSkge1xuICAgIDxpb24tYnV0dG9uXG4gICAgICBzbG90PVwiZW5kXCJcbiAgICAgIHNoYXBlPVwicm91bmRcIlxuICAgICAgZmlsbD1cImNsZWFyXCJcbiAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICBbY2xhc3MudmlzaWJsZS1ob3Zlcl09XCIhaXRlbS5waW5uZWRcIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZVBpbm5lZCgkZXZlbnQsIGl0ZW0pXCJcbiAgICA+XG4gICAgICA8IS0tPG1hdC1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBbY29sb3JdPVwiaXRlbS5waW5uZWQgPyAncHJpbWFyeScgOiB1bmRlZmluZWRcIj5wdXNoX3BpbjwvbWF0LWljb24+LS0+XG4gICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIFtuYW1lXT1cIml0ZW0ucGlubmVkID8gJ3BpbicgOiAncGluLW91dGxpbmUnXCI+PC9pb24taWNvbj5cbiAgICA8L2lvbi1idXR0b24+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2tlbGV0b25UZXh0IGxldC13aWR0aCBsZXQtYW5pbWF0ZWQ+XG4gIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwiYW5pbWF0ZWRcIiBbc3R5bGUud2lkdGguJV09XCJ3aWR0aCB8fCA2MFwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG48L25nLXRlbXBsYXRlPlxuIl19