@lenne.tech/ng-base 15.0.0-beta-3 → 16.1.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 +1 -1
  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 +1 -1
  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/functions/extract-files.function.mjs +87 -0
  84. package/esm2022/src/guards/auth.guard.mjs +92 -0
  85. package/esm2022/src/guards/can-deactivate.guard.mjs +17 -0
  86. package/esm2022/src/guards/logout.guard.mjs +35 -0
  87. package/esm2022/src/pipes/date-ago.pipe.mjs +64 -0
  88. package/esm2022/src/pipes/safe-html.pipe.mjs +23 -0
  89. package/esm2022/src/services/fullscreen.service.mjs +52 -0
  90. package/esm2022/src/services/seo.service.mjs +100 -0
  91. package/esm2022/src/services/theme.service.mjs +45 -0
  92. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-cms.mjs +41 -30
  93. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-cms.mjs.map +1 -1
  94. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-components.mjs +421 -300
  95. package/fesm2022/lenne.tech-ng-base-base-components.mjs.map +1 -0
  96. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-prototype.mjs +127 -88
  97. package/fesm2022/lenne.tech-ng-base-base-prototype.mjs.map +1 -0
  98. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-shared.mjs +164 -113
  99. package/{fesm2020 → fesm2022}/lenne.tech-ng-base-shared.mjs.map +1 -1
  100. package/{fesm2020 → fesm2022}/lenne.tech-ng-base.mjs +153 -126
  101. package/fesm2022/lenne.tech-ng-base.mjs.map +1 -0
  102. package/package.json +23 -38
  103. package/src/directives/lazy-load.directive.d.ts +1 -1
  104. package/src/directives/match-height.directive.d.ts +1 -1
  105. package/src/directives/resizable.directive.d.ts +1 -1
  106. package/src/guards/auth.guard.d.ts +4 -3
  107. package/src/guards/can-deactivate.guard.d.ts +1 -2
  108. package/src/guards/logout.guard.d.ts +2 -2
  109. package/esm2020/base-cms/base-cms-routing.module.mjs +0 -32
  110. package/esm2020/base-cms/base-cms.module.mjs +0 -59
  111. package/esm2020/base-cms/pages/base-cms/base-cms.component.mjs +0 -222
  112. package/esm2020/base-components/base-components.module.mjs +0 -123
  113. package/esm2020/base-components/components/breadcrumb/breadcrumb.component.mjs +0 -18
  114. package/esm2020/base-components/components/change-password/change-password.component.mjs +0 -90
  115. package/esm2020/base-components/components/checkbox/checkbox.component.mjs +0 -31
  116. package/esm2020/base-components/components/delete-account/delete-account.component.mjs +0 -56
  117. package/esm2020/base-components/components/fab-button/fab-button.component.mjs +0 -21
  118. package/esm2020/base-components/components/input/input.component.mjs +0 -67
  119. package/esm2020/base-components/components/loading-bar/loading-bar.component.mjs +0 -35
  120. package/esm2020/base-components/components/model-form/model-form-base.component.mjs +0 -136
  121. package/esm2020/base-components/components/model-form/model-form.component.mjs +0 -564
  122. package/esm2020/base-components/components/model-form-sub/model-form-sub.component.mjs +0 -102
  123. package/esm2020/base-components/components/model-table/model-table.component.mjs +0 -456
  124. package/esm2020/base-components/components/refence-input/refence-input.component.mjs +0 -261
  125. package/esm2020/base-components/components/select/select.component.mjs +0 -54
  126. package/esm2020/base-components/components/skeleton-loader/skeleton-loader.component.mjs +0 -32
  127. package/esm2020/base-components/components/tags/tags.component.mjs +0 -218
  128. package/esm2020/base-components/components/textarea/textarea.component.mjs +0 -72
  129. package/esm2020/base-components/components/toast/toast.component.mjs +0 -68
  130. package/esm2020/base-components/components/upload-image/upload-image.component.mjs +0 -324
  131. package/esm2020/base-components/directives/back-button.directive.mjs +0 -23
  132. package/esm2020/base-components/directives/context-menu.directive.mjs +0 -108
  133. package/esm2020/base-components/directives/sort.directive.mjs +0 -57
  134. package/esm2020/base-components/directives/stop-propagation.directive.mjs +0 -23
  135. package/esm2020/base-components/pipes/ellipses.pipe.mjs +0 -22
  136. package/esm2020/base-prototype/base-prototype.module.mjs +0 -53
  137. package/esm2020/base-prototype/pages/email-verification/email-verification.component.mjs +0 -55
  138. package/esm2020/base-prototype/pages/forgot-password/forgot-password.component.mjs +0 -67
  139. package/esm2020/base-prototype/pages/login/login.component.mjs +0 -102
  140. package/esm2020/base-prototype/pages/profile/profile.component.mjs +0 -81
  141. package/esm2020/base-prototype/pages/register/register.component.mjs +0 -86
  142. package/esm2020/base-prototype/pages/set-password/set-password.component.mjs +0 -82
  143. package/esm2020/shared/classes/auth.class.mjs +0 -17
  144. package/esm2020/shared/classes/basic-user.class.mjs +0 -52
  145. package/esm2020/shared/classes/graphql-enum.class.mjs +0 -9
  146. package/esm2020/shared/classes/graphql-meta.class.mjs +0 -344
  147. package/esm2020/shared/classes/graphql-type.class.mjs +0 -17
  148. package/esm2020/shared/classes/sort.class.mjs +0 -40
  149. package/esm2020/shared/services/auth.service.mjs +0 -148
  150. package/esm2020/shared/services/breadcrumb.service.mjs +0 -68
  151. package/esm2020/shared/services/file.service.mjs +0 -84
  152. package/esm2020/shared/services/forms.service.mjs +0 -59
  153. package/esm2020/shared/services/graphql-meta.service.mjs +0 -123
  154. package/esm2020/shared/services/graphql-plus.service.mjs +0 -89
  155. package/esm2020/shared/services/graphql.service.mjs +0 -507
  156. package/esm2020/shared/services/image.service.mjs +0 -102
  157. package/esm2020/shared/services/loader.service.mjs +0 -79
  158. package/esm2020/shared/services/navigation.service.mjs +0 -36
  159. package/esm2020/shared/services/scroll.service.mjs +0 -179
  160. package/esm2020/shared/services/storage.service.mjs +0 -140
  161. package/esm2020/shared/services/toast.service.mjs +0 -41
  162. package/esm2020/shared/services/user.service.mjs +0 -155
  163. package/esm2020/shared/services/ws.service.mjs +0 -16
  164. package/esm2020/src/base.module.mjs +0 -97
  165. package/esm2020/src/directives/lazy-load.directive.mjs +0 -45
  166. package/esm2020/src/directives/match-height.directive.mjs +0 -84
  167. package/esm2020/src/directives/resizable.directive.mjs +0 -90
  168. package/esm2020/src/functions/extract-files.function.mjs +0 -84
  169. package/esm2020/src/guards/auth.guard.mjs +0 -80
  170. package/esm2020/src/guards/can-deactivate.guard.mjs +0 -16
  171. package/esm2020/src/guards/logout.guard.mjs +0 -32
  172. package/esm2020/src/pipes/date-ago.pipe.mjs +0 -65
  173. package/esm2020/src/pipes/safe-html.pipe.mjs +0 -21
  174. package/esm2020/src/services/fullscreen.service.mjs +0 -51
  175. package/esm2020/src/services/seo.service.mjs +0 -97
  176. package/esm2020/src/services/theme.service.mjs +0 -43
  177. package/fesm2015/lenne.tech-ng-base-base-cms.mjs +0 -323
  178. package/fesm2015/lenne.tech-ng-base-base-cms.mjs.map +0 -1
  179. package/fesm2015/lenne.tech-ng-base-base-components.mjs +0 -2866
  180. package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +0 -1
  181. package/fesm2015/lenne.tech-ng-base-base-prototype.mjs +0 -496
  182. package/fesm2015/lenne.tech-ng-base-base-prototype.mjs.map +0 -1
  183. package/fesm2015/lenne.tech-ng-base-shared.mjs +0 -2750
  184. package/fesm2015/lenne.tech-ng-base-shared.mjs.map +0 -1
  185. package/fesm2015/lenne.tech-ng-base.mjs +0 -905
  186. package/fesm2015/lenne.tech-ng-base.mjs.map +0 -1
  187. package/fesm2020/lenne.tech-ng-base-base-components.mjs.map +0 -1
  188. package/fesm2020/lenne.tech-ng-base-base-prototype.mjs.map +0 -1
  189. package/fesm2020/lenne.tech-ng-base.mjs.map +0 -1
  190. /package/{esm2020 → esm2022}/base-cms/interfaces/base-cms-module-config.interface.mjs +0 -0
  191. /package/{esm2020 → esm2022}/base-cms/lenne.tech-ng-base-base-cms.mjs +0 -0
  192. /package/{esm2020 → esm2022}/base-cms/public-api.mjs +0 -0
  193. /package/{esm2020 → esm2022}/base-components/lenne.tech-ng-base-base-components.mjs +0 -0
  194. /package/{esm2020 → esm2022}/base-components/public-api.mjs +0 -0
  195. /package/{esm2020 → esm2022}/base-prototype/lenne.tech-ng-base-base-prototype.mjs +0 -0
  196. /package/{esm2020 → esm2022}/base-prototype/public-api.mjs +0 -0
  197. /package/{esm2020 → esm2022}/lenne.tech-ng-base.mjs +0 -0
  198. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  199. /package/{esm2020 → esm2022}/shared/classes/helper.class.mjs +0 -0
  200. /package/{esm2020 → esm2022}/shared/classes/standard.class.mjs +0 -0
  201. /package/{esm2020 → esm2022}/shared/decorators/debounce.decorator.mjs +0 -0
  202. /package/{esm2020 → esm2022}/shared/enums/comparison-operator.enum.mjs +0 -0
  203. /package/{esm2020 → esm2022}/shared/enums/graphql-request-type.enum.mjs +0 -0
  204. /package/{esm2020 → esm2022}/shared/enums/logical-operator.enum.mjs +0 -0
  205. /package/{esm2020 → esm2022}/shared/enums/skeleton-type.enum.mjs +0 -0
  206. /package/{esm2020 → esm2022}/shared/enums/sort-order.enum.mjs +0 -0
  207. /package/{esm2020 → esm2022}/shared/enums/toast-type.enum.mjs +0 -0
  208. /package/{esm2020 → esm2022}/shared/functions/ws-client.function.mjs +0 -0
  209. /package/{esm2020 → esm2022}/shared/interfaces/base-module-config.interface.mjs +0 -0
  210. /package/{esm2020 → esm2022}/shared/interfaces/breadcrumb.interface.mjs +0 -0
  211. /package/{esm2020 → esm2022}/shared/interfaces/can-component-deactivate.interface.mjs +0 -0
  212. /package/{esm2020 → esm2022}/shared/interfaces/cms-enum-values.interface.mjs +0 -0
  213. /package/{esm2020 → esm2022}/shared/interfaces/cms-field-config.interface.mjs +0 -0
  214. /package/{esm2020 → esm2022}/shared/interfaces/cms-model-config.interface.mjs +0 -0
  215. /package/{esm2020 → esm2022}/shared/interfaces/cms-table-field.interface.mjs +0 -0
  216. /package/{esm2020 → esm2022}/shared/interfaces/combined-filter-input.interface.mjs +0 -0
  217. /package/{esm2020 → esm2022}/shared/interfaces/compress-options.interface.mjs +0 -0
  218. /package/{esm2020 → esm2022}/shared/interfaces/cropping-options.interface.mjs +0 -0
  219. /package/{esm2020 → esm2022}/shared/interfaces/field-object.interface.mjs +0 -0
  220. /package/{esm2020 → esm2022}/shared/interfaces/field.interface.mjs +0 -0
  221. /package/{esm2020 → esm2022}/shared/interfaces/filter-input.interface.mjs +0 -0
  222. /package/{esm2020 → esm2022}/shared/interfaces/find-args.interface.mjs +0 -0
  223. /package/{esm2020 → esm2022}/shared/interfaces/graphql-crud-type.interface.mjs +0 -0
  224. /package/{esm2020 → esm2022}/shared/interfaces/graphql-fields-object.interface.mjs +0 -0
  225. /package/{esm2020 → esm2022}/shared/interfaces/graphql-options.interface.mjs +0 -0
  226. /package/{esm2020 → esm2022}/shared/interfaces/graphql-plus-options.interfacen.mjs +0 -0
  227. /package/{esm2020 → esm2022}/shared/interfaces/graphql-type-collection.interface.mjs +0 -0
  228. /package/{esm2020 → esm2022}/shared/interfaces/login-config.interface.mjs +0 -0
  229. /package/{esm2020 → esm2022}/shared/interfaces/single-filter-input.interface.mjs +0 -0
  230. /package/{esm2020 → esm2022}/shared/interfaces/sort-input.interface.mjs +0 -0
  231. /package/{esm2020 → esm2022}/shared/interfaces/time-components.interface.mjs +0 -0
  232. /package/{esm2020 → esm2022}/shared/interfaces/toast.interface.mjs +0 -0
  233. /package/{esm2020 → esm2022}/shared/lenne.tech-ng-base-shared.mjs +0 -0
  234. /package/{esm2020 → esm2022}/shared/public-api.mjs +0 -0
  235. /package/{esm2020 → esm2022}/shared/types/graphql-fields.type.mjs +0 -0
  236. /package/{esm2020 → esm2022}/shared/types/storage.type.mjs +0 -0
  237. /package/{esm2020 → esm2022}/shared/validators/email.validator.mjs +0 -0
  238. /package/{esm2020 → esm2022}/shared/validators/match.validator.mjs +0 -0
  239. /package/{esm2020 → esm2022}/shared/validators/secure-password.validator.mjs +0 -0
  240. /package/{esm2020 → esm2022}/src/decorators/auto-unsubscribe.decorator.mjs +0 -0
  241. /package/{esm2020 → esm2022}/src/factories/apollo-options.factory.mjs +0 -0
@@ -22,6 +22,9 @@ import * as i1$1 from '@angular/router';
22
22
  * Reactive native file
23
23
  */
24
24
  class ReactNativeFile {
25
+ uri;
26
+ name;
27
+ type;
25
28
  constructor(uri, name, type) {
26
29
  this.uri = uri;
27
30
  this.name = name;
@@ -203,9 +206,11 @@ function apolloOptionsFactory(baseModuleConfig, httpLink, authService, wsService
203
206
  * Directive for lazy loading images
204
207
  */
205
208
  class LazyLoadDirective {
209
+ el;
210
+ srcAttr = null;
211
+ src;
206
212
  constructor(el) {
207
213
  this.el = el;
208
- this.srcAttr = null;
209
214
  }
210
215
  ngAfterViewInit() {
211
216
  this.canLazyLoad() ? this.lazyLoadImage() : this.loadImage();
@@ -227,10 +232,10 @@ class LazyLoadDirective {
227
232
  loadImage() {
228
233
  this.srcAttr = this.src;
229
234
  }
235
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: LazyLoadDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
236
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: LazyLoadDirective, selector: "img[ltLazyLoad]", inputs: { src: "src" }, host: { properties: { "attr.src": "this.srcAttr" } }, ngImport: i0 });
230
237
  }
231
- LazyLoadDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LazyLoadDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
232
- LazyLoadDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: LazyLoadDirective, selector: "img[ltLazyLoad]", inputs: { src: "src" }, host: { properties: { "attr.src": "this.srcAttr" } }, ngImport: i0 });
233
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LazyLoadDirective, decorators: [{
238
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: LazyLoadDirective, decorators: [{
234
239
  type: Directive,
235
240
  args: [{
236
241
  selector: 'img[ltLazyLoad]',
@@ -246,11 +251,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
246
251
  * Set same height (maximum) to different elements
247
252
  */
248
253
  class MatchHeightDirective {
254
+ el;
255
+ imageService;
256
+ // class name to match height
257
+ ltMatchHeight;
258
+ // Replace lazy loading images with immediate loading images
259
+ loadImages = true;
260
+ // Wether current platform is a browser
261
+ isBrowser;
262
+ observer;
249
263
  constructor(el, imageService, platformId) {
250
264
  this.el = el;
251
265
  this.imageService = imageService;
252
- // Replace lazy loading images with immediate loading images
253
- this.loadImages = true;
254
266
  this.isBrowser = isPlatformBrowser(platformId);
255
267
  }
256
268
  onResize() {
@@ -302,10 +314,10 @@ class MatchHeightDirective {
302
314
  Array.from(children).forEach((element) => (element.style.height = `${maxHeight}px`));
303
315
  }
304
316
  }
317
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: MatchHeightDirective, deps: [{ token: i0.ElementRef }, { token: i2.ImageService }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Directive });
318
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: MatchHeightDirective, selector: "[ltMatchHeight]", inputs: { ltMatchHeight: "ltMatchHeight", loadImages: "loadImages" }, host: { listeners: { "window:resize": "onResize()" } }, ngImport: i0 });
305
319
  }
306
- MatchHeightDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MatchHeightDirective, deps: [{ token: i0.ElementRef }, { token: i2.ImageService }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Directive });
307
- MatchHeightDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: MatchHeightDirective, selector: "[ltMatchHeight]", inputs: { ltMatchHeight: "ltMatchHeight", loadImages: "loadImages" }, host: { listeners: { "window:resize": "onResize()" } }, ngImport: i0 });
308
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MatchHeightDirective, decorators: [{
320
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: MatchHeightDirective, decorators: [{
309
321
  type: Directive,
310
322
  args: [{
311
323
  selector: '[ltMatchHeight]',
@@ -327,11 +339,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
327
339
  * (inpsired by: https://stackblitz.com/edit/angular-resizable)
328
340
  */
329
341
  class ResizableDirective {
342
+ el;
343
+ resizableGrabWidth = 8;
344
+ resizableMinWidth = 10;
345
+ dragging = false;
330
346
  constructor(el) {
331
347
  this.el = el;
332
- this.resizableGrabWidth = 8;
333
- this.resizableMinWidth = 10;
334
- this.dragging = false;
335
348
  }
336
349
  ngOnInit() {
337
350
  this.addListenerToDocument();
@@ -396,10 +409,10 @@ class ResizableDirective {
396
409
  this.mouseMove(e);
397
410
  }, true);
398
411
  }
412
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ResizableDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
413
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: ResizableDirective, selector: "[ltResizable]", inputs: { resizableGrabWidth: "resizableGrabWidth", resizableMinWidth: "resizableMinWidth" }, ngImport: i0 });
399
414
  }
400
- ResizableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ResizableDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
401
- ResizableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: ResizableDirective, selector: "[ltResizable]", inputs: { resizableGrabWidth: "resizableGrabWidth", resizableMinWidth: "resizableMinWidth" }, ngImport: i0 });
402
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ResizableDirective, decorators: [{
415
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ResizableDirective, decorators: [{
403
416
  type: Directive,
404
417
  args: [{
405
418
  selector: '[ltResizable]',
@@ -414,50 +427,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
414
427
  * Declarate html as safe
415
428
  */
416
429
  class SafeHtmlPipe {
430
+ sanitized;
417
431
  constructor(sanitized) {
418
432
  this.sanitized = sanitized;
419
433
  }
420
434
  transform(value) {
421
435
  return this.sanitized.bypassSecurityTrustHtml(value);
422
436
  }
437
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: SafeHtmlPipe, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
438
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: SafeHtmlPipe, name: "ltSafeHtml" });
423
439
  }
424
- SafeHtmlPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SafeHtmlPipe, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
425
- SafeHtmlPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: SafeHtmlPipe, name: "ltSafeHtml" });
426
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SafeHtmlPipe, decorators: [{
440
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: SafeHtmlPipe, decorators: [{
427
441
  type: Pipe,
428
442
  args: [{ name: 'ltSafeHtml' }]
429
443
  }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; } });
430
444
 
431
445
  class DateAgoPipe {
432
- constructor() {
433
- this.intervals = {
434
- year: 31536000,
435
- month: 2592000,
436
- week: 604800,
437
- day: 86400,
438
- hour: 3600,
439
- minute: 60,
440
- second: 1,
441
- };
442
- this.singular = {
443
- year: 'Jahr',
444
- month: 'Monat',
445
- week: 'Woche',
446
- day: 'Tag',
447
- hour: 'Stunde',
448
- minute: 'Minute',
449
- second: 'Sekunde',
450
- };
451
- this.plural = {
452
- year: 'Jahren',
453
- month: 'Monaten',
454
- week: 'Wochen',
455
- day: 'Tagen',
456
- hour: 'Stunden',
457
- minute: 'Minuten',
458
- second: 'Sekunden',
459
- };
460
- }
446
+ intervals = {
447
+ year: 31536000,
448
+ month: 2592000,
449
+ week: 604800,
450
+ day: 86400,
451
+ hour: 3600,
452
+ minute: 60,
453
+ second: 1,
454
+ };
455
+ singular = {
456
+ year: 'Jahr',
457
+ month: 'Monat',
458
+ week: 'Woche',
459
+ day: 'Tag',
460
+ hour: 'Stunde',
461
+ minute: 'Minute',
462
+ second: 'Sekunde',
463
+ };
464
+ plural = {
465
+ year: 'Jahren',
466
+ month: 'Monaten',
467
+ week: 'Wochen',
468
+ day: 'Tagen',
469
+ hour: 'Stunden',
470
+ minute: 'Minuten',
471
+ second: 'Sekunden',
472
+ };
461
473
  transform(value, currentDate) {
462
474
  const now = currentDate ?? new Date();
463
475
  if (value) {
@@ -480,10 +492,10 @@ class DateAgoPipe {
480
492
  }
481
493
  return value;
482
494
  }
495
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: DateAgoPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
496
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: DateAgoPipe, name: "dateAgo" });
483
497
  }
484
- DateAgoPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DateAgoPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
485
- DateAgoPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: DateAgoPipe, name: "dateAgo" });
486
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DateAgoPipe, decorators: [{
498
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: DateAgoPipe, decorators: [{
487
499
  type: Pipe,
488
500
  args: [{
489
501
  name: 'dateAgo',
@@ -549,25 +561,25 @@ class BaseModule {
549
561
  providers,
550
562
  };
551
563
  }
564
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: BaseModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
565
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: BaseModule, declarations: [
566
+ // Directives
567
+ LazyLoadDirective,
568
+ MatchHeightDirective,
569
+ ResizableDirective,
570
+ // Pipes
571
+ SafeHtmlPipe,
572
+ DateAgoPipe], imports: [ApolloModule, HttpClientModule], exports: [
573
+ // Directives
574
+ LazyLoadDirective,
575
+ MatchHeightDirective,
576
+ ResizableDirective,
577
+ // Pipes
578
+ SafeHtmlPipe,
579
+ DateAgoPipe, ApolloModule, HttpClientModule] });
580
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: BaseModule, imports: [ApolloModule, HttpClientModule, ApolloModule, HttpClientModule] });
552
581
  }
553
- BaseModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
554
- BaseModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: BaseModule, declarations: [
555
- // Directives
556
- LazyLoadDirective,
557
- MatchHeightDirective,
558
- ResizableDirective,
559
- // Pipes
560
- SafeHtmlPipe,
561
- DateAgoPipe], imports: [ApolloModule, HttpClientModule], exports: [
562
- // Directives
563
- LazyLoadDirective,
564
- MatchHeightDirective,
565
- ResizableDirective,
566
- // Pipes
567
- SafeHtmlPipe,
568
- DateAgoPipe, ApolloModule, HttpClientModule] });
569
- BaseModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseModule, imports: [ApolloModule, HttpClientModule, ApolloModule, HttpClientModule] });
570
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseModule, decorators: [{
582
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: BaseModule, decorators: [{
571
583
  type: NgModule,
572
584
  args: [{
573
585
  imports: [ApolloModule, HttpClientModule],
@@ -603,59 +615,66 @@ function AutoUnsubscribe(blackList = []) {
603
615
  * Authentication guard
604
616
  */
605
617
  class AuthGuard {
618
+ router;
619
+ authService;
620
+ moduleConfig;
621
+ platformId;
606
622
  /**
607
623
  * Imports
608
624
  */
609
- constructor(router, authService, moduleConfig) {
625
+ constructor(router, authService, moduleConfig, platformId) {
610
626
  this.router = router;
611
627
  this.authService = authService;
612
628
  this.moduleConfig = moduleConfig;
629
+ this.platformId = platformId;
613
630
  }
614
631
  /**
615
632
  * Can activate main route
616
633
  */
617
634
  canActivate(route, state) {
618
- return new Observable((subscriber) => {
619
- let allowed = false;
620
- let redirected = false;
621
- /* If the user is logged in and the route is not marked as opposite, then the user is allowed to access the route. */
622
- const opposite = route?.data?.opposite ? route?.data?.opposite : false;
623
- const redirectAuthUrl = route?.data?.redirectAuthUrl
624
- ? route.data.redirectAuthUrl
625
- : this.moduleConfig.authGuardRedirectUrl;
626
- const redirectRoleUrl = route?.data?.redirectRoleUrl
627
- ? route.data.redirectRoleUrl
628
- : this.moduleConfig.authGuardRedirectUrl;
629
- const disableQueryParams = route?.data?.disableQueryParams ?? false;
630
- const queryParams = disableQueryParams
631
- ? {}
632
- : {
633
- queryParams: {
634
- redirectUrl: route['_routerState'].url,
635
- },
636
- };
637
- if (this.authService.token && !opposite) {
638
- if (route.data?.roles) {
639
- const user = this.authService.currentUser;
640
- allowed = !!route.data.roles.find((role) => user.roles?.includes(role));
641
- if (!allowed && redirectRoleUrl) {
642
- this.router.navigate([redirectRoleUrl], queryParams);
643
- redirected = true;
635
+ if (isPlatformBrowser(this.platformId)) {
636
+ return new Observable((subscriber) => {
637
+ let allowed = false;
638
+ let redirected = false;
639
+ /* If the user is logged in and the route is not marked as opposite, then the user is allowed to access the route. */
640
+ const opposite = route?.data?.opposite ? route?.data?.opposite : false;
641
+ const redirectAuthUrl = route?.data?.redirectAuthUrl
642
+ ? route.data.redirectAuthUrl
643
+ : this.moduleConfig.authGuardRedirectUrl;
644
+ const redirectRoleUrl = route?.data?.redirectRoleUrl
645
+ ? route.data.redirectRoleUrl
646
+ : this.moduleConfig.authGuardRedirectUrl;
647
+ const disableQueryParams = route?.data?.disableQueryParams ?? false;
648
+ const queryParams = disableQueryParams
649
+ ? {}
650
+ : {
651
+ queryParams: {
652
+ redirectUrl: route['_routerState'].url,
653
+ },
654
+ };
655
+ if (this.authService.token && !opposite) {
656
+ if (route.data?.roles) {
657
+ const user = this.authService.currentUser;
658
+ allowed = !!route.data.roles.find((role) => user.roles?.includes(role));
659
+ if (!allowed && redirectRoleUrl) {
660
+ this.router.navigate([redirectRoleUrl], queryParams);
661
+ redirected = true;
662
+ }
663
+ }
664
+ else {
665
+ allowed = true;
644
666
  }
645
667
  }
646
- else {
668
+ else if (!this.authService.token && opposite) {
647
669
  allowed = true;
648
670
  }
649
- }
650
- else if (!this.authService.token && opposite) {
651
- allowed = true;
652
- }
653
- if (!allowed && redirectAuthUrl && !redirected) {
654
- this.router.navigate([redirectAuthUrl], queryParams);
655
- }
656
- subscriber.next(allowed);
657
- subscriber.complete();
658
- });
671
+ if (!allowed && redirectAuthUrl && !redirected) {
672
+ this.router.navigate([redirectAuthUrl], queryParams);
673
+ }
674
+ subscriber.next(allowed);
675
+ subscriber.complete();
676
+ });
677
+ }
659
678
  }
660
679
  /**
661
680
  * Can activate child route
@@ -663,14 +682,17 @@ class AuthGuard {
663
682
  canActivateChild(route, state) {
664
683
  return this.canActivate(route, state);
665
684
  }
685
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AuthGuard, deps: [{ token: i1$1.Router }, { token: i2.AuthService }, { token: BASE_MODULE_CONFIG }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable });
686
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AuthGuard });
666
687
  }
667
- AuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AuthGuard, deps: [{ token: i1$1.Router }, { token: i2.AuthService }, { token: BASE_MODULE_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
668
- AuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AuthGuard });
669
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AuthGuard, decorators: [{
688
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AuthGuard, decorators: [{
670
689
  type: Injectable
671
690
  }], ctorParameters: function () { return [{ type: i1$1.Router }, { type: i2.AuthService }, { type: undefined, decorators: [{
672
691
  type: Inject,
673
692
  args: [BASE_MODULE_CONFIG]
693
+ }] }, { type: undefined, decorators: [{
694
+ type: Inject,
695
+ args: [PLATFORM_ID]
674
696
  }] }]; } });
675
697
 
676
698
  /**
@@ -680,10 +702,10 @@ class CanDeactivateGuard {
680
702
  canDeactivate(component) {
681
703
  return component.canDeactivate ? component.canDeactivate() : true;
682
704
  }
705
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CanDeactivateGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
706
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CanDeactivateGuard });
683
707
  }
684
- CanDeactivateGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CanDeactivateGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
685
- CanDeactivateGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CanDeactivateGuard });
686
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CanDeactivateGuard, decorators: [{
708
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CanDeactivateGuard, decorators: [{
687
709
  type: Injectable
688
710
  }] });
689
711
 
@@ -691,6 +713,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
691
713
  * Logout guard
692
714
  */
693
715
  class LogoutGuard {
716
+ router;
717
+ authService;
694
718
  constructor(router, authService) {
695
719
  this.router = router;
696
720
  this.authService = authService;
@@ -707,10 +731,10 @@ class LogoutGuard {
707
731
  canActivateChild(route, state) {
708
732
  return this.canActivate(route, state);
709
733
  }
734
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: LogoutGuard, deps: [{ token: i1$1.Router }, { token: i2.AuthService }], target: i0.ɵɵFactoryTarget.Injectable });
735
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: LogoutGuard });
710
736
  }
711
- LogoutGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LogoutGuard, deps: [{ token: i1$1.Router }, { token: i2.AuthService }], target: i0.ɵɵFactoryTarget.Injectable });
712
- LogoutGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LogoutGuard });
713
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LogoutGuard, decorators: [{
737
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: LogoutGuard, decorators: [{
714
738
  type: Injectable
715
739
  }], ctorParameters: function () { return [{ type: i1$1.Router }, { type: i2.AuthService }]; } });
716
740
 
@@ -718,8 +742,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
718
742
  * Fullscreen service
719
743
  */
720
744
  class FullscreenService {
745
+ _isFullscreenActive = new BehaviorSubject(false);
721
746
  constructor() {
722
- this._isFullscreenActive = new BehaviorSubject(false);
723
747
  this.listenToFullscreenEvent();
724
748
  }
725
749
  get fullscreenState() {
@@ -752,10 +776,10 @@ class FullscreenService {
752
776
  }
753
777
  });
754
778
  }
779
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: FullscreenService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
780
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: FullscreenService, providedIn: 'root' });
755
781
  }
756
- FullscreenService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FullscreenService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
757
- FullscreenService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FullscreenService, providedIn: 'root' });
758
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FullscreenService, decorators: [{
782
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: FullscreenService, decorators: [{
759
783
  type: Injectable,
760
784
  args: [{
761
785
  providedIn: 'root',
@@ -766,6 +790,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
766
790
  * SEO service for setting HTML meta data
767
791
  */
768
792
  class SEOService {
793
+ titleService;
794
+ metaTagService;
769
795
  constructor(titleService, metaTagService) {
770
796
  this.titleService = titleService;
771
797
  this.metaTagService = metaTagService;
@@ -846,10 +872,10 @@ class SEOService {
846
872
  setPageKeywords(keywords) {
847
873
  this.metaTagService.updateTag({ name: 'keywords', content: keywords });
848
874
  }
875
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: SEOService, deps: [{ token: i1.Title }, { token: i1.Meta }], target: i0.ɵɵFactoryTarget.Injectable });
876
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: SEOService, providedIn: 'root' });
849
877
  }
850
- SEOService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SEOService, deps: [{ token: i1.Title }, { token: i1.Meta }], target: i0.ɵɵFactoryTarget.Injectable });
851
- SEOService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SEOService, providedIn: 'root' });
852
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SEOService, decorators: [{
878
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: SEOService, decorators: [{
853
879
  type: Injectable,
854
880
  args: [{
855
881
  providedIn: 'root',
@@ -857,6 +883,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
857
883
  }], ctorParameters: function () { return [{ type: i1.Title }, { type: i1.Meta }]; } });
858
884
 
859
885
  class ThemeService {
886
+ storageService;
887
+ _theme = new BehaviorSubject('light');
860
888
  get theme() {
861
889
  return this._theme.value;
862
890
  }
@@ -869,7 +897,6 @@ class ThemeService {
869
897
  }
870
898
  constructor(storageService) {
871
899
  this.storageService = storageService;
872
- this._theme = new BehaviorSubject('light');
873
900
  // Load from storage
874
901
  this.theme = this.storageService.load('theme');
875
902
  // Use system theme if no theme is set
@@ -885,10 +912,10 @@ class ThemeService {
885
912
  this.theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
886
913
  }
887
914
  }
915
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ThemeService, deps: [{ token: i2.StorageService }], target: i0.ɵɵFactoryTarget.Injectable });
916
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ThemeService, providedIn: 'root' });
888
917
  }
889
- ThemeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ThemeService, deps: [{ token: i2.StorageService }], target: i0.ɵɵFactoryTarget.Injectable });
890
- ThemeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ThemeService, providedIn: 'root' });
891
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ThemeService, decorators: [{
918
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ThemeService, decorators: [{
892
919
  type: Injectable,
893
920
  args: [{
894
921
  providedIn: 'root',
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lenne.tech-ng-base.mjs","sources":["../../../projects/ng-base/src/functions/extract-files.function.ts","../../../projects/ng-base/src/factories/apollo-options.factory.ts","../../../projects/ng-base/src/directives/lazy-load.directive.ts","../../../projects/ng-base/src/directives/match-height.directive.ts","../../../projects/ng-base/src/directives/resizable.directive.ts","../../../projects/ng-base/src/pipes/safe-html.pipe.ts","../../../projects/ng-base/src/pipes/date-ago.pipe.ts","../../../projects/ng-base/src/base.module.ts","../../../projects/ng-base/src/decorators/auto-unsubscribe.decorator.ts","../../../projects/ng-base/src/guards/auth.guard.ts","../../../projects/ng-base/src/guards/can-deactivate.guard.ts","../../../projects/ng-base/src/guards/logout.guard.ts","../../../projects/ng-base/src/services/fullscreen.service.ts","../../../projects/ng-base/src/services/seo.service.ts","../../../projects/ng-base/src/services/theme.service.ts","../../../projects/ng-base/public-api.ts","../../../projects/ng-base/lenne.tech-ng-base.ts"],"sourcesContent":["/**\n * Inspired by Inpspired by https://github.com/jaydenseric/extract-files/releases/tag/v11.0.0\n */\n\n/**\n * Reactive native file\n */\nclass ReactNativeFile {\n constructor(public uri: string, public name: string, public type: string) {}\n}\n\n/**\n * Check whether value is an extractable file\n */\nfunction isExtractableFile(value) {\n return (\n (typeof File !== 'undefined' && value instanceof File) ||\n (typeof Blob !== 'undefined' && value instanceof Blob) ||\n value instanceof ReactNativeFile\n );\n}\n\n/**\n * Clones a value, recursively extracting\n */\nexport default function extractFiles(value, path = '', isExtractableFileFunc = isExtractableFile) {\n // Map of extracted files and their object paths within the input value.\n const files = new Map();\n\n // Map of arrays and objects recursed within the input value and their clones,\n // for reusing clones of values that are referenced multiple times within the\n // input value.\n const clones = new Map();\n\n /**\n * Recursively clones the value, extracting files.\n */\n function recurse(recurseValue, recursePath, recursed) {\n let clone = recurseValue;\n\n if (isExtractableFileFunc(recurseValue)) {\n clone = null;\n\n const filePaths = files.get(recurseValue);\n\n filePaths ? filePaths.push(recursePath) : files.set(recurseValue, [recursePath]);\n } else {\n const isList =\n Array.isArray(recurseValue) || (typeof FileList !== 'undefined' && recurseValue instanceof FileList);\n const isObject = recurseValue && recurseValue.constructor === Object;\n\n if (isList || isObject) {\n const hasClone = clones.has(recurseValue);\n\n if (hasClone) {\n clone = clones.get(recurseValue);\n } else {\n clone = isList ? [] : {};\n\n clones.set(recurseValue, clone);\n }\n\n if (!recursed.has(recurseValue)) {\n const pathPrefix = recursePath ? `${recursePath}.` : '';\n const recursedDeeper = new Set(recursed).add(recurseValue);\n\n if (isList) {\n let index = 0;\n\n for (const item of recurseValue as any) {\n const itemClone = recurse(item, pathPrefix + index++, recursedDeeper);\n\n if (!hasClone) {\n clone.push(itemClone);\n }\n }\n } else {\n for (const key of Object.keys(recurseValue)) {\n const propertyClone = recurse(recurseValue[key], pathPrefix + key, recursedDeeper);\n\n if (!hasClone) {\n clone[key] = propertyClone;\n }\n }\n }\n }\n }\n }\n\n return clone;\n }\n\n return {\n clone: recurse(value, path, new Set()),\n files,\n };\n}\n","import { HttpLink } from 'apollo-angular/http';\nimport { ApolloLink, concat, fromPromise, split } from '@apollo/client/core';\nimport { InMemoryCache } from '@apollo/client/cache';\nimport { getMainDefinition } from '@apollo/client/utilities';\nimport {\n AuthService,\n BaseModuleConfig,\n createRestartableClient,\n RestartableClient,\n WsService,\n} from '@lenne.tech/ng-base/shared';\nimport { GraphQLWsLink } from '@apollo/client/link/subscriptions';\nimport extractFiles from '../functions/extract-files.function';\nimport { firstValueFrom } from 'rxjs';\nimport { onError } from '@apollo/client/link/error';\n\n/**\n * Factory for apollo-angular options\n */\nexport function apolloOptionsFactory(\n baseModuleConfig: BaseModuleConfig,\n httpLink: HttpLink,\n authService: AuthService,\n wsService: WsService\n) {\n const links = [];\n\n const http = httpLink.create({\n uri: baseModuleConfig.apiUrl,\n extractFiles,\n });\n\n const authMiddleware = new ApolloLink((operation, forward) => {\n const headers: any = {};\n const operationName = (operation.query.definitions[0] as any)?.selectionSet?.selections[0]?.name?.value;\n\n if (localStorage) {\n let token: string;\n\n if (operationName === 'refreshToken') {\n token = authService.refreshToken || null;\n } else {\n token = authService.token || null;\n }\n\n if (token) {\n headers.Authorization = 'Bearer ' + token;\n }\n\n operation.setContext(() => ({ headers }));\n }\n return forward(operation);\n });\n\n const errorLink = onError(({ graphQLErrors, networkError, operation, forward }) => {\n if (graphQLErrors) {\n for (const err of graphQLErrors) {\n switch (err.extensions.code) {\n case 'UNAUTHENTICATED': {\n if (\n err.message !== 'Expired refresh token' &&\n err.message !== 'Expired token' &&\n err.message !== 'Invalid token'\n ) {\n return;\n }\n\n if (err.message === 'Expired refresh token' || err.message === 'Invalid token') {\n authService.clearSession();\n return;\n }\n\n return fromPromise(firstValueFrom(authService.requestNewToken()))\n .filter((value) => Boolean(value))\n .flatMap((response) => {\n const oldHeaders = operation.getContext().headers;\n // modify the operation context with a new token\n operation.setContext({\n headers: {\n ...oldHeaders,\n Authorization: `Bearer ${response.token}`,\n },\n });\n\n // retry the request, returning the new observable\n return forward(operation);\n });\n }\n }\n }\n }\n });\n\n if (baseModuleConfig.logging) {\n console.log(baseModuleConfig);\n }\n\n if (baseModuleConfig.wsUrl) {\n const wsLink = new GraphQLWsLink(\n createRestartableClient({\n url: baseModuleConfig.wsUrl,\n connectionParams: () => {\n return {\n Authorization: authService.token ? 'Bearer ' + authService.token : undefined,\n };\n },\n })\n );\n\n // Set client for reconnection on logout/login\n wsService.client = wsLink.client as RestartableClient;\n\n // using the ability to split links, you can send data to each link\n // depending on what kind of operation is being sent\n links.push(\n split(\n // split based on operation type\n ({ query }) => {\n // @ts-ignore\n const { kind, operation } = getMainDefinition(query);\n return kind === 'OperationDefinition' && operation === 'subscription';\n },\n wsLink,\n concat(concat(authMiddleware, errorLink), http)\n )\n );\n } else {\n links.push(authMiddleware);\n links.push(errorLink);\n links.push(http);\n }\n\n return {\n link: ApolloLink.from(links),\n cache: new InMemoryCache(),\n defaultOptions: {\n query: {\n fetchPolicy: 'network-only',\n },\n },\n };\n}\n","import { AfterViewInit, Directive, ElementRef, HostBinding, Input } from '@angular/core';\n\n/**\n * Directive for lazy loading images\n */\n@Directive({\n selector: 'img[ltLazyLoad]',\n})\nexport class LazyLoadDirective implements AfterViewInit {\n @HostBinding('attr.src') srcAttr = null;\n @Input() src: string;\n\n constructor(private el: ElementRef) {}\n\n ngAfterViewInit() {\n this.canLazyLoad() ? this.lazyLoadImage() : this.loadImage();\n }\n\n private canLazyLoad() {\n return window && 'IntersectionObserver' in window;\n }\n\n private lazyLoadImage() {\n const obs = new IntersectionObserver((entries) => {\n entries.forEach(({ isIntersecting }) => {\n if (isIntersecting) {\n this.loadImage();\n obs.unobserve(this.el.nativeElement);\n }\n });\n });\n obs.observe(this.el.nativeElement);\n }\n\n private loadImage() {\n this.srcAttr = this.src;\n }\n}\n","import { AfterViewInit, Directive, ElementRef, HostListener, Inject, Input, PLATFORM_ID } from '@angular/core';\nimport { ImageService } from '@lenne.tech/ng-base/shared';\nimport { isPlatformBrowser } from '@angular/common';\n\n/**\n * Set same height (maximum) to different elements\n */\n@Directive({\n selector: '[ltMatchHeight]',\n})\nexport class MatchHeightDirective implements AfterViewInit {\n // class name to match height\n @Input()\n ltMatchHeight: string | string[];\n\n // Replace lazy loading images with immediate loading images\n @Input()\n loadImages = true;\n\n // Wether current platform is a browser\n readonly isBrowser: boolean;\n\n observer: MutationObserver;\n\n constructor(protected el: ElementRef, protected imageService: ImageService, @Inject(PLATFORM_ID) platformId: string) {\n this.isBrowser = isPlatformBrowser(platformId);\n }\n\n @HostListener('window:resize')\n onResize() {\n this.matchHeight(this.el.nativeElement, this.ltMatchHeight);\n }\n\n ngAfterViewInit() {\n this.matchHeight(this.el.nativeElement, this.ltMatchHeight);\n this.observer = new MutationObserver(() => {\n this.matchHeight(this.el.nativeElement, this.ltMatchHeight);\n });\n\n //Observes if one or more elements get added to or removed from the childlist and applies matching heights\n this.observer.observe(this.el.nativeElement, { childList: true });\n }\n\n async matchHeight(parent: HTMLElement, target: string | string[]) {\n if (!parent) {\n return;\n }\n\n let classNames;\n if (!Array.isArray(target)) {\n classNames = [target];\n } else {\n classNames = target;\n }\n\n for (const className of classNames) {\n // find all child structureElements with the selected class name\n const children = parent.getElementsByClassName(className);\n\n if (!children || children.length < 2) {\n continue;\n }\n\n // Load images of children\n if (this.loadImages) {\n await this.imageService.preLoadImages({ elements: children });\n }\n\n // reset all children height\n Array.from(children).forEach((element: HTMLElement) => {\n element.style.height = 'initial';\n });\n\n // get all the child structureElements heights\n const itemHeights = Array.from(children).map((element) => {\n if (element.getBoundingClientRect) {\n return element.getBoundingClientRect().height;\n }\n return 0;\n });\n\n // find out the tallest one\n const maxHeight = itemHeights.reduce((prev, curr) => (curr > prev ? curr : prev), 0);\n\n // update the child structureElements height to the tallest one\n Array.from(children).forEach((element: HTMLElement) => (element.style.height = `${maxHeight}px`));\n }\n }\n}\n","import { Directive, ElementRef, Input, OnInit } from '@angular/core';\n\n/**\n * Reszise detection\n * (inpsired by: https://stackblitz.com/edit/angular-resizable)\n */\n@Directive({\n selector: '[ltResizable]',\n})\nexport class ResizableDirective implements OnInit {\n @Input() resizableGrabWidth = 8;\n @Input() resizableMinWidth = 10;\n\n dragging = false;\n\n constructor(private el: ElementRef) {}\n\n ngOnInit(): void {\n this.addListenerToDocument();\n this.addListenerToElement();\n }\n\n mouseMoveG(evt) {\n if (!this.dragging) {\n return;\n }\n this.newWidth(evt.clientX - this.el.nativeElement.offsetLeft);\n evt.stopPropagation();\n }\n\n newWidth(wid) {\n const result = Math.max(this.resizableMinWidth, wid);\n this.el.nativeElement.style.width = result + 'px';\n }\n\n mouseDown(evt) {\n if (this.inDragRegion(evt)) {\n this.dragging = true;\n this.preventGlobalMouseEvents();\n evt.stopPropagation();\n }\n }\n\n restoreGlobalMouseEvents() {\n document.body.style['pointer-events'] = 'auto';\n }\n\n mouseUpG(evt: Event) {\n if (!this.dragging) {\n return;\n }\n this.restoreGlobalMouseEvents();\n this.dragging = false;\n evt.stopPropagation();\n }\n\n mouseMove(evt) {\n if (this.inDragRegion(evt) || this.dragging) {\n this.el.nativeElement.style.cursor = 'col-resize';\n } else {\n this.el.nativeElement.style.cursor = 'default';\n }\n }\n\n preventGlobalMouseEvents() {\n document.body.style['pointer-events'] = 'none';\n }\n\n inDragRegion(evt) {\n return this.el.nativeElement.clientWidth - evt.clientX + this.el.nativeElement.offsetLeft < this.resizableGrabWidth;\n }\n\n private addListenerToDocument() {\n document.addEventListener(\n 'mousemove',\n (e) => {\n this.mouseMoveG(e);\n },\n true\n );\n\n document.addEventListener(\n 'mouseup',\n (e) => {\n this.mouseUpG(e);\n },\n true\n );\n }\n\n private addListenerToElement() {\n this.el.nativeElement.addEventListener(\n 'mousedown',\n (e) => {\n this.mouseDown(e);\n },\n true\n );\n\n this.el.nativeElement.addEventListener(\n 'mousemove',\n (e) => {\n this.mouseMove(e);\n },\n true\n );\n }\n}\n","import { DomSanitizer } from '@angular/platform-browser';\nimport { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Declarate html as safe\n */\n@Pipe({ name: 'ltSafeHtml' })\nexport class SafeHtmlPipe implements PipeTransform {\n constructor(private sanitized: DomSanitizer) {}\n\n transform(value) {\n return this.sanitized.bypassSecurityTrustHtml(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'dateAgo',\n pure: true,\n})\nexport class DateAgoPipe implements PipeTransform {\n intervals = {\n year: 31536000,\n month: 2592000,\n week: 604800,\n day: 86400,\n hour: 3600,\n minute: 60,\n second: 1,\n };\n\n singular = {\n year: 'Jahr',\n month: 'Monat',\n week: 'Woche',\n day: 'Tag',\n hour: 'Stunde',\n minute: 'Minute',\n second: 'Sekunde',\n };\n\n plural = {\n year: 'Jahren',\n month: 'Monaten',\n week: 'Wochen',\n day: 'Tagen',\n hour: 'Stunden',\n minute: 'Minuten',\n second: 'Sekunden',\n };\n\n transform(value: any, currentDate?: Date): any {\n const now = currentDate ?? new Date();\n if (value) {\n const seconds = Math.floor((+now - +new Date(value)) / 1000);\n if (seconds < 29) {\n return 'gerade eben'; // less than 30 seconds ago will show as 'Just now'\n }\n\n let counter;\n for (const i of Object.keys(this.intervals)) {\n counter = Math.floor(seconds / this.intervals[i]);\n if (counter > 0) {\n if (counter === 1) {\n return 'vor ' + counter + ' ' + this.singular[i]; // singular (1 day ago)\n } else {\n return 'vor ' + counter + ' ' + this.plural[i]; // plural (2 days ago)\n }\n }\n }\n }\n return value;\n }\n}\n","import { APOLLO_OPTIONS, ApolloModule } from 'apollo-angular';\nimport { HttpLink } from 'apollo-angular/http';\nimport { ModuleWithProviders, NgModule, Provider } from '@angular/core';\n\nimport { apolloOptionsFactory } from './factories/apollo-options.factory';\nimport { LazyLoadDirective } from './directives/lazy-load.directive';\nimport { MatchHeightDirective } from './directives/match-height.directive';\nimport { ResizableDirective } from './directives/resizable.directive';\nimport { SafeHtmlPipe } from './pipes/safe-html.pipe';\nimport { DateAgoPipe } from './pipes/date-ago.pipe';\nimport { AuthService, BASE_MODULE_CONFIG, BaseModuleConfig, WsService } from '@lenne.tech/ng-base/shared';\nimport { HttpClientModule } from '@angular/common/http';\n\n// Imported and exported elements\nconst elements = [\n // Directives\n LazyLoadDirective,\n MatchHeightDirective,\n ResizableDirective,\n\n // Pipes\n SafeHtmlPipe,\n DateAgoPipe,\n];\n\n/**\n * Base module\n */\n@NgModule({\n imports: [ApolloModule, HttpClientModule],\n declarations: elements,\n exports: [...elements, ApolloModule, HttpClientModule],\n})\nexport class BaseModule {\n /**\n * Set configuration of base module in root module of the app\n */\n static forRoot(baseModuleConfig: BaseModuleConfig = {}, AppAuthService?): ModuleWithProviders<BaseModule> {\n // Default config\n const config = {\n apiUrl: '',\n authGuardRedirectUrl: '/auth',\n logging: false,\n version: null,\n prefix: null,\n scrollDetectionOffset: 200,\n scrollOffset: 100,\n storageType: 'local',\n securePasswordTransfer: true,\n ...baseModuleConfig,\n };\n\n if (config.logging) {\n console.log('Config:', config);\n }\n\n // Prepare providers\n const providers: Provider[] = [\n {\n provide: BASE_MODULE_CONFIG,\n useValue: config,\n },\n ];\n\n // Add apollo features if API URL is set\n if (baseModuleConfig.apiUrl) {\n providers.push({\n provide: APOLLO_OPTIONS,\n useFactory: apolloOptionsFactory,\n deps: [BASE_MODULE_CONFIG, HttpLink, AppAuthService ? AppAuthService : AuthService, WsService],\n });\n } else if (config.logging) {\n console.log('apiUrl is missing, ApolloLink is not initialized');\n }\n\n // Return root module\n return {\n ngModule: BaseModule,\n providers,\n };\n }\n}\n","/**\n * Decorator for automatically unsubscribe subscriptions\n * Inspired by https://codereacter.medium.com/angular-advanced-features-and-tips-you-may-not-know-about-cae3b8527184#9bd6\n */\nexport function AutoUnsubscribe(blackList: string[] = []) {\n return function (constructor: any) {\n const original = constructor.prototype.ngOnDestroy;\n\n constructor.prototype.ngOnDestroy = function () {\n for (const prop of Object.keys(this)) {\n if (!blackList.includes(prop)) {\n const property = this[prop];\n if (property && typeof property.unsubscribe === 'function') {\n property.unsubscribe();\n }\n }\n }\n if (original && typeof original === 'function') {\n original.apply(this, arguments);\n }\n };\n };\n}\n","import { Inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { AuthService, BASE_MODULE_CONFIG, BaseModuleConfig } from '@lenne.tech/ng-base/shared';\nimport { isPlatformBrowser } from '@angular/common';\n\n/**\n * Authentication guard\n */\n@Injectable()\nexport class AuthGuard {\n /**\n * Imports\n */\n constructor(\n private router: Router,\n private authService: AuthService,\n @Inject(BASE_MODULE_CONFIG) private moduleConfig: BaseModuleConfig,\n @Inject(PLATFORM_ID) private platformId: object\n ) {}\n\n /**\n * Can activate main route\n */\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {\n if (isPlatformBrowser(this.platformId)) {\n return new Observable((subscriber) => {\n let allowed = false;\n let redirected = false;\n /* If the user is logged in and the route is not marked as opposite, then the user is allowed to access the route. */\n const opposite = route?.data?.opposite ? route?.data?.opposite : false;\n const redirectAuthUrl = route?.data?.redirectAuthUrl\n ? route.data.redirectAuthUrl\n : this.moduleConfig.authGuardRedirectUrl;\n const redirectRoleUrl = route?.data?.redirectRoleUrl\n ? route.data.redirectRoleUrl\n : this.moduleConfig.authGuardRedirectUrl;\n const disableQueryParams = route?.data?.disableQueryParams ?? false;\n const queryParams = disableQueryParams\n ? {}\n : {\n queryParams: {\n redirectUrl: route['_routerState'].url,\n },\n };\n\n if (this.authService.token && !opposite) {\n if (route.data?.roles) {\n const user = this.authService.currentUser;\n allowed = !!route.data.roles.find((role) => user.roles?.includes(role));\n\n if (!allowed && redirectRoleUrl) {\n this.router.navigate([redirectRoleUrl], queryParams);\n redirected = true;\n }\n } else {\n allowed = true;\n }\n } else if (!this.authService.token && opposite) {\n allowed = true;\n }\n\n if (!allowed && redirectAuthUrl && !redirected) {\n this.router.navigate([redirectAuthUrl], queryParams);\n }\n\n subscriber.next(allowed);\n subscriber.complete();\n });\n }\n }\n\n /**\n * Can activate child route\n */\n canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {\n return this.canActivate(route, state);\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ICanComponentDeactivate } from '@lenne.tech/ng-base/shared';\n\n/**\n * Guard to check if a component can be deactivated\n */\n@Injectable()\nexport class CanDeactivateGuard {\n canDeactivate(component: ICanComponentDeactivate) {\n return component.canDeactivate ? component.canDeactivate() : true;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { AuthService } from '@lenne.tech/ng-base/shared';\n\n/**\n * Logout guard\n */\n@Injectable()\nexport class LogoutGuard {\n constructor(private router: Router, private authService: AuthService) {}\n\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {\n return new Observable((subscriber) => {\n if (this.authService.token) {\n this.authService.logout();\n }\n\n subscriber.next(true);\n subscriber.complete();\n });\n }\n\n canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {\n return this.canActivate(route, state);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * Fullscreen service\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class FullscreenService {\n private _isFullscreenActive: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n\n constructor() {\n this.listenToFullscreenEvent();\n }\n\n get fullscreenState(): boolean {\n return this._isFullscreenActive.value;\n }\n\n get fullscreenStateAsObservable(): Observable<boolean> {\n return this._isFullscreenActive.asObservable();\n }\n\n public toggleFullscreen() {\n const elem = document.documentElement;\n if (!this._isFullscreenActive.value) {\n elem.requestFullscreen();\n this._isFullscreenActive.next(true);\n } else {\n document.exitFullscreen();\n this._isFullscreenActive.next(false);\n }\n }\n\n /**\n * Event Listener for fullscreen toggle\n */\n private listenToFullscreenEvent() {\n document.addEventListener('fullscreenchange', () => {\n if (document.fullscreenElement) {\n this._isFullscreenActive.next(true);\n } else {\n this._isFullscreenActive.next(false);\n }\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\n\ninterface SEOData {\n title: string;\n description: string;\n image?: string;\n url?: string;\n keywords?: string;\n}\n\n/**\n * SEO service for setting HTML meta data\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SEOService {\n constructor(private titleService: Title, private metaTagService: Meta) {}\n\n public initPageForSEO(input: SEOData) {\n this.setGeneralData(input);\n this.setTwitterData(input);\n this.setTwitterData(input);\n this.setFacebookData(input);\n\n if (input.keywords) {\n this.setPageKeywords(input.keywords);\n }\n }\n\n /**\n * Set general metadata\n *\n * @param data\n * @private\n */\n private setGeneralData(data: SEOData) {\n this.titleService.setTitle(data.title);\n this.metaTagService.updateTag({ name: 'description', content: data.description });\n }\n\n /**\n * Set metadata for twitter\n *\n * @param data\n * @private\n */\n private setTwitterData(data: SEOData) {\n this.metaTagService.updateTag({ name: 'twitter:title', content: data.title });\n this.metaTagService.updateTag({ name: 'twitter:description', content: data.description });\n this.metaTagService.updateTag({\n property: 'twitter:url',\n content: data.url ? data.url : window?.location.href,\n });\n\n if (data.image) {\n this.metaTagService.updateTag({\n property: 'twitter:image',\n content: data.image,\n });\n\n this.metaTagService.updateTag({\n property: 'twitter:card',\n content: 'summary_large_image',\n });\n }\n }\n\n /**\n * Set metadata for facebook\n *\n * @param data\n * @private\n */\n private setFacebookData(data: SEOData) {\n this.metaTagService.updateTag({ property: 'og:title', content: data.title });\n this.metaTagService.updateTag({ property: 'og:description', content: data.description });\n this.metaTagService.updateTag({\n property: 'og:type',\n content: 'website',\n });\n this.metaTagService.updateTag({\n property: 'og:url',\n content: data.url ? data.url : window?.location.href,\n });\n\n if (data.image) {\n this.metaTagService.updateTag({\n property: 'og:image',\n content: data.image,\n });\n }\n }\n\n /**\n * Set page keywords\n *\n * @param keywords\n * @private\n */\n private setPageKeywords(keywords: string) {\n this.metaTagService.updateTag({ name: 'keywords', content: keywords });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { StorageService } from '@lenne.tech/ng-base/shared';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThemeService {\n _theme = new BehaviorSubject<string>('light');\n\n get theme(): string {\n return this._theme.value;\n }\n\n set theme(theme: string) {\n this._theme.next(theme);\n this.storageService.save('theme', theme);\n }\n\n get themeObservable(): Observable<string> {\n return this._theme.asObservable();\n }\n\n constructor(private storageService: StorageService) {\n // Load from storage\n this.theme = this.storageService.load('theme') as string;\n\n // Use system theme if no theme is set\n if (!this.theme) {\n this.checkSystemTheme();\n }\n }\n\n /**\n * Check theme from system\n */\n checkSystemTheme() {\n if (window?.matchMedia) {\n this.theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n }\n}\n","/**\n * Exports for public API\n */\n\n// Module\nexport * from './src/base.module';\n\n// Decorators\nexport * from './src/decorators/auto-unsubscribe.decorator';\n\n// Directives\nexport * from './src/directives/lazy-load.directive';\nexport * from './src/directives/match-height.directive';\nexport * from './src/directives/resizable.directive';\n\n// Factories\nexport * from './src/factories/apollo-options.factory';\n\n// Guards\nexport * from './src/guards/auth.guard';\nexport * from './src/guards/can-deactivate.guard';\nexport * from './src/guards/logout.guard';\n\n// Pipes\nexport * from './src/pipes/safe-html.pipe';\nexport * from './src/pipes/date-ago.pipe';\n\n// Services\nexport * from './src/services/fullscreen.service';\nexport * from './src/services/seo.service';\nexport * from './src/services/theme.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}