@sumaris-net/ngx-components 18.10.29 → 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 -274
  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 -275
  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 -48529
  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 -110
  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 -35
  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,471 +0,0 @@
1
- import { booleanAttribute, ChangeDetectionStrategy, Component, forwardRef, Inject, Input, Optional, ViewChild, } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR, Validators } from '@angular/forms';
3
- import { isMoment } from 'moment';
4
- import { SharedValidators } from '../../validator/validators';
5
- import { isBlankString, isNil, isNotNil, isNotNilBoolean, nullIfNilOrBlank } from '../../functions';
6
- import { filter, skip } from 'rxjs/operators';
7
- import { setTabIndex } from '../../inputs';
8
- import { Subscription } from 'rxjs';
9
- import { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';
10
- import { isFocusableElement } from '../../focusable';
11
- import { DateUtils, fromDateISOString, toDateISOString } from '../../dates';
12
- import { isMobile } from '../../platforms';
13
- import { maskitoDateOptionsGenerator, maskitoWithPlaceholder } from '@maskito/kit';
14
- import { MAT_FORM_FIELD_DEFAULT_APPEARANCE, MAT_FORM_FIELD_DEFAULT_SUBSCRIPT_SIZING } from '../material.config';
15
- import * as i0 from "@angular/core";
16
- import * as i1 from "@angular/material-moment-adapter";
17
- import * as i2 from "@ngx-translate/core";
18
- import * as i3 from "@angular/forms";
19
- import * as i4 from "@angular/common";
20
- import * as i5 from "@ionic/angular";
21
- import * as i6 from "@angular/material/form-field";
22
- import * as i7 from "@angular/material/input";
23
- import * as i8 from "@angular/material/icon";
24
- import * as i9 from "@angular/material/button";
25
- import * as i10 from "@angular/material/datepicker";
26
- import * as i11 from "@maskito/angular";
27
- import * as i12 from "../../directives/autofocus.directive";
28
- import * as i13 from "../../pipes/date-format.pipe";
29
- import * as i14 from "../../pipes/arrays.pipe";
30
- import * as i15 from "../../pipes/maps.pipe";
31
- import * as i16 from "../../pipes/types.pipes";
32
- const DEFAULT_VALUE_ACCESSOR = {
33
- provide: NG_VALUE_ACCESSOR,
34
- useExisting: forwardRef(() => MatDate),
35
- multi: true,
36
- };
37
- const I18N_KEYS = ['COMMON.DATE_PATTERN', 'COMMON.DATE_PLACEHOLDER'];
38
- const noop = () => { };
39
- export class MatDate {
40
- dateAdapter;
41
- translate;
42
- formBuilder;
43
- cd;
44
- formGroupDir;
45
- _onChangeCallback = noop;
46
- _onTouchedCallback = noop;
47
- _subscription = new Subscription();
48
- _writing = true;
49
- _disabling = false;
50
- _tabindex;
51
- _readonly = false;
52
- _appearance = null;
53
- _subscriptSizing = null;
54
- _defaultAppearance;
55
- _defaultSubscriptSizing;
56
- textControl;
57
- datePattern;
58
- locale;
59
- maskitoOptions;
60
- datePlaceholder;
61
- formControl;
62
- formControlName;
63
- placeholder;
64
- floatLabel = 'auto';
65
- mobile;
66
- compact = false;
67
- autofocus = false;
68
- clearable = false;
69
- required;
70
- startDate = null;
71
- timezone = null;
72
- datePickerFilter;
73
- set appearance(value) {
74
- this._appearance = value;
75
- }
76
- get appearance() {
77
- return this._appearance || this._defaultAppearance;
78
- }
79
- set subscriptSizing(value) {
80
- this._subscriptSizing = value;
81
- }
82
- get subscriptSizing() {
83
- return this._subscriptSizing || this._defaultSubscriptSizing;
84
- }
85
- set readonly(value) {
86
- this._readonly = value;
87
- this.markForCheck();
88
- }
89
- get readonly() {
90
- return this._readonly;
91
- }
92
- set tabindex(value) {
93
- if (this._tabindex !== value) {
94
- this._tabindex = value;
95
- if (!this._writing)
96
- this.updateTabIndex();
97
- }
98
- }
99
- get tabindex() {
100
- return this._tabindex;
101
- }
102
- get value() {
103
- return this.formControl.value;
104
- }
105
- get disabled() {
106
- return this.formControl.disabled;
107
- }
108
- datePicker;
109
- _matInput;
110
- constructor(dateAdapter, translate, formBuilder, cd, formGroupDir, defaultOptions) {
111
- this.dateAdapter = dateAdapter;
112
- this.translate = translate;
113
- this.formBuilder = formBuilder;
114
- this.cd = cd;
115
- this.formGroupDir = formGroupDir;
116
- this.locale = (translate.currentLang || translate.defaultLang).substring(0, 2);
117
- this._defaultSubscriptSizing = defaultOptions?.subscriptSizing || MAT_FORM_FIELD_DEFAULT_SUBSCRIPT_SIZING;
118
- this._defaultAppearance = defaultOptions?.appearance || MAT_FORM_FIELD_DEFAULT_APPEARANCE;
119
- }
120
- ngOnInit() {
121
- this.formControl =
122
- this.formControl || (this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName));
123
- if (!this.formControl)
124
- throw new Error("Missing mandatory attribute 'formControl' or 'formControlName' in <mat-date-field>.");
125
- this.mobile = isNotNil(this.mobile) ? this.mobile : isMobile(window);
126
- this.required = isNotNilBoolean(this.required)
127
- ? this.required
128
- : this.formControl.hasValidator(Validators.required) || isBlankString(this.required);
129
- // Add 'validDate' validator (when existing validator are null or required, to be sure to keep it)
130
- if (!this.formControl.validator || this.formControl.validator === Validators.required) {
131
- this.formControl.setValidators(this.required ? [Validators.required, SharedValidators.validDateAllowNoTime] : SharedValidators.validDateAllowNoTime);
132
- }
133
- else {
134
- this.formControl.setValidators(this.required
135
- ? [this.formControl.validator, Validators.required, SharedValidators.validDateAllowNoTime]
136
- : [this.formControl.validator, SharedValidators.validDateAllowNoTime]);
137
- }
138
- // Create the text control
139
- this.textControl = this.formBuilder.control(null,
140
- // Important: should copy errors from the model formControl
141
- () => this.formControl.errors);
142
- // Get patterns to display date
143
- this.updateTranslations(this.translate.instant(I18N_KEYS));
144
- this._subscription.add(this.translate
145
- .get(I18N_KEYS)
146
- .pipe(skip(1))
147
- .subscribe((translations) => this.updateTranslations(translations)));
148
- this._subscription.add(this.textControl.valueChanges.subscribe((value) => this.onFormChange(value)));
149
- // Listen status changes (when done outside the component - e.g. when setErrors() is calling on the formControl)
150
- this._subscription.add(this.formControl.statusChanges
151
- .pipe(filter((_) => !this.readonly && !this._writing && !this._disabling) // Skip
152
- )
153
- .subscribe(() => {
154
- this.textControl.updateValueAndValidity({ emitEvent: false });
155
- if (this.formControl.touched && !this.textControl.touched) {
156
- this.textControl.markAsTouched();
157
- }
158
- this.markForCheck();
159
- }));
160
- this._writing = false;
161
- }
162
- ngAfterViewInit() {
163
- this.updateTabIndex();
164
- }
165
- ngOnDestroy() {
166
- this._subscription.unsubscribe();
167
- }
168
- writeValue(value) {
169
- if (this._writing)
170
- return; // Skip
171
- this._writing = true;
172
- // DEBUG
173
- //console.debug("[mat-date] writeValue() with:", value);
174
- // Convert into date
175
- // Important: clone, because startOf will update the existing date
176
- const date = isMoment(value) ? value.clone() : fromDateISOString(value);
177
- if (!date || !date.isValid()) {
178
- this.textControl.patchValue(null, { emitEvent: false });
179
- if (this.formControl.value) {
180
- this.formControl.patchValue(null, { emitEvent: false });
181
- this._onChangeCallback(null);
182
- }
183
- }
184
- else {
185
- // Move to the expected TZ (keeping local hour - e.g. midnight)
186
- const day = ((this.timezone && date.tz(this.timezone)) || date)
187
- // Reset hour
188
- .startOf('day');
189
- const dayStr = this.dateAdapter.format(day, this.datePattern);
190
- if (this.textControl.value !== dayStr) {
191
- // Update text control
192
- this.textControl.patchValue(dayStr, { emitEvent: false });
193
- }
194
- }
195
- this._writing = false;
196
- this.markForCheck();
197
- }
198
- registerOnChange(fn) {
199
- this._onChangeCallback = fn;
200
- }
201
- registerOnTouched(fn) {
202
- this._onTouchedCallback = fn;
203
- }
204
- setDisabledState(isDisabled) {
205
- if (this._disabling)
206
- return;
207
- this._disabling = true;
208
- if (isDisabled) {
209
- this.textControl.disable({ emitEvent: false });
210
- }
211
- else {
212
- this.textControl.enable({ emitEvent: false });
213
- }
214
- this._disabling = false;
215
- this.markForCheck();
216
- }
217
- openDatePicker() {
218
- if (!this.datePicker)
219
- return;
220
- if (!this.datePicker.opened) {
221
- // DEBUG
222
- //console.debug('[mat-date] Opening date picker...');
223
- this.datePicker.open();
224
- }
225
- }
226
- focus() {
227
- if (!this._matInput)
228
- return;
229
- setTimeout(() => {
230
- if (isFocusableElement(this._matInput.nativeElement)) {
231
- this._matInput.nativeElement.focus();
232
- }
233
- });
234
- }
235
- clear(event) {
236
- this._preventEvent(event);
237
- this.formControl.setValue(null);
238
- this.markAsTouched();
239
- this.markAsDirty();
240
- }
241
- /* -- protected functions -- */
242
- _onDatePickerChange(event) {
243
- // Make sure event is valid
244
- if (!event || (event.value !== null && !isMoment(event.value))) {
245
- console.warn('Invalid MatDatepicker event. Skipping', event);
246
- return; // Skip
247
- }
248
- let value = event.value;
249
- // No value, but mobile mode: use the current date
250
- if (!value && this.mobile) {
251
- value = DateUtils.resetTime(DateUtils.moment().locale(this.locale), this.timezone);
252
- this.formControl.setValue(toDateISOString(value), {
253
- emitEvent: false, // Will call writeValue()
254
- });
255
- return;
256
- }
257
- const date = value
258
- ?.clone()
259
- .locale(this.locale) // set as time as locale time
260
- .startOf('day') // reset hour
261
- .utc(true);
262
- const dateStr = (date && this.dateAdapter.format(date, this.datePattern)) || null;
263
- if (this.textControl.value !== dateStr) {
264
- // DEBUG
265
- //console.debug("[mat-date] onDatePickerChange() new value:", dateStr);
266
- this.textControl.setValue(dateStr, {
267
- emitEvent: true, // Will call onFormChange
268
- });
269
- }
270
- }
271
- _openDatePickerIfMobile(event) {
272
- if (!this.mobile || event?.defaultPrevented || this.datePicker?.opened || this.disabled)
273
- return;
274
- //console.debug('[mat-date] Preparing to open date picker... ');
275
- this._preventEvent(event);
276
- // Open the picker
277
- this.openDatePicker();
278
- }
279
- _onBlur() {
280
- if (this.textControl.touched) {
281
- // Auto fill data in case of partial input
282
- this.writeValue(this.formControl.value);
283
- }
284
- // Check if touched
285
- this._checkIfTouched();
286
- }
287
- _checkIfTouched() {
288
- if (this.textControl.touched) {
289
- this._onTouchedCallback();
290
- this.markForCheck();
291
- }
292
- }
293
- _preventEvent(event) {
294
- if (!event)
295
- return;
296
- event.preventDefault();
297
- if (event.stopPropagation)
298
- event.stopPropagation();
299
- if (event.stopImmediatePropagation)
300
- event.stopImmediatePropagation();
301
- }
302
- /* -- private methods -- */
303
- updateTranslations(translations) {
304
- const datePattern = translations['COMMON.DATE_PATTERN'] !== 'COMMON.DATE_PATTERN' ? translations['COMMON.DATE_PATTERN'] : 'DD/MM/YYYY';
305
- this.updatePattern(datePattern);
306
- const datePlaceholder = translations['COMMON.DATE_PLACEHOLDER'] !== 'COMMON.DATE_PLACEHOLDER'
307
- ? translations['COMMON.DATE_PLACEHOLDER']
308
- : this.datePattern?.toLowerCase();
309
- this.updateMaskOptions(datePlaceholder);
310
- }
311
- updatePattern(pattern) {
312
- if (this.datePattern !== pattern) {
313
- this.datePattern = pattern;
314
- this.markForCheck();
315
- }
316
- }
317
- updateMaskOptions(datePlaceholder) {
318
- if (this.datePlaceholder != datePlaceholder) {
319
- this.datePlaceholder = datePlaceholder;
320
- const dateOptions = maskitoDateOptionsGenerator({
321
- mode: this.datePattern.toLowerCase(),
322
- separator: '/',
323
- });
324
- const { plugins, // plugins keeps caret inside actual value and remove placeholder on blur
325
- ...placeholderOptions
326
- // pass 'true' as second argument to add plugin to hide placeholder when input is not focused
327
- } = maskitoWithPlaceholder(this.datePlaceholder, true);
328
- this.maskitoOptions = {
329
- ...dateOptions,
330
- plugins: plugins.concat(dateOptions.plugins || []),
331
- preprocessors: [
332
- // Always put it BEFORE all other preprocessors
333
- ...placeholderOptions.preprocessors,
334
- ...dateOptions.preprocessors,
335
- ],
336
- postprocessors: [
337
- ...dateOptions.postprocessors,
338
- // Always put it AFTER all other postprocessors
339
- ...placeholderOptions.postprocessors,
340
- ],
341
- };
342
- this.markForCheck();
343
- }
344
- }
345
- onFormChange(dateStr) {
346
- if (this._writing)
347
- return; // Skip if call by self
348
- this._writing = true;
349
- if (dateStr === this.datePlaceholder) {
350
- dateStr = null;
351
- }
352
- else {
353
- dateStr = nullIfNilOrBlank(dateStr);
354
- }
355
- //console.debug(`[mat-date] onFormChange() - controls values: `, dateStr);
356
- // Force '0' for empty month (otherwise moment will use the current month)
357
- dateStr = dateStr
358
- ?.replace(/[^\d/]/g, '') // Keep only digits and slashes
359
- .replace('//', '/0/')
360
- // Force '0' for empty year (otherwise moment will use the current year)
361
- .replace(/\/$/, '/0');
362
- // Parse date (strict = false)
363
- let date = (dateStr && this.dateAdapter.parse(dateStr, this.datePattern)) || null;
364
- // Move to the expected TZ, and keep the local hour (= midnight) to have midnight at local time
365
- if (this.timezone) {
366
- date = date?.tz(this.timezone, true);
367
- }
368
- date = date
369
- ?.startOf('day') // Reset hour
370
- // Convert to UTC (avoid TZ offset in final string);
371
- .utc();
372
- // Set model value
373
- this.emitChange(date, dateStr);
374
- // Force the day control to update its validity (same errors as formControl - see ngOnInit())
375
- this.textControl.updateValueAndValidity();
376
- this._writing = false;
377
- }
378
- emitChange(date, defaultValue) {
379
- // Convert to model value (ISO date string)
380
- // IMPORTANT: If date is invalid, then keep the invalid string value
381
- // to allow SharedValidators.validDate() to raise an error
382
- const controlValue = date?.isValid() ? toDateISOString(date) : defaultValue || null;
383
- if (this.formControl.value !== controlValue) {
384
- // DEBUG
385
- //console.debug('[mat-date] Emit new value: ' + controlValue);
386
- // Update formControl value (this is need to update datePicker also, in desktop mode)
387
- if (!this.mobile && date?.isValid()) {
388
- this.formControl.setValue(controlValue, { emitEvent: false });
389
- }
390
- // Changes comes from inside function: use the callback
391
- this._onChangeCallback(controlValue);
392
- // Check if need to update controls
393
- this._checkIfTouched();
394
- }
395
- }
396
- updateTabIndex() {
397
- if (isNil(this._tabindex) || this._tabindex === -1)
398
- return; // skip
399
- // Focus to input
400
- setTimeout(() => {
401
- setTabIndex(this._matInput, this._tabindex);
402
- this.markForCheck();
403
- });
404
- }
405
- markAsTouched(opts) {
406
- this.textControl.markAsTouched(opts);
407
- this._onTouchedCallback();
408
- this.markForCheck();
409
- }
410
- markAsDirty(opts) {
411
- this.formControl.markAsDirty(opts);
412
- }
413
- markForCheck() {
414
- this.cd.markForCheck();
415
- }
416
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatDate, deps: [{ token: i1.MomentDateAdapter }, { token: i2.TranslateService }, { token: i3.UntypedFormBuilder }, { token: i0.ChangeDetectorRef }, { token: i3.FormGroupDirective, optional: true }, { token: MAT_FORM_FIELD_DEFAULT_OPTIONS }], target: i0.ɵɵFactoryTarget.Component });
417
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MatDate, selector: "mat-date-field", inputs: { formControl: "formControl", formControlName: "formControlName", placeholder: "placeholder", floatLabel: "floatLabel", mobile: ["mobile", "mobile", booleanAttribute], compact: ["compact", "compact", booleanAttribute], autofocus: ["autofocus", "autofocus", booleanAttribute], clearable: ["clearable", "clearable", booleanAttribute], required: ["required", "required", booleanAttribute], startDate: "startDate", timezone: "timezone", datePickerFilter: "datePickerFilter", appearance: "appearance", subscriptSizing: "subscriptSizing", readonly: "readonly", tabindex: "tabindex" }, providers: [DEFAULT_VALUE_ACCESSOR], viewQueries: [{ propertyName: "datePicker", first: true, predicate: ["datePicker"], descendants: true }, { propertyName: "_matInput", first: true, predicate: ["matInput"], descendants: true }], ngImport: i0, template: "<!-- readonly -->\n@if (readonly) {\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"mat-form-field-disabled\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <input matInput hidden type=\"text\" readonly [formControl]=\"formControl\" />\n <ion-text>{{ formControl.value | dateFormat: { pattern: datePattern } }}</ion-text>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n <!-- hints -->\n <mat-hint [class.cdk-visually-hidden]=\"formControl.invalid\">\n <ng-container *ngTemplateOutlet=\"matHintTemplate\"></ng-container>\n </mat-hint>\n </mat-form-field>\n} @else {\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n (focus)=\"_openDatePickerIfMobile($event)\"\n (click)=\"_openDatePickerIfMobile($event)\"\n [appearance]=\"appearance\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <!-- Desktop -->\n @if (!mobile) {\n <input\n matInput\n #matInput\n autocomplete=\"off\"\n type=\"text\"\n [maskito]=\"maskitoOptions\"\n [formControl]=\"textControl\"\n (blur)=\"_onBlur()\"\n (keyup.arrowDown)=\"openDatePicker()\"\n (keyup.escape)=\"_preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\"\n />\n <input\n type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly\n />\n } @else {\n <!-- Mobile -->\n <input\n #matInput\n autocomplete=\"off\"\n type=\"text\"\n class=\"mat-mdc-form-field-input-control mdc-text-field__input\"\n [formControl]=\"textControl\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly\n />\n <input\n matInput\n type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly\n />\n }\n\n <div matSuffix>\n <button type=\"button\" mat-icon-button tabindex=\"-1\" (click)=\"openDatePicker()\" [disabled]=\"disabled\">\n <mat-icon>{{ mobile ? 'date_range' : 'keyboard_arrow_down' }}</mat-icon>\n </button>\n\n @if (clearable) {\n <button\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clear($event)\"\n [hidden]=\"formControl.disabled || !formControl.value\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n <!-- errors -->\n <mat-error *ngIf=\"formControl.touched && formControl.errors | mapKeys | arrayFirst; let errorKey\">\n @switch (errorKey) {\n @case ('required') {\n <span translate>ERROR.FIELD_REQUIRED</span>\n }\n @case ('validDate') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE</span>\n }\n @case ('dateIsAfter') {\n <span>\n {{ 'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}\n </span>\n }\n @case ('dateIsBefore') {\n <span>\n {{ 'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}\n </span>\n }\n @case ('dateRange') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</span>\n }\n @case ('dateMaxDuration') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</span>\n }\n @case ('dateMinDuration') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</span>\n }\n @case ('msg') {\n <span>\n {{ formControl.errors.msg?.key || formControl.errors.msg | translate: formControl.errors.msg?.params }}\n </span>\n }\n }\n </mat-error>\n <ng-container *ngTemplateOutlet=\"matErrorTemplate\"></ng-container>\n <!-- hints -->\n @if (!formControl.invalid) {\n <mat-hint>\n <ng-container *ngTemplateOutlet=\"matHintTemplate\"></ng-container>\n </mat-hint>\n }\n </mat-form-field>\n\n <mat-datepicker #datePicker [touchUi]=\"mobile\" [disabled]=\"disabled\" [startAt]=\"startDate\">\n <!-- Date picker buttons -->\n @if (mobile) {\n <mat-datepicker-actions>\n <ion-button fill=\"clear\" color=\"dark\" matDatepickerCancel>\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button fill=\"solid\" color=\"tertiary\" matDatepickerApply>\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </mat-datepicker-actions>\n }\n </mat-datepicker>\n}\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n\n<ng-template #matErrorTemplate>\n <ng-content select=\"mat-error,[matError]\"></ng-content>\n</ng-template>\n\n<ng-template #matHintTemplate>\n <div class=\"mat-mdc-form-field-hint-wrapper\">\n <ng-content select=\"mat-hint:not([align='end']),[matHint]\"></ng-content>\n <div class=\"mat-mdc-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint[align='end']\"></ng-content>\n </div>\n</ng-template>\n", styles: [":host{display:inline-block;width:100%;position:relative}mat-form-field input[readonly]{-webkit-user-select:none!important;user-select:none!important}mat-form-field .datetime-md{padding:0!important}mat-form-field button[hidden]{display:none}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i5.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i5.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i6.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i6.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i10.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i10.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i10.MatDatepickerActions, selector: "mat-datepicker-actions, mat-date-range-picker-actions" }, { kind: "directive", type: i10.MatDatepickerCancel, selector: "[matDatepickerCancel], [matDateRangePickerCancel]" }, { kind: "directive", type: i10.MatDatepickerApply, selector: "[matDatepickerApply], [matDateRangePickerApply]" }, { kind: "directive", type: i11.MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i12.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "pipe", type: i13.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i14.ArrayFirstPipe, name: "arrayFirst" }, { kind: "pipe", type: i15.MapKeysPipe, name: "mapKeys" }, { kind: "pipe", type: i16.AsFloatLabelTypePipe, name: "asFloatLabelType" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
418
- }
419
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatDate, decorators: [{
420
- type: Component,
421
- args: [{ selector: 'mat-date-field', providers: [DEFAULT_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- readonly -->\n@if (readonly) {\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"mat-form-field-disabled\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <input matInput hidden type=\"text\" readonly [formControl]=\"formControl\" />\n <ion-text>{{ formControl.value | dateFormat: { pattern: datePattern } }}</ion-text>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n <!-- hints -->\n <mat-hint [class.cdk-visually-hidden]=\"formControl.invalid\">\n <ng-container *ngTemplateOutlet=\"matHintTemplate\"></ng-container>\n </mat-hint>\n </mat-form-field>\n} @else {\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n (focus)=\"_openDatePickerIfMobile($event)\"\n (click)=\"_openDatePickerIfMobile($event)\"\n [appearance]=\"appearance\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <!-- Desktop -->\n @if (!mobile) {\n <input\n matInput\n #matInput\n autocomplete=\"off\"\n type=\"text\"\n [maskito]=\"maskitoOptions\"\n [formControl]=\"textControl\"\n (blur)=\"_onBlur()\"\n (keyup.arrowDown)=\"openDatePicker()\"\n (keyup.escape)=\"_preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\"\n />\n <input\n type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly\n />\n } @else {\n <!-- Mobile -->\n <input\n #matInput\n autocomplete=\"off\"\n type=\"text\"\n class=\"mat-mdc-form-field-input-control mdc-text-field__input\"\n [formControl]=\"textControl\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly\n />\n <input\n matInput\n type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly\n />\n }\n\n <div matSuffix>\n <button type=\"button\" mat-icon-button tabindex=\"-1\" (click)=\"openDatePicker()\" [disabled]=\"disabled\">\n <mat-icon>{{ mobile ? 'date_range' : 'keyboard_arrow_down' }}</mat-icon>\n </button>\n\n @if (clearable) {\n <button\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clear($event)\"\n [hidden]=\"formControl.disabled || !formControl.value\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n <!-- errors -->\n <mat-error *ngIf=\"formControl.touched && formControl.errors | mapKeys | arrayFirst; let errorKey\">\n @switch (errorKey) {\n @case ('required') {\n <span translate>ERROR.FIELD_REQUIRED</span>\n }\n @case ('validDate') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE</span>\n }\n @case ('dateIsAfter') {\n <span>\n {{ 'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}\n </span>\n }\n @case ('dateIsBefore') {\n <span>\n {{ 'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}\n </span>\n }\n @case ('dateRange') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</span>\n }\n @case ('dateMaxDuration') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</span>\n }\n @case ('dateMinDuration') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</span>\n }\n @case ('msg') {\n <span>\n {{ formControl.errors.msg?.key || formControl.errors.msg | translate: formControl.errors.msg?.params }}\n </span>\n }\n }\n </mat-error>\n <ng-container *ngTemplateOutlet=\"matErrorTemplate\"></ng-container>\n <!-- hints -->\n @if (!formControl.invalid) {\n <mat-hint>\n <ng-container *ngTemplateOutlet=\"matHintTemplate\"></ng-container>\n </mat-hint>\n }\n </mat-form-field>\n\n <mat-datepicker #datePicker [touchUi]=\"mobile\" [disabled]=\"disabled\" [startAt]=\"startDate\">\n <!-- Date picker buttons -->\n @if (mobile) {\n <mat-datepicker-actions>\n <ion-button fill=\"clear\" color=\"dark\" matDatepickerCancel>\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button fill=\"solid\" color=\"tertiary\" matDatepickerApply>\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </mat-datepicker-actions>\n }\n </mat-datepicker>\n}\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n\n<ng-template #matErrorTemplate>\n <ng-content select=\"mat-error,[matError]\"></ng-content>\n</ng-template>\n\n<ng-template #matHintTemplate>\n <div class=\"mat-mdc-form-field-hint-wrapper\">\n <ng-content select=\"mat-hint:not([align='end']),[matHint]\"></ng-content>\n <div class=\"mat-mdc-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint[align='end']\"></ng-content>\n </div>\n</ng-template>\n", styles: [":host{display:inline-block;width:100%;position:relative}mat-form-field input[readonly]{-webkit-user-select:none!important;user-select:none!important}mat-form-field .datetime-md{padding:0!important}mat-form-field button[hidden]{display:none}\n"] }]
422
- }], ctorParameters: () => [{ type: i1.MomentDateAdapter }, { type: i2.TranslateService }, { type: i3.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }, { type: i3.FormGroupDirective, decorators: [{
423
- type: Optional
424
- }] }, { type: undefined, decorators: [{
425
- type: Inject,
426
- args: [MAT_FORM_FIELD_DEFAULT_OPTIONS]
427
- }] }], propDecorators: { formControl: [{
428
- type: Input
429
- }], formControlName: [{
430
- type: Input
431
- }], placeholder: [{
432
- type: Input
433
- }], floatLabel: [{
434
- type: Input
435
- }], mobile: [{
436
- type: Input,
437
- args: [{ transform: booleanAttribute }]
438
- }], compact: [{
439
- type: Input,
440
- args: [{ transform: booleanAttribute }]
441
- }], autofocus: [{
442
- type: Input,
443
- args: [{ transform: booleanAttribute }]
444
- }], clearable: [{
445
- type: Input,
446
- args: [{ transform: booleanAttribute }]
447
- }], required: [{
448
- type: Input,
449
- args: [{ transform: booleanAttribute }]
450
- }], startDate: [{
451
- type: Input
452
- }], timezone: [{
453
- type: Input
454
- }], datePickerFilter: [{
455
- type: Input
456
- }], appearance: [{
457
- type: Input
458
- }], subscriptSizing: [{
459
- type: Input
460
- }], readonly: [{
461
- type: Input
462
- }], tabindex: [{
463
- type: Input
464
- }], datePicker: [{
465
- type: ViewChild,
466
- args: ['datePicker']
467
- }], _matInput: [{
468
- type: ViewChild,
469
- args: ['matInput']
470
- }] } });
471
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuZGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2RhdGV0aW1lL21hdGVyaWFsLmRhdGUudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kYXRldGltZS9tYXRlcmlhbC5kYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGdCQUFnQixFQUNoQix1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFFUixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUE0QyxpQkFBaUIsRUFBMEMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakosT0FBTyxFQUFFLFFBQVEsRUFBVSxNQUFNLFFBQVEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEcsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQWdCLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSw4QkFBOEIsRUFBdUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVuSixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1B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O2dCQUNFLFNBQVM7c0JBQWhELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsU0FBUztzQkFBaEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxRQUFRO3NCQUEvQyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUM3QixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdGLFVBQVU7c0JBRGIsS0FBSztnQkFVRixlQUFlO3NCQURsQixLQUFLO2dCQVNPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBU08sUUFBUTtzQkFBcEIsS0FBSztnQkFtQm1CLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDQSxTQUFTO3NCQUEvQixTQUFTO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBQcm92aWRlcixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5HX1ZBTFVFX0FDQ0VTU09SLCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGlzTW9tZW50LCBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgU2hhcmVkVmFsaWRhdG9ycyB9IGZyb20gJy4uLy4uL3ZhbGlkYXRvci92YWxpZGF0b3JzJztcbmltcG9ydCB7IGlzQmxhbmtTdHJpbmcsIGlzTmlsLCBpc05vdE5pbCwgaXNOb3ROaWxCb29sZWFuLCBudWxsSWZOaWxPckJsYW5rIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IGZpbHRlciwgc2tpcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElucHV0RWxlbWVudCwgc2V0VGFiSW5kZXggfSBmcm9tICcuLi8uLi9pbnB1dHMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMsIE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UsIE1hdEZvcm1GaWVsZERlZmF1bHRPcHRpb25zLCBTdWJzY3JpcHRTaXppbmcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IERhdGVGaWx0ZXJGbiwgTWF0RGF0ZXBpY2tlciwgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IGlzRm9jdXNhYmxlRWxlbWVudCB9IGZyb20gJy4uLy4uL2ZvY3VzYWJsZSc7XG5pbXBvcnQgeyBEYXRlVXRpbHMsIGZyb21EYXRlSVNPU3RyaW5nLCB0b0RhdGVJU09TdHJpbmcgfSBmcm9tICcuLi8uLi9kYXRlcyc7XG5pbXBvcnQgeyBpc01vYmlsZSB9IGZyb20gJy4uLy4uL3BsYXRmb3Jtcyc7XG5pbXBvcnQgeyBNb21lbnREYXRlQWRhcHRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsLW1vbWVudC1hZGFwdGVyJztcbmltcG9ydCB7IEFwcEZsb2F0TGFiZWxUeXBlIH0gZnJvbSAnLi4vLi4vZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBNYXNraXRvT3B0aW9ucyB9IGZyb20gJ0BtYXNraXRvL2NvcmUnO1xuaW1wb3J0IHsgTWFza2l0b0RhdGVNb2RlLCBtYXNraXRvRGF0ZU9wdGlvbnNHZW5lcmF0b3IsIG1hc2tpdG9XaXRoUGxhY2Vob2xkZXIgfSBmcm9tICdAbWFza2l0by9raXQnO1xuaW1wb3J0IHsgTUFUX0ZPUk1fRklFTERfREVGQVVMVF9BUFBFQVJBTkNFLCBNQVRfRk9STV9GSUVMRF9ERUZBVUxUX1NVQlNDUklQVF9TSVpJTkcgfSBmcm9tICcuLi9tYXRlcmlhbC5jb25maWcnO1xuXG5jb25zdCBERUZBVUxUX1ZBTFVFX0FDQ0VTU09SOiBQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hdERhdGUpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5jb25zdCBJMThOX0tFWVMgPSBbJ0NPTU1PTi5EQVRFX1BBVFRFUk4nLCAnQ09NTU9OLkRBVEVfUExBQ0VIT0xERVInXTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtZGF0ZS1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC5kYXRlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYXRlcmlhbC5kYXRlLnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbREVGQVVMVF9WQUxVRV9BQ0NFU1NPUl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNYXREYXRlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBJbnB1dEVsZW1lbnQge1xuICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX3dyaXRpbmcgPSB0cnVlO1xuICBwcml2YXRlIF9kaXNhYmxpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdGFiaW5kZXg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcmVhZG9ubHkgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfYXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9zdWJzY3JpcHRTaXppbmc6IFN1YnNjcmlwdFNpemluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0QXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdFN1YnNjcmlwdFNpemluZzogU3Vic2NyaXB0U2l6aW5nO1xuXG4gIHByb3RlY3RlZCB0ZXh0Q29udHJvbDogVW50eXBlZEZvcm1Db250cm9sO1xuICBwcm90ZWN0ZWQgZGF0ZVBhdHRlcm46IHN0cmluZztcbiAgcHJvdGVjdGVkIGxvY2FsZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgbWFza2l0b09wdGlvbnM6IE1hc2tpdG9PcHRpb25zO1xuICBwcm90ZWN0ZWQgZGF0ZVBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgZm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcbiAgQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZsb2F0TGFiZWw6IEFwcEZsb2F0TGFiZWxUeXBlID0gJ2F1dG8nO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgbW9iaWxlOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY29tcGFjdCA9IGZhbHNlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYXV0b2ZvY3VzID0gZmFsc2U7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjbGVhcmFibGUgPSBmYWxzZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJlcXVpcmVkOiBib29sZWFuO1xuICBASW5wdXQoKSBzdGFydERhdGU6IE1vbWVudCB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSB0aW1lem9uZTogc3RyaW5nID0gbnVsbDtcbiAgQElucHV0KCkgZGF0ZVBpY2tlckZpbHRlcjogRGF0ZUZpbHRlckZuPE1vbWVudD47XG5cbiAgQElucHV0KClcbiAgc2V0IGFwcGVhcmFuY2UodmFsdWU6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UpIHtcbiAgICB0aGlzLl9hcHBlYXJhbmNlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgYXBwZWFyYW5jZSgpOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZWFyYW5jZSB8fCB0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBzdWJzY3JpcHRTaXppbmcodmFsdWU6IFN1YnNjcmlwdFNpemluZykge1xuICAgIHRoaXMuX3N1YnNjcmlwdFNpemluZyA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHN1YnNjcmlwdFNpemluZygpOiBTdWJzY3JpcHRTaXppbmcge1xuICAgIHJldHVybiB0aGlzLl9zdWJzY3JpcHRTaXppbmcgfHwgdGhpcy5fZGVmYXVsdFN1YnNjcmlwdFNpemluZztcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCByZWFkb25seSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3JlYWRvbmx5ID0gdmFsdWU7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCByZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgdGFiaW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLl90YWJpbmRleCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3RhYmluZGV4ID0gdmFsdWU7XG4gICAgICBpZiAoIXRoaXMuX3dyaXRpbmcpIHRoaXMudXBkYXRlVGFiSW5kZXgoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgdGFiaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiaW5kZXg7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29udHJvbC5kaXNhYmxlZDtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXInKSBkYXRlUGlja2VyOiBNYXREYXRlcGlja2VyPE1vbWVudD47XG4gIEBWaWV3Q2hpbGQoJ21hdElucHV0JykgX21hdElucHV0OiBFbGVtZW50UmVmO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGF0ZUFkYXB0ZXI6IE1vbWVudERhdGVBZGFwdGVyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1Hcm91cERpcjogRm9ybUdyb3VwRGlyZWN0aXZlLFxuICAgIEBJbmplY3QoTUFUX0ZPUk1fRklFTERfREVGQVVMVF9PUFRJT05TKSBkZWZhdWx0T3B0aW9ucz86IE1hdEZvcm1GaWVsZERlZmF1bHRPcHRpb25zXG4gICkge1xuICAgIHRoaXMubG9jYWxlID0gKHRyYW5zbGF0ZS5jdXJyZW50TGFuZyB8fCB0cmFuc2xhdGUuZGVmYXVsdExhbmcpLnN1YnN0cmluZygwLCAyKTtcbiAgICB0aGlzLl9kZWZhdWx0U3Vic2NyaXB0U2l6aW5nID0gZGVmYXVsdE9wdGlvbnM/LnN1YnNjcmlwdFNpemluZyB8fCBNQVRfRk9STV9GSUVMRF9ERUZBVUxUX1NVQlNDUklQVF9TSVpJTkc7XG4gICAgdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UgPSBkZWZhdWx0T3B0aW9ucz8uYXBwZWFyYW5jZSB8fCBNQVRfRk9STV9GSUVMRF9ERUZBVUxUX0FQUEVBUkFOQ0U7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZvcm1Db250cm9sID1cbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wgfHwgKHRoaXMuZm9ybUNvbnRyb2xOYW1lICYmIHRoaXMuZm9ybUdyb3VwRGlyICYmICh0aGlzLmZvcm1Hcm91cERpci5mb3JtLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSkgYXMgVW50eXBlZEZvcm1Db250cm9sKSk7XG4gICAgaWYgKCF0aGlzLmZvcm1Db250cm9sKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIG1hbmRhdG9yeSBhdHRyaWJ1dGUgJ2Zvcm1Db250cm9sJyBvciAnZm9ybUNvbnRyb2xOYW1lJyBpbiA8bWF0LWRhdGUtZmllbGQ+LlwiKTtcblxuICAgIHRoaXMubW9iaWxlID0gaXNOb3ROaWwodGhpcy5tb2JpbGUpID8gdGhpcy5tb2JpbGUgOiBpc01vYmlsZSh3aW5kb3cpO1xuICAgIHRoaXMucmVxdWlyZWQgPSBpc05vdE5pbEJvb2xlYW4odGhpcy5yZXF1aXJlZClcbiAgICAgID8gdGhpcy5yZXF1aXJlZFxuICAgICAgOiB0aGlzLmZvcm1Db250cm9sLmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKSB8fCBpc0JsYW5rU3RyaW5nKHRoaXMucmVxdWlyZWQpO1xuXG4gICAgLy8gQWRkICd2YWxpZERhdGUnIHZhbGlkYXRvciAod2hlbiBleGlzdGluZyB2YWxpZGF0b3IgYXJlIG51bGwgb3IgcmVxdWlyZWQsIHRvIGJlIHN1cmUgdG8ga2VlcCBpdClcbiAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wudmFsaWRhdG9yIHx8IHRoaXMuZm9ybUNvbnRyb2wudmFsaWRhdG9yID09PSBWYWxpZGF0b3JzLnJlcXVpcmVkKSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnMoXG4gICAgICAgIHRoaXMucmVxdWlyZWQgPyBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgU2hhcmVkVmFsaWRhdG9ycy52YWxpZERhdGVBbGxvd05vVGltZV0gOiBTaGFyZWRWYWxpZGF0b3JzLnZhbGlkRGF0ZUFsbG93Tm9UaW1lXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnMoXG4gICAgICAgIHRoaXMucmVxdWlyZWRcbiAgICAgICAgICA/IFt0aGlzLmZvcm1Db250cm9sLnZhbGlkYXRvciwgVmFsaWRhdG9ycy5yZXF1aXJlZCwgU2hhcmVkVmFsaWRhdG9ycy52YWxpZERhdGVBbGxvd05vVGltZV1cbiAgICAgICAgICA6IFt0aGlzLmZvcm1Db250cm9sLnZhbGlkYXRvciwgU2hhcmVkVmFsaWRhdG9ycy52YWxpZERhdGVBbGxvd05vVGltZV1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRoZSB0ZXh0IGNvbnRyb2xcbiAgICB0aGlzLnRleHRDb250cm9sID0gdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxuICAgICAgbnVsbCxcbiAgICAgIC8vIEltcG9ydGFudDogc2hvdWxkIGNvcHkgZXJyb3JzIGZyb20gdGhlIG1vZGVsIGZvcm1Db250cm9sXG4gICAgICAoKSA9PiB0aGlzLmZvcm1Db250cm9sLmVycm9yc1xuICAgICk7XG5cbiAgICAvLyBHZXQgcGF0dGVybnMgdG8gZGlzcGxheSBkYXRlXG4gICAgdGhpcy51cGRhdGVUcmFuc2xhdGlvbnModGhpcy50cmFuc2xhdGUuaW5zdGFudChJMThOX0tFWVMpKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy50cmFuc2xhdGVcbiAgICAgICAgLmdldChJMThOX0tFWVMpXG4gICAgICAgIC5waXBlKHNraXAoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHRyYW5zbGF0aW9ucykgPT4gdGhpcy51cGRhdGVUcmFuc2xhdGlvbnModHJhbnNsYXRpb25zKSlcbiAgICApO1xuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnRleHRDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLm9uRm9ybUNoYW5nZSh2YWx1ZSkpKTtcblxuICAgIC8vIExpc3RlbiBzdGF0dXMgY2hhbmdlcyAod2hlbiBkb25lIG91dHNpZGUgdGhlIGNvbXBvbmVudCAgLSBlLmcuIHdoZW4gc2V0RXJyb3JzKCkgaXMgY2FsbGluZyBvbiB0aGUgZm9ybUNvbnRyb2wpXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKF8pID0+ICF0aGlzLnJlYWRvbmx5ICYmICF0aGlzLl93cml0aW5nICYmICF0aGlzLl9kaXNhYmxpbmcpIC8vIFNraXBcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnRleHRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnRvdWNoZWQgJiYgIXRoaXMudGV4dENvbnRyb2wudG91Y2hlZCkge1xuICAgICAgICAgICAgdGhpcy50ZXh0Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93cml0aW5nKSByZXR1cm47IC8vIFNraXBcbiAgICB0aGlzLl93cml0aW5nID0gdHJ1ZTtcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKFwiW21hdC1kYXRlXSB3cml0ZVZhbHVlKCkgd2l0aDpcIiwgdmFsdWUpO1xuXG4gICAgLy8gQ29udmVydCBpbnRvIGRhdGVcbiAgICAvLyBJbXBvcnRhbnQ6IGNsb25lLCBiZWNhdXNlIHN0YXJ0T2Ygd2lsbCB1cGRhdGUgdGhlIGV4aXN0aW5nIGRhdGVcbiAgICBjb25zdCBkYXRlID0gaXNNb21lbnQodmFsdWUpID8gdmFsdWUuY2xvbmUoKSA6IGZyb21EYXRlSVNPU3RyaW5nKHZhbHVlKTtcblxuICAgIGlmICghZGF0ZSB8fCAhZGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMudGV4dENvbnRyb2wucGF0Y2hWYWx1ZShudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICBpZiAodGhpcy5mb3JtQ29udHJvbC52YWx1ZSkge1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUobnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKG51bGwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNb3ZlIHRvIHRoZSBleHBlY3RlZCBUWiAoa2VlcGluZyBsb2NhbCBob3VyIC0gZS5nLiBtaWRuaWdodClcbiAgICAgIGNvbnN0IGRheSA9ICgodGhpcy50aW1lem9uZSAmJiBkYXRlLnR6KHRoaXMudGltZXpvbmUpKSB8fCBkYXRlKVxuICAgICAgICAvLyBSZXNldCBob3VyXG4gICAgICAgIC5zdGFydE9mKCdkYXknKTtcbiAgICAgIGNvbnN0IGRheVN0ciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZm9ybWF0KGRheSwgdGhpcy5kYXRlUGF0dGVybik7XG5cbiAgICAgIGlmICh0aGlzLnRleHRDb250cm9sLnZhbHVlICE9PSBkYXlTdHIpIHtcbiAgICAgICAgLy8gVXBkYXRlIHRleHQgY29udHJvbFxuICAgICAgICB0aGlzLnRleHRDb250cm9sLnBhdGNoVmFsdWUoZGF5U3RyLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNhYmxpbmcpIHJldHVybjtcblxuICAgIHRoaXMuX2Rpc2FibGluZyA9IHRydWU7XG4gICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMudGV4dENvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGV4dENvbnRyb2wuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gICAgdGhpcy5fZGlzYWJsaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb3BlbkRhdGVQaWNrZXIoKSB7XG4gICAgaWYgKCF0aGlzLmRhdGVQaWNrZXIpIHJldHVybjtcblxuICAgIGlmICghdGhpcy5kYXRlUGlja2VyLm9wZW5lZCkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1ZygnW21hdC1kYXRlXSBPcGVuaW5nIGRhdGUgcGlja2VyLi4uJyk7XG5cbiAgICAgIHRoaXMuZGF0ZVBpY2tlci5vcGVuKCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgaWYgKCF0aGlzLl9tYXRJbnB1dCkgcmV0dXJuO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoaXNGb2N1c2FibGVFbGVtZW50KHRoaXMuX21hdElucHV0Lm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuX21hdElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFyKGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMuX3ByZXZlbnRFdmVudChldmVudCk7XG5cbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpO1xuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xuICAgIHRoaXMubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBmdW5jdGlvbnMgLS0gKi9cblxuICBwcm90ZWN0ZWQgX29uRGF0ZVBpY2tlckNoYW5nZShldmVudDogTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQ8TW9tZW50Pik6IHZvaWQge1xuICAgIC8vIE1ha2Ugc3VyZSBldmVudCBpcyB2YWxpZFxuICAgIGlmICghZXZlbnQgfHwgKGV2ZW50LnZhbHVlICE9PSBudWxsICYmICFpc01vbWVudChldmVudC52YWx1ZSkpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgTWF0RGF0ZXBpY2tlciBldmVudC4gU2tpcHBpbmcnLCBldmVudCk7XG4gICAgICByZXR1cm47IC8vIFNraXBcbiAgICB9XG5cbiAgICBsZXQgdmFsdWUgPSBldmVudC52YWx1ZTtcblxuICAgIC8vIE5vIHZhbHVlLCBidXQgbW9iaWxlIG1vZGU6IHVzZSB0aGUgY3VycmVudCBkYXRlXG4gICAgaWYgKCF2YWx1ZSAmJiB0aGlzLm1vYmlsZSkge1xuICAgICAgdmFsdWUgPSBEYXRlVXRpbHMucmVzZXRUaW1lKERhdGVVdGlscy5tb21lbnQoKS5sb2NhbGUodGhpcy5sb2NhbGUpLCB0aGlzLnRpbWV6b25lKTtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodG9EYXRlSVNPU3RyaW5nKHZhbHVlKSwge1xuICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLCAvLyBXaWxsIGNhbGwgd3JpdGVWYWx1ZSgpXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlID0gdmFsdWVcbiAgICAgID8uY2xvbmUoKVxuICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSkgLy8gc2V0IGFzIHRpbWUgYXMgbG9jYWxlIHRpbWVcbiAgICAgIC5zdGFydE9mKCdkYXknKSAvLyByZXNldCBob3VyXG4gICAgICAudXRjKHRydWUpO1xuICAgIGNvbnN0IGRhdGVTdHIgPSAoZGF0ZSAmJiB0aGlzLmRhdGVBZGFwdGVyLmZvcm1hdChkYXRlLCB0aGlzLmRhdGVQYXR0ZXJuKSkgfHwgbnVsbDtcblxuICAgIGlmICh0aGlzLnRleHRDb250cm9sLnZhbHVlICE9PSBkYXRlU3RyKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiW21hdC1kYXRlXSBvbkRhdGVQaWNrZXJDaGFuZ2UoKSBuZXcgdmFsdWU6XCIsIGRhdGVTdHIpO1xuXG4gICAgICB0aGlzLnRleHRDb250cm9sLnNldFZhbHVlKGRhdGVTdHIsIHtcbiAgICAgICAgZW1pdEV2ZW50OiB0cnVlLCAvLyBXaWxsIGNhbGwgb25Gb3JtQ2hhbmdlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX29wZW5EYXRlUGlja2VySWZNb2JpbGUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLm1vYmlsZSB8fCBldmVudD8uZGVmYXVsdFByZXZlbnRlZCB8fCB0aGlzLmRhdGVQaWNrZXI/Lm9wZW5lZCB8fCB0aGlzLmRpc2FibGVkKSByZXR1cm47XG5cbiAgICAvL2NvbnNvbGUuZGVidWcoJ1ttYXQtZGF0ZV0gUHJlcGFyaW5nIHRvIG9wZW4gZGF0ZSBwaWNrZXIuLi4gJyk7XG5cbiAgICB0aGlzLl9wcmV2ZW50RXZlbnQoZXZlbnQpO1xuXG4gICAgLy8gT3BlbiB0aGUgcGlja2VyXG4gICAgdGhpcy5vcGVuRGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9vbkJsdXIoKSB7XG4gICAgaWYgKHRoaXMudGV4dENvbnRyb2wudG91Y2hlZCkge1xuICAgICAgLy8gQXV0byBmaWxsIGRhdGEgaW4gY2FzZSBvZiBwYXJ0aWFsIGlucHV0XG4gICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5mb3JtQ29udHJvbC52YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdG91Y2hlZFxuICAgIHRoaXMuX2NoZWNrSWZUb3VjaGVkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2NoZWNrSWZUb3VjaGVkKCkge1xuICAgIGlmICh0aGlzLnRleHRDb250cm9sLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG5cbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9wcmV2ZW50RXZlbnQoZXZlbnQ/OiBFdmVudCkge1xuICAgIGlmICghZXZlbnQpIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmIChldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLyogLS0gcHJpdmF0ZSBtZXRob2RzIC0tICovXG5cbiAgcHJpdmF0ZSB1cGRhdGVUcmFuc2xhdGlvbnModHJhbnNsYXRpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgY29uc3QgZGF0ZVBhdHRlcm4gPSB0cmFuc2xhdGlvbnNbJ0NPTU1PTi5EQVRFX1BBVFRFUk4nXSAhPT0gJ0NPTU1PTi5EQVRFX1BBVFRFUk4nID8gdHJhbnNsYXRpb25zWydDT01NT04uREFURV9QQVRURVJOJ10gOiAnREQvTU0vWVlZWSc7XG4gICAgdGhpcy51cGRhdGVQYXR0ZXJuKGRhdGVQYXR0ZXJuKTtcblxuICAgIGNvbnN0IGRhdGVQbGFjZWhvbGRlciA9XG4gICAgICB0cmFuc2xhdGlvbnNbJ0NPTU1PTi5EQVRFX1BMQUNFSE9MREVSJ10gIT09ICdDT01NT04uREFURV9QTEFDRUhPTERFUidcbiAgICAgICAgPyB0cmFuc2xhdGlvbnNbJ0NPTU1PTi5EQVRFX1BMQUNFSE9MREVSJ11cbiAgICAgICAgOiB0aGlzLmRhdGVQYXR0ZXJuPy50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMudXBkYXRlTWFza09wdGlvbnMoZGF0ZVBsYWNlaG9sZGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUGF0dGVybihwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5kYXRlUGF0dGVybiAhPT0gcGF0dGVybikge1xuICAgICAgdGhpcy5kYXRlUGF0dGVybiA9IHBhdHRlcm47XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWFza09wdGlvbnMoZGF0ZVBsYWNlaG9sZGVyOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5kYXRlUGxhY2Vob2xkZXIgIT0gZGF0ZVBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLmRhdGVQbGFjZWhvbGRlciA9IGRhdGVQbGFjZWhvbGRlcjtcblxuICAgICAgY29uc3QgZGF0ZU9wdGlvbnMgPSBtYXNraXRvRGF0ZU9wdGlvbnNHZW5lcmF0b3Ioe1xuICAgICAgICBtb2RlOiB0aGlzLmRhdGVQYXR0ZXJuLnRvTG93ZXJDYXNlKCkgYXMgTWFza2l0b0RhdGVNb2RlLFxuICAgICAgICBzZXBhcmF0b3I6ICcvJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsdWdpbnMsIC8vIHBsdWdpbnMga2VlcHMgY2FyZXQgaW5zaWRlIGFjdHVhbCB2YWx1ZSBhbmQgcmVtb3ZlIHBsYWNlaG9sZGVyIG9uIGJsdXJcbiAgICAgICAgLi4ucGxhY2Vob2xkZXJPcHRpb25zXG4gICAgICAgIC8vIHBhc3MgJ3RydWUnIGFzIHNlY29uZCBhcmd1bWVudCB0byBhZGQgcGx1Z2luIHRvIGhpZGUgcGxhY2Vob2xkZXIgd2hlbiBpbnB1dCBpcyBub3QgZm9jdXNlZFxuICAgICAgfSA9IG1hc2tpdG9XaXRoUGxhY2Vob2xkZXIodGhpcy5kYXRlUGxhY2Vob2xkZXIsIHRydWUpO1xuXG4gICAgICB0aGlzLm1hc2tpdG9PcHRpb25zID0ge1xuICAgICAgICAuLi5kYXRlT3B0aW9ucyxcbiAgICAgICAgcGx1Z2luczogcGx1Z2lucy5jb25jYXQoZGF0ZU9wdGlvbnMucGx1Z2lucyB8fCBbXSksXG4gICAgICAgIHByZXByb2Nlc3NvcnM6IFtcbiAgICAgICAgICAvLyBBbHdheXMgcHV0IGl0IEJFRk9SRSBhbGwgb3RoZXIgcHJlcHJvY2Vzc29yc1xuICAgICAgICAgIC4uLnBsYWNlaG9sZGVyT3B0aW9ucy5wcmVwcm9jZXNzb3JzLFxuICAgICAgICAgIC4uLmRhdGVPcHRpb25zLnByZXByb2Nlc3NvcnMsXG4gICAgICAgIF0sXG4gICAgICAgIHBvc3Rwcm9jZXNzb3JzOiBbXG4gICAgICAgICAgLi4uZGF0ZU9wdGlvbnMucG9zdHByb2Nlc3NvcnMsXG4gICAgICAgICAgLy8gQWx3YXlzIHB1dCBpdCBBRlRFUiBhbGwgb3RoZXIgcG9zdHByb2Nlc3NvcnNcbiAgICAgICAgICAuLi5wbGFjZWhvbGRlck9wdGlvbnMucG9zdHByb2Nlc3NvcnMsXG4gICAgICAgIF0sXG4gICAgICB9IGFzIFJlcXVpcmVkPE1hc2tpdG9PcHRpb25zPjtcblxuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uRm9ybUNoYW5nZShkYXRlU3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fd3JpdGluZykgcmV0dXJuOyAvLyBTa2lwIGlmIGNhbGwgYnkgc2VsZlxuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuXG4gICAgaWYgKGRhdGVTdHIgPT09IHRoaXMuZGF0ZVBsYWNlaG9sZGVyKSB7XG4gICAgICBkYXRlU3RyID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZVN0ciA9IG51bGxJZk5pbE9yQmxhbmsoZGF0ZVN0cik7XG4gICAgfVxuXG4gICAgLy9jb25zb2xlLmRlYnVnKGBbbWF0LWRhdGVdIG9uRm9ybUNoYW5nZSgpIC0gY29udHJvbHMgdmFsdWVzOiBgLCBkYXRlU3RyKTtcblxuICAgIC8vIEZvcmNlICcwJyBmb3IgZW1wdHkgbW9udGggKG90aGVyd2lzZSBtb21lbnQgd2lsbCB1c2UgdGhlIGN1cnJlbnQgbW9udGgpXG4gICAgZGF0ZVN0ciA9IGRhdGVTdHJcbiAgICAgID8ucmVwbGFjZSgvW15cXGQvXS9nLCAnJykgLy8gS2VlcCBvbmx5ICBkaWdpdHMgYW5kIHNsYXNoZXNcbiAgICAgIC5yZXBsYWNlKCcvLycsICcvMC8nKVxuICAgICAgLy8gRm9yY2UgJzAnIGZvciBlbXB0eSB5ZWFyIChvdGhlcndpc2UgbW9tZW50IHdpbGwgdXNlIHRoZSBjdXJyZW50IHllYXIpXG4gICAgICAucmVwbGFjZSgvXFwvJC8sICcvMCcpO1xuXG4gICAgLy8gUGFyc2UgZGF0ZSAoc3RyaWN0ID0gZmFsc2UpXG4gICAgbGV0IGRhdGU6IE1vbWVudCA9IChkYXRlU3RyICYmIHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2UoZGF0ZVN0ciwgdGhpcy5kYXRlUGF0dGVybikpIHx8IG51bGw7XG5cbiAgICAvLyBNb3ZlIHRvIHRoZSBleHBlY3RlZCBUWiwgYW5kIGtlZXAgdGhlIGxvY2FsIGhvdXIgKD0gbWlkbmlnaHQpIHRvIGhhdmUgbWlkbmlnaHQgYXQgbG9jYWwgdGltZVxuICAgIGlmICh0aGlzLnRpbWV6b25lKSB7XG4gICAgICBkYXRlID0gZGF0ZT8udHoodGhpcy50aW1lem9uZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZGF0ZSA9IGRhdGVcbiAgICAgID8uc3RhcnRPZignZGF5JykgLy8gUmVzZXQgaG91clxuICAgICAgLy8gQ29udmVydCB0byBVVEMgKGF2b2lkIFRaIG9mZnNldCBpbiBmaW5hbCBzdHJpbmcpO1xuICAgICAgLnV0YygpO1xuXG4gICAgLy8gU2V0IG1vZGVsIHZhbHVlXG4gICAgdGhpcy5lbWl0Q2hhbmdlKGRhdGUsIGRhdGVTdHIpO1xuXG4gICAgLy8gRm9yY2UgdGhlIGRheSBjb250cm9sIHRvIHVwZGF0ZSBpdHMgdmFsaWRpdHkgKHNhbWUgZXJyb3JzIGFzIGZvcm1Db250cm9sIC0gc2VlIG5nT25Jbml0KCkpXG4gICAgdGhpcy50ZXh0Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG5cbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDaGFuZ2UoZGF0ZTogTW9tZW50LCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcpIHtcbiAgICAvLyBDb252ZXJ0IHRvIG1vZGVsIHZhbHVlIChJU08gZGF0ZSBzdHJpbmcpXG4gICAgLy8gSU1QT1JUQU5UOiBJZiBkYXRlIGlzIGludmFsaWQsIHRoZW4ga2VlcCB0aGUgaW52YWxpZCBzdHJpbmcgdmFsdWVcbiAgICAvLyB0byBhbGxvdyBTaGFyZWRWYWxpZGF0b3JzLnZhbGlkRGF0ZSgpIHRvIHJhaXNlIGFuIGVycm9yXG4gICAgY29uc3QgY29udHJvbFZhbHVlID0gZGF0ZT8uaXNWYWxpZCgpID8gdG9EYXRlSVNPU3RyaW5nKGRhdGUpIDogZGVmYXVsdFZhbHVlIHx8IG51bGw7XG5cbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC52YWx1ZSAhPT0gY29udHJvbFZhbHVlKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9jb25zb2xlLmRlYnVnKCdbbWF0LWRhdGVdIEVtaXQgbmV3IHZhbHVlOiAnICsgY29udHJvbFZhbHVlKTtcblxuICAgICAgLy8gVXBkYXRlIGZvcm1Db250cm9sIHZhbHVlICh0aGlzIGlzIG5lZWQgdG8gdXBkYXRlIGRhdGVQaWNrZXIgYWxzbywgaW4gZGVza3RvcCBtb2RlKVxuICAgICAgaWYgKCF0aGlzLm1vYmlsZSAmJiBkYXRlPy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShjb250cm9sVmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hhbmdlcyBjb21lcyBmcm9tIGluc2lkZSBmdW5jdGlvbjogdXNlIHRoZSBjYWxsYmFja1xuICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayhjb250cm9sVmFsdWUpO1xuXG4gICAgICAvLyBDaGVjayBpZiBuZWVkIHRvIHVwZGF0ZSBjb250cm9sc1xuICAgICAgdGhpcy5fY2hlY2tJZlRvdWNoZWQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRhYkluZGV4KCkge1xuICAgIGlmIChpc05pbCh0aGlzLl90YWJpbmRleCkgfHwgdGhpcy5fdGFiaW5kZXggPT09IC0xKSByZXR1cm47IC8vIHNraXBcblxuICAgIC8vIEZvY3VzIHRvIGlucHV0XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRUYWJJbmRleCh0aGlzLl9tYXRJbnB1dCwgdGhpcy5fdGFiaW5kZXgpO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0FzVG91Y2hlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW4gfSkge1xuICAgIHRoaXMudGV4dENvbnRyb2wubWFya0FzVG91Y2hlZChvcHRzKTtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcmtBc0RpcnR5KG9wdHM/OiBhbnkpIHtcbiAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KG9wdHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPCEtLSByZWFkb25seSAtLT5cbkBpZiAocmVhZG9ubHkpIHtcbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbCB8IGFzRmxvYXRMYWJlbFR5cGVcIlxuICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgIFtzdWJzY3JpcHRTaXppbmddPVwic3Vic2NyaXB0U2l6aW5nXCJcbiAgICBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkXCJcbiAgPlxuICAgIDxkaXYgbWF0UHJlZml4PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFByZWZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgQGlmIChmbG9hdExhYmVsICE9PSAnbmV2ZXInICYmICEhcGxhY2Vob2xkZXIpIHtcbiAgICAgIDxtYXQtbGFiZWw+e3sgcGxhY2Vob2xkZXIgfX08L21hdC1sYWJlbD5cbiAgICB9XG4gICAgPGlucHV0IG1hdElucHV0IGhpZGRlbiB0eXBlPVwidGV4dFwiIHJlYWRvbmx5IFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiIC8+XG4gICAgPGlvbi10ZXh0Pnt7IGZvcm1Db250cm9sLnZhbHVlIHwgZGF0ZUZvcm1hdDogeyBwYXR0ZXJuOiBkYXRlUGF0dGVybiB9IH19PC9pb24tdGV4dD5cbiAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBoaW50cyAtLT5cbiAgICA8bWF0LWhpbnQgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiZm9ybUNvbnRyb2wuaW52YWxpZFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdEhpbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbWF0LWhpbnQ+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG59IEBlbHNlIHtcbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbCB8IGFzRmxvYXRMYWJlbFR5cGVcIlxuICAgIChmb2N1cyk9XCJfb3BlbkRhdGVQaWNrZXJJZk1vYmlsZSgkZXZlbnQpXCJcbiAgICAoY2xpY2spPVwiX29wZW5EYXRlUGlja2VySWZNb2JpbGUoJGV2ZW50KVwiXG4gICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gID5cbiAgICA8ZGl2IG1hdFByZWZpeD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRQcmVmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgQGlmIChmbG9hdExhYmVsICE9PSAnbmV2ZXInICYmICEhcGxhY2Vob2xkZXIpIHtcbiAgICAgIDxtYXQtbGFiZWw+e3sgcGxhY2Vob2xkZXIgfX08L21hdC1sYWJlbD5cbiAgICB9XG4gICAgPCEtLSBEZXNrdG9wIC0tPlxuICAgIEBpZiAoIW1vYmlsZSkge1xuICAgICAgPGlucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgICNtYXRJbnB1dFxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFttYXNraXRvXT1cIm1hc2tpdG9PcHRpb25zXCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cInRleHRDb250cm9sXCJcbiAgICAgICAgKGJsdXIpPVwiX29uQmx1cigpXCJcbiAgICAgICAgKGtleXVwLmFycm93RG93bik9XCJvcGVuRGF0ZVBpY2tlcigpXCJcbiAgICAgICAgKGtleXVwLmVzY2FwZSk9XCJfcHJldmVudEV2ZW50KCRldmVudClcIlxuICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICBbYXBwQXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgICAvPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgaGlkZGVuXG4gICAgICAgIFttYXREYXRlcGlja2VyXT1cImRhdGVQaWNrZXJcIlxuICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJkYXRlUGlja2VyRmlsdGVyXCJcbiAgICAgICAgKGRhdGVDaGFuZ2UpPVwiX29uRGF0ZVBpY2tlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgcmVhZG9ubHlcbiAgICAgIC8+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8IS0tIE1vYmlsZSAtLT5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjbWF0SW5wdXRcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9sIG1kYy10ZXh0LWZpZWxkX19pbnB1dFwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJ0ZXh0Q29udHJvbFwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgIHJlYWRvbmx5XG4gICAgICAvPlxuICAgICAgPGlucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgaGlkZGVuXG4gICAgICAgIFttYXREYXRlcGlja2VyXT1cImRhdGVQaWNrZXJcIlxuICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJkYXRlUGlja2VyRmlsdGVyXCJcbiAgICAgICAgKGRhdGVDaGFuZ2UpPVwiX29uRGF0ZVBpY2tlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgcmVhZG9ubHlcbiAgICAgIC8+XG4gICAgfVxuXG4gICAgPGRpdiBtYXRTdWZmaXg+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gdGFiaW5kZXg9XCItMVwiIChjbGljayk9XCJvcGVuRGF0ZVBpY2tlcigpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgIDxtYXQtaWNvbj57eyBtb2JpbGUgPyAnZGF0ZV9yYW5nZScgOiAna2V5Ym9hcmRfYXJyb3dfZG93bicgfX08L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIEBpZiAoY2xlYXJhYmxlKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXIoJGV2ZW50KVwiXG4gICAgICAgICAgW2hpZGRlbl09XCJmb3JtQ29udHJvbC5kaXNhYmxlZCB8fCAhZm9ybUNvbnRyb2wudmFsdWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBlcnJvcnMgLS0+XG4gICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm1Db250cm9sLnRvdWNoZWQgJiYgZm9ybUNvbnRyb2wuZXJyb3JzIHwgbWFwS2V5cyB8IGFycmF5Rmlyc3Q7IGxldCBlcnJvcktleVwiPlxuICAgICAgQHN3aXRjaCAoZXJyb3JLZXkpIHtcbiAgICAgICAgQGNhc2UgKCdyZXF1aXJlZCcpIHtcbiAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKCd2YWxpZERhdGUnKSB7XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPkVSUk9SLkZJRUxEX05PVF9WQUxJRF9EQVRFPC9zcGFuPlxuICAgICAgICB9XG4gICAgICAgIEBjYXNlICgnZGF0ZUlzQWZ0ZXInKSB7XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICB7eyAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfQUZURVInIHwgdHJhbnNsYXRlOiBmb3JtQ29udHJvbC5lcnJvcnMuZGF0ZUlzQWZ0ZXIgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKCdkYXRlSXNCZWZvcmUnKSB7XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICB7eyAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfQkVGT1JFJyB8IHRyYW5zbGF0ZTogZm9ybUNvbnRyb2wuZXJyb3JzLmRhdGVJc0JlZm9yZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoJ2RhdGVSYW5nZScpIHtcbiAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+RVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfUkFOR0U8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKCdkYXRlTWF4RHVyYXRpb24nKSB7XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPkVSUk9SLkZJRUxEX05PVF9WQUxJRF9EQVRFX01BWF9EVVJBVElPTjwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoJ2RhdGVNaW5EdXJhdGlvbicpIHtcbiAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+RVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfTUlOX0RVUkFUSU9OPC9zcGFuPlxuICAgICAgICB9XG4gICAgICAgIEBjYXNlICgnbXNnJykge1xuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAge3sgZm9ybUNvbnRyb2wuZXJyb3JzLm1zZz8ua2V5IHx8IGZvcm1Db250cm9sLmVycm9ycy5tc2cgfCB0cmFuc2xhdGU6IGZvcm1Db250cm9sLmVycm9ycy5tc2c/LnBhcmFtcyB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRFcnJvclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPCEtLSBoaW50cyAtLT5cbiAgICBAaWYgKCFmb3JtQ29udHJvbC5pbnZhbGlkKSB7XG4gICAgICA8bWF0LWhpbnQ+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRIaW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbWF0LWhpbnQ+XG4gICAgfVxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDxtYXQtZGF0ZXBpY2tlciAjZGF0ZVBpY2tlciBbdG91Y2hVaV09XCJtb2JpbGVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbc3RhcnRBdF09XCJzdGFydERhdGVcIj5cbiAgICA8IS0tIERhdGUgcGlja2VyIGJ1dHRvbnMgLS0+XG4gICAgQGlmIChtb2JpbGUpIHtcbiAgICAgIDxtYXQtZGF0ZXBpY2tlci1hY3Rpb25zPlxuICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiBjb2xvcj1cImRhcmtcIiBtYXREYXRlcGlja2VyQ2FuY2VsPlxuICAgICAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5CVE5fQ0FOQ0VMPC9pb24tbGFiZWw+XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiIG1hdERhdGVwaWNrZXJBcHBseT5cbiAgICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5DT01NT04uQlROX1ZBTElEQVRFPC9pb24tbGFiZWw+XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvbWF0LWRhdGVwaWNrZXItYWN0aW9ucz5cbiAgICB9XG4gIDwvbWF0LWRhdGVwaWNrZXI+XG59XG5cbjxuZy10ZW1wbGF0ZSAjbWF0UHJlZml4VGVtcGxhdGU+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRQcmVmaXhdXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtYXRTdWZmaXhUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21hdEVycm9yVGVtcGxhdGU+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1lcnJvcixbbWF0RXJyb3JdXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtYXRIaW50VGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtaGludC13cmFwcGVyXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWhpbnQ6bm90KFthbGlnbj0nZW5kJ10pLFttYXRIaW50XVwiPjwvbmctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLWhpbnQtc3BhY2VyXCI+PC9kaXY+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWhpbnRbYWxpZ249J2VuZCddXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=