@igo2/core 20.2.0 → 21.0.0-next.10
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/fesm2022/igo2-core-activity.mjs +10 -10
- package/fesm2022/igo2-core-analytics.mjs +4 -4
- package/fesm2022/igo2-core-analytics.mjs.map +1 -1
- package/fesm2022/igo2-core-config.mjs +29 -33
- package/fesm2022/igo2-core-config.mjs.map +1 -1
- package/fesm2022/igo2-core-language.mjs +13 -11
- package/fesm2022/igo2-core-language.mjs.map +1 -1
- package/fesm2022/igo2-core-media.mjs +3 -3
- package/fesm2022/igo2-core-media.mjs.map +1 -1
- package/fesm2022/igo2-core-message.mjs +35 -33
- package/fesm2022/igo2-core-message.mjs.map +1 -1
- package/fesm2022/igo2-core-network.mjs +6 -12
- package/fesm2022/igo2-core-network.mjs.map +1 -1
- package/fesm2022/igo2-core-regex.mjs +3 -3
- package/fesm2022/igo2-core-regex.mjs.map +1 -1
- package/fesm2022/igo2-core-request.mjs +14 -14
- package/fesm2022/igo2-core-request.mjs.map +1 -1
- package/fesm2022/igo2-core-route.mjs +3 -3
- package/fesm2022/igo2-core-route.mjs.map +1 -1
- package/fesm2022/igo2-core-storage.mjs +9 -9
- package/fesm2022/igo2-core-storage.mjs.map +1 -1
- package/fesm2022/igo2-core.mjs +4 -4
- package/locale/en.json +1 -1
- package/locale/fr.json +1 -1
- package/package.json +27 -26
- package/{language/index.d.ts → types/igo2-core-language.d.ts} +2 -2
- package/{media/index.d.ts → types/igo2-core-media.d.ts} +4 -4
- package/{message/index.d.ts → types/igo2-core-message.d.ts} +11 -11
- package/{monitoring/index.d.ts → types/igo2-core-monitoring.d.ts} +1 -1
- package/{network/index.d.ts → types/igo2-core-network.d.ts} +3 -4
- package/{regex/index.d.ts → types/igo2-core-regex.d.ts} +1 -1
- package/{storage/index.d.ts → types/igo2-core-storage.d.ts} +1 -1
- /package/{activity/index.d.ts → types/igo2-core-activity.d.ts} +0 -0
- /package/{analytics/index.d.ts → types/igo2-core-analytics.d.ts} +0 -0
- /package/{config/index.d.ts → types/igo2-core-config.d.ts} +0 -0
- /package/{environment/index.d.ts → types/igo2-core-environment.d.ts} +0 -0
- /package/{request/index.d.ts → types/igo2-core-request.d.ts} +0 -0
- /package/{route/index.d.ts → types/igo2-core-route.d.ts} +0 -0
- /package/{user/index.d.ts → types/igo2-core-user.d.ts} +0 -0
- /package/{index.d.ts → types/igo2-core.d.ts} +0 -0
|
@@ -22,10 +22,10 @@ class ActivityService {
|
|
|
22
22
|
this.ids.splice(index, 1);
|
|
23
23
|
this.counter$.next(this.ids.length);
|
|
24
24
|
}
|
|
25
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
26
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
25
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ActivityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
26
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ActivityService, providedIn: 'root' });
|
|
27
27
|
}
|
|
28
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ActivityService, decorators: [{
|
|
29
29
|
type: Injectable,
|
|
30
30
|
args: [{
|
|
31
31
|
providedIn: 'root'
|
|
@@ -49,10 +49,10 @@ class ActivityInterceptor {
|
|
|
49
49
|
this.activityService.unregister(id);
|
|
50
50
|
}));
|
|
51
51
|
}
|
|
52
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
53
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
52
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ActivityInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
53
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ActivityInterceptor });
|
|
54
54
|
}
|
|
55
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
55
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ActivityInterceptor, decorators: [{
|
|
56
56
|
type: Injectable
|
|
57
57
|
}] });
|
|
58
58
|
|
|
@@ -69,11 +69,11 @@ class IgoActivityModule {
|
|
|
69
69
|
]
|
|
70
70
|
};
|
|
71
71
|
}
|
|
72
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
73
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
74
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
72
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: IgoActivityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
73
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.14", ngImport: i0, type: IgoActivityModule });
|
|
74
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: IgoActivityModule });
|
|
75
75
|
}
|
|
76
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
76
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: IgoActivityModule, decorators: [{
|
|
77
77
|
type: NgModule,
|
|
78
78
|
args: [{
|
|
79
79
|
imports: [],
|
|
@@ -33,7 +33,7 @@ class AnalyticsService {
|
|
|
33
33
|
g.async = true;
|
|
34
34
|
g.defer = true;
|
|
35
35
|
g.src = url + '.js';
|
|
36
|
-
s.parentNode
|
|
36
|
+
s.parentNode?.insertBefore(g, s);
|
|
37
37
|
})();
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
@@ -75,10 +75,10 @@ class AnalyticsService {
|
|
|
75
75
|
if (this.options.provider === 'matomo')
|
|
76
76
|
this.paq.push(['trackEvent', category, action, parameters]);
|
|
77
77
|
}
|
|
78
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
79
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
78
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: AnalyticsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
79
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: AnalyticsService, providedIn: 'root' });
|
|
80
80
|
}
|
|
81
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
81
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: AnalyticsService, decorators: [{
|
|
82
82
|
type: Injectable,
|
|
83
83
|
args: [{
|
|
84
84
|
providedIn: 'root'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"igo2-core-analytics.mjs","sources":["../../../packages/core/analytics/src/analytics.service.ts","../../../packages/core/analytics/src/igo2-core-analytics.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\n\nimport { AnalyticsBaseUser, AnalyticsOptions } from './analytics.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AnalyticsService {\n private config = inject(ConfigService);\n\n private options: AnalyticsOptions;\n\n get paq() {\n return ((window as any)._paq = (window as any)._paq || []);\n }\n\n constructor() {\n this.options = this.config.getConfig('analytics') || {};\n\n if (this.options.provider === 'matomo') {\n this.initMatomo();\n }\n }\n\n private initMatomo() {\n if (!this.options.url || !this.options.id) {\n return;\n }\n const url =\n this.options.url.substr(-1) === '/'\n ? this.options.url + 'matomo'\n : this.options.url;\n\n // this.paq.push(['trackPageView']);\n // this.paq.push(['enableLinkTracking']);\n (() => {\n this.paq.push(['setTrackerUrl', url + '.php']);\n this.paq.push(['setSiteId', this.options.id]);\n this.paq.push(['setSecureCookie', location.protocol === 'https:']);\n const g = document.createElement('script');\n const s = document.getElementsByTagName('script')[0];\n g.type = 'text/javascript';\n g.async = true;\n g.defer = true;\n g.src = url + '.js';\n s.parentNode
|
|
1
|
+
{"version":3,"file":"igo2-core-analytics.mjs","sources":["../../../packages/core/analytics/src/analytics.service.ts","../../../packages/core/analytics/src/igo2-core-analytics.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\n\nimport { AnalyticsBaseUser, AnalyticsOptions } from './analytics.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AnalyticsService {\n private config = inject(ConfigService);\n\n private options: AnalyticsOptions;\n\n get paq() {\n return ((window as any)._paq = (window as any)._paq || []);\n }\n\n constructor() {\n this.options = this.config.getConfig('analytics') || {};\n\n if (this.options.provider === 'matomo') {\n this.initMatomo();\n }\n }\n\n private initMatomo() {\n if (!this.options.url || !this.options.id) {\n return;\n }\n const url =\n this.options.url.substr(-1) === '/'\n ? this.options.url + 'matomo'\n : this.options.url;\n\n // this.paq.push(['trackPageView']);\n // this.paq.push(['enableLinkTracking']);\n (() => {\n this.paq.push(['setTrackerUrl', url + '.php']);\n this.paq.push(['setSiteId', this.options.id]);\n this.paq.push(['setSecureCookie', location.protocol === 'https:']);\n const g = document.createElement('script');\n const s = document.getElementsByTagName('script')[0];\n g.type = 'text/javascript';\n g.async = true;\n g.defer = true;\n g.src = url + '.js';\n s.parentNode?.insertBefore(g, s);\n })();\n }\n\n /**\n * Pass `null` to unset the user.\n */\n public setUser(user: AnalyticsBaseUser | null, profils?: string[]) {\n if (this.options.provider === 'matomo') {\n if (!user) {\n this.paq.push(['resetUserId']);\n this.paq.push(['deleteCustomVariable', 1, 'user']);\n this.paq.push(['deleteCustomVariable', 2, 'name']);\n this.paq.push(['deleteCustomVariable', 3, 'profils']);\n } else {\n this.paq.push(['setUserId', user.id]);\n\n const name = `${user.firstName} ${user.lastName}`;\n this.paq.push(['setCustomVariable', 1, 'user', user.sourceId, 'visit']);\n this.paq.push(['setCustomVariable', 2, 'name', name, 'visit']);\n this.paq.push(['setCustomVariable', 3, 'profils', profils, 'visit']);\n }\n\n this.paq.push(['trackPageView']);\n this.paq.push(['enableLinkTracking']);\n }\n }\n\n public trackSearch(term: string, nbResults: number) {\n if (this.options.provider === 'matomo') {\n this.paq.push(['trackSiteSearch', term, false, nbResults]);\n }\n }\n\n public trackEvent(category: string, action: string, name: string) {\n if (this.options.provider === 'matomo') {\n this.paq.push(['trackEvent', category, action, name]);\n }\n }\n\n /**\n * Function that tracks layers added to the map\n */\n public trackLayer(category: string, action: string, parameters: any) {\n if (this.options.provider === 'matomo')\n this.paq.push(['trackEvent', category, action, parameters]);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,6 @@ import { inject, Injectable, InjectionToken, makeEnvironmentProviders, provideAp
|
|
|
3
3
|
import { HttpBackend, HttpClient } from '@angular/common/http';
|
|
4
4
|
import { ObjectUtils } from '@igo2/utils';
|
|
5
5
|
import { BehaviorSubject, throwError } from 'rxjs';
|
|
6
|
-
import { catchError } from 'rxjs/operators';
|
|
7
6
|
|
|
8
7
|
const CONFIG_DEPRECATED = {
|
|
9
8
|
showMenuButton: {
|
|
@@ -14,10 +13,6 @@ const CONFIG_DEPRECATED = {
|
|
|
14
13
|
alternativeKey: 'menu.button.useThemeColor',
|
|
15
14
|
mayBeRemoveIn: new Date('2024-06-06')
|
|
16
15
|
},
|
|
17
|
-
importWithStyle: {
|
|
18
|
-
alternativeKey: 'importExport.importWithStyle',
|
|
19
|
-
mayBeRemoveIn: new Date('2024-06-06')
|
|
20
|
-
},
|
|
21
16
|
hasGeolocateButton: {
|
|
22
17
|
alternativeKey: 'geolocate.button.visible',
|
|
23
18
|
mayBeRemoveIn: new Date('2024-06-06')
|
|
@@ -33,15 +28,15 @@ const ALTERNATE_CONFIG_FROM_DEPRECATION = new Map(Object.entries(CONFIG_DEPRECAT
|
|
|
33
28
|
]));
|
|
34
29
|
|
|
35
30
|
const version = {
|
|
36
|
-
lib: '
|
|
37
|
-
releaseDate:
|
|
31
|
+
lib: '21.0.0-next.10',
|
|
32
|
+
releaseDate: 1781278997213
|
|
38
33
|
};
|
|
39
34
|
|
|
40
35
|
class ConfigService {
|
|
41
36
|
config;
|
|
42
37
|
httpClient;
|
|
43
38
|
configDeprecated = new Map(Object.entries(CONFIG_DEPRECATED));
|
|
44
|
-
_isLoaded$ = new BehaviorSubject(
|
|
39
|
+
_isLoaded$ = new BehaviorSubject(false);
|
|
45
40
|
isLoaded$ = this._isLoaded$.asObservable();
|
|
46
41
|
constructor() {
|
|
47
42
|
const handler = inject(HttpBackend);
|
|
@@ -52,7 +47,7 @@ class ConfigService {
|
|
|
52
47
|
*/
|
|
53
48
|
getConfigs() {
|
|
54
49
|
Array.from(this.configDeprecated.keys()).map((deprecatedKey) => {
|
|
55
|
-
const deprecatedValue = ObjectUtils.resolve(this.config, deprecatedKey);
|
|
50
|
+
const deprecatedValue = ObjectUtils.resolve(this.config ?? {}, deprecatedKey);
|
|
56
51
|
if (deprecatedValue !== undefined) {
|
|
57
52
|
this.handleDeprecatedConfig(deprecatedKey);
|
|
58
53
|
}
|
|
@@ -63,7 +58,7 @@ class ConfigService {
|
|
|
63
58
|
* Use to get the data found in config file
|
|
64
59
|
*/
|
|
65
60
|
getConfig(key, defaultValue) {
|
|
66
|
-
let value = ObjectUtils.resolve(this.config, key);
|
|
61
|
+
let value = ObjectUtils.resolve(this.config ?? {}, key);
|
|
67
62
|
const isDeprecated = this.configDeprecated.get(key);
|
|
68
63
|
if (isDeprecated && value !== undefined) {
|
|
69
64
|
this.handleDeprecatedConfig(key);
|
|
@@ -71,16 +66,16 @@ class ConfigService {
|
|
|
71
66
|
else if (value === undefined) {
|
|
72
67
|
value = this.handleDeprecationPossibility(key);
|
|
73
68
|
}
|
|
74
|
-
return value ?? defaultValue;
|
|
69
|
+
return (value ?? defaultValue);
|
|
75
70
|
}
|
|
76
71
|
handleDeprecatedConfig(key) {
|
|
77
72
|
const options = this.configDeprecated.get(key);
|
|
78
73
|
let message = `This config (${key}) is deprecated and will be removed shortly`;
|
|
79
|
-
if (options
|
|
74
|
+
if (options?.alternativeKey) {
|
|
80
75
|
message += ` You should use this key (${options.alternativeKey}) as an alternate solution`;
|
|
81
76
|
}
|
|
82
77
|
const currentDate = new Date();
|
|
83
|
-
currentDate >= options.mayBeRemoveIn
|
|
78
|
+
options?.mayBeRemoveIn && currentDate >= options.mayBeRemoveIn
|
|
84
79
|
? console.error(message)
|
|
85
80
|
: console.warn(message);
|
|
86
81
|
}
|
|
@@ -96,31 +91,32 @@ class ConfigService {
|
|
|
96
91
|
*/
|
|
97
92
|
load(options) {
|
|
98
93
|
const baseConfig = options.default;
|
|
99
|
-
|
|
94
|
+
const path = options.path;
|
|
95
|
+
if (!path) {
|
|
100
96
|
this.config = baseConfig;
|
|
101
97
|
this._isLoaded$.next(true);
|
|
102
98
|
return;
|
|
103
99
|
}
|
|
104
100
|
return new Promise((resolve) => {
|
|
105
|
-
this.httpClient
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
101
|
+
this.httpClient.get(path).subscribe({
|
|
102
|
+
next: (configResponse) => {
|
|
103
|
+
this.config = ObjectUtils.mergeDeep(ObjectUtils.mergeDeep({ version }, baseConfig ?? {}), configResponse);
|
|
104
|
+
this._isLoaded$.next(true);
|
|
105
|
+
resolve(true);
|
|
106
|
+
},
|
|
107
|
+
error: (error) => {
|
|
108
|
+
console.log(`Configuration file ${path} could not be read`);
|
|
109
|
+
this._isLoaded$.next(false);
|
|
110
|
+
resolve(true);
|
|
111
|
+
return throwError(() => error.error || 'Server error');
|
|
112
|
+
}
|
|
117
113
|
});
|
|
118
114
|
});
|
|
119
115
|
}
|
|
120
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
121
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
116
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
117
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ConfigService, providedIn: 'root' });
|
|
122
118
|
}
|
|
123
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
119
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ConfigService, decorators: [{
|
|
124
120
|
type: Injectable,
|
|
125
121
|
args: [{
|
|
126
122
|
providedIn: 'root'
|
|
@@ -152,11 +148,11 @@ class IgoConfigModule {
|
|
|
152
148
|
providers: [provideConfig({})]
|
|
153
149
|
};
|
|
154
150
|
}
|
|
155
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
156
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
157
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
151
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: IgoConfigModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
152
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.14", ngImport: i0, type: IgoConfigModule });
|
|
153
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: IgoConfigModule });
|
|
158
154
|
}
|
|
159
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
155
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: IgoConfigModule, decorators: [{
|
|
160
156
|
type: NgModule,
|
|
161
157
|
args: [{
|
|
162
158
|
imports: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"igo2-core-config.mjs","sources":["../../../packages/core/config/src/config-deprecated.ts","../../../packages/core/config/src/version.ts","../../../packages/core/config/src/config.service.ts","../../../packages/core/config/src/config.provider.ts","../../../packages/core/config/src/config.module.ts","../../../packages/core/config/src/igo2-core-config.ts"],"sourcesContent":["import { AlternateConfigOptions, DeprecatedOptions } from './config.interface';\n\nexport const CONFIG_DEPRECATED: Record<string, DeprecatedOptions> = {\n showMenuButton: {\n alternativeKey: 'menu.button.visible',\n mayBeRemoveIn: new Date('2024-06-06')\n },\n menuButtonReverseColor: {\n alternativeKey: 'menu.button.useThemeColor',\n mayBeRemoveIn: new Date('2024-06-06')\n },\n importWithStyle: {\n alternativeKey: 'importExport.importWithStyle',\n mayBeRemoveIn: new Date('2024-06-06')\n },\n hasGeolocateButton: {\n alternativeKey: 'geolocate.button.visible',\n mayBeRemoveIn: new Date('2024-06-06')\n }\n};\n\nexport const ALTERNATE_CONFIG_FROM_DEPRECATION = new Map<\n string,\n AlternateConfigOptions\n>(\n Object.entries(CONFIG_DEPRECATED)\n .filter(([_, options]) => options.alternativeKey)\n .map(([key, options]) => [\n options.alternativeKey,\n {\n deprecatedKey: key\n } satisfies AlternateConfigOptions\n ])\n);\n","export interface Version {\n app?: string;\n lib?: string;\n releaseDateApp?: number;\n releaseDate?: number;\n}\n\nexport const version: Version = {\n lib: '20.2.0',\n releaseDate: 1781008319728\n};\n","import { HttpBackend, HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { ObjectUtils } from '@igo2/utils';\n\nimport { BehaviorSubject, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport {\n ALTERNATE_CONFIG_FROM_DEPRECATION,\n CONFIG_DEPRECATED\n} from './config-deprecated';\nimport { ConfigOptions } from './config.interface';\nimport { version } from './version';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfigService<T extends object = Record<string, any>> {\n private config: T | null;\n private httpClient: HttpClient;\n private configDeprecated = new Map(Object.entries(CONFIG_DEPRECATED));\n\n private _isLoaded$ = new BehaviorSubject<boolean>(null);\n isLoaded$ = this._isLoaded$.asObservable();\n\n constructor() {\n const handler = inject(HttpBackend);\n\n this.httpClient = new HttpClient(handler);\n }\n\n /**\n * Use to get the all config file (merge from environnement.ts and config.json)\n */\n public getConfigs(): any {\n Array.from(this.configDeprecated.keys()).map((deprecatedKey) => {\n const deprecatedValue = ObjectUtils.resolve(this.config, deprecatedKey);\n if (deprecatedValue !== undefined) {\n this.handleDeprecatedConfig(deprecatedKey);\n }\n });\n return this.config;\n }\n\n /**\n * Use to get the data found in config file\n */\n public getConfig<T = any>(key: string, defaultValue?: unknown): T {\n let value = ObjectUtils.resolve(this.config, key);\n\n const isDeprecated = this.configDeprecated.get(key);\n if (isDeprecated && value !== undefined) {\n this.handleDeprecatedConfig(key);\n } else if (value === undefined) {\n value = this.handleDeprecationPossibility(key);\n }\n\n return value ?? defaultValue;\n }\n\n private handleDeprecatedConfig(key: string): void {\n const options = this.configDeprecated.get(key);\n\n let message = `This config (${key}) is deprecated and will be removed shortly`;\n if (options.alternativeKey) {\n message += ` You should use this key (${options.alternativeKey}) as an alternate solution`;\n }\n\n const currentDate = new Date();\n currentDate >= options.mayBeRemoveIn\n ? console.error(message)\n : console.warn(message);\n }\n\n private handleDeprecationPossibility(key: string): any {\n const options = ALTERNATE_CONFIG_FROM_DEPRECATION.get(key);\n if (!options) {\n return;\n }\n\n return this.getConfig(options.deprecatedKey);\n }\n\n /**\n * This method loads \"[path]\" to get all config's variables\n */\n public load(options: ConfigOptions<T>): void | Promise<unknown> {\n const baseConfig = options.default;\n if (!options.path) {\n this.config = baseConfig;\n this._isLoaded$.next(true);\n return;\n }\n\n return new Promise((resolve) => {\n this.httpClient\n .get(options.path)\n .pipe(\n catchError((error: any): any => {\n console.log(`Configuration file ${options.path} could not be read`);\n this._isLoaded$.next(false);\n resolve(true);\n return throwError(error.error || 'Server error');\n })\n )\n .subscribe((configResponse: object) => {\n this.config = ObjectUtils.mergeDeep(\n ObjectUtils.mergeDeep({ version }, baseConfig),\n configResponse\n );\n this._isLoaded$.next(true);\n resolve(true);\n });\n });\n }\n}\n","import {\n EnvironmentProviders,\n InjectionToken,\n inject,\n makeEnvironmentProviders,\n provideAppInitializer\n} from '@angular/core';\n\nimport { ConfigOptions } from './config.interface';\nimport { ConfigService } from './config.service';\n\nexport const CONFIG_OPTIONS = new InjectionToken<ConfigOptions>(\n 'configOptions'\n);\n\nexport function provideConfig(options: ConfigOptions): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: CONFIG_OPTIONS,\n useValue: options\n },\n provideAppInitializer(async () => {\n const configService = inject(ConfigService);\n const options = inject(CONFIG_OPTIONS);\n return configService.load(options);\n })\n ]);\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { provideConfig } from './config.provider';\n\n/**\n * @deprecated import the provideConfig directly\n */\n@NgModule({\n imports: [],\n declarations: [],\n exports: []\n})\nexport class IgoConfigModule {\n static forRoot(): ModuleWithProviders<IgoConfigModule> {\n return {\n ngModule: IgoConfigModule,\n providers: [provideConfig({})]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"igo2-core-config.mjs","sources":["../../../packages/core/config/src/config-deprecated.ts","../../../packages/core/config/src/version.ts","../../../packages/core/config/src/config.service.ts","../../../packages/core/config/src/config.provider.ts","../../../packages/core/config/src/config.module.ts","../../../packages/core/config/src/igo2-core-config.ts"],"sourcesContent":["import { AlternateConfigOptions, DeprecatedOptions } from './config.interface';\n\nexport const CONFIG_DEPRECATED: Record<string, DeprecatedOptions> = {\n showMenuButton: {\n alternativeKey: 'menu.button.visible',\n mayBeRemoveIn: new Date('2024-06-06')\n },\n menuButtonReverseColor: {\n alternativeKey: 'menu.button.useThemeColor',\n mayBeRemoveIn: new Date('2024-06-06')\n },\n hasGeolocateButton: {\n alternativeKey: 'geolocate.button.visible',\n mayBeRemoveIn: new Date('2024-06-06')\n }\n};\n\nexport const ALTERNATE_CONFIG_FROM_DEPRECATION = new Map<\n string,\n AlternateConfigOptions\n>(\n Object.entries(CONFIG_DEPRECATED)\n .filter(([_, options]) => options.alternativeKey)\n .map(\n ([key, options]) =>\n [\n options.alternativeKey!,\n {\n deprecatedKey: key\n } satisfies AlternateConfigOptions\n ] as const\n )\n);\n","export interface Version {\n app?: string;\n lib?: string;\n releaseDateApp?: number;\n releaseDate?: number;\n}\n\nexport const version: Version = {\n lib: '21.0.0-next.10',\n releaseDate: 1781278997213\n};\n","import { HttpBackend, HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { ObjectUtils } from '@igo2/utils';\n\nimport { BehaviorSubject, throwError } from 'rxjs';\n\nimport {\n ALTERNATE_CONFIG_FROM_DEPRECATION,\n CONFIG_DEPRECATED\n} from './config-deprecated';\nimport { ConfigOptions } from './config.interface';\nimport { version } from './version';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfigService<T extends object = Record<string, any>> {\n private config!: T | undefined;\n private httpClient: HttpClient;\n private configDeprecated = new Map(Object.entries(CONFIG_DEPRECATED));\n\n private _isLoaded$ = new BehaviorSubject(false);\n isLoaded$ = this._isLoaded$.asObservable();\n\n constructor() {\n const handler = inject(HttpBackend);\n\n this.httpClient = new HttpClient(handler);\n }\n\n /**\n * Use to get the all config file (merge from environnement.ts and config.json)\n */\n public getConfigs(): any {\n Array.from(this.configDeprecated.keys()).map((deprecatedKey) => {\n const deprecatedValue = ObjectUtils.resolve(\n this.config ?? {},\n deprecatedKey\n );\n if (deprecatedValue !== undefined) {\n this.handleDeprecatedConfig(deprecatedKey);\n }\n });\n return this.config;\n }\n\n /**\n * Use to get the data found in config file\n */\n public getConfig<T = any>(key: string, defaultValue?: unknown): T {\n let value = ObjectUtils.resolve(this.config ?? {}, key);\n\n const isDeprecated = this.configDeprecated.get(key);\n if (isDeprecated && value !== undefined) {\n this.handleDeprecatedConfig(key);\n } else if (value === undefined) {\n value = this.handleDeprecationPossibility(key);\n }\n\n return (value ?? defaultValue) as T;\n }\n\n private handleDeprecatedConfig(key: string): void {\n const options = this.configDeprecated.get(key);\n\n let message = `This config (${key}) is deprecated and will be removed shortly`;\n if (options?.alternativeKey) {\n message += ` You should use this key (${options.alternativeKey}) as an alternate solution`;\n }\n\n const currentDate = new Date();\n options?.mayBeRemoveIn && currentDate >= options.mayBeRemoveIn\n ? console.error(message)\n : console.warn(message);\n }\n\n private handleDeprecationPossibility(key: string): any {\n const options = ALTERNATE_CONFIG_FROM_DEPRECATION.get(key);\n if (!options) {\n return;\n }\n\n return this.getConfig(options.deprecatedKey);\n }\n\n /**\n * This method loads \"[path]\" to get all config's variables\n */\n public load(options: ConfigOptions<T>): void | Promise<unknown> {\n const baseConfig = options.default;\n const path = options.path;\n if (!path) {\n this.config = baseConfig;\n this._isLoaded$.next(true);\n return;\n }\n\n return new Promise((resolve) => {\n this.httpClient.get<Record<string, unknown>>(path).subscribe({\n next: (configResponse) => {\n this.config = ObjectUtils.mergeDeep(\n ObjectUtils.mergeDeep({ version }, baseConfig ?? {}),\n configResponse\n ) as T;\n this._isLoaded$.next(true);\n resolve(true);\n },\n error: (error) => {\n console.log(`Configuration file ${path} could not be read`);\n this._isLoaded$.next(false);\n resolve(true);\n return throwError(() => error.error || 'Server error');\n }\n });\n });\n }\n}\n","import {\n EnvironmentProviders,\n InjectionToken,\n inject,\n makeEnvironmentProviders,\n provideAppInitializer\n} from '@angular/core';\n\nimport { ConfigOptions } from './config.interface';\nimport { ConfigService } from './config.service';\n\nexport const CONFIG_OPTIONS = new InjectionToken<ConfigOptions>(\n 'configOptions'\n);\n\nexport function provideConfig(options: ConfigOptions): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: CONFIG_OPTIONS,\n useValue: options\n },\n provideAppInitializer(async () => {\n const configService = inject(ConfigService);\n const options = inject(CONFIG_OPTIONS);\n return configService.load(options);\n })\n ]);\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { provideConfig } from './config.provider';\n\n/**\n * @deprecated import the provideConfig directly\n */\n@NgModule({\n imports: [],\n declarations: [],\n exports: []\n})\nexport class IgoConfigModule {\n static forRoot(): ModuleWithProviders<IgoConfigModule> {\n return {\n ngModule: IgoConfigModule,\n providers: [provideConfig({})]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -9,11 +9,11 @@ import { ConfigService } from '@igo2/core/config';
|
|
|
9
9
|
import { timeout, catchError } from 'rxjs/operators';
|
|
10
10
|
|
|
11
11
|
class IgoLanguageModule {
|
|
12
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
13
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
14
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
12
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: IgoLanguageModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
13
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.14", ngImport: i0, type: IgoLanguageModule, exports: [TranslateModule] });
|
|
14
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: IgoLanguageModule, imports: [TranslateModule] });
|
|
15
15
|
}
|
|
16
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: IgoLanguageModule, decorators: [{
|
|
17
17
|
type: NgModule,
|
|
18
18
|
args: [{
|
|
19
19
|
exports: [TranslateModule]
|
|
@@ -25,7 +25,7 @@ class LanguageLoaderBase {
|
|
|
25
25
|
|
|
26
26
|
class LanguageLoader {
|
|
27
27
|
httpClient;
|
|
28
|
-
_isLoaded$ = new BehaviorSubject(
|
|
28
|
+
_isLoaded$ = new BehaviorSubject(false);
|
|
29
29
|
isLoaded$ = this._isLoaded$.asObservable();
|
|
30
30
|
suffix = '.json';
|
|
31
31
|
prefix;
|
|
@@ -69,7 +69,7 @@ class LanguageLoader {
|
|
|
69
69
|
class LanguageLoaderWithAsyncConfig extends LanguageLoader {
|
|
70
70
|
configService;
|
|
71
71
|
constructor(handler, configService, prefix, suffix = '.json') {
|
|
72
|
-
super(handler,
|
|
72
|
+
super(handler, {});
|
|
73
73
|
this.configService = configService;
|
|
74
74
|
this.prefix = prefix;
|
|
75
75
|
this.suffix = suffix;
|
|
@@ -104,7 +104,9 @@ class LanguageService {
|
|
|
104
104
|
this.language$.next(lang);
|
|
105
105
|
}
|
|
106
106
|
getLanguage() {
|
|
107
|
-
return this.matchLanguage(this.language)
|
|
107
|
+
return this.language && this.matchLanguage(this.language)
|
|
108
|
+
? this.language
|
|
109
|
+
: 'en';
|
|
108
110
|
}
|
|
109
111
|
matchLanguage(lang) {
|
|
110
112
|
return !!lang.match(/en|fr/);
|
|
@@ -118,10 +120,10 @@ class LanguageService {
|
|
|
118
120
|
this.language$.next(this.language);
|
|
119
121
|
});
|
|
120
122
|
}
|
|
121
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
122
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
123
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: LanguageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
124
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: LanguageService, providedIn: 'root' });
|
|
123
125
|
}
|
|
124
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
126
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: LanguageService, decorators: [{
|
|
125
127
|
type: Injectable,
|
|
126
128
|
args: [{
|
|
127
129
|
providedIn: 'root'
|
|
@@ -234,7 +236,7 @@ const setTranslationConfig = (loader, defaultLanguage) => ({
|
|
|
234
236
|
}
|
|
235
237
|
});
|
|
236
238
|
function languageLoaderWithStatic(http, options) {
|
|
237
|
-
return new LanguageLoader(http, options);
|
|
239
|
+
return new LanguageLoader(http, options ?? {});
|
|
238
240
|
}
|
|
239
241
|
const LANGUAGE_LOADER = {
|
|
240
242
|
provide: TranslateLoader,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"igo2-core-language.mjs","sources":["../../../packages/core/language/src/language.module.ts","../../../packages/core/language/src/shared/language.interface.ts","../../../packages/core/language/src/shared/language.loader.ts","../../../packages/core/language/src/shared/language.service.ts","../../../packages/core/language/src/shared/missing-translation.guard.ts","../../../packages/core/language/src/shared/language.provider.ts","../../../packages/core/language/src/shared/language-mock.provider.ts","../../../packages/core/language/src/utils/coercion.ts","../../../packages/core/language/src/igo2-core-language.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\n\nimport { TranslateModule } from '@ngx-translate/core';\n\n@NgModule({\n exports: [TranslateModule]\n})\nexport class IgoLanguageModule {}\n","import { TranslateLoader } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\n\nexport interface LanguageOptions {\n prefix?: string | string[];\n ignoreLibsLocale?: boolean;\n}\n\nexport abstract class LanguageLoaderBase implements TranslateLoader {\n abstract isLoaded$: Observable<boolean>;\n abstract getTranslation(lang: string): Observable<any>;\n}\n\nexport type Translation =\n | string\n | Translation[]\n | TranslationObject\n\n // required to prevent error \"Type instantiation is excessively deep and possibly infinite.\"\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n | any;\n\n// using Record<> does not work because TS does not support recursive definitions\nexport interface TranslationObject {\n [key: string]: Translation;\n}\n","import { isPlatformServer } from '@angular/common';\nimport { HttpBackend, HttpClient } from '@angular/common/http';\nimport { DOCUMENT, PLATFORM_ID, inject } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\nimport { ObjectUtils } from '@igo2/utils';\n\nimport {\n BehaviorSubject,\n Observable,\n first,\n forkJoin,\n map,\n of,\n switchMap,\n tap\n} from 'rxjs';\n\nimport { LanguageLoaderBase, LanguageOptions } from './language.interface';\n\nexport class LanguageLoader implements LanguageLoaderBase {\n private httpClient: HttpClient;\n\n private _isLoaded$ = new BehaviorSubject<boolean>(null);\n isLoaded$ = this._isLoaded$.asObservable();\n\n suffix = '.json';\n prefix?: string | string[];\n options: LanguageOptions;\n\n baseUrl: string;\n\n constructor(handler: HttpBackend, options: LanguageOptions) {\n this.httpClient = new HttpClient(handler);\n this.options = options;\n\n const document = inject(DOCUMENT);\n const platformId = inject(PLATFORM_ID);\n this.baseUrl = isPlatformServer(platformId)\n ? this.getServerUrl(document)\n : '';\n }\n\n private getServerUrl(document: Document): string {\n const origin = document.location.origin;\n return origin.endsWith('/') ? origin : origin + '/';\n }\n\n public getTranslation(lang: string): Observable<any> {\n const igoLocale$ = this.httpClient.get(\n `${this.baseUrl}locale/libs_locale/${lang}.json`\n );\n if (!this.prefix) {\n const prefix = this.options.prefix;\n this.prefix = !prefix || Array.isArray(prefix) ? prefix : [prefix];\n }\n\n if (!this.prefix || this.prefix.length === 0) {\n this._isLoaded$.next(true);\n return this.options.ignoreLibsLocale ? of(undefined) : igoLocale$;\n }\n\n const appLocale$ = (this.prefix as string[]).map((prefix) =>\n this.httpClient.get(`${this.baseUrl}${prefix}${lang}${this.suffix}`)\n );\n\n const locale$ = [...appLocale$];\n\n if (!this.options.ignoreLibsLocale) {\n locale$.unshift(igoLocale$);\n }\n\n return forkJoin(locale$).pipe(\n map((translations) => {\n return translations.reduce(\n (acc, current) => ObjectUtils.mergeDeep(acc, current),\n {}\n );\n }),\n tap(() => {\n this._isLoaded$.next(true);\n })\n );\n }\n}\n\nexport class LanguageLoaderWithAsyncConfig extends LanguageLoader {\n constructor(\n handler: HttpBackend,\n private configService: ConfigService,\n prefix?: string | string[],\n suffix = '.json'\n ) {\n super(handler, undefined);\n this.prefix = prefix;\n this.suffix = suffix;\n }\n\n public getTranslation(lang: string): Observable<any> {\n return this.configService.isLoaded$.pipe(\n first((isLoaded) => isLoaded),\n switchMap(() => {\n this.options =\n this.configService.getConfig<LanguageOptions>('language');\n\n return super.getTranslation(lang);\n })\n );\n }\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, combineLatest } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LanguageService {\n translate = inject(TranslateService);\n\n private language: string;\n readonly language$ = new BehaviorSubject<string>(undefined);\n\n constructor() {\n const defaultLang = this.translate.defaultLang;\n if (defaultLang && this.matchLanguage(defaultLang)) {\n this.language = defaultLang;\n this.language$.next(defaultLang);\n } else {\n this.setBrowserLanguage();\n }\n }\n private setBrowserLanguage() {\n this.language = this.translate.getBrowserLang();\n const lang = this.getLanguage();\n this.translate.setDefaultLang(lang);\n this.language$.next(lang);\n }\n\n public getLanguage(): string {\n return this.matchLanguage(this.language) ? this.language : 'en';\n }\n\n private matchLanguage(lang: string): boolean {\n return !!lang.match(/en|fr/);\n }\n\n public setLanguage(language: string) {\n this.language = this.matchLanguage(language) ? language : 'en';\n combineLatest([\n this.translate.use(this.language),\n this.translate.reloadLang(this.language)\n ]).subscribe(() => {\n this.language$.next(this.language);\n });\n }\n}\n","import {\n MissingTranslationHandler,\n MissingTranslationHandlerParams\n} from '@ngx-translate/core';\n\nexport class IgoMissingTranslationHandler implements MissingTranslationHandler {\n handle(params: MissingTranslationHandlerParams) {\n if (!params.translateService.langs.length) {\n const error =\n 'Translations are not yet loaded. \\\n Check that the LanguageService is injected.';\n throw new Error(error);\n }\n\n if (params.key.substr(0, 4) === 'igo.') {\n throw new Error(`The Key \"${params.key}\" is missing in locale file.`);\n } else {\n return params.key;\n }\n }\n}\n","import { HttpBackend } from '@angular/common/http';\nimport {\n DOCUMENT,\n EnvironmentProviders,\n Provider,\n inject,\n makeEnvironmentProviders,\n provideAppInitializer\n} from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\n\nimport {\n Language,\n MissingTranslationHandler,\n TRANSLATE_SERVICE_CONFIG,\n TranslateLoader,\n TranslateModuleConfig,\n TranslateServiceConfig,\n provideTranslateService\n} from '@ngx-translate/core';\nimport { first } from 'rxjs';\nimport { catchError, timeout } from 'rxjs/operators';\n\nimport { LanguageLoaderBase, LanguageOptions } from './language.interface';\nimport {\n LanguageLoader,\n LanguageLoaderWithAsyncConfig\n} from './language.loader';\nimport { LanguageService } from './language.service';\nimport { IgoMissingTranslationHandler } from './missing-translation.guard';\n\n// 5 seconds\nconst TIMEOUT_DURATION = 5000;\n\nexport interface TranslationFeature<KindT extends TranslationFeatureKind> {\n kind: KindT;\n providers: (Provider | EnvironmentProviders)[];\n}\n\nexport enum TranslationFeatureKind {\n Translation = 0,\n DefaultLanguage = 1\n}\n\n/**\n * Make sure you only call this method in the root module of your application, most of the time called AppModule.\n */\nexport function provideTranslation(\n featureConfig: TranslationFeature<TranslationFeatureKind.Translation>\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n ...featureConfig.providers,\n provideAppInitializer(() => {\n const languageService = inject(LanguageService);\n return (\n languageService.translate.currentLoader as LanguageLoaderBase\n ).isLoaded$?.pipe(\n timeout(TIMEOUT_DURATION),\n first((isLoaded) => isLoaded === true),\n catchError((error) => {\n error.message += ` - Request timed out for language loader after: ${TIMEOUT_DURATION}`;\n throw error;\n })\n );\n })\n ]);\n}\n\nexport function withStaticConfig(\n options: LanguageOptions,\n defaultLanguage?: string | undefined\n): TranslationFeature<TranslationFeatureKind.Translation> {\n const loader: Provider = {\n provide: TranslateLoader,\n useFactory: (http: HttpBackend) => languageLoaderWithStatic(http, options),\n deps: [HttpBackend]\n };\n return {\n kind: TranslationFeatureKind.Translation,\n providers: [\n provideTranslateService(setTranslationConfig(loader, defaultLanguage))\n ]\n };\n}\n\nexport function withAsyncConfig(\n defaultLanguage?: string | undefined\n): TranslationFeature<TranslationFeatureKind.Translation> {\n const loader: Provider = {\n provide: TranslateLoader,\n useFactory: languageLoaderWithAsync,\n deps: [HttpBackend, ConfigService]\n };\n return {\n kind: TranslationFeatureKind.Translation,\n providers: [\n provideTranslateService(setTranslationConfig(loader, defaultLanguage))\n ]\n };\n}\n\n/**\n * Get the first segment of the path (e.g., '/en/alerts' => 'en')\n * @param allowedLanguages default to ['fr', 'en']\n */\nexport function withUrlDefaultLanguage(\n fallbackLang?: Language,\n allowedLanguages: Language[] = ['fr', 'en']\n): TranslationFeature<TranslationFeatureKind.DefaultLanguage> {\n return {\n kind: TranslationFeatureKind.DefaultLanguage,\n providers: [\n {\n provide: TRANSLATE_SERVICE_CONFIG,\n useFactory: defaultLanguageSegmentFactory(\n allowedLanguages,\n fallbackLang\n )\n }\n ]\n };\n}\n\nfunction defaultLanguageSegmentFactory(\n allowedLanguages: Language[],\n fallbackLang?: Language\n): () => TranslateServiceConfig {\n return () => {\n const doc = inject(DOCUMENT);\n const url = new URL(doc.location.href);\n\n const firstSegment = url.pathname.split('/').filter(Boolean)[0];\n if (allowedLanguages.includes(firstSegment)) {\n return {\n extend: true,\n lang: firstSegment\n } satisfies TranslateServiceConfig;\n }\n\n return {\n extend: true,\n lang: fallbackLang,\n fallbackLang: fallbackLang ?? 'fr'\n } satisfies TranslateServiceConfig;\n };\n}\n\nexport const setTranslationConfig = (\n loader?: Provider,\n defaultLanguage?: string\n): TranslateModuleConfig => ({\n defaultLanguage: defaultLanguage,\n loader: loader ?? DEFAULT_LANGUAGE_LOADER,\n missingTranslationHandler: {\n provide: MissingTranslationHandler,\n useClass: IgoMissingTranslationHandler\n }\n});\n\nfunction languageLoaderWithStatic(\n http: HttpBackend,\n options?: LanguageOptions\n) {\n return new LanguageLoader(http, options);\n}\n\nexport const LANGUAGE_LOADER: Provider = {\n provide: TranslateLoader,\n useFactory: languageLoaderWithAsync,\n deps: [HttpBackend, ConfigService]\n};\n\nfunction languageLoaderWithAsync(http: HttpBackend, config?: ConfigService) {\n return new LanguageLoaderWithAsyncConfig(http, config, undefined, undefined);\n}\n\nexport const DEFAULT_LANGUAGE_LOADER: Provider = {\n provide: TranslateLoader,\n useFactory: languageLoaderWithAsync,\n deps: [HttpBackend, ConfigService]\n};\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { provideTranslateService } from '@ngx-translate/core';\n\nexport function provideMockTranslation(): EnvironmentProviders {\n return makeEnvironmentProviders([provideTranslateService()]);\n}\n","import { Translation, TranslationObject } from '../shared/language.interface';\n\nexport function labelAttribute(\n value: Translation | TranslationObject | undefined,\n defaultValue: Translation | TranslationObject = {}\n): Translation | TranslationObject {\n return { ...defaultValue, ...(value ?? {}) };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"igo2-core-language.mjs","sources":["../../../packages/core/language/src/language.module.ts","../../../packages/core/language/src/shared/language.interface.ts","../../../packages/core/language/src/shared/language.loader.ts","../../../packages/core/language/src/shared/language.service.ts","../../../packages/core/language/src/shared/missing-translation.guard.ts","../../../packages/core/language/src/shared/language.provider.ts","../../../packages/core/language/src/shared/language-mock.provider.ts","../../../packages/core/language/src/utils/coercion.ts","../../../packages/core/language/src/igo2-core-language.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\n\nimport { TranslateModule } from '@ngx-translate/core';\n\n@NgModule({\n exports: [TranslateModule]\n})\nexport class IgoLanguageModule {}\n","import { TranslateLoader } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\n\nexport interface LanguageOptions {\n prefix?: string | string[];\n ignoreLibsLocale?: boolean;\n}\n\nexport abstract class LanguageLoaderBase implements TranslateLoader {\n abstract isLoaded$: Observable<boolean>;\n abstract getTranslation(lang: string): Observable<any>;\n}\n\nexport type Translation =\n | string\n | Translation[]\n | TranslationObject\n\n // required to prevent error \"Type instantiation is excessively deep and possibly infinite.\"\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n | any;\n\n// using Record<> does not work because TS does not support recursive definitions\nexport interface TranslationObject {\n [key: string]: Translation;\n}\n","import { isPlatformServer } from '@angular/common';\nimport { HttpBackend, HttpClient } from '@angular/common/http';\nimport { DOCUMENT, PLATFORM_ID, inject } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\nimport { ObjectUtils } from '@igo2/utils';\n\nimport {\n BehaviorSubject,\n Observable,\n first,\n forkJoin,\n map,\n of,\n switchMap,\n tap\n} from 'rxjs';\n\nimport {\n LanguageLoaderBase,\n LanguageOptions,\n TranslationObject\n} from './language.interface';\n\nexport class LanguageLoader implements LanguageLoaderBase {\n private httpClient: HttpClient;\n\n private _isLoaded$ = new BehaviorSubject(false);\n isLoaded$ = this._isLoaded$.asObservable();\n\n suffix = '.json';\n prefix?: string | string[];\n options: LanguageOptions;\n\n baseUrl: string;\n\n constructor(handler: HttpBackend, options: LanguageOptions) {\n this.httpClient = new HttpClient(handler);\n this.options = options;\n\n const document = inject(DOCUMENT);\n const platformId = inject(PLATFORM_ID);\n this.baseUrl = isPlatformServer(platformId)\n ? this.getServerUrl(document)\n : '';\n }\n\n private getServerUrl(document: Document): string {\n const origin = document.location.origin;\n return origin.endsWith('/') ? origin : origin + '/';\n }\n\n public getTranslation(\n lang: string\n ): Observable<TranslationObject | undefined> {\n const igoLocale$ = this.httpClient.get<Record<string, unknown>>(\n `${this.baseUrl}locale/libs_locale/${lang}.json`\n );\n if (!this.prefix) {\n const prefix = this.options.prefix;\n this.prefix = !prefix || Array.isArray(prefix) ? prefix : [prefix];\n }\n\n if (!this.prefix || this.prefix.length === 0) {\n this._isLoaded$.next(true);\n return this.options.ignoreLibsLocale ? of(undefined) : igoLocale$;\n }\n\n const appLocale$ = (this.prefix as string[]).map((prefix) =>\n this.httpClient.get<Record<string, unknown>>(\n `${this.baseUrl}${prefix}${lang}${this.suffix}`\n )\n );\n\n const locale$ = [...appLocale$];\n\n if (!this.options.ignoreLibsLocale) {\n locale$.unshift(igoLocale$);\n }\n\n return forkJoin(locale$).pipe(\n map((translations) => {\n return translations.reduce(\n (acc, current) => ObjectUtils.mergeDeep(acc, current),\n {}\n );\n }),\n tap(() => {\n this._isLoaded$.next(true);\n })\n );\n }\n}\n\nexport class LanguageLoaderWithAsyncConfig extends LanguageLoader {\n constructor(\n handler: HttpBackend,\n private configService: ConfigService,\n prefix?: string | string[],\n suffix = '.json'\n ) {\n super(handler, {});\n this.prefix = prefix;\n this.suffix = suffix;\n }\n\n public getTranslation(lang: string): Observable<any> {\n return this.configService.isLoaded$.pipe(\n first((isLoaded) => isLoaded),\n switchMap(() => {\n this.options =\n this.configService.getConfig<LanguageOptions>('language');\n\n return super.getTranslation(lang);\n })\n );\n }\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, combineLatest } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LanguageService {\n translate = inject(TranslateService);\n\n private language: string | undefined;\n readonly language$ = new BehaviorSubject<string | undefined>(undefined);\n\n constructor() {\n const defaultLang = this.translate.defaultLang;\n if (defaultLang && this.matchLanguage(defaultLang)) {\n this.language = defaultLang;\n this.language$.next(defaultLang);\n } else {\n this.setBrowserLanguage();\n }\n }\n private setBrowserLanguage() {\n this.language = this.translate.getBrowserLang();\n const lang = this.getLanguage();\n this.translate.setDefaultLang(lang);\n this.language$.next(lang);\n }\n\n public getLanguage(): string {\n return this.language && this.matchLanguage(this.language)\n ? this.language\n : 'en';\n }\n\n private matchLanguage(lang: string): boolean {\n return !!lang.match(/en|fr/);\n }\n\n public setLanguage(language: string) {\n this.language = this.matchLanguage(language) ? language : 'en';\n combineLatest([\n this.translate.use(this.language),\n this.translate.reloadLang(this.language)\n ]).subscribe(() => {\n this.language$.next(this.language);\n });\n }\n}\n","import {\n MissingTranslationHandler,\n MissingTranslationHandlerParams\n} from '@ngx-translate/core';\n\nexport class IgoMissingTranslationHandler implements MissingTranslationHandler {\n handle(params: MissingTranslationHandlerParams) {\n if (!params.translateService.langs.length) {\n const error =\n 'Translations are not yet loaded. \\\n Check that the LanguageService is injected.';\n throw new Error(error);\n }\n\n if (params.key.substr(0, 4) === 'igo.') {\n throw new Error(`The Key \"${params.key}\" is missing in locale file.`);\n } else {\n return params.key;\n }\n }\n}\n","import { HttpBackend } from '@angular/common/http';\nimport {\n DOCUMENT,\n EnvironmentProviders,\n Provider,\n inject,\n makeEnvironmentProviders,\n provideAppInitializer\n} from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\n\nimport {\n Language,\n MissingTranslationHandler,\n TRANSLATE_SERVICE_CONFIG,\n TranslateLoader,\n TranslateModuleConfig,\n TranslateServiceConfig,\n provideTranslateService\n} from '@ngx-translate/core';\nimport { first } from 'rxjs';\nimport { catchError, timeout } from 'rxjs/operators';\n\nimport { LanguageLoaderBase, LanguageOptions } from './language.interface';\nimport {\n LanguageLoader,\n LanguageLoaderWithAsyncConfig\n} from './language.loader';\nimport { LanguageService } from './language.service';\nimport { IgoMissingTranslationHandler } from './missing-translation.guard';\n\n// 5 seconds\nconst TIMEOUT_DURATION = 5000;\n\nexport interface TranslationFeature<KindT extends TranslationFeatureKind> {\n kind: KindT;\n providers: (Provider | EnvironmentProviders)[];\n}\n\nexport enum TranslationFeatureKind {\n Translation = 0,\n DefaultLanguage = 1\n}\n\n/**\n * Make sure you only call this method in the root module of your application, most of the time called AppModule.\n */\nexport function provideTranslation(\n featureConfig: TranslationFeature<TranslationFeatureKind.Translation>\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n ...featureConfig.providers,\n provideAppInitializer(() => {\n const languageService = inject(LanguageService);\n return (\n languageService.translate.currentLoader as LanguageLoaderBase\n ).isLoaded$?.pipe(\n timeout(TIMEOUT_DURATION),\n first((isLoaded) => isLoaded === true),\n catchError((error) => {\n error.message += ` - Request timed out for language loader after: ${TIMEOUT_DURATION}`;\n throw error;\n })\n );\n })\n ]);\n}\n\nexport function withStaticConfig(\n options: LanguageOptions,\n defaultLanguage?: string | undefined\n): TranslationFeature<TranslationFeatureKind.Translation> {\n const loader: Provider = {\n provide: TranslateLoader,\n useFactory: (http: HttpBackend) => languageLoaderWithStatic(http, options),\n deps: [HttpBackend]\n };\n return {\n kind: TranslationFeatureKind.Translation,\n providers: [\n provideTranslateService(setTranslationConfig(loader, defaultLanguage))\n ]\n };\n}\n\nexport function withAsyncConfig(\n defaultLanguage?: string | undefined\n): TranslationFeature<TranslationFeatureKind.Translation> {\n const loader: Provider = {\n provide: TranslateLoader,\n useFactory: languageLoaderWithAsync,\n deps: [HttpBackend, ConfigService]\n };\n return {\n kind: TranslationFeatureKind.Translation,\n providers: [\n provideTranslateService(setTranslationConfig(loader, defaultLanguage))\n ]\n };\n}\n\n/**\n * Get the first segment of the path (e.g., '/en/alerts' => 'en')\n * @param allowedLanguages default to ['fr', 'en']\n */\nexport function withUrlDefaultLanguage(\n fallbackLang?: Language,\n allowedLanguages: Language[] = ['fr', 'en']\n): TranslationFeature<TranslationFeatureKind.DefaultLanguage> {\n return {\n kind: TranslationFeatureKind.DefaultLanguage,\n providers: [\n {\n provide: TRANSLATE_SERVICE_CONFIG,\n useFactory: defaultLanguageSegmentFactory(\n allowedLanguages,\n fallbackLang\n )\n }\n ]\n };\n}\n\nfunction defaultLanguageSegmentFactory(\n allowedLanguages: Language[],\n fallbackLang?: Language\n): () => TranslateServiceConfig {\n return () => {\n const doc = inject(DOCUMENT);\n const url = new URL(doc.location.href);\n\n const firstSegment = url.pathname.split('/').filter(Boolean)[0];\n if (allowedLanguages.includes(firstSegment)) {\n return {\n extend: true,\n lang: firstSegment\n } satisfies TranslateServiceConfig;\n }\n\n return {\n extend: true,\n lang: fallbackLang,\n fallbackLang: fallbackLang ?? 'fr'\n } satisfies TranslateServiceConfig;\n };\n}\n\nexport const setTranslationConfig = (\n loader?: Provider,\n defaultLanguage?: string\n): TranslateModuleConfig => ({\n defaultLanguage: defaultLanguage,\n loader: loader ?? DEFAULT_LANGUAGE_LOADER,\n missingTranslationHandler: {\n provide: MissingTranslationHandler,\n useClass: IgoMissingTranslationHandler\n }\n});\n\nfunction languageLoaderWithStatic(\n http: HttpBackend,\n options?: LanguageOptions\n) {\n return new LanguageLoader(http, options ?? {});\n}\n\nexport const LANGUAGE_LOADER: Provider = {\n provide: TranslateLoader,\n useFactory: languageLoaderWithAsync,\n deps: [HttpBackend, ConfigService]\n};\n\nfunction languageLoaderWithAsync(http: HttpBackend, config: ConfigService) {\n return new LanguageLoaderWithAsyncConfig(http, config, undefined, undefined);\n}\n\nexport const DEFAULT_LANGUAGE_LOADER: Provider = {\n provide: TranslateLoader,\n useFactory: languageLoaderWithAsync,\n deps: [HttpBackend, ConfigService]\n};\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { provideTranslateService } from '@ngx-translate/core';\n\nexport function provideMockTranslation(): EnvironmentProviders {\n return makeEnvironmentProviders([provideTranslateService()]);\n}\n","import { Translation, TranslationObject } from '../shared/language.interface';\n\nexport function labelAttribute(\n value: Translation | TranslationObject | undefined,\n defaultValue: Translation | TranslationObject = {}\n): Translation | TranslationObject {\n return { ...defaultValue, ...(value ?? {}) };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -83,10 +83,10 @@ class MediaService {
|
|
|
83
83
|
isDesktop() {
|
|
84
84
|
return this.getMedia() === Media.Desktop;
|
|
85
85
|
}
|
|
86
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
87
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
86
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: MediaService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
87
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: MediaService, providedIn: 'root' });
|
|
88
88
|
}
|
|
89
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
89
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: MediaService, decorators: [{
|
|
90
90
|
type: Injectable,
|
|
91
91
|
args: [{
|
|
92
92
|
providedIn: 'root'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"igo2-core-media.mjs","sources":["../../../packages/core/media/src/media.enum.ts","../../../packages/core/media/src/media.service.ts","../../../packages/core/media/src/igo2-core-media.ts"],"sourcesContent":["export enum Media {\n Mobile = 'mobile',\n Tablet = 'tablet',\n Desktop = 'desktop'\n}\n\nexport enum MediaOrientation {\n Portrait = 'portrait',\n Landscape = 'landscape'\n}\n","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { Injectable, inject } from '@angular/core';\n\nimport { BehaviorSubject } from 'rxjs';\n\nimport { Media, MediaOrientation } from './media.enum';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MediaService {\n public media$ = new BehaviorSubject<Media>(undefined);\n public orientation$ = new BehaviorSubject<MediaOrientation>(undefined);\n\n constructor() {\n const breakpointObserver = inject(BreakpointObserver);\n\n breakpointObserver\n .observe([Breakpoints.HandsetLandscape])\n .subscribe((res) => {\n if (res.matches) {\n this.media$.next(Media.Mobile);\n this.orientation$.next(MediaOrientation.Landscape);\n }\n });\n\n breakpointObserver\n .observe([Breakpoints.HandsetPortrait])\n .subscribe((res) => {\n if (res.matches) {\n this.media$.next(Media.Mobile);\n this.orientation$.next(MediaOrientation.Portrait);\n }\n });\n\n breakpointObserver\n .observe([Breakpoints.TabletLandscape])\n .subscribe((res) => {\n if (res.matches) {\n this.media$.next(Media.Tablet);\n this.orientation$.next(MediaOrientation.Landscape);\n }\n });\n\n breakpointObserver\n .observe([Breakpoints.TabletPortrait])\n .subscribe((res) => {\n if (res.matches) {\n this.media$.next(Media.Tablet);\n this.orientation$.next(MediaOrientation.Portrait);\n }\n });\n\n breakpointObserver.observe([Breakpoints.WebLandscape]).subscribe((res) => {\n if (res.matches) {\n this.media$.next(Media.Desktop);\n this.orientation$.next(MediaOrientation.Landscape);\n }\n });\n\n breakpointObserver.observe([Breakpoints.WebPortrait]).subscribe((res) => {\n if (res.matches) {\n this.media$.next(Media.Desktop);\n this.orientation$.next(MediaOrientation.Portrait);\n }\n });\n }\n\n getMedia(): Media {\n return this.media$.value;\n }\n\n getOrientation(): MediaOrientation {\n return this.orientation$.value;\n }\n\n isTouchScreen(): boolean {\n return 'ontouchstart' in document.documentElement ? true : false;\n }\n\n isMobile(): boolean {\n return this.getMedia() === Media.Mobile;\n }\n\n isTablet(): boolean {\n return this.getMedia() === Media.Tablet;\n }\n\n isDesktop(): boolean {\n return this.getMedia() === Media.Desktop;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;IAAY;AAAZ,CAAA,UAAY,KAAK,EAAA;AACf,IAAA,KAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,KAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,KAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EAJW,KAAK,KAAL,KAAK,GAAA,EAAA,CAAA,CAAA;IAML;AAAZ,CAAA,UAAY,gBAAgB,EAAA;AAC1B,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACzB,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,GAAA,EAAA,CAAA,CAAA;;MCIf,YAAY,CAAA;AAChB,IAAA,MAAM,GAAG,IAAI,eAAe,
|
|
1
|
+
{"version":3,"file":"igo2-core-media.mjs","sources":["../../../packages/core/media/src/media.enum.ts","../../../packages/core/media/src/media.service.ts","../../../packages/core/media/src/igo2-core-media.ts"],"sourcesContent":["export enum Media {\n Mobile = 'mobile',\n Tablet = 'tablet',\n Desktop = 'desktop'\n}\n\nexport enum MediaOrientation {\n Portrait = 'portrait',\n Landscape = 'landscape'\n}\n","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { Injectable, inject } from '@angular/core';\n\nimport { BehaviorSubject } from 'rxjs';\n\nimport { Media, MediaOrientation } from './media.enum';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MediaService {\n public media$ = new BehaviorSubject<Media | undefined>(undefined);\n public orientation$ = new BehaviorSubject<MediaOrientation | undefined>(\n undefined\n );\n\n constructor() {\n const breakpointObserver = inject(BreakpointObserver);\n\n breakpointObserver\n .observe([Breakpoints.HandsetLandscape])\n .subscribe((res) => {\n if (res.matches) {\n this.media$.next(Media.Mobile);\n this.orientation$.next(MediaOrientation.Landscape);\n }\n });\n\n breakpointObserver\n .observe([Breakpoints.HandsetPortrait])\n .subscribe((res) => {\n if (res.matches) {\n this.media$.next(Media.Mobile);\n this.orientation$.next(MediaOrientation.Portrait);\n }\n });\n\n breakpointObserver\n .observe([Breakpoints.TabletLandscape])\n .subscribe((res) => {\n if (res.matches) {\n this.media$.next(Media.Tablet);\n this.orientation$.next(MediaOrientation.Landscape);\n }\n });\n\n breakpointObserver\n .observe([Breakpoints.TabletPortrait])\n .subscribe((res) => {\n if (res.matches) {\n this.media$.next(Media.Tablet);\n this.orientation$.next(MediaOrientation.Portrait);\n }\n });\n\n breakpointObserver.observe([Breakpoints.WebLandscape]).subscribe((res) => {\n if (res.matches) {\n this.media$.next(Media.Desktop);\n this.orientation$.next(MediaOrientation.Landscape);\n }\n });\n\n breakpointObserver.observe([Breakpoints.WebPortrait]).subscribe((res) => {\n if (res.matches) {\n this.media$.next(Media.Desktop);\n this.orientation$.next(MediaOrientation.Portrait);\n }\n });\n }\n\n getMedia(): Media | undefined {\n return this.media$.value;\n }\n\n getOrientation(): MediaOrientation | undefined {\n return this.orientation$.value;\n }\n\n isTouchScreen(): boolean {\n return 'ontouchstart' in document.documentElement ? true : false;\n }\n\n isMobile(): boolean {\n return this.getMedia() === Media.Mobile;\n }\n\n isTablet(): boolean {\n return this.getMedia() === Media.Tablet;\n }\n\n isDesktop(): boolean {\n return this.getMedia() === Media.Desktop;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|