@sumaris-net/ngx-components 18.11.0 → 18.12.0

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 (1383) hide show
  1. package/.editorconfig +24 -0
  2. package/.eslintrc.json +95 -0
  3. package/.gitattribute +1 -0
  4. package/.github/CONTRIBUTING.md +10 -0
  5. package/.github/ISSUE_TEMPLATE.md +6 -0
  6. package/.github/PULL_REQUEST_TEMPLATE.md +10 -0
  7. package/.github/github_disclaimer.md +14 -0
  8. package/.gitlab-ci.yml +46 -0
  9. package/.graphqlconfig +15 -0
  10. package/.prettierignore +9 -0
  11. package/.prettierrc.json +17 -0
  12. package/angular.json +236 -0
  13. package/capacitor.config.ts +49 -0
  14. package/doc/changelog.md +4 -0
  15. package/graphql.config.yml +13 -0
  16. package/ionic.config.json +7 -0
  17. package/karma.conf.js +38 -0
  18. package/ng-package.json +21 -0
  19. package/ngcc.config.js +9 -0
  20. package/package.json +132 -19
  21. package/public_api.ts +426 -0
  22. package/resources/README.md +7 -0
  23. package/resources/icon/TODO.md +11 -0
  24. package/resources/icon.png +0 -0
  25. package/resources/icon.png.md5 +1 -0
  26. package/resources/icon.xcf +0 -0
  27. package/resources/ios/icon/icon-1024.png +0 -0
  28. package/resources/ios/icon/icon-108@2x.png +0 -0
  29. package/resources/ios/icon/icon-20.png +0 -0
  30. package/resources/ios/icon/icon-20@2x.png +0 -0
  31. package/resources/ios/icon/icon-20@3x.png +0 -0
  32. package/resources/ios/icon/icon-24@2x.png +0 -0
  33. package/resources/ios/icon/icon-27.5@2x.png +0 -0
  34. package/resources/ios/icon/icon-29.png +0 -0
  35. package/resources/ios/icon/icon-29@2x.png +0 -0
  36. package/resources/ios/icon/icon-29@3x.png +0 -0
  37. package/resources/ios/icon/icon-40.png +0 -0
  38. package/resources/ios/icon/icon-40@2x.png +0 -0
  39. package/resources/ios/icon/icon-40@3x.png +0 -0
  40. package/resources/ios/icon/icon-44@2x.png +0 -0
  41. package/resources/ios/icon/icon-50.png +0 -0
  42. package/resources/ios/icon/icon-50@2x.png +0 -0
  43. package/resources/ios/icon/icon-60.png +0 -0
  44. package/resources/ios/icon/icon-60@2x.png +0 -0
  45. package/resources/ios/icon/icon-60@3x.png +0 -0
  46. package/resources/ios/icon/icon-72.png +0 -0
  47. package/resources/ios/icon/icon-72@2x.png +0 -0
  48. package/resources/ios/icon/icon-76.png +0 -0
  49. package/resources/ios/icon/icon-76@2x.png +0 -0
  50. package/resources/ios/icon/icon-83.5@2x.png +0 -0
  51. package/resources/ios/icon/icon-86@2x.png +0 -0
  52. package/resources/ios/icon/icon-98@2x.png +0 -0
  53. package/resources/ios/icon/icon-small.png +0 -0
  54. package/resources/ios/icon/icon-small@2x.png +0 -0
  55. package/resources/ios/icon/icon-small@3x.png +0 -0
  56. package/resources/ios/icon/icon.png +0 -0
  57. package/resources/ios/icon/icon@2x.png +0 -0
  58. package/resources/ios/splash/Default-1792h~iphone.png +0 -0
  59. package/resources/ios/splash/Default-2436h.png +0 -0
  60. package/resources/ios/splash/Default-2688h~iphone.png +0 -0
  61. package/resources/ios/splash/Default-568h@2x~iphone.png +0 -0
  62. package/resources/ios/splash/Default-667h.png +0 -0
  63. package/resources/ios/splash/Default-736h.png +0 -0
  64. package/resources/ios/splash/Default-Landscape-1792h~iphone.png +0 -0
  65. package/resources/ios/splash/Default-Landscape-2436h.png +0 -0
  66. package/resources/ios/splash/Default-Landscape-2688h~iphone.png +0 -0
  67. package/resources/ios/splash/Default-Landscape-736h.png +0 -0
  68. package/resources/ios/splash/Default-Landscape@2x~ipad.png +0 -0
  69. package/resources/ios/splash/Default-Landscape@~ipadpro.png +0 -0
  70. package/resources/ios/splash/Default-Landscape~ipad.png +0 -0
  71. package/resources/ios/splash/Default-Portrait@2x~ipad.png +0 -0
  72. package/resources/ios/splash/Default-Portrait@~ipadpro.png +0 -0
  73. package/resources/ios/splash/Default-Portrait~ipad.png +0 -0
  74. package/resources/ios/splash/Default@2x~iphone.png +0 -0
  75. package/resources/ios/splash/Default@2x~universal~anyany.png +0 -0
  76. package/resources/ios/splash/Default~iphone.png +0 -0
  77. package/resources/splash.png +0 -0
  78. package/resources/splash.png.md5 +1 -0
  79. package/scripts/build-android.sh +18 -0
  80. package/scripts/docker-start.sh +6 -0
  81. package/scripts/emulate-android.sh +17 -0
  82. package/scripts/env-android.sh +83 -0
  83. package/scripts/env-clean.sh +23 -0
  84. package/scripts/env-global.sh +154 -0
  85. package/scripts/install-android-sdk-tools.sh +73 -0
  86. package/scripts/ionic-update.sh +24 -0
  87. package/scripts/node/build-i18n.js +37 -0
  88. package/scripts/node/playground.ts +9 -0
  89. package/scripts/node/resources.js +108 -0
  90. package/scripts/release.sh +162 -0
  91. package/scripts/run-android.sh +59 -0
  92. package/scripts/test.sh +19 -0
  93. package/src/app/admin/admin-routing.module.ts +26 -0
  94. package/src/app/admin/admin.module.ts +20 -0
  95. package/src/app/admin/services/filter/person.filter.ts +86 -0
  96. package/src/app/admin/services/person.service.ts +244 -0
  97. package/src/app/admin/services/validator/person.validator.ts +86 -0
  98. package/src/app/admin/users/users.html +613 -0
  99. package/src/app/admin/users/users.module.ts +32 -0
  100. package/src/app/admin/users/users.scss +80 -0
  101. package/src/app/admin/users/users.ts +387 -0
  102. package/src/app/app-routing.module.ts +165 -0
  103. package/src/app/app.component.html +14 -0
  104. package/src/app/app.component.scss +4 -0
  105. package/src/app/app.component.ts +252 -0
  106. package/src/app/app.module.ts +355 -0
  107. package/src/app/core/about/about.modal.html +145 -0
  108. package/src/app/core/about/about.modal.scss +22 -0
  109. package/src/app/core/about/about.modal.ts +69 -0
  110. package/src/app/core/about/about.module.ts +14 -0
  111. package/src/app/core/account/account.module.ts +43 -0
  112. package/src/app/core/account/account.page.html +329 -0
  113. package/src/app/core/account/account.page.scss +20 -0
  114. package/src/app/core/account/account.page.ts +389 -0
  115. package/src/app/core/account/new-token.form.html +90 -0
  116. package/src/app/core/account/new-token.form.ts +99 -0
  117. package/src/app/core/account/new-token.modal.html +52 -0
  118. package/src/app/core/account/new-token.modal.ts +68 -0
  119. package/src/app/core/account/password/change-password.form.html +62 -0
  120. package/src/app/core/account/password/change-password.form.scss +0 -0
  121. package/src/app/core/account/password/change-password.form.ts +58 -0
  122. package/src/app/core/account/password/change-password.module.ts +14 -0
  123. package/src/app/core/account/password/change-password.page.html +41 -0
  124. package/src/app/core/account/password/change-password.page.scss +49 -0
  125. package/src/app/core/account/password/change-password.page.ts +158 -0
  126. package/src/app/core/account/token.table.html +160 -0
  127. package/src/app/core/account/token.table.scss +7 -0
  128. package/src/app/core/account/token.table.ts +160 -0
  129. package/src/app/core/auth/auth.form.html +108 -0
  130. package/src/app/core/auth/auth.form.scss +0 -0
  131. package/src/app/core/auth/auth.form.ts +165 -0
  132. package/src/app/core/auth/auth.modal.html +50 -0
  133. package/src/app/core/auth/auth.modal.scss +0 -0
  134. package/src/app/core/auth/auth.modal.ts +78 -0
  135. package/src/app/core/auth/auth.module.ts +35 -0
  136. package/src/app/core/auth/reset-password.modal.html +59 -0
  137. package/src/app/core/auth/reset-password.modal.ts +83 -0
  138. package/src/app/core/core.module.ts +72 -0
  139. package/src/app/core/core.testing.module.ts +80 -0
  140. package/src/app/core/form/array/form-array.ts +409 -0
  141. package/src/app/core/form/array/testing/form-array-test.module.ts +15 -0
  142. package/src/app/core/form/array/testing/form-array.test.html +196 -0
  143. package/src/app/core/form/array/testing/form-array.test.ts +119 -0
  144. package/src/app/core/form/buttons/form-buttons-bar.component.html +82 -0
  145. package/src/app/core/form/buttons/form-buttons-bar.component.scss +19 -0
  146. package/src/app/core/form/buttons/form-buttons-bar.component.ts +89 -0
  147. package/src/app/core/form/buttons/form-buttons-bar.module.ts +20 -0
  148. package/src/app/core/form/entity/editor.class.ts +295 -0
  149. package/src/app/core/form/entity/entity-editor-modal.class.ts +494 -0
  150. package/src/app/core/form/entity/entity-editor.class.ts +894 -0
  151. package/src/app/core/form/entity/entity-metadata.component.html +57 -0
  152. package/src/app/core/form/entity/entity-metadata.component.scss +40 -0
  153. package/src/app/core/form/entity/entity-metadata.component.ts +18 -0
  154. package/src/app/core/form/entity/entity.module.ts +20 -0
  155. package/src/app/core/form/entity/tab-editor.class.ts +224 -0
  156. package/src/app/core/form/form-container.class.ts +380 -0
  157. package/src/app/core/form/form.class.ts +377 -0
  158. package/src/app/core/form/form.module.ts +38 -0
  159. package/src/app/core/form/form.utils.ts +305 -0
  160. package/src/app/core/form/list/list.form.html +68 -0
  161. package/src/app/core/form/list/list.form.scss +40 -0
  162. package/src/app/core/form/list/list.form.ts +266 -0
  163. package/src/app/core/form/list/list.module.ts +20 -0
  164. package/src/app/core/form/properties/properties.form.html +160 -0
  165. package/src/app/core/form/properties/properties.form.scss +21 -0
  166. package/src/app/core/form/properties/properties.form.ts +331 -0
  167. package/src/app/core/form/properties/properties.module.ts +24 -0
  168. package/src/app/core/form/properties/properties.table.html +228 -0
  169. package/src/app/core/form/properties/properties.table.scss +0 -0
  170. package/src/app/core/form/properties/properties.table.ts +275 -0
  171. package/src/app/core/form/properties/properties.utils.ts +391 -0
  172. package/src/app/core/form/properties/property.validator.ts +82 -0
  173. package/src/app/core/form/properties/testing/properties-form.test.html +23 -0
  174. package/src/app/core/form/properties/testing/properties-form.test.ts +109 -0
  175. package/src/app/core/form/properties/testing/properties-form.testing.module.ts +14 -0
  176. package/src/app/core/form/text-popover/testing/text-popover.testing.html +50 -0
  177. package/src/app/core/form/text-popover/testing/text-popover.testing.module.ts +21 -0
  178. package/src/app/core/form/text-popover/testing/text-popover.testing.ts +76 -0
  179. package/src/app/core/form/text-popover/text-popover.component.html +89 -0
  180. package/src/app/core/form/text-popover/text-popover.component.scss +7 -0
  181. package/src/app/core/form/text-popover/text-popover.component.ts +176 -0
  182. package/src/app/core/form/text-popover/text-popover.module.ts +19 -0
  183. package/src/app/core/form/username/username.form.html +27 -0
  184. package/src/app/core/form/username/username.form.ts +44 -0
  185. package/src/app/core/form/username/username.module.ts +12 -0
  186. package/src/app/core/graphql/graphql.module.ts +7 -0
  187. package/src/app/core/graphql/graphql.service.ts +962 -0
  188. package/src/app/core/graphql/graphql.utils.ts +166 -0
  189. package/src/app/core/home/home.html +295 -0
  190. package/src/app/core/home/home.module.ts +27 -0
  191. package/src/app/core/home/home.scss +279 -0
  192. package/src/app/core/home/home.ts +422 -0
  193. package/src/app/core/icon/icon.component.html +19 -0
  194. package/src/app/core/icon/icon.component.ts +22 -0
  195. package/src/app/core/icon/icon.module.ts +13 -0
  196. package/src/app/core/install/install-upgrade-card.component.html +144 -0
  197. package/src/app/core/install/install-upgrade-card.component.scss +3 -0
  198. package/src/app/core/install/install-upgrade-card.component.ts +445 -0
  199. package/src/app/core/install/install-upgrade-card.module.ts +18 -0
  200. package/src/app/core/menu/menu.component.html +219 -0
  201. package/src/app/core/menu/menu.component.scss +304 -0
  202. package/src/app/core/menu/menu.component.ts +251 -0
  203. package/src/app/core/menu/menu.filter.ts +28 -0
  204. package/src/app/core/menu/menu.model.ts +356 -0
  205. package/src/app/core/menu/menu.module.ts +27 -0
  206. package/src/app/core/menu/menu.service.ts +727 -0
  207. package/src/app/core/menu/sub-menu-tab.directive.ts +99 -0
  208. package/src/app/core/menu/testing/menu-other.testing.ts +57 -0
  209. package/src/app/core/menu/testing/menu.testing.html +143 -0
  210. package/src/app/core/menu/testing/menu.testing.module.ts +52 -0
  211. package/src/app/core/menu/testing/menu.testing.scss +5 -0
  212. package/src/app/core/menu/testing/menu.testing.ts +175 -0
  213. package/src/app/core/offline/update-offline-mode-card.component.html +39 -0
  214. package/src/app/core/offline/update-offline-mode-card.component.scss +3 -0
  215. package/src/app/core/offline/update-offline-mode-card.component.ts +23 -0
  216. package/src/app/core/offline/update-offline-mode-card.module.ts +20 -0
  217. package/src/app/core/peer/select-peer.modal.html +317 -0
  218. package/src/app/core/peer/select-peer.modal.scss +41 -0
  219. package/src/app/core/peer/select-peer.modal.ts +366 -0
  220. package/src/app/core/peer/select-peer.module.ts +23 -0
  221. package/src/app/core/register/register-confirm.page.html +51 -0
  222. package/src/app/core/register/register-confirm.page.scss +56 -0
  223. package/src/app/core/register/register-confirm.page.ts +90 -0
  224. package/src/app/core/register/register.form.html +143 -0
  225. package/src/app/core/register/register.form.scss +10 -0
  226. package/src/app/core/register/register.form.ts +218 -0
  227. package/src/app/core/register/register.modal.html +66 -0
  228. package/src/app/core/register/register.modal.ts +50 -0
  229. package/src/app/core/register/register.module.ts +15 -0
  230. package/src/app/core/services/account.service.ts +1567 -0
  231. package/src/app/core/services/auth-guard.service.ts +70 -0
  232. package/src/app/core/services/base-entity-service.class.ts +659 -0
  233. package/src/app/core/services/base-graphql-service.class.ts +319 -0
  234. package/src/app/core/services/base58.ts +90 -0
  235. package/src/app/core/services/config/core.config.ts +263 -0
  236. package/src/app/core/services/config.service.ts +425 -0
  237. package/src/app/core/services/crypto.service.ts +126 -0
  238. package/src/app/core/services/errors.ts +80 -0
  239. package/src/app/core/services/local-settings.service.spec.ts +39 -0
  240. package/src/app/core/services/local-settings.service.ts +605 -0
  241. package/src/app/core/services/model/account.model.ts +188 -0
  242. package/src/app/core/services/model/config.model.ts +116 -0
  243. package/src/app/core/services/model/department.model.ts +34 -0
  244. package/src/app/core/services/model/entity.decorators.ts +110 -0
  245. package/src/app/core/services/model/entity.model.ts +409 -0
  246. package/src/app/core/services/model/filter.model.ts +127 -0
  247. package/src/app/core/services/model/history.model.ts +25 -0
  248. package/src/app/core/services/model/model.enum.ts +10 -0
  249. package/src/app/core/services/model/node-feature.model.ts +31 -0
  250. package/src/app/core/services/model/peer.model.ts +119 -0
  251. package/src/app/core/services/model/person.model.ts +122 -0
  252. package/src/app/core/services/model/referential.model.ts +253 -0
  253. package/src/app/core/services/model/settings.model.ts +37 -0
  254. package/src/app/core/services/model/token.model.ts +60 -0
  255. package/src/app/core/services/model/tree-item-entity.model.ts +230 -0
  256. package/src/app/core/services/network.service.spec.ts +47 -0
  257. package/src/app/core/services/network.service.ts +761 -0
  258. package/src/app/core/services/network.types.ts +7 -0
  259. package/src/app/core/services/network.utils.ts +83 -0
  260. package/src/app/core/services/pipes/account.pipes.ts +22 -0
  261. package/src/app/core/services/pipes/department-to-string.pipe.ts +13 -0
  262. package/src/app/core/services/pipes/person-to-string.pipe.ts +13 -0
  263. package/src/app/core/services/pipes/pipes.module.ts +30 -0
  264. package/src/app/core/services/pipes/referential-to-string.pipe.ts +18 -0
  265. package/src/app/core/services/pipes/usage-mode.pipes.ts +23 -0
  266. package/src/app/core/services/platform.service.spec.ts +50 -0
  267. package/src/app/core/services/platform.service.ts +694 -0
  268. package/src/app/core/services/storage/entities-storage.service.ts +557 -0
  269. package/src/app/core/services/storage/entity-store.class.ts +589 -0
  270. package/src/app/core/services/testing/local-settings.config.ts +35 -0
  271. package/src/app/core/services/testing/referential-filter.model.ts +28 -0
  272. package/src/app/core/services/testing/referential.validator.ts +58 -0
  273. package/src/app/core/services/testing/user-settings.config.ts +77 -0
  274. package/src/app/core/services/validator/account.validator.ts +50 -0
  275. package/src/app/core/services/validator/base.validator.class.ts +51 -0
  276. package/src/app/core/services/validator/local-settings.validator.ts +59 -0
  277. package/src/app/core/services/validator/user-settings.validator.ts +22 -0
  278. package/src/app/core/services/validator/user-token.validator.ts +54 -0
  279. package/src/app/core/settings/settings.module.ts +15 -0
  280. package/src/app/core/settings/settings.page.html +300 -0
  281. package/src/app/core/settings/settings.page.ts +455 -0
  282. package/src/app/core/table/async-table.class.ts +2019 -0
  283. package/src/app/core/table/column/actions-column.component.html +219 -0
  284. package/src/app/core/table/column/actions-column.component.scss +17 -0
  285. package/src/app/core/table/column/actions-column.component.ts +83 -0
  286. package/src/app/core/table/column/nav-actions-column.component.html +119 -0
  287. package/src/app/core/table/column/nav-actions-column.component.ts +108 -0
  288. package/src/app/core/table/column/row-field.component.html +43 -0
  289. package/src/app/core/table/column/row-field.component.scss +0 -0
  290. package/src/app/core/table/column/row-field.component.ts +63 -0
  291. package/src/app/core/table/entities-async-table-datasource.class.ts +501 -0
  292. package/src/app/core/table/entities-table-datasource.class.ts +499 -0
  293. package/src/app/core/table/memory-table.class.ts +56 -0
  294. package/src/app/core/table/table-select-columns.component.html +56 -0
  295. package/src/app/core/table/table-select-columns.component.ts +49 -0
  296. package/src/app/core/table/table.class.ts +2080 -0
  297. package/src/app/core/table/table.model.ts +39 -0
  298. package/src/app/core/table/table.module.ts +28 -0
  299. package/src/app/core/table/table.pipes.ts +87 -0
  300. package/src/app/core/table/table.utils.ts +42 -0
  301. package/src/app/core/table/testing/multi-table.testing.html +456 -0
  302. package/src/app/core/table/testing/multi-table.testing.ts +263 -0
  303. package/src/app/core/table/testing/table-validator.service.ts +29 -0
  304. package/src/app/core/table/testing/table.testing.html +556 -0
  305. package/src/app/core/table/testing/table.testing.module.ts +16 -0
  306. package/src/app/core/table/testing/table.testing.scss +32 -0
  307. package/src/app/core/table/testing/table.testing.ts +329 -0
  308. package/src/app/core/table/testing/table2-validator.service.ts +19 -0
  309. package/src/app/core/table/testing/table2.testing.html +470 -0
  310. package/src/app/core/table/testing/table2.testing.scss +25 -0
  311. package/src/app/core/table/testing/table2.testing.ts +274 -0
  312. package/src/app/shared/alerts.ts +296 -0
  313. package/src/app/shared/audio/audio.testing.html +29 -0
  314. package/src/app/shared/audio/audio.testing.module.ts +21 -0
  315. package/src/app/shared/audio/audio.testing.ts +27 -0
  316. package/src/app/shared/audio/audio.ts +273 -0
  317. package/src/app/shared/base64.utils.ts +66 -0
  318. package/src/app/shared/capacitor/keyboard.ts +38 -0
  319. package/src/app/shared/capacitor/plugins.ts +12 -0
  320. package/src/app/shared/constants.ts +19 -0
  321. package/src/app/shared/dates.ts +206 -0
  322. package/src/app/shared/debug/debug-service.class.ts +7 -0
  323. package/src/app/shared/debug/debug.component.html +13 -0
  324. package/src/app/shared/debug/debug.component.scss +21 -0
  325. package/src/app/shared/debug/debug.component.spec.ts +24 -0
  326. package/src/app/shared/debug/debug.component.ts +25 -0
  327. package/src/app/shared/debug/debug.module.ts +14 -0
  328. package/src/app/shared/directives/autofocus.directive.ts +93 -0
  329. package/src/app/shared/directives/autoresize.directive.ts +67 -0
  330. package/src/app/shared/directives/autotitle.directive.ts +17 -0
  331. package/src/app/shared/directives/directives.module.ts +16 -0
  332. package/src/app/shared/directives/drag-and-drop.directive.ts +46 -0
  333. package/src/app/shared/directives/ng-var.directive.ts +31 -0
  334. package/src/app/shared/directives/resizable/resizable.component.ts +48 -0
  335. package/src/app/shared/directives/resizable/resizable.directive.ts +43 -0
  336. package/src/app/shared/directives/resizable/resizable.module.ts +9 -0
  337. package/src/app/shared/directives/resizable/resizable.style.scss +37 -0
  338. package/src/app/shared/directives/resizable/resizable.template.html +6 -0
  339. package/src/app/shared/directives/throttled-click.directive.ts +36 -0
  340. package/src/app/shared/events.ts +93 -0
  341. package/src/app/shared/file/csv.utils.ts +123 -0
  342. package/src/app/shared/file/file.service.ts +129 -0
  343. package/src/app/shared/file/file.utils.ts +142 -0
  344. package/src/app/shared/file/images.utils.ts +214 -0
  345. package/src/app/shared/file/json.utils.ts +82 -0
  346. package/src/app/shared/file/uri.utils.ts +31 -0
  347. package/src/app/shared/file/url.utils.ts +163 -0
  348. package/src/app/shared/focusable.ts +8 -0
  349. package/src/app/shared/form/field.component.html +380 -0
  350. package/src/app/shared/form/field.component.scss +7 -0
  351. package/src/app/shared/form/field.component.ts +344 -0
  352. package/src/app/shared/form/field.model.ts +158 -0
  353. package/src/app/shared/form/loading-spinner.ts +16 -0
  354. package/src/app/shared/forms.ts +577 -0
  355. package/src/app/shared/functions.spec.ts +197 -0
  356. package/src/app/shared/functions.ts +694 -0
  357. package/src/app/shared/geolocation/geolocation.utils.ts +105 -0
  358. package/src/app/shared/gesture/gesture-config.ts +43 -0
  359. package/src/app/shared/gesture/hammer.utils.ts +14 -0
  360. package/src/app/shared/graph/colors.utils.ts +69 -0
  361. package/src/app/shared/graph/graph-colors.ts +270 -0
  362. package/src/app/shared/guard/component-dirty.guard.ts +67 -0
  363. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.html +11 -0
  364. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.scss +37 -0
  365. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.ts +14 -0
  366. package/src/app/shared/hotkeys/hotkeys.service.ts +165 -0
  367. package/src/app/shared/hotkeys/shared-hotkeys.module.ts +15 -0
  368. package/src/app/shared/http/http.utils.ts +95 -0
  369. package/src/app/shared/image/gallery/image-gallery.component.html +282 -0
  370. package/src/app/shared/image/gallery/image-gallery.component.scss +218 -0
  371. package/src/app/shared/image/gallery/image-gallery.component.ts +434 -0
  372. package/src/app/shared/image/gallery/image-gallery.module.ts +35 -0
  373. package/src/app/shared/image/gallery/testing/gallegry.model.testing.ts +23 -0
  374. package/src/app/shared/image/gallery/testing/gallery.service.testing.ts +99 -0
  375. package/src/app/shared/image/gallery/testing/gallery.testing.html +27 -0
  376. package/src/app/shared/image/gallery/testing/gallery.testing.module.ts +39 -0
  377. package/src/app/shared/image/gallery/testing/gallery.testing.ts +34 -0
  378. package/src/app/shared/image/image.model.ts +8 -0
  379. package/src/app/shared/image/image.module.ts +12 -0
  380. package/src/app/shared/image/image.service.ts +111 -0
  381. package/src/app/shared/image/image.testing.module.ts +16 -0
  382. package/src/app/shared/inputs.ts +330 -0
  383. package/src/app/shared/interceptors/progess.interceptor.ts +24 -0
  384. package/src/app/shared/logging/log-level.model.ts +53 -0
  385. package/src/app/shared/logging/logger.model.ts +117 -0
  386. package/src/app/shared/logging/logging-service.class.ts +131 -0
  387. package/src/app/shared/logging/logging-service.config.ts +29 -0
  388. package/src/app/shared/logging/logging-service.module.ts +19 -0
  389. package/src/app/shared/markdown/markdown.component.html +55 -0
  390. package/src/app/shared/markdown/markdown.component.scss +75 -0
  391. package/src/app/shared/markdown/markdown.component.ts +350 -0
  392. package/src/app/shared/markdown/markdown.directive.ts +28 -0
  393. package/src/app/shared/markdown/markdown.modal.html +42 -0
  394. package/src/app/shared/markdown/markdown.modal.ts +91 -0
  395. package/src/app/shared/markdown/markdown.module.ts +65 -0
  396. package/src/app/shared/markdown/markdown.service.ts +234 -0
  397. package/src/app/shared/markdown/markdown.utils.ts +90 -0
  398. package/src/app/shared/markdown/testing/markdown.test.html +50 -0
  399. package/src/app/shared/markdown/testing/markdown.test.ts +49 -0
  400. package/src/app/shared/markdown/testing/markdown.testing.module.ts +22 -0
  401. package/src/app/shared/material/autocomplete/material.autocomplete.config.ts +127 -0
  402. package/src/app/shared/material/autocomplete/material.autocomplete.html +400 -0
  403. package/src/app/shared/material/autocomplete/material.autocomplete.module.ts +41 -0
  404. package/src/app/shared/material/autocomplete/material.autocomplete.scss +54 -0
  405. package/src/app/shared/material/autocomplete/material.autocomplete.ts +1375 -0
  406. package/src/app/shared/material/autocomplete/material.autocomplete.utils.ts +21 -0
  407. package/src/app/shared/material/autocomplete/testing/autocomplete.test.html +1164 -0
  408. package/src/app/shared/material/autocomplete/testing/autocomplete.test.spec.ts +33 -0
  409. package/src/app/shared/material/autocomplete/testing/autocomplete.test.ts +272 -0
  410. package/src/app/shared/material/badge/badge.directive.ts +217 -0
  411. package/src/app/shared/material/badge/badge.module.ts +12 -0
  412. package/src/app/shared/material/badge/badge.test.html +275 -0
  413. package/src/app/shared/material/badge/badge.test.ts +34 -0
  414. package/src/app/shared/material/boolean/boolean.module.ts +36 -0
  415. package/src/app/shared/material/boolean/material.boolean.html +271 -0
  416. package/src/app/shared/material/boolean/material.boolean.scss +27 -0
  417. package/src/app/shared/material/boolean/material.boolean.ts +343 -0
  418. package/src/app/shared/material/boolean/testing/boolean.test.page.html +469 -0
  419. package/src/app/shared/material/boolean/testing/boolean.test.page.ts +66 -0
  420. package/src/app/shared/material/chips/chips.module.ts +38 -0
  421. package/src/app/shared/material/chips/material.chips.html +233 -0
  422. package/src/app/shared/material/chips/material.chips.scss +67 -0
  423. package/src/app/shared/material/chips/material.chips.ts +834 -0
  424. package/src/app/shared/material/chips/testing/chips.test.html +207 -0
  425. package/src/app/shared/material/chips/testing/chips.test.ts +169 -0
  426. package/src/app/shared/material/datetime/datetime.module.ts +42 -0
  427. package/src/app/shared/material/datetime/material.date.html +186 -0
  428. package/src/app/shared/material/datetime/material.date.scss +17 -0
  429. package/src/app/shared/material/datetime/material.date.ts +512 -0
  430. package/src/app/shared/material/datetime/material.dateshort.html +194 -0
  431. package/src/app/shared/material/datetime/material.dateshort.scss +23 -0
  432. package/src/app/shared/material/datetime/material.dateshort.ts +497 -0
  433. package/src/app/shared/material/datetime/material.datetime.html +325 -0
  434. package/src/app/shared/material/datetime/material.datetime.scss +87 -0
  435. package/src/app/shared/material/datetime/material.datetime.ts +758 -0
  436. package/src/app/shared/material/datetime/testing/mat-date-time.test.html +794 -0
  437. package/src/app/shared/material/datetime/testing/mat-date-time.test.ts +155 -0
  438. package/src/app/shared/material/datetime/testing/mat-date.test.html +564 -0
  439. package/src/app/shared/material/datetime/testing/mat-date.test.ts +145 -0
  440. package/src/app/shared/material/datetime/testing/mat-dateshort.test.html +530 -0
  441. package/src/app/shared/material/datetime/testing/mat-dateshort.test.ts +133 -0
  442. package/src/app/shared/material/duration/duration.module.ts +33 -0
  443. package/src/app/shared/material/duration/duration.utils.ts +18 -0
  444. package/src/app/shared/material/duration/material.duration.html +116 -0
  445. package/src/app/shared/material/duration/material.duration.scss +28 -0
  446. package/src/app/shared/material/duration/material.duration.ts +308 -0
  447. package/src/app/shared/material/duration/testing/mat-duration.test.html +170 -0
  448. package/src/app/shared/material/duration/testing/mat-duration.test.ts +88 -0
  449. package/src/app/shared/material/latlong/latlong.utils.ts +376 -0
  450. package/src/app/shared/material/latlong/material.latlong-input.html +95 -0
  451. package/src/app/shared/material/latlong/material.latlong-input.scss +66 -0
  452. package/src/app/shared/material/latlong/material.latlong-input.ts +445 -0
  453. package/src/app/shared/material/latlong/material.latlong.html +90 -0
  454. package/src/app/shared/material/latlong/material.latlong.module.ts +37 -0
  455. package/src/app/shared/material/latlong/material.latlong.scss +0 -0
  456. package/src/app/shared/material/latlong/material.latlong.ts +203 -0
  457. package/src/app/shared/material/latlong/testing/latlong.test.html +1008 -0
  458. package/src/app/shared/material/latlong/testing/latlong.test.ts +144 -0
  459. package/src/app/shared/material/material.animations.ts +269 -0
  460. package/src/app/shared/material/material.config.ts +5 -0
  461. package/src/app/shared/material/material.module.ts +94 -0
  462. package/src/app/shared/material/material.testing.module.ts +192 -0
  463. package/src/app/shared/material/memory/memory.utils.ts +57 -0
  464. package/src/app/shared/material/numpad/numpad.animation.ts +1 -0
  465. package/src/app/shared/material/numpad/numpad.append-to-input.directive.ts +110 -0
  466. package/src/app/shared/material/numpad/numpad.component.ts +73 -0
  467. package/src/app/shared/material/numpad/numpad.container.html +37 -0
  468. package/src/app/shared/material/numpad/numpad.container.scss +55 -0
  469. package/src/app/shared/material/numpad/numpad.container.ts +152 -0
  470. package/src/app/shared/material/numpad/numpad.content.html +13 -0
  471. package/src/app/shared/material/numpad/numpad.content.ts +10 -0
  472. package/src/app/shared/material/numpad/numpad.directive.ts +159 -0
  473. package/src/app/shared/material/numpad/numpad.dom-service.ts +35 -0
  474. package/src/app/shared/material/numpad/numpad.model.ts +53 -0
  475. package/src/app/shared/material/numpad/numpad.module.ts +18 -0
  476. package/src/app/shared/material/numpad/testing/numpad.test.html +146 -0
  477. package/src/app/shared/material/numpad/testing/numpad.test.ts +44 -0
  478. package/src/app/shared/material/paginator/material.paginator-i18n.ts +47 -0
  479. package/src/app/shared/material/stepper/material.stepper-i18n.ts +17 -0
  480. package/src/app/shared/material/swipe/material.swipe.html +85 -0
  481. package/src/app/shared/material/swipe/material.swipe.scss +55 -0
  482. package/src/app/shared/material/swipe/material.swipe.ts +366 -0
  483. package/src/app/shared/material/swipe/swipe.module.ts +29 -0
  484. package/src/app/shared/material/swipe/testing/swipe.test.html +112 -0
  485. package/src/app/shared/material/swipe/testing/swipe.test.ts +74 -0
  486. package/src/app/shared/material/test/test-component.css +22 -0
  487. package/src/app/shared/material/test/test-component.html +40 -0
  488. package/src/app/shared/material/test/test-component.ts +295 -0
  489. package/src/app/shared/material/testing/common.test.html +227 -0
  490. package/src/app/shared/material/testing/common.test.ts +126 -0
  491. package/src/app/shared/material/text/testing/text-form.testing.html +213 -0
  492. package/src/app/shared/material/text/testing/text-form.testing.ts +30 -0
  493. package/src/app/shared/material/text/text-form.component.html +63 -0
  494. package/src/app/shared/material/text/text-form.component.scss +8 -0
  495. package/src/app/shared/material/text/text-form.component.ts +177 -0
  496. package/src/app/shared/material/text/text-form.module.ts +36 -0
  497. package/src/app/shared/modules.ts +12 -0
  498. package/src/app/shared/named-filter/named-filter-selector.component.html +77 -0
  499. package/src/app/shared/named-filter/named-filter-selector.component.scss +3 -0
  500. package/src/app/shared/named-filter/named-filter-selector.component.ts +287 -0
  501. package/src/app/shared/named-filter/named-filter.model.ts +64 -0
  502. package/src/app/shared/named-filter/named-filter.module.ts +15 -0
  503. package/src/app/shared/named-filter/named-filter.service.ts +100 -0
  504. package/src/app/shared/named-filter/testing/named-filter-selector.testing.html +61 -0
  505. package/src/app/shared/named-filter/testing/named-filter-selector.testing.ts +80 -0
  506. package/src/app/shared/named-filter/testing/named-filter.testing.module.ts +20 -0
  507. package/src/app/shared/named-filter/testing/named-filter.testing.service.ts +83 -0
  508. package/src/app/shared/observables.ts +139 -0
  509. package/src/app/shared/pipes/arrays.pipe.ts +153 -0
  510. package/src/app/shared/pipes/badge.pipes.ts +17 -0
  511. package/src/app/shared/pipes/colors.pipe.ts +24 -0
  512. package/src/app/shared/pipes/date-diff-duration.pipe.ts +53 -0
  513. package/src/app/shared/pipes/date-format.pipe.ts +73 -0
  514. package/src/app/shared/pipes/date-from-now.pipe.ts +17 -0
  515. package/src/app/shared/pipes/dates.pipe.ts +13 -0
  516. package/src/app/shared/pipes/display-with.pipe.ts +13 -0
  517. package/src/app/shared/pipes/duration.pipe.spec.ts +41 -0
  518. package/src/app/shared/pipes/duration.pipe.ts +28 -0
  519. package/src/app/shared/pipes/file-size.pipe.ts +50 -0
  520. package/src/app/shared/pipes/form.pipes.ts +209 -0
  521. package/src/app/shared/pipes/highlight.pipe.ts +41 -0
  522. package/src/app/shared/pipes/html.pipes.ts +49 -0
  523. package/src/app/shared/pipes/latlong-format.pipe.ts +28 -0
  524. package/src/app/shared/pipes/maps.pipe.ts +41 -0
  525. package/src/app/shared/pipes/maskito.pipe.ts +68 -0
  526. package/src/app/shared/pipes/math.pipes.ts +46 -0
  527. package/src/app/shared/pipes/ng-init.pipe.ts +13 -0
  528. package/src/app/shared/pipes/number-format.pipe.ts +11 -0
  529. package/src/app/shared/pipes/observable.pipes.ts +45 -0
  530. package/src/app/shared/pipes/pipes.module.ts +162 -0
  531. package/src/app/shared/pipes/property.pipes.ts +115 -0
  532. package/src/app/shared/pipes/selection.pipes.ts +165 -0
  533. package/src/app/shared/pipes/string.pipes.ts +128 -0
  534. package/src/app/shared/pipes/translate-context.pipe.ts +27 -0
  535. package/src/app/shared/pipes/types.pipes.ts +52 -0
  536. package/src/app/shared/pipes/url.pipes.ts +36 -0
  537. package/src/app/shared/platforms.ts +99 -0
  538. package/src/app/shared/print/print.service.ts +337 -0
  539. package/src/app/shared/regexps.ts +112 -0
  540. package/src/app/shared/rx-state/rx-state.decorators.ts +281 -0
  541. package/src/app/shared/rx-state/rx-state.module.ts +11 -0
  542. package/src/app/shared/rx-state/rx-state.types.ts +5 -0
  543. package/src/app/shared/services/entity-service.class.ts +120 -0
  544. package/src/app/shared/services/job.utils.ts +124 -0
  545. package/src/app/shared/services/memory-entity-service.class.ts +435 -0
  546. package/src/app/shared/services/progress-bar.service.ts +40 -0
  547. package/src/app/shared/services/startable-observable-service.class.ts +129 -0
  548. package/src/app/shared/services/startable-service.class.ts +120 -0
  549. package/src/app/shared/services/storage.utils.ts +53 -0
  550. package/src/app/shared/services/translate-context.service.ts +112 -0
  551. package/src/app/shared/services/validator-service.class.ts +13 -0
  552. package/src/app/shared/services.ts +134 -0
  553. package/src/app/shared/shared-routing.module.ts +69 -0
  554. package/src/app/shared/shared.module.spec.ts +13 -0
  555. package/src/app/shared/shared.module.ts +168 -0
  556. package/src/app/shared/shared.testing.module.ts +61 -0
  557. package/src/app/shared/storage/storage-explorer.component.html +160 -0
  558. package/src/app/shared/storage/storage-explorer.component.scss +37 -0
  559. package/src/app/shared/storage/storage-explorer.component.spec.ts +24 -0
  560. package/src/app/shared/storage/storage-explorer.component.ts +268 -0
  561. package/src/app/shared/storage/storage-explorer.module.ts +24 -0
  562. package/src/app/shared/storage/storage-explorer.testing-routing.module.ts +19 -0
  563. package/src/app/shared/storage/storage-explorer.testing.module.ts +19 -0
  564. package/src/app/shared/storage/storage.service.ts +131 -0
  565. package/src/app/shared/storage/storage.utils.ts +25 -0
  566. package/src/app/shared/testing/maskito.test.html +40 -0
  567. package/src/app/shared/testing/maskito.test.ts +33 -0
  568. package/src/app/shared/testing/observable.test.html +53 -0
  569. package/src/app/shared/testing/observable.test.scss +3 -0
  570. package/src/app/shared/testing/observable.test.ts +101 -0
  571. package/src/app/shared/testing/tests.page.html +22 -0
  572. package/src/app/shared/testing/tests.page.ts +32 -0
  573. package/src/app/shared/toast/toast.testing.html +50 -0
  574. package/src/app/shared/toast/toast.testing.module.ts +22 -0
  575. package/src/app/shared/toast/toast.testing.ts +52 -0
  576. package/src/app/shared/toast/toasts.ts +161 -0
  577. package/src/app/shared/toolbar/modal-toolbar.html +30 -0
  578. package/src/app/shared/toolbar/modal-toolbar.scss +0 -0
  579. package/src/app/shared/toolbar/modal-toolbar.ts +64 -0
  580. package/src/app/shared/toolbar/toolbar.html +68 -0
  581. package/src/app/shared/toolbar/toolbar.module.ts +18 -0
  582. package/src/app/shared/toolbar/toolbar.scss +0 -0
  583. package/src/app/shared/toolbar/toolbar.ts +262 -0
  584. package/src/app/shared/types.ts +44 -0
  585. package/src/app/shared/upload-file/testing/upload-file.testing.html +30 -0
  586. package/src/app/shared/upload-file/testing/upload-file.testing.module.ts +21 -0
  587. package/src/app/shared/upload-file/testing/upload-file.testing.ts +65 -0
  588. package/src/app/shared/upload-file/upload-file-popover.component.html +46 -0
  589. package/src/app/shared/upload-file/upload-file-popover.component.scss +6 -0
  590. package/src/app/shared/upload-file/upload-file-popover.component.ts +115 -0
  591. package/src/app/shared/upload-file/upload-file.component.html +57 -0
  592. package/src/app/shared/upload-file/upload-file.component.scss +60 -0
  593. package/src/app/shared/upload-file/upload-file.component.ts +222 -0
  594. package/src/app/shared/upload-file/upload-file.model.ts +40 -0
  595. package/src/app/shared/validator/form-error-adapter.class.ts +136 -0
  596. package/src/app/shared/validator/validators.ts +725 -0
  597. package/src/app/shared/version/versions.ts +89 -0
  598. package/src/app/social/job/job.module.ts +14 -0
  599. package/src/app/social/job/progression/job-progression.component.html +19 -0
  600. package/src/app/social/job/progression/job-progression.component.scss +15 -0
  601. package/src/app/social/job/progression/job-progression.component.ts +39 -0
  602. package/src/app/social/job/progression/job-progression.icon.html +30 -0
  603. package/src/app/social/job/progression/job-progression.icon.scss +7 -0
  604. package/src/app/social/job/progression/job-progression.icon.ts +276 -0
  605. package/src/app/social/job/progression/job-progression.list.html +25 -0
  606. package/src/app/social/job/progression/job-progression.list.scss +17 -0
  607. package/src/app/social/job/progression/job-progression.list.ts +40 -0
  608. package/src/app/social/job/progression/job-progression.model.ts +26 -0
  609. package/src/app/social/job/progression/job-progression.service.ts +97 -0
  610. package/src/app/social/job/testing/job-progression.testing.html +11 -0
  611. package/src/app/social/job/testing/job-progression.testing.service.ts +33 -0
  612. package/src/app/social/job/testing/job-progression.testing.ts +28 -0
  613. package/src/app/social/job/testing/job.testing.module.ts +13 -0
  614. package/src/app/social/message/message.form.html +71 -0
  615. package/src/app/social/message/message.form.scss +6 -0
  616. package/src/app/social/message/message.form.ts +128 -0
  617. package/src/app/social/message/message.modal.html +68 -0
  618. package/src/app/social/message/message.modal.ts +117 -0
  619. package/src/app/social/message/message.model.ts +78 -0
  620. package/src/app/social/message/message.module.ts +14 -0
  621. package/src/app/social/message/message.service.ts +104 -0
  622. package/src/app/social/social.errors.ts +10 -0
  623. package/src/app/social/social.module.ts +23 -0
  624. package/src/app/social/social.testing.module.ts +33 -0
  625. package/src/app/social/user-event/notification/user-event-notification.icon.html +17 -0
  626. package/src/app/social/user-event/notification/user-event-notification.icon.ts +112 -0
  627. package/src/app/social/user-event/notification/user-event-notification.list.html +142 -0
  628. package/src/app/social/user-event/notification/user-event-notification.list.scss +73 -0
  629. package/src/app/social/user-event/notification/user-event-notification.list.ts +270 -0
  630. package/src/app/social/user-event/testing/user-event.testing.html +26 -0
  631. package/src/app/social/user-event/testing/user-event.testing.model.ts +142 -0
  632. package/src/app/social/user-event/testing/user-event.testing.module.ts +13 -0
  633. package/src/app/social/user-event/testing/user-event.testing.service.ts +161 -0
  634. package/src/app/social/user-event/testing/user-event.testing.ts +282 -0
  635. package/src/app/social/user-event/user-event.model.ts +55 -0
  636. package/src/app/social/user-event/user-event.module.ts +15 -0
  637. package/src/app/social/user-event/user-event.service.ts +686 -0
  638. package/src/assets/manifest.json +1 -1
  639. package/src/browserslist +9 -0
  640. package/src/environments/environment.class.ts +106 -0
  641. package/src/environments/environment.loader.ts +90 -0
  642. package/src/environments/environment.prod.ts +49 -0
  643. package/src/environments/environment.test.ts +92 -0
  644. package/src/environments/environment.ts +126 -0
  645. package/src/favicon.ico +0 -0
  646. package/src/global.scss +13 -0
  647. package/src/index.html +76 -0
  648. package/src/main.ts +18 -0
  649. package/src/polyfills.ts +34 -0
  650. package/src/schema.graphql +4381 -0
  651. package/src/service-worker.js +31 -0
  652. package/src/test.ts +30 -0
  653. package/tsconfig.app.json +15 -0
  654. package/tsconfig.json +47 -0
  655. package/tsconfig.spec.json +18 -0
  656. package/esm2022/public_api.mjs +0 -380
  657. package/esm2022/src/app/admin/admin-routing.module.mjs +0 -34
  658. package/esm2022/src/app/admin/admin.module.mjs +0 -32
  659. package/esm2022/src/app/admin/services/filter/person.filter.mjs +0 -76
  660. package/esm2022/src/app/admin/services/person.service.mjs +0 -184
  661. package/esm2022/src/app/admin/services/validator/person.validator.mjs +0 -72
  662. package/esm2022/src/app/admin/users/users.mjs +0 -379
  663. package/esm2022/src/app/admin/users/users.module.mjs +0 -56
  664. package/esm2022/src/app/core/about/about.modal.mjs +0 -86
  665. package/esm2022/src/app/core/about/about.module.mjs +0 -22
  666. package/esm2022/src/app/core/account/account.module.mjs +0 -75
  667. package/esm2022/src/app/core/account/account.page.mjs +0 -364
  668. package/esm2022/src/app/core/account/new-token.form.mjs +0 -106
  669. package/esm2022/src/app/core/account/new-token.modal.mjs +0 -66
  670. package/esm2022/src/app/core/account/password/change-password.form.mjs +0 -63
  671. package/esm2022/src/app/core/account/password/change-password.module.mjs +0 -22
  672. package/esm2022/src/app/core/account/password/change-password.page.mjs +0 -150
  673. package/esm2022/src/app/core/account/token.table.mjs +0 -157
  674. package/esm2022/src/app/core/auth/auth.form.mjs +0 -159
  675. package/esm2022/src/app/core/auth/auth.modal.mjs +0 -76
  676. package/esm2022/src/app/core/auth/auth.module.mjs +0 -56
  677. package/esm2022/src/app/core/auth/reset-password.modal.mjs +0 -89
  678. package/esm2022/src/app/core/core.module.mjs +0 -151
  679. package/esm2022/src/app/core/core.testing.module.mjs +0 -107
  680. package/esm2022/src/app/core/form/array/form-array.mjs +0 -328
  681. package/esm2022/src/app/core/form/array/testing/form-array-test.module.mjs +0 -23
  682. package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +0 -94
  683. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +0 -108
  684. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +0 -31
  685. package/esm2022/src/app/core/form/entity/editor.class.mjs +0 -268
  686. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +0 -420
  687. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +0 -741
  688. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +0 -24
  689. package/esm2022/src/app/core/form/entity/entity.module.mjs +0 -32
  690. package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +0 -190
  691. package/esm2022/src/app/core/form/form-container.class.mjs +0 -340
  692. package/esm2022/src/app/core/form/form.class.mjs +0 -337
  693. package/esm2022/src/app/core/form/form.module.mjs +0 -70
  694. package/esm2022/src/app/core/form/form.utils.mjs +0 -205
  695. package/esm2022/src/app/core/form/list/list.form.mjs +0 -235
  696. package/esm2022/src/app/core/form/list/list.module.mjs +0 -31
  697. package/esm2022/src/app/core/form/properties/properties.form.mjs +0 -317
  698. package/esm2022/src/app/core/form/properties/properties.module.mjs +0 -37
  699. package/esm2022/src/app/core/form/properties/properties.table.mjs +0 -264
  700. package/esm2022/src/app/core/form/properties/properties.utils.mjs +0 -304
  701. package/esm2022/src/app/core/form/properties/property.validator.mjs +0 -70
  702. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +0 -104
  703. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +0 -23
  704. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +0 -73
  705. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +0 -30
  706. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +0 -161
  707. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +0 -31
  708. package/esm2022/src/app/core/form/username/username.form.mjs +0 -55
  709. package/esm2022/src/app/core/form/username/username.module.mjs +0 -20
  710. package/esm2022/src/app/core/graphql/graphql.module.mjs +0 -14
  711. package/esm2022/src/app/core/graphql/graphql.service.mjs +0 -781
  712. package/esm2022/src/app/core/graphql/graphql.utils.mjs +0 -119
  713. package/esm2022/src/app/core/home/home.mjs +0 -382
  714. package/esm2022/src/app/core/home/home.module.mjs +0 -46
  715. package/esm2022/src/app/core/icon/icon.component.mjs +0 -40
  716. package/esm2022/src/app/core/icon/icon.module.mjs +0 -20
  717. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +0 -394
  718. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +0 -31
  719. package/esm2022/src/app/core/menu/menu.component.mjs +0 -258
  720. package/esm2022/src/app/core/menu/menu.model.mjs +0 -272
  721. package/esm2022/src/app/core/menu/menu.module.mjs +0 -47
  722. package/esm2022/src/app/core/menu/menu.service.mjs +0 -666
  723. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +0 -109
  724. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +0 -50
  725. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +0 -158
  726. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +0 -60
  727. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +0 -28
  728. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +0 -31
  729. package/esm2022/src/app/core/peer/select-peer.modal.mjs +0 -344
  730. package/esm2022/src/app/core/peer/select-peer.module.mjs +0 -36
  731. package/esm2022/src/app/core/register/register-confirm.page.mjs +0 -90
  732. package/esm2022/src/app/core/register/register.form.mjs +0 -194
  733. package/esm2022/src/app/core/register/register.modal.mjs +0 -55
  734. package/esm2022/src/app/core/register/register.module.mjs +0 -23
  735. package/esm2022/src/app/core/services/account.service.mjs +0 -1358
  736. package/esm2022/src/app/core/services/auth-guard.service.mjs +0 -74
  737. package/esm2022/src/app/core/services/base-entity-service.class.mjs +0 -485
  738. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +0 -230
  739. package/esm2022/src/app/core/services/base58.mjs +0 -83
  740. package/esm2022/src/app/core/services/config/core.config.mjs +0 -258
  741. package/esm2022/src/app/core/services/config.service.mjs +0 -384
  742. package/esm2022/src/app/core/services/crypto.service.mjs +0 -107
  743. package/esm2022/src/app/core/services/errors.mjs +0 -54
  744. package/esm2022/src/app/core/services/local-settings.service.mjs +0 -516
  745. package/esm2022/src/app/core/services/model/account.model.mjs +0 -178
  746. package/esm2022/src/app/core/services/model/config.model.mjs +0 -107
  747. package/esm2022/src/app/core/services/model/department.model.mjs +0 -35
  748. package/esm2022/src/app/core/services/model/entity.decorators.mjs +0 -97
  749. package/esm2022/src/app/core/services/model/entity.model.mjs +0 -338
  750. package/esm2022/src/app/core/services/model/filter.model.mjs +0 -93
  751. package/esm2022/src/app/core/services/model/history.model.mjs +0 -2
  752. package/esm2022/src/app/core/services/model/model.enum.mjs +0 -11
  753. package/esm2022/src/app/core/services/model/node-feature.model.mjs +0 -31
  754. package/esm2022/src/app/core/services/model/peer.model.mjs +0 -113
  755. package/esm2022/src/app/core/services/model/person.model.mjs +0 -114
  756. package/esm2022/src/app/core/services/model/referential.model.mjs +0 -205
  757. package/esm2022/src/app/core/services/model/settings.model.mjs +0 -6
  758. package/esm2022/src/app/core/services/model/token.model.mjs +0 -57
  759. package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +0 -195
  760. package/esm2022/src/app/core/services/network.service.mjs +0 -638
  761. package/esm2022/src/app/core/services/network.types.mjs +0 -2
  762. package/esm2022/src/app/core/services/network.utils.mjs +0 -35
  763. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +0 -38
  764. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +0 -23
  765. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +0 -23
  766. package/esm2022/src/app/core/services/pipes/pipes.module.mjs +0 -54
  767. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +0 -21
  768. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +0 -37
  769. package/esm2022/src/app/core/services/platform.service.mjs +0 -627
  770. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +0 -427
  771. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +0 -450
  772. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +0 -25
  773. package/esm2022/src/app/core/services/testing/referential.validator.mjs +0 -46
  774. package/esm2022/src/app/core/services/validator/account.validator.mjs +0 -45
  775. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +0 -49
  776. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +0 -57
  777. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +0 -27
  778. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +0 -55
  779. package/esm2022/src/app/core/settings/settings.module.mjs +0 -23
  780. package/esm2022/src/app/core/settings/settings.page.mjs +0 -403
  781. package/esm2022/src/app/core/table/async-table.class.mjs +0 -1811
  782. package/esm2022/src/app/core/table/column/actions-column.component.mjs +0 -130
  783. package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +0 -117
  784. package/esm2022/src/app/core/table/column/row-field.component.mjs +0 -116
  785. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +0 -404
  786. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +0 -405
  787. package/esm2022/src/app/core/table/memory-table.class.mjs +0 -57
  788. package/esm2022/src/app/core/table/table-select-columns.component.mjs +0 -46
  789. package/esm2022/src/app/core/table/table.class.mjs +0 -1867
  790. package/esm2022/src/app/core/table/table.model.mjs +0 -21
  791. package/esm2022/src/app/core/table/table.module.mjs +0 -51
  792. package/esm2022/src/app/core/table/table.pipes.mjs +0 -77
  793. package/esm2022/src/app/core/table/table.utils.mjs +0 -34
  794. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +0 -32
  795. package/esm2022/src/app/core/table/testing/table.testing.mjs +0 -329
  796. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +0 -25
  797. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +0 -25
  798. package/esm2022/src/app/core/table/testing/table2.testing.mjs +0 -273
  799. package/esm2022/src/app/shared/alerts.mjs +0 -243
  800. package/esm2022/src/app/shared/audio/audio.mjs +0 -255
  801. package/esm2022/src/app/shared/audio/audio.testing.mjs +0 -32
  802. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +0 -30
  803. package/esm2022/src/app/shared/capacitor/keyboard.mjs +0 -42
  804. package/esm2022/src/app/shared/capacitor/plugins.mjs +0 -9
  805. package/esm2022/src/app/shared/constants.mjs +0 -16
  806. package/esm2022/src/app/shared/dates.mjs +0 -180
  807. package/esm2022/src/app/shared/debug/debug-service.class.mjs +0 -3
  808. package/esm2022/src/app/shared/debug/debug.component.mjs +0 -44
  809. package/esm2022/src/app/shared/debug/debug.module.mjs +0 -23
  810. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +0 -91
  811. package/esm2022/src/app/shared/directives/autoresize.directive.mjs +0 -75
  812. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +0 -30
  813. package/esm2022/src/app/shared/directives/directives.module.mjs +0 -24
  814. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +0 -52
  815. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +0 -33
  816. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +0 -62
  817. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +0 -45
  818. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +0 -17
  819. package/esm2022/src/app/shared/directives/throttled-click.directive.mjs +0 -43
  820. package/esm2022/src/app/shared/events.mjs +0 -64
  821. package/esm2022/src/app/shared/file/csv.utils.mjs +0 -97
  822. package/esm2022/src/app/shared/file/file.service.mjs +0 -118
  823. package/esm2022/src/app/shared/file/file.utils.mjs +0 -117
  824. package/esm2022/src/app/shared/file/images.utils.mjs +0 -186
  825. package/esm2022/src/app/shared/file/json.utils.mjs +0 -58
  826. package/esm2022/src/app/shared/file/uri.utils.mjs +0 -29
  827. package/esm2022/src/app/shared/file/url.utils.mjs +0 -164
  828. package/esm2022/src/app/shared/focusable.mjs +0 -6
  829. package/esm2022/src/app/shared/form/field.component.mjs +0 -393
  830. package/esm2022/src/app/shared/form/field.model.mjs +0 -82
  831. package/esm2022/src/app/shared/form/loading-spinner.mjs +0 -35
  832. package/esm2022/src/app/shared/forms.mjs +0 -510
  833. package/esm2022/src/app/shared/functions.mjs +0 -672
  834. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +0 -86
  835. package/esm2022/src/app/shared/gesture/gesture-config.mjs +0 -46
  836. package/esm2022/src/app/shared/gesture/hammer.utils.mjs +0 -2
  837. package/esm2022/src/app/shared/graph/colors.utils.mjs +0 -60
  838. package/esm2022/src/app/shared/graph/graph-colors.mjs +0 -214
  839. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +0 -65
  840. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +0 -23
  841. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +0 -147
  842. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +0 -24
  843. package/esm2022/src/app/shared/http/http.utils.mjs +0 -56
  844. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +0 -443
  845. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +0 -62
  846. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +0 -26
  847. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +0 -87
  848. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +0 -37
  849. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +0 -59
  850. package/esm2022/src/app/shared/image/image.model.mjs +0 -2
  851. package/esm2022/src/app/shared/image/image.module.mjs +0 -24
  852. package/esm2022/src/app/shared/image/image.service.mjs +0 -109
  853. package/esm2022/src/app/shared/inputs.mjs +0 -279
  854. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +0 -27
  855. package/esm2022/src/app/shared/logging/log-level.model.mjs +0 -48
  856. package/esm2022/src/app/shared/logging/logger.model.mjs +0 -47
  857. package/esm2022/src/app/shared/logging/logging-service.class.mjs +0 -125
  858. package/esm2022/src/app/shared/logging/logging-service.config.mjs +0 -2
  859. package/esm2022/src/app/shared/logging/logging-service.module.mjs +0 -30
  860. package/esm2022/src/app/shared/markdown/markdown.component.mjs +0 -321
  861. package/esm2022/src/app/shared/markdown/markdown.directive.mjs +0 -34
  862. package/esm2022/src/app/shared/markdown/markdown.modal.mjs +0 -99
  863. package/esm2022/src/app/shared/markdown/markdown.module.mjs +0 -87
  864. package/esm2022/src/app/shared/markdown/markdown.service.mjs +0 -204
  865. package/esm2022/src/app/shared/markdown/markdown.utils.mjs +0 -87
  866. package/esm2022/src/app/shared/markdown/testing/markdown.test.mjs +0 -55
  867. package/esm2022/src/app/shared/markdown/testing/markdown.testing.module.mjs +0 -30
  868. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +0 -46
  869. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +0 -1313
  870. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +0 -79
  871. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +0 -18
  872. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +0 -242
  873. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +0 -251
  874. package/esm2022/src/app/shared/material/badge/badge.module.mjs +0 -20
  875. package/esm2022/src/app/shared/material/badge/badge.test.mjs +0 -42
  876. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +0 -67
  877. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +0 -371
  878. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +0 -72
  879. package/esm2022/src/app/shared/material/chips/chips.module.mjs +0 -71
  880. package/esm2022/src/app/shared/material/chips/material.chips.mjs +0 -836
  881. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +0 -151
  882. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +0 -76
  883. package/esm2022/src/app/shared/material/datetime/material.date.mjs +0 -471
  884. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +0 -457
  885. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +0 -693
  886. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +0 -136
  887. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +0 -127
  888. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +0 -118
  889. package/esm2022/src/app/shared/material/duration/duration.module.mjs +0 -61
  890. package/esm2022/src/app/shared/material/duration/duration.utils.mjs +0 -16
  891. package/esm2022/src/app/shared/material/duration/material.duration.mjs +0 -283
  892. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +0 -85
  893. package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +0 -319
  894. package/esm2022/src/app/shared/material/latlong/material.latlong-input.mjs +0 -432
  895. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +0 -231
  896. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +0 -68
  897. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +0 -137
  898. package/esm2022/src/app/shared/material/material.animations.mjs +0 -200
  899. package/esm2022/src/app/shared/material/material.config.mjs +0 -3
  900. package/esm2022/src/app/shared/material/material.module.mjs +0 -229
  901. package/esm2022/src/app/shared/material/material.testing.module.mjs +0 -245
  902. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +0 -51
  903. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +0 -23
  904. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +0 -379
  905. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +0 -52
  906. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +0 -67
  907. package/esm2022/src/app/shared/material/test/test-component.mjs +0 -264
  908. package/esm2022/src/app/shared/material/testing/common.test.mjs +0 -111
  909. package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +0 -42
  910. package/esm2022/src/app/shared/material/text/text-form.component.mjs +0 -205
  911. package/esm2022/src/app/shared/material/text/text-form.module.mjs +0 -63
  912. package/esm2022/src/app/shared/modules.mjs +0 -12
  913. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +0 -303
  914. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +0 -49
  915. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +0 -24
  916. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +0 -69
  917. package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +0 -74
  918. package/esm2022/src/app/shared/named-filter/testing/named-filter.testing.module.mjs +0 -28
  919. package/esm2022/src/app/shared/observables.mjs +0 -100
  920. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +0 -217
  921. package/esm2022/src/app/shared/pipes/badge.pipes.mjs +0 -24
  922. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +0 -29
  923. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +0 -50
  924. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +0 -72
  925. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +0 -28
  926. package/esm2022/src/app/shared/pipes/dates.pipe.mjs +0 -18
  927. package/esm2022/src/app/shared/pipes/display-with.pipe.mjs +0 -23
  928. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +0 -34
  929. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +0 -53
  930. package/esm2022/src/app/shared/pipes/form.pipes.mjs +0 -219
  931. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +0 -50
  932. package/esm2022/src/app/shared/pipes/html.pipes.mjs +0 -69
  933. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +0 -42
  934. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +0 -65
  935. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +0 -67
  936. package/esm2022/src/app/shared/pipes/math.pipes.mjs +0 -77
  937. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +0 -19
  938. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +0 -17
  939. package/esm2022/src/app/shared/pipes/observable.pipes.mjs +0 -61
  940. package/esm2022/src/app/shared/pipes/pipes.module.mjs +0 -285
  941. package/esm2022/src/app/shared/pipes/property.pipes.mjs +0 -135
  942. package/esm2022/src/app/shared/pipes/selection.pipes.mjs +0 -179
  943. package/esm2022/src/app/shared/pipes/string.pipes.mjs +0 -183
  944. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +0 -44
  945. package/esm2022/src/app/shared/pipes/types.pipes.mjs +0 -74
  946. package/esm2022/src/app/shared/pipes/url.pipes.mjs +0 -43
  947. package/esm2022/src/app/shared/platforms.mjs +0 -81
  948. package/esm2022/src/app/shared/print/print.service.mjs +0 -305
  949. package/esm2022/src/app/shared/regexps.mjs +0 -96
  950. package/esm2022/src/app/shared/rx-state/rx-state.decorators.mjs +0 -71
  951. package/esm2022/src/app/shared/rx-state/rx-state.module.mjs +0 -19
  952. package/esm2022/src/app/shared/rx-state/rx-state.types.mjs +0 -2
  953. package/esm2022/src/app/shared/services/entity-service.class.mjs +0 -10
  954. package/esm2022/src/app/shared/services/job.utils.mjs +0 -92
  955. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +0 -353
  956. package/esm2022/src/app/shared/services/progress-bar.service.mjs +0 -31
  957. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +0 -118
  958. package/esm2022/src/app/shared/services/startable-service.class.mjs +0 -107
  959. package/esm2022/src/app/shared/services/translate-context.service.mjs +0 -107
  960. package/esm2022/src/app/shared/services/validator-service.class.mjs +0 -2
  961. package/esm2022/src/app/shared/services.mjs +0 -85
  962. package/esm2022/src/app/shared/shared-routing.module.mjs +0 -72
  963. package/esm2022/src/app/shared/shared.module.mjs +0 -229
  964. package/esm2022/src/app/shared/shared.testing.module.mjs +0 -108
  965. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +0 -279
  966. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +0 -42
  967. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +0 -27
  968. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +0 -25
  969. package/esm2022/src/app/shared/storage/storage.service.mjs +0 -134
  970. package/esm2022/src/app/shared/storage/storage.utils.mjs +0 -13
  971. package/esm2022/src/app/shared/testing/maskito.test.mjs +0 -41
  972. package/esm2022/src/app/shared/testing/observable.test.mjs +0 -94
  973. package/esm2022/src/app/shared/testing/tests.page.mjs +0 -37
  974. package/esm2022/src/app/shared/toast/toast.testing.mjs +0 -54
  975. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +0 -31
  976. package/esm2022/src/app/shared/toast/toasts.mjs +0 -134
  977. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +0 -62
  978. package/esm2022/src/app/shared/toolbar/toolbar.mjs +0 -267
  979. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +0 -26
  980. package/esm2022/src/app/shared/types.mjs +0 -2
  981. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +0 -59
  982. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +0 -30
  983. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +0 -109
  984. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +0 -216
  985. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +0 -26
  986. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +0 -114
  987. package/esm2022/src/app/shared/validator/validators.mjs +0 -621
  988. package/esm2022/src/app/shared/version/versions.mjs +0 -81
  989. package/esm2022/src/app/social/job/job.module.mjs +0 -23
  990. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +0 -35
  991. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +0 -235
  992. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +0 -47
  993. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +0 -29
  994. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +0 -91
  995. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +0 -38
  996. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +0 -34
  997. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +0 -22
  998. package/esm2022/src/app/social/message/message.form.mjs +0 -141
  999. package/esm2022/src/app/social/message/message.modal.mjs +0 -110
  1000. package/esm2022/src/app/social/message/message.model.mjs +0 -75
  1001. package/esm2022/src/app/social/message/message.module.mjs +0 -22
  1002. package/esm2022/src/app/social/message/message.service.mjs +0 -110
  1003. package/esm2022/src/app/social/social.errors.mjs +0 -10
  1004. package/esm2022/src/app/social/social.module.mjs +0 -22
  1005. package/esm2022/src/app/social/social.testing.module.mjs +0 -40
  1006. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +0 -127
  1007. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +0 -260
  1008. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +0 -257
  1009. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +0 -129
  1010. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +0 -22
  1011. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +0 -128
  1012. package/esm2022/src/app/social/user-event/user-event.model.mjs +0 -2
  1013. package/esm2022/src/app/social/user-event/user-event.module.mjs +0 -23
  1014. package/esm2022/src/app/social/user-event/user-event.service.mjs +0 -512
  1015. package/esm2022/src/environments/environment.class.mjs +0 -65
  1016. package/esm2022/src/environments/environment.loader.mjs +0 -77
  1017. package/esm2022/src/environments/environment.mjs +0 -109
  1018. package/esm2022/sumaris-net.ngx-components.mjs +0 -5
  1019. package/fesm2022/sumaris-net.ngx-components.mjs +0 -48596
  1020. package/fesm2022/sumaris-net.ngx-components.mjs.map +0 -1
  1021. package/index.d.ts +0 -5
  1022. package/public_api.d.ts +0 -344
  1023. package/src/app/admin/admin-routing.module.d.ts +0 -9
  1024. package/src/app/admin/admin.module.d.ts +0 -10
  1025. package/src/app/admin/services/filter/person.filter.d.ts +0 -22
  1026. package/src/app/admin/services/person.service.d.ts +0 -37
  1027. package/src/app/admin/services/validator/person.validator.d.ts +0 -23
  1028. package/src/app/admin/users/users.d.ts +0 -61
  1029. package/src/app/admin/users/users.module.d.ts +0 -14
  1030. package/src/app/core/about/about.modal.d.ts +0 -32
  1031. package/src/app/core/about/about.module.d.ts +0 -11
  1032. package/src/app/core/account/account.module.d.ts +0 -18
  1033. package/src/app/core/account/account.page.d.ts +0 -83
  1034. package/src/app/core/account/new-token.form.d.ts +0 -29
  1035. package/src/app/core/account/new-token.modal.d.ts +0 -29
  1036. package/src/app/core/account/password/change-password.form.d.ts +0 -19
  1037. package/src/app/core/account/password/change-password.module.d.ts +0 -11
  1038. package/src/app/core/account/password/change-password.page.d.ts +0 -36
  1039. package/src/app/core/account/token.table.d.ts +0 -27
  1040. package/src/app/core/auth/auth.form.d.ts +0 -38
  1041. package/src/app/core/auth/auth.modal.d.ts +0 -24
  1042. package/src/app/core/auth/auth.module.d.ts +0 -13
  1043. package/src/app/core/auth/reset-password.modal.d.ts +0 -29
  1044. package/src/app/core/core.module.d.ts +0 -28
  1045. package/src/app/core/core.testing.module.d.ts +0 -15
  1046. package/src/app/core/form/array/form-array.d.ts +0 -137
  1047. package/src/app/core/form/array/testing/form-array-test.module.d.ts +0 -12
  1048. package/src/app/core/form/array/testing/form-array.test.d.ts +0 -26
  1049. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +0 -37
  1050. package/src/app/core/form/buttons/form-buttons-bar.module.d.ts +0 -9
  1051. package/src/app/core/form/entity/editor.class.d.ts +0 -84
  1052. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +0 -126
  1053. package/src/app/core/form/entity/entity-editor.class.d.ts +0 -204
  1054. package/src/app/core/form/entity/entity-metadata.component.d.ts +0 -13
  1055. package/src/app/core/form/entity/entity.module.d.ts +0 -10
  1056. package/src/app/core/form/entity/tab-editor.class.d.ts +0 -66
  1057. package/src/app/core/form/form-container.class.d.ts +0 -127
  1058. package/src/app/core/form/form.class.d.ts +0 -144
  1059. package/src/app/core/form/form.module.d.ts +0 -14
  1060. package/src/app/core/form/form.utils.d.ts +0 -260
  1061. package/src/app/core/form/list/list.form.d.ts +0 -81
  1062. package/src/app/core/form/list/list.module.d.ts +0 -9
  1063. package/src/app/core/form/properties/properties.form.d.ts +0 -92
  1064. package/src/app/core/form/properties/properties.module.d.ts +0 -11
  1065. package/src/app/core/form/properties/properties.table.d.ts +0 -72
  1066. package/src/app/core/form/properties/properties.utils.d.ts +0 -59
  1067. package/src/app/core/form/properties/property.validator.d.ts +0 -27
  1068. package/src/app/core/form/properties/testing/properties-form.test.d.ts +0 -22
  1069. package/src/app/core/form/properties/testing/properties-form.testing.module.d.ts +0 -12
  1070. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +0 -16
  1071. package/src/app/core/form/text-popover/testing/text-popover.testing.module.d.ts +0 -11
  1072. package/src/app/core/form/text-popover/text-popover.component.d.ts +0 -80
  1073. package/src/app/core/form/text-popover/text-popover.module.d.ts +0 -9
  1074. package/src/app/core/form/username/username.form.d.ts +0 -19
  1075. package/src/app/core/form/username/username.module.d.ts +0 -9
  1076. package/src/app/core/graphql/graphql.module.d.ts +0 -7
  1077. package/src/app/core/graphql/graphql.service.d.ts +0 -142
  1078. package/src/app/core/graphql/graphql.utils.d.ts +0 -47
  1079. package/src/app/core/home/home.d.ts +0 -109
  1080. package/src/app/core/home/home.module.d.ts +0 -14
  1081. package/src/app/core/icon/icon.component.d.ts +0 -13
  1082. package/src/app/core/icon/icon.module.d.ts +0 -9
  1083. package/src/app/core/install/install-upgrade-card.component.d.ts +0 -63
  1084. package/src/app/core/install/install-upgrade-card.module.d.ts +0 -9
  1085. package/src/app/core/menu/menu.component.d.ts +0 -66
  1086. package/src/app/core/menu/menu.model.d.ts +0 -144
  1087. package/src/app/core/menu/menu.module.d.ts +0 -12
  1088. package/src/app/core/menu/menu.service.d.ts +0 -93
  1089. package/src/app/core/menu/sub-menu-tab.directive.d.ts +0 -29
  1090. package/src/app/core/menu/testing/menu-other.testing.d.ts +0 -15
  1091. package/src/app/core/menu/testing/menu.testing.d.ts +0 -51
  1092. package/src/app/core/menu/testing/menu.testing.module.d.ts +0 -12
  1093. package/src/app/core/offline/update-offline-mode-card.component.d.ts +0 -11
  1094. package/src/app/core/offline/update-offline-mode-card.module.d.ts +0 -9
  1095. package/src/app/core/peer/select-peer.modal.d.ts +0 -101
  1096. package/src/app/core/peer/select-peer.module.d.ts +0 -12
  1097. package/src/app/core/register/register-confirm.page.d.ts +0 -24
  1098. package/src/app/core/register/register.form.d.ts +0 -49
  1099. package/src/app/core/register/register.modal.d.ts +0 -14
  1100. package/src/app/core/register/register.module.d.ts +0 -12
  1101. package/src/app/core/services/account.service.d.ts +0 -207
  1102. package/src/app/core/services/auth-guard.service.d.ts +0 -17
  1103. package/src/app/core/services/base-entity-service.class.d.ts +0 -135
  1104. package/src/app/core/services/base-graphql-service.class.d.ts +0 -77
  1105. package/src/app/core/services/base58.d.ts +0 -7
  1106. package/src/app/core/services/config/core.config.d.ts +0 -46
  1107. package/src/app/core/services/config.service.d.ts +0 -63
  1108. package/src/app/core/services/crypto.service.d.ts +0 -44
  1109. package/src/app/core/services/errors.d.ts +0 -65
  1110. package/src/app/core/services/local-settings.service.d.ts +0 -99
  1111. package/src/app/core/services/model/account.model.d.ts +0 -56
  1112. package/src/app/core/services/model/config.model.d.ts +0 -36
  1113. package/src/app/core/services/model/department.model.d.ts +0 -11
  1114. package/src/app/core/services/model/entity.decorators.d.ts +0 -17
  1115. package/src/app/core/services/model/entity.model.d.ts +0 -133
  1116. package/src/app/core/services/model/filter.model.d.ts +0 -37
  1117. package/src/app/core/services/model/history.model.d.ts +0 -20
  1118. package/src/app/core/services/model/model.enum.d.ts +0 -7
  1119. package/src/app/core/services/model/node-feature.model.d.ts +0 -14
  1120. package/src/app/core/services/model/peer.model.d.ts +0 -35
  1121. package/src/app/core/services/model/person.model.d.ts +0 -37
  1122. package/src/app/core/services/model/referential.model.d.ts +0 -84
  1123. package/src/app/core/services/model/settings.model.d.ts +0 -29
  1124. package/src/app/core/services/model/token.model.d.ts +0 -22
  1125. package/src/app/core/services/model/tree-item-entity.model.d.ts +0 -53
  1126. package/src/app/core/services/network.service.d.ts +0 -159
  1127. package/src/app/core/services/network.types.d.ts +0 -4
  1128. package/src/app/core/services/network.utils.d.ts +0 -38
  1129. package/src/app/core/services/pipes/account.pipes.d.ts +0 -15
  1130. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +0 -9
  1131. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +0 -11
  1132. package/src/app/core/services/pipes/pipes.module.d.ts +0 -11
  1133. package/src/app/core/services/pipes/referential-to-string.pipe.d.ts +0 -13
  1134. package/src/app/core/services/pipes/usage-mode.pipes.d.ts +0 -15
  1135. package/src/app/core/services/platform.service.d.ts +0 -110
  1136. package/src/app/core/services/storage/entities-storage.service.d.ts +0 -108
  1137. package/src/app/core/services/storage/entity-store.class.d.ts +0 -113
  1138. package/src/app/core/services/testing/referential-filter.model.d.ts +0 -9
  1139. package/src/app/core/services/testing/referential.validator.d.ts +0 -22
  1140. package/src/app/core/services/validator/account.validator.d.ts +0 -24
  1141. package/src/app/core/services/validator/base.validator.class.d.ts +0 -21
  1142. package/src/app/core/services/validator/local-settings.validator.d.ts +0 -18
  1143. package/src/app/core/services/validator/user-settings.validator.d.ts +0 -10
  1144. package/src/app/core/services/validator/user-token.validator.d.ts +0 -13
  1145. package/src/app/core/settings/settings.module.d.ts +0 -12
  1146. package/src/app/core/settings/settings.page.d.ts +0 -88
  1147. package/src/app/core/table/async-table.class.d.ts +0 -395
  1148. package/src/app/core/table/column/actions-column.component.d.ts +0 -62
  1149. package/src/app/core/table/column/nav-actions-column.component.d.ts +0 -46
  1150. package/src/app/core/table/column/row-field.component.d.ts +0 -40
  1151. package/src/app/core/table/entities-async-table-datasource.class.d.ts +0 -100
  1152. package/src/app/core/table/entities-table-datasource.class.d.ts +0 -103
  1153. package/src/app/core/table/memory-table.class.d.ts +0 -25
  1154. package/src/app/core/table/table-select-columns.component.d.ts +0 -22
  1155. package/src/app/core/table/table.class.d.ts +0 -400
  1156. package/src/app/core/table/table.model.d.ts +0 -31
  1157. package/src/app/core/table/table.module.d.ts +0 -14
  1158. package/src/app/core/table/table.pipes.d.ts +0 -29
  1159. package/src/app/core/table/table.utils.d.ts +0 -13
  1160. package/src/app/core/table/testing/table-validator.service.d.ts +0 -17
  1161. package/src/app/core/table/testing/table.testing.d.ts +0 -54
  1162. package/src/app/core/table/testing/table.testing.module.d.ts +0 -14
  1163. package/src/app/core/table/testing/table2-validator.service.d.ts +0 -15
  1164. package/src/app/core/table/testing/table2.testing.d.ts +0 -48
  1165. package/src/app/shared/alerts.d.ts +0 -55
  1166. package/src/app/shared/audio/audio.d.ts +0 -45
  1167. package/src/app/shared/audio/audio.testing.d.ts +0 -13
  1168. package/src/app/shared/audio/audio.testing.module.d.ts +0 -11
  1169. package/src/app/shared/capacitor/keyboard.d.ts +0 -16
  1170. package/src/app/shared/capacitor/plugins.d.ts +0 -7
  1171. package/src/app/shared/constants.d.ts +0 -13
  1172. package/src/app/shared/dates.d.ts +0 -61
  1173. package/src/app/shared/debug/debug-service.class.d.ts +0 -5
  1174. package/src/app/shared/debug/debug.component.d.ts +0 -14
  1175. package/src/app/shared/debug/debug.module.d.ts +0 -12
  1176. package/src/app/shared/directives/autofocus.directive.d.ts +0 -18
  1177. package/src/app/shared/directives/autoresize.directive.d.ts +0 -20
  1178. package/src/app/shared/directives/autotitle.directive.d.ts +0 -11
  1179. package/src/app/shared/directives/directives.module.d.ts +0 -14
  1180. package/src/app/shared/directives/drag-and-drop.directive.d.ts +0 -17
  1181. package/src/app/shared/directives/ng-var.directive.d.ts +0 -12
  1182. package/src/app/shared/directives/resizable/resizable.component.d.ts +0 -21
  1183. package/src/app/shared/directives/resizable/resizable.directive.d.ts +0 -12
  1184. package/src/app/shared/directives/resizable/resizable.module.d.ts +0 -8
  1185. package/src/app/shared/directives/throttled-click.directive.d.ts +0 -16
  1186. package/src/app/shared/events.d.ts +0 -29
  1187. package/src/app/shared/file/csv.utils.d.ts +0 -30
  1188. package/src/app/shared/file/file.service.d.ts +0 -23
  1189. package/src/app/shared/file/file.utils.d.ts +0 -20
  1190. package/src/app/shared/file/images.utils.d.ts +0 -36
  1191. package/src/app/shared/file/json.utils.d.ts +0 -19
  1192. package/src/app/shared/file/uri.utils.d.ts +0 -8
  1193. package/src/app/shared/file/url.utils.d.ts +0 -77
  1194. package/src/app/shared/focusable.d.ts +0 -4
  1195. package/src/app/shared/form/field.component.d.ts +0 -85
  1196. package/src/app/shared/form/field.model.d.ts +0 -82
  1197. package/src/app/shared/form/loading-spinner.d.ts +0 -8
  1198. package/src/app/shared/forms.d.ts +0 -135
  1199. package/src/app/shared/functions.d.ts +0 -206
  1200. package/src/app/shared/geolocation/geolocation.utils.d.ts +0 -19
  1201. package/src/app/shared/gesture/gesture-config.d.ts +0 -15
  1202. package/src/app/shared/gesture/hammer.utils.d.ts +0 -16
  1203. package/src/app/shared/graph/colors.utils.d.ts +0 -17
  1204. package/src/app/shared/graph/graph-colors.d.ts +0 -63
  1205. package/src/app/shared/guard/component-dirty.guard.d.ts +0 -14
  1206. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +0 -8
  1207. package/src/app/shared/hotkeys/hotkeys.service.d.ts +0 -48
  1208. package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +0 -11
  1209. package/src/app/shared/http/http.utils.d.ts +0 -28
  1210. package/src/app/shared/image/gallery/image-gallery.component.d.ts +0 -137
  1211. package/src/app/shared/image/gallery/image-gallery.module.d.ts +0 -15
  1212. package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +0 -12
  1213. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +0 -33
  1214. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +0 -16
  1215. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +0 -13
  1216. package/src/app/shared/image/image.model.d.ts +0 -7
  1217. package/src/app/shared/image/image.module.d.ts +0 -8
  1218. package/src/app/shared/image/image.service.d.ts +0 -36
  1219. package/src/app/shared/inputs.d.ts +0 -36
  1220. package/src/app/shared/interceptors/progess.interceptor.d.ts +0 -8
  1221. package/src/app/shared/logging/log-level.model.d.ts +0 -38
  1222. package/src/app/shared/logging/logger.model.d.ts +0 -68
  1223. package/src/app/shared/logging/logging-service.class.d.ts +0 -39
  1224. package/src/app/shared/logging/logging-service.config.d.ts +0 -25
  1225. package/src/app/shared/logging/logging-service.module.d.ts +0 -9
  1226. package/src/app/shared/markdown/markdown.component.d.ts +0 -86
  1227. package/src/app/shared/markdown/markdown.directive.d.ts +0 -13
  1228. package/src/app/shared/markdown/markdown.modal.d.ts +0 -49
  1229. package/src/app/shared/markdown/markdown.module.d.ts +0 -17
  1230. package/src/app/shared/markdown/markdown.service.d.ts +0 -37
  1231. package/src/app/shared/markdown/markdown.utils.d.ts +0 -26
  1232. package/src/app/shared/markdown/testing/markdown.test.d.ts +0 -18
  1233. package/src/app/shared/markdown/testing/markdown.testing.module.d.ts +0 -12
  1234. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +0 -74
  1235. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +0 -211
  1236. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +0 -22
  1237. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +0 -5
  1238. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +0 -48
  1239. package/src/app/shared/material/badge/badge.directive.d.ts +0 -43
  1240. package/src/app/shared/material/badge/badge.module.d.ts +0 -10
  1241. package/src/app/shared/material/badge/badge.test.d.ts +0 -21
  1242. package/src/app/shared/material/boolean/boolean.module.d.ts +0 -20
  1243. package/src/app/shared/material/boolean/material.boolean.d.ts +0 -93
  1244. package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +0 -26
  1245. package/src/app/shared/material/chips/chips.module.d.ts +0 -21
  1246. package/src/app/shared/material/chips/material.chips.d.ts +0 -164
  1247. package/src/app/shared/material/chips/testing/chips.test.d.ts +0 -32
  1248. package/src/app/shared/material/datetime/datetime.module.d.ts +0 -24
  1249. package/src/app/shared/material/datetime/material.date.d.ts +0 -90
  1250. package/src/app/shared/material/datetime/material.dateshort.d.ts +0 -89
  1251. package/src/app/shared/material/datetime/material.datetime.d.ts +0 -116
  1252. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +0 -37
  1253. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +0 -32
  1254. package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +0 -31
  1255. package/src/app/shared/material/duration/duration.module.d.ts +0 -18
  1256. package/src/app/shared/material/duration/duration.utils.d.ts +0 -2
  1257. package/src/app/shared/material/duration/material.duration.d.ts +0 -64
  1258. package/src/app/shared/material/duration/testing/mat-duration.test.d.ts +0 -23
  1259. package/src/app/shared/material/latlong/latlong.utils.d.ts +0 -59
  1260. package/src/app/shared/material/latlong/material.latlong-input.d.ts +0 -85
  1261. package/src/app/shared/material/latlong/material.latlong.d.ts +0 -90
  1262. package/src/app/shared/material/latlong/material.latlong.module.d.ts +0 -21
  1263. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +0 -28
  1264. package/src/app/shared/material/material.animations.d.ts +0 -8
  1265. package/src/app/shared/material/material.config.d.ts +0 -3
  1266. package/src/app/shared/material/material.module.d.ts +0 -45
  1267. package/src/app/shared/material/material.testing.module.d.ts +0 -32
  1268. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +0 -12
  1269. package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +0 -10
  1270. package/src/app/shared/material/swipe/material.swipe.d.ts +0 -89
  1271. package/src/app/shared/material/swipe/swipe.module.d.ts +0 -16
  1272. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +0 -22
  1273. package/src/app/shared/material/test/test-component.d.ts +0 -75
  1274. package/src/app/shared/material/testing/common.test.d.ts +0 -25
  1275. package/src/app/shared/material/text/testing/text-form.testing.d.ts +0 -19
  1276. package/src/app/shared/material/text/text-form.component.d.ts +0 -66
  1277. package/src/app/shared/material/text/text-form.module.d.ts +0 -16
  1278. package/src/app/shared/modules.d.ts +0 -9
  1279. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +0 -62
  1280. package/src/app/shared/named-filter/named-filter.model.d.ts +0 -32
  1281. package/src/app/shared/named-filter/named-filter.module.d.ts +0 -13
  1282. package/src/app/shared/named-filter/named-filter.service.d.ts +0 -32
  1283. package/src/app/shared/named-filter/testing/named-filter-selector.testing.d.ts +0 -34
  1284. package/src/app/shared/named-filter/testing/named-filter.testing.module.d.ts +0 -10
  1285. package/src/app/shared/observables.d.ts +0 -30
  1286. package/src/app/shared/pipes/arrays.pipe.d.ts +0 -82
  1287. package/src/app/shared/pipes/badge.pipes.d.ts +0 -7
  1288. package/src/app/shared/pipes/colors.pipe.d.ts +0 -9
  1289. package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +0 -25
  1290. package/src/app/shared/pipes/date-format.pipe.d.ts +0 -35
  1291. package/src/app/shared/pipes/date-from-now.pipe.d.ts +0 -12
  1292. package/src/app/shared/pipes/dates.pipe.d.ts +0 -10
  1293. package/src/app/shared/pipes/display-with.pipe.d.ts +0 -8
  1294. package/src/app/shared/pipes/duration.pipe.d.ts +0 -23
  1295. package/src/app/shared/pipes/file-size.pipe.d.ts +0 -30
  1296. package/src/app/shared/pipes/form.pipes.d.ts +0 -69
  1297. package/src/app/shared/pipes/highlight.pipe.d.ts +0 -11
  1298. package/src/app/shared/pipes/html.pipes.d.ts +0 -22
  1299. package/src/app/shared/pipes/latlong-format.pipe.d.ts +0 -20
  1300. package/src/app/shared/pipes/maps.pipe.d.ts +0 -23
  1301. package/src/app/shared/pipes/maskito.pipe.d.ts +0 -14
  1302. package/src/app/shared/pipes/math.pipes.d.ts +0 -26
  1303. package/src/app/shared/pipes/ng-init.pipe.d.ts +0 -8
  1304. package/src/app/shared/pipes/number-format.pipe.d.ts +0 -9
  1305. package/src/app/shared/pipes/observable.pipes.d.ts +0 -25
  1306. package/src/app/shared/pipes/pipes.module.d.ts +0 -35
  1307. package/src/app/shared/pipes/property.pipes.d.ts +0 -41
  1308. package/src/app/shared/pipes/selection.pipes.d.ts +0 -62
  1309. package/src/app/shared/pipes/string.pipes.d.ts +0 -68
  1310. package/src/app/shared/pipes/translate-context.pipe.d.ts +0 -17
  1311. package/src/app/shared/pipes/types.pipes.d.ts +0 -30
  1312. package/src/app/shared/pipes/url.pipes.d.ts +0 -27
  1313. package/src/app/shared/platforms.d.ts +0 -16
  1314. package/src/app/shared/print/print.service.d.ts +0 -94
  1315. package/src/app/shared/regexps.d.ts +0 -32
  1316. package/src/app/shared/rx-state/rx-state.decorators.d.ts +0 -7
  1317. package/src/app/shared/rx-state/rx-state.module.d.ts +0 -10
  1318. package/src/app/shared/rx-state/rx-state.types.d.ts +0 -4
  1319. package/src/app/shared/services/entity-service.class.d.ts +0 -75
  1320. package/src/app/shared/services/job.utils.d.ts +0 -20
  1321. package/src/app/shared/services/memory-entity-service.class.d.ts +0 -79
  1322. package/src/app/shared/services/progress-bar.service.d.ts +0 -20
  1323. package/src/app/shared/services/startable-observable-service.class.d.ts +0 -36
  1324. package/src/app/shared/services/startable-service.class.d.ts +0 -37
  1325. package/src/app/shared/services/translate-context.service.d.ts +0 -29
  1326. package/src/app/shared/services/validator-service.class.d.ts +0 -11
  1327. package/src/app/shared/services.d.ts +0 -17
  1328. package/src/app/shared/shared-routing.module.d.ts +0 -23
  1329. package/src/app/shared/shared.module.d.ts +0 -33
  1330. package/src/app/shared/shared.testing.module.d.ts +0 -20
  1331. package/src/app/shared/storage/storage-explorer.component.d.ts +0 -59
  1332. package/src/app/shared/storage/storage-explorer.module.d.ts +0 -13
  1333. package/src/app/shared/storage/storage-explorer.testing-routing.module.d.ts +0 -9
  1334. package/src/app/shared/storage/storage-explorer.testing.module.d.ts +0 -10
  1335. package/src/app/shared/storage/storage.service.d.ts +0 -22
  1336. package/src/app/shared/storage/storage.utils.d.ts +0 -19
  1337. package/src/app/shared/testing/maskito.test.d.ts +0 -10
  1338. package/src/app/shared/testing/observable.test.d.ts +0 -25
  1339. package/src/app/shared/testing/tests.page.d.ts +0 -20
  1340. package/src/app/shared/toast/toast.testing.d.ts +0 -15
  1341. package/src/app/shared/toast/toast.testing.module.d.ts +0 -12
  1342. package/src/app/shared/toast/toasts.d.ts +0 -16
  1343. package/src/app/shared/toolbar/modal-toolbar.d.ts +0 -21
  1344. package/src/app/shared/toolbar/toolbar.d.ts +0 -70
  1345. package/src/app/shared/toolbar/toolbar.module.d.ts +0 -16
  1346. package/src/app/shared/types.d.ts +0 -36
  1347. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +0 -21
  1348. package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +0 -11
  1349. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +0 -41
  1350. package/src/app/shared/upload-file/upload-file.component.d.ts +0 -50
  1351. package/src/app/shared/upload-file/upload-file.model.d.ts +0 -30
  1352. package/src/app/shared/validator/form-error-adapter.class.d.ts +0 -33
  1353. package/src/app/shared/validator/validators.d.ts +0 -139
  1354. package/src/app/shared/version/versions.d.ts +0 -26
  1355. package/src/app/social/job/job.module.d.ts +0 -12
  1356. package/src/app/social/job/progression/job-progression.component.d.ts +0 -23
  1357. package/src/app/social/job/progression/job-progression.icon.d.ts +0 -62
  1358. package/src/app/social/job/progression/job-progression.list.d.ts +0 -19
  1359. package/src/app/social/job/progression/job-progression.model.d.ts +0 -10
  1360. package/src/app/social/job/progression/job-progression.service.d.ts +0 -33
  1361. package/src/app/social/job/testing/job-progression.testing.d.ts +0 -13
  1362. package/src/app/social/job/testing/job-progression.testing.service.d.ts +0 -9
  1363. package/src/app/social/job/testing/job.testing.module.d.ts +0 -11
  1364. package/src/app/social/message/message.form.d.ts +0 -36
  1365. package/src/app/social/message/message.modal.d.ts +0 -43
  1366. package/src/app/social/message/message.model.d.ts +0 -33
  1367. package/src/app/social/message/message.module.d.ts +0 -12
  1368. package/src/app/social/message/message.service.d.ts +0 -32
  1369. package/src/app/social/social.errors.d.ts +0 -9
  1370. package/src/app/social/social.module.d.ts +0 -20
  1371. package/src/app/social/social.testing.module.d.ts +0 -13
  1372. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +0 -32
  1373. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +0 -71
  1374. package/src/app/social/user-event/testing/user-event.testing.d.ts +0 -35
  1375. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +0 -42
  1376. package/src/app/social/user-event/testing/user-event.testing.module.d.ts +0 -11
  1377. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +0 -42
  1378. package/src/app/social/user-event/user-event.model.d.ts +0 -44
  1379. package/src/app/social/user-event/user-event.module.d.ts +0 -13
  1380. package/src/app/social/user-event/user-event.service.d.ts +0 -124
  1381. package/src/environments/environment.class.d.ts +0 -75
  1382. package/src/environments/environment.d.ts +0 -2
  1383. package/src/environments/environment.loader.d.ts +0 -24
@@ -1,344 +0,0 @@
1
- import { booleanAttribute, ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, numberAttribute, Optional, ViewChild, } from '@angular/core';
2
- import { Peer } from '../services/model/peer.model';
3
- import { Subscription } from 'rxjs';
4
- import { fadeInAnimation } from '../../shared/material/material.animations';
5
- import { NetworkUtils } from '../services/network.utils';
6
- import { VersionUtils } from '../../shared/version/versions';
7
- import { ENVIRONMENT } from '../../../environments/environment.class';
8
- import { TextPopover } from '../form/text-popover/text-popover.component';
9
- import { isMobile } from '../../shared/platforms';
10
- import { Validators } from '@angular/forms';
11
- import { PEER_URL_REGEXP } from '../services/network.service';
12
- import { APP_LOGGING_SERVICE } from '../../shared/logging/logging-service.class';
13
- import { map } from 'rxjs/operators';
14
- import { EntityUtils } from '../services/model/entity.model';
15
- import { RxState } from '@rx-angular/state';
16
- import { suggestFromArray } from '../../shared/services';
17
- import { isNilOrBlank, isNotEmptyArray, isNotNil } from '../../shared/functions';
18
- import { NodeFeature } from '../services/model/node-feature.model';
19
- import * as i0 from "@angular/core";
20
- import * as i1 from "@ionic/angular";
21
- import * as i2 from "@ngx-translate/core";
22
- import * as i3 from "@angular/common/http";
23
- import * as i4 from "@angular/common";
24
- import * as i5 from "@angular/forms";
25
- import * as i6 from "@angular/material/icon";
26
- import * as i7 from "@angular/material/tabs";
27
- import * as i8 from "@angular/material/badge";
28
- import * as i9 from "@angular/material/core";
29
- import * as i10 from "@angular/material/tooltip";
30
- import * as i11 from "../../shared/pipes/highlight.pipe";
31
- import * as i12 from "../../shared/pipes/arrays.pipe";
32
- import * as i13 from "../../shared/pipes/string.pipes";
33
- import * as i14 from "../../shared/pipes/badge.pipes";
34
- import * as i15 from "../services/pipes/referential-to-string.pipe";
35
- import * as i16 from "../../../environments/environment.class";
36
- export class SelectPeerModal extends RxState {
37
- modalCtrl;
38
- popoverController;
39
- translate;
40
- http;
41
- cd;
42
- environment;
43
- loggingService;
44
- _subscription = new Subscription();
45
- _logger;
46
- defaultPeers$ = this.select('defaultPeers');
47
- peers$ = this.select('peers');
48
- filteredPeers$ = this.select('filteredPeers');
49
- filteredPeersByFeatures$ = this.select('filteredPeersByFeatures');
50
- filteredPeerCount$ = this.select('filteredPeerCount');
51
- filteredFeaturesCount$ = this.select('filteredFeaturesCount');
52
- loading = true;
53
- mobile;
54
- peerMinVersion;
55
- peerDefaultPrefix;
56
- enableSelectPeerByFeature;
57
- collapsedPeers = {};
58
- set peers(value) {
59
- this.set('peers', () => value);
60
- }
61
- get peers() {
62
- return this.get('peers');
63
- }
64
- set searchText(value) {
65
- this.set('searchText', () => value);
66
- }
67
- get searchText() {
68
- return this.get('searchText');
69
- }
70
- set filteredPeers(value) {
71
- this.set('filteredPeers', () => value);
72
- }
73
- get filteredPeers() {
74
- return this.get('filteredPeers');
75
- }
76
- set selectedTabIndex(value) {
77
- this.set('selectedTabIndex', () => value);
78
- }
79
- get selectedTabIndex() {
80
- return this.get('selectedTabIndex');
81
- }
82
- selectedPeer;
83
- title = 'NETWORK.PEER.SELECT_MODAL.TITLE';
84
- canCancel = true;
85
- allowSelectDownPeer = true;
86
- showSetManuallyButton = true;
87
- showSearchBar;
88
- tabGroupAnimationDuration;
89
- onRefresh = new EventEmitter();
90
- set defaultPeers(value) {
91
- this.set('defaultPeers', () => value);
92
- }
93
- searchbar;
94
- constructor(modalCtrl, popoverController, translate, http, cd, environment, loggingService) {
95
- super();
96
- this.modalCtrl = modalCtrl;
97
- this.popoverController = popoverController;
98
- this.translate = translate;
99
- this.http = http;
100
- this.cd = cd;
101
- this.environment = environment;
102
- this.loggingService = loggingService;
103
- this.set({ searchText: null, selectedTabIndex: 0 });
104
- this.mobile = isMobile(window);
105
- this._logger = loggingService?.getLogger('network-modal');
106
- this.peerMinVersion = environment.peerMinVersion;
107
- this.peerDefaultPrefix = environment.peerDefaultPrefix || 'https://';
108
- this.enableSelectPeerByFeature = environment.enableSelectPeerByFeature || false;
109
- this.showSearchBar = this.enableSelectPeerByFeature; // Show search bar by default, if two tabs
110
- // Refreshing peers
111
- this.hold(this.defaultPeers$, (res) => this.refreshPeers(res));
112
- // Search on host
113
- this.connect('filteredPeers', this.select(['peers', 'searchText'], (res) => res).pipe(map(({ peers, searchText }) => {
114
- if (isNilOrBlank(searchText))
115
- return peers; // All
116
- console.debug('[select-peer-modal] Searching on hosts: ' + searchText);
117
- const { data } = suggestFromArray(peers, searchText, {
118
- anySearch: true,
119
- searchAttributes: ['label', 'hostAndPort'],
120
- });
121
- return data;
122
- })));
123
- this.connect('filteredPeerCount', this.filteredPeers$.pipe(map((peers) => peers?.length ?? 0)));
124
- // Search on features
125
- if (this.enableSelectPeerByFeature) {
126
- this.connect('filteredPeersByFeatures', this.select(['peers', 'searchText'], (res) => res).pipe(map(({ peers, searchText }) => {
127
- if (isNilOrBlank(searchText)) {
128
- return (peers || []).filter((p) => isNotEmptyArray(p?.features));
129
- }
130
- console.debug('[select-peer-modal] Searching on features: ' + searchText);
131
- return peers
132
- .map((peer) => {
133
- const { data: features } = suggestFromArray(peer.features || [], searchText, {
134
- anySearch: true,
135
- searchAttributes: ['label', 'name', 'description'],
136
- });
137
- if (isNotEmptyArray(features)) {
138
- const filteredPeer = peer.clone();
139
- filteredPeer.features = features;
140
- return filteredPeer;
141
- }
142
- return null;
143
- })
144
- .filter(isNotNil);
145
- })));
146
- this.connect('filteredFeaturesCount', this.filteredPeersByFeatures$.pipe(map(Peer.countAllFeatures)));
147
- }
148
- }
149
- cancel() {
150
- this.modalCtrl.dismiss();
151
- }
152
- ngOnDestroy() {
153
- this._subscription.unsubscribe();
154
- }
155
- selectPeer(peer) {
156
- if (this.allowSelectDownPeer || (peer.reachable && this.isCompatible(peer))) {
157
- console.debug(`[select-peer-modal] Selected peer: {url: '${peer.url}'}`);
158
- this.selectedPeer = peer.url;
159
- this.modalCtrl.dismiss(peer);
160
- }
161
- }
162
- async toggleSearchBar() {
163
- this.showSearchBar = !this.showSearchBar;
164
- if (this.showSearchBar && this.searchbar) {
165
- setTimeout(() => {
166
- this.searchbar.setFocus();
167
- this.markForCheck();
168
- }, 300);
169
- }
170
- }
171
- togglePeerFeatures(peerUrl) {
172
- if (!peerUrl)
173
- return;
174
- this.collapsedPeers[peerUrl] = isNotNil(this.collapsedPeers[peerUrl]) ? !this.collapsedPeers[peerUrl] : true;
175
- this.markForCheck();
176
- }
177
- /**
178
- * Check the min pod version, defined by the app
179
- *
180
- * @param peer
181
- */
182
- isCompatible(peer) {
183
- return !this.peerMinVersion || (peer && peer.softwareVersion && VersionUtils.isCompatible(this.peerMinVersion, peer.softwareVersion));
184
- }
185
- refresh(event) {
186
- this.loading = true;
187
- this.onRefresh.emit(event);
188
- }
189
- async clickSetManually(event) {
190
- const peerUrl = await this.openPeerUrlPopover(event);
191
- if (peerUrl) {
192
- const peer = Peer.parseUrl(peerUrl);
193
- await this.refreshPeer(peer);
194
- this.selectPeer(peer);
195
- }
196
- }
197
- /* -- protected methods -- */
198
- clearLogo(peer) {
199
- if (peer instanceof Peer) {
200
- peer.favicon = 'skip';
201
- }
202
- else {
203
- peer.logo = 'skip';
204
- }
205
- }
206
- async refreshPeers(peers) {
207
- peers = peers || [];
208
- const data = [];
209
- const jobs = Promise.all(peers.map(async (peer) => {
210
- await this.refreshPeer(peer);
211
- if (this._subscription.closed)
212
- return; // component destroyed
213
- data.push(peer);
214
- // Sort (by reachable, then host)
215
- data.sort((a, b) => {
216
- if (a.reachable && !b.reachable)
217
- return -1;
218
- if (!a.reachable && b.reachable)
219
- return 1;
220
- if (a.hostAndPort < b.hostAndPort)
221
- return -1;
222
- if (a.hostAndPort > b.hostAndPort)
223
- return 1;
224
- return 0;
225
- });
226
- this.peers = data.slice(); // Copy to force update
227
- return peer;
228
- }));
229
- try {
230
- await jobs;
231
- }
232
- catch (err) {
233
- if (!this._subscription.closed)
234
- console.error(err);
235
- }
236
- this.loading = false;
237
- this.cd.markForCheck();
238
- }
239
- async refreshPeer(peer) {
240
- try {
241
- // DEBUG
242
- //await sleep(Math.random() * 100);
243
- const summary = await NetworkUtils.getNodeInfo(this.http, peer.url);
244
- peer.status = 'UP';
245
- peer.softwareName = summary.softwareName;
246
- peer.softwareVersion = summary.softwareVersion;
247
- peer.label = summary.nodeLabel;
248
- peer.name = summary.nodeName;
249
- peer.features = summary.features?.map(NodeFeature.fromObject) || [];
250
- }
251
- catch (err) {
252
- // If modal was not closed (e.g. response arrived too late => ignore)
253
- if (!this._subscription.closed) {
254
- console.error(`[select-peer] Error while calling '${peer.url}/api/node/info': ${err?.message || err}`, err);
255
- this._logger?.error('refreshPeer', `Error while calling '${peer.url}/api/node/info': ${err?.message || JSON.stringify(err)}`);
256
- }
257
- peer.status = 'DOWN';
258
- }
259
- return peer;
260
- }
261
- async openPeerUrlPopover(event, opts) {
262
- const modal = await this.popoverController.create({
263
- component: TextPopover,
264
- componentProps: {
265
- placeholder: this.translate.instant('SETTINGS.PEER_URL'),
266
- multiline: false,
267
- autofocus: !this.mobile,
268
- autocomplete: false,
269
- validator: Validators.pattern(PEER_URL_REGEXP),
270
- maxLength: null,
271
- text: this.selectedPeer || this.peerDefaultPrefix,
272
- ...opts,
273
- },
274
- backdropDismiss: false,
275
- keyboardClose: false,
276
- event: null, // IMPORTANT: null event will center the popover, and this will fix keyboard overlap on mobile
277
- translucent: true,
278
- cssClass: 'popover-large',
279
- });
280
- await modal.present();
281
- const { data, role } = await modal.onDidDismiss();
282
- if (data) {
283
- console.info('Popover result: ', data);
284
- return data;
285
- }
286
- }
287
- updateFilteredPeer(event) {
288
- if (event) {
289
- event.preventDefault();
290
- event.stopPropagation();
291
- }
292
- const value = event.target.value;
293
- const test = this.filteredPeers$.pipe(map((peers) => peers.filter(EntityUtils.searchTextFilter(['features.label', 'features.name', 'features.description'], value))));
294
- console.log(test);
295
- // (event.target.value);
296
- this.markForCheck();
297
- }
298
- markForCheck() {
299
- this.cd.markForCheck();
300
- }
301
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SelectPeerModal, deps: [{ token: i1.ModalController }, { token: i1.PopoverController }, { token: i2.TranslateService }, { token: i3.HttpClient }, { token: i0.ChangeDetectorRef }, { token: ENVIRONMENT }, { token: APP_LOGGING_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Component });
302
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SelectPeerModal, selector: "select-peer-modal", inputs: { selectedTabIndex: ["selectedTabIndex", "selectedTabIndex", numberAttribute], selectedPeer: "selectedPeer", title: "title", canCancel: ["canCancel", "canCancel", booleanAttribute], allowSelectDownPeer: ["allowSelectDownPeer", "allowSelectDownPeer", booleanAttribute], showSetManuallyButton: ["showSetManuallyButton", "showSetManuallyButton", booleanAttribute], showSearchBar: ["showSearchBar", "showSearchBar", booleanAttribute], tabGroupAnimationDuration: "tabGroupAnimationDuration", onRefresh: "onRefresh", defaultPeers: "defaultPeers" }, viewQueries: [{ propertyName: "searchbar", first: true, predicate: ["searchbar"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"light\" style=\"z-index: 900\">\n <ion-buttons slot=\"start\">\n @if (canCancel) {\n <ion-button (click)=\"cancel()\" visible-mobile visible-sm visible-xs>\n <ion-icon name=\"arrow-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n }\n </ion-buttons>\n\n <ion-title>\n {{ title | translate }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <!-- loader -->\n @if (loading) {\n <ion-spinner></ion-spinner>\n } @else {\n <!-- refresh button -->\n <ion-button\n (click)=\"refresh($event)\"\n *ngIf=\"onRefresh.observed\"\n [matTooltip]=\"'COMMON.BTN_REFRESH' | translate\"\n >\n <mat-icon slot=\"icon-only\">refresh</mat-icon>\n </ion-button>\n }\n <!-- search button -->\n @if (!showSearchBar) {\n <ion-button (click)=\"toggleSearchBar()\">\n <ion-icon slot=\"icon-only\" name=\"search\"></ion-icon>\n </ion-button>\n }\n </ion-buttons>\n </ion-toolbar>\n\n <!-- search bar -->\n <ion-toolbar *ngIf=\"showSearchBar\">\n <ion-searchbar\n #searchbar\n animated\n type=\"search\"\n [class.cdk-visually-hidden]=\"!showSearchBar\"\n show-clear-button=\"always\"\n [placeholder]=\"'COMMON.BTN_SEARCH' | translate\"\n [cancelButtonText]=\"'COMMON.BTN_CANCEL' | translate\"\n [(ngModel)]=\"searchText\"\n (ionCancel)=\"toggleSearchBar()\"\n ></ion-searchbar>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <mat-tab-group\n #tabGroup\n [(selectedIndex)]=\"selectedTabIndex\"\n class=\"mat-mdc-tab-disabled-hidden\"\n [class.mat-mdc-tab-group-header-hidden]=\"!enableSelectPeerByFeature\"\n [dynamicHeight]=\"false\"\n [mat-stretch-tabs]=\"mobile\"\n [animationDuration]=\"mobile ? tabGroupAnimationDuration : '0s'\"\n >\n <mat-tab>\n <ng-template mat-tab-label>\n <ion-label\n [matBadge]=\"filteredPeerCount$ | async | badgeNumber\"\n [matBadgeHidden]=\"filteredPeerCount$ | async | isNil\"\n [matBadgeColor]=\"(filteredPeerCount$ | async) ? 'primary' : 'accent'\"\n matBadgeOverlap=\"false\"\n matBadgeColor=\"primary\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n >\n {{ 'NETWORK.PEER.SELECT_MODAL.TAB_NETWORK' | translate }}\n </ion-label>\n </ng-template>\n <ion-list>\n <ion-list-header>\n <ion-label class=\"ion-text-wrap ion-padding-end\">\n <p [innerHTML]=\"'NETWORK.PEER.SELECT_MODAL.NETWORK_HELP' | translate\"></p>\n </ion-label>\n </ion-list-header>\n\n @for (peer of filteredPeers$ | async; track $index) {\n <ion-item\n (click)=\"selectPeer(peer)\"\n @fadeInAnimation\n [class.selected]=\"selectedPeer && selectedPeer === peer.url\"\n detail\n matRipple\n tappable\n >\n <!-- Peer is UP -->\n @if (peer.reachable) {\n <!-- icon -->\n @if (peer.favicon != 'skip') {\n <ion-avatar slot=\"start\">\n <ion-img [src]=\"peer.favicon || peer.url + '/api/favicon'\" (ionError)=\"clearLogo(peer)\"></ion-img>\n <ion-icon name=\"server\" class=\"icon-secondary\" style=\"top: 12px; left: 44px\" color=\"dark\"></ion-icon>\n </ion-avatar>\n } @else {\n <ion-icon slot=\"start\" name=\"server\" class=\"ion-icon-avatar\" color=\"dark\"></ion-icon>\n }\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <ion-label class=\"ion-text-wrap\">\n <ion-text>\n @let url = peer.hostAndPort + peer.path;\n <h3 [innerHTML]=\"url | highlight: searchText\"></h3>\n </ion-text>\n <ion-text color=\"primary\">\n <h4 [innerHTML]=\"peer.label | highlight: searchText\"></h4>\n </ion-text>\n </ion-label>\n </ion-col>\n <ion-col size=\"12\" size-sm=\"4\">\n <ion-label class=\"ion-text-wrap ion-text-sm-center\" color=\"medium\">\n <h4>\n <small>{{ peer.softwareName }}&nbsp;</small>\n <br class=\"hidden-xxs hidden-xs\" />\n <!-- Compatible -->\n @if (!peerMinVersion || isCompatible(peer)) {\n <small>v{{ peer.softwareVersion }}</small>\n } @else {\n <!-- Incompatible -->\n <ion-text\n color=\"danger\"\n [matTooltip]=\"\n 'NETWORK.PEER.SELECT_MODAL.NOT_COMPATIBLE_HELP' | translate: { version: peerMinVersion }\n \"\n >\n <small class=\"ion-color-danger\">\n <mat-icon>warning</mat-icon>\n v{{ peer.softwareVersion }}\n </small>\n </ion-text>\n }\n </h4>\n </ion-label>\n </ion-col>\n </ion-row>\n </ion-grid>\n } @else {\n <!-- Peer is DOWN -->\n <ion-icon slot=\"start\" name=\"server\" class=\"disabled ion-icon-avatar\"></ion-icon>\n\n <ion-label class=\"ion-text-wrap\">\n <ion-text color=\"medium\">\n <h3>{{ peer.hostAndPort }}{{ peer.path }}</h3>\n </ion-text>\n <ion-text color=\"danger\">\n <h4>\n <small>\n <ion-icon size=\"small\" name=\"close-circle\"></ion-icon>\n </small>\n <span translate>NETWORK.PEER.OFFLINE</span>\n </h4>\n </ion-text>\n </ion-label>\n }\n </ion-item>\n }\n\n <!-- no result -->\n @if ((filteredPeerCount$ | async) === 0) {\n <ion-item>\n <ion-text color=\"danger\" class=\"text-italic\" translate>COMMON.NO_RESULT</ion-text>\n </ion-item>\n }\n </ion-list>\n </mat-tab>\n\n <!-- Select by features -->\n <mat-tab [disabled]=\"!enableSelectPeerByFeature\">\n <ng-template mat-tab-label>\n <ion-label\n [matBadge]=\"filteredFeaturesCount$ | async | badgeNumber\"\n [matBadgeHidden]=\"filteredFeaturesCount$ | async | isNil\"\n [matBadgeColor]=\"(filteredFeaturesCount$ | async) ? 'primary' : 'accent'\"\n matBadgeOverlap=\"false\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n >\n {{ 'NETWORK.PEER.SELECT_MODAL.TAB_FEATURES' | translate }}\n </ion-label>\n </ng-template>\n <ion-list>\n <ion-list-header>\n <ion-label class=\"ion-text-wrap ion-padding-end\">\n <p [innerHTML]=\"'NETWORK.PEER.SELECT_MODAL.FEATURES_HELP' | translate\"></p>\n </ion-label>\n </ion-list-header>\n\n @for (peer of filteredPeersByFeatures$ | async; track $index) {\n @let peerUrl = peer.hostAndPort + peer.path;\n <!-- Peer is UP -->\n @if (peer.reachable && peer.features | isNotEmptyArray) {\n @let collapsed = collapsedPeers[peerUrl];\n\n <ion-item-divider (click)=\"togglePeerFeatures(peerUrl)\" tappable @fadeInAnimation>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <ion-label>\n <h4>\n <ion-icon name=\"server\" color=\"medium\"></ion-icon>\n {{ peer.hostAndPort }}{{ peer.path }}\n </h4>\n @if (peerMinVersion && !isCompatible(peer)) {\n <ion-text\n color=\"danger\"\n [matTooltip]=\"\n 'NETWORK.PEER.SELECT_MODAL.NOT_COMPATIBLE_HELP' | translate: { version: peerMinVersion }\n \"\n >\n <h4 class=\"ion-color-danger\">\n <small>\n <mat-icon>warning</mat-icon>\n v{{ peer.softwareVersion }}\n </small>\n </h4>\n </ion-text>\n }\n </ion-label>\n </ion-col>\n <ion-col size=\"4\" class=\"ion-text-end\">\n <ion-label class=\"text-italic\">\n <h4>({{ 'COMMON.RESULT_COUNT' | translate: { count: peer.features.length } }})</h4>\n </ion-label>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <mat-icon slot=\"end\">\n @if (collapsed) {\n {{ mobile ? 'arrow_drop_down' : 'keyboard_arrow_down' }}\n } @else {\n {{ mobile ? 'arrow_drop_up' : 'keyboard_arrow_up' }}\n }\n </mat-icon>\n </ion-item-divider>\n\n @if (!collapsed) {\n @for (feature of peer.features; track feature.label) {\n <ion-item (click)=\"selectPeer(peer)\" tappable matRipple detail @fadeInAnimation>\n <!-- icon -->\n @if (feature.logo && feature.logo != 'skip') {\n <ion-avatar slot=\"start\">\n <ion-img [src]=\"feature.logo\" (ionError)=\"clearLogo(feature)\"></ion-img>\n </ion-avatar>\n } @else if (peer.favicon != 'skip') {\n <ion-avatar slot=\"start\">\n <ion-img [src]=\"peer.favicon || peer.url + '/api/favicon'\" (ionError)=\"clearLogo(peer)\"></ion-img>\n <ion-icon\n name=\"contract\"\n class=\"icon-secondary\"\n style=\"top: 12px; left: 44px\"\n color=\"dark\"\n ></ion-icon>\n </ion-avatar>\n } @else {\n <ion-icon slot=\"start\" name=\"contract\" class=\"ion-icon-avatar\" color=\"dark\"></ion-icon>\n }\n\n <ion-label class=\"ion-text-wrap\">\n <ion-text color=\"primary\">\n <h3 [innerHTML]=\"feature | referentialToString | highlight: searchText\"></h3>\n </ion-text>\n <ion-text>\n <p [innerHTML]=\"feature.description | highlight: searchText\"></p>\n </ion-text>\n </ion-label>\n </ion-item>\n }\n }\n }\n }\n\n <!-- no result -->\n @if ((filteredFeaturesCount$ | async) === 0) {\n <ion-item>\n <ion-text color=\"danger\" class=\"text-italic\" translate>COMMON.NO_RESULT</ion-text>\n </ion-item>\n }\n </ion-list>\n </mat-tab>\n </mat-tab-group>\n</ion-content>\n\n@if ((canCancel && !mobile) || showSetManuallyButton) {\n <ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding ion-text-nowrap\">\n <ion-col></ion-col>\n\n <!-- buttons -->\n @if (showSetManuallyButton) {\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" (click)=\"clickSetManually($event)\">\n <ion-label translate>NETWORK.PEER.SELECT_MODAL.BTN_SET_MANUALLY</ion-label>\n </ion-button>\n </ion-col>\n }\n\n @if (canCancel) {\n <ion-col size=\"auto\" hidden-xs hidden-sm hidden-mobile>\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n </ion-col>\n }\n </ion-row>\n </ion-toolbar>\n </ion-footer>\n}\n", styles: [".mat-mdc-tab-group{height:100%}.mat-mdc-tab-group .mat-tab-body-wrapper{height:calc(100% - var(--mat-tab-header-height))}ion-item-divider .ion-icon-avatar,ion-item .ion-icon-avatar{-webkit-margin-end:16px;margin-inline-end:16px;font-size:40px;width:40px;height:40px}ion-item-divider .ion-icon-avatar.disabled,ion-item .ion-icon-avatar.disabled{color:rgba(var(--ion-color-medium-rgb),.7)}ion-item-divider h4 ion-icon,ion-item-divider h4 mat-icon,ion-item h4 ion-icon,ion-item h4 mat-icon{height:14px;width:14px;font-size:14px;line-height:14px}ion-item-divider h4 small ion-icon,ion-item-divider h4 small mat-icon,ion-item h4 small ion-icon,ion-item h4 small mat-icon{height:12px;width:12px;font-size:12px;line-height:12px}ion-item-divider.selected,ion-item.selected{--ion-color-base: var(--ion-color-secondary100-contrast) !important;--ion-item-background: var(--ion-color-secondary100)}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.IonAvatar, selector: "ion-avatar" }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i1.IonItemDivider, selector: "ion-item-divider", inputs: ["color", "mode", "sticky"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i1.IonListHeader, selector: "ion-list-header", inputs: ["color", "lines", "mode"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocapitalize", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "maxlength", "minlength", "mode", "name", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }, { kind: "component", type: i1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i1.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar,ion-range" }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i7.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i7.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i8.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: i9.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "pipe", type: i11.HighlightPipe, name: "highlight" }, { kind: "pipe", type: i12.NotEmptyArrayPipe, name: "isNotEmptyArray" }, { kind: "pipe", type: i13.IsNilPipe, name: "isNil" }, { kind: "pipe", type: i14.BadgeNumberPipe, name: "badgeNumber" }, { kind: "pipe", type: i15.ReferentialToStringPipe, name: "referentialToString" }], animations: [fadeInAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
303
- }
304
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SelectPeerModal, decorators: [{
305
- type: Component,
306
- args: [{ selector: 'select-peer-modal', changeDetection: ChangeDetectionStrategy.OnPush, animations: [fadeInAnimation], template: "<ion-header>\n <ion-toolbar color=\"light\" style=\"z-index: 900\">\n <ion-buttons slot=\"start\">\n @if (canCancel) {\n <ion-button (click)=\"cancel()\" visible-mobile visible-sm visible-xs>\n <ion-icon name=\"arrow-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n }\n </ion-buttons>\n\n <ion-title>\n {{ title | translate }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <!-- loader -->\n @if (loading) {\n <ion-spinner></ion-spinner>\n } @else {\n <!-- refresh button -->\n <ion-button\n (click)=\"refresh($event)\"\n *ngIf=\"onRefresh.observed\"\n [matTooltip]=\"'COMMON.BTN_REFRESH' | translate\"\n >\n <mat-icon slot=\"icon-only\">refresh</mat-icon>\n </ion-button>\n }\n <!-- search button -->\n @if (!showSearchBar) {\n <ion-button (click)=\"toggleSearchBar()\">\n <ion-icon slot=\"icon-only\" name=\"search\"></ion-icon>\n </ion-button>\n }\n </ion-buttons>\n </ion-toolbar>\n\n <!-- search bar -->\n <ion-toolbar *ngIf=\"showSearchBar\">\n <ion-searchbar\n #searchbar\n animated\n type=\"search\"\n [class.cdk-visually-hidden]=\"!showSearchBar\"\n show-clear-button=\"always\"\n [placeholder]=\"'COMMON.BTN_SEARCH' | translate\"\n [cancelButtonText]=\"'COMMON.BTN_CANCEL' | translate\"\n [(ngModel)]=\"searchText\"\n (ionCancel)=\"toggleSearchBar()\"\n ></ion-searchbar>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <mat-tab-group\n #tabGroup\n [(selectedIndex)]=\"selectedTabIndex\"\n class=\"mat-mdc-tab-disabled-hidden\"\n [class.mat-mdc-tab-group-header-hidden]=\"!enableSelectPeerByFeature\"\n [dynamicHeight]=\"false\"\n [mat-stretch-tabs]=\"mobile\"\n [animationDuration]=\"mobile ? tabGroupAnimationDuration : '0s'\"\n >\n <mat-tab>\n <ng-template mat-tab-label>\n <ion-label\n [matBadge]=\"filteredPeerCount$ | async | badgeNumber\"\n [matBadgeHidden]=\"filteredPeerCount$ | async | isNil\"\n [matBadgeColor]=\"(filteredPeerCount$ | async) ? 'primary' : 'accent'\"\n matBadgeOverlap=\"false\"\n matBadgeColor=\"primary\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n >\n {{ 'NETWORK.PEER.SELECT_MODAL.TAB_NETWORK' | translate }}\n </ion-label>\n </ng-template>\n <ion-list>\n <ion-list-header>\n <ion-label class=\"ion-text-wrap ion-padding-end\">\n <p [innerHTML]=\"'NETWORK.PEER.SELECT_MODAL.NETWORK_HELP' | translate\"></p>\n </ion-label>\n </ion-list-header>\n\n @for (peer of filteredPeers$ | async; track $index) {\n <ion-item\n (click)=\"selectPeer(peer)\"\n @fadeInAnimation\n [class.selected]=\"selectedPeer && selectedPeer === peer.url\"\n detail\n matRipple\n tappable\n >\n <!-- Peer is UP -->\n @if (peer.reachable) {\n <!-- icon -->\n @if (peer.favicon != 'skip') {\n <ion-avatar slot=\"start\">\n <ion-img [src]=\"peer.favicon || peer.url + '/api/favicon'\" (ionError)=\"clearLogo(peer)\"></ion-img>\n <ion-icon name=\"server\" class=\"icon-secondary\" style=\"top: 12px; left: 44px\" color=\"dark\"></ion-icon>\n </ion-avatar>\n } @else {\n <ion-icon slot=\"start\" name=\"server\" class=\"ion-icon-avatar\" color=\"dark\"></ion-icon>\n }\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <ion-label class=\"ion-text-wrap\">\n <ion-text>\n @let url = peer.hostAndPort + peer.path;\n <h3 [innerHTML]=\"url | highlight: searchText\"></h3>\n </ion-text>\n <ion-text color=\"primary\">\n <h4 [innerHTML]=\"peer.label | highlight: searchText\"></h4>\n </ion-text>\n </ion-label>\n </ion-col>\n <ion-col size=\"12\" size-sm=\"4\">\n <ion-label class=\"ion-text-wrap ion-text-sm-center\" color=\"medium\">\n <h4>\n <small>{{ peer.softwareName }}&nbsp;</small>\n <br class=\"hidden-xxs hidden-xs\" />\n <!-- Compatible -->\n @if (!peerMinVersion || isCompatible(peer)) {\n <small>v{{ peer.softwareVersion }}</small>\n } @else {\n <!-- Incompatible -->\n <ion-text\n color=\"danger\"\n [matTooltip]=\"\n 'NETWORK.PEER.SELECT_MODAL.NOT_COMPATIBLE_HELP' | translate: { version: peerMinVersion }\n \"\n >\n <small class=\"ion-color-danger\">\n <mat-icon>warning</mat-icon>\n v{{ peer.softwareVersion }}\n </small>\n </ion-text>\n }\n </h4>\n </ion-label>\n </ion-col>\n </ion-row>\n </ion-grid>\n } @else {\n <!-- Peer is DOWN -->\n <ion-icon slot=\"start\" name=\"server\" class=\"disabled ion-icon-avatar\"></ion-icon>\n\n <ion-label class=\"ion-text-wrap\">\n <ion-text color=\"medium\">\n <h3>{{ peer.hostAndPort }}{{ peer.path }}</h3>\n </ion-text>\n <ion-text color=\"danger\">\n <h4>\n <small>\n <ion-icon size=\"small\" name=\"close-circle\"></ion-icon>\n </small>\n <span translate>NETWORK.PEER.OFFLINE</span>\n </h4>\n </ion-text>\n </ion-label>\n }\n </ion-item>\n }\n\n <!-- no result -->\n @if ((filteredPeerCount$ | async) === 0) {\n <ion-item>\n <ion-text color=\"danger\" class=\"text-italic\" translate>COMMON.NO_RESULT</ion-text>\n </ion-item>\n }\n </ion-list>\n </mat-tab>\n\n <!-- Select by features -->\n <mat-tab [disabled]=\"!enableSelectPeerByFeature\">\n <ng-template mat-tab-label>\n <ion-label\n [matBadge]=\"filteredFeaturesCount$ | async | badgeNumber\"\n [matBadgeHidden]=\"filteredFeaturesCount$ | async | isNil\"\n [matBadgeColor]=\"(filteredFeaturesCount$ | async) ? 'primary' : 'accent'\"\n matBadgeOverlap=\"false\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n >\n {{ 'NETWORK.PEER.SELECT_MODAL.TAB_FEATURES' | translate }}\n </ion-label>\n </ng-template>\n <ion-list>\n <ion-list-header>\n <ion-label class=\"ion-text-wrap ion-padding-end\">\n <p [innerHTML]=\"'NETWORK.PEER.SELECT_MODAL.FEATURES_HELP' | translate\"></p>\n </ion-label>\n </ion-list-header>\n\n @for (peer of filteredPeersByFeatures$ | async; track $index) {\n @let peerUrl = peer.hostAndPort + peer.path;\n <!-- Peer is UP -->\n @if (peer.reachable && peer.features | isNotEmptyArray) {\n @let collapsed = collapsedPeers[peerUrl];\n\n <ion-item-divider (click)=\"togglePeerFeatures(peerUrl)\" tappable @fadeInAnimation>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <ion-label>\n <h4>\n <ion-icon name=\"server\" color=\"medium\"></ion-icon>\n {{ peer.hostAndPort }}{{ peer.path }}\n </h4>\n @if (peerMinVersion && !isCompatible(peer)) {\n <ion-text\n color=\"danger\"\n [matTooltip]=\"\n 'NETWORK.PEER.SELECT_MODAL.NOT_COMPATIBLE_HELP' | translate: { version: peerMinVersion }\n \"\n >\n <h4 class=\"ion-color-danger\">\n <small>\n <mat-icon>warning</mat-icon>\n v{{ peer.softwareVersion }}\n </small>\n </h4>\n </ion-text>\n }\n </ion-label>\n </ion-col>\n <ion-col size=\"4\" class=\"ion-text-end\">\n <ion-label class=\"text-italic\">\n <h4>({{ 'COMMON.RESULT_COUNT' | translate: { count: peer.features.length } }})</h4>\n </ion-label>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <mat-icon slot=\"end\">\n @if (collapsed) {\n {{ mobile ? 'arrow_drop_down' : 'keyboard_arrow_down' }}\n } @else {\n {{ mobile ? 'arrow_drop_up' : 'keyboard_arrow_up' }}\n }\n </mat-icon>\n </ion-item-divider>\n\n @if (!collapsed) {\n @for (feature of peer.features; track feature.label) {\n <ion-item (click)=\"selectPeer(peer)\" tappable matRipple detail @fadeInAnimation>\n <!-- icon -->\n @if (feature.logo && feature.logo != 'skip') {\n <ion-avatar slot=\"start\">\n <ion-img [src]=\"feature.logo\" (ionError)=\"clearLogo(feature)\"></ion-img>\n </ion-avatar>\n } @else if (peer.favicon != 'skip') {\n <ion-avatar slot=\"start\">\n <ion-img [src]=\"peer.favicon || peer.url + '/api/favicon'\" (ionError)=\"clearLogo(peer)\"></ion-img>\n <ion-icon\n name=\"contract\"\n class=\"icon-secondary\"\n style=\"top: 12px; left: 44px\"\n color=\"dark\"\n ></ion-icon>\n </ion-avatar>\n } @else {\n <ion-icon slot=\"start\" name=\"contract\" class=\"ion-icon-avatar\" color=\"dark\"></ion-icon>\n }\n\n <ion-label class=\"ion-text-wrap\">\n <ion-text color=\"primary\">\n <h3 [innerHTML]=\"feature | referentialToString | highlight: searchText\"></h3>\n </ion-text>\n <ion-text>\n <p [innerHTML]=\"feature.description | highlight: searchText\"></p>\n </ion-text>\n </ion-label>\n </ion-item>\n }\n }\n }\n }\n\n <!-- no result -->\n @if ((filteredFeaturesCount$ | async) === 0) {\n <ion-item>\n <ion-text color=\"danger\" class=\"text-italic\" translate>COMMON.NO_RESULT</ion-text>\n </ion-item>\n }\n </ion-list>\n </mat-tab>\n </mat-tab-group>\n</ion-content>\n\n@if ((canCancel && !mobile) || showSetManuallyButton) {\n <ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding ion-text-nowrap\">\n <ion-col></ion-col>\n\n <!-- buttons -->\n @if (showSetManuallyButton) {\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" (click)=\"clickSetManually($event)\">\n <ion-label translate>NETWORK.PEER.SELECT_MODAL.BTN_SET_MANUALLY</ion-label>\n </ion-button>\n </ion-col>\n }\n\n @if (canCancel) {\n <ion-col size=\"auto\" hidden-xs hidden-sm hidden-mobile>\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n </ion-col>\n }\n </ion-row>\n </ion-toolbar>\n </ion-footer>\n}\n", styles: [".mat-mdc-tab-group{height:100%}.mat-mdc-tab-group .mat-tab-body-wrapper{height:calc(100% - var(--mat-tab-header-height))}ion-item-divider .ion-icon-avatar,ion-item .ion-icon-avatar{-webkit-margin-end:16px;margin-inline-end:16px;font-size:40px;width:40px;height:40px}ion-item-divider .ion-icon-avatar.disabled,ion-item .ion-icon-avatar.disabled{color:rgba(var(--ion-color-medium-rgb),.7)}ion-item-divider h4 ion-icon,ion-item-divider h4 mat-icon,ion-item h4 ion-icon,ion-item h4 mat-icon{height:14px;width:14px;font-size:14px;line-height:14px}ion-item-divider h4 small ion-icon,ion-item-divider h4 small mat-icon,ion-item h4 small ion-icon,ion-item h4 small mat-icon{height:12px;width:12px;font-size:12px;line-height:12px}ion-item-divider.selected,ion-item.selected{--ion-color-base: var(--ion-color-secondary100-contrast) !important;--ion-item-background: var(--ion-color-secondary100)}\n"] }]
307
- }], ctorParameters: () => [{ type: i1.ModalController }, { type: i1.PopoverController }, { type: i2.TranslateService }, { type: i3.HttpClient }, { type: i0.ChangeDetectorRef }, { type: i16.Environment, decorators: [{
308
- type: Inject,
309
- args: [ENVIRONMENT]
310
- }] }, { type: undefined, decorators: [{
311
- type: Optional
312
- }, {
313
- type: Inject,
314
- args: [APP_LOGGING_SERVICE]
315
- }] }], propDecorators: { selectedTabIndex: [{
316
- type: Input,
317
- args: [{ transform: numberAttribute }]
318
- }], selectedPeer: [{
319
- type: Input
320
- }], title: [{
321
- type: Input
322
- }], canCancel: [{
323
- type: Input,
324
- args: [{ transform: booleanAttribute }]
325
- }], allowSelectDownPeer: [{
326
- type: Input,
327
- args: [{ transform: booleanAttribute }]
328
- }], showSetManuallyButton: [{
329
- type: Input,
330
- args: [{ transform: booleanAttribute }]
331
- }], showSearchBar: [{
332
- type: Input,
333
- args: [{ transform: booleanAttribute }]
334
- }], tabGroupAnimationDuration: [{
335
- type: Input
336
- }], onRefresh: [{
337
- type: Input
338
- }], defaultPeers: [{
339
- type: Input
340
- }], searchbar: [{
341
- type: ViewChild,
342
- args: ['searchbar', { static: true }]
343
- }] } });
344
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXBlZXIubW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvcGVlci9zZWxlY3QtcGVlci5tb2RhbC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9wZWVyL3NlbGVjdC1wZWVyLm1vZGFsLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUNoQix1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLGVBQWUsRUFFZixRQUFRLEVBQ1IsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUU1RSxPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFzQixNQUFNLDZDQUE2QyxDQUFDO0FBRTlGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7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QTFELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UscUJBQXFCO3NCQUE1RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLGFBQWE7c0JBQXBELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQzdCLHlCQUF5QjtzQkFBakMsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBSW9DLFNBQVM7c0JBQWxELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIG51bWJlckF0dHJpYnV0ZSxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvblNlYXJjaGJhciwgTW9kYWxDb250cm9sbGVyLCBQb3BvdmVyQ29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFBlZXIgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmFkZUluQW5pbWF0aW9uIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21hdGVyaWFsL21hdGVyaWFsLmFuaW1hdGlvbnMnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE5ldHdvcmtVdGlscywgTm9kZUluZm8gfSBmcm9tICcuLi9zZXJ2aWNlcy9uZXR3b3JrLnV0aWxzJztcbmltcG9ydCB7IFZlcnNpb25VdGlscyB9IGZyb20gJy4uLy4uL3NoYXJlZC92ZXJzaW9uL3ZlcnNpb25zJztcbmltcG9ydCB7IEVudmlyb25tZW50LCBFTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQgeyBUZXh0UG9wb3ZlciwgVGV4dFBvcG92ZXJPcHRpb25zIH0gZnJvbSAnLi4vZm9ybS90ZXh0LXBvcG92ZXIvdGV4dC1wb3BvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBpc01vYmlsZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9wbGF0Zm9ybXMnO1xuaW1wb3J0IHsgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFBFRVJfVVJMX1JFR0VYUCB9IGZyb20gJy4uL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZSc7XG5pbXBvcnQgeyBBUFBfTE9HR0lOR19TRVJWSUNFIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xvZ2dpbmcvbG9nZ2luZy1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IElMb2dnZXIsIElMb2dnaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9sb2dnaW5nL2xvZ2dlci5tb2RlbCc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFbnRpdHlVdGlscyB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBSeFN0YXRlIH0gZnJvbSAnQHJ4LWFuZ3VsYXIvc3RhdGUnO1xuaW1wb3J0IHsgc3VnZ2VzdEZyb21BcnJheSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBpc05pbE9yQmxhbmssIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IE5vZGVGZWF0dXJlIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvbm9kZS1mZWF0dXJlLm1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBJU2VsZWN0UGVlck1vZGFsT3B0aW9ucyB7XG4gIGNhbkNhbmNlbDogYm9vbGVhbjtcbiAgYWxsb3dTZWxlY3REb3duUGVlcjogYm9vbGVhbjtcbiAgb25SZWZyZXNoOiBFdmVudEVtaXR0ZXI8RXZlbnQ+O1xuICBzaG93U2V0TWFudWFsbHlCdXR0b246IGJvb2xlYW47XG4gIHNlbGVjdGVkUGVlcj86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGRlZmF1bHRQZWVyczogUGVlcltdO1xuICBzaG93U2VhcmNoQmFyPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2VsZWN0UGVlck1vZGFsU3RhdGUge1xuICBkZWZhdWx0UGVlcnM6IFBlZXJbXTtcbiAgcGVlcnM6IFBlZXJbXTtcbiAgZmlsdGVyZWRQZWVyczogUGVlcltdO1xuICBmaWx0ZXJlZFBlZXJzQnlGZWF0dXJlczogUGVlcltdO1xuICBmaWx0ZXJlZFBlZXJDb3VudDogbnVtYmVyO1xuICBmaWx0ZXJlZEZlYXR1cmVzQ291bnQ6IG51bWJlcjtcbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuICBzZWxlY3RlZFRhYkluZGV4OiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NlbGVjdC1wZWVyLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICdzZWxlY3QtcGVlci5tb2RhbC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LXBlZXIubW9kYWwuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgYW5pbWF0aW9uczogW2ZhZGVJbkFuaW1hdGlvbl0sXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdFBlZXJNb2RhbCBleHRlbmRzIFJ4U3RhdGU8SVNlbGVjdFBlZXJNb2RhbFN0YXRlPiBpbXBsZW1lbnRzIE9uRGVzdHJveSwgSVNlbGVjdFBlZXJNb2RhbE9wdGlvbnMge1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlcjtcblxuICBwcm90ZWN0ZWQgZGVmYXVsdFBlZXJzJCA9IHRoaXMuc2VsZWN0KCdkZWZhdWx0UGVlcnMnKTtcbiAgcHJvdGVjdGVkIHBlZXJzJCA9IHRoaXMuc2VsZWN0KCdwZWVycycpO1xuICBwcm90ZWN0ZWQgZmlsdGVyZWRQZWVycyQgPSB0aGlzLnNlbGVjdCgnZmlsdGVyZWRQZWVycycpO1xuICBwcm90ZWN0ZWQgZmlsdGVyZWRQZWVyc0J5RmVhdHVyZXMkID0gdGhpcy5zZWxlY3QoJ2ZpbHRlcmVkUGVlcnNCeUZlYXR1cmVzJyk7XG4gIHByb3RlY3RlZCBmaWx0ZXJlZFBlZXJDb3VudCQgPSB0aGlzLnNlbGVjdCgnZmlsdGVyZWRQZWVyQ291bnQnKTtcbiAgcHJvdGVjdGVkIGZpbHRlcmVkRmVhdHVyZXNDb3VudCQgPSB0aGlzLnNlbGVjdCgnZmlsdGVyZWRGZWF0dXJlc0NvdW50Jyk7XG5cbiAgcHJvdGVjdGVkIGxvYWRpbmcgPSB0cnVlO1xuICBwcm90ZWN0ZWQgbW9iaWxlOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgcGVlck1pblZlcnNpb246IHN0cmluZztcbiAgcHJvdGVjdGVkIHBlZXJEZWZhdWx0UHJlZml4OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBlbmFibGVTZWxlY3RQZWVyQnlGZWF0dXJlOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgY29sbGFwc2VkUGVlcnM6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG5cbiAgc2V0IHBlZXJzKHZhbHVlOiBQZWVyW10pIHtcbiAgICB0aGlzLnNldCgncGVlcnMnLCAoKSA9PiB2YWx1ZSk7XG4gIH1cbiAgZ2V0IHBlZXJzKCk6IFBlZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdwZWVycycpO1xuICB9XG4gIHNldCBzZWFyY2hUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldCgnc2VhcmNoVGV4dCcsICgpID0+IHZhbHVlKTtcbiAgfVxuICBnZXQgc2VhcmNoVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldCgnc2VhcmNoVGV4dCcpO1xuICB9XG4gIHNldCBmaWx0ZXJlZFBlZXJzKHZhbHVlOiBQZWVyW10pIHtcbiAgICB0aGlzLnNldCgnZmlsdGVyZWRQZWVycycsICgpID0+IHZhbHVlKTtcbiAgfVxuICBnZXQgZmlsdGVyZWRQZWVycygpOiBQZWVyW10ge1xuICAgIHJldHVybiB0aGlzLmdldCgnZmlsdGVyZWRQZWVycycpO1xuICB9XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgc2V0IHNlbGVjdGVkVGFiSW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuc2V0KCdzZWxlY3RlZFRhYkluZGV4JywgKCkgPT4gdmFsdWUpO1xuICB9XG4gIGdldCBzZWxlY3RlZFRhYkluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdzZWxlY3RlZFRhYkluZGV4Jyk7XG4gIH1cblxuICBASW5wdXQoKSBzZWxlY3RlZFBlZXI6IHN0cmluZztcbiAgQElucHV0KCkgdGl0bGUgPSAnTkVUV09SSy5QRUVSLlNFTEVDVF9NT0RBTC5USVRMRSc7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjYW5DYW5jZWwgPSB0cnVlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYWxsb3dTZWxlY3REb3duUGVlciA9IHRydWU7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93U2V0TWFudWFsbHlCdXR0b24gPSB0cnVlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd1NlYXJjaEJhcjogYm9vbGVhbjtcbiAgQElucHV0KCkgdGFiR3JvdXBBbmltYXRpb25EdXJhdGlvbjogJzIwMG1zJztcblxuICBASW5wdXQoKSBvblJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXG4gIEBJbnB1dCgpIHNldCBkZWZhdWx0UGVlcnModmFsdWU6IFBlZXJbXSkge1xuICAgIHRoaXMuc2V0KCdkZWZhdWx0UGVlcnMnLCAoKSA9PiB2YWx1ZSk7XG4gIH1cblxuICBAVmlld0NoaWxkKCdzZWFyY2hiYXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBzZWFyY2hiYXI6IElvblNlYXJjaGJhcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHByaXZhdGUgcG9wb3ZlckNvbnRyb2xsZXI6IFBvcG92ZXJDb250cm9sbGVyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0xPR0dJTkdfU0VSVklDRSkgcHJvdGVjdGVkIGxvZ2dpbmdTZXJ2aWNlPzogSUxvZ2dpbmdTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zZXQoeyBzZWFyY2hUZXh0OiBudWxsLCBzZWxlY3RlZFRhYkluZGV4OiAwIH0pO1xuICAgIHRoaXMubW9iaWxlID0gaXNNb2JpbGUod2luZG93KTtcbiAgICB0aGlzLl9sb2dnZXIgPSBsb2dnaW5nU2VydmljZT8uZ2V0TG9nZ2VyKCduZXR3b3JrLW1vZGFsJyk7XG4gICAgdGhpcy5wZWVyTWluVmVyc2lvbiA9IGVudmlyb25tZW50LnBlZXJNaW5WZXJzaW9uO1xuICAgIHRoaXMucGVlckRlZmF1bHRQcmVmaXggPSBlbnZpcm9ubWVudC5wZWVyRGVmYXVsdFByZWZpeCB8fCAnaHR0cHM6Ly8nO1xuICAgIHRoaXMuZW5hYmxlU2VsZWN0UGVlckJ5RmVhdHVyZSA9IGVudmlyb25tZW50LmVuYWJsZVNlbGVjdFBlZXJCeUZlYXR1cmUgfHwgZmFsc2U7XG4gICAgdGhpcy5zaG93U2VhcmNoQmFyID0gdGhpcy5lbmFibGVTZWxlY3RQZWVyQnlGZWF0dXJlOyAvLyBTaG93IHNlYXJjaCBiYXIgYnkgZGVmYXVsdCwgaWYgdHdvIHRhYnNcblxuICAgIC8vIFJlZnJlc2hpbmcgcGVlcnNcbiAgICB0aGlzLmhvbGQodGhpcy5kZWZhdWx0UGVlcnMkLCAocmVzKSA9PiB0aGlzLnJlZnJlc2hQZWVycyhyZXMpKTtcblxuICAgIC8vIFNlYXJjaCBvbiBob3N0XG4gICAgdGhpcy5jb25uZWN0KFxuICAgICAgJ2ZpbHRlcmVkUGVlcnMnLFxuICAgICAgdGhpcy5zZWxlY3QoWydwZWVycycsICdzZWFyY2hUZXh0J10sIChyZXMpID0+IHJlcykucGlwZShcbiAgICAgICAgbWFwKCh7IHBlZXJzLCBzZWFyY2hUZXh0IH0pID0+IHtcbiAgICAgICAgICBpZiAoaXNOaWxPckJsYW5rKHNlYXJjaFRleHQpKSByZXR1cm4gcGVlcnM7IC8vIEFsbFxuXG4gICAgICAgICAgY29uc29sZS5kZWJ1ZygnW3NlbGVjdC1wZWVyLW1vZGFsXSBTZWFyY2hpbmcgb24gaG9zdHM6ICcgKyBzZWFyY2hUZXh0KTtcbiAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHN1Z2dlc3RGcm9tQXJyYXkocGVlcnMsIHNlYXJjaFRleHQsIHtcbiAgICAgICAgICAgIGFueVNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgIHNlYXJjaEF0dHJpYnV0ZXM6IFsnbGFiZWwnLCAnaG9zdEFuZFBvcnQnXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuY29ubmVjdCgnZmlsdGVyZWRQZWVyQ291bnQnLCB0aGlzLmZpbHRlcmVkUGVlcnMkLnBpcGUobWFwKChwZWVycykgPT4gcGVlcnM/Lmxlbmd0aCA/PyAwKSkpO1xuXG4gICAgLy8gU2VhcmNoIG9uIGZlYXR1cmVzXG4gICAgaWYgKHRoaXMuZW5hYmxlU2VsZWN0UGVlckJ5RmVhdHVyZSkge1xuICAgICAgdGhpcy5jb25uZWN0KFxuICAgICAgICAnZmlsdGVyZWRQZWVyc0J5RmVhdHVyZXMnLFxuICAgICAgICB0aGlzLnNlbGVjdChbJ3BlZXJzJywgJ3NlYXJjaFRleHQnXSwgKHJlcykgPT4gcmVzKS5waXBlKFxuICAgICAgICAgIG1hcCgoeyBwZWVycywgc2VhcmNoVGV4dCB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNOaWxPckJsYW5rKHNlYXJjaFRleHQpKSB7XG4gICAgICAgICAgICAgIHJldHVybiAocGVlcnMgfHwgW10pLmZpbHRlcigocCkgPT4gaXNOb3RFbXB0eUFycmF5KHA/LmZlYXR1cmVzKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZWxlY3QtcGVlci1tb2RhbF0gU2VhcmNoaW5nIG9uIGZlYXR1cmVzOiAnICsgc2VhcmNoVGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gcGVlcnNcbiAgICAgICAgICAgICAgLm1hcCgocGVlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogZmVhdHVyZXMgfSA9IHN1Z2dlc3RGcm9tQXJyYXkocGVlci5mZWF0dXJlcyB8fCBbXSwgc2VhcmNoVGV4dCwge1xuICAgICAgICAgICAgICAgICAgYW55U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgc2VhcmNoQXR0cmlidXRlczogWydsYWJlbCcsICduYW1lJywgJ2Rlc2NyaXB0aW9uJ10sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTm90RW1wdHlBcnJheShmZWF0dXJlcykpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUGVlciA9IHBlZXIuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgIGZpbHRlcmVkUGVlci5mZWF0dXJlcyA9IGZlYXR1cmVzO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkUGVlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5maWx0ZXIoaXNOb3ROaWwpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICB0aGlzLmNvbm5lY3QoJ2ZpbHRlcmVkRmVhdHVyZXNDb3VudCcsIHRoaXMuZmlsdGVyZWRQZWVyc0J5RmVhdHVyZXMkLnBpcGUobWFwKFBlZXIuY291bnRBbGxGZWF0dXJlcykpKTtcbiAgICB9XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5tb2RhbEN0cmwuZGlzbWlzcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBzZWxlY3RQZWVyKHBlZXI6IFBlZXIpIHtcbiAgICBpZiAodGhpcy5hbGxvd1NlbGVjdERvd25QZWVyIHx8IChwZWVyLnJlYWNoYWJsZSAmJiB0aGlzLmlzQ29tcGF0aWJsZShwZWVyKSkpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFtzZWxlY3QtcGVlci1tb2RhbF0gU2VsZWN0ZWQgcGVlcjoge3VybDogJyR7cGVlci51cmx9J31gKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRQZWVyID0gcGVlci51cmw7XG4gICAgICB0aGlzLm1vZGFsQ3RybC5kaXNtaXNzKHBlZXIpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHRvZ2dsZVNlYXJjaEJhcigpIHtcbiAgICB0aGlzLnNob3dTZWFyY2hCYXIgPSAhdGhpcy5zaG93U2VhcmNoQmFyO1xuICAgIGlmICh0aGlzLnNob3dTZWFyY2hCYXIgJiYgdGhpcy5zZWFyY2hiYXIpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaGJhci5zZXRGb2N1cygpO1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSwgMzAwKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVQZWVyRmVhdHVyZXMocGVlclVybDogc3RyaW5nKSB7XG4gICAgaWYgKCFwZWVyVXJsKSByZXR1cm47XG4gICAgdGhpcy5jb2xsYXBzZWRQZWVyc1twZWVyVXJsXSA9IGlzTm90TmlsKHRoaXMuY29sbGFwc2VkUGVlcnNbcGVlclVybF0pID8gIXRoaXMuY29sbGFwc2VkUGVlcnNbcGVlclVybF0gOiB0cnVlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogIENoZWNrIHRoZSBtaW4gcG9kIHZlcnNpb24sIGRlZmluZWQgYnkgdGhlIGFwcFxuICAgKlxuICAgKiBAcGFyYW0gcGVlclxuICAgKi9cbiAgaXNDb21wYXRpYmxlKHBlZXI6IFBlZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMucGVlck1pblZlcnNpb24gfHwgKHBlZXIgJiYgcGVlci5zb2Z0d2FyZVZlcnNpb24gJiYgVmVyc2lvblV0aWxzLmlzQ29tcGF0aWJsZSh0aGlzLnBlZXJNaW5WZXJzaW9uLCBwZWVyLnNvZnR3YXJlVmVyc2lvbikpO1xuICB9XG5cbiAgcmVmcmVzaChldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMub25SZWZyZXNoLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgYXN5bmMgY2xpY2tTZXRNYW51YWxseShldmVudD86IEV2ZW50KSB7XG4gICAgY29uc3QgcGVlclVybCA9IGF3YWl0IHRoaXMub3BlblBlZXJVcmxQb3BvdmVyKGV2ZW50KTtcbiAgICBpZiAocGVlclVybCkge1xuICAgICAgY29uc3QgcGVlciA9IFBlZXIucGFyc2VVcmwocGVlclVybCk7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hQZWVyKHBlZXIpO1xuICAgICAgdGhpcy5zZWxlY3RQZWVyKHBlZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG4gIHByb3RlY3RlZCBjbGVhckxvZ28ocGVlcjogUGVlciB8IE5vZGVGZWF0dXJlKSB7XG4gICAgaWYgKHBlZXIgaW5zdGFuY2VvZiBQZWVyKSB7XG4gICAgICBwZWVyLmZhdmljb24gPSAnc2tpcCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZXIubG9nbyA9ICdza2lwJztcbiAgICB9XG4gIH1cbiAgYXN5bmMgcmVmcmVzaFBlZXJzKHBlZXJzOiBQZWVyW10pIHtcbiAgICBwZWVycyA9IHBlZXJzIHx8IFtdO1xuXG4gICAgY29uc3QgZGF0YTogUGVlcltdID0gW107XG4gICAgY29uc3Qgam9icyA9IFByb21pc2UuYWxsKFxuICAgICAgcGVlcnMubWFwKGFzeW5jIChwZWVyKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaFBlZXIocGVlcik7XG5cbiAgICAgICAgaWYgKHRoaXMuX3N1YnNjcmlwdGlvbi5jbG9zZWQpIHJldHVybjsgLy8gY29tcG9uZW50IGRlc3Ryb3llZFxuXG4gICAgICAgIGRhdGEucHVzaChwZWVyKTtcblxuICAgICAgICAvLyBTb3J0IChieSByZWFjaGFibGUsIHRoZW4gaG9zdClcbiAgICAgICAgZGF0YS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgaWYgKGEucmVhY2hhYmxlICYmICFiLnJlYWNoYWJsZSkgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmICghYS5yZWFjaGFibGUgJiYgYi5yZWFjaGFibGUpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChhLmhvc3RBbmRQb3J0IDwgYi5ob3N0QW5kUG9ydCkgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmIChhLmhvc3RBbmRQb3J0ID4gYi5ob3N0QW5kUG9ydCkgcmV0dXJuIDE7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucGVlcnMgPSBkYXRhLnNsaWNlKCk7IC8vIENvcHkgdG8gZm9yY2UgdXBkYXRlXG5cbiAgICAgICAgcmV0dXJuIHBlZXI7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgam9icztcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICghdGhpcy5fc3Vic2NyaXB0aW9uLmNsb3NlZCkgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIH1cbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlZnJlc2hQZWVyKHBlZXI6IFBlZXIpOiBQcm9taXNlPFBlZXI+IHtcbiAgICB0cnkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vYXdhaXQgc2xlZXAoTWF0aC5yYW5kb20oKSAqIDEwMCk7XG5cbiAgICAgIGNvbnN0IHN1bW1hcnk6IE5vZGVJbmZvID0gYXdhaXQgTmV0d29ya1V0aWxzLmdldE5vZGVJbmZvKHRoaXMuaHR0cCwgcGVlci51cmwpO1xuICAgICAgcGVlci5zdGF0dXMgPSAnVVAnO1xuICAgICAgcGVlci5zb2Z0d2FyZU5hbWUgPSBzdW1tYXJ5LnNvZnR3YXJlTmFtZTtcbiAgICAgIHBlZXIuc29mdHdhcmVWZXJzaW9uID0gc3VtbWFyeS5zb2Z0d2FyZVZlcnNpb247XG4gICAgICBwZWVyLmxhYmVsID0gc3VtbWFyeS5ub2RlTGFiZWw7XG4gICAgICBwZWVyLm5hbWUgPSBzdW1tYXJ5Lm5vZGVOYW1lO1xuICAgICAgcGVlci5mZWF0dXJlcyA9IHN1bW1hcnkuZmVhdHVyZXM/Lm1hcChOb2RlRmVhdHVyZS5mcm9tT2JqZWN0KSB8fCBbXTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIElmIG1vZGFsIHdhcyBub3QgY2xvc2VkIChlLmcuIHJlc3BvbnNlIGFycml2ZWQgdG9vIGxhdGUgPT4gaWdub3JlKVxuICAgICAgaWYgKCF0aGlzLl9zdWJzY3JpcHRpb24uY2xvc2VkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtzZWxlY3QtcGVlcl0gRXJyb3Igd2hpbGUgY2FsbGluZyAnJHtwZWVyLnVybH0vYXBpL25vZGUvaW5mbyc6ICR7ZXJyPy5tZXNzYWdlIHx8IGVycn1gLCBlcnIpO1xuICAgICAgICB0aGlzLl9sb2dnZXI/LmVycm9yKCdyZWZyZXNoUGVlcicsIGBFcnJvciB3aGlsZSBjYWxsaW5nICcke3BlZXIudXJsfS9hcGkvbm9kZS9pbmZvJzogJHtlcnI/Lm1lc3NhZ2UgfHwgSlNPTi5zdHJpbmdpZnkoZXJyKX1gKTtcbiAgICAgIH1cbiAgICAgIHBlZXIuc3RhdHVzID0gJ0RPV04nO1xuICAgIH1cbiAgICByZXR1cm4gcGVlcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvcGVuUGVlclVybFBvcG92ZXIoZXZlbnQ6IEV2ZW50LCBvcHRzPzogUGFydGlhbDxUZXh0UG9wb3Zlck9wdGlvbnM+KSB7XG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLnBvcG92ZXJDb250cm9sbGVyLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IFRleHRQb3BvdmVyLFxuICAgICAgY29tcG9uZW50UHJvcHM6IDxUZXh0UG9wb3Zlck9wdGlvbnM+e1xuICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnU0VUVElOR1MuUEVFUl9VUkwnKSxcbiAgICAgICAgbXVsdGlsaW5lOiBmYWxzZSxcbiAgICAgICAgYXV0b2ZvY3VzOiAhdGhpcy5tb2JpbGUsXG4gICAgICAgIGF1dG9jb21wbGV0ZTogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRvcjogVmFsaWRhdG9ycy5wYXR0ZXJuKFBFRVJfVVJMX1JFR0VYUCksXG4gICAgICAgIG1heExlbmd0aDogbnVsbCxcbiAgICAgICAgdGV4dDogdGhpcy5zZWxlY3RlZFBlZXIgfHwgdGhpcy5wZWVyRGVmYXVsdFByZWZpeCxcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgIH0sXG4gICAgICBiYWNrZHJvcERpc21pc3M6IGZhbHNlLFxuICAgICAga2V5Ym9hcmRDbG9zZTogZmFsc2UsXG4gICAgICBldmVudDogbnVsbCwgLy8gSU1QT1JUQU5UOiBudWxsIGV2ZW50IHdpbGwgY2VudGVyIHRoZSBwb3BvdmVyLCBhbmQgdGhpcyB3aWxsIGZpeCBrZXlib2FyZCBvdmVybGFwIG9uIG1vYmlsZVxuICAgICAgdHJhbnNsdWNlbnQ6IHRydWUsXG4gICAgICBjc3NDbGFzczogJ3BvcG92ZXItbGFyZ2UnLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgbW9kYWwucHJlc2VudCgpO1xuICAgIGNvbnN0IHsgZGF0YSwgcm9sZSB9ID0gYXdhaXQgbW9kYWwub25EaWREaXNtaXNzKCk7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgY29uc29sZS5pbmZvKCdQb3BvdmVyIHJlc3VsdDogJywgZGF0YSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlRmlsdGVyZWRQZWVyKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG5cbiAgICBjb25zdCB0ZXN0ID0gdGhpcy5maWx0ZXJlZFBlZXJzJC5waXBlKFxuICAgICAgbWFwKChwZWVycykgPT4gcGVlcnMuZmlsdGVyKEVudGl0eVV0aWxzLnNlYXJjaFRleHRGaWx0ZXIoWydmZWF0dXJlcy5sYWJlbCcsICdmZWF0dXJlcy5uYW1lJywgJ2ZlYXR1cmVzLmRlc2NyaXB0aW9uJ10sIHZhbHVlKSkpXG4gICAgKTtcblxuICAgIGNvbnNvbGUubG9nKHRlc3QpO1xuICAgIC8vIChldmVudC50YXJnZXQudmFsdWUpO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxpb24taGVhZGVyPlxuICA8aW9uLXRvb2xiYXIgY29sb3I9XCJsaWdodFwiIHN0eWxlPVwiei1pbmRleDogOTAwXCI+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgQGlmIChjYW5DYW5jZWwpIHtcbiAgICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cImNhbmNlbCgpXCIgdmlzaWJsZS1tb2JpbGUgdmlzaWJsZS1zbSB2aXNpYmxlLXhzPlxuICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiYXJyb3ctYmFja1wiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICB9XG4gICAgPC9pb24tYnV0dG9ucz5cblxuICAgIDxpb24tdGl0bGU+XG4gICAgICB7eyB0aXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvaW9uLXRpdGxlPlxuXG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgIDwhLS0gbG9hZGVyIC0tPlxuICAgICAgQGlmIChsb2FkaW5nKSB7XG4gICAgICAgIDxpb24tc3Bpbm5lcj48L2lvbi1zcGlubmVyPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDwhLS0gcmVmcmVzaCBidXR0b24gLS0+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgKGNsaWNrKT1cInJlZnJlc2goJGV2ZW50KVwiXG4gICAgICAgICAgKm5nSWY9XCJvblJlZnJlc2gub2JzZXJ2ZWRcIlxuICAgICAgICAgIFttYXRUb29sdGlwXT1cIidDT01NT04uQlROX1JFRlJFU0gnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtaWNvbiBzbG90PVwiaWNvbi1vbmx5XCI+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIH1cbiAgICAgIDwhLS0gc2VhcmNoIGJ1dHRvbiAtLT5cbiAgICAgIEBpZiAoIXNob3dTZWFyY2hCYXIpIHtcbiAgICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInRvZ2dsZVNlYXJjaEJhcigpXCI+XG4gICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwic2VhcmNoXCI+PC9pb24taWNvbj5cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgfVxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gIDwvaW9uLXRvb2xiYXI+XG5cbiAgPCEtLSBzZWFyY2ggYmFyIC0tPlxuICA8aW9uLXRvb2xiYXIgKm5nSWY9XCJzaG93U2VhcmNoQmFyXCI+XG4gICAgPGlvbi1zZWFyY2hiYXJcbiAgICAgICNzZWFyY2hiYXJcbiAgICAgIGFuaW1hdGVkXG4gICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgIFtjbGFzcy5jZGstdmlzdWFsbHktaGlkZGVuXT1cIiFzaG93U2VhcmNoQmFyXCJcbiAgICAgIHNob3ctY2xlYXItYnV0dG9uPVwiYWx3YXlzXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInQ09NTU9OLkJUTl9TRUFSQ0gnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtjYW5jZWxCdXR0b25UZXh0XT1cIidDT01NT04uQlROX0NBTkNFTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCJcbiAgICAgIChpb25DYW5jZWwpPVwidG9nZ2xlU2VhcmNoQmFyKClcIlxuICAgID48L2lvbi1zZWFyY2hiYXI+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1oZWFkZXI+XG5cbjxpb24tY29udGVudD5cbiAgPG1hdC10YWItZ3JvdXBcbiAgICAjdGFiR3JvdXBcbiAgICBbKHNlbGVjdGVkSW5kZXgpXT1cInNlbGVjdGVkVGFiSW5kZXhcIlxuICAgIGNsYXNzPVwibWF0LW1kYy10YWItZGlzYWJsZWQtaGlkZGVuXCJcbiAgICBbY2xhc3MubWF0LW1kYy10YWItZ3JvdXAtaGVhZGVyLWhpZGRlbl09XCIhZW5hYmxlU2VsZWN0UGVlckJ5RmVhdHVyZVwiXG4gICAgW2R5bmFtaWNIZWlnaHRdPVwiZmFsc2VcIlxuICAgIFttYXQtc3RyZXRjaC10YWJzXT1cIm1vYmlsZVwiXG4gICAgW2FuaW1hdGlvbkR1cmF0aW9uXT1cIm1vYmlsZSA/IHRhYkdyb3VwQW5pbWF0aW9uRHVyYXRpb24gOiAnMHMnXCJcbiAgPlxuICAgIDxtYXQtdGFiPlxuICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XG4gICAgICAgIDxpb24tbGFiZWxcbiAgICAgICAgICBbbWF0QmFkZ2VdPVwiZmlsdGVyZWRQZWVyQ291bnQkIHwgYXN5bmMgfCBiYWRnZU51bWJlclwiXG4gICAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cImZpbHRlcmVkUGVlckNvdW50JCB8IGFzeW5jIHwgaXNOaWxcIlxuICAgICAgICAgIFttYXRCYWRnZUNvbG9yXT1cIihmaWx0ZXJlZFBlZXJDb3VudCQgfCBhc3luYykgPyAncHJpbWFyeScgOiAnYWNjZW50J1wiXG4gICAgICAgICAgbWF0QmFkZ2VPdmVybGFwPVwiZmFsc2VcIlxuICAgICAgICAgIG1hdEJhZGdlQ29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICBtYXRCYWRnZVNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgbWF0QmFkZ2VQb3NpdGlvbj1cImFib3ZlIGFmdGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7ICdORVRXT1JLLlBFRVIuU0VMRUNUX01PREFMLlRBQl9ORVRXT1JLJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8aW9uLWxpc3Q+XG4gICAgICAgIDxpb24tbGlzdC1oZWFkZXI+XG4gICAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImlvbi10ZXh0LXdyYXAgaW9uLXBhZGRpbmctZW5kXCI+XG4gICAgICAgICAgICA8cCBbaW5uZXJIVE1MXT1cIidORVRXT1JLLlBFRVIuU0VMRUNUX01PREFMLk5FVFdPUktfSEVMUCcgfCB0cmFuc2xhdGVcIj48L3A+XG4gICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgIDwvaW9uLWxpc3QtaGVhZGVyPlxuXG4gICAgICAgIEBmb3IgKHBlZXIgb2YgZmlsdGVyZWRQZWVycyQgfCBhc3luYzsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgPGlvbi1pdGVtXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UGVlcihwZWVyKVwiXG4gICAgICAgICAgICBAZmFkZUluQW5pbWF0aW9uXG4gICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwic2VsZWN0ZWRQZWVyICYmIHNlbGVjdGVkUGVlciA9PT0gcGVlci51cmxcIlxuICAgICAgICAgICAgZGV0YWlsXG4gICAgICAgICAgICBtYXRSaXBwbGVcbiAgICAgICAgICAgIHRhcHBhYmxlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBQZWVyIGlzIFVQIC0tPlxuICAgICAgICAgICAgQGlmIChwZWVyLnJlYWNoYWJsZSkge1xuICAgICAgICAgICAgICA8IS0tIGljb24gLS0+XG4gICAgICAgICAgICAgIEBpZiAocGVlci5mYXZpY29uICE9ICdza2lwJykge1xuICAgICAgICAgICAgICAgIDxpb24tYXZhdGFyIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgICAgICAgICAgICAgPGlvbi1pbWcgW3NyY109XCJwZWVyLmZhdmljb24gfHwgcGVlci51cmwgKyAnL2FwaS9mYXZpY29uJ1wiIChpb25FcnJvcik9XCJjbGVhckxvZ28ocGVlcilcIj48L2lvbi1pbWc+XG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInNlcnZlclwiIGNsYXNzPVwiaWNvbi1zZWNvbmRhcnlcIiBzdHlsZT1cInRvcDogMTJweDsgbGVmdDogNDRweFwiIGNvbG9yPVwiZGFya1wiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgICAgPC9pb24tYXZhdGFyPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgbmFtZT1cInNlcnZlclwiIGNsYXNzPVwiaW9uLWljb24tYXZhdGFyXCIgY29sb3I9XCJkYXJrXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8aW9uLWdyaWQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgIDxpb24tcm93PlxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJpb24tdGV4dC13cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgQGxldCB1cmwgPSBwZWVyLmhvc3RBbmRQb3J0ICsgcGVlci5wYXRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIFtpbm5lckhUTUxdPVwidXJsIHwgaGlnaGxpZ2h0OiBzZWFyY2hUZXh0XCI+PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBbaW5uZXJIVE1MXT1cInBlZXIubGFiZWwgfCBoaWdobGlnaHQ6IHNlYXJjaFRleHRcIj48L2g0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjEyXCIgc2l6ZS1zbT1cIjRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImlvbi10ZXh0LXdyYXAgaW9uLXRleHQtc20tY2VudGVyXCIgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aDQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+e3sgcGVlci5zb2Z0d2FyZU5hbWUgfX0mbmJzcDs8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyIGNsYXNzPVwiaGlkZGVuLXh4cyBoaWRkZW4teHNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDb21wYXRpYmxlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghcGVlck1pblZlcnNpb24gfHwgaXNDb21wYXRpYmxlKHBlZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD52e3sgcGVlci5zb2Z0d2FyZVZlcnNpb24gfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSW5jb21wYXRpYmxlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLXRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTkVUV09SSy5QRUVSLlNFTEVDVF9NT0RBTC5OT1RfQ09NUEFUSUJMRV9IRUxQJyB8IHRyYW5zbGF0ZTogeyB2ZXJzaW9uOiBwZWVyTWluVmVyc2lvbiB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImlvbi1jb2xvci1kYW5nZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ7eyBwZWVyLnNvZnR3YXJlVmVyc2lvbiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgICAgICA8L2lvbi1ncmlkPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDwhLS0gUGVlciBpcyBET1dOIC0tPlxuICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgbmFtZT1cInNlcnZlclwiIGNsYXNzPVwiZGlzYWJsZWQgaW9uLWljb24tYXZhdGFyXCI+PC9pb24taWNvbj5cblxuICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNsYXNzPVwiaW9uLXRleHQtd3JhcFwiPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgPGgzPnt7IHBlZXIuaG9zdEFuZFBvcnQgfX17eyBwZWVyLnBhdGggfX08L2gzPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFuZ2VyXCI+XG4gICAgICAgICAgICAgICAgICA8aDQ+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gc2l6ZT1cInNtYWxsXCIgbmFtZT1cImNsb3NlLWNpcmNsZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5ORVRXT1JLLlBFRVIuT0ZGTElORTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gbm8gcmVzdWx0IC0tPlxuICAgICAgICBAaWYgKChmaWx0ZXJlZFBlZXJDb3VudCQgfCBhc3luYykgPT09IDApIHtcbiAgICAgICAgICA8aW9uLWl0ZW0+XG4gICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJkYW5nZXJcIiBjbGFzcz1cInRleHQtaXRhbGljXCIgdHJhbnNsYXRlPkNPTU1PTi5OT19SRVNVTFQ8L2lvbi10ZXh0PlxuICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgIH1cbiAgICAgIDwvaW9uLWxpc3Q+XG4gICAgPC9tYXQtdGFiPlxuXG4gICAgPCEtLSBTZWxlY3QgYnkgZmVhdHVyZXMgLS0+XG4gICAgPG1hdC10YWIgW2Rpc2FibGVkXT1cIiFlbmFibGVTZWxlY3RQZWVyQnlGZWF0dXJlXCI+XG4gICAgICA8bmctdGVtcGxhdGUgbWF0LXRhYi1sYWJlbD5cbiAgICAgICAgPGlvbi1sYWJlbFxuICAgICAgICAgIFttYXRCYWRnZV09XCJmaWx0ZXJlZEZlYXR1cmVzQ291bnQkIHwgYXN5bmMgfCBiYWRnZU51bWJlclwiXG4gICAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cImZpbHRlcmVkRmVhdHVyZXNDb3VudCQgfCBhc3luYyB8IGlzTmlsXCJcbiAgICAgICAgICBbbWF0QmFkZ2VDb2xvcl09XCIoZmlsdGVyZWRGZWF0dXJlc0NvdW50JCB8IGFzeW5jKSA/ICdwcmltYXJ5JyA6ICdhY2NlbnQnXCJcbiAgICAgICAgICBtYXRCYWRnZU92ZXJsYXA9XCJmYWxzZVwiXG4gICAgICAgICAgbWF0QmFkZ2VTaXplPVwic21hbGxcIlxuICAgICAgICAgIG1hdEJhZGdlUG9zaXRpb249XCJhYm92ZSBhZnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAnTkVUV09SSy5QRUVSLlNFTEVDVF9NT0RBTC5UQUJfRkVBVFVSRVMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxpb24tbGlzdD5cbiAgICAgICAgPGlvbi1saXN0LWhlYWRlcj5cbiAgICAgICAgICA8aW9uLWxhYmVsIGNsYXNzPVwiaW9uLXRleHQtd3JhcCBpb24tcGFkZGluZy1lbmRcIj5cbiAgICAgICAgICAgIDxwIFtpbm5lckhUTUxdPVwiJ05FVFdPUksuUEVFUi5TRUxFQ1RfTU9EQUwuRkVBVFVSRVNfSEVMUCcgfCB0cmFuc2xhdGVcIj48L3A+XG4gICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgIDwvaW9uLWxpc3QtaGVhZGVyPlxuXG4gICAgICAgIEBmb3IgKHBlZXIgb2YgZmlsdGVyZWRQZWVyc0J5RmVhdHVyZXMkIHwgYXN5bmM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgIEBsZXQgcGVlclVybCA9IHBlZXIuaG9zdEFuZFBvcnQgKyBwZWVyLnBhdGg7XG4gICAgICAgICAgPCEtLSBQZWVyIGlzIFVQIC0tPlxuICAgICAgICAgIEBpZiAocGVlci5yZWFjaGFibGUgJiYgcGVlci5mZWF0dXJlcyB8IGlzTm90RW1wdHlBcnJheSkge1xuICAgICAgICAgICAgQGxldCBjb2xsYXBzZWQgPSBjb2xsYXBzZWRQZWVyc1twZWVyVXJsXTtcblxuICAgICAgICAgICAgPGlvbi1pdGVtLWRpdmlkZXIgKGNsaWNrKT1cInRvZ2dsZVBlZXJGZWF0dXJlcyhwZWVyVXJsKVwiIHRhcHBhYmxlIEBmYWRlSW5BbmltYXRpb24+XG4gICAgICAgICAgICAgIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aDQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInNlcnZlclwiIGNvbG9yPVwibWVkaXVtXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHBlZXIuaG9zdEFuZFBvcnQgfX17eyBwZWVyLnBhdGggfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAocGVlck1pblZlcnNpb24gJiYgIWlzQ29tcGF0aWJsZShwZWVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05FVFdPUksuUEVFUi5TRUxFQ1RfTU9EQUwuTk9UX0NPTVBBVElCTEVfSEVMUCcgfCB0cmFuc2xhdGU6IHsgdmVyc2lvbjogcGVlck1pblZlcnNpb24gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJpb24tY29sb3ItZGFuZ2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPndhcm5pbmc8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnt7IHBlZXIuc29mdHdhcmVWZXJzaW9uIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCI0XCIgY2xhc3M9XCJpb24tdGV4dC1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cInRleHQtaXRhbGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGg0Pih7eyAnQ09NTU9OLlJFU1VMVF9DT1VOVCcgfCB0cmFuc2xhdGU6IHsgY291bnQ6IHBlZXIuZmVhdHVyZXMubGVuZ3RoIH0gfX0pPC9oND5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgICAgICA8L2lvbi1ncmlkPlxuXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgICAgICAgQGlmIChjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICAgIHt7IG1vYmlsZSA/ICdhcnJvd19kcm9wX2Rvd24nIDogJ2tleWJvYXJkX2Fycm93X2Rvd24nIH19XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICB7eyBtb2JpbGUgPyAnYXJyb3dfZHJvcF91cCcgOiAna2V5Ym9hcmRfYXJyb3dfdXAnIH19XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9pb24taXRlbS1kaXZpZGVyPlxuXG4gICAgICAgICAgICBAaWYgKCFjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgQGZvciAoZmVhdHVyZSBvZiBwZWVyLmZlYXR1cmVzOyB0cmFjayBmZWF0dXJlLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgPGlvbi1pdGVtIChjbGljayk9XCJzZWxlY3RQZWVyKHBlZXIpXCIgdGFwcGFibGUgbWF0UmlwcGxlIGRldGFpbCBAZmFkZUluQW5pbWF0aW9uPlxuICAgICAgICAgICAgICAgICAgPCEtLSBpY29uIC0tPlxuICAgICAgICAgICAgICAgICAgQGlmIChmZWF0dXJlLmxvZ28gJiYgZmVhdHVyZS5sb2dvICE9ICdza2lwJykge1xuICAgICAgICAgICAgICAgICAgICA8aW9uLWF2YXRhciBzbG90PVwic3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLWltZyBbc3JjXT1cImZlYXR1cmUubG9nb1wiIChpb25FcnJvcik9XCJjbGVhckxvZ28oZmVhdHVyZSlcIj48L2lvbi1pbWc+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWF2YXRhcj5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKHBlZXIuZmF2aWNvbiAhPSAnc2tpcCcpIHtcbiAgICAgICAgICAgICAgICAgICAgPGlvbi1hdmF0YXIgc2xvdD1cInN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi1pbWcgW3NyY109XCJwZWVyLmZhdmljb24gfHwgcGVlci51cmwgKyAnL2FwaS9mYXZpY29uJ1wiIChpb25FcnJvcik9XCJjbGVhckxvZ28ocGVlcilcIj48L2lvbi1pbWc+XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY29udHJhY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uLXNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInRvcDogMTJweDsgbGVmdDogNDRweFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImRhcmtcIlxuICAgICAgICAgICAgICAgICAgICAgID48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi1hdmF0YXI+XG4gICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJjb250cmFjdFwiIGNsYXNzPVwiaW9uLWljb24tYXZhdGFyXCIgY29sb3I9XCJkYXJrXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImlvbi10ZXh0LXdyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxoMyBbaW5uZXJIVE1MXT1cImZlYXR1cmUgfCByZWZlcmVudGlhbFRvU3RyaW5nIHwgaGlnaGxpZ2h0OiBzZWFyY2hUZXh0XCI+PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIDxwIFtpbm5lckhUTUxdPVwiZmVhdHVyZS5kZXNjcmlwdGlvbiB8IGhpZ2hsaWdodDogc2VhcmNoVGV4dFwiPjwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIG5vIHJlc3VsdCAtLT5cbiAgICAgICAgQGlmICgoZmlsdGVyZWRGZWF0dXJlc0NvdW50JCB8IGFzeW5jKSA9PT0gMCkge1xuICAgICAgICAgIDxpb24taXRlbT5cbiAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhbmdlclwiIGNsYXNzPVwidGV4dC1pdGFsaWNcIiB0cmFuc2xhdGU+Q09NTU9OLk5PX1JFU1VMVDwvaW9uLXRleHQ+XG4gICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgfVxuICAgICAgPC9pb24tbGlzdD5cbiAgICA8L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cbjwvaW9uLWNvbnRlbnQ+XG5cbkBpZiAoKGNhbkNhbmNlbCAmJiAhbW9iaWxlKSB8fCBzaG93U2V0TWFudWFsbHlCdXR0b24pIHtcbiAgPGlvbi1mb290ZXI+XG4gICAgPGlvbi10b29sYmFyPlxuICAgICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tbm8tcGFkZGluZyBpb24tdGV4dC1ub3dyYXBcIj5cbiAgICAgICAgPGlvbi1jb2w+PC9pb24tY29sPlxuXG4gICAgICAgIDwhLS0gYnV0dG9ucyAtLT5cbiAgICAgICAgQGlmIChzaG93U2V0TWFudWFsbHlCdXR0b24pIHtcbiAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiPlxuICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgKGNsaWNrKT1cImNsaWNrU2V0TWFudWFsbHkoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5ORVRXT1JLLlBFRVIuU0VMRUNUX01PREFMLkJUTl9TRVRfTUFOVUFMTFk8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGNhbkNhbmNlbCkge1xuICAgICAgICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCIgaGlkZGVuLXhzIGhpZGRlbi1zbSBoaWRkZW4tbW9iaWxlPlxuICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYXJrXCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+XG4gICAgICAgICAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5CVE5fQ0FOQ0VMPC9pb24tbGFiZWw+XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICB9XG4gICAgICA8L2lvbi1yb3c+XG4gICAgPC9pb24tdG9vbGJhcj5cbiAgPC9pb24tZm9vdGVyPlxufVxuIl19
@@ -1,36 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { SharedModule } from '../../shared/shared.module';
3
- import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
4
- import { SelectPeerModal } from './select-peer.modal';
5
- import { TranslateModule } from '@ngx-translate/core';
6
- import { AppTextPopoverModule } from '../form/text-popover/text-popover.module';
7
- import { CorePipesModule } from '../services/pipes/pipes.module';
8
- import { FormsModule } from '@angular/forms';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@ngx-translate/core";
11
- export class AppSelectPeerModule {
12
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppSelectPeerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
13
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AppSelectPeerModule, declarations: [
14
- // Network
15
- SelectPeerModal], imports: [SharedModule, i1.TranslateModule, AppTextPopoverModule, CorePipesModule, FormsModule], exports: [TranslateModule,
16
- // Components
17
- SelectPeerModal] });
18
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppSelectPeerModule, providers: [provideHttpClient(withInterceptorsFromDi())], imports: [SharedModule, TranslateModule.forChild(), AppTextPopoverModule, CorePipesModule, FormsModule, TranslateModule] });
19
- }
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppSelectPeerModule, decorators: [{
21
- type: NgModule,
22
- args: [{
23
- declarations: [
24
- // Network
25
- SelectPeerModal,
26
- ],
27
- exports: [
28
- TranslateModule,
29
- // Components
30
- SelectPeerModal,
31
- ],
32
- imports: [SharedModule, TranslateModule.forChild(), AppTextPopoverModule, CorePipesModule, FormsModule],
33
- providers: [provideHttpClient(withInterceptorsFromDi())],
34
- }]
35
- }] });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXBlZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3BlZXIvc2VsZWN0LXBlZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBZTdDLE1BQU0sT0FBTyxtQkFBbUI7d0dBQW5CLG1CQUFtQjt5R0FBbkIsbUJBQW1CO1lBWDVCLFVBQVU7WUFDVixlQUFlLGFBT1AsWUFBWSxzQkFBOEIsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLFdBQVcsYUFKcEcsZUFBZTtZQUNmLGFBQWE7WUFDYixlQUFlO3lHQUtOLG1CQUFtQixhQUZuQixDQUFDLGlCQUFpQixDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxZQUQ5QyxZQUFZLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRSxFQUFFLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxXQUFXLEVBSnBHLGVBQWU7OzRGQU9OLG1CQUFtQjtrQkFiL0IsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osVUFBVTt3QkFDVixlQUFlO3FCQUNoQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGVBQWU7cUJBQ2hCO29CQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLFdBQVcsQ0FBQztvQkFDdkcsU0FBUyxFQUFFLENBQUMsaUJBQWlCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO2lCQUN6RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTaGFyZWRNb2R1bGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2hhcmVkLm1vZHVsZSc7XG5pbXBvcnQgeyBwcm92aWRlSHR0cENsaWVudCwgd2l0aEludGVyY2VwdG9yc0Zyb21EaSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFNlbGVjdFBlZXJNb2RhbCB9IGZyb20gJy4vc2VsZWN0LXBlZXIubW9kYWwnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBcHBUZXh0UG9wb3Zlck1vZHVsZSB9IGZyb20gJy4uL2Zvcm0vdGV4dC1wb3BvdmVyL3RleHQtcG9wb3Zlci5tb2R1bGUnO1xuaW1wb3J0IHsgQ29yZVBpcGVzTW9kdWxlIH0gZnJvbSAnLi4vc2VydmljZXMvcGlwZXMvcGlwZXMubW9kdWxlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICAvLyBOZXR3b3JrXG4gICAgU2VsZWN0UGVlck1vZGFsLFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIC8vIENvbXBvbmVudHNcbiAgICBTZWxlY3RQZWVyTW9kYWwsXG4gIF0sXG4gIGltcG9ydHM6IFtTaGFyZWRNb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZS5mb3JDaGlsZCgpLCBBcHBUZXh0UG9wb3Zlck1vZHVsZSwgQ29yZVBpcGVzTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gIHByb3ZpZGVyczogW3Byb3ZpZGVIdHRwQ2xpZW50KHdpdGhJbnRlcmNlcHRvcnNGcm9tRGkoKSldLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBTZWxlY3RQZWVyTW9kdWxlIHt9XG4iXX0=