@lenne.tech/ng-base 15.0.0-beta-2 → 16.0.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 (241) hide show
  1. package/base-components/base-components.module.d.ts +1 -2
  2. package/base-components/components/checkbox/checkbox.component.d.ts +1 -1
  3. package/base-components/components/delete-account/delete-account.component.d.ts +1 -1
  4. package/base-components/components/fab-button/fab-button.component.d.ts +1 -1
  5. package/base-components/components/input/input.component.d.ts +1 -1
  6. package/base-components/components/loading-bar/loading-bar.component.d.ts +1 -1
  7. package/base-components/components/model-form/model-form-base.component.d.ts +1 -1
  8. package/base-components/components/model-form/model-form.component.d.ts +1 -1
  9. package/base-components/components/model-form-sub/model-form-sub.component.d.ts +1 -1
  10. package/base-components/components/model-table/model-table.component.d.ts +17 -5
  11. package/base-components/components/refence-input/refence-input.component.d.ts +1 -1
  12. package/base-components/components/select/select.component.d.ts +1 -1
  13. package/base-components/components/skeleton-loader/skeleton-loader.component.d.ts +1 -1
  14. package/base-components/components/tags/tags.component.d.ts +1 -1
  15. package/base-components/components/textarea/textarea.component.d.ts +1 -1
  16. package/base-components/components/toast/toast.component.d.ts +1 -1
  17. package/base-components/components/upload-image/upload-image.component.d.ts +1 -1
  18. package/base-components/directives/context-menu.directive.d.ts +1 -1
  19. package/base-components/directives/sort.directive.d.ts +3 -2
  20. package/base-prototype/pages/login/login.component.d.ts +1 -1
  21. package/base-prototype/pages/profile/profile.component.d.ts +1 -1
  22. package/base-prototype/pages/set-password/set-password.component.d.ts +1 -1
  23. package/esm2022/base-cms/base-cms-routing.module.mjs +33 -0
  24. package/esm2022/base-cms/base-cms.module.mjs +61 -0
  25. package/esm2022/base-cms/pages/base-cms/base-cms.component.mjs +233 -0
  26. package/esm2022/base-components/base-components.module.mjs +123 -0
  27. package/esm2022/base-components/components/breadcrumb/breadcrumb.component.mjs +21 -0
  28. package/esm2022/base-components/components/change-password/change-password.component.mjs +96 -0
  29. package/esm2022/base-components/components/checkbox/checkbox.component.mjs +35 -0
  30. package/esm2022/base-components/components/delete-account/delete-account.component.mjs +61 -0
  31. package/esm2022/base-components/components/fab-button/fab-button.component.mjs +21 -0
  32. package/esm2022/base-components/components/input/input.component.mjs +72 -0
  33. package/esm2022/base-components/components/loading-bar/loading-bar.component.mjs +39 -0
  34. package/esm2022/base-components/components/model-form/model-form-base.component.mjs +145 -0
  35. package/esm2022/base-components/components/model-form/model-form.component.mjs +585 -0
  36. package/esm2022/base-components/components/model-form-sub/model-form-sub.component.mjs +111 -0
  37. package/esm2022/base-components/components/model-table/model-table.component.mjs +470 -0
  38. package/esm2022/base-components/components/refence-input/refence-input.component.mjs +273 -0
  39. package/esm2022/base-components/components/select/select.component.mjs +59 -0
  40. package/esm2022/base-components/components/skeleton-loader/skeleton-loader.component.mjs +32 -0
  41. package/esm2022/base-components/components/tags/tags.component.mjs +224 -0
  42. package/esm2022/base-components/components/textarea/textarea.component.mjs +76 -0
  43. package/esm2022/base-components/components/toast/toast.component.mjs +70 -0
  44. package/esm2022/base-components/components/upload-image/upload-image.component.mjs +343 -0
  45. package/esm2022/base-components/directives/back-button.directive.mjs +25 -0
  46. package/esm2022/base-components/directives/context-menu.directive.mjs +112 -0
  47. package/esm2022/base-components/directives/sort.directive.mjs +61 -0
  48. package/esm2022/base-components/directives/stop-propagation.directive.mjs +24 -0
  49. package/esm2022/base-components/pipes/ellipses.pipe.mjs +23 -0
  50. package/esm2022/base-prototype/base-prototype.module.mjs +54 -0
  51. package/esm2022/base-prototype/pages/email-verification/email-verification.component.mjs +62 -0
  52. package/esm2022/base-prototype/pages/forgot-password/forgot-password.component.mjs +75 -0
  53. package/esm2022/base-prototype/pages/login/login.component.mjs +111 -0
  54. package/esm2022/base-prototype/pages/profile/profile.component.mjs +86 -0
  55. package/esm2022/base-prototype/pages/register/register.component.mjs +94 -0
  56. package/esm2022/base-prototype/pages/set-password/set-password.component.mjs +90 -0
  57. package/esm2022/shared/classes/auth.class.mjs +14 -0
  58. package/esm2022/shared/classes/basic-user.class.mjs +49 -0
  59. package/esm2022/shared/classes/graphql-enum.class.mjs +10 -0
  60. package/esm2022/shared/classes/graphql-meta.class.mjs +345 -0
  61. package/esm2022/shared/classes/graphql-type.class.mjs +14 -0
  62. package/esm2022/shared/classes/sort.class.mjs +38 -0
  63. package/esm2022/shared/services/auth.service.mjs +153 -0
  64. package/esm2022/shared/services/breadcrumb.service.mjs +70 -0
  65. package/{esm2020 → esm2022}/shared/services/cms.service.mjs +7 -5
  66. package/esm2022/shared/services/file.service.mjs +87 -0
  67. package/esm2022/shared/services/forms.service.mjs +62 -0
  68. package/esm2022/shared/services/graphql-meta.service.mjs +133 -0
  69. package/esm2022/shared/services/graphql-plus.service.mjs +94 -0
  70. package/esm2022/shared/services/graphql.service.mjs +511 -0
  71. package/esm2022/shared/services/image.service.mjs +103 -0
  72. package/esm2022/shared/services/loader.service.mjs +79 -0
  73. package/esm2022/shared/services/navigation.service.mjs +39 -0
  74. package/esm2022/shared/services/scroll.service.mjs +208 -0
  75. package/esm2022/shared/services/storage.service.mjs +142 -0
  76. package/esm2022/shared/services/toast.service.mjs +40 -0
  77. package/esm2022/shared/services/user.service.mjs +161 -0
  78. package/esm2022/shared/services/ws.service.mjs +18 -0
  79. package/esm2022/src/base.module.mjs +98 -0
  80. package/esm2022/src/directives/lazy-load.directive.mjs +48 -0
  81. package/esm2022/src/directives/match-height.directive.mjs +92 -0
  82. package/esm2022/src/directives/resizable.directive.mjs +92 -0
  83. package/esm2022/src/factories/apollo-options.factory.mjs +108 -0
  84. package/esm2022/src/functions/extract-files.function.mjs +87 -0
  85. package/esm2022/src/guards/auth.guard.mjs +84 -0
  86. package/esm2022/src/guards/can-deactivate.guard.mjs +17 -0
  87. package/esm2022/src/guards/logout.guard.mjs +35 -0
  88. package/esm2022/src/pipes/date-ago.pipe.mjs +64 -0
  89. package/esm2022/src/pipes/safe-html.pipe.mjs +23 -0
  90. package/esm2022/src/services/fullscreen.service.mjs +52 -0
  91. package/esm2022/src/services/seo.service.mjs +100 -0
  92. package/esm2022/src/services/theme.service.mjs +45 -0
  93. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-cms.mjs +42 -30
  94. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-cms.mjs.map +1 -1
  95. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-components.mjs +467 -286
  96. package/fesm2022/lenne.tech-ng-base-base-components.mjs.map +1 -0
  97. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-prototype.mjs +127 -87
  98. package/{fesm2015 → fesm2022}/lenne.tech-ng-base-base-prototype.mjs.map +1 -1
  99. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-shared.mjs +165 -113
  100. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-shared.mjs.map +1 -1
  101. package/{fesm2020 → fesm2022}/lenne.tech-ng-base.mjs +113 -90
  102. package/fesm2022/lenne.tech-ng-base.mjs.map +1 -0
  103. package/package.json +27 -42
  104. package/src/directives/lazy-load.directive.d.ts +1 -1
  105. package/src/directives/match-height.directive.d.ts +1 -1
  106. package/src/directives/resizable.directive.d.ts +1 -1
  107. package/src/guards/auth.guard.d.ts +2 -2
  108. package/src/guards/can-deactivate.guard.d.ts +1 -2
  109. package/src/guards/logout.guard.d.ts +2 -2
  110. package/esm2020/base-cms/base-cms-routing.module.mjs +0 -32
  111. package/esm2020/base-cms/base-cms.module.mjs +0 -59
  112. package/esm2020/base-cms/pages/base-cms/base-cms.component.mjs +0 -222
  113. package/esm2020/base-components/base-components.module.mjs +0 -123
  114. package/esm2020/base-components/components/breadcrumb/breadcrumb.component.mjs +0 -18
  115. package/esm2020/base-components/components/change-password/change-password.component.mjs +0 -90
  116. package/esm2020/base-components/components/checkbox/checkbox.component.mjs +0 -31
  117. package/esm2020/base-components/components/delete-account/delete-account.component.mjs +0 -56
  118. package/esm2020/base-components/components/fab-button/fab-button.component.mjs +0 -21
  119. package/esm2020/base-components/components/input/input.component.mjs +0 -67
  120. package/esm2020/base-components/components/loading-bar/loading-bar.component.mjs +0 -35
  121. package/esm2020/base-components/components/model-form/model-form-base.component.mjs +0 -136
  122. package/esm2020/base-components/components/model-form/model-form.component.mjs +0 -564
  123. package/esm2020/base-components/components/model-form-sub/model-form-sub.component.mjs +0 -102
  124. package/esm2020/base-components/components/model-table/model-table.component.mjs +0 -397
  125. package/esm2020/base-components/components/refence-input/refence-input.component.mjs +0 -261
  126. package/esm2020/base-components/components/select/select.component.mjs +0 -54
  127. package/esm2020/base-components/components/skeleton-loader/skeleton-loader.component.mjs +0 -32
  128. package/esm2020/base-components/components/tags/tags.component.mjs +0 -218
  129. package/esm2020/base-components/components/textarea/textarea.component.mjs +0 -72
  130. package/esm2020/base-components/components/toast/toast.component.mjs +0 -68
  131. package/esm2020/base-components/components/upload-image/upload-image.component.mjs +0 -324
  132. package/esm2020/base-components/directives/back-button.directive.mjs +0 -23
  133. package/esm2020/base-components/directives/context-menu.directive.mjs +0 -108
  134. package/esm2020/base-components/directives/sort.directive.mjs +0 -54
  135. package/esm2020/base-components/directives/stop-propagation.directive.mjs +0 -23
  136. package/esm2020/base-components/pipes/ellipses.pipe.mjs +0 -22
  137. package/esm2020/base-prototype/base-prototype.module.mjs +0 -53
  138. package/esm2020/base-prototype/pages/email-verification/email-verification.component.mjs +0 -55
  139. package/esm2020/base-prototype/pages/forgot-password/forgot-password.component.mjs +0 -67
  140. package/esm2020/base-prototype/pages/login/login.component.mjs +0 -102
  141. package/esm2020/base-prototype/pages/profile/profile.component.mjs +0 -81
  142. package/esm2020/base-prototype/pages/register/register.component.mjs +0 -86
  143. package/esm2020/base-prototype/pages/set-password/set-password.component.mjs +0 -82
  144. package/esm2020/shared/classes/auth.class.mjs +0 -17
  145. package/esm2020/shared/classes/basic-user.class.mjs +0 -52
  146. package/esm2020/shared/classes/graphql-enum.class.mjs +0 -9
  147. package/esm2020/shared/classes/graphql-meta.class.mjs +0 -344
  148. package/esm2020/shared/classes/graphql-type.class.mjs +0 -17
  149. package/esm2020/shared/classes/sort.class.mjs +0 -40
  150. package/esm2020/shared/services/auth.service.mjs +0 -148
  151. package/esm2020/shared/services/breadcrumb.service.mjs +0 -68
  152. package/esm2020/shared/services/file.service.mjs +0 -84
  153. package/esm2020/shared/services/forms.service.mjs +0 -59
  154. package/esm2020/shared/services/graphql-meta.service.mjs +0 -123
  155. package/esm2020/shared/services/graphql-plus.service.mjs +0 -89
  156. package/esm2020/shared/services/graphql.service.mjs +0 -507
  157. package/esm2020/shared/services/image.service.mjs +0 -102
  158. package/esm2020/shared/services/loader.service.mjs +0 -79
  159. package/esm2020/shared/services/navigation.service.mjs +0 -36
  160. package/esm2020/shared/services/scroll.service.mjs +0 -179
  161. package/esm2020/shared/services/storage.service.mjs +0 -140
  162. package/esm2020/shared/services/toast.service.mjs +0 -41
  163. package/esm2020/shared/services/user.service.mjs +0 -155
  164. package/esm2020/shared/services/ws.service.mjs +0 -16
  165. package/esm2020/src/base.module.mjs +0 -97
  166. package/esm2020/src/directives/lazy-load.directive.mjs +0 -45
  167. package/esm2020/src/directives/match-height.directive.mjs +0 -84
  168. package/esm2020/src/directives/resizable.directive.mjs +0 -90
  169. package/esm2020/src/factories/apollo-options.factory.mjs +0 -106
  170. package/esm2020/src/functions/extract-files.function.mjs +0 -84
  171. package/esm2020/src/guards/auth.guard.mjs +0 -80
  172. package/esm2020/src/guards/can-deactivate.guard.mjs +0 -16
  173. package/esm2020/src/guards/logout.guard.mjs +0 -32
  174. package/esm2020/src/pipes/date-ago.pipe.mjs +0 -65
  175. package/esm2020/src/pipes/safe-html.pipe.mjs +0 -21
  176. package/esm2020/src/services/fullscreen.service.mjs +0 -51
  177. package/esm2020/src/services/seo.service.mjs +0 -97
  178. package/esm2020/src/services/theme.service.mjs +0 -43
  179. package/fesm2015/lenne.tech-ng-base-base-cms.mjs +0 -322
  180. package/fesm2015/lenne.tech-ng-base-base-cms.mjs.map +0 -1
  181. package/fesm2015/lenne.tech-ng-base-base-components.mjs +0 -2806
  182. package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +0 -1
  183. package/fesm2015/lenne.tech-ng-base-base-prototype.mjs +0 -495
  184. package/fesm2015/lenne.tech-ng-base-shared.mjs +0 -2749
  185. package/fesm2015/lenne.tech-ng-base-shared.mjs.map +0 -1
  186. package/fesm2015/lenne.tech-ng-base.mjs +0 -902
  187. package/fesm2015/lenne.tech-ng-base.mjs.map +0 -1
  188. package/fesm2020/lenne.tech-ng-base-base-components.mjs.map +0 -1
  189. package/fesm2020/lenne.tech-ng-base-base-prototype.mjs.map +0 -1
  190. package/fesm2020/lenne.tech-ng-base.mjs.map +0 -1
  191. /package/{esm2020 → esm2022}/base-cms/interfaces/base-cms-module-config.interface.mjs +0 -0
  192. /package/{esm2020 → esm2022}/base-cms/lenne.tech-ng-base-base-cms.mjs +0 -0
  193. /package/{esm2020 → esm2022}/base-cms/public-api.mjs +0 -0
  194. /package/{esm2020 → esm2022}/base-components/lenne.tech-ng-base-base-components.mjs +0 -0
  195. /package/{esm2020 → esm2022}/base-components/public-api.mjs +0 -0
  196. /package/{esm2020 → esm2022}/base-prototype/lenne.tech-ng-base-base-prototype.mjs +0 -0
  197. /package/{esm2020 → esm2022}/base-prototype/public-api.mjs +0 -0
  198. /package/{esm2020 → esm2022}/lenne.tech-ng-base.mjs +0 -0
  199. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  200. /package/{esm2020 → esm2022}/shared/classes/helper.class.mjs +0 -0
  201. /package/{esm2020 → esm2022}/shared/classes/standard.class.mjs +0 -0
  202. /package/{esm2020 → esm2022}/shared/decorators/debounce.decorator.mjs +0 -0
  203. /package/{esm2020 → esm2022}/shared/enums/comparison-operator.enum.mjs +0 -0
  204. /package/{esm2020 → esm2022}/shared/enums/graphql-request-type.enum.mjs +0 -0
  205. /package/{esm2020 → esm2022}/shared/enums/logical-operator.enum.mjs +0 -0
  206. /package/{esm2020 → esm2022}/shared/enums/skeleton-type.enum.mjs +0 -0
  207. /package/{esm2020 → esm2022}/shared/enums/sort-order.enum.mjs +0 -0
  208. /package/{esm2020 → esm2022}/shared/enums/toast-type.enum.mjs +0 -0
  209. /package/{esm2020 → esm2022}/shared/functions/ws-client.function.mjs +0 -0
  210. /package/{esm2020 → esm2022}/shared/interfaces/base-module-config.interface.mjs +0 -0
  211. /package/{esm2020 → esm2022}/shared/interfaces/breadcrumb.interface.mjs +0 -0
  212. /package/{esm2020 → esm2022}/shared/interfaces/can-component-deactivate.interface.mjs +0 -0
  213. /package/{esm2020 → esm2022}/shared/interfaces/cms-enum-values.interface.mjs +0 -0
  214. /package/{esm2020 → esm2022}/shared/interfaces/cms-field-config.interface.mjs +0 -0
  215. /package/{esm2020 → esm2022}/shared/interfaces/cms-model-config.interface.mjs +0 -0
  216. /package/{esm2020 → esm2022}/shared/interfaces/cms-table-field.interface.mjs +0 -0
  217. /package/{esm2020 → esm2022}/shared/interfaces/combined-filter-input.interface.mjs +0 -0
  218. /package/{esm2020 → esm2022}/shared/interfaces/compress-options.interface.mjs +0 -0
  219. /package/{esm2020 → esm2022}/shared/interfaces/cropping-options.interface.mjs +0 -0
  220. /package/{esm2020 → esm2022}/shared/interfaces/field-object.interface.mjs +0 -0
  221. /package/{esm2020 → esm2022}/shared/interfaces/field.interface.mjs +0 -0
  222. /package/{esm2020 → esm2022}/shared/interfaces/filter-input.interface.mjs +0 -0
  223. /package/{esm2020 → esm2022}/shared/interfaces/find-args.interface.mjs +0 -0
  224. /package/{esm2020 → esm2022}/shared/interfaces/graphql-crud-type.interface.mjs +0 -0
  225. /package/{esm2020 → esm2022}/shared/interfaces/graphql-fields-object.interface.mjs +0 -0
  226. /package/{esm2020 → esm2022}/shared/interfaces/graphql-options.interface.mjs +0 -0
  227. /package/{esm2020 → esm2022}/shared/interfaces/graphql-plus-options.interfacen.mjs +0 -0
  228. /package/{esm2020 → esm2022}/shared/interfaces/graphql-type-collection.interface.mjs +0 -0
  229. /package/{esm2020 → esm2022}/shared/interfaces/login-config.interface.mjs +0 -0
  230. /package/{esm2020 → esm2022}/shared/interfaces/single-filter-input.interface.mjs +0 -0
  231. /package/{esm2020 → esm2022}/shared/interfaces/sort-input.interface.mjs +0 -0
  232. /package/{esm2020 → esm2022}/shared/interfaces/time-components.interface.mjs +0 -0
  233. /package/{esm2020 → esm2022}/shared/interfaces/toast.interface.mjs +0 -0
  234. /package/{esm2020 → esm2022}/shared/lenne.tech-ng-base-shared.mjs +0 -0
  235. /package/{esm2020 → esm2022}/shared/public-api.mjs +0 -0
  236. /package/{esm2020 → esm2022}/shared/types/graphql-fields.type.mjs +0 -0
  237. /package/{esm2020 → esm2022}/shared/types/storage.type.mjs +0 -0
  238. /package/{esm2020 → esm2022}/shared/validators/email.validator.mjs +0 -0
  239. /package/{esm2020 → esm2022}/shared/validators/match.validator.mjs +0 -0
  240. /package/{esm2020 → esm2022}/shared/validators/secure-password.validator.mjs +0 -0
  241. /package/{esm2020 → esm2022}/src/decorators/auto-unsubscribe.decorator.mjs +0 -0
@@ -1,102 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { Helper } from '../classes/helper.class';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * Image service
6
- */
7
- export class ImageService {
8
- /**
9
- * Preaload images (for lazy handling)
10
- *
11
- * @param options
12
- * @protected
13
- */
14
- preLoadImages(options) {
15
- // Init configuration
16
- const config = {
17
- doneFunnction: undefined,
18
- elements: document,
19
- regExp: undefined,
20
- ...options,
21
- };
22
- return new Promise((resolve) => {
23
- // Convert element(s) into array
24
- if (!Array.isArray(config.elements)) {
25
- // NodeList or HTMLCollection
26
- if (Helper.isNodeList(config.elements)) {
27
- config.elements = Array.from(config.elements);
28
- }
29
- // Single element
30
- else {
31
- config.elements = [config.elements];
32
- }
33
- }
34
- // Init loading
35
- const promises = [];
36
- // Get all images
37
- let images = [];
38
- config.elements.forEach((element) => {
39
- images = images.concat(Array.from(element.getElementsByTagName('img')));
40
- });
41
- // Prepare images
42
- for (let image of images) {
43
- const src = image.getAttribute('src');
44
- // Check if changes are necessary and possible
45
- if ((image.complete && image.naturalHeight !== 0) || // already laoded
46
- !src || // Image has no src
47
- config.regExp?.test(src) // Test if src matches regular expression
48
- ) {
49
- continue;
50
- }
51
- // Replace lazy loading image with immediately loading image
52
- if (image.getAttribute('loading') === 'lazy') {
53
- const newImage = document.createElement('img');
54
- Array.from(image.attributes).forEach((attr) => {
55
- if (attr.name !== 'loading' && attr.name !== 'src') {
56
- newImage.setAttribute(attr.name, attr.value);
57
- }
58
- });
59
- image.replaceWith(newImage);
60
- image = newImage;
61
- }
62
- // Wait for laoding
63
- promises.push(this.loadImage(image, src));
64
- }
65
- // Wait until all images loaded
66
- Promise.all(promises)
67
- .catch((e) => console.error('Error during image loading', e))
68
- .finally(async () => {
69
- // Return result
70
- let result;
71
- if (config.doneFunnction) {
72
- result = await config.doneFunction();
73
- }
74
- resolve(result);
75
- });
76
- });
77
- }
78
- /**
79
- * Load image for image element
80
- *
81
- * @param imageElement
82
- * @param src
83
- * @protected
84
- */
85
- async loadImage(imageElement, src) {
86
- src = src || imageElement.src;
87
- return new Promise((resolve, reject) => {
88
- imageElement.onload = () => resolve(imageElement);
89
- imageElement.onerror = reject;
90
- imageElement.src = src;
91
- });
92
- }
93
- }
94
- ImageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: ImageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
95
- ImageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: ImageService, providedIn: 'root' });
96
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: ImageService, decorators: [{
97
- type: Injectable,
98
- args: [{
99
- providedIn: 'root',
100
- }]
101
- }] });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWJhc2Uvc2hhcmVkL3NlcnZpY2VzL2ltYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBRWpEOztHQUVHO0FBSUgsTUFBTSxPQUFPLFlBQVk7SUFDdkI7Ozs7O09BS0c7SUFDSSxhQUFhLENBQUMsT0FZcEI7UUFDQyxxQkFBcUI7UUFDckIsTUFBTSxNQUFNLEdBQUc7WUFDYixhQUFhLEVBQUUsU0FBUztZQUN4QixRQUFRLEVBQUUsUUFBUTtZQUNsQixNQUFNLEVBQUUsU0FBUztZQUNqQixHQUFHLE9BQU87U0FDWCxDQUFDO1FBRUYsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzdCLGdDQUFnQztZQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ25DLDZCQUE2QjtnQkFDN0IsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDdEMsTUFBTSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFxQyxDQUFjLENBQUM7aUJBQ3pGO2dCQUVELGlCQUFpQjtxQkFDWjtvQkFDSCxNQUFNLENBQUMsUUFBUSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBYyxDQUFDO2lCQUNsRDthQUNGO1lBRUQsZUFBZTtZQUNmLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUVwQixpQkFBaUI7WUFDakIsSUFBSSxNQUFNLEdBQXVCLEVBQUUsQ0FBQztZQUNwQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9B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QUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEhlbHBlciB9IGZyb20gJy4uL2NsYXNzZXMvaGVscGVyLmNsYXNzJztcblxuLyoqXG4gKiBJbWFnZSBzZXJ2aWNlXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBJbWFnZVNlcnZpY2Uge1xuICAvKipcbiAgICogUHJlYWxvYWQgaW1hZ2VzIChmb3IgbGF6eSBoYW5kbGluZylcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHVibGljIHByZUxvYWRJbWFnZXMob3B0aW9ucz86IHtcbiAgICBkb25lRnVuY3Rpb24/OiAoKSA9PiBQcm9taXNlPGFueT4gfCBhbnkgfCB2b2lkO1xuICAgIGVsZW1lbnRzPzpcbiAgICAgIHwgRWxlbWVudFxuICAgICAgfCBFbGVtZW50W11cbiAgICAgIHwgSFRNTENvbGxlY3Rpb25PZjxFbGVtZW50PlxuICAgICAgfCBOb2RlXG4gICAgICB8IE5vZGVMaXN0XG4gICAgICB8IERvY3VtZW50XG4gICAgICB8IEhUTUxFbGVtZW50XG4gICAgICB8IEhUTUxFbGVtZW50W107XG4gICAgcmVnRXhwPzogUmVnRXhwO1xuICB9KTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBJbml0IGNvbmZpZ3VyYXRpb25cbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBkb25lRnVubmN0aW9uOiB1bmRlZmluZWQsXG4gICAgICBlbGVtZW50czogZG9jdW1lbnQsXG4gICAgICByZWdFeHA6IHVuZGVmaW5lZCxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgLy8gQ29udmVydCBlbGVtZW50KHMpIGludG8gYXJyYXlcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb25maWcuZWxlbWVudHMpKSB7XG4gICAgICAgIC8vIE5vZGVMaXN0IG9yIEhUTUxDb2xsZWN0aW9uXG4gICAgICAgIGlmIChIZWxwZXIuaXNOb2RlTGlzdChjb25maWcuZWxlbWVudHMpKSB7XG4gICAgICAgICAgY29uZmlnLmVsZW1lbnRzID0gQXJyYXkuZnJvbShjb25maWcuZWxlbWVudHMgYXMgSFRNTENvbGxlY3Rpb24gfCBOb2RlTGlzdCkgYXMgRWxlbWVudFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2luZ2xlIGVsZW1lbnRcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uZmlnLmVsZW1lbnRzID0gW2NvbmZpZy5lbGVtZW50c10gYXMgRWxlbWVudFtdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEluaXQgbG9hZGluZ1xuICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcblxuICAgICAgLy8gR2V0IGFsbCBpbWFnZXNcbiAgICAgIGxldCBpbWFnZXM6IEhUTUxJbWFnZUVsZW1lbnRbXSA9IFtdO1xuICAgICAgY29uZmlnLmVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgaW1hZ2VzID0gaW1hZ2VzLmNvbmNhdChBcnJheS5mcm9tKGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpKSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gUHJlcGFyZSBpbWFnZXNcbiAgICAgIGZvciAobGV0IGltYWdlIG9mIGltYWdlcykge1xuICAgICAgICBjb25zdCBzcmMgPSBpbWFnZS5nZXRBdHRyaWJ1dGUoJ3NyYycpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGNoYW5nZXMgYXJlIG5lY2Vzc2FyeSBhbmQgcG9zc2libGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChpbWFnZS5jb21wbGV0ZSAmJiBpbWFnZS5uYXR1cmFsSGVpZ2h0ICE9PSAwKSB8fCAvLyBhbHJlYWR5IGxhb2RlZFxuICAgICAgICAgICFzcmMgfHwgLy8gSW1hZ2UgaGFzIG5vIHNyY1xuICAgICAgICAgIGNvbmZpZy5yZWdFeHA/LnRlc3Qoc3JjKSAvLyBUZXN0IGlmIHNyYyBtYXRjaGVzIHJlZ3VsYXIgZXhwcmVzc2lvblxuICAgICAgICApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlcGxhY2UgbGF6eSBsb2FkaW5nIGltYWdlIHdpdGggaW1tZWRpYXRlbHkgbG9hZGluZyBpbWFnZVxuICAgICAgICBpZiAoaW1hZ2UuZ2V0QXR0cmlidXRlKCdsb2FkaW5nJykgPT09ICdsYXp5Jykge1xuICAgICAgICAgIGNvbnN0IG5ld0ltYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgICAgQXJyYXkuZnJvbShpbWFnZS5hdHRyaWJ1dGVzKS5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXR0ci5uYW1lICE9PSAnbG9hZGluZycgJiYgYXR0ci5uYW1lICE9PSAnc3JjJykge1xuICAgICAgICAgICAgICBuZXdJbWFnZS5zZXRBdHRyaWJ1dGUoYXR0ci5uYW1lLCBhdHRyLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpbWFnZS5yZXBsYWNlV2l0aChuZXdJbWFnZSk7XG4gICAgICAgICAgaW1hZ2UgPSBuZXdJbWFnZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdhaXQgZm9yIGxhb2RpbmdcbiAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmxvYWRJbWFnZShpbWFnZSwgc3JjKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdhaXQgdW50aWwgYWxsIGltYWdlcyBsb2FkZWRcbiAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgICAuY2F0Y2goKGUpID0+IGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyBpbWFnZSBsb2FkaW5nJywgZSkpXG4gICAgICAgIC5maW5hbGx5KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAvLyBSZXR1cm4gcmVzdWx0XG4gICAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgICBpZiAoY29uZmlnLmRvbmVGdW5uY3Rpb24pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGNvbmZpZy5kb25lRnVuY3Rpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGltYWdlIGZvciBpbWFnZSBlbGVtZW50XG4gICAqXG4gICAqIEBwYXJhbSBpbWFnZUVsZW1lbnRcbiAgICogQHBhcmFtIHNyY1xuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZEltYWdlKGltYWdlRWxlbWVudDogSFRNTEltYWdlRWxlbWVudCwgc3JjPzogc3RyaW5nKSB7XG4gICAgc3JjID0gc3JjIHx8IGltYWdlRWxlbWVudC5zcmM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGltYWdlRWxlbWVudC5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKGltYWdlRWxlbWVudCk7XG4gICAgICBpbWFnZUVsZW1lbnQub25lcnJvciA9IHJlamVjdDtcbiAgICAgIGltYWdlRWxlbWVudC5zcmMgPSBzcmM7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,79 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { BehaviorSubject, Observable } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * Loader service for loading indication
6
- */
7
- export class LoaderService {
8
- constructor() {
9
- this.isLoading = new BehaviorSubject(false);
10
- }
11
- /**
12
- * Start loading manually
13
- */
14
- start() {
15
- if (!this.isLoading.value) {
16
- this.isLoading.next(true);
17
- this.lastStartTime = new Date().getTime();
18
- }
19
- }
20
- /**
21
- * Stop loading manually
22
- *
23
- * @param duration
24
- */
25
- stop(duration = 1800) {
26
- const diffMs = new Date().getTime() - this.lastStartTime;
27
- if (diffMs >= duration) {
28
- this.isLoading.next(false);
29
- return;
30
- }
31
- setTimeout(() => {
32
- this.isLoading.next(false);
33
- }, duration - diffMs);
34
- }
35
- /**
36
- * Get loader as observable
37
- */
38
- getAsObservable() {
39
- return this.isLoading.asObservable();
40
- }
41
- /**
42
- * Load until observable done
43
- *
44
- * @param observable
45
- * @param duration
46
- */
47
- loadUntilObservable(observable, duration = 1800) {
48
- return new Observable((subscriber) => {
49
- const startFrom = new Date().getTime();
50
- this.isLoading.next(true);
51
- observable.subscribe({
52
- next: (value) => {
53
- const diffMs = new Date().getTime() - startFrom;
54
- if (diffMs >= duration) {
55
- subscriber.next(value);
56
- subscriber.complete();
57
- this.isLoading.next(false);
58
- return;
59
- }
60
- setTimeout(() => {
61
- subscriber.next(value);
62
- subscriber.complete();
63
- this.isLoading.next(false);
64
- }, duration - diffMs);
65
- },
66
- error: (error) => subscriber.error(error),
67
- });
68
- });
69
- }
70
- }
71
- LoaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: LoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
72
- LoaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: LoaderService, providedIn: 'root' });
73
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: LoaderService, decorators: [{
74
- type: Injectable,
75
- args: [{
76
- providedIn: 'root',
77
- }]
78
- }] });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL3NoYXJlZC9zZXJ2aWNlcy9sb2FkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUVuRDs7R0FFRztBQUlILE1BQU0sT0FBTyxhQUFhO0lBSDFCO1FBSUUsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0tBb0VqRDtJQWpFQzs7T0FFRztJQUNILEtBQUs7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUU7WUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzNDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLENBQUMsV0FBbUIsSUFBSTtRQUMxQixNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFFekQsSUFBSSxNQUFNLElBQUksUUFBUSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLE9BQU87U0FDUjtRQUVELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDLEVBQUUsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsbUJBQW1CLENBQUMsVUFBK0IsRUFBRSxXQUFtQixJQUFJO1FBQzFFLE9BQU8sSUFBSSxVQUFVLENBQVUsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUM1QyxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFCLFVBQVUsQ0FBQyxTQUFTLENBQUM7Z0JBQ25CLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNkLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsU0FBUyxDQUFDO29CQUNoRCxJQUFJLE1BQU0sSUFBSSxRQUFRLEVBQUU7d0JBQ3RCLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ3ZCLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzNCLE9BQU87cUJBQ1I7b0JBRUQsVUFBVSxDQUFDLEdBQUcsRUFBRTt3QkFDZCxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUN2QixVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM3QixDQUFDLEVBQUUsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QixDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7YUFDMUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzswR0FwRVUsYUFBYTs4R0FBYixhQUFhLGNBRlosTUFBTTsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIExvYWRlciBzZXJ2aWNlIGZvciBsb2FkaW5nIGluZGljYXRpb25cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIExvYWRlclNlcnZpY2Uge1xuICBpc0xvYWRpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBsYXN0U3RhcnRUaW1lITogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTdGFydCBsb2FkaW5nIG1hbnVhbGx5XG4gICAqL1xuICBzdGFydCgpIHtcbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nLnZhbHVlKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZy5uZXh0KHRydWUpO1xuICAgICAgdGhpcy5sYXN0U3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgbG9hZGluZyBtYW51YWxseVxuICAgKlxuICAgKiBAcGFyYW0gZHVyYXRpb25cbiAgICovXG4gIHN0b3AoZHVyYXRpb246IG51bWJlciA9IDE4MDApIHtcbiAgICBjb25zdCBkaWZmTXMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHRoaXMubGFzdFN0YXJ0VGltZTtcblxuICAgIGlmIChkaWZmTXMgPj0gZHVyYXRpb24pIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pc0xvYWRpbmcubmV4dChmYWxzZSk7XG4gICAgfSwgZHVyYXRpb24gLSBkaWZmTXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBsb2FkZXIgYXMgb2JzZXJ2YWJsZVxuICAgKi9cbiAgZ2V0QXNPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmlzTG9hZGluZy5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHVudGlsIG9ic2VydmFibGUgZG9uZVxuICAgKlxuICAgKiBAcGFyYW0gb2JzZXJ2YWJsZVxuICAgKiBAcGFyYW0gZHVyYXRpb25cbiAgICovXG4gIGxvYWRVbnRpbE9ic2VydmFibGUob2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTx1bmtub3duPiwgZHVyYXRpb246IG51bWJlciA9IDE4MDApOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8dW5rbm93bj4oKHN1YnNjcmliZXIpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0RnJvbSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgdGhpcy5pc0xvYWRpbmcubmV4dCh0cnVlKTtcbiAgICAgIG9ic2VydmFibGUuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGlmZk1zID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydEZyb207XG4gICAgICAgICAgaWYgKGRpZmZNcyA+PSBkdXJhdGlvbikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xuICAgICAgICAgIH0sIGR1cmF0aW9uIC0gZGlmZk1zKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4gc3Vic2NyaWJlci5lcnJvcihlcnJvciksXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,36 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { NavigationEnd } from '@angular/router';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/router";
5
- import * as i2 from "@angular/common";
6
- export class NavigationService {
7
- constructor(router, location) {
8
- this.router = router;
9
- this.location = location;
10
- this.history = [];
11
- this.router.events.subscribe((event) => {
12
- if (event instanceof NavigationEnd) {
13
- this.history.push(event.urlAfterRedirects);
14
- }
15
- });
16
- }
17
- /**
18
- * If the history stack is empty, navigate to the home page, otherwise go back to the previous page
19
- */
20
- back() {
21
- this.history.pop();
22
- if (this.history.length > 0) {
23
- this.location.back();
24
- }
25
- else {
26
- this.router.navigateByUrl('/');
27
- }
28
- }
29
- }
30
- NavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: NavigationService, deps: [{ token: i1.Router }, { token: i2.Location }], target: i0.ɵɵFactoryTarget.Injectable });
31
- NavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: NavigationService, providedIn: 'root' });
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: NavigationService, decorators: [{
33
- type: Injectable,
34
- args: [{ providedIn: 'root' }]
35
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.Location }]; } });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9zaGFyZWQvc2VydmljZXMvbmF2aWdhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFVLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBR3hELE1BQU0sT0FBTyxpQkFBaUI7SUFHNUIsWUFBb0IsTUFBYyxFQUFVLFFBQWtCO1FBQTFDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRnRELFlBQU8sR0FBYSxFQUFFLENBQUM7UUFHN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDckMsSUFBSSxLQUFLLFlBQVksYUFBYSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUM1QztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSTtRQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN0QjthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDaEM7SUFDSCxDQUFDOzs4R0FyQlUsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FESixNQUFNOzJGQUNuQixpQkFBaUI7a0JBRDdCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUm91dGVyLCBOYXZpZ2F0aW9uRW5kIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBOYXZpZ2F0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgaGlzdG9yeTogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbikge1xuICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGV2ZW50LnVybEFmdGVyUmVkaXJlY3RzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgaGlzdG9yeSBzdGFjayBpcyBlbXB0eSwgbmF2aWdhdGUgdG8gdGhlIGhvbWUgcGFnZSwgb3RoZXJ3aXNlIGdvIGJhY2sgdG8gdGhlIHByZXZpb3VzIHBhZ2VcbiAgICovXG4gIGJhY2soKTogdm9pZCB7XG4gICAgdGhpcy5oaXN0b3J5LnBvcCgpO1xuICAgIGlmICh0aGlzLmhpc3RvcnkubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,179 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core';
2
- import { BASE_MODULE_CONFIG } from '../interfaces/base-module-config.interface';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/router";
5
- import * as i2 from "./image.service";
6
- /**
7
- * Scroll service for autoscroll to specific fragments
8
- */
9
- export class ScrollService {
10
- /**
11
- * Initializer
12
- */
13
- constructor(router, moduleConfig, imageService) {
14
- this.router = router;
15
- this.moduleConfig = moduleConfig;
16
- this.imageService = imageService;
17
- /**
18
- * Is a scroll listener set
19
- *
20
- * @protected
21
- */
22
- this.scrollListener = false;
23
- /**
24
- * Current scroll timer;
25
- *
26
- * @protected
27
- */
28
- this.scrollTimer = -1;
29
- const config = {
30
- scrollDetectionOffset: 200,
31
- scrollOffset: 100,
32
- scrollSamplingRate: 100,
33
- ...moduleConfig,
34
- };
35
- this.detectionOffset = config.scrollDetectionOffset;
36
- this.scrollOffset = config.scrollOffset;
37
- this.scrollSamplingRate = config.scrollSamplingRate;
38
- }
39
- /**
40
- * Scroll to structureElement with specific ID
41
- */
42
- async scrollTo(id, options = {}) {
43
- // Prepare config
44
- const config = {
45
- checkUrl: false,
46
- loadImagesBefore: true,
47
- resetStyles: false,
48
- setOverflow: true,
49
- stopPropagation: true,
50
- ...options,
51
- };
52
- // Check current URL
53
- if (config.checkUrl && this.router.url !== '/' && !this.router.url.startsWith('/#')) {
54
- await this.router.navigate(['/'], { fragment: id });
55
- return !config.stopPropagation;
56
- }
57
- // Check if target element exits
58
- const el = document.getElementById(id);
59
- if (!el) {
60
- console.error('Missing scroll element with ID:', id);
61
- return !config.stopPropagation;
62
- }
63
- // Check if body overflow is visible
64
- // This is necessary for scroll handling
65
- const body = document.querySelector('body');
66
- let undoOverflowChanges = false;
67
- const scrollBodyStyles = JSON.parse(JSON.stringify(window.getComputedStyle(body)));
68
- if (config.setOverflow && (scrollBodyStyles.overflowX !== 'visible' || scrollBodyStyles.overflowY !== 'visible')) {
69
- // Set body overflow to visible
70
- console.warn('Style of body element for overflowX and overflowY will be set to "visible" for scrolling!');
71
- body.style.overflowX = 'visible';
72
- body.style.overflowY = 'visible';
73
- undoOverflowChanges = true;
74
- }
75
- // Load images before scrolling (once)
76
- if (config.loadImagesBefore) {
77
- await this.imageService.preLoadImages();
78
- }
79
- // Get get bounding rect of target element
80
- const cords = el.getBoundingClientRect();
81
- // Scroll to element
82
- window.scrollBy({ top: cords.top - this.scrollOffset, behavior: 'smooth' });
83
- await this.scrollDone({
84
- doneFunction: () => {
85
- // Undo changes
86
- if (undoOverflowChanges && config.resetStyles) {
87
- body.style.overflowX = scrollBodyStyles.overflowX;
88
- body.style.overflowY = scrollBodyStyles.overflowY;
89
- console.warn('Original style of body element for overflowX and overflowY is set.');
90
- }
91
- },
92
- });
93
- // Return stop propagation configuration
94
- return !config.stopPropagation;
95
- }
96
- /**
97
- * Get last active structureElement
98
- */
99
- getLastActiveElement(list) {
100
- const currentScrollPosition = window.scrollY;
101
- const elementsWithId = document.querySelectorAll('[id]');
102
- let lastId = null;
103
- let lastPosition = 0 - this.detectionOffset - 1;
104
- elementsWithId.forEach((element) => {
105
- const cords = element.getBoundingClientRect();
106
- const top = cords.top + window.pageYOffset - this.detectionOffset;
107
- if ((!list || !list.length || list.includes(element.id)) && // In list
108
- top < currentScrollPosition && // In active area
109
- lastPosition < top // Higher than the last one
110
- ) {
111
- lastId = element.id;
112
- lastPosition = top;
113
- }
114
- });
115
- return lastId;
116
- }
117
- /**
118
- * Check if ID is active
119
- */
120
- isActive(id, list, isFirst) {
121
- const lastActiveElement = this.getLastActiveElement(list);
122
- return id === lastActiveElement || (lastActiveElement === null && isFirst);
123
- }
124
- /**
125
- * Scroll done promise
126
- */
127
- async scrollDone(options = {}) {
128
- // Init configuration
129
- const config = {
130
- doneFunction: undefined,
131
- ...options,
132
- };
133
- // Wait for scroll done
134
- await this.scrollDoneDetection();
135
- // Get result
136
- if (config.doneFunction) {
137
- return config.doneFunction();
138
- }
139
- }
140
- /**
141
- * Scroll done detecton
142
- *
143
- * @protected
144
- */
145
- scrollDoneDetection() {
146
- // Return current scroll promise (Singelton)
147
- if (this.scrollPromise) {
148
- return this.scrollPromise;
149
- }
150
- // Create current scroll promise
151
- this.scrollPromise = new Promise((resolve) => {
152
- this.scrollPromiseResolve = resolve;
153
- if (this.scrollTimer !== -1) {
154
- window.clearTimeout(this.scrollTimer);
155
- }
156
- this.scrollTimer = window.setTimeout(() => {
157
- window.removeEventListener('scroll', this.scrollDoneDetection.bind(this));
158
- this.scrollPromise = undefined;
159
- resolve();
160
- }, this.scrollSamplingRate);
161
- });
162
- // Lisitening to scroll event;
163
- window.addEventListener('scroll', this.scrollDoneDetection.bind(this));
164
- // Return promise
165
- return this.scrollPromise;
166
- }
167
- }
168
- ScrollService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: ScrollService, deps: [{ token: i1.Router }, { token: BASE_MODULE_CONFIG }, { token: i2.ImageService }], target: i0.ɵɵFactoryTarget.Injectable });
169
- ScrollService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: ScrollService, providedIn: 'root' });
170
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: ScrollService, decorators: [{
171
- type: Injectable,
172
- args: [{
173
- providedIn: 'root',
174
- }]
175
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: undefined, decorators: [{
176
- type: Inject,
177
- args: [BASE_MODULE_CONFIG]
178
- }] }, { type: i2.ImageService }]; } });
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL3NoYXJlZC9zZXJ2aWNlcy9zY3JvbGwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQW9CLE1BQU0sNENBQTRDLENBQUM7Ozs7QUFHbEc7O0dBRUc7QUFJSCxNQUFNLE9BQU8sYUFBYTtJQTZDeEI7O09BRUc7SUFDSCxZQUNZLE1BQWMsRUFDYyxZQUE4QixFQUMxRCxZQUEwQjtRQUYxQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2MsaUJBQVksR0FBWixZQUFZLENBQWtCO1FBQzFELGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBcEN0Qzs7OztXQUlHO1FBQ08sbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFakM7Ozs7V0FJRztRQUNPLGdCQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUEwQnpCLE1BQU0sTUFBTSxHQUFHO1lBQ2IscUJBQXFCLEVBQUUsR0FBRztZQUMxQixZQUFZLEVBQUUsR0FBRztZQUNqQixrQkFBa0IsRUFBRSxHQUFHO1lBQ3ZCLEdBQUcsWUFBWTtTQUNoQixDQUFDO1FBRUYsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7UUFDcEQsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUM7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FDWixFQUFVLEVBQ1YsVUFNSSxFQUFFO1FBRU4saUJBQWlCO1FBQ2pCLE1BQU0sTUFBTSxHQUFHO1lBQ2IsUUFBUSxFQUFFLEtBQUs7WUFDZixnQkFBZ0IsRUFB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O1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDOzswR0ExTlUsYUFBYSx3Q0FrRGQsa0JBQWtCOzhHQWxEakIsYUFBYSxjQUZaLE1BQU07MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQW1ESSxNQUFNOzJCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJBU0VfTU9EVUxFX0NPTkZJRywgQmFzZU1vZHVsZUNvbmZpZyB9IGZyb20gJy4uL2ludGVyZmFjZXMvYmFzZS1tb2R1bGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJbWFnZVNlcnZpY2UgfSBmcm9tICcuL2ltYWdlLnNlcnZpY2UnO1xuXG4vKipcbiAqIFNjcm9sbCBzZXJ2aWNlIGZvciBhdXRvc2Nyb2xsIHRvIHNwZWNpZmljIGZyYWdtZW50c1xuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2Nyb2xsU2VydmljZSB7XG4gIC8qKlxuICAgKiBDdXJyZW50IHNjcm9sbCBwcm9taXNlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzY3JvbGxQcm9taXNlOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlIGZ1bmN0aW9uIG9mIGN1cnJlbnQgc2Nyb2xsIHByb21pc2VcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHNjcm9sbFByb21pc2VSZXNvbHZlOiAodmFsdWU6IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPikgPT4gdm9pZDtcblxuICAvKipcbiAgICogSXMgYSBzY3JvbGwgbGlzdGVuZXIgc2V0XG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzY3JvbGxMaXN0ZW5lciA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBDdXJyZW50IHNjcm9sbCB0aW1lcjtcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHNjcm9sbFRpbWVyID0gLTE7XG5cbiAgLyoqXG4gICAqIFNjcm9sbCBvZmZzZXRcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBzY3JvbGxPZmZzZXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogRGV0ZWN0aW9uIG9mZnNldFxuICAgKiBTaG91bGQgYmUgPj0gc2Nyb2xsT2Zmc2V0XG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGV0ZWN0aW9uT2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNhbXBsaW5nIHJhdGUgZm9yIHNjcm9sbCBkb25lIGRldGVjdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNjcm9sbFNhbXBsaW5nUmF0ZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplclxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxuICAgIEBJbmplY3QoQkFTRV9NT0RVTEVfQ09ORklHKSBwcm90ZWN0ZWQgbW9kdWxlQ29uZmlnOiBCYXNlTW9kdWxlQ29uZmlnLFxuICAgIHByb3RlY3RlZCBpbWFnZVNlcnZpY2U6IEltYWdlU2VydmljZVxuICApIHtcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBzY3JvbGxEZXRlY3Rpb25PZmZzZXQ6IDIwMCxcbiAgICAgIHNjcm9sbE9mZnNldDogMTAwLFxuICAgICAgc2Nyb2xsU2FtcGxpbmdSYXRlOiAxMDAsXG4gICAgICAuLi5tb2R1bGVDb25maWcsXG4gICAgfTtcblxuICAgIHRoaXMuZGV0ZWN0aW9uT2Zmc2V0ID0gY29uZmlnLnNjcm9sbERldGVjdGlvbk9mZnNldDtcbiAgICB0aGlzLnNjcm9sbE9mZnNldCA9IGNvbmZpZy5zY3JvbGxPZmZzZXQ7XG4gICAgdGhpcy5zY3JvbGxTYW1wbGluZ1JhdGUgPSBjb25maWcuc2Nyb2xsU2FtcGxpbmdSYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbCB0byBzdHJ1Y3R1cmVFbGVtZW50IHdpdGggc3BlY2lmaWMgSURcbiAgICovXG4gIGFzeW5jIHNjcm9sbFRvKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgY2hlY2tVcmw/OiBib29sZWFuO1xuICAgICAgbG9hZEltYWdlc0JlZm9yZT86IGJvb2xlYW47XG4gICAgICByZXNldFN0eWxlcz86IGJvb2xlYW47XG4gICAgICBzZXRPdmVyZmxvdz86IGJvb2xlYW47XG4gICAgICBzdG9wUHJvcGFnYXRpb24/OiBib29sZWFuO1xuICAgIH0gPSB7fVxuICApIHtcbiAgICAvLyBQcmVwYXJlIGNvbmZpZ1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIGNoZWNrVXJsOiBmYWxzZSxcbiAgICAgIGxvYWRJbWFnZXNCZWZvcmU6IHRydWUsXG4gICAgICByZXNldFN0eWxlczogZmFsc2UsXG4gICAgICBzZXRPdmVyZmxvdzogdHJ1ZSxcbiAgICAgIHN0b3BQcm9wYWdhdGlvbjogdHJ1ZSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIENoZWNrIGN1cnJlbnQgVVJMXG4gICAgaWYgKGNvbmZpZy5jaGVja1VybCAmJiB0aGlzLnJvdXRlci51cmwgIT09ICcvJyAmJiAhdGhpcy5yb3V0ZXIudXJsLnN0YXJ0c1dpdGgoJy8jJykpIHtcbiAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddLCB7IGZyYWdtZW50OiBpZCB9KTtcbiAgICAgIHJldHVybiAhY29uZmlnLnN0b3BQcm9wYWdhdGlvbjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0YXJnZXQgZWxlbWVudCBleGl0c1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmICghZWwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01pc3Npbmcgc2Nyb2xsIGVsZW1lbnQgd2l0aCBJRDonLCBpZCk7XG4gICAgICByZXR1cm4gIWNvbmZpZy5zdG9wUHJvcGFnYXRpb247XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgYm9keSBvdmVyZmxvdyBpcyB2aXNpYmxlXG4gICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHNjcm9sbCBoYW5kbGluZ1xuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG4gICAgbGV0IHVuZG9PdmVyZmxvd0NoYW5nZXMgPSBmYWxzZTtcbiAgICBjb25zdCBzY3JvbGxCb2R5U3R5bGVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShib2R5KSkpO1xuICAgIGlmIChjb25maWcuc2V0T3ZlcmZsb3cgJiYgKHNjcm9sbEJvZHlTdHlsZXMub3ZlcmZsb3dYICE9PSAndmlzaWJsZScgfHwgc2Nyb2xsQm9keVN0eWxlcy5vdmVyZmxvd1kgIT09ICd2aXNpYmxlJykpIHtcbiAgICAgIC8vIFNldCBib2R5IG92ZXJmbG93IHRvIHZpc2libGVcbiAgICAgIGNvbnNvbGUud2FybignU3R5bGUgb2YgYm9keSBlbGVtZW50IGZvciBvdmVyZmxvd1ggYW5kIG92ZXJmbG93WSB3aWxsIGJlIHNldCB0byBcInZpc2libGVcIiBmb3Igc2Nyb2xsaW5nIScpO1xuICAgICAgYm9keS5zdHlsZS5vdmVyZmxvd1ggPSAndmlzaWJsZSc7XG4gICAgICBib2R5LnN0eWxlLm92ZXJmbG93WSA9ICd2aXNpYmxlJztcbiAgICAgIHVuZG9PdmVyZmxvd0NoYW5nZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIExvYWQgaW1hZ2VzIGJlZm9yZSBzY3JvbGxpbmcgKG9uY2UpXG4gICAgaWYgKGNvbmZpZy5sb2FkSW1hZ2VzQmVmb3JlKSB7XG4gICAgICBhd2FpdCB0aGlzLmltYWdlU2VydmljZS5wcmVMb2FkSW1hZ2VzKCk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGdldCBib3VuZGluZyByZWN0IG9mIHRhcmdldCBlbGVtZW50XG4gICAgY29uc3QgY29yZHMgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIC8vIFNjcm9sbCB0byBlbGVtZW50XG4gICAgd2luZG93LnNjcm9sbEJ5KHsgdG9wOiBjb3Jkcy50b3AgLSB0aGlzLnNjcm9sbE9mZnNldCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgIGF3YWl0IHRoaXMuc2Nyb2xsRG9uZSh7XG4gICAgICBkb25lRnVuY3Rpb246ICgpID0+IHtcbiAgICAgICAgLy8gVW5kbyBjaGFuZ2VzXG4gICAgICAgIGlmICh1bmRvT3ZlcmZsb3dDaGFuZ2VzICYmIGNvbmZpZy5yZXNldFN0eWxlcykge1xuICAgICAgICAgIGJvZHkuc3R5bGUub3ZlcmZsb3dYID0gc2Nyb2xsQm9keVN0eWxlcy5vdmVyZmxvd1g7XG4gICAgICAgICAgYm9keS5zdHlsZS5vdmVyZmxvd1kgPSBzY3JvbGxCb2R5U3R5bGVzLm92ZXJmbG93WTtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ09yaWdpbmFsIHN0eWxlIG9mIGJvZHkgZWxlbWVudCBmb3Igb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgaXMgc2V0LicpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gUmV0dXJuIHN0b3AgcHJvcGFnYXRpb24gY29uZmlndXJhdGlvblxuICAgIHJldHVybiAhY29uZmlnLnN0b3BQcm9wYWdhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbGFzdCBhY3RpdmUgc3RydWN0dXJlRWxlbWVudFxuICAgKi9cbiAgZ2V0TGFzdEFjdGl2ZUVsZW1lbnQobGlzdD8pOiBzdHJpbmcge1xuICAgIGNvbnN0IGN1cnJlbnRTY3JvbGxQb3NpdGlvbiA9IHdpbmRvdy5zY3JvbGxZO1xuICAgIGNvbnN0IGVsZW1lbnRzV2l0aElkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkXScpO1xuICAgIGxldCBsYXN0SWQgPSBudWxsO1xuICAgIGxldCBsYXN0UG9zaXRpb24gPSAwIC0gdGhpcy5kZXRlY3Rpb25PZmZzZXQgLSAxO1xuICAgIGVsZW1lbnRzV2l0aElkLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGNvcmRzID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHRvcCA9IGNvcmRzLnRvcCArIHdpbmRvdy5wYWdlWU9mZnNldCAtIHRoaXMuZGV0ZWN0aW9uT2Zmc2V0O1xuICAgICAgaWYgKFxuICAgICAgICAoIWxpc3QgfHwgIWxpc3QubGVuZ3RoIHx8IGxpc3QuaW5jbHVkZXMoZWxlbWVudC5pZCkpICYmIC8vIEluIGxpc3RcbiAgICAgICAgdG9wIDwgY3VycmVudFNjcm9sbFBvc2l0aW9uICYmIC8vIEluIGFjdGl2ZSBhcmVhXG4gICAgICAgIGxhc3RQb3NpdGlvbiA8IHRvcCAvLyBIaWdoZXIgdGhhbiB0aGUgbGFzdCBvbmVcbiAgICAgICkge1xuICAgICAgICBsYXN0SWQgPSBlbGVtZW50LmlkO1xuICAgICAgICBsYXN0UG9zaXRpb24gPSB0b3A7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGxhc3RJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBJRCBpcyBhY3RpdmVcbiAgICovXG4gIGlzQWN0aXZlKGlkLCBsaXN0PywgaXNGaXJzdD8pIHtcbiAgICBjb25zdCBsYXN0QWN0aXZlRWxlbWVudCA9IHRoaXMuZ2V0TGFzdEFjdGl2ZUVsZW1lbnQobGlzdCk7XG4gICAgcmV0dXJuIGlkID09PSBsYXN0QWN0aXZlRWxlbWVudCB8fCAobGFzdEFjdGl2ZUVsZW1lbnQgPT09IG51bGwgJiYgaXNGaXJzdCk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIGRvbmUgcHJvbWlzZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNjcm9sbERvbmUob3B0aW9uczogeyBkb25lRnVuY3Rpb24/OiAoKSA9PiBhbnkgfCB2b2lkIH0gPSB7fSk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gSW5pdCBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgZG9uZUZ1bmN0aW9uOiB1bmRlZmluZWQsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBXYWl0IGZvciBzY3JvbGwgZG9uZVxuICAgIGF3YWl0IHRoaXMuc2Nyb2xsRG9uZURldGVjdGlvbigpO1xuXG4gICAgLy8gR2V0IHJlc3VsdFxuICAgIGlmIChjb25maWcuZG9uZUZ1bmN0aW9uKSB7XG4gICAgICByZXR1cm4gY29uZmlnLmRvbmVGdW5jdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGwgZG9uZSBkZXRlY3RvblxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgc2Nyb2xsRG9uZURldGVjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBSZXR1cm4gY3VycmVudCBzY3JvbGwgcHJvbWlzZSAoU2luZ2VsdG9uKVxuICAgIGlmICh0aGlzLnNjcm9sbFByb21pc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjcm9sbFByb21pc2U7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGN1cnJlbnQgc2Nyb2xsIHByb21pc2VcbiAgICB0aGlzLnNjcm9sbFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5zY3JvbGxQcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICBpZiAodGhpcy5zY3JvbGxUaW1lciAhPT0gLTEpIHtcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRpbWVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2Nyb2xsVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNjcm9sbERvbmVEZXRlY3Rpb24uYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuc2Nyb2xsUHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSwgdGhpcy5zY3JvbGxTYW1wbGluZ1JhdGUpO1xuICAgIH0pO1xuXG4gICAgLy8gTGlzaXRlbmluZyB0byBzY3JvbGwgZXZlbnQ7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc2Nyb2xsRG9uZURldGVjdGlvbi5iaW5kKHRoaXMpKTtcblxuICAgIC8vIFJldHVybiBwcm9taXNlXG4gICAgcmV0dXJuIHRoaXMuc2Nyb2xsUHJvbWlzZTtcbiAgfVxufVxuIl19
@@ -1,140 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core';
2
- import { BASE_MODULE_CONFIG } from '../interfaces/base-module-config.interface';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * Storage service for local data storage
6
- */
7
- export class StorageService {
8
- /**
9
- * Initializations
10
- */
11
- constructor(moduleConfig) {
12
- this.moduleConfig = moduleConfig;
13
- /**
14
- * Storage
15
- */
16
- this.storage = null;
17
- /**
18
- * Prefix for storage keys
19
- */
20
- this.prefix = '';
21
- // Set storage
22
- const type = moduleConfig.storageType ? moduleConfig.storageType : 'local';
23
- if (type === 'session') {
24
- this.storage = sessionStorage;
25
- }
26
- else {
27
- if (localStorage) {
28
- this.storage = localStorage;
29
- }
30
- else {
31
- this.storage = null;
32
- }
33
- }
34
- // Set prefix
35
- this.prefix = '';
36
- if (moduleConfig.prefix) {
37
- this.prefix += moduleConfig.prefix + '_';
38
- }
39
- if (moduleConfig.version) {
40
- this.prefix += moduleConfig.version + '_';
41
- }
42
- }
43
- /**
44
- * Save itemKeys
45
- *
46
- * If you want to save one item, use itemKeys and value parameters like these:
47
- * save('KEY_OF_THE_ITEM', ITEM)
48
- *
49
- * If you want to save multiple items, use itemKeys only (value parameter will be ignored):
50
- * save({'KEY_OF_ITEM_1': ITEM_1, 'KEY_OF_ITEM_2': ITEM_2, ...})
51
- */
52
- save(itemKeys, value) {
53
- // Check local storage
54
- if (!this.storage) {
55
- return false;
56
- }
57
- // Check item keys and value
58
- if (!itemKeys ||
59
- (typeof itemKeys === 'object' && !Object.keys(itemKeys).length) ||
60
- (typeof itemKeys === 'string' && value === undefined)) {
61
- return false;
62
- }
63
- if (typeof itemKeys === 'object') {
64
- for (const [itemKey, itemValue] of Object.entries(itemKeys)) {
65
- this.storage.setItem(this.prefix + itemKey, JSON.stringify(itemValue));
66
- }
67
- return true;
68
- }
69
- this.storage.setItem(this.prefix + itemKeys, JSON.stringify(value));
70
- return true;
71
- }
72
- /**
73
- * Load items via key(s)
74
- */
75
- load(itemKeys) {
76
- // Check local storage
77
- if (!this.storage) {
78
- return;
79
- }
80
- // Check item keys
81
- if (!itemKeys || (Array.isArray(itemKeys) && !itemKeys.length)) {
82
- return null;
83
- }
84
- if (Array.isArray(itemKeys)) {
85
- const back = {};
86
- itemKeys.forEach((itemKey) => {
87
- const loadedItem = this.storage.getItem(this.prefix + itemKey);
88
- if (loadedItem) {
89
- back[itemKey] = JSON.parse(loadedItem);
90
- }
91
- else {
92
- back[itemKey] = null;
93
- }
94
- });
95
- return back;
96
- }
97
- let value = this.storage.getItem(this.prefix + itemKeys);
98
- if (value) {
99
- value = JSON.parse(value);
100
- }
101
- return value;
102
- }
103
- /**
104
- * Remove item from storage
105
- *
106
- * @param itemKeys keys or key to remove
107
- */
108
- remove(itemKeys) {
109
- // Check local storage
110
- if (!this.storage) {
111
- return false;
112
- }
113
- if (Array.isArray(itemKeys)) {
114
- itemKeys.forEach((key) => {
115
- this.storage.removeItem(this.prefix + key);
116
- });
117
- return true;
118
- }
119
- this.storage.removeItem(this.prefix + itemKeys);
120
- return true;
121
- }
122
- /**
123
- * Clear local storage
124
- */
125
- reset() {
126
- this.storage.clear();
127
- }
128
- }
129
- StorageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: StorageService, deps: [{ token: BASE_MODULE_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
130
- StorageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: StorageService, providedIn: 'root' });
131
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: StorageService, decorators: [{
132
- type: Injectable,
133
- args: [{
134
- providedIn: 'root',
135
- }]
136
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
137
- type: Inject,
138
- args: [BASE_MODULE_CONFIG]
139
- }] }]; } });
140
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9zaGFyZWQvc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBb0IsTUFBTSw0Q0FBNEMsQ0FBQzs7QUFFbEc7O0dBRUc7QUFJSCxNQUFNLE9BQU8sY0FBYztJQVd6Qjs7T0FFRztJQUNILFlBQWdELFlBQThCO1FBQTlCLGlCQUFZLEdBQVosWUFBWSxDQUFrQjtRQWI5RTs7V0FFRztRQUNPLFlBQU8sR0FBUSxJQUFJLENBQUM7UUFFOUI7O1dBRUc7UUFDTyxXQUFNLEdBQUcsRUFBRSxDQUFDO1FBTXBCLGNBQWM7UUFDZCxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFFM0UsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDO1NBQy9CO2FBQU07WUFDTCxJQUFJLFlBQVksRUFBRTtnQkFDaEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUM7YUFDN0I7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7YUFDckI7U0FDRjtRQUVELGFBQWE7UUFDYixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUU7WUFDdkIsSUFBSSxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztTQUMxQztRQUNELElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRTtZQUN4QixJQUFJLENBQUMs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Z0JBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQztRQUNoRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUs7UUFDVixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZCLENBQUM7OzJHQXZJVSxjQUFjLGtCQWNMLGtCQUFrQjsrR0FkM0IsY0FBYyxjQUZiLE1BQU07MkZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQWVjLE1BQU07MkJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCQVNFX01PRFVMRV9DT05GSUcsIEJhc2VNb2R1bGVDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Jhc2UtbW9kdWxlLWNvbmZpZy5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIFN0b3JhZ2Ugc2VydmljZSBmb3IgbG9jYWwgZGF0YSBzdG9yYWdlXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTdG9yYWdlU2VydmljZSB7XG4gIC8qKlxuICAgKiBTdG9yYWdlXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RvcmFnZTogYW55ID0gbnVsbDtcblxuICAvKipcbiAgICogUHJlZml4IGZvciBzdG9yYWdlIGtleXNcbiAgICovXG4gIHByb3RlY3RlZCBwcmVmaXggPSAnJztcblxuICAvKipcbiAgICogSW5pdGlhbGl6YXRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihASW5qZWN0KEJBU0VfTU9EVUxFX0NPTkZJRykgcHJpdmF0ZSBtb2R1bGVDb25maWc6IEJhc2VNb2R1bGVDb25maWcpIHtcbiAgICAvLyBTZXQgc3RvcmFnZVxuICAgIGNvbnN0IHR5cGUgPSBtb2R1bGVDb25maWcuc3RvcmFnZVR5cGUgPyBtb2R1bGVDb25maWcuc3RvcmFnZVR5cGUgOiAnbG9jYWwnO1xuXG4gICAgaWYgKHR5cGUgPT09ICdzZXNzaW9uJykge1xuICAgICAgdGhpcy5zdG9yYWdlID0gc2Vzc2lvblN0b3JhZ2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChsb2NhbFN0b3JhZ2UpIHtcbiAgICAgICAgdGhpcy5zdG9yYWdlID0gbG9jYWxTdG9yYWdlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdG9yYWdlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgcHJlZml4XG4gICAgdGhpcy5wcmVmaXggPSAnJztcbiAgICBpZiAobW9kdWxlQ29uZmlnLnByZWZpeCkge1xuICAgICAgdGhpcy5wcmVmaXggKz0gbW9kdWxlQ29uZmlnLnByZWZpeCArICdfJztcbiAgICB9XG4gICAgaWYgKG1vZHVsZUNvbmZpZy52ZXJzaW9uKSB7XG4gICAgICB0aGlzLnByZWZpeCArPSBtb2R1bGVDb25maWcudmVyc2lvbiArICdfJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBpdGVtS2V5c1xuICAgKlxuICAgKiBJZiB5b3Ugd2FudCB0byBzYXZlIG9uZSBpdGVtLCB1c2UgaXRlbUtleXMgYW5kIHZhbHVlIHBhcmFtZXRlcnMgbGlrZSB0aGVzZTpcbiAgICogc2F2ZSgnS0VZX09GX1RIRV9JVEVNJywgSVRFTSlcbiAgICpcbiAgICogSWYgeW91IHdhbnQgdG8gc2F2ZSBtdWx0aXBsZSBpdGVtcywgdXNlIGl0ZW1LZXlzIG9ubHkgKHZhbHVlIHBhcmFtZXRlciB3aWxsIGJlIGlnbm9yZWQpOlxuICAgKiBzYXZlKHsnS0VZX09GX0lURU1fMSc6IElURU1fMSwgJ0tFWV9PRl9JVEVNXzInOiBJVEVNXzIsIC4uLn0pXG4gICAqL1xuICBwdWJsaWMgc2F2ZShpdGVtS2V5czogc3RyaW5nIHwgeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgdmFsdWU/OiBhbnkpOiBib29sZWFuIHtcbiAgICAvLyBDaGVjayBsb2NhbCBzdG9yYWdlXG4gICAgaWYgKCF0aGlzLnN0b3JhZ2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpdGVtIGtleXMgYW5kIHZhbHVlXG4gICAgaWYgKFxuICAgICAgIWl0ZW1LZXlzIHx8XG4gICAgICAodHlwZW9mIGl0ZW1LZXlzID09PSAnb2JqZWN0JyAmJiAhT2JqZWN0LmtleXMoaXRlbUtleXMpLmxlbmd0aCkgfHxcbiAgICAgICh0eXBlb2YgaXRlbUtleXMgPT09ICdzdHJpbmcnICYmIHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpdGVtS2V5cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGZvciAoY29uc3QgW2l0ZW1LZXksIGl0ZW1WYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaXRlbUtleXMpKSB7XG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKHRoaXMucHJlZml4ICsgaXRlbUtleSwgSlNPTi5zdHJpbmdpZnkoaXRlbVZhbHVlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnByZWZpeCArIGl0ZW1LZXlzLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgaXRlbXMgdmlhIGtleShzKVxuICAgKi9cbiAgcHVibGljIGxvYWQoaXRlbUtleXM6IHN0cmluZyB8IHN0cmluZ1tdKTogYW55IHtcbiAgICAvLyBDaGVjayBsb2NhbCBzdG9yYWdlXG4gICAgaWYgKCF0aGlzLnN0b3JhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpdGVtIGtleXNcbiAgICBpZiAoIWl0ZW1LZXlzIHx8IChBcnJheS5pc0FycmF5KGl0ZW1LZXlzKSAmJiAhaXRlbUtleXMubGVuZ3RoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbUtleXMpKSB7XG4gICAgICBjb25zdCBiYWNrID0ge307XG4gICAgICBpdGVtS2V5cy5mb3JFYWNoKChpdGVtS2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IGxvYWRlZEl0ZW0gPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnByZWZpeCArIGl0ZW1LZXkpO1xuICAgICAgICBpZiAobG9hZGVkSXRlbSkge1xuICAgICAgICAgIGJhY2tbaXRlbUtleV0gPSBKU09OLnBhcnNlKGxvYWRlZEl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJhY2tbaXRlbUtleV0gPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBiYWNrO1xuICAgIH1cblxuICAgIGxldCB2YWx1ZSA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMucHJlZml4ICsgaXRlbUtleXMpO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGl0ZW0gZnJvbSBzdG9yYWdlXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtS2V5cyBrZXlzIG9yIGtleSB0byByZW1vdmVcbiAgICovXG4gIHB1YmxpYyByZW1vdmUoaXRlbUtleXM6IHN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hlY2sgbG9jYWwgc3RvcmFnZVxuICAgIGlmICghdGhpcy5zdG9yYWdlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbUtleXMpKSB7XG4gICAgICBpdGVtS2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5wcmVmaXggKyBrZXkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnByZWZpeCArIGl0ZW1LZXlzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBsb2NhbCBzdG9yYWdlXG4gICAqL1xuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yYWdlLmNsZWFyKCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,41 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { BehaviorSubject } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- export class ToastService {
5
- constructor() {
6
- this.toastsObservables = new BehaviorSubject([]);
7
- }
8
- get toastsAsObservable() {
9
- return this.toastsObservables.asObservable();
10
- }
11
- /**
12
- * Show new toast
13
- *
14
- * @param toast
15
- * @param duration
16
- */
17
- show(toast, duration = 2300) {
18
- const value = this.toastsObservables.value;
19
- value.push(toast);
20
- this.toastsObservables.next(value);
21
- if (duration) {
22
- setTimeout(() => {
23
- const currentToasts = this.toastsObservables.value;
24
- const foundIndex = currentToasts.findIndex((e) => e.id === toast.id);
25
- if (foundIndex > -1) {
26
- currentToasts.splice(foundIndex, 1);
27
- this.toastsObservables.next(currentToasts);
28
- }
29
- }, duration);
30
- }
31
- }
32
- }
33
- ToastService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: ToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
34
- ToastService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: ToastService, providedIn: 'root' });
35
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: ToastService, decorators: [{
36
- type: Injectable,
37
- args: [{
38
- providedIn: 'root',
39
- }]
40
- }] });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWJhc2Uvc2hhcmVkL3NlcnZpY2VzL3RvYXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQU12QyxNQUFNLE9BQU8sWUFBWTtJQUh6QjtRQUlVLHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFVLEVBQUUsQ0FBQyxDQUFDO0tBNkI5RDtJQTNCQyxJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUFJLENBQUMsS0FBWSxFQUFFLFFBQVEsR0FBRyxJQUFJO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7UUFDM0MsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5DLElBQUksUUFBUSxFQUFFO1lBQ1osVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO2dCQUNuRCxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFFckUsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ25CLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUM1QztZQUNILENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNkO0lBQ0gsQ0FBQzs7eUdBN0JVLFlBQVk7NkdBQVosWUFBWSxjQUZYLE1BQU07MkZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRvYXN0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy90b2FzdC5pbnRlcmZhY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVG9hc3RTZXJ2aWNlIHtcbiAgcHJpdmF0ZSB0b2FzdHNPYnNlcnZhYmxlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VG9hc3RbXT4oW10pO1xuXG4gIGdldCB0b2FzdHNBc09ic2VydmFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9hc3RzT2JzZXJ2YWJsZXMuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBuZXcgdG9hc3RcbiAgICpcbiAgICogQHBhcmFtIHRvYXN0XG4gICAqIEBwYXJhbSBkdXJhdGlvblxuICAgKi9cbiAgc2hvdyh0b2FzdDogVG9hc3QsIGR1cmF0aW9uID0gMjMwMCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy50b2FzdHNPYnNlcnZhYmxlcy52YWx1ZTtcbiAgICB2YWx1ZS5wdXNoKHRvYXN0KTtcbiAgICB0aGlzLnRvYXN0c09ic2VydmFibGVzLm5leHQodmFsdWUpO1xuXG4gICAgaWYgKGR1cmF0aW9uKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudFRvYXN0cyA9IHRoaXMudG9hc3RzT2JzZXJ2YWJsZXMudmFsdWU7XG4gICAgICAgIGNvbnN0IGZvdW5kSW5kZXggPSBjdXJyZW50VG9hc3RzLmZpbmRJbmRleCgoZSkgPT4gZS5pZCA9PT0gdG9hc3QuaWQpO1xuXG4gICAgICAgIGlmIChmb3VuZEluZGV4ID4gLTEpIHtcbiAgICAgICAgICBjdXJyZW50VG9hc3RzLnNwbGljZShmb3VuZEluZGV4LCAxKTtcbiAgICAgICAgICB0aGlzLnRvYXN0c09ic2VydmFibGVzLm5leHQoY3VycmVudFRvYXN0cyk7XG4gICAgICAgIH1cbiAgICAgIH0sIGR1cmF0aW9uKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==