@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.
- package/base-components/base-components.module.d.ts +1 -2
- package/base-components/components/checkbox/checkbox.component.d.ts +1 -1
- package/base-components/components/delete-account/delete-account.component.d.ts +1 -1
- package/base-components/components/fab-button/fab-button.component.d.ts +1 -1
- package/base-components/components/input/input.component.d.ts +1 -1
- package/base-components/components/loading-bar/loading-bar.component.d.ts +1 -1
- package/base-components/components/model-form/model-form-base.component.d.ts +1 -1
- package/base-components/components/model-form/model-form.component.d.ts +1 -1
- package/base-components/components/model-form-sub/model-form-sub.component.d.ts +1 -1
- package/base-components/components/model-table/model-table.component.d.ts +1 -1
- package/base-components/components/refence-input/refence-input.component.d.ts +1 -1
- package/base-components/components/select/select.component.d.ts +1 -1
- package/base-components/components/skeleton-loader/skeleton-loader.component.d.ts +1 -1
- package/base-components/components/tags/tags.component.d.ts +1 -1
- package/base-components/components/textarea/textarea.component.d.ts +1 -1
- package/base-components/components/toast/toast.component.d.ts +1 -1
- package/base-components/components/upload-image/upload-image.component.d.ts +1 -1
- package/base-components/directives/context-menu.directive.d.ts +1 -1
- package/base-components/directives/sort.directive.d.ts +1 -1
- package/base-prototype/pages/login/login.component.d.ts +1 -1
- package/base-prototype/pages/profile/profile.component.d.ts +1 -1
- package/base-prototype/pages/set-password/set-password.component.d.ts +1 -1
- package/esm2022/base-cms/base-cms-routing.module.mjs +33 -0
- package/esm2022/base-cms/base-cms.module.mjs +61 -0
- package/esm2022/base-cms/pages/base-cms/base-cms.component.mjs +233 -0
- package/esm2022/base-components/base-components.module.mjs +123 -0
- package/esm2022/base-components/components/breadcrumb/breadcrumb.component.mjs +21 -0
- package/esm2022/base-components/components/change-password/change-password.component.mjs +96 -0
- package/esm2022/base-components/components/checkbox/checkbox.component.mjs +35 -0
- package/esm2022/base-components/components/delete-account/delete-account.component.mjs +61 -0
- package/esm2022/base-components/components/fab-button/fab-button.component.mjs +21 -0
- package/esm2022/base-components/components/input/input.component.mjs +72 -0
- package/esm2022/base-components/components/loading-bar/loading-bar.component.mjs +39 -0
- package/esm2022/base-components/components/model-form/model-form-base.component.mjs +145 -0
- package/esm2022/base-components/components/model-form/model-form.component.mjs +585 -0
- package/esm2022/base-components/components/model-form-sub/model-form-sub.component.mjs +111 -0
- package/esm2022/base-components/components/model-table/model-table.component.mjs +470 -0
- package/esm2022/base-components/components/refence-input/refence-input.component.mjs +273 -0
- package/esm2022/base-components/components/select/select.component.mjs +59 -0
- package/esm2022/base-components/components/skeleton-loader/skeleton-loader.component.mjs +32 -0
- package/esm2022/base-components/components/tags/tags.component.mjs +224 -0
- package/esm2022/base-components/components/textarea/textarea.component.mjs +76 -0
- package/esm2022/base-components/components/toast/toast.component.mjs +70 -0
- package/esm2022/base-components/components/upload-image/upload-image.component.mjs +343 -0
- package/esm2022/base-components/directives/back-button.directive.mjs +25 -0
- package/esm2022/base-components/directives/context-menu.directive.mjs +112 -0
- package/esm2022/base-components/directives/sort.directive.mjs +61 -0
- package/esm2022/base-components/directives/stop-propagation.directive.mjs +24 -0
- package/esm2022/base-components/pipes/ellipses.pipe.mjs +23 -0
- package/esm2022/base-prototype/base-prototype.module.mjs +54 -0
- package/esm2022/base-prototype/pages/email-verification/email-verification.component.mjs +62 -0
- package/esm2022/base-prototype/pages/forgot-password/forgot-password.component.mjs +75 -0
- package/esm2022/base-prototype/pages/login/login.component.mjs +111 -0
- package/esm2022/base-prototype/pages/profile/profile.component.mjs +86 -0
- package/esm2022/base-prototype/pages/register/register.component.mjs +94 -0
- package/esm2022/base-prototype/pages/set-password/set-password.component.mjs +90 -0
- package/esm2022/shared/classes/auth.class.mjs +14 -0
- package/esm2022/shared/classes/basic-user.class.mjs +49 -0
- package/esm2022/shared/classes/graphql-enum.class.mjs +10 -0
- package/esm2022/shared/classes/graphql-meta.class.mjs +345 -0
- package/esm2022/shared/classes/graphql-type.class.mjs +14 -0
- package/esm2022/shared/classes/sort.class.mjs +38 -0
- package/esm2022/shared/services/auth.service.mjs +153 -0
- package/esm2022/shared/services/breadcrumb.service.mjs +70 -0
- package/{esm2020 → esm2022}/shared/services/cms.service.mjs +7 -5
- package/esm2022/shared/services/file.service.mjs +87 -0
- package/esm2022/shared/services/forms.service.mjs +62 -0
- package/esm2022/shared/services/graphql-meta.service.mjs +133 -0
- package/esm2022/shared/services/graphql-plus.service.mjs +94 -0
- package/esm2022/shared/services/graphql.service.mjs +511 -0
- package/esm2022/shared/services/image.service.mjs +103 -0
- package/esm2022/shared/services/loader.service.mjs +79 -0
- package/esm2022/shared/services/navigation.service.mjs +39 -0
- package/esm2022/shared/services/scroll.service.mjs +208 -0
- package/esm2022/shared/services/storage.service.mjs +142 -0
- package/esm2022/shared/services/toast.service.mjs +40 -0
- package/esm2022/shared/services/user.service.mjs +161 -0
- package/esm2022/shared/services/ws.service.mjs +18 -0
- package/esm2022/src/base.module.mjs +98 -0
- package/esm2022/src/directives/lazy-load.directive.mjs +48 -0
- package/esm2022/src/directives/match-height.directive.mjs +92 -0
- package/esm2022/src/directives/resizable.directive.mjs +92 -0
- package/esm2022/src/functions/extract-files.function.mjs +87 -0
- package/esm2022/src/guards/auth.guard.mjs +92 -0
- package/esm2022/src/guards/can-deactivate.guard.mjs +17 -0
- package/esm2022/src/guards/logout.guard.mjs +35 -0
- package/esm2022/src/pipes/date-ago.pipe.mjs +64 -0
- package/esm2022/src/pipes/safe-html.pipe.mjs +23 -0
- package/esm2022/src/services/fullscreen.service.mjs +52 -0
- package/esm2022/src/services/seo.service.mjs +100 -0
- package/esm2022/src/services/theme.service.mjs +45 -0
- package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-cms.mjs +41 -30
- package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-cms.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-components.mjs +421 -300
- package/fesm2022/lenne.tech-ng-base-base-components.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/lenne.tech-ng-base-base-prototype.mjs +127 -88
- package/fesm2022/lenne.tech-ng-base-base-prototype.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/lenne.tech-ng-base-shared.mjs +164 -113
- package/{fesm2020 → fesm2022}/lenne.tech-ng-base-shared.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/lenne.tech-ng-base.mjs +153 -126
- package/fesm2022/lenne.tech-ng-base.mjs.map +1 -0
- package/package.json +23 -38
- package/src/directives/lazy-load.directive.d.ts +1 -1
- package/src/directives/match-height.directive.d.ts +1 -1
- package/src/directives/resizable.directive.d.ts +1 -1
- package/src/guards/auth.guard.d.ts +4 -3
- package/src/guards/can-deactivate.guard.d.ts +1 -2
- package/src/guards/logout.guard.d.ts +2 -2
- package/esm2020/base-cms/base-cms-routing.module.mjs +0 -32
- package/esm2020/base-cms/base-cms.module.mjs +0 -59
- package/esm2020/base-cms/pages/base-cms/base-cms.component.mjs +0 -222
- package/esm2020/base-components/base-components.module.mjs +0 -123
- package/esm2020/base-components/components/breadcrumb/breadcrumb.component.mjs +0 -18
- package/esm2020/base-components/components/change-password/change-password.component.mjs +0 -90
- package/esm2020/base-components/components/checkbox/checkbox.component.mjs +0 -31
- package/esm2020/base-components/components/delete-account/delete-account.component.mjs +0 -56
- package/esm2020/base-components/components/fab-button/fab-button.component.mjs +0 -21
- package/esm2020/base-components/components/input/input.component.mjs +0 -67
- package/esm2020/base-components/components/loading-bar/loading-bar.component.mjs +0 -35
- package/esm2020/base-components/components/model-form/model-form-base.component.mjs +0 -136
- package/esm2020/base-components/components/model-form/model-form.component.mjs +0 -564
- package/esm2020/base-components/components/model-form-sub/model-form-sub.component.mjs +0 -102
- package/esm2020/base-components/components/model-table/model-table.component.mjs +0 -456
- package/esm2020/base-components/components/refence-input/refence-input.component.mjs +0 -261
- package/esm2020/base-components/components/select/select.component.mjs +0 -54
- package/esm2020/base-components/components/skeleton-loader/skeleton-loader.component.mjs +0 -32
- package/esm2020/base-components/components/tags/tags.component.mjs +0 -218
- package/esm2020/base-components/components/textarea/textarea.component.mjs +0 -72
- package/esm2020/base-components/components/toast/toast.component.mjs +0 -68
- package/esm2020/base-components/components/upload-image/upload-image.component.mjs +0 -324
- package/esm2020/base-components/directives/back-button.directive.mjs +0 -23
- package/esm2020/base-components/directives/context-menu.directive.mjs +0 -108
- package/esm2020/base-components/directives/sort.directive.mjs +0 -57
- package/esm2020/base-components/directives/stop-propagation.directive.mjs +0 -23
- package/esm2020/base-components/pipes/ellipses.pipe.mjs +0 -22
- package/esm2020/base-prototype/base-prototype.module.mjs +0 -53
- package/esm2020/base-prototype/pages/email-verification/email-verification.component.mjs +0 -55
- package/esm2020/base-prototype/pages/forgot-password/forgot-password.component.mjs +0 -67
- package/esm2020/base-prototype/pages/login/login.component.mjs +0 -102
- package/esm2020/base-prototype/pages/profile/profile.component.mjs +0 -81
- package/esm2020/base-prototype/pages/register/register.component.mjs +0 -86
- package/esm2020/base-prototype/pages/set-password/set-password.component.mjs +0 -82
- package/esm2020/shared/classes/auth.class.mjs +0 -17
- package/esm2020/shared/classes/basic-user.class.mjs +0 -52
- package/esm2020/shared/classes/graphql-enum.class.mjs +0 -9
- package/esm2020/shared/classes/graphql-meta.class.mjs +0 -344
- package/esm2020/shared/classes/graphql-type.class.mjs +0 -17
- package/esm2020/shared/classes/sort.class.mjs +0 -40
- package/esm2020/shared/services/auth.service.mjs +0 -148
- package/esm2020/shared/services/breadcrumb.service.mjs +0 -68
- package/esm2020/shared/services/file.service.mjs +0 -84
- package/esm2020/shared/services/forms.service.mjs +0 -59
- package/esm2020/shared/services/graphql-meta.service.mjs +0 -123
- package/esm2020/shared/services/graphql-plus.service.mjs +0 -89
- package/esm2020/shared/services/graphql.service.mjs +0 -507
- package/esm2020/shared/services/image.service.mjs +0 -102
- package/esm2020/shared/services/loader.service.mjs +0 -79
- package/esm2020/shared/services/navigation.service.mjs +0 -36
- package/esm2020/shared/services/scroll.service.mjs +0 -179
- package/esm2020/shared/services/storage.service.mjs +0 -140
- package/esm2020/shared/services/toast.service.mjs +0 -41
- package/esm2020/shared/services/user.service.mjs +0 -155
- package/esm2020/shared/services/ws.service.mjs +0 -16
- package/esm2020/src/base.module.mjs +0 -97
- package/esm2020/src/directives/lazy-load.directive.mjs +0 -45
- package/esm2020/src/directives/match-height.directive.mjs +0 -84
- package/esm2020/src/directives/resizable.directive.mjs +0 -90
- package/esm2020/src/functions/extract-files.function.mjs +0 -84
- package/esm2020/src/guards/auth.guard.mjs +0 -80
- package/esm2020/src/guards/can-deactivate.guard.mjs +0 -16
- package/esm2020/src/guards/logout.guard.mjs +0 -32
- package/esm2020/src/pipes/date-ago.pipe.mjs +0 -65
- package/esm2020/src/pipes/safe-html.pipe.mjs +0 -21
- package/esm2020/src/services/fullscreen.service.mjs +0 -51
- package/esm2020/src/services/seo.service.mjs +0 -97
- package/esm2020/src/services/theme.service.mjs +0 -43
- package/fesm2015/lenne.tech-ng-base-base-cms.mjs +0 -323
- package/fesm2015/lenne.tech-ng-base-base-cms.mjs.map +0 -1
- package/fesm2015/lenne.tech-ng-base-base-components.mjs +0 -2866
- package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +0 -1
- package/fesm2015/lenne.tech-ng-base-base-prototype.mjs +0 -496
- package/fesm2015/lenne.tech-ng-base-base-prototype.mjs.map +0 -1
- package/fesm2015/lenne.tech-ng-base-shared.mjs +0 -2750
- package/fesm2015/lenne.tech-ng-base-shared.mjs.map +0 -1
- package/fesm2015/lenne.tech-ng-base.mjs +0 -905
- package/fesm2015/lenne.tech-ng-base.mjs.map +0 -1
- package/fesm2020/lenne.tech-ng-base-base-components.mjs.map +0 -1
- package/fesm2020/lenne.tech-ng-base-base-prototype.mjs.map +0 -1
- package/fesm2020/lenne.tech-ng-base.mjs.map +0 -1
- /package/{esm2020 → esm2022}/base-cms/interfaces/base-cms-module-config.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/base-cms/lenne.tech-ng-base-base-cms.mjs +0 -0
- /package/{esm2020 → esm2022}/base-cms/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/base-components/lenne.tech-ng-base-base-components.mjs +0 -0
- /package/{esm2020 → esm2022}/base-components/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/base-prototype/lenne.tech-ng-base-base-prototype.mjs +0 -0
- /package/{esm2020 → esm2022}/base-prototype/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lenne.tech-ng-base.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/classes/helper.class.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/classes/standard.class.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/decorators/debounce.decorator.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/enums/comparison-operator.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/enums/graphql-request-type.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/enums/logical-operator.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/enums/skeleton-type.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/enums/sort-order.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/enums/toast-type.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/functions/ws-client.function.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/base-module-config.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/breadcrumb.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/can-component-deactivate.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/cms-enum-values.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/cms-field-config.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/cms-model-config.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/cms-table-field.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/combined-filter-input.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/compress-options.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/cropping-options.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/field-object.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/field.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/filter-input.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/find-args.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/graphql-crud-type.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/graphql-fields-object.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/graphql-options.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/graphql-plus-options.interfacen.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/graphql-type-collection.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/login-config.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/single-filter-input.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/sort-input.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/time-components.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/interfaces/toast.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/lenne.tech-ng-base-shared.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/types/graphql-fields.type.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/types/storage.type.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/validators/email.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/validators/match.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/validators/secure-password.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/src/decorators/auto-unsubscribe.decorator.mjs +0 -0
- /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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
if (
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
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
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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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"}
|