@sumaris-net/ngx-components 18.13.0 → 18.14.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 (1406) 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 +239 -0
  13. package/capacitor.config.ts +49 -0
  14. package/doc/changelog.md +4 -0
  15. package/doc/feed/feed-en.json +26 -0
  16. package/doc/feed/feed-fr.json +26 -0
  17. package/graphql.config.yml +13 -0
  18. package/ionic.config.json +7 -0
  19. package/karma.conf.js +38 -0
  20. package/ng-package.json +21 -0
  21. package/package.json +133 -19
  22. package/public_api.ts +436 -0
  23. package/resources/README.md +7 -0
  24. package/resources/icon/TODO.md +11 -0
  25. package/resources/icon.png +0 -0
  26. package/resources/icon.png.md5 +1 -0
  27. package/resources/icon.xcf +0 -0
  28. package/resources/ios/icon/icon-1024.png +0 -0
  29. package/resources/ios/icon/icon-108@2x.png +0 -0
  30. package/resources/ios/icon/icon-20.png +0 -0
  31. package/resources/ios/icon/icon-20@2x.png +0 -0
  32. package/resources/ios/icon/icon-20@3x.png +0 -0
  33. package/resources/ios/icon/icon-24@2x.png +0 -0
  34. package/resources/ios/icon/icon-27.5@2x.png +0 -0
  35. package/resources/ios/icon/icon-29.png +0 -0
  36. package/resources/ios/icon/icon-29@2x.png +0 -0
  37. package/resources/ios/icon/icon-29@3x.png +0 -0
  38. package/resources/ios/icon/icon-40.png +0 -0
  39. package/resources/ios/icon/icon-40@2x.png +0 -0
  40. package/resources/ios/icon/icon-40@3x.png +0 -0
  41. package/resources/ios/icon/icon-44@2x.png +0 -0
  42. package/resources/ios/icon/icon-50.png +0 -0
  43. package/resources/ios/icon/icon-50@2x.png +0 -0
  44. package/resources/ios/icon/icon-60.png +0 -0
  45. package/resources/ios/icon/icon-60@2x.png +0 -0
  46. package/resources/ios/icon/icon-60@3x.png +0 -0
  47. package/resources/ios/icon/icon-72.png +0 -0
  48. package/resources/ios/icon/icon-72@2x.png +0 -0
  49. package/resources/ios/icon/icon-76.png +0 -0
  50. package/resources/ios/icon/icon-76@2x.png +0 -0
  51. package/resources/ios/icon/icon-83.5@2x.png +0 -0
  52. package/resources/ios/icon/icon-86@2x.png +0 -0
  53. package/resources/ios/icon/icon-98@2x.png +0 -0
  54. package/resources/ios/icon/icon-small.png +0 -0
  55. package/resources/ios/icon/icon-small@2x.png +0 -0
  56. package/resources/ios/icon/icon-small@3x.png +0 -0
  57. package/resources/ios/icon/icon.png +0 -0
  58. package/resources/ios/icon/icon@2x.png +0 -0
  59. package/resources/ios/splash/Default-1792h~iphone.png +0 -0
  60. package/resources/ios/splash/Default-2436h.png +0 -0
  61. package/resources/ios/splash/Default-2688h~iphone.png +0 -0
  62. package/resources/ios/splash/Default-568h@2x~iphone.png +0 -0
  63. package/resources/ios/splash/Default-667h.png +0 -0
  64. package/resources/ios/splash/Default-736h.png +0 -0
  65. package/resources/ios/splash/Default-Landscape-1792h~iphone.png +0 -0
  66. package/resources/ios/splash/Default-Landscape-2436h.png +0 -0
  67. package/resources/ios/splash/Default-Landscape-2688h~iphone.png +0 -0
  68. package/resources/ios/splash/Default-Landscape-736h.png +0 -0
  69. package/resources/ios/splash/Default-Landscape@2x~ipad.png +0 -0
  70. package/resources/ios/splash/Default-Landscape@~ipadpro.png +0 -0
  71. package/resources/ios/splash/Default-Landscape~ipad.png +0 -0
  72. package/resources/ios/splash/Default-Portrait@2x~ipad.png +0 -0
  73. package/resources/ios/splash/Default-Portrait@~ipadpro.png +0 -0
  74. package/resources/ios/splash/Default-Portrait~ipad.png +0 -0
  75. package/resources/ios/splash/Default@2x~iphone.png +0 -0
  76. package/resources/ios/splash/Default@2x~universal~anyany.png +0 -0
  77. package/resources/ios/splash/Default~iphone.png +0 -0
  78. package/resources/splash.png +0 -0
  79. package/resources/splash.png.md5 +1 -0
  80. package/scripts/build-android.sh +18 -0
  81. package/scripts/docker-start.sh +6 -0
  82. package/scripts/emulate-android.sh +17 -0
  83. package/scripts/env-android.sh +83 -0
  84. package/scripts/env-clean.sh +23 -0
  85. package/scripts/env-global.sh +154 -0
  86. package/scripts/install-android-sdk-tools.sh +73 -0
  87. package/scripts/ionic-update.sh +24 -0
  88. package/scripts/node/build-i18n.js +37 -0
  89. package/scripts/node/playground.ts +9 -0
  90. package/scripts/node/resources.js +108 -0
  91. package/scripts/release.sh +162 -0
  92. package/scripts/run-android.sh +59 -0
  93. package/scripts/test.sh +19 -0
  94. package/src/app/admin/admin-routing.module.ts +26 -0
  95. package/src/app/admin/admin.module.ts +20 -0
  96. package/src/app/admin/services/filter/person.filter.ts +86 -0
  97. package/src/app/admin/services/person.service.ts +244 -0
  98. package/src/app/admin/services/validator/person.validator.ts +86 -0
  99. package/src/app/admin/users/users.html +613 -0
  100. package/src/app/admin/users/users.module.ts +32 -0
  101. package/src/app/admin/users/users.scss +80 -0
  102. package/src/app/admin/users/users.ts +387 -0
  103. package/src/app/app-routing.module.ts +165 -0
  104. package/src/app/app.component.html +18 -0
  105. package/src/app/app.component.scss +4 -0
  106. package/src/app/app.component.ts +257 -0
  107. package/src/app/app.module.ts +366 -0
  108. package/src/app/core/about/about.modal.html +145 -0
  109. package/src/app/core/about/about.modal.scss +22 -0
  110. package/src/app/core/about/about.modal.ts +69 -0
  111. package/src/app/core/about/about.module.ts +14 -0
  112. package/src/app/core/account/account.module.ts +43 -0
  113. package/src/app/core/account/account.page.html +329 -0
  114. package/src/app/core/account/account.page.scss +20 -0
  115. package/src/app/core/account/account.page.ts +389 -0
  116. package/src/app/core/account/new-token.form.html +90 -0
  117. package/src/app/core/account/new-token.form.ts +99 -0
  118. package/src/app/core/account/new-token.modal.html +52 -0
  119. package/src/app/core/account/new-token.modal.ts +68 -0
  120. package/src/app/core/account/password/change-password.form.html +62 -0
  121. package/src/app/core/account/password/change-password.form.scss +0 -0
  122. package/src/app/core/account/password/change-password.form.ts +58 -0
  123. package/src/app/core/account/password/change-password.module.ts +14 -0
  124. package/src/app/core/account/password/change-password.page.html +41 -0
  125. package/src/app/core/account/password/change-password.page.scss +49 -0
  126. package/src/app/core/account/password/change-password.page.ts +158 -0
  127. package/src/app/core/account/token.table.html +160 -0
  128. package/src/app/core/account/token.table.scss +7 -0
  129. package/src/app/core/account/token.table.ts +160 -0
  130. package/src/app/core/auth/auth.form.html +108 -0
  131. package/src/app/core/auth/auth.form.scss +0 -0
  132. package/src/app/core/auth/auth.form.ts +165 -0
  133. package/src/app/core/auth/auth.modal.html +50 -0
  134. package/src/app/core/auth/auth.modal.scss +0 -0
  135. package/src/app/core/auth/auth.modal.ts +78 -0
  136. package/src/app/core/auth/auth.module.ts +35 -0
  137. package/src/app/core/auth/reset-password.modal.html +59 -0
  138. package/src/app/core/auth/reset-password.modal.ts +83 -0
  139. package/src/app/core/core.module.ts +72 -0
  140. package/src/app/core/core.testing.module.ts +80 -0
  141. package/src/app/core/form/array/form-array.ts +409 -0
  142. package/src/app/core/form/array/testing/form-array-test.module.ts +15 -0
  143. package/src/app/core/form/array/testing/form-array.test.html +196 -0
  144. package/src/app/core/form/array/testing/form-array.test.ts +119 -0
  145. package/src/app/core/form/buttons/form-buttons-bar.component.html +82 -0
  146. package/src/app/core/form/buttons/form-buttons-bar.component.scss +19 -0
  147. package/src/app/core/form/buttons/form-buttons-bar.component.ts +89 -0
  148. package/src/app/core/form/buttons/form-buttons-bar.module.ts +20 -0
  149. package/src/app/core/form/entity/editor.class.ts +295 -0
  150. package/src/app/core/form/entity/entity-editor-modal.class.ts +494 -0
  151. package/src/app/core/form/entity/entity-editor.class.ts +894 -0
  152. package/src/app/core/form/entity/entity-metadata.component.html +57 -0
  153. package/src/app/core/form/entity/entity-metadata.component.scss +40 -0
  154. package/src/app/core/form/entity/entity-metadata.component.ts +18 -0
  155. package/src/app/core/form/entity/entity.module.ts +20 -0
  156. package/src/app/core/form/entity/tab-editor.class.ts +224 -0
  157. package/src/app/core/form/form-container.class.ts +381 -0
  158. package/src/app/core/form/form.class.ts +377 -0
  159. package/src/app/core/form/form.module.ts +38 -0
  160. package/src/app/core/form/form.utils.ts +336 -0
  161. package/src/app/core/form/list/list.form.html +68 -0
  162. package/src/app/core/form/list/list.form.scss +40 -0
  163. package/src/app/core/form/list/list.form.ts +266 -0
  164. package/src/app/core/form/list/list.module.ts +20 -0
  165. package/src/app/core/form/properties/properties.form.html +160 -0
  166. package/src/app/core/form/properties/properties.form.scss +21 -0
  167. package/src/app/core/form/properties/properties.form.ts +331 -0
  168. package/src/app/core/form/properties/properties.module.ts +24 -0
  169. package/src/app/core/form/properties/properties.table.html +228 -0
  170. package/src/app/core/form/properties/properties.table.scss +0 -0
  171. package/src/app/core/form/properties/properties.table.ts +275 -0
  172. package/src/app/core/form/properties/properties.utils.ts +391 -0
  173. package/src/app/core/form/properties/property.validator.ts +82 -0
  174. package/src/app/core/form/properties/testing/properties-form.test.html +23 -0
  175. package/src/app/core/form/properties/testing/properties-form.test.ts +109 -0
  176. package/src/app/core/form/properties/testing/properties-form.testing.module.ts +14 -0
  177. package/src/app/core/form/text-popover/testing/text-popover.testing.html +50 -0
  178. package/src/app/core/form/text-popover/testing/text-popover.testing.module.ts +21 -0
  179. package/src/app/core/form/text-popover/testing/text-popover.testing.ts +76 -0
  180. package/src/app/core/form/text-popover/text-popover.component.html +89 -0
  181. package/src/app/core/form/text-popover/text-popover.component.scss +7 -0
  182. package/src/app/core/form/text-popover/text-popover.component.ts +176 -0
  183. package/src/app/core/form/text-popover/text-popover.module.ts +19 -0
  184. package/src/app/core/form/username/username.form.html +27 -0
  185. package/src/app/core/form/username/username.form.ts +44 -0
  186. package/src/app/core/form/username/username.module.ts +12 -0
  187. package/src/app/core/graphql/graphql.module.ts +7 -0
  188. package/src/app/core/graphql/graphql.service.ts +962 -0
  189. package/src/app/core/graphql/graphql.utils.ts +166 -0
  190. package/src/app/core/home/home.html +327 -0
  191. package/src/app/core/home/home.module.ts +31 -0
  192. package/src/app/core/home/home.scss +300 -0
  193. package/src/app/core/home/home.ts +453 -0
  194. package/src/app/core/icon/icon.component.html +19 -0
  195. package/src/app/core/icon/icon.component.ts +22 -0
  196. package/src/app/core/icon/icon.module.ts +13 -0
  197. package/src/app/core/install/install-upgrade-card.component.html +144 -0
  198. package/src/app/core/install/install-upgrade-card.component.scss +3 -0
  199. package/src/app/core/install/install-upgrade-card.component.ts +445 -0
  200. package/src/app/core/install/install-upgrade-card.module.ts +18 -0
  201. package/src/app/core/menu/menu.component.html +219 -0
  202. package/src/app/core/menu/menu.component.scss +304 -0
  203. package/src/app/core/menu/menu.component.ts +251 -0
  204. package/src/app/core/menu/menu.filter.ts +28 -0
  205. package/src/app/core/menu/menu.model.ts +356 -0
  206. package/src/app/core/menu/menu.module.ts +27 -0
  207. package/src/app/core/menu/menu.service.ts +727 -0
  208. package/src/app/core/menu/sub-menu-tab.directive.ts +99 -0
  209. package/src/app/core/menu/testing/menu-other.testing.ts +57 -0
  210. package/src/app/core/menu/testing/menu.testing.html +143 -0
  211. package/src/app/core/menu/testing/menu.testing.module.ts +52 -0
  212. package/src/app/core/menu/testing/menu.testing.scss +5 -0
  213. package/src/app/core/menu/testing/menu.testing.ts +175 -0
  214. package/src/app/core/offline/update-offline-mode-card.component.html +39 -0
  215. package/src/app/core/offline/update-offline-mode-card.component.scss +3 -0
  216. package/src/app/core/offline/update-offline-mode-card.component.ts +23 -0
  217. package/src/app/core/offline/update-offline-mode-card.module.ts +20 -0
  218. package/src/app/core/peer/select-peer.modal.html +317 -0
  219. package/src/app/core/peer/select-peer.modal.scss +41 -0
  220. package/src/app/core/peer/select-peer.modal.ts +366 -0
  221. package/src/app/core/peer/select-peer.module.ts +23 -0
  222. package/src/app/core/register/register-confirm.page.html +51 -0
  223. package/src/app/core/register/register-confirm.page.scss +56 -0
  224. package/src/app/core/register/register-confirm.page.ts +90 -0
  225. package/src/app/core/register/register.form.html +143 -0
  226. package/src/app/core/register/register.form.scss +10 -0
  227. package/src/app/core/register/register.form.ts +218 -0
  228. package/src/app/core/register/register.modal.html +66 -0
  229. package/src/app/core/register/register.modal.ts +50 -0
  230. package/src/app/core/register/register.module.ts +15 -0
  231. package/src/app/core/services/account.service.ts +1567 -0
  232. package/src/app/core/services/auth-guard.service.ts +70 -0
  233. package/src/app/core/services/base-entity-service.class.ts +659 -0
  234. package/src/app/core/services/base-graphql-service.class.ts +319 -0
  235. package/src/app/core/services/base58.ts +90 -0
  236. package/src/app/core/services/config/core.config.ts +263 -0
  237. package/src/app/core/services/config.service.ts +425 -0
  238. package/src/app/core/services/crypto.service.ts +126 -0
  239. package/src/app/core/services/errors.ts +80 -0
  240. package/src/app/core/services/local-settings.service.spec.ts +39 -0
  241. package/src/app/core/services/local-settings.service.ts +610 -0
  242. package/src/app/core/services/model/account.model.ts +188 -0
  243. package/src/app/core/services/model/config.model.ts +116 -0
  244. package/src/app/core/services/model/department.model.ts +34 -0
  245. package/src/app/core/services/model/entity.decorators.ts +110 -0
  246. package/src/app/core/services/model/entity.model.ts +409 -0
  247. package/src/app/core/services/model/filter.model.ts +127 -0
  248. package/src/app/core/services/model/history.model.ts +25 -0
  249. package/src/app/core/services/model/model.enum.ts +10 -0
  250. package/src/app/core/services/model/node-feature.model.ts +31 -0
  251. package/src/app/core/services/model/peer.model.ts +119 -0
  252. package/src/app/core/services/model/person.model.ts +122 -0
  253. package/src/app/core/services/model/referential.model.ts +253 -0
  254. package/src/app/core/services/model/settings.model.ts +37 -0
  255. package/src/app/core/services/model/token.model.ts +60 -0
  256. package/src/app/core/services/model/tree-item-entity.model.ts +256 -0
  257. package/src/app/core/services/network.service.spec.ts +47 -0
  258. package/src/app/core/services/network.service.ts +771 -0
  259. package/src/app/core/services/network.types.ts +7 -0
  260. package/src/app/core/services/network.utils.ts +83 -0
  261. package/src/app/core/services/pipes/account.pipes.ts +22 -0
  262. package/src/app/core/services/pipes/department-to-string.pipe.ts +13 -0
  263. package/src/app/core/services/pipes/person-to-string.pipe.ts +13 -0
  264. package/src/app/core/services/pipes/pipes.module.ts +30 -0
  265. package/src/app/core/services/pipes/referential-to-string.pipe.ts +18 -0
  266. package/src/app/core/services/pipes/usage-mode.pipes.ts +23 -0
  267. package/src/app/core/services/platform.service.spec.ts +50 -0
  268. package/src/app/core/services/platform.service.ts +694 -0
  269. package/src/app/core/services/storage/entities-storage.service.ts +557 -0
  270. package/src/app/core/services/storage/entity-store.class.ts +589 -0
  271. package/src/app/core/services/testing/local-settings.config.ts +35 -0
  272. package/src/app/core/services/testing/referential-filter.model.ts +28 -0
  273. package/src/app/core/services/testing/referential.validator.ts +58 -0
  274. package/src/app/core/services/testing/user-settings.config.ts +77 -0
  275. package/src/app/core/services/validator/account.validator.ts +50 -0
  276. package/src/app/core/services/validator/base.validator.class.ts +51 -0
  277. package/src/app/core/services/validator/local-settings.validator.ts +59 -0
  278. package/src/app/core/services/validator/user-settings.validator.ts +22 -0
  279. package/src/app/core/services/validator/user-token.validator.ts +54 -0
  280. package/src/app/core/settings/settings.module.ts +15 -0
  281. package/src/app/core/settings/settings.page.html +300 -0
  282. package/src/app/core/settings/settings.page.ts +455 -0
  283. package/src/app/core/table/async-table.class.ts +2021 -0
  284. package/src/app/core/table/column/actions-column.component.html +219 -0
  285. package/src/app/core/table/column/actions-column.component.scss +17 -0
  286. package/src/app/core/table/column/actions-column.component.ts +83 -0
  287. package/src/app/core/table/column/nav-actions-column.component.html +119 -0
  288. package/src/app/core/table/column/nav-actions-column.component.ts +108 -0
  289. package/src/app/core/table/column/row-field.component.html +43 -0
  290. package/src/app/core/table/column/row-field.component.scss +0 -0
  291. package/src/app/core/table/column/row-field.component.ts +63 -0
  292. package/src/app/core/table/entities-async-table-datasource.class.ts +515 -0
  293. package/src/app/core/table/entities-table-datasource.class.ts +503 -0
  294. package/src/app/core/table/memory-table.class.ts +56 -0
  295. package/src/app/core/table/table-select-columns.component.html +56 -0
  296. package/src/app/core/table/table-select-columns.component.ts +49 -0
  297. package/src/app/core/table/table.class.ts +2082 -0
  298. package/src/app/core/table/table.model.ts +39 -0
  299. package/src/app/core/table/table.module.ts +28 -0
  300. package/src/app/core/table/table.pipes.ts +87 -0
  301. package/src/app/core/table/table.utils.ts +42 -0
  302. package/src/app/core/table/testing/multi-table.testing.html +456 -0
  303. package/src/app/core/table/testing/multi-table.testing.ts +263 -0
  304. package/src/app/core/table/testing/table-validator.service.ts +29 -0
  305. package/src/app/core/table/testing/table.testing.html +556 -0
  306. package/src/app/core/table/testing/table.testing.module.ts +16 -0
  307. package/src/app/core/table/testing/table.testing.scss +32 -0
  308. package/src/app/core/table/testing/table.testing.ts +329 -0
  309. package/src/app/core/table/testing/table2-validator.service.ts +19 -0
  310. package/src/app/core/table/testing/table2.testing.html +470 -0
  311. package/src/app/core/table/testing/table2.testing.scss +25 -0
  312. package/src/app/core/table/testing/table2.testing.ts +274 -0
  313. package/src/app/shared/alerts.ts +296 -0
  314. package/src/app/shared/audio/audio.testing.html +29 -0
  315. package/src/app/shared/audio/audio.testing.module.ts +21 -0
  316. package/src/app/shared/audio/audio.testing.ts +27 -0
  317. package/src/app/shared/audio/audio.ts +273 -0
  318. package/src/app/shared/base64.utils.ts +66 -0
  319. package/src/app/shared/capacitor/keyboard.ts +38 -0
  320. package/src/app/shared/capacitor/plugins.ts +12 -0
  321. package/src/app/shared/constants.ts +19 -0
  322. package/src/app/shared/dates.ts +206 -0
  323. package/src/app/shared/debug/debug-service.class.ts +7 -0
  324. package/src/app/shared/debug/debug.component.html +13 -0
  325. package/src/app/shared/debug/debug.component.scss +21 -0
  326. package/src/app/shared/debug/debug.component.spec.ts +24 -0
  327. package/src/app/shared/debug/debug.component.ts +25 -0
  328. package/src/app/shared/debug/debug.module.ts +14 -0
  329. package/src/app/shared/directives/autofocus.directive.ts +93 -0
  330. package/src/app/shared/directives/autoresize.directive.ts +67 -0
  331. package/src/app/shared/directives/autotitle.directive.ts +17 -0
  332. package/src/app/shared/directives/directives.module.ts +16 -0
  333. package/src/app/shared/directives/drag-and-drop.directive.ts +46 -0
  334. package/src/app/shared/directives/ng-var.directive.ts +31 -0
  335. package/src/app/shared/directives/resizable/resizable.component.ts +48 -0
  336. package/src/app/shared/directives/resizable/resizable.directive.ts +43 -0
  337. package/src/app/shared/directives/resizable/resizable.module.ts +9 -0
  338. package/src/app/shared/directives/resizable/resizable.style.scss +37 -0
  339. package/src/app/shared/directives/resizable/resizable.template.html +6 -0
  340. package/src/app/shared/directives/throttled-click.directive.ts +36 -0
  341. package/src/app/shared/events.ts +93 -0
  342. package/src/app/shared/file/csv.utils.ts +123 -0
  343. package/src/app/shared/file/file.service.ts +129 -0
  344. package/src/app/shared/file/file.utils.ts +142 -0
  345. package/src/app/shared/file/images.utils.ts +214 -0
  346. package/src/app/shared/file/json.utils.ts +82 -0
  347. package/src/app/shared/file/uri.utils.ts +31 -0
  348. package/src/app/shared/file/url.utils.ts +193 -0
  349. package/src/app/shared/focusable.ts +8 -0
  350. package/src/app/shared/form/field.component.html +380 -0
  351. package/src/app/shared/form/field.component.scss +7 -0
  352. package/src/app/shared/form/field.component.ts +344 -0
  353. package/src/app/shared/form/field.model.ts +158 -0
  354. package/src/app/shared/form/loading-spinner.ts +16 -0
  355. package/src/app/shared/forms.ts +651 -0
  356. package/src/app/shared/functions.spec.ts +197 -0
  357. package/src/app/shared/functions.ts +694 -0
  358. package/src/app/shared/geolocation/geolocation.utils.ts +105 -0
  359. package/src/app/shared/gesture/gesture-config.ts +43 -0
  360. package/src/app/shared/gesture/hammer.utils.ts +14 -0
  361. package/src/app/shared/graph/colors.utils.ts +69 -0
  362. package/src/app/shared/graph/graph-colors.ts +270 -0
  363. package/src/app/shared/guard/component-dirty.guard.ts +67 -0
  364. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.html +11 -0
  365. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.scss +37 -0
  366. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.ts +14 -0
  367. package/src/app/shared/hotkeys/hotkeys.service.ts +165 -0
  368. package/src/app/shared/hotkeys/shared-hotkeys.module.ts +15 -0
  369. package/src/app/shared/http/http.utils.ts +95 -0
  370. package/src/app/shared/image/gallery/image-gallery.component.html +282 -0
  371. package/src/app/shared/image/gallery/image-gallery.component.scss +218 -0
  372. package/src/app/shared/image/gallery/image-gallery.component.ts +434 -0
  373. package/src/app/shared/image/gallery/image-gallery.module.ts +35 -0
  374. package/src/app/shared/image/gallery/testing/gallegry.model.testing.ts +23 -0
  375. package/src/app/shared/image/gallery/testing/gallery.service.testing.ts +99 -0
  376. package/src/app/shared/image/gallery/testing/gallery.testing.html +27 -0
  377. package/src/app/shared/image/gallery/testing/gallery.testing.module.ts +39 -0
  378. package/src/app/shared/image/gallery/testing/gallery.testing.ts +34 -0
  379. package/src/app/shared/image/image.model.ts +8 -0
  380. package/src/app/shared/image/image.module.ts +12 -0
  381. package/src/app/shared/image/image.service.ts +111 -0
  382. package/src/app/shared/image/image.testing.module.ts +16 -0
  383. package/src/app/shared/inputs.ts +330 -0
  384. package/src/app/shared/interceptors/progess.interceptor.ts +24 -0
  385. package/src/app/shared/logging/log-level.model.ts +53 -0
  386. package/src/app/shared/logging/logger.model.ts +117 -0
  387. package/src/app/shared/logging/logging-service.class.ts +131 -0
  388. package/src/app/shared/logging/logging-service.config.ts +29 -0
  389. package/src/app/shared/logging/logging-service.module.ts +19 -0
  390. package/src/app/shared/markdown/markdown.component.html +55 -0
  391. package/src/app/shared/markdown/markdown.component.scss +75 -0
  392. package/src/app/shared/markdown/markdown.component.ts +350 -0
  393. package/src/app/shared/markdown/markdown.directive.ts +28 -0
  394. package/src/app/shared/markdown/markdown.modal.html +42 -0
  395. package/src/app/shared/markdown/markdown.modal.ts +91 -0
  396. package/src/app/shared/markdown/markdown.module.ts +65 -0
  397. package/src/app/shared/markdown/markdown.service.ts +234 -0
  398. package/src/app/shared/markdown/markdown.utils.ts +90 -0
  399. package/src/app/shared/markdown/testing/markdown.test.html +50 -0
  400. package/src/app/shared/markdown/testing/markdown.test.ts +49 -0
  401. package/src/app/shared/markdown/testing/markdown.testing.module.ts +22 -0
  402. package/src/app/shared/material/autocomplete/material.autocomplete.config.ts +127 -0
  403. package/src/app/shared/material/autocomplete/material.autocomplete.html +400 -0
  404. package/src/app/shared/material/autocomplete/material.autocomplete.module.ts +41 -0
  405. package/src/app/shared/material/autocomplete/material.autocomplete.scss +54 -0
  406. package/src/app/shared/material/autocomplete/material.autocomplete.ts +1375 -0
  407. package/src/app/shared/material/autocomplete/material.autocomplete.utils.ts +21 -0
  408. package/src/app/shared/material/autocomplete/testing/autocomplete.test.html +1164 -0
  409. package/src/app/shared/material/autocomplete/testing/autocomplete.test.spec.ts +33 -0
  410. package/src/app/shared/material/autocomplete/testing/autocomplete.test.ts +272 -0
  411. package/src/app/shared/material/badge/badge.directive.ts +217 -0
  412. package/src/app/shared/material/badge/badge.module.ts +12 -0
  413. package/src/app/shared/material/badge/badge.test.html +275 -0
  414. package/src/app/shared/material/badge/badge.test.ts +34 -0
  415. package/src/app/shared/material/boolean/boolean.module.ts +36 -0
  416. package/src/app/shared/material/boolean/material.boolean.html +271 -0
  417. package/src/app/shared/material/boolean/material.boolean.scss +27 -0
  418. package/src/app/shared/material/boolean/material.boolean.ts +343 -0
  419. package/src/app/shared/material/boolean/testing/boolean.test.page.html +469 -0
  420. package/src/app/shared/material/boolean/testing/boolean.test.page.ts +66 -0
  421. package/src/app/shared/material/chips/chips.module.ts +38 -0
  422. package/src/app/shared/material/chips/material.chips.html +233 -0
  423. package/src/app/shared/material/chips/material.chips.scss +67 -0
  424. package/src/app/shared/material/chips/material.chips.ts +834 -0
  425. package/src/app/shared/material/chips/testing/chips.test.html +207 -0
  426. package/src/app/shared/material/chips/testing/chips.test.ts +169 -0
  427. package/src/app/shared/material/datetime/datetime.module.ts +42 -0
  428. package/src/app/shared/material/datetime/material.date.html +186 -0
  429. package/src/app/shared/material/datetime/material.date.scss +17 -0
  430. package/src/app/shared/material/datetime/material.date.ts +512 -0
  431. package/src/app/shared/material/datetime/material.dateshort.html +194 -0
  432. package/src/app/shared/material/datetime/material.dateshort.scss +23 -0
  433. package/src/app/shared/material/datetime/material.dateshort.ts +497 -0
  434. package/src/app/shared/material/datetime/material.datetime.html +325 -0
  435. package/src/app/shared/material/datetime/material.datetime.scss +87 -0
  436. package/src/app/shared/material/datetime/material.datetime.ts +758 -0
  437. package/src/app/shared/material/datetime/testing/mat-date-time.test.html +794 -0
  438. package/src/app/shared/material/datetime/testing/mat-date-time.test.ts +155 -0
  439. package/src/app/shared/material/datetime/testing/mat-date.test.html +564 -0
  440. package/src/app/shared/material/datetime/testing/mat-date.test.ts +145 -0
  441. package/src/app/shared/material/datetime/testing/mat-dateshort.test.html +530 -0
  442. package/src/app/shared/material/datetime/testing/mat-dateshort.test.ts +133 -0
  443. package/src/app/shared/material/duration/duration.module.ts +33 -0
  444. package/src/app/shared/material/duration/duration.utils.ts +18 -0
  445. package/src/app/shared/material/duration/material.duration.html +116 -0
  446. package/src/app/shared/material/duration/material.duration.scss +28 -0
  447. package/src/app/shared/material/duration/material.duration.ts +308 -0
  448. package/src/app/shared/material/duration/testing/mat-duration.test.html +170 -0
  449. package/src/app/shared/material/duration/testing/mat-duration.test.ts +88 -0
  450. package/src/app/shared/material/latlong/latlong.utils.ts +376 -0
  451. package/src/app/shared/material/latlong/material.latlong-input.html +95 -0
  452. package/src/app/shared/material/latlong/material.latlong-input.scss +66 -0
  453. package/src/app/shared/material/latlong/material.latlong-input.ts +445 -0
  454. package/src/app/shared/material/latlong/material.latlong.html +90 -0
  455. package/src/app/shared/material/latlong/material.latlong.module.ts +37 -0
  456. package/src/app/shared/material/latlong/material.latlong.scss +0 -0
  457. package/src/app/shared/material/latlong/material.latlong.ts +203 -0
  458. package/src/app/shared/material/latlong/testing/latlong.test.html +1008 -0
  459. package/src/app/shared/material/latlong/testing/latlong.test.ts +144 -0
  460. package/src/app/shared/material/material.animations.ts +269 -0
  461. package/src/app/shared/material/material.config.ts +5 -0
  462. package/src/app/shared/material/material.module.ts +94 -0
  463. package/src/app/shared/material/material.testing.module.ts +192 -0
  464. package/src/app/shared/material/memory/memory.utils.ts +57 -0
  465. package/src/app/shared/material/numpad/numpad.animation.ts +1 -0
  466. package/src/app/shared/material/numpad/numpad.append-to-input.directive.ts +110 -0
  467. package/src/app/shared/material/numpad/numpad.component.ts +73 -0
  468. package/src/app/shared/material/numpad/numpad.container.html +37 -0
  469. package/src/app/shared/material/numpad/numpad.container.scss +55 -0
  470. package/src/app/shared/material/numpad/numpad.container.ts +152 -0
  471. package/src/app/shared/material/numpad/numpad.content.html +13 -0
  472. package/src/app/shared/material/numpad/numpad.content.ts +10 -0
  473. package/src/app/shared/material/numpad/numpad.directive.ts +159 -0
  474. package/src/app/shared/material/numpad/numpad.dom-service.ts +35 -0
  475. package/src/app/shared/material/numpad/numpad.model.ts +53 -0
  476. package/src/app/shared/material/numpad/numpad.module.ts +18 -0
  477. package/src/app/shared/material/numpad/testing/numpad.test.html +146 -0
  478. package/src/app/shared/material/numpad/testing/numpad.test.ts +44 -0
  479. package/src/app/shared/material/paginator/material.paginator-i18n.ts +47 -0
  480. package/src/app/shared/material/stepper/material.stepper-i18n.ts +17 -0
  481. package/src/app/shared/material/swipe/material.swipe.html +85 -0
  482. package/src/app/shared/material/swipe/material.swipe.scss +55 -0
  483. package/src/app/shared/material/swipe/material.swipe.ts +366 -0
  484. package/src/app/shared/material/swipe/swipe.module.ts +29 -0
  485. package/src/app/shared/material/swipe/testing/swipe.test.html +112 -0
  486. package/src/app/shared/material/swipe/testing/swipe.test.ts +74 -0
  487. package/src/app/shared/material/test/test-component.css +22 -0
  488. package/src/app/shared/material/test/test-component.html +40 -0
  489. package/src/app/shared/material/test/test-component.ts +295 -0
  490. package/src/app/shared/material/testing/common.test.html +227 -0
  491. package/src/app/shared/material/testing/common.test.ts +126 -0
  492. package/src/app/shared/material/text/testing/text-form.testing.html +213 -0
  493. package/src/app/shared/material/text/testing/text-form.testing.ts +30 -0
  494. package/src/app/shared/material/text/text-form.component.html +63 -0
  495. package/src/app/shared/material/text/text-form.component.scss +8 -0
  496. package/src/app/shared/material/text/text-form.component.ts +177 -0
  497. package/src/app/shared/material/text/text-form.module.ts +36 -0
  498. package/src/app/shared/modules.ts +12 -0
  499. package/src/app/shared/named-filter/named-filter-selector.component.html +77 -0
  500. package/src/app/shared/named-filter/named-filter-selector.component.scss +3 -0
  501. package/src/app/shared/named-filter/named-filter-selector.component.ts +287 -0
  502. package/src/app/shared/named-filter/named-filter.model.ts +64 -0
  503. package/src/app/shared/named-filter/named-filter.module.ts +15 -0
  504. package/src/app/shared/named-filter/named-filter.service.ts +100 -0
  505. package/src/app/shared/named-filter/testing/named-filter-selector.testing.html +61 -0
  506. package/src/app/shared/named-filter/testing/named-filter-selector.testing.ts +80 -0
  507. package/src/app/shared/named-filter/testing/named-filter.testing.module.ts +20 -0
  508. package/src/app/shared/named-filter/testing/named-filter.testing.service.ts +83 -0
  509. package/src/app/shared/observables.ts +139 -0
  510. package/src/app/shared/pipes/arrays.pipe.ts +153 -0
  511. package/src/app/shared/pipes/badge.pipes.ts +18 -0
  512. package/src/app/shared/pipes/colors.pipe.ts +24 -0
  513. package/src/app/shared/pipes/date-diff-duration.pipe.ts +53 -0
  514. package/src/app/shared/pipes/date-format.pipe.ts +73 -0
  515. package/src/app/shared/pipes/date-from-now.pipe.ts +17 -0
  516. package/src/app/shared/pipes/dates.pipe.ts +13 -0
  517. package/src/app/shared/pipes/display-with.pipe.ts +13 -0
  518. package/src/app/shared/pipes/duration.pipe.spec.ts +41 -0
  519. package/src/app/shared/pipes/duration.pipe.ts +28 -0
  520. package/src/app/shared/pipes/file-size.pipe.ts +50 -0
  521. package/src/app/shared/pipes/form.pipes.ts +209 -0
  522. package/src/app/shared/pipes/highlight.pipe.ts +41 -0
  523. package/src/app/shared/pipes/html.pipes.ts +49 -0
  524. package/src/app/shared/pipes/latlong-format.pipe.ts +28 -0
  525. package/src/app/shared/pipes/maps.pipe.ts +41 -0
  526. package/src/app/shared/pipes/maskito.pipe.ts +68 -0
  527. package/src/app/shared/pipes/math.pipes.ts +46 -0
  528. package/src/app/shared/pipes/ng-init.pipe.ts +13 -0
  529. package/src/app/shared/pipes/number-format.pipe.ts +11 -0
  530. package/src/app/shared/pipes/observable.pipes.ts +46 -0
  531. package/src/app/shared/pipes/pipes.module.ts +162 -0
  532. package/src/app/shared/pipes/property.pipes.ts +115 -0
  533. package/src/app/shared/pipes/selection.pipes.ts +165 -0
  534. package/src/app/shared/pipes/string.pipes.ts +128 -0
  535. package/src/app/shared/pipes/translate-context.pipe.ts +27 -0
  536. package/src/app/shared/pipes/types.pipes.ts +52 -0
  537. package/src/app/shared/pipes/url.pipes.ts +29 -0
  538. package/src/app/shared/platforms.ts +99 -0
  539. package/src/app/shared/print/print.service.ts +337 -0
  540. package/src/app/shared/regexps.ts +112 -0
  541. package/src/app/shared/rx-state/rx-state.decorators.ts +281 -0
  542. package/src/app/shared/rx-state/rx-state.module.ts +11 -0
  543. package/src/app/shared/rx-state/rx-state.types.ts +5 -0
  544. package/src/app/shared/services/entity-service.class.ts +120 -0
  545. package/src/app/shared/services/job.utils.ts +124 -0
  546. package/src/app/shared/services/memory-entity-service.class.ts +435 -0
  547. package/src/app/shared/services/progress-bar.service.ts +40 -0
  548. package/src/app/shared/services/startable-observable-service.class.ts +129 -0
  549. package/src/app/shared/services/startable-service.class.ts +120 -0
  550. package/src/app/shared/services/storage.utils.ts +53 -0
  551. package/src/app/shared/services/translate-context.service.ts +112 -0
  552. package/src/app/shared/services/validator-service.class.ts +13 -0
  553. package/src/app/shared/services.ts +134 -0
  554. package/src/app/shared/shared-routing.module.ts +69 -0
  555. package/src/app/shared/shared.module.spec.ts +13 -0
  556. package/src/app/shared/shared.module.ts +168 -0
  557. package/src/app/shared/shared.testing.module.ts +61 -0
  558. package/src/app/shared/storage/storage-explorer.component.html +160 -0
  559. package/src/app/shared/storage/storage-explorer.component.scss +37 -0
  560. package/src/app/shared/storage/storage-explorer.component.spec.ts +24 -0
  561. package/src/app/shared/storage/storage-explorer.component.ts +268 -0
  562. package/src/app/shared/storage/storage-explorer.module.ts +24 -0
  563. package/src/app/shared/storage/storage-explorer.testing-routing.module.ts +19 -0
  564. package/src/app/shared/storage/storage-explorer.testing.module.ts +19 -0
  565. package/src/app/shared/storage/storage.service.ts +131 -0
  566. package/src/app/shared/storage/storage.utils.ts +25 -0
  567. package/src/app/shared/testing/maskito.test.html +40 -0
  568. package/src/app/shared/testing/maskito.test.ts +33 -0
  569. package/src/app/shared/testing/observable.test.html +53 -0
  570. package/src/app/shared/testing/observable.test.scss +3 -0
  571. package/src/app/shared/testing/observable.test.ts +101 -0
  572. package/src/app/shared/testing/tests.page.html +22 -0
  573. package/src/app/shared/testing/tests.page.ts +32 -0
  574. package/src/app/shared/toast/toast.testing.html +50 -0
  575. package/src/app/shared/toast/toast.testing.module.ts +22 -0
  576. package/src/app/shared/toast/toast.testing.ts +52 -0
  577. package/src/app/shared/toast/toasts.ts +161 -0
  578. package/src/app/shared/toolbar/modal-toolbar.html +30 -0
  579. package/src/app/shared/toolbar/modal-toolbar.scss +0 -0
  580. package/src/app/shared/toolbar/modal-toolbar.ts +64 -0
  581. package/src/app/shared/toolbar/toolbar.html +68 -0
  582. package/src/app/shared/toolbar/toolbar.module.ts +18 -0
  583. package/src/app/shared/toolbar/toolbar.scss +0 -0
  584. package/src/app/shared/toolbar/toolbar.ts +262 -0
  585. package/src/app/shared/types.ts +44 -0
  586. package/src/app/shared/upload-file/testing/upload-file.testing.html +30 -0
  587. package/src/app/shared/upload-file/testing/upload-file.testing.module.ts +21 -0
  588. package/src/app/shared/upload-file/testing/upload-file.testing.ts +65 -0
  589. package/src/app/shared/upload-file/upload-file-popover.component.html +46 -0
  590. package/src/app/shared/upload-file/upload-file-popover.component.scss +6 -0
  591. package/src/app/shared/upload-file/upload-file-popover.component.ts +115 -0
  592. package/src/app/shared/upload-file/upload-file.component.html +57 -0
  593. package/src/app/shared/upload-file/upload-file.component.scss +60 -0
  594. package/src/app/shared/upload-file/upload-file.component.ts +222 -0
  595. package/src/app/shared/upload-file/upload-file.model.ts +40 -0
  596. package/src/app/shared/validator/form-error-adapter.class.ts +139 -0
  597. package/src/app/shared/validator/validators.ts +725 -0
  598. package/src/app/shared/version/versions.ts +89 -0
  599. package/src/app/social/config/social.config.ts +10 -0
  600. package/src/app/social/feed/discourse/discourse-feed.service.ts +216 -0
  601. package/src/app/social/feed/discourse/discourse.model.ts +9 -0
  602. package/src/app/social/feed/discourse/discourse.utils.ts +210 -0
  603. package/src/app/social/feed/feed.component.html +85 -0
  604. package/src/app/social/feed/feed.component.scss +59 -0
  605. package/src/app/social/feed/feed.component.spec.ts +24 -0
  606. package/src/app/social/feed/feed.component.ts +115 -0
  607. package/src/app/social/feed/feed.directive.ts +164 -0
  608. package/src/app/social/feed/feed.model.ts +139 -0
  609. package/src/app/social/feed/feed.module.ts +13 -0
  610. package/src/app/social/feed/feed.service.ts +14 -0
  611. package/src/app/social/job/job.module.ts +14 -0
  612. package/src/app/social/job/progression/job-progression.component.html +19 -0
  613. package/src/app/social/job/progression/job-progression.component.scss +15 -0
  614. package/src/app/social/job/progression/job-progression.component.ts +39 -0
  615. package/src/app/social/job/progression/job-progression.icon.html +32 -0
  616. package/src/app/social/job/progression/job-progression.icon.scss +7 -0
  617. package/src/app/social/job/progression/job-progression.icon.ts +277 -0
  618. package/src/app/social/job/progression/job-progression.list.html +25 -0
  619. package/src/app/social/job/progression/job-progression.list.scss +17 -0
  620. package/src/app/social/job/progression/job-progression.list.ts +40 -0
  621. package/src/app/social/job/progression/job-progression.model.ts +26 -0
  622. package/src/app/social/job/progression/job-progression.service.ts +97 -0
  623. package/src/app/social/job/testing/job-progression.testing.html +11 -0
  624. package/src/app/social/job/testing/job-progression.testing.service.ts +33 -0
  625. package/src/app/social/job/testing/job-progression.testing.ts +28 -0
  626. package/src/app/social/job/testing/job.testing.module.ts +13 -0
  627. package/src/app/social/message/message.form.html +71 -0
  628. package/src/app/social/message/message.form.scss +6 -0
  629. package/src/app/social/message/message.form.ts +128 -0
  630. package/src/app/social/message/message.modal.html +68 -0
  631. package/src/app/social/message/message.modal.ts +117 -0
  632. package/src/app/social/message/message.model.ts +78 -0
  633. package/src/app/social/message/message.module.ts +14 -0
  634. package/src/app/social/message/message.service.ts +104 -0
  635. package/src/app/social/social.errors.ts +10 -0
  636. package/src/app/social/social.module.ts +23 -0
  637. package/src/app/social/social.testing.module.ts +33 -0
  638. package/src/app/social/user-event/notification/user-event-notification.icon.html +49 -0
  639. package/src/app/social/user-event/notification/user-event-notification.icon.scss +4 -0
  640. package/src/app/social/user-event/notification/user-event-notification.icon.ts +176 -0
  641. package/src/app/social/user-event/notification/user-event-notification.list.html +151 -0
  642. package/src/app/social/user-event/notification/user-event-notification.list.scss +73 -0
  643. package/src/app/social/user-event/notification/user-event-notification.list.ts +282 -0
  644. package/src/app/social/user-event/notification/user-event-notification.modal.html +71 -0
  645. package/src/app/social/user-event/notification/user-event-notification.modal.ts +60 -0
  646. package/src/app/social/user-event/testing/user-event.testing.html +54 -0
  647. package/src/app/social/user-event/testing/user-event.testing.model.ts +142 -0
  648. package/src/app/social/user-event/testing/user-event.testing.module.ts +13 -0
  649. package/src/app/social/user-event/testing/user-event.testing.service.ts +161 -0
  650. package/src/app/social/user-event/testing/user-event.testing.ts +300 -0
  651. package/src/app/social/user-event/user-event.model.ts +55 -0
  652. package/src/app/social/user-event/user-event.module.ts +16 -0
  653. package/src/app/social/user-event/user-event.service.ts +686 -0
  654. package/src/assets/i18n/en-US.json +5 -1
  655. package/src/assets/i18n/en.json +5 -0
  656. package/src/assets/i18n/fr.json +5 -0
  657. package/src/browserslist +9 -0
  658. package/src/environments/environment.class.ts +113 -0
  659. package/src/environments/environment.loader.ts +90 -0
  660. package/src/environments/environment.prod.ts +49 -0
  661. package/src/environments/environment.test.ts +92 -0
  662. package/src/environments/environment.ts +136 -0
  663. package/src/favicon.ico +0 -0
  664. package/src/global.scss +13 -0
  665. package/src/index.html +76 -0
  666. package/src/main.ts +19 -0
  667. package/src/polyfills.ts +34 -0
  668. package/src/schema.graphql +4381 -0
  669. package/src/service-worker.js +31 -0
  670. package/src/test.ts +30 -0
  671. package/tsconfig-cs.json +57 -0
  672. package/tsconfig.app.json +15 -0
  673. package/tsconfig.json +48 -0
  674. package/tsconfig.spec.json +18 -0
  675. package/esm2022/public_api.mjs +0 -382
  676. package/esm2022/src/app/admin/admin-routing.module.mjs +0 -34
  677. package/esm2022/src/app/admin/admin.module.mjs +0 -32
  678. package/esm2022/src/app/admin/services/filter/person.filter.mjs +0 -76
  679. package/esm2022/src/app/admin/services/person.service.mjs +0 -184
  680. package/esm2022/src/app/admin/services/validator/person.validator.mjs +0 -72
  681. package/esm2022/src/app/admin/users/users.mjs +0 -379
  682. package/esm2022/src/app/admin/users/users.module.mjs +0 -56
  683. package/esm2022/src/app/core/about/about.modal.mjs +0 -86
  684. package/esm2022/src/app/core/about/about.module.mjs +0 -22
  685. package/esm2022/src/app/core/account/account.module.mjs +0 -75
  686. package/esm2022/src/app/core/account/account.page.mjs +0 -364
  687. package/esm2022/src/app/core/account/new-token.form.mjs +0 -106
  688. package/esm2022/src/app/core/account/new-token.modal.mjs +0 -66
  689. package/esm2022/src/app/core/account/password/change-password.form.mjs +0 -63
  690. package/esm2022/src/app/core/account/password/change-password.module.mjs +0 -22
  691. package/esm2022/src/app/core/account/password/change-password.page.mjs +0 -150
  692. package/esm2022/src/app/core/account/token.table.mjs +0 -157
  693. package/esm2022/src/app/core/auth/auth.form.mjs +0 -159
  694. package/esm2022/src/app/core/auth/auth.modal.mjs +0 -76
  695. package/esm2022/src/app/core/auth/auth.module.mjs +0 -56
  696. package/esm2022/src/app/core/auth/reset-password.modal.mjs +0 -89
  697. package/esm2022/src/app/core/core.module.mjs +0 -151
  698. package/esm2022/src/app/core/core.testing.module.mjs +0 -107
  699. package/esm2022/src/app/core/form/array/form-array.mjs +0 -328
  700. package/esm2022/src/app/core/form/array/testing/form-array-test.module.mjs +0 -23
  701. package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +0 -94
  702. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +0 -108
  703. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +0 -31
  704. package/esm2022/src/app/core/form/entity/editor.class.mjs +0 -268
  705. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +0 -420
  706. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +0 -741
  707. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +0 -24
  708. package/esm2022/src/app/core/form/entity/entity.module.mjs +0 -32
  709. package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +0 -190
  710. package/esm2022/src/app/core/form/form-container.class.mjs +0 -341
  711. package/esm2022/src/app/core/form/form.class.mjs +0 -337
  712. package/esm2022/src/app/core/form/form.module.mjs +0 -70
  713. package/esm2022/src/app/core/form/form.utils.mjs +0 -232
  714. package/esm2022/src/app/core/form/list/list.form.mjs +0 -235
  715. package/esm2022/src/app/core/form/list/list.module.mjs +0 -31
  716. package/esm2022/src/app/core/form/properties/properties.form.mjs +0 -317
  717. package/esm2022/src/app/core/form/properties/properties.module.mjs +0 -37
  718. package/esm2022/src/app/core/form/properties/properties.table.mjs +0 -264
  719. package/esm2022/src/app/core/form/properties/properties.utils.mjs +0 -304
  720. package/esm2022/src/app/core/form/properties/property.validator.mjs +0 -70
  721. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +0 -104
  722. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +0 -23
  723. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +0 -73
  724. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +0 -30
  725. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +0 -161
  726. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +0 -31
  727. package/esm2022/src/app/core/form/username/username.form.mjs +0 -55
  728. package/esm2022/src/app/core/form/username/username.module.mjs +0 -20
  729. package/esm2022/src/app/core/graphql/graphql.module.mjs +0 -14
  730. package/esm2022/src/app/core/graphql/graphql.service.mjs +0 -781
  731. package/esm2022/src/app/core/graphql/graphql.utils.mjs +0 -119
  732. package/esm2022/src/app/core/home/home.mjs +0 -402
  733. package/esm2022/src/app/core/home/home.module.mjs +0 -50
  734. package/esm2022/src/app/core/icon/icon.component.mjs +0 -40
  735. package/esm2022/src/app/core/icon/icon.module.mjs +0 -20
  736. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +0 -394
  737. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +0 -31
  738. package/esm2022/src/app/core/menu/menu.component.mjs +0 -258
  739. package/esm2022/src/app/core/menu/menu.model.mjs +0 -272
  740. package/esm2022/src/app/core/menu/menu.module.mjs +0 -47
  741. package/esm2022/src/app/core/menu/menu.service.mjs +0 -666
  742. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +0 -109
  743. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +0 -50
  744. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +0 -158
  745. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +0 -60
  746. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +0 -28
  747. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +0 -31
  748. package/esm2022/src/app/core/peer/select-peer.modal.mjs +0 -344
  749. package/esm2022/src/app/core/peer/select-peer.module.mjs +0 -36
  750. package/esm2022/src/app/core/register/register-confirm.page.mjs +0 -90
  751. package/esm2022/src/app/core/register/register.form.mjs +0 -194
  752. package/esm2022/src/app/core/register/register.modal.mjs +0 -55
  753. package/esm2022/src/app/core/register/register.module.mjs +0 -23
  754. package/esm2022/src/app/core/services/account.service.mjs +0 -1358
  755. package/esm2022/src/app/core/services/auth-guard.service.mjs +0 -74
  756. package/esm2022/src/app/core/services/base-entity-service.class.mjs +0 -485
  757. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +0 -230
  758. package/esm2022/src/app/core/services/base58.mjs +0 -83
  759. package/esm2022/src/app/core/services/config/core.config.mjs +0 -258
  760. package/esm2022/src/app/core/services/config.service.mjs +0 -384
  761. package/esm2022/src/app/core/services/crypto.service.mjs +0 -107
  762. package/esm2022/src/app/core/services/errors.mjs +0 -54
  763. package/esm2022/src/app/core/services/local-settings.service.mjs +0 -516
  764. package/esm2022/src/app/core/services/model/account.model.mjs +0 -178
  765. package/esm2022/src/app/core/services/model/config.model.mjs +0 -107
  766. package/esm2022/src/app/core/services/model/department.model.mjs +0 -35
  767. package/esm2022/src/app/core/services/model/entity.decorators.mjs +0 -97
  768. package/esm2022/src/app/core/services/model/entity.model.mjs +0 -338
  769. package/esm2022/src/app/core/services/model/filter.model.mjs +0 -93
  770. package/esm2022/src/app/core/services/model/history.model.mjs +0 -2
  771. package/esm2022/src/app/core/services/model/model.enum.mjs +0 -11
  772. package/esm2022/src/app/core/services/model/node-feature.model.mjs +0 -31
  773. package/esm2022/src/app/core/services/model/peer.model.mjs +0 -113
  774. package/esm2022/src/app/core/services/model/person.model.mjs +0 -114
  775. package/esm2022/src/app/core/services/model/referential.model.mjs +0 -205
  776. package/esm2022/src/app/core/services/model/settings.model.mjs +0 -6
  777. package/esm2022/src/app/core/services/model/token.model.mjs +0 -57
  778. package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +0 -220
  779. package/esm2022/src/app/core/services/network.service.mjs +0 -638
  780. package/esm2022/src/app/core/services/network.types.mjs +0 -2
  781. package/esm2022/src/app/core/services/network.utils.mjs +0 -35
  782. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +0 -38
  783. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +0 -23
  784. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +0 -23
  785. package/esm2022/src/app/core/services/pipes/pipes.module.mjs +0 -54
  786. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +0 -21
  787. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +0 -37
  788. package/esm2022/src/app/core/services/platform.service.mjs +0 -627
  789. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +0 -427
  790. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +0 -450
  791. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +0 -25
  792. package/esm2022/src/app/core/services/testing/referential.validator.mjs +0 -46
  793. package/esm2022/src/app/core/services/validator/account.validator.mjs +0 -45
  794. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +0 -49
  795. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +0 -57
  796. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +0 -27
  797. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +0 -55
  798. package/esm2022/src/app/core/settings/settings.module.mjs +0 -23
  799. package/esm2022/src/app/core/settings/settings.page.mjs +0 -403
  800. package/esm2022/src/app/core/table/async-table.class.mjs +0 -1813
  801. package/esm2022/src/app/core/table/column/actions-column.component.mjs +0 -130
  802. package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +0 -117
  803. package/esm2022/src/app/core/table/column/row-field.component.mjs +0 -116
  804. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +0 -415
  805. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +0 -407
  806. package/esm2022/src/app/core/table/memory-table.class.mjs +0 -57
  807. package/esm2022/src/app/core/table/table-select-columns.component.mjs +0 -46
  808. package/esm2022/src/app/core/table/table.class.mjs +0 -1869
  809. package/esm2022/src/app/core/table/table.model.mjs +0 -21
  810. package/esm2022/src/app/core/table/table.module.mjs +0 -51
  811. package/esm2022/src/app/core/table/table.pipes.mjs +0 -77
  812. package/esm2022/src/app/core/table/table.utils.mjs +0 -34
  813. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +0 -32
  814. package/esm2022/src/app/core/table/testing/table.testing.mjs +0 -329
  815. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +0 -25
  816. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +0 -25
  817. package/esm2022/src/app/core/table/testing/table2.testing.mjs +0 -273
  818. package/esm2022/src/app/shared/alerts.mjs +0 -243
  819. package/esm2022/src/app/shared/audio/audio.mjs +0 -255
  820. package/esm2022/src/app/shared/audio/audio.testing.mjs +0 -32
  821. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +0 -30
  822. package/esm2022/src/app/shared/capacitor/keyboard.mjs +0 -42
  823. package/esm2022/src/app/shared/capacitor/plugins.mjs +0 -9
  824. package/esm2022/src/app/shared/constants.mjs +0 -16
  825. package/esm2022/src/app/shared/dates.mjs +0 -180
  826. package/esm2022/src/app/shared/debug/debug-service.class.mjs +0 -3
  827. package/esm2022/src/app/shared/debug/debug.component.mjs +0 -44
  828. package/esm2022/src/app/shared/debug/debug.module.mjs +0 -23
  829. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +0 -91
  830. package/esm2022/src/app/shared/directives/autoresize.directive.mjs +0 -75
  831. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +0 -30
  832. package/esm2022/src/app/shared/directives/directives.module.mjs +0 -24
  833. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +0 -52
  834. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +0 -33
  835. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +0 -62
  836. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +0 -45
  837. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +0 -17
  838. package/esm2022/src/app/shared/directives/throttled-click.directive.mjs +0 -43
  839. package/esm2022/src/app/shared/events.mjs +0 -64
  840. package/esm2022/src/app/shared/file/csv.utils.mjs +0 -97
  841. package/esm2022/src/app/shared/file/file.service.mjs +0 -118
  842. package/esm2022/src/app/shared/file/file.utils.mjs +0 -117
  843. package/esm2022/src/app/shared/file/images.utils.mjs +0 -186
  844. package/esm2022/src/app/shared/file/json.utils.mjs +0 -58
  845. package/esm2022/src/app/shared/file/uri.utils.mjs +0 -29
  846. package/esm2022/src/app/shared/file/url.utils.mjs +0 -195
  847. package/esm2022/src/app/shared/focusable.mjs +0 -6
  848. package/esm2022/src/app/shared/form/field.component.mjs +0 -393
  849. package/esm2022/src/app/shared/form/field.model.mjs +0 -82
  850. package/esm2022/src/app/shared/form/loading-spinner.mjs +0 -35
  851. package/esm2022/src/app/shared/forms.mjs +0 -573
  852. package/esm2022/src/app/shared/functions.mjs +0 -672
  853. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +0 -86
  854. package/esm2022/src/app/shared/gesture/gesture-config.mjs +0 -46
  855. package/esm2022/src/app/shared/gesture/hammer.utils.mjs +0 -2
  856. package/esm2022/src/app/shared/graph/colors.utils.mjs +0 -60
  857. package/esm2022/src/app/shared/graph/graph-colors.mjs +0 -214
  858. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +0 -65
  859. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +0 -23
  860. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +0 -147
  861. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +0 -24
  862. package/esm2022/src/app/shared/http/http.utils.mjs +0 -56
  863. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +0 -443
  864. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +0 -62
  865. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +0 -26
  866. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +0 -87
  867. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +0 -37
  868. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +0 -59
  869. package/esm2022/src/app/shared/image/image.model.mjs +0 -2
  870. package/esm2022/src/app/shared/image/image.module.mjs +0 -24
  871. package/esm2022/src/app/shared/image/image.service.mjs +0 -109
  872. package/esm2022/src/app/shared/inputs.mjs +0 -279
  873. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +0 -27
  874. package/esm2022/src/app/shared/logging/log-level.model.mjs +0 -48
  875. package/esm2022/src/app/shared/logging/logger.model.mjs +0 -47
  876. package/esm2022/src/app/shared/logging/logging-service.class.mjs +0 -125
  877. package/esm2022/src/app/shared/logging/logging-service.config.mjs +0 -2
  878. package/esm2022/src/app/shared/logging/logging-service.module.mjs +0 -30
  879. package/esm2022/src/app/shared/markdown/markdown.component.mjs +0 -321
  880. package/esm2022/src/app/shared/markdown/markdown.directive.mjs +0 -34
  881. package/esm2022/src/app/shared/markdown/markdown.modal.mjs +0 -99
  882. package/esm2022/src/app/shared/markdown/markdown.module.mjs +0 -87
  883. package/esm2022/src/app/shared/markdown/markdown.service.mjs +0 -204
  884. package/esm2022/src/app/shared/markdown/markdown.utils.mjs +0 -87
  885. package/esm2022/src/app/shared/markdown/testing/markdown.test.mjs +0 -55
  886. package/esm2022/src/app/shared/markdown/testing/markdown.testing.module.mjs +0 -30
  887. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +0 -46
  888. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +0 -1313
  889. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +0 -79
  890. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +0 -18
  891. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +0 -242
  892. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +0 -251
  893. package/esm2022/src/app/shared/material/badge/badge.module.mjs +0 -20
  894. package/esm2022/src/app/shared/material/badge/badge.test.mjs +0 -42
  895. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +0 -67
  896. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +0 -371
  897. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +0 -72
  898. package/esm2022/src/app/shared/material/chips/chips.module.mjs +0 -71
  899. package/esm2022/src/app/shared/material/chips/material.chips.mjs +0 -836
  900. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +0 -151
  901. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +0 -76
  902. package/esm2022/src/app/shared/material/datetime/material.date.mjs +0 -471
  903. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +0 -457
  904. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +0 -693
  905. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +0 -136
  906. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +0 -127
  907. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +0 -118
  908. package/esm2022/src/app/shared/material/duration/duration.module.mjs +0 -61
  909. package/esm2022/src/app/shared/material/duration/duration.utils.mjs +0 -16
  910. package/esm2022/src/app/shared/material/duration/material.duration.mjs +0 -283
  911. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +0 -85
  912. package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +0 -319
  913. package/esm2022/src/app/shared/material/latlong/material.latlong-input.mjs +0 -432
  914. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +0 -231
  915. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +0 -68
  916. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +0 -137
  917. package/esm2022/src/app/shared/material/material.animations.mjs +0 -200
  918. package/esm2022/src/app/shared/material/material.config.mjs +0 -3
  919. package/esm2022/src/app/shared/material/material.module.mjs +0 -229
  920. package/esm2022/src/app/shared/material/material.testing.module.mjs +0 -245
  921. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +0 -51
  922. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +0 -23
  923. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +0 -379
  924. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +0 -52
  925. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +0 -67
  926. package/esm2022/src/app/shared/material/test/test-component.mjs +0 -264
  927. package/esm2022/src/app/shared/material/testing/common.test.mjs +0 -111
  928. package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +0 -42
  929. package/esm2022/src/app/shared/material/text/text-form.component.mjs +0 -205
  930. package/esm2022/src/app/shared/material/text/text-form.module.mjs +0 -63
  931. package/esm2022/src/app/shared/modules.mjs +0 -12
  932. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +0 -303
  933. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +0 -49
  934. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +0 -24
  935. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +0 -69
  936. package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +0 -74
  937. package/esm2022/src/app/shared/named-filter/testing/named-filter.testing.module.mjs +0 -28
  938. package/esm2022/src/app/shared/observables.mjs +0 -100
  939. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +0 -217
  940. package/esm2022/src/app/shared/pipes/badge.pipes.mjs +0 -25
  941. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +0 -29
  942. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +0 -50
  943. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +0 -72
  944. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +0 -28
  945. package/esm2022/src/app/shared/pipes/dates.pipe.mjs +0 -18
  946. package/esm2022/src/app/shared/pipes/display-with.pipe.mjs +0 -23
  947. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +0 -34
  948. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +0 -53
  949. package/esm2022/src/app/shared/pipes/form.pipes.mjs +0 -219
  950. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +0 -50
  951. package/esm2022/src/app/shared/pipes/html.pipes.mjs +0 -69
  952. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +0 -42
  953. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +0 -65
  954. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +0 -67
  955. package/esm2022/src/app/shared/pipes/math.pipes.mjs +0 -77
  956. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +0 -19
  957. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +0 -17
  958. package/esm2022/src/app/shared/pipes/observable.pipes.mjs +0 -63
  959. package/esm2022/src/app/shared/pipes/pipes.module.mjs +0 -285
  960. package/esm2022/src/app/shared/pipes/property.pipes.mjs +0 -135
  961. package/esm2022/src/app/shared/pipes/selection.pipes.mjs +0 -179
  962. package/esm2022/src/app/shared/pipes/string.pipes.mjs +0 -183
  963. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +0 -44
  964. package/esm2022/src/app/shared/pipes/types.pipes.mjs +0 -74
  965. package/esm2022/src/app/shared/pipes/url.pipes.mjs +0 -35
  966. package/esm2022/src/app/shared/platforms.mjs +0 -81
  967. package/esm2022/src/app/shared/print/print.service.mjs +0 -305
  968. package/esm2022/src/app/shared/regexps.mjs +0 -96
  969. package/esm2022/src/app/shared/rx-state/rx-state.decorators.mjs +0 -217
  970. package/esm2022/src/app/shared/rx-state/rx-state.module.mjs +0 -19
  971. package/esm2022/src/app/shared/rx-state/rx-state.types.mjs +0 -2
  972. package/esm2022/src/app/shared/services/entity-service.class.mjs +0 -10
  973. package/esm2022/src/app/shared/services/job.utils.mjs +0 -92
  974. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +0 -353
  975. package/esm2022/src/app/shared/services/progress-bar.service.mjs +0 -31
  976. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +0 -118
  977. package/esm2022/src/app/shared/services/startable-service.class.mjs +0 -107
  978. package/esm2022/src/app/shared/services/translate-context.service.mjs +0 -107
  979. package/esm2022/src/app/shared/services/validator-service.class.mjs +0 -2
  980. package/esm2022/src/app/shared/services.mjs +0 -85
  981. package/esm2022/src/app/shared/shared-routing.module.mjs +0 -72
  982. package/esm2022/src/app/shared/shared.module.mjs +0 -229
  983. package/esm2022/src/app/shared/shared.testing.module.mjs +0 -108
  984. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +0 -279
  985. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +0 -42
  986. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +0 -27
  987. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +0 -25
  988. package/esm2022/src/app/shared/storage/storage.service.mjs +0 -134
  989. package/esm2022/src/app/shared/storage/storage.utils.mjs +0 -13
  990. package/esm2022/src/app/shared/testing/maskito.test.mjs +0 -41
  991. package/esm2022/src/app/shared/testing/observable.test.mjs +0 -94
  992. package/esm2022/src/app/shared/testing/tests.page.mjs +0 -37
  993. package/esm2022/src/app/shared/toast/toast.testing.mjs +0 -54
  994. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +0 -31
  995. package/esm2022/src/app/shared/toast/toasts.mjs +0 -134
  996. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +0 -62
  997. package/esm2022/src/app/shared/toolbar/toolbar.mjs +0 -267
  998. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +0 -26
  999. package/esm2022/src/app/shared/types.mjs +0 -2
  1000. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +0 -59
  1001. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +0 -30
  1002. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +0 -109
  1003. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +0 -216
  1004. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +0 -26
  1005. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +0 -115
  1006. package/esm2022/src/app/shared/validator/validators.mjs +0 -621
  1007. package/esm2022/src/app/shared/version/versions.mjs +0 -81
  1008. package/esm2022/src/app/social/config/social.config.mjs +0 -9
  1009. package/esm2022/src/app/social/job/job.module.mjs +0 -23
  1010. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +0 -35
  1011. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +0 -235
  1012. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +0 -47
  1013. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +0 -29
  1014. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +0 -91
  1015. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +0 -38
  1016. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +0 -34
  1017. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +0 -22
  1018. package/esm2022/src/app/social/message/message.form.mjs +0 -141
  1019. package/esm2022/src/app/social/message/message.modal.mjs +0 -110
  1020. package/esm2022/src/app/social/message/message.model.mjs +0 -75
  1021. package/esm2022/src/app/social/message/message.module.mjs +0 -22
  1022. package/esm2022/src/app/social/message/message.service.mjs +0 -110
  1023. package/esm2022/src/app/social/social.errors.mjs +0 -10
  1024. package/esm2022/src/app/social/social.module.mjs +0 -22
  1025. package/esm2022/src/app/social/social.testing.module.mjs +0 -40
  1026. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +0 -187
  1027. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +0 -277
  1028. package/esm2022/src/app/social/user-event/notification/user-event-notification.modal.mjs +0 -81
  1029. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +0 -273
  1030. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +0 -129
  1031. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +0 -22
  1032. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +0 -128
  1033. package/esm2022/src/app/social/user-event/user-event.model.mjs +0 -2
  1034. package/esm2022/src/app/social/user-event/user-event.module.mjs +0 -24
  1035. package/esm2022/src/app/social/user-event/user-event.service.mjs +0 -512
  1036. package/esm2022/src/environments/environment.class.mjs +0 -65
  1037. package/esm2022/src/environments/environment.loader.mjs +0 -77
  1038. package/esm2022/src/environments/environment.mjs +0 -109
  1039. package/esm2022/sumaris-net.ngx-components.mjs +0 -5
  1040. package/fesm2022/sumaris-net.ngx-components.mjs +0 -49091
  1041. package/fesm2022/sumaris-net.ngx-components.mjs.map +0 -1
  1042. package/index.d.ts +0 -5
  1043. package/public_api.d.ts +0 -346
  1044. package/src/app/admin/admin-routing.module.d.ts +0 -9
  1045. package/src/app/admin/admin.module.d.ts +0 -10
  1046. package/src/app/admin/services/filter/person.filter.d.ts +0 -22
  1047. package/src/app/admin/services/person.service.d.ts +0 -37
  1048. package/src/app/admin/services/validator/person.validator.d.ts +0 -23
  1049. package/src/app/admin/users/users.d.ts +0 -61
  1050. package/src/app/admin/users/users.module.d.ts +0 -14
  1051. package/src/app/core/about/about.modal.d.ts +0 -32
  1052. package/src/app/core/about/about.module.d.ts +0 -11
  1053. package/src/app/core/account/account.module.d.ts +0 -18
  1054. package/src/app/core/account/account.page.d.ts +0 -83
  1055. package/src/app/core/account/new-token.form.d.ts +0 -29
  1056. package/src/app/core/account/new-token.modal.d.ts +0 -29
  1057. package/src/app/core/account/password/change-password.form.d.ts +0 -19
  1058. package/src/app/core/account/password/change-password.module.d.ts +0 -11
  1059. package/src/app/core/account/password/change-password.page.d.ts +0 -36
  1060. package/src/app/core/account/token.table.d.ts +0 -27
  1061. package/src/app/core/auth/auth.form.d.ts +0 -38
  1062. package/src/app/core/auth/auth.modal.d.ts +0 -24
  1063. package/src/app/core/auth/auth.module.d.ts +0 -13
  1064. package/src/app/core/auth/reset-password.modal.d.ts +0 -29
  1065. package/src/app/core/core.module.d.ts +0 -28
  1066. package/src/app/core/core.testing.module.d.ts +0 -15
  1067. package/src/app/core/form/array/form-array.d.ts +0 -137
  1068. package/src/app/core/form/array/testing/form-array-test.module.d.ts +0 -12
  1069. package/src/app/core/form/array/testing/form-array.test.d.ts +0 -26
  1070. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +0 -37
  1071. package/src/app/core/form/buttons/form-buttons-bar.module.d.ts +0 -9
  1072. package/src/app/core/form/entity/editor.class.d.ts +0 -84
  1073. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +0 -126
  1074. package/src/app/core/form/entity/entity-editor.class.d.ts +0 -204
  1075. package/src/app/core/form/entity/entity-metadata.component.d.ts +0 -13
  1076. package/src/app/core/form/entity/entity.module.d.ts +0 -10
  1077. package/src/app/core/form/entity/tab-editor.class.d.ts +0 -66
  1078. package/src/app/core/form/form-container.class.d.ts +0 -127
  1079. package/src/app/core/form/form.class.d.ts +0 -144
  1080. package/src/app/core/form/form.module.d.ts +0 -14
  1081. package/src/app/core/form/form.utils.d.ts +0 -287
  1082. package/src/app/core/form/list/list.form.d.ts +0 -81
  1083. package/src/app/core/form/list/list.module.d.ts +0 -9
  1084. package/src/app/core/form/properties/properties.form.d.ts +0 -92
  1085. package/src/app/core/form/properties/properties.module.d.ts +0 -11
  1086. package/src/app/core/form/properties/properties.table.d.ts +0 -72
  1087. package/src/app/core/form/properties/properties.utils.d.ts +0 -59
  1088. package/src/app/core/form/properties/property.validator.d.ts +0 -27
  1089. package/src/app/core/form/properties/testing/properties-form.test.d.ts +0 -22
  1090. package/src/app/core/form/properties/testing/properties-form.testing.module.d.ts +0 -12
  1091. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +0 -16
  1092. package/src/app/core/form/text-popover/testing/text-popover.testing.module.d.ts +0 -11
  1093. package/src/app/core/form/text-popover/text-popover.component.d.ts +0 -80
  1094. package/src/app/core/form/text-popover/text-popover.module.d.ts +0 -9
  1095. package/src/app/core/form/username/username.form.d.ts +0 -19
  1096. package/src/app/core/form/username/username.module.d.ts +0 -9
  1097. package/src/app/core/graphql/graphql.module.d.ts +0 -7
  1098. package/src/app/core/graphql/graphql.service.d.ts +0 -142
  1099. package/src/app/core/graphql/graphql.utils.d.ts +0 -47
  1100. package/src/app/core/home/home.d.ts +0 -117
  1101. package/src/app/core/home/home.module.d.ts +0 -15
  1102. package/src/app/core/icon/icon.component.d.ts +0 -13
  1103. package/src/app/core/icon/icon.module.d.ts +0 -9
  1104. package/src/app/core/install/install-upgrade-card.component.d.ts +0 -63
  1105. package/src/app/core/install/install-upgrade-card.module.d.ts +0 -9
  1106. package/src/app/core/menu/menu.component.d.ts +0 -66
  1107. package/src/app/core/menu/menu.model.d.ts +0 -144
  1108. package/src/app/core/menu/menu.module.d.ts +0 -12
  1109. package/src/app/core/menu/menu.service.d.ts +0 -93
  1110. package/src/app/core/menu/sub-menu-tab.directive.d.ts +0 -29
  1111. package/src/app/core/menu/testing/menu-other.testing.d.ts +0 -15
  1112. package/src/app/core/menu/testing/menu.testing.d.ts +0 -51
  1113. package/src/app/core/menu/testing/menu.testing.module.d.ts +0 -12
  1114. package/src/app/core/offline/update-offline-mode-card.component.d.ts +0 -11
  1115. package/src/app/core/offline/update-offline-mode-card.module.d.ts +0 -9
  1116. package/src/app/core/peer/select-peer.modal.d.ts +0 -101
  1117. package/src/app/core/peer/select-peer.module.d.ts +0 -12
  1118. package/src/app/core/register/register-confirm.page.d.ts +0 -24
  1119. package/src/app/core/register/register.form.d.ts +0 -49
  1120. package/src/app/core/register/register.modal.d.ts +0 -14
  1121. package/src/app/core/register/register.module.d.ts +0 -12
  1122. package/src/app/core/services/account.service.d.ts +0 -207
  1123. package/src/app/core/services/auth-guard.service.d.ts +0 -17
  1124. package/src/app/core/services/base-entity-service.class.d.ts +0 -135
  1125. package/src/app/core/services/base-graphql-service.class.d.ts +0 -77
  1126. package/src/app/core/services/base58.d.ts +0 -7
  1127. package/src/app/core/services/config/core.config.d.ts +0 -46
  1128. package/src/app/core/services/config.service.d.ts +0 -63
  1129. package/src/app/core/services/crypto.service.d.ts +0 -44
  1130. package/src/app/core/services/errors.d.ts +0 -65
  1131. package/src/app/core/services/local-settings.service.d.ts +0 -99
  1132. package/src/app/core/services/model/account.model.d.ts +0 -56
  1133. package/src/app/core/services/model/config.model.d.ts +0 -36
  1134. package/src/app/core/services/model/department.model.d.ts +0 -11
  1135. package/src/app/core/services/model/entity.decorators.d.ts +0 -17
  1136. package/src/app/core/services/model/entity.model.d.ts +0 -133
  1137. package/src/app/core/services/model/filter.model.d.ts +0 -37
  1138. package/src/app/core/services/model/history.model.d.ts +0 -20
  1139. package/src/app/core/services/model/model.enum.d.ts +0 -7
  1140. package/src/app/core/services/model/node-feature.model.d.ts +0 -14
  1141. package/src/app/core/services/model/peer.model.d.ts +0 -35
  1142. package/src/app/core/services/model/person.model.d.ts +0 -37
  1143. package/src/app/core/services/model/referential.model.d.ts +0 -84
  1144. package/src/app/core/services/model/settings.model.d.ts +0 -29
  1145. package/src/app/core/services/model/token.model.d.ts +0 -22
  1146. package/src/app/core/services/model/tree-item-entity.model.d.ts +0 -61
  1147. package/src/app/core/services/network.service.d.ts +0 -159
  1148. package/src/app/core/services/network.types.d.ts +0 -4
  1149. package/src/app/core/services/network.utils.d.ts +0 -38
  1150. package/src/app/core/services/pipes/account.pipes.d.ts +0 -15
  1151. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +0 -9
  1152. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +0 -11
  1153. package/src/app/core/services/pipes/pipes.module.d.ts +0 -11
  1154. package/src/app/core/services/pipes/referential-to-string.pipe.d.ts +0 -13
  1155. package/src/app/core/services/pipes/usage-mode.pipes.d.ts +0 -15
  1156. package/src/app/core/services/platform.service.d.ts +0 -110
  1157. package/src/app/core/services/storage/entities-storage.service.d.ts +0 -108
  1158. package/src/app/core/services/storage/entity-store.class.d.ts +0 -113
  1159. package/src/app/core/services/testing/referential-filter.model.d.ts +0 -9
  1160. package/src/app/core/services/testing/referential.validator.d.ts +0 -22
  1161. package/src/app/core/services/validator/account.validator.d.ts +0 -24
  1162. package/src/app/core/services/validator/base.validator.class.d.ts +0 -21
  1163. package/src/app/core/services/validator/local-settings.validator.d.ts +0 -18
  1164. package/src/app/core/services/validator/user-settings.validator.d.ts +0 -10
  1165. package/src/app/core/services/validator/user-token.validator.d.ts +0 -13
  1166. package/src/app/core/settings/settings.module.d.ts +0 -12
  1167. package/src/app/core/settings/settings.page.d.ts +0 -88
  1168. package/src/app/core/table/async-table.class.d.ts +0 -395
  1169. package/src/app/core/table/column/actions-column.component.d.ts +0 -62
  1170. package/src/app/core/table/column/nav-actions-column.component.d.ts +0 -46
  1171. package/src/app/core/table/column/row-field.component.d.ts +0 -40
  1172. package/src/app/core/table/entities-async-table-datasource.class.d.ts +0 -103
  1173. package/src/app/core/table/entities-table-datasource.class.d.ts +0 -102
  1174. package/src/app/core/table/memory-table.class.d.ts +0 -25
  1175. package/src/app/core/table/table-select-columns.component.d.ts +0 -22
  1176. package/src/app/core/table/table.class.d.ts +0 -400
  1177. package/src/app/core/table/table.model.d.ts +0 -31
  1178. package/src/app/core/table/table.module.d.ts +0 -14
  1179. package/src/app/core/table/table.pipes.d.ts +0 -29
  1180. package/src/app/core/table/table.utils.d.ts +0 -13
  1181. package/src/app/core/table/testing/table-validator.service.d.ts +0 -17
  1182. package/src/app/core/table/testing/table.testing.d.ts +0 -54
  1183. package/src/app/core/table/testing/table.testing.module.d.ts +0 -14
  1184. package/src/app/core/table/testing/table2-validator.service.d.ts +0 -15
  1185. package/src/app/core/table/testing/table2.testing.d.ts +0 -48
  1186. package/src/app/shared/alerts.d.ts +0 -55
  1187. package/src/app/shared/audio/audio.d.ts +0 -45
  1188. package/src/app/shared/audio/audio.testing.d.ts +0 -13
  1189. package/src/app/shared/audio/audio.testing.module.d.ts +0 -11
  1190. package/src/app/shared/capacitor/keyboard.d.ts +0 -16
  1191. package/src/app/shared/capacitor/plugins.d.ts +0 -7
  1192. package/src/app/shared/constants.d.ts +0 -13
  1193. package/src/app/shared/dates.d.ts +0 -61
  1194. package/src/app/shared/debug/debug-service.class.d.ts +0 -5
  1195. package/src/app/shared/debug/debug.component.d.ts +0 -14
  1196. package/src/app/shared/debug/debug.module.d.ts +0 -12
  1197. package/src/app/shared/directives/autofocus.directive.d.ts +0 -18
  1198. package/src/app/shared/directives/autoresize.directive.d.ts +0 -20
  1199. package/src/app/shared/directives/autotitle.directive.d.ts +0 -11
  1200. package/src/app/shared/directives/directives.module.d.ts +0 -14
  1201. package/src/app/shared/directives/drag-and-drop.directive.d.ts +0 -17
  1202. package/src/app/shared/directives/ng-var.directive.d.ts +0 -12
  1203. package/src/app/shared/directives/resizable/resizable.component.d.ts +0 -21
  1204. package/src/app/shared/directives/resizable/resizable.directive.d.ts +0 -12
  1205. package/src/app/shared/directives/resizable/resizable.module.d.ts +0 -8
  1206. package/src/app/shared/directives/throttled-click.directive.d.ts +0 -16
  1207. package/src/app/shared/events.d.ts +0 -29
  1208. package/src/app/shared/file/csv.utils.d.ts +0 -30
  1209. package/src/app/shared/file/file.service.d.ts +0 -23
  1210. package/src/app/shared/file/file.utils.d.ts +0 -20
  1211. package/src/app/shared/file/images.utils.d.ts +0 -36
  1212. package/src/app/shared/file/json.utils.d.ts +0 -19
  1213. package/src/app/shared/file/uri.utils.d.ts +0 -8
  1214. package/src/app/shared/file/url.utils.d.ts +0 -99
  1215. package/src/app/shared/focusable.d.ts +0 -4
  1216. package/src/app/shared/form/field.component.d.ts +0 -85
  1217. package/src/app/shared/form/field.model.d.ts +0 -82
  1218. package/src/app/shared/form/loading-spinner.d.ts +0 -8
  1219. package/src/app/shared/forms.d.ts +0 -162
  1220. package/src/app/shared/functions.d.ts +0 -206
  1221. package/src/app/shared/geolocation/geolocation.utils.d.ts +0 -19
  1222. package/src/app/shared/gesture/gesture-config.d.ts +0 -15
  1223. package/src/app/shared/gesture/hammer.utils.d.ts +0 -16
  1224. package/src/app/shared/graph/colors.utils.d.ts +0 -17
  1225. package/src/app/shared/graph/graph-colors.d.ts +0 -63
  1226. package/src/app/shared/guard/component-dirty.guard.d.ts +0 -14
  1227. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +0 -8
  1228. package/src/app/shared/hotkeys/hotkeys.service.d.ts +0 -48
  1229. package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +0 -11
  1230. package/src/app/shared/http/http.utils.d.ts +0 -28
  1231. package/src/app/shared/image/gallery/image-gallery.component.d.ts +0 -137
  1232. package/src/app/shared/image/gallery/image-gallery.module.d.ts +0 -15
  1233. package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +0 -12
  1234. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +0 -33
  1235. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +0 -16
  1236. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +0 -13
  1237. package/src/app/shared/image/image.model.d.ts +0 -7
  1238. package/src/app/shared/image/image.module.d.ts +0 -8
  1239. package/src/app/shared/image/image.service.d.ts +0 -36
  1240. package/src/app/shared/inputs.d.ts +0 -36
  1241. package/src/app/shared/interceptors/progess.interceptor.d.ts +0 -8
  1242. package/src/app/shared/logging/log-level.model.d.ts +0 -38
  1243. package/src/app/shared/logging/logger.model.d.ts +0 -68
  1244. package/src/app/shared/logging/logging-service.class.d.ts +0 -39
  1245. package/src/app/shared/logging/logging-service.config.d.ts +0 -25
  1246. package/src/app/shared/logging/logging-service.module.d.ts +0 -9
  1247. package/src/app/shared/markdown/markdown.component.d.ts +0 -86
  1248. package/src/app/shared/markdown/markdown.directive.d.ts +0 -13
  1249. package/src/app/shared/markdown/markdown.modal.d.ts +0 -49
  1250. package/src/app/shared/markdown/markdown.module.d.ts +0 -17
  1251. package/src/app/shared/markdown/markdown.service.d.ts +0 -37
  1252. package/src/app/shared/markdown/markdown.utils.d.ts +0 -26
  1253. package/src/app/shared/markdown/testing/markdown.test.d.ts +0 -18
  1254. package/src/app/shared/markdown/testing/markdown.testing.module.d.ts +0 -12
  1255. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +0 -74
  1256. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +0 -211
  1257. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +0 -22
  1258. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +0 -5
  1259. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +0 -48
  1260. package/src/app/shared/material/badge/badge.directive.d.ts +0 -43
  1261. package/src/app/shared/material/badge/badge.module.d.ts +0 -10
  1262. package/src/app/shared/material/badge/badge.test.d.ts +0 -21
  1263. package/src/app/shared/material/boolean/boolean.module.d.ts +0 -20
  1264. package/src/app/shared/material/boolean/material.boolean.d.ts +0 -93
  1265. package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +0 -26
  1266. package/src/app/shared/material/chips/chips.module.d.ts +0 -21
  1267. package/src/app/shared/material/chips/material.chips.d.ts +0 -164
  1268. package/src/app/shared/material/chips/testing/chips.test.d.ts +0 -32
  1269. package/src/app/shared/material/datetime/datetime.module.d.ts +0 -24
  1270. package/src/app/shared/material/datetime/material.date.d.ts +0 -90
  1271. package/src/app/shared/material/datetime/material.dateshort.d.ts +0 -89
  1272. package/src/app/shared/material/datetime/material.datetime.d.ts +0 -116
  1273. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +0 -37
  1274. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +0 -32
  1275. package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +0 -31
  1276. package/src/app/shared/material/duration/duration.module.d.ts +0 -18
  1277. package/src/app/shared/material/duration/duration.utils.d.ts +0 -2
  1278. package/src/app/shared/material/duration/material.duration.d.ts +0 -64
  1279. package/src/app/shared/material/duration/testing/mat-duration.test.d.ts +0 -23
  1280. package/src/app/shared/material/latlong/latlong.utils.d.ts +0 -59
  1281. package/src/app/shared/material/latlong/material.latlong-input.d.ts +0 -85
  1282. package/src/app/shared/material/latlong/material.latlong.d.ts +0 -90
  1283. package/src/app/shared/material/latlong/material.latlong.module.d.ts +0 -21
  1284. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +0 -28
  1285. package/src/app/shared/material/material.animations.d.ts +0 -8
  1286. package/src/app/shared/material/material.config.d.ts +0 -3
  1287. package/src/app/shared/material/material.module.d.ts +0 -45
  1288. package/src/app/shared/material/material.testing.module.d.ts +0 -32
  1289. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +0 -12
  1290. package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +0 -10
  1291. package/src/app/shared/material/swipe/material.swipe.d.ts +0 -89
  1292. package/src/app/shared/material/swipe/swipe.module.d.ts +0 -16
  1293. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +0 -22
  1294. package/src/app/shared/material/test/test-component.d.ts +0 -75
  1295. package/src/app/shared/material/testing/common.test.d.ts +0 -25
  1296. package/src/app/shared/material/text/testing/text-form.testing.d.ts +0 -19
  1297. package/src/app/shared/material/text/text-form.component.d.ts +0 -66
  1298. package/src/app/shared/material/text/text-form.module.d.ts +0 -16
  1299. package/src/app/shared/modules.d.ts +0 -9
  1300. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +0 -62
  1301. package/src/app/shared/named-filter/named-filter.model.d.ts +0 -32
  1302. package/src/app/shared/named-filter/named-filter.module.d.ts +0 -13
  1303. package/src/app/shared/named-filter/named-filter.service.d.ts +0 -32
  1304. package/src/app/shared/named-filter/testing/named-filter-selector.testing.d.ts +0 -34
  1305. package/src/app/shared/named-filter/testing/named-filter.testing.module.d.ts +0 -10
  1306. package/src/app/shared/observables.d.ts +0 -30
  1307. package/src/app/shared/pipes/arrays.pipe.d.ts +0 -82
  1308. package/src/app/shared/pipes/badge.pipes.d.ts +0 -7
  1309. package/src/app/shared/pipes/colors.pipe.d.ts +0 -9
  1310. package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +0 -25
  1311. package/src/app/shared/pipes/date-format.pipe.d.ts +0 -35
  1312. package/src/app/shared/pipes/date-from-now.pipe.d.ts +0 -12
  1313. package/src/app/shared/pipes/dates.pipe.d.ts +0 -10
  1314. package/src/app/shared/pipes/display-with.pipe.d.ts +0 -8
  1315. package/src/app/shared/pipes/duration.pipe.d.ts +0 -23
  1316. package/src/app/shared/pipes/file-size.pipe.d.ts +0 -30
  1317. package/src/app/shared/pipes/form.pipes.d.ts +0 -69
  1318. package/src/app/shared/pipes/highlight.pipe.d.ts +0 -11
  1319. package/src/app/shared/pipes/html.pipes.d.ts +0 -22
  1320. package/src/app/shared/pipes/latlong-format.pipe.d.ts +0 -20
  1321. package/src/app/shared/pipes/maps.pipe.d.ts +0 -23
  1322. package/src/app/shared/pipes/maskito.pipe.d.ts +0 -14
  1323. package/src/app/shared/pipes/math.pipes.d.ts +0 -26
  1324. package/src/app/shared/pipes/ng-init.pipe.d.ts +0 -8
  1325. package/src/app/shared/pipes/number-format.pipe.d.ts +0 -9
  1326. package/src/app/shared/pipes/observable.pipes.d.ts +0 -25
  1327. package/src/app/shared/pipes/pipes.module.d.ts +0 -35
  1328. package/src/app/shared/pipes/property.pipes.d.ts +0 -41
  1329. package/src/app/shared/pipes/selection.pipes.d.ts +0 -62
  1330. package/src/app/shared/pipes/string.pipes.d.ts +0 -68
  1331. package/src/app/shared/pipes/translate-context.pipe.d.ts +0 -17
  1332. package/src/app/shared/pipes/types.pipes.d.ts +0 -30
  1333. package/src/app/shared/pipes/url.pipes.d.ts +0 -27
  1334. package/src/app/shared/platforms.d.ts +0 -16
  1335. package/src/app/shared/print/print.service.d.ts +0 -94
  1336. package/src/app/shared/regexps.d.ts +0 -32
  1337. package/src/app/shared/rx-state/rx-state.decorators.d.ts +0 -43
  1338. package/src/app/shared/rx-state/rx-state.module.d.ts +0 -10
  1339. package/src/app/shared/rx-state/rx-state.types.d.ts +0 -4
  1340. package/src/app/shared/services/entity-service.class.d.ts +0 -75
  1341. package/src/app/shared/services/job.utils.d.ts +0 -20
  1342. package/src/app/shared/services/memory-entity-service.class.d.ts +0 -79
  1343. package/src/app/shared/services/progress-bar.service.d.ts +0 -20
  1344. package/src/app/shared/services/startable-observable-service.class.d.ts +0 -36
  1345. package/src/app/shared/services/startable-service.class.d.ts +0 -37
  1346. package/src/app/shared/services/translate-context.service.d.ts +0 -29
  1347. package/src/app/shared/services/validator-service.class.d.ts +0 -11
  1348. package/src/app/shared/services.d.ts +0 -17
  1349. package/src/app/shared/shared-routing.module.d.ts +0 -23
  1350. package/src/app/shared/shared.module.d.ts +0 -33
  1351. package/src/app/shared/shared.testing.module.d.ts +0 -20
  1352. package/src/app/shared/storage/storage-explorer.component.d.ts +0 -59
  1353. package/src/app/shared/storage/storage-explorer.module.d.ts +0 -13
  1354. package/src/app/shared/storage/storage-explorer.testing-routing.module.d.ts +0 -9
  1355. package/src/app/shared/storage/storage-explorer.testing.module.d.ts +0 -10
  1356. package/src/app/shared/storage/storage.service.d.ts +0 -22
  1357. package/src/app/shared/storage/storage.utils.d.ts +0 -19
  1358. package/src/app/shared/testing/maskito.test.d.ts +0 -10
  1359. package/src/app/shared/testing/observable.test.d.ts +0 -25
  1360. package/src/app/shared/testing/tests.page.d.ts +0 -20
  1361. package/src/app/shared/toast/toast.testing.d.ts +0 -15
  1362. package/src/app/shared/toast/toast.testing.module.d.ts +0 -12
  1363. package/src/app/shared/toast/toasts.d.ts +0 -16
  1364. package/src/app/shared/toolbar/modal-toolbar.d.ts +0 -21
  1365. package/src/app/shared/toolbar/toolbar.d.ts +0 -70
  1366. package/src/app/shared/toolbar/toolbar.module.d.ts +0 -16
  1367. package/src/app/shared/types.d.ts +0 -36
  1368. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +0 -21
  1369. package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +0 -11
  1370. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +0 -41
  1371. package/src/app/shared/upload-file/upload-file.component.d.ts +0 -50
  1372. package/src/app/shared/upload-file/upload-file.model.d.ts +0 -30
  1373. package/src/app/shared/validator/form-error-adapter.class.d.ts +0 -33
  1374. package/src/app/shared/validator/validators.d.ts +0 -139
  1375. package/src/app/shared/version/versions.d.ts +0 -26
  1376. package/src/app/social/config/social.config.d.ts +0 -4
  1377. package/src/app/social/job/job.module.d.ts +0 -12
  1378. package/src/app/social/job/progression/job-progression.component.d.ts +0 -23
  1379. package/src/app/social/job/progression/job-progression.icon.d.ts +0 -62
  1380. package/src/app/social/job/progression/job-progression.list.d.ts +0 -19
  1381. package/src/app/social/job/progression/job-progression.model.d.ts +0 -10
  1382. package/src/app/social/job/progression/job-progression.service.d.ts +0 -33
  1383. package/src/app/social/job/testing/job-progression.testing.d.ts +0 -13
  1384. package/src/app/social/job/testing/job-progression.testing.service.d.ts +0 -9
  1385. package/src/app/social/job/testing/job.testing.module.d.ts +0 -11
  1386. package/src/app/social/message/message.form.d.ts +0 -36
  1387. package/src/app/social/message/message.modal.d.ts +0 -43
  1388. package/src/app/social/message/message.model.d.ts +0 -33
  1389. package/src/app/social/message/message.module.d.ts +0 -12
  1390. package/src/app/social/message/message.service.d.ts +0 -32
  1391. package/src/app/social/social.errors.d.ts +0 -9
  1392. package/src/app/social/social.module.d.ts +0 -20
  1393. package/src/app/social/social.testing.module.d.ts +0 -13
  1394. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +0 -46
  1395. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +0 -75
  1396. package/src/app/social/user-event/notification/user-event-notification.modal.d.ts +0 -36
  1397. package/src/app/social/user-event/testing/user-event.testing.d.ts +0 -44
  1398. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +0 -42
  1399. package/src/app/social/user-event/testing/user-event.testing.module.d.ts +0 -11
  1400. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +0 -42
  1401. package/src/app/social/user-event/user-event.model.d.ts +0 -44
  1402. package/src/app/social/user-event/user-event.module.d.ts +0 -14
  1403. package/src/app/social/user-event/user-event.service.d.ts +0 -124
  1404. package/src/environments/environment.class.d.ts +0 -75
  1405. package/src/environments/environment.d.ts +0 -2
  1406. package/src/environments/environment.loader.d.ts +0 -24
@@ -0,0 +1,1375 @@
1
+ import {
2
+ AfterViewInit,
3
+ booleanAttribute,
4
+ ChangeDetectionStrategy,
5
+ ChangeDetectorRef,
6
+ Component,
7
+ ElementRef,
8
+ EventEmitter,
9
+ forwardRef,
10
+ Injector,
11
+ Input,
12
+ numberAttribute,
13
+ OnDestroy,
14
+ OnInit,
15
+ Optional,
16
+ Output,
17
+ Renderer2,
18
+ RendererStyleFlags2,
19
+ ViewChild,
20
+ } from '@angular/core';
21
+ import { ControlValueAccessor, FormGroupDirective, NG_VALUE_ACCESSOR, UntypedFormControl, Validators } from '@angular/forms';
22
+ import { BehaviorSubject, isObservable, merge, Observable, Subject, Subscription, timer } from 'rxjs';
23
+ import { debounceTime, distinctUntilChanged, filter, map, mergeMap, startWith, switchMap, takeUntil, tap, throttleTime } from 'rxjs/operators';
24
+ import { FetchMoreFn, LoadResult, SuggestFn } from '../../services/entity-service.class';
25
+ import {
26
+ changeCaseToUnderscore,
27
+ findParentWithClass,
28
+ isBlankString,
29
+ isNil,
30
+ isNilOrBlank,
31
+ isNotEmptyArray,
32
+ isNotNil,
33
+ isNotNilBoolean,
34
+ isNotNilObject,
35
+ isNotNilOrBlank,
36
+ isNotNilString,
37
+ propertiesPathComparator,
38
+ toNumber,
39
+ } from '../../functions';
40
+ import { focusInput, InputElement, selectInputContent, selectInputRange } from '../../inputs';
41
+ import { firstNotNilPromise } from '../../observables';
42
+ import { AppFloatLabelType, DisplayFn, EqualsFn } from '../../form/field.model';
43
+ import { MatFormFieldAppearance, SubscriptSizing } from '@angular/material/form-field';
44
+ import { MatSelect, MatSelectChange } from '@angular/material/select';
45
+ import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete';
46
+ import { fromScrollEndEvent } from '../../events';
47
+ import { IonSearchbar, ModalController } from '@ionic/angular';
48
+ import { isMobile } from '../../platforms';
49
+ import { suggestFromArray } from '../../services';
50
+ import { SearchbarChangeEventDetail } from '@ionic/core/dist/types/components/searchbar/searchbar-interface';
51
+ import { MatAutocompleteFieldUtils } from './material.autocomplete.utils';
52
+ import { MatAutocompleteFieldConfig } from './material.autocomplete.config';
53
+ import { DOCUMENT } from '@angular/common';
54
+
55
+ import { DEFAULT_JOIN_PROPERTIES_SEPARATOR } from '../../constants';
56
+ import { RegExpUtils } from '../../regexps';
57
+
58
+ const noop = () => {};
59
+ export interface MatAutocompleteFieldSelectChange {
60
+ source: MatSelect | MatAutocomplete;
61
+ value: any;
62
+ }
63
+
64
+ export interface MatAutocompleteFieldToggleFavorite {
65
+ source: MatSelect | MatAutocomplete;
66
+ value: any;
67
+ }
68
+
69
+ @Component({
70
+ // eslint-disable-next-line @angular-eslint/component-selector
71
+ selector: 'mat-autocomplete-field',
72
+ styleUrls: ['./material.autocomplete.scss'],
73
+ templateUrl: './material.autocomplete.html',
74
+ providers: [
75
+ {
76
+ provide: NG_VALUE_ACCESSOR,
77
+ multi: true,
78
+ useExisting: forwardRef(() => MatAutocompleteField),
79
+ },
80
+ ],
81
+ changeDetection: ChangeDetectionStrategy.OnPush,
82
+ })
83
+ export class MatAutocompleteField implements OnInit, AfterViewInit, OnDestroy, InputElement, ControlValueAccessor {
84
+ private _onChangeCallback: (_: any) => void = noop;
85
+ private _onTouchedCallback: () => void = noop;
86
+
87
+ private _onFetchMoreCallback: FetchMoreFn<LoadResult<any>>;
88
+ private _implicitValue: any;
89
+ private _subscription = new Subscription();
90
+ private _itemsSubscription: Subscription;
91
+ private _openedSubscription: Subscription;
92
+ private _$filter = new BehaviorSubject<any>(undefined);
93
+ private _itemCount: number;
94
+ private _suggestExecutionId: number = 0; // Identifier of the suggest job
95
+ private _reload$ = new Subject<any>();
96
+ private _destroy$ = new Subject<void>();
97
+
98
+ protected _readonly = false;
99
+ protected _tabindex: number;
100
+ protected _$inputItems = new BehaviorSubject<any[]>(undefined);
101
+ protected _$filteredItems = new BehaviorSubject<any[]>(undefined);
102
+ protected _selectedItem: any;
103
+ protected _displayValue = '';
104
+ protected _moreItemsCount: number;
105
+ protected _fetchMore$ = new EventEmitter<Event>();
106
+ protected _defaultPanelWidth: string = null;
107
+ protected _focused = false;
108
+
109
+ protected get searchText(): string | undefined {
110
+ return this.matInputText?.nativeElement.value ?? this.ionSearchbar?.value;
111
+ }
112
+
113
+ @Input() equals: EqualsFn;
114
+ @Input() logPrefix = '[mat-autocomplete]';
115
+ @Input() formControl: UntypedFormControl;
116
+ @Input() formControlName: string = null;
117
+ @Input() floatLabel: AppFloatLabelType = 'auto';
118
+ @Input() label: string = null;
119
+ @Input() appearance: MatFormFieldAppearance;
120
+ @Input() subscriptSizing: SubscriptSizing;
121
+ @Input() placeholder: string;
122
+ @Input() suggestFn: SuggestFn<any, any>;
123
+ @Input({ transform: booleanAttribute }) required = false;
124
+ @Input({ transform: booleanAttribute }) hideRequiredMarker = false;
125
+ @Input({ transform: booleanAttribute }) mobile: boolean;
126
+ @Input({ transform: booleanAttribute }) clearable = false;
127
+ @Input({ transform: numberAttribute }) debounceTime: number = null;
128
+ @Input() displaySeparator: string | null;
129
+ @Input() displayWith: DisplayFn | null;
130
+ @Input() displayAttributes: string[];
131
+ @Input() displayColumnSizes: (number | 'auto' | undefined)[];
132
+ @Input() displayColumnNames: string[];
133
+ @Input({ transform: booleanAttribute }) highlightAccent: boolean;
134
+ @Input({ transform: booleanAttribute }) showAllOnFocus: boolean;
135
+ @Input({ transform: booleanAttribute }) showPanelOnFocus: boolean;
136
+ @Input({ transform: booleanAttribute }) reloadItemsOnFocus: boolean;
137
+ @Input({ transform: booleanAttribute }) clearInvalidValueOnBlur: boolean;
138
+ @Input({ transform: booleanAttribute }) autofocus = false;
139
+ @Input() config: MatAutocompleteFieldConfig;
140
+ @Input() i18nPrefix = 'REFERENTIAL.';
141
+ @Input() noResultMessage = 'COMMON.NO_RESULT';
142
+ @Input() panelClass: string;
143
+ @Input() panelWidth: string;
144
+ @Input({ transform: booleanAttribute }) disableRipple = false;
145
+ @Input() matAutocompletePosition: 'auto' | 'above' | 'below';
146
+ @Input({ transform: booleanAttribute }) multiple: boolean;
147
+ @Input() fetchMoreThreshold = '15%';
148
+ @Input({ transform: numberAttribute }) suggestLengthThreshold: number = null;
149
+ @Input({ transform: booleanAttribute }) showLoadingSpinner = true;
150
+ @Input({ transform: booleanAttribute }) debug = false;
151
+ @Input({ transform: booleanAttribute }) showSearchBar = true;
152
+ @Input({ transform: booleanAttribute }) stickySearchBar = false;
153
+ @Input() applyImplicitValue: boolean | ((value: any) => boolean);
154
+ @Input() dropButtonTitle: string;
155
+ @Input() clearButtonTitle: string;
156
+ @Input({ transform: booleanAttribute }) trimSearchText: boolean;
157
+ @Input({ transform: booleanAttribute }) splitSearchText: boolean;
158
+ @Input({ transform: booleanAttribute }) selectInputContentOnFocus: boolean;
159
+ @Input({ transform: numberAttribute }) selectInputContentOnFocusDelay: number;
160
+ @Input({ transform: booleanAttribute }) previewImplicitValue: boolean;
161
+ @Input() showFavorites = true;
162
+ @Input() toggleFavoriteTitle = 'COMMON.BTN_ADD_TO_FAVORITES';
163
+ @Input() favoriteItems: any[] = [];
164
+ @Input() colSizes: [number | 'auto', number | 'auto'] = [undefined, 'auto'];
165
+
166
+ /**
167
+ * @deprecated Use panelClass instead
168
+ */
169
+ @Input({ alias: 'class' }) set classList(value: string) {
170
+ this.panelClass = value;
171
+ }
172
+
173
+ get classList(): string {
174
+ return this.panelClass;
175
+ }
176
+
177
+ // eslint-disable-next-line @angular-eslint/no-output-native
178
+ @Output('click') clicked = new EventEmitter<MouseEvent>();
179
+ // eslint-disable-next-line @angular-eslint/no-output-native
180
+ @Output('blur') blurred = new EventEmitter<FocusEvent>();
181
+ // eslint-disable-next-line @angular-eslint/no-output-native
182
+ @Output('focus') focused = new EventEmitter<FocusEvent>();
183
+ @Output() dropButtonClick = new EventEmitter<Event>(true);
184
+ @Output('keydown.escape') keydownEscape = new EventEmitter<Event>();
185
+ @Output('keydown.backspace') keydownBackspace = new EventEmitter<Event>();
186
+ @Output('keyup.enter') keyupEnter = new EventEmitter<Event>();
187
+
188
+ @Output('selectionChange') selectionChange = new EventEmitter<MatAutocompleteFieldSelectChange>();
189
+ @Output('openedChange') openedChange = new EventEmitter<boolean>();
190
+ @Output('toggleFavorite') toggleFavorite = new EventEmitter<MatAutocompleteFieldToggleFavorite>();
191
+
192
+ @ViewChild('matSelect') matSelect: MatSelect;
193
+ @ViewChild('ionSearchbar') ionSearchbar: IonSearchbar;
194
+ @ViewChild('matInputText') matInputText: ElementRef<HTMLInputElement>;
195
+ @ViewChild(MatAutocomplete) autocomplete: MatAutocomplete;
196
+ @ViewChild(MatAutocompleteTrigger) autocompleteTrigger: MatAutocompleteTrigger;
197
+
198
+ constructor(
199
+ protected injector: Injector,
200
+ protected el: ElementRef<HTMLElement>,
201
+ protected cd: ChangeDetectorRef,
202
+ protected modalController: ModalController,
203
+ protected renderer: Renderer2,
204
+ @Optional() private formGroupDir: FormGroupDirective
205
+ ) {}
206
+
207
+ get itemCount(): number {
208
+ return this._itemCount;
209
+ }
210
+
211
+ get canFetchMore(): boolean {
212
+ return this._onFetchMoreCallback && this._moreItemsCount > 0;
213
+ }
214
+
215
+ @Input() set filter(value: any) {
216
+ if (value !== this._$filter.value) {
217
+ // DEBUG
218
+ //console.debug(this.logPrefix + " Setting filter:", value);
219
+ this._$filter.next(value);
220
+ }
221
+ }
222
+
223
+ get filter(): any {
224
+ return this._$filter.value;
225
+ }
226
+
227
+ @Input({ transform: booleanAttribute }) set readonly(value: boolean) {
228
+ this._readonly = value;
229
+ this.markForCheck();
230
+ }
231
+
232
+ get readonly(): boolean {
233
+ return this._readonly;
234
+ }
235
+
236
+ @Input() set tabindex(value: number) {
237
+ this._tabindex = value;
238
+ this.markForCheck();
239
+ }
240
+
241
+ get tabindex(): number {
242
+ return this._tabindex;
243
+ }
244
+
245
+ @Input() set items(value: Observable<any[]> | any[]) {
246
+ // Remove previous subscription on items (if exists)
247
+ if (this._itemsSubscription) {
248
+ console.warn(this.logPrefix + ' Items received twice!');
249
+ this._subscription.remove(this._itemsSubscription);
250
+ this._itemsSubscription.unsubscribe();
251
+ }
252
+
253
+ if (isObservable(value)) {
254
+ this._itemsSubscription = value.subscribe((v) => this._$inputItems.next(v));
255
+ this._subscription.add(this._itemsSubscription);
256
+ } else {
257
+ if (value !== this._$inputItems.value) {
258
+ this._$inputItems.next(value as any[]);
259
+ }
260
+ }
261
+ }
262
+
263
+ get items(): Observable<any[]> | any[] {
264
+ return this._$inputItems;
265
+ }
266
+
267
+ get value(): any {
268
+ return this.formControl.value;
269
+ }
270
+
271
+ get disabled(): boolean {
272
+ return this._readonly || this.formControl.disabled;
273
+ }
274
+
275
+ get enabled(): boolean {
276
+ return !this._readonly && this.formControl.enabled;
277
+ }
278
+
279
+ get loading(): boolean {
280
+ return isNil(this._$filteredItems.value);
281
+ }
282
+
283
+ ngOnInit() {
284
+ this.formControl =
285
+ this.formControl ?? (this.formControlName && this.formGroupDir && (this.formGroupDir.form.get(this.formControlName) as UntypedFormControl));
286
+ if (!this.formControl) throw new Error("Missing mandatory attribute 'formControl' or 'formControlName' in <mat-autocomplete-field>.");
287
+
288
+ // Configuration from config object
289
+ if (this.config) {
290
+ this.suggestFn = this.suggestFn ?? this.config.suggestFn;
291
+ if (!this.suggestFn && this.config.items) {
292
+ this.items = this.config.items;
293
+ }
294
+ this.filter = this.filter ?? this.config.filter;
295
+ this.displayAttributes = this.displayAttributes ?? this.config.attributes;
296
+ this.displayColumnSizes = this.displayColumnSizes ?? this.config.columnSizes;
297
+ this.displayColumnNames = this.displayColumnNames ?? this.config.columnNames;
298
+ this.displaySeparator = this.displaySeparator ?? this.config.displayWithSeparator;
299
+ this.displayWith = this.displayWith ?? this.config.displayWith;
300
+ this.splitSearchText = this.splitSearchText ?? this.config.splitSearchText;
301
+ this.trimSearchText = this.trimSearchText ?? this.config.trimSearchText;
302
+ this.equals = this.equals ?? this.config.equals;
303
+ this.multiple = this.multiple ?? this.config.multiple;
304
+ this.mobile = this.mobile ?? this.config.mobile;
305
+ this.suggestLengthThreshold = this.suggestLengthThreshold ?? this.config.suggestLengthThreshold;
306
+ this.showAllOnFocus = this.showAllOnFocus ?? this.config.showAllOnFocus;
307
+ this.showPanelOnFocus = this.showPanelOnFocus ?? this.config.showPanelOnFocus;
308
+ this.reloadItemsOnFocus = this.reloadItemsOnFocus ?? this.config.reloadItemsOnFocus;
309
+ this.panelClass = this.panelClass ?? this.config.panelClass ?? this.config.class;
310
+ this.panelWidth = this.panelWidth ?? this.config.panelWidth;
311
+ this.debounceTime = this.debounceTime ?? this.config.debounceTime;
312
+ this.highlightAccent = this.highlightAccent ?? this.config.highlightAccent;
313
+ this.applyImplicitValue = this.applyImplicitValue ?? this.config.applyImplicitValue;
314
+ this.selectInputContentOnFocus = this.selectInputContentOnFocus ?? this.config.selectInputContentOnFocus;
315
+ this.selectInputContentOnFocusDelay = this.selectInputContentOnFocusDelay ?? this.config.selectInputContentOnFocusDelay;
316
+ this.clearInvalidValueOnBlur = this.clearInvalidValueOnBlur ?? this.config.clearInvalidValueOnBlur;
317
+ this.previewImplicitValue = this.previewImplicitValue ?? this.config.previewImplicitValue;
318
+ }
319
+
320
+ // Default values
321
+ this.required = isNotNilBoolean(this.required)
322
+ ? this.required
323
+ : this.formControl.validator === Validators.required || isBlankString(this.required);
324
+ this.multiple = this.multiple ?? false;
325
+ this.mobile = this.mobile ?? isMobile(window);
326
+ this.displayAttributes = this.displayAttributes ?? this.filter?.attributes ?? ['label', 'name'];
327
+ this.displaySeparator = this.displaySeparator ?? DEFAULT_JOIN_PROPERTIES_SEPARATOR;
328
+ this.displayWith = this.displayWith || MatAutocompleteFieldUtils.createDisplayFn(this.displayAttributes, this.multiple, this.displaySeparator);
329
+ this.splitSearchText = this.splitSearchText ?? true;
330
+ this.trimSearchText = this.trimSearchText ?? !this.mobile; // True by default on desktop, but false in mobile (not need in the searchbar)
331
+ this.equals = this.equals || MatAutocompleteFieldUtils.defaultEquals;
332
+
333
+ this.displayColumnSizes =
334
+ this.displayColumnSizes ||
335
+ // if only column: auto size
336
+ (this.displayAttributes.length === 1 && [undefined]) ||
337
+ // Computed column size:
338
+ // - if label then col size = 2
339
+ // - if rankOrder then col size = 1
340
+ // - ese => auto size
341
+ this.displayAttributes.map((attr) => attr && (attr.endsWith('label') ? 3 : attr.endsWith('rankOrder') ? 2 : undefined));
342
+ this.displayColumnNames = this.displayAttributes.map(
343
+ (attr, index) => (this.displayColumnNames && this.displayColumnNames[index]) || this.i18nPrefix + changeCaseToUnderscore(attr).toUpperCase()
344
+ );
345
+
346
+ // No more need, because setting the panelWidth will force a width, instead of a min-width
347
+ /*const panelClasses = this.panelClass?.split(/\s+/);
348
+ this.panelWidth =
349
+ this.panelWidth ??
350
+ (panelClasses &&
351
+ ((panelClasses.includes('min-width-medium') && '300px') ||
352
+ (panelClasses.includes('min-width-large') && '400px') ||
353
+ (panelClasses.includes('min-width-xlarge') && '450px') ||
354
+ (panelClasses.includes('min-width-80vw') && '80vw') ||
355
+ ((panelClasses.includes('full-width') || panelClasses.includes('full-size')) && '100vw')));*/
356
+
357
+ this.suggestLengthThreshold = this.suggestLengthThreshold ?? 0;
358
+ this.showAllOnFocus = this.showAllOnFocus ?? (this.mobile && this.suggestLengthThreshold <= 0);
359
+ this.showPanelOnFocus = this.showPanelOnFocus ?? true;
360
+ this.reloadItemsOnFocus = this.reloadItemsOnFocus ?? false;
361
+ this.debounceTime = this.debounceTime ?? (this.mobile ? 650 : 250);
362
+ this.highlightAccent = this.highlightAccent ?? false;
363
+ this.matAutocompletePosition = this.matAutocompletePosition ?? 'auto';
364
+ this.applyImplicitValue = this.applyImplicitValue ?? !this.mobile;
365
+ this.selectInputContentOnFocus = this.selectInputContentOnFocus ?? false;
366
+ this.selectInputContentOnFocusDelay = this.selectInputContentOnFocusDelay ?? 0;
367
+ this.clearInvalidValueOnBlur = this.clearInvalidValueOnBlur ?? false;
368
+ this.previewImplicitValue = this.previewImplicitValue ?? false;
369
+
370
+ // No suggestFn: filter on the given items
371
+ if (!this.suggestFn) {
372
+ const suggestFromArrayFn: SuggestFn<any, any> = async (value, filter) =>
373
+ // DEBUG
374
+ //if (this.debug) console.debug(this.logPrefix + ' Calling suggestFromArray with value=', value);
375
+
376
+ suggestFromArray(this._$inputItems.value, value, {
377
+ searchAttributes: this.displayAttributes,
378
+ ...filter,
379
+ });
380
+
381
+ // Wait (once) that items are loaded, then call suggest from array fn
382
+ this.suggestFn = async (value, filter) => {
383
+ if (isNil(this._$inputItems.value)) {
384
+ // DEBUG
385
+ //if (this.debug) console.debug(this.logPrefix + " Waiting items to be set...");
386
+
387
+ await firstNotNilPromise(this._$inputItems, { stop: this._destroy$ });
388
+
389
+ // DEBUG
390
+ //if (this.debug) console.debug(this.logPrefix + " Received items:", this.inputItems$.value);
391
+ }
392
+ this.suggestFn = suggestFromArrayFn;
393
+ return this.suggestFn(value, filter); // Loop
394
+ };
395
+ }
396
+
397
+ // Send value to suggest when :
398
+ // - is nil and '*', and no min length threshold
399
+ // - is not nil and not a string type (e.g. object)
400
+ // - is not nil and is a string, and has enough character
401
+ const thresholdFilterFn = (value: any) =>
402
+ this.suggestLengthThreshold <= 0 ||
403
+ (isNotNil(value) && (!(typeof value === 'string') || (value !== '*' && value.trim().length >= this.suggestLengthThreshold)));
404
+
405
+ const filteredItemsChanges = merge(
406
+ // Reload event (no distinctUntilChanged() pipe, to force reload even if same value)
407
+ this._reload$.pipe(
408
+ filter(() => this.enabled),
409
+ filter(thresholdFilterFn),
410
+ tap(() => this.showLoadingSpinner && this.markAsLoading())
411
+ ),
412
+
413
+ // Search text (no distinctUntilChanged() because of the debounceTime() pipe)
414
+ this.formControl.valueChanges.pipe(
415
+ filter((value) => this.enabled && isNotNilString(value)),
416
+ // Mark as loading (to show loading spinner) - as soon as possible, and before debounceTime
417
+ tap(() => this.showLoadingSpinner && this.markAsLoading()),
418
+ // Filter if not enough character
419
+ filter((value) => {
420
+ if ((value?.length || 0) < this.suggestLengthThreshold) {
421
+ // Update display value, to enable the message "not enough characters"
422
+ this._displayValue = value;
423
+ return false;
424
+ }
425
+ return true;
426
+ }),
427
+ // Wait a debounce time
428
+ debounceTime(this.debounceTime)
429
+ // DEBUG
430
+ //,tap((value) => this.debug && console.debug(this.logPrefix + ' Search text changes:', value))
431
+ ),
432
+
433
+ // Object set: use it (no distinctUntilChanged() pipe need)
434
+ this.formControl.valueChanges.pipe(
435
+ startWith<any>(this.formControl.value),
436
+ filter((value) => isNotNilObject(value)),
437
+ tap((value) => {
438
+ // DEBUG
439
+ //if (this.debug) console.debug(this.logPrefix + ' Received control value changes:', value);
440
+
441
+ // Update the display value (if need)
442
+ const displayValue = this.displayWith(value) || '';
443
+ if (this._displayValue !== displayValue) {
444
+ this._displayValue = displayValue;
445
+
446
+ // Apply to the input[type=text] field
447
+ this.setInputTextValue(this._displayValue);
448
+ this.markForCheck();
449
+ }
450
+ }),
451
+
452
+ // If multiple: do not recompute items (only for the first time, when loading)
453
+ // when formControl value changes
454
+ filter(() => this.loading || (!this.multiple && !this.showAllOnFocus))
455
+ ),
456
+
457
+ // Merge some observables, with a common distinctUntilChanged() pipe
458
+ merge(
459
+ // On dropdown button click (no debounceTime)
460
+ this.dropButtonClick.pipe(filter((event) => !event || !event.defaultPrevented)),
461
+ // Focus or click => Load all (no debounceTime)
462
+ merge(this.focused, this.clicked)
463
+ // Avoid too many call, e.g. when focused and clicked
464
+ .pipe(throttleTime(100)),
465
+ // DEBUG
466
+ //.pipe(tap((_) => this.debug && console.debug(this.logPrefix + ' Received focused or clicked event'))),
467
+ // Input items or filter changes
468
+ merge(this._$inputItems, this._$filter).pipe(
469
+ filter(() => !this.loading)
470
+ // DEBUG
471
+ //tap((_) => this.debug && console.debug(this.logPrefix + ' Received $inputItems or filter event'))
472
+ )
473
+ ).pipe(
474
+ filter(() => this.enabled),
475
+ map(() => (this.multiple ? this.searchText : this.showAllOnFocus ? '*' : this.formControl.value)),
476
+ // Distinguish changes
477
+ distinctUntilChanged((v1, v2) =>
478
+ // If loading (not loaded yet), simulate that value changed to force load
479
+ this.loading ? false : v1 === v2 || this.equals(v1, v2)
480
+ ),
481
+ // Make sure there is enough characters
482
+ filter(thresholdFilterFn)
483
+ // DEBUG
484
+ //tap((value) => this.debug && console.debug(this.logPrefix + ' Received update event: ', value))
485
+ )
486
+ ).pipe(
487
+ // Suggest values
488
+ mergeMap((value) => this.suggest(value, this.filter)),
489
+
490
+ // Ignore undefined result (e.g. when a newer suggest call is running)
491
+ filter(isNotNil),
492
+
493
+ // DEBUG
494
+ //tap(items => this.debug && console.debug(this.logPrefix + ' Received from suggest: ', items)),
495
+
496
+ // Store implicit value (will use it onBlur if not other value selected)
497
+ tap((items) => !(this.mobile || this.multiple) && this.updateImplicitValue(items))
498
+ );
499
+
500
+ // Fetch more events
501
+ const fetchMoreItemsChanges = this._fetchMore$.pipe(
502
+ tap((event) => event?.preventDefault()), // Avoid to close the mat-select
503
+ filter(() => this.canFetchMore),
504
+ mergeMap(() => this.fetchMore()),
505
+
506
+ // DEBUG
507
+ //tap(moreItems => console.debug(this.logPrefix + ' Received from fetch More: ', moreItems)),
508
+
509
+ // Concat to existing items
510
+ map((moreItems) => (this._$filteredItems.value || []).concat(moreItems))
511
+ );
512
+
513
+ // Update filtered items
514
+ this._subscription.add(
515
+ merge(
516
+ this._$inputItems,
517
+
518
+ // Update items events
519
+ filteredItemsChanges,
520
+
521
+ // Fetch more events
522
+ fetchMoreItemsChanges
523
+ ).subscribe((items) => {
524
+ // Make sure control value is inside (mat-select)
525
+ // (otherwise current value will visually disappear)
526
+ if (items) {
527
+ const value = this.formControl.value;
528
+ this._selectedItem = null;
529
+
530
+ // If form value is missing: append to list
531
+ if (isNotNil(value)) {
532
+ if (this.multiple && Array.isArray(value)) {
533
+ items = items.concat(value.filter((v) => !items.some((item) => this.equals(item, v))));
534
+ } else {
535
+ if (typeof value === 'object') {
536
+ const index = items.findIndex((item) => this.equals(item, value));
537
+ if (index !== -1) {
538
+ this._selectedItem = items[index];
539
+ } else {
540
+ // Append current value to the list, if missing (mat-select only)
541
+ if (this.mobile || this.multiple) {
542
+ items = items.concat(value);
543
+ }
544
+ }
545
+ }
546
+ }
547
+ }
548
+ }
549
+
550
+ // DEBUG
551
+ //if (this.debug) console.debug(this.logPrefix + ' Received new filtered items', items);
552
+
553
+ // Emit items
554
+ this._$filteredItems.next(items);
555
+ })
556
+ );
557
+
558
+ // Applying implicit value, on blur
559
+ this._subscription.add(
560
+ this.blurred
561
+ .pipe(
562
+ // Skip if multiple (no implicit value) or disable
563
+ filter(() => !this.multiple && !this.mobile && this.enabled),
564
+ // DEBUG
565
+ //,tap(_ => this.debug && console.debug(this.logPrefix + ' Received blurred event')),
566
+ map(() => this.formControl.value)
567
+ )
568
+ .subscribe((value) => {
569
+ let invalidateFilteredItems = false;
570
+ let moveCaretToBeginning = false;
571
+
572
+ // DEBUG
573
+ //if (this.debug) console.debug(this.logPrefix + ' Applying implicit value on blur', value);
574
+
575
+ // When leave component without object, use implicit value if :
576
+ // - an explicit value
577
+ // - field is not empty (user fill something)
578
+ // - OR field empty but is required
579
+ if (isNotNil(this._implicitValue) && ((this.required && isNilOrBlank(value)) || (isNotNilOrBlank(value) && typeof value !== 'object'))) {
580
+ this.writeValue(this._implicitValue);
581
+ this.formControl.markAsPending({ emitEvent: false, onlySelf: true });
582
+ this.formControl.updateValueAndValidity({ emitEvent: false, onlySelf: true });
583
+ invalidateFilteredItems = this.showAllOnFocus || this.reloadItemsOnFocus;
584
+ moveCaretToBeginning = true; // Move caret to the beginning (fix issue IMAGINE-469)
585
+ }
586
+ // No value and no implicit value
587
+ else if (isNilOrBlank(value)) {
588
+ this.writeValue(null);
589
+ this.formControl.markAsPending({ emitEvent: false, onlySelf: true });
590
+ this.formControl.updateValueAndValidity({ emitEvent: false, onlySelf: true });
591
+ }
592
+ // Has value, but no implicit value
593
+ else {
594
+ // Value is a valid object
595
+ if (isNotNilObject(value)) {
596
+ invalidateFilteredItems = this.showAllOnFocus || this.reloadItemsOnFocus;
597
+ moveCaretToBeginning = true; // Move caret to the beginning (fix issue IMAGINE-469)
598
+ }
599
+ // Invalid valid value: clear search text
600
+ else if (this.clearInvalidValueOnBlur && typeof value === 'string') {
601
+ this.writeValue(null);
602
+ this.formControl.markAsPending({ emitEvent: false, onlySelf: true });
603
+ this.formControl.updateValueAndValidity({ emitEvent: false, onlySelf: true });
604
+ invalidateFilteredItems = true;
605
+ }
606
+ }
607
+
608
+ this._implicitValue = null; // reset the implicit value
609
+ this.closePanel(); // Close panel
610
+
611
+ // Invalidate loaded items
612
+ if (invalidateFilteredItems) {
613
+ this.markAsLoading(); // Should force next focus to reload items
614
+ }
615
+
616
+ // Move caret to the beginning (fix issue IMAGINE-469)
617
+ if (moveCaretToBeginning) {
618
+ // DEBUG
619
+ //if (this.debug) console.debug(this.logPrefix + ' Moving caret to the beginning, on blur');
620
+ selectInputRange(this.matInputText.nativeElement, 0, 0);
621
+ }
622
+ })
623
+ );
624
+
625
+ // Listen form control status change
626
+ this._subscription.add(
627
+ this.formControl.statusChanges
628
+ .pipe(distinctUntilChanged())
629
+ // Update component state
630
+ .subscribe(() => this.checkIfTouched())
631
+ );
632
+
633
+ this._subscription.add(
634
+ this.keydownEscape.subscribe((event) => {
635
+ if (this.isOpen) {
636
+ // Avoid form or page to manage escape event
637
+ event?.stopPropagation();
638
+ event?.preventDefault();
639
+
640
+ // DEBUG
641
+ //console.debug(this.logPrefix + " Closing the panel (keydown.escape)");
642
+
643
+ this.closePanel();
644
+ }
645
+ })
646
+ );
647
+
648
+ // Select input content, on focus or press enter
649
+ if (this.selectInputContentOnFocus && !this.mobile && !this.multiple) {
650
+ this._subscription.add(
651
+ merge(
652
+ this.focused.pipe(
653
+ filter((event) => !event.defaultPrevented)
654
+ //tap((event) => event.preventDefault())
655
+ ),
656
+ this.keyupEnter.pipe(filter(() => isNotNilObject(this.formControl.value)))
657
+ )
658
+ .pipe(debounceTime(this.selectInputContentOnFocusDelay))
659
+ .subscribe(() => {
660
+ if (this.debug) console.debug(this.logPrefix + ' Selecting input content (focused)');
661
+ selectInputContent(this.matInputText.nativeElement);
662
+ })
663
+ );
664
+ }
665
+
666
+ if (this.reloadItemsOnFocus) {
667
+ this._subscription.add(
668
+ this.focused.pipe(filter((event) => !this.loading && !event.defaultPrevented)).subscribe(() => {
669
+ if (this.debug) console.debug(this.logPrefix + ' Reloading items (focused)');
670
+ this.reloadItems();
671
+ })
672
+ );
673
+ }
674
+ }
675
+
676
+ ngAfterViewInit() {
677
+ this._fixMatSelectPositionAndSearchbar();
678
+ }
679
+
680
+ ngOnDestroy(): void {
681
+ this._destroy$.next();
682
+ this._destroy$.complete();
683
+ this._subscription.unsubscribe();
684
+ this._itemsSubscription?.unsubscribe();
685
+ this._openedSubscription?.unsubscribe();
686
+ this._$inputItems.complete();
687
+ this._$inputItems.unsubscribe();
688
+ this._$filteredItems.complete();
689
+ this._$filteredItems.unsubscribe();
690
+ this._reload$.complete();
691
+ this._$filter.complete();
692
+
693
+ this.dropButtonClick.complete();
694
+ this.clicked.complete();
695
+ this.blurred.complete();
696
+ this.focused.complete();
697
+ this.keydownEscape.complete();
698
+ this.keyupEnter.complete();
699
+ this._fetchMore$.complete();
700
+
701
+ this._implicitValue = undefined;
702
+ this.formControl = null;
703
+ this.displayWith = null;
704
+ this.equals = null;
705
+ this.suggestFn = null;
706
+ this._$filteredItems = null;
707
+ this.config = null;
708
+ this.panelClass = null;
709
+
710
+ this._onChangeCallback = null;
711
+ this._onTouchedCallback = null;
712
+ this._onFetchMoreCallback = null;
713
+
714
+ // Destroy the 'autocomplete' instance, to avoid memory leak
715
+ this.autocomplete?.ngOnDestroy();
716
+ }
717
+
718
+ /**
719
+ * Allow to reload content. Useful when filter has been changed but not detected
720
+ */
721
+ reloadItems(value?: any) {
722
+ // DEBUG
723
+ //if (this.debug) console.debug(this.logPrefix + ' Asking to reloadItems()', value);
724
+ // Force a refresh
725
+ this._reload$.next(value || (this.showAllOnFocus && this.suggestLengthThreshold <= 0 ? '*' : this.formControl.value));
726
+
727
+ // Clear the search bar (only if hidden)
728
+ if (this.matSelect && !this.matSelect.panelOpen && this.ionSearchbar) {
729
+ this.ionSearchbar.value = null;
730
+ }
731
+ }
732
+
733
+ writeValue(value: any): void {
734
+ // DEBUG
735
+ //if (this.debug) console.debug(this.logPrefix + ' Writing value: ', value);
736
+
737
+ if (value !== this.formControl.value) {
738
+ this.formControl.setValue(value, { emitEvent: false });
739
+ this._displayValue = this.displayWith(value);
740
+
741
+ this._onChangeCallback(value);
742
+
743
+ // Check if need to update controls
744
+ this.checkIfTouched();
745
+ }
746
+ }
747
+
748
+ registerOnChange(fn: any): void {
749
+ this._onChangeCallback = fn;
750
+ }
751
+
752
+ registerOnTouched(fn: any): void {
753
+ this._onTouchedCallback = fn;
754
+ }
755
+
756
+ setDisabledState(isDisabled: boolean): void {
757
+ if (isDisabled && this.autocomplete?.isOpen) {
758
+ this.closePanel();
759
+ }
760
+ this.cd.markForCheck();
761
+ }
762
+
763
+ focus() {
764
+ if (this.matSelect) {
765
+ this.matSelect.focus();
766
+ } else {
767
+ focusInput(this.matInputText);
768
+ }
769
+ }
770
+
771
+ filterInputTextFocusEvent(event: FocusEvent) {
772
+ if (!event || event.defaultPrevented) {
773
+ if (this.debug) console.debug(this.logPrefix + ' calling filterInputTextFocusEvent - event.defaultPrevented');
774
+ return false;
775
+ }
776
+
777
+ // Ignore event from mat-option
778
+ if (event.relatedTarget instanceof HTMLElement && event.relatedTarget.tagName === 'MAT-OPTION') {
779
+ event.preventDefault();
780
+ if (event.stopPropagation) event.stopPropagation();
781
+ event.returnValue = false;
782
+
783
+ // DEBUG
784
+ //if (this.debug) console.debug(this.logPrefix + ' Cancelling focus event');
785
+
786
+ return false;
787
+ }
788
+
789
+ // Already focused - fix issue sumaris-app#837 (2 panels opened at the same time)
790
+ if (this._focused) return false;
791
+
792
+ this._focused = true;
793
+
794
+ // DEBUG
795
+ //if (this.debug) console.debug(this.logPrefix + ' Select input content');
796
+ const hasContent = isNotNilOrBlank((event.target as any)?.value);
797
+
798
+ // If combo is empty, or if has content but should force to show panel on focus
799
+ if (!hasContent || this.showPanelOnFocus || this.showAllOnFocus) {
800
+ // DEBUG
801
+ //if (this.debug) console.debug(this.logPrefix + ' Emit focus event');
802
+
803
+ // Need a delay to prevent early focus event, just after a blur event (see issue sumaris-app#837 - 2 panels opened)
804
+ setTimeout(() => {
805
+ if (!this._focused) return; // Skip if blur event received
806
+
807
+ this.focused.emit(event);
808
+ }, 10);
809
+
810
+ return true;
811
+ }
812
+ return false;
813
+ }
814
+
815
+ protected filterInputTextBlurEvent(event: FocusEvent) {
816
+ if (!event || event.defaultPrevented) return;
817
+
818
+ // DEBUG
819
+ //if (this.debug) console.debug(this.logPrefix + ' filterInputTextBlurEvent', event);
820
+
821
+ // Ignore event from mat-option
822
+ if (
823
+ (event.relatedTarget instanceof HTMLElement && event.relatedTarget.tagName === 'MAT-OPTION') ||
824
+ // Or autocomplete panel is open because event.relatedTarget is null (cf. https://github.com/angular/components/issues/24182)
825
+ (event.relatedTarget === null && this.autocomplete?.isOpen)
826
+ ) {
827
+ event.preventDefault();
828
+ if (event.stopPropagation) event.stopPropagation();
829
+ event.returnValue = false;
830
+
831
+ // DEBUG
832
+ //if (this.debug) console.debug(this.logPrefix + " Cancelling blur event");
833
+
834
+ return;
835
+ }
836
+
837
+ // Already blurred: skip
838
+ if (!this._focused) return;
839
+
840
+ this._focused = false;
841
+
842
+ // Need a delay to prevent early blur event without triggering formChange event
843
+ setTimeout(() => {
844
+ if (this._focused) return; // Skip if focus again
845
+
846
+ this.blurred.emit(event);
847
+ }, 100);
848
+ }
849
+
850
+ protected ionSearchBarChanged(event: Event) {
851
+ if (!event || event.defaultPrevented || !this.matSelect.panelOpen) return;
852
+ event.preventDefault();
853
+ event.stopPropagation();
854
+
855
+ // Get the value to search
856
+ const value = (event as CustomEvent<SearchbarChangeEventDetail>)?.detail.value;
857
+
858
+ // DEBUG
859
+ //console.debug(this.logPrefix + " Received <ion-searchbar> changes", value);
860
+
861
+ // Update the display value (in the visible form control)
862
+ if (!this.multiple) {
863
+ this._displayValue = value;
864
+ }
865
+
866
+ // Mark component as loading
867
+ this.markAsLoading();
868
+
869
+ // Reload items
870
+ this.reloadItems(value);
871
+
872
+ // TODO Find a way to avoid mat-select to give focus to an option, when typing
873
+ /*if (this.multiple) {
874
+ this.matSelect._elementRef;
875
+ }*/
876
+ }
877
+
878
+ filterMatSelectFocusEvent(event: FocusEvent) {
879
+ if (!event || event.defaultPrevented) return;
880
+ // DEBUG
881
+ //console.debug(this.logPrefix + ' Received <mat-select> focus event', event);
882
+
883
+ // Emit event
884
+ this.focused.emit(event);
885
+ }
886
+
887
+ filterMatSelectBlurEvent(event: FocusEvent) {
888
+ if (!event || event.defaultPrevented) return;
889
+
890
+ // DEBUG
891
+ // console.debug(this.logPrefix + " Received <mat-select> blur event", event);
892
+
893
+ if (
894
+ event.relatedTarget instanceof HTMLElement &&
895
+ // Ignore event from mat-option
896
+ (event.relatedTarget.tagName === 'MAT-OPTION' ||
897
+ (event.relatedTarget.tagName === 'DIV' && event.relatedTarget.classList.contains('mat-mdc-select-panel')) || // New MDC tag and class name (equivalent to event.relatedTarget.tagName === 'MAT-OPTION')
898
+ (event.relatedTarget.tagName === 'INPUT' && event.relatedTarget.classList.contains('searchbar-input')))
899
+ ) {
900
+ event.preventDefault();
901
+ if (event.stopPropagation) event.stopPropagation();
902
+ event.returnValue = false;
903
+ // DEBUG
904
+ // console.debug(this.logPrefix + " Cancelling <mat-select> blur event");
905
+ return false;
906
+ }
907
+
908
+ if (this._focused) {
909
+ this._focused = false;
910
+
911
+ this.blurred.emit(event);
912
+ }
913
+
914
+ return true;
915
+ }
916
+
917
+ clearValue(event?: Event) {
918
+ this.closePanel();
919
+ this.writeValue(null);
920
+ event?.stopPropagation();
921
+ if (this.ionSearchbar) {
922
+ this.ionSearchbar.value = null;
923
+ }
924
+ this.markAsLoading();
925
+ }
926
+
927
+ _initAutocompleteInfiniteScroll(threshold?: string) {
928
+ if (!this.autocomplete) return; // Skip
929
+
930
+ // DEBUG
931
+ //console.debug(this.logPrefix + ' Init autocomplete scroll listener');
932
+
933
+ if (this._openedSubscription) {
934
+ this._openedSubscription.unsubscribe();
935
+ this._subscription.remove(this._openedSubscription);
936
+ }
937
+
938
+ const opened$: Observable<any> = this.autocomplete._isOpen ? timer(0) : this.autocomplete.opened.pipe(debounceTime(200));
939
+ const scrollEnd$ = opened$.pipe(
940
+ map(() => this.getAutocompletePanel()),
941
+ filter(isNotNil),
942
+ switchMap((panel) => fromScrollEndEvent(panel, threshold)),
943
+ takeUntil(this.autocomplete.closed)
944
+ );
945
+
946
+ // Trigger fetch more, when end scroll reached
947
+ this._openedSubscription = scrollEnd$.subscribe(() => this._fetchMore$.emit());
948
+
949
+ // Register subscription
950
+ this._subscription.add(this._openedSubscription);
951
+ }
952
+
953
+ _initMatSelectInfiniteScroll(threshold?: string) {
954
+ if (!this.matSelect) return; // Skip
955
+
956
+ // DEBUG
957
+ console.debug(this.logPrefix + ' Init mat-select scroll listener');
958
+
959
+ if (this._openedSubscription) {
960
+ this._openedSubscription.unsubscribe();
961
+ this._subscription.remove(this._openedSubscription);
962
+ }
963
+
964
+ const opened$: Observable<any> = this.matSelect.panelOpen ? timer(0) : this.matSelect._openedStream.pipe(debounceTime(200));
965
+ const scrollEnd$ = opened$.pipe(
966
+ map(() => this.getMatSelectPanel()),
967
+ filter(isNotNil),
968
+ switchMap((panel) => fromScrollEndEvent(panel, threshold)),
969
+ takeUntil(this.matSelect._closedStream)
970
+ );
971
+
972
+ // Trigger fetch more, end end scroll reached
973
+ this._openedSubscription = scrollEnd$.pipe(filter(() => this._moreItemsCount > 0)).subscribe(() => this._fetchMore$.emit());
974
+
975
+ // Register subscription
976
+ this._subscription.add(this._openedSubscription);
977
+ }
978
+
979
+ get isOpen(): boolean {
980
+ return this.autocomplete?.isOpen || this.matSelect?.panelOpen || false;
981
+ }
982
+
983
+ closePanel() {
984
+ if (this.autocomplete?.isOpen) {
985
+ this.autocompleteTrigger?.closePanel();
986
+ } else if (this.matSelect?.panelOpen) {
987
+ this.matSelect?.close();
988
+ }
989
+ }
990
+
991
+ /* -- protected method -- */
992
+
993
+ protected markAsLoading() {
994
+ if (this._$filteredItems.value) {
995
+ if (this.debug) console.debug(this.logPrefix + ' Marking as loading');
996
+
997
+ this._$filteredItems.next(undefined);
998
+ this._itemCount = undefined;
999
+ this._implicitValue = undefined;
1000
+ this._onFetchMoreCallback = undefined;
1001
+ this._moreItemsCount = 0;
1002
+ this._selectedItem = null;
1003
+ this.markForCheck();
1004
+ }
1005
+ }
1006
+
1007
+ protected onSelectionChange(event: MatSelectChange) {
1008
+ this.selectionChange.emit({ source: event.source, value: event.value });
1009
+ }
1010
+
1011
+ protected onOptionSelected(event: MatAutocompleteSelectedEvent) {
1012
+ // DEBUG
1013
+ //if (this.debug) console.debug(this.logPrefix + ' Option selected', event);
1014
+
1015
+ this.selectionChange.emit({ source: event.source, value: event.option.value });
1016
+ }
1017
+
1018
+ protected toggleShowPanel(event: Event) {
1019
+ if (this.isOpen) {
1020
+ event?.preventDefault();
1021
+ event?.stopPropagation();
1022
+ this.closePanel();
1023
+ } else {
1024
+ this.dropButtonClick.emit(event);
1025
+ }
1026
+ }
1027
+
1028
+ /* -- private method -- */
1029
+
1030
+ private async suggest(value: any, filter: any | undefined): Promise<any[] | undefined> {
1031
+ // Compute a new execution id
1032
+ const id = ++this._suggestExecutionId;
1033
+
1034
+ // Split string value, if allow (.e.g 'AAA - Item AAA' => 'AAA')
1035
+ if (!(this.multiple || this.mobile) && typeof value === 'string') {
1036
+ // Split search text (and keep only the first part)
1037
+ if (this.splitSearchText && this.displaySeparator) {
1038
+ const firstSeparatorIndex = value.indexOf(this.displaySeparator);
1039
+ if (firstSeparatorIndex !== -1) {
1040
+ value = value.substring(0, firstSeparatorIndex);
1041
+ }
1042
+ }
1043
+
1044
+ // Trim search text
1045
+ if (this.trimSearchText) {
1046
+ value = value.trim();
1047
+ }
1048
+ }
1049
+
1050
+ // Call suggestion function
1051
+ let res = await this.suggestFn(value, filter);
1052
+
1053
+ // Ignore the current result, if a newer execution has been launched
1054
+ if (id !== this._suggestExecutionId) return undefined;
1055
+
1056
+ // DEBUG
1057
+ //if (this.debug) console.debug(this.logPrefix + ' Filtered items by suggestFn:', value, res);
1058
+
1059
+ if (!res) {
1060
+ this._itemCount = 0;
1061
+ this._onFetchMoreCallback = undefined;
1062
+ this._moreItemsCount = 0;
1063
+ res = [];
1064
+ } else if (Array.isArray(res)) {
1065
+ res = res as any[];
1066
+ this._itemCount = res?.length || 0;
1067
+ this._onFetchMoreCallback = undefined;
1068
+ this._moreItemsCount = 0;
1069
+ } else {
1070
+ const { data, total, fetchMore } = res as LoadResult<any>;
1071
+ this._itemCount = toNumber(total, (data && data.length) || 0);
1072
+ this._onFetchMoreCallback = fetchMore;
1073
+ this._moreItemsCount = (fetchMore && this._itemCount - data.length) || 0;
1074
+ res = data;
1075
+ }
1076
+
1077
+ // Add favorites
1078
+ if (isNotEmptyArray(this.favoriteItems)) {
1079
+ const showAllFavorites = !value || value === '*' || (isNotNilObject(value) && this.showAllOnFocus);
1080
+ const sortAttributes = this.displayAttributes || (filter && ((filter.searchAttribute && [filter.searchAttribute]) || filter.searchAttributes));
1081
+ const filteredFavoriteItems = showAllFavorites
1082
+ ? this.favoriteItems.sort(propertiesPathComparator(sortAttributes))
1083
+ : suggestFromArray(this.favoriteItems, value, this.filter)?.data;
1084
+ if (isNotEmptyArray(filteredFavoriteItems)) {
1085
+ filteredFavoriteItems.sort(propertiesPathComparator(this.displayAttributes));
1086
+ res = filteredFavoriteItems.concat(res.filter((item) => !filteredFavoriteItems.some((favoriteItem) => this.equals(favoriteItem, item))));
1087
+ }
1088
+ }
1089
+
1090
+ // DEBUG
1091
+ if (this.debug) console.debug(this.logPrefix + ' Filtered items by suggestFn:', value, res);
1092
+
1093
+ return res;
1094
+ }
1095
+
1096
+ private async fetchMore(): Promise<any[]> {
1097
+ if (!this._onFetchMoreCallback) return [];
1098
+
1099
+ // Save then remove fetch function (to avoid multi-call)
1100
+ const fetchMoreFn = this._onFetchMoreCallback;
1101
+ this._onFetchMoreCallback = undefined;
1102
+
1103
+ let { data: items, total, fetchMore } = await fetchMoreFn();
1104
+
1105
+ // Exclude favorites
1106
+ if (isNotEmptyArray(this.favoriteItems)) {
1107
+ items = items.filter((item) => !this.favoriteItems.some((favoriteItem) => this.equals(favoriteItem, item)));
1108
+ }
1109
+
1110
+ this._itemCount = total || this._itemCount;
1111
+ this._onFetchMoreCallback = fetchMore;
1112
+ this._moreItemsCount = Math.max(0, this._moreItemsCount - items.length); // Borne min = 0
1113
+ return items;
1114
+ }
1115
+
1116
+ private updateImplicitValue(items: any[]) {
1117
+ // Store implicit value (will use it onBlur if not other value selected)
1118
+ if (!this.multiple && items?.length === 1) {
1119
+ const implicitValue = items[0];
1120
+ const applyImplicitValue = typeof this.applyImplicitValue === 'function' ? this.applyImplicitValue(implicitValue) : this.applyImplicitValue;
1121
+ if (applyImplicitValue) {
1122
+ this._implicitValue = implicitValue;
1123
+
1124
+ // Preview the implicit in the input text (and select the added part)
1125
+ if (this.previewImplicitValue && this.matInputText?.nativeElement) {
1126
+ const searchText = this.matInputText.nativeElement.value;
1127
+
1128
+ // Complete the search text, with the full implicit value applied
1129
+ if (!RegExpUtils.hasWildcardCharacter(searchText)) {
1130
+ const displayValue = this.displayWith(implicitValue);
1131
+ if (displayValue.toUpperCase().startsWith(searchText.toUpperCase())) {
1132
+ // Select the additional text to match the implicit value
1133
+ this.setInputTextValue(displayValue, searchText.length, displayValue.length, 'backward');
1134
+ }
1135
+ }
1136
+ }
1137
+
1138
+ return;
1139
+ }
1140
+ // Continue : reste implicit value
1141
+ }
1142
+
1143
+ this._implicitValue = undefined;
1144
+ }
1145
+
1146
+ private checkIfTouched() {
1147
+ if (this.formControl.touched) {
1148
+ this.cd.markForCheck();
1149
+ this._onTouchedCallback();
1150
+ }
1151
+ }
1152
+
1153
+ private getAutocompletePanel(): HTMLElement {
1154
+ const ele = this.autocomplete?.options.last?._getHostElement().parentElement;
1155
+ if (!ele) {
1156
+ // DEBUG
1157
+ console.warn(this.logPrefix + ' Unable to find the autocomplete div...');
1158
+ }
1159
+ return ele;
1160
+ }
1161
+
1162
+ private getMatSelectPanel(): HTMLElement {
1163
+ const ele = this.matSelect.options.last?._getHostElement().parentElement;
1164
+ if (!ele) {
1165
+ // DEBUG
1166
+ console.warn(this.logPrefix + ' Unable to find the mat-select container...');
1167
+ }
1168
+ return ele;
1169
+ }
1170
+
1171
+ private markForCheck() {
1172
+ this.cd.markForCheck();
1173
+ }
1174
+
1175
+ private _fixMatSelectPositionAndSearchbar() {
1176
+ if (!this.matSelect) return;
1177
+
1178
+ // Hide the panel (will be show when ready)
1179
+ this.matSelect.panelClass = 'hidden';
1180
+
1181
+ let searchBarSubscription: Subscription;
1182
+ this._subscription.add(
1183
+ this.matSelect.openedChange.subscribe(async (open) => {
1184
+ if (open) {
1185
+ const panelElement = this.matSelect.panel.nativeElement as HTMLElement;
1186
+ const overlayPane = findParentWithClass(panelElement, 'cdk-overlay-pane');
1187
+
1188
+ // Fix panel position, when overlay has an transformX (added when keyboard is shown)
1189
+ this._fixMatSelectPanelPosition(overlayPane);
1190
+
1191
+ // Fix overlay, for searchbar
1192
+ if (this.showSearchBar) {
1193
+ searchBarSubscription = await this._fixSearchbarOverlay(panelElement, overlayPane);
1194
+ if (searchBarSubscription) this._subscription.add(searchBarSubscription);
1195
+ }
1196
+
1197
+ // Show the panel
1198
+ this.renderer.removeClass(panelElement, 'hidden');
1199
+ this.matSelect.panelClass = this.panelClass;
1200
+ }
1201
+ // ON close
1202
+ else {
1203
+ // Unsubscribe search bar workaround
1204
+ if (searchBarSubscription) {
1205
+ searchBarSubscription.unsubscribe();
1206
+ this._subscription.remove(searchBarSubscription);
1207
+ searchBarSubscription = null;
1208
+
1209
+ // Hide panel again
1210
+ this.matSelect.panelClass = 'hidden';
1211
+ }
1212
+ }
1213
+ })
1214
+ );
1215
+ }
1216
+
1217
+ private _fixMatSelectPanelPosition(overlayPane: HTMLElement) {
1218
+ if (!overlayPane) return;
1219
+
1220
+ // Remove the unwanted default translateX
1221
+ this.renderer.setStyle(
1222
+ overlayPane,
1223
+ 'transform',
1224
+ overlayPane.style.transform
1225
+ .split(' ')
1226
+ .filter((prop) => !prop.match(/^translateX/))
1227
+ .join(' ')
1228
+ );
1229
+
1230
+ // Fix panel width to field width (it was not forced by @Input panelWidth)
1231
+ if (!this.panelWidth) {
1232
+ if (this.debug) console.debug(`${this.logPrefix} Fixing select panel width to the field size`);
1233
+ const width = `${this.el.nativeElement.offsetWidth - 1}px`;
1234
+ if (this._defaultPanelWidth !== width) {
1235
+ this._defaultPanelWidth = width;
1236
+ this.renderer.setStyle(overlayPane, 'width', width);
1237
+ }
1238
+ }
1239
+
1240
+ // Fix panel's left, to avoid overflow on the right
1241
+ const left = overlayPane.style.left;
1242
+ if (isNotNilOrBlank(left) && !left.includes('calc(') && left.endsWith('px')) {
1243
+ if (this.debug) console.debug(`${this.logPrefix} Fixing select panel left, to avoid overflow on the right`);
1244
+ const width = `${overlayPane.clientWidth}px`;
1245
+ const fixLeft = `calc(-${width} + min(${left} + ${width}, -32px + 100vw))`;
1246
+ this.renderer.setStyle(overlayPane, 'left', fixLeft, RendererStyleFlags2.Important);
1247
+ }
1248
+
1249
+ // Fix panel's top, to avoid overflow on the bottom
1250
+ const top = overlayPane.style.top;
1251
+ if (isNotNilOrBlank(top) && !top.includes('calc(') && top.endsWith('px')) {
1252
+ if (this.debug) console.debug(`${this.logPrefix} Fixing select panel top, to avoid overflow on the bottom`);
1253
+ const height = `${overlayPane.clientHeight || 275}px`;
1254
+ const fixTop = `calc(-${height} + min(${top} + ${height}, -32px + 100vh))`;
1255
+ this.renderer.setStyle(overlayPane, 'top', fixTop, RendererStyleFlags2.Important);
1256
+ }
1257
+ }
1258
+
1259
+ /**
1260
+ * Hack : if we are in a IonModal, it's necessary to move the CdkOverlay container
1261
+ * in the IonModal to might keep focus in IonSearchbar.
1262
+ *
1263
+ * @param panelElement
1264
+ * @param overlayPane
1265
+ * @private
1266
+ */
1267
+ private async _fixSearchbarOverlay(panelElement: HTMLElement, overlayPane: HTMLElement): Promise<Subscription | undefined> {
1268
+ if (!this.matSelect || !this.ionSearchbar) return;
1269
+
1270
+ const modalElement = await this.modalController.getTop();
1271
+ if (!modalElement) return; // No modal: skip
1272
+
1273
+ // Get the CDK overlay container
1274
+ const overlayContainer = findParentWithClass(panelElement, 'cdk-overlay-container');
1275
+ if (!overlayContainer) return;
1276
+ const originalParent = overlayContainer.parentElement;
1277
+
1278
+ // DEBUG
1279
+ //if (this.debug)
1280
+ console.debug(
1281
+ `${this.logPrefix} Moving the "cdk-overlay" container from the "${originalParent?.tagName || 'body'}" to the "ion-modal" container`
1282
+ );
1283
+
1284
+ this.renderer.appendChild(modalElement, overlayContainer);
1285
+
1286
+ const _document = this.injector.get(DOCUMENT);
1287
+ const shiftLeft = (_document.defaultView.innerWidth - modalElement.firstElementChild.getBoundingClientRect().width) / 2;
1288
+ const shiftTop = (_document.defaultView.innerHeight - modalElement.firstElementChild.getBoundingClientRect().height) / 2;
1289
+
1290
+ this.renderer.setStyle(overlayPane, 'margin-top', `-${shiftTop}px`);
1291
+ this.renderer.setStyle(overlayPane, 'margin-left', `-${shiftLeft}px`);
1292
+
1293
+ // Return the reverse function, to replace the container in body
1294
+ return new Subscription(() => {
1295
+ // DEBUG
1296
+ //if (this.debug)
1297
+ console.debug(`${this.logPrefix} moving the "cdk-overlay" container from the "ion-modal" to the "body" container`);
1298
+
1299
+ this.renderer.appendChild(originalParent /*this.document.body*/, overlayContainer);
1300
+ });
1301
+ }
1302
+
1303
+ private setInputTextValue(value: string, selectionStartIndex?: number, selectionEndIndex?: number, direction?: 'backward' | 'forward') {
1304
+ // Apply to the input[type=text] field
1305
+ if (this.matInputText?.nativeElement) {
1306
+ this.matInputText.nativeElement.value = value ?? '';
1307
+ if (isNotNil(selectionStartIndex)) {
1308
+ setTimeout(() => {
1309
+ selectInputRange(this.matInputText.nativeElement, selectionStartIndex, selectionEndIndex, direction);
1310
+ });
1311
+ }
1312
+ }
1313
+ }
1314
+
1315
+ protected onBackspace(event: Event): void {
1316
+ const input = event?.target as HTMLInputElement;
1317
+
1318
+ // If preview enabled, remove selection when press backspace (by default only the selection will be deleted)
1319
+ if (this.previewImplicitValue && input) {
1320
+ const selectionStart = input.selectionStart;
1321
+ const selectionEnd = input.selectionEnd;
1322
+ let value = input.value;
1323
+
1324
+ // Make sure to remove the last typed character (by default only the selection will be deleted)
1325
+ if (this._implicitValue && selectionStart > 0 && selectionStart < selectionEnd && value.length === selectionEnd) {
1326
+ // DEBUG
1327
+ //if (this.debug) console.debug(`${this.logPrefix} Backspace pressed, additional text from the implicit value`);
1328
+
1329
+ event.preventDefault();
1330
+
1331
+ // Define the new value by removing the text in the adjusted range
1332
+ const newCaretPosition = selectionStart - 1;
1333
+ value = newCaretPosition > 0 ? value.slice(0, newCaretPosition) : '';
1334
+
1335
+ // clean implicit value
1336
+ this._implicitValue = null;
1337
+
1338
+ // Apply the new value and update the selection
1339
+ this.setInputTextValue(value, newCaretPosition, selectionEnd);
1340
+
1341
+ // Mark component as loading
1342
+ this.markAsLoading();
1343
+
1344
+ // Reload items
1345
+ this.reloadItems(value);
1346
+ }
1347
+ }
1348
+
1349
+ // Emit
1350
+ this.keydownBackspace.emit(event);
1351
+ }
1352
+
1353
+ protected toggleFavoriteClick(event: UIEvent, value: any) {
1354
+ if (isNil(value) || event?.defaultPrevented || !this.toggleFavorite.observed) return; // Skip
1355
+
1356
+ // DEBUG
1357
+ //if (this.debug) console.debug(this.logPrefix + ' Favorite item clicked', value);
1358
+
1359
+ if (event) {
1360
+ event.preventDefault();
1361
+ event.stopPropagation();
1362
+ event.stopImmediatePropagation();
1363
+ }
1364
+
1365
+ const isFavorite = this.favoriteItems?.some((favoriteItem) => this.equals(favoriteItem, value));
1366
+ if (isFavorite) {
1367
+ this.favoriteItems = this.favoriteItems.filter((favoriteItem) => !this.equals(favoriteItem, value));
1368
+ } else {
1369
+ this.favoriteItems = this.favoriteItems.concat(value);
1370
+ }
1371
+
1372
+ // Emit changes
1373
+ this.toggleFavorite.emit({ source: this.matSelect || this.autocomplete, value: value });
1374
+ }
1375
+ }