@igo2/sdg-core 1.0.0-next.76 → 1.0.0-next.78

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.
@@ -0,0 +1,8 @@
1
+ import { EnvironmentProviders, Provider } from '@angular/core';
2
+ export interface AnalyticsFeature<KindT extends AnalyticsFeatureKind> {
3
+ kind: KindT;
4
+ providers: (Provider | EnvironmentProviders)[];
5
+ }
6
+ export declare enum AnalyticsFeatureKind {
7
+ GoogleAnalytic = 0
8
+ }
@@ -0,0 +1,3 @@
1
+ import { EnvironmentProviders } from '@angular/core';
2
+ import { AnalyticsFeature, AnalyticsFeatureKind } from './analytics.interface';
3
+ export declare function provideAnalytics(...features: AnalyticsFeature<AnalyticsFeatureKind>[]): EnvironmentProviders;
@@ -0,0 +1,3 @@
1
+ export interface IGoogleAnalyticsOptions {
2
+ targetId: string;
3
+ }
@@ -0,0 +1,3 @@
1
+ import { AnalyticsFeature, AnalyticsFeatureKind } from '../analytics.interface';
2
+ import { IGoogleAnalyticsOptions } from './google-analytics.interface';
3
+ export declare function withGoogleAnalytics(options: IGoogleAnalyticsOptions): AnalyticsFeature<AnalyticsFeatureKind.GoogleAnalytic>;
@@ -0,0 +1,12 @@
1
+ import { Router } from '@angular/router';
2
+ import * as i0 from "@angular/core";
3
+ export declare class GoogleAnalyticsService {
4
+ private router;
5
+ private routerEvents$$?;
6
+ constructor(router: Router);
7
+ initialize(): void;
8
+ trackEvent(eventName: string, eventParams: Record<string, unknown>): void;
9
+ trackPageView(): void;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<GoogleAnalyticsService, never>;
11
+ static ɵprov: i0.ɵɵInjectableDeclaration<GoogleAnalyticsService>;
12
+ }
@@ -0,0 +1,3 @@
1
+ export * from './google-analytics.interface';
2
+ export * from './google-analytics.provider';
3
+ export * from './google-analytics.service';
@@ -0,0 +1,3 @@
1
+ export * from './analytics.interface';
2
+ export * from './analytics.provider';
3
+ export * from './google-analytics';
@@ -1,8 +1,107 @@
1
1
  import * as i0 from '@angular/core';
2
- import { signal, Injectable, Optional, Pipe, makeEnvironmentProviders } from '@angular/core';
3
- import * as i1 from '@angular/cdk/layout';
2
+ import { makeEnvironmentProviders, Injectable, provideAppInitializer, inject, PLATFORM_ID, signal, Optional, Pipe } from '@angular/core';
3
+ import { isPlatformServer, DOCUMENT } from '@angular/common';
4
+ import * as i1 from '@angular/router';
5
+ import { NavigationEnd } from '@angular/router';
6
+ import { filter, of } from 'rxjs';
7
+ import * as i1$1 from '@angular/cdk/layout';
4
8
  import { provideTranslation as provideTranslation$1, withStaticConfig, provideMockTranslation } from '@igo2/core/language';
5
- import { of } from 'rxjs';
9
+
10
+ var AnalyticsFeatureKind;
11
+ (function (AnalyticsFeatureKind) {
12
+ AnalyticsFeatureKind[AnalyticsFeatureKind["GoogleAnalytic"] = 0] = "GoogleAnalytic";
13
+ })(AnalyticsFeatureKind || (AnalyticsFeatureKind = {}));
14
+
15
+ function provideAnalytics(...features) {
16
+ const providers = [];
17
+ for (const feature of features) {
18
+ providers.push(...feature.providers);
19
+ }
20
+ return makeEnvironmentProviders(providers);
21
+ }
22
+
23
+ class GoogleAnalyticsService {
24
+ router;
25
+ routerEvents$$;
26
+ constructor(router) {
27
+ this.router = router;
28
+ }
29
+ initialize() {
30
+ if (!gtag) {
31
+ throw new Error('The gtag was not created for Google Analytics');
32
+ }
33
+ }
34
+ trackEvent(eventName, eventParams) {
35
+ gtag('event', eventName, eventParams);
36
+ }
37
+ trackPageView() {
38
+ if (this.routerEvents$$) {
39
+ throw new Error('Page tracking is already instantiated for Google Analytics');
40
+ }
41
+ this.routerEvents$$ = this.router.events
42
+ .pipe(filter((event) => event instanceof NavigationEnd))
43
+ .subscribe((event) => {
44
+ gtag('event', 'page_view', {
45
+ page_path: event.urlAfterRedirects
46
+ });
47
+ });
48
+ }
49
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: GoogleAnalyticsService, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
50
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: GoogleAnalyticsService, providedIn: 'root' });
51
+ }
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: GoogleAnalyticsService, decorators: [{
53
+ type: Injectable,
54
+ args: [{
55
+ providedIn: 'root'
56
+ }]
57
+ }], ctorParameters: () => [{ type: i1.Router }] });
58
+
59
+ function withGoogleAnalytics(options) {
60
+ if (!options.targetId) {
61
+ throw new Error('Vous devez configurer le targetId pour Google Analytics');
62
+ }
63
+ return {
64
+ kind: AnalyticsFeatureKind.GoogleAnalytic,
65
+ providers: [
66
+ GoogleAnalyticsService,
67
+ provideAppInitializer(() => {
68
+ const platformId = inject(PLATFORM_ID);
69
+ if (isPlatformServer(platformId)) {
70
+ return;
71
+ }
72
+ const document = inject(DOCUMENT);
73
+ const gaService = inject(GoogleAnalyticsService);
74
+ return googleAnalyticsFactory(document, gaService, options);
75
+ })
76
+ ]
77
+ };
78
+ }
79
+ async function googleAnalyticsFactory(document, gaService, options) {
80
+ return new Promise((resolve) => {
81
+ // Dynamically load the Google Analytics script
82
+ const script = document.createElement('script');
83
+ script.async = true;
84
+ script.src = `https://www.googletagmanager.com/gtag/js?id=${options.targetId}`;
85
+ document.head.appendChild(script);
86
+ script.onload = () => {
87
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
88
+ const _window = window;
89
+ _window['dataLayer'] = _window['dataLayer'] || [];
90
+ _window['gtag'] = function () {
91
+ // eslint-disable-next-line prefer-rest-params
92
+ _window['dataLayer'].push(arguments);
93
+ };
94
+ gtag('js', new Date());
95
+ // Disable automatic page view tracking
96
+ gtag('config', options.targetId, {
97
+ send_page_view: false
98
+ });
99
+ gaService.initialize();
100
+ gaService.trackPageView();
101
+ resolve(true);
102
+ };
103
+ });
104
+ }
6
105
 
7
106
  class BreakpointService {
8
107
  breakpointObserver;
@@ -21,7 +120,7 @@ class BreakpointService {
21
120
  this._isHandset.set(result.matches);
22
121
  });
23
122
  }
24
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: BreakpointService, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Injectable });
123
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: BreakpointService, deps: [{ token: i1$1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Injectable });
25
124
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: BreakpointService, providedIn: 'root' });
26
125
  }
27
126
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: BreakpointService, decorators: [{
@@ -29,7 +128,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
29
128
  args: [{
30
129
  providedIn: 'root'
31
130
  }]
32
- }], ctorParameters: () => [{ type: i1.BreakpointObserver }] });
131
+ }], ctorParameters: () => [{ type: i1$1.BreakpointObserver }] });
33
132
 
34
133
  const RouteTitleKey = 'RouteTitle';
35
134
  const RouteTranslateKey = 'TranslateKey';
@@ -179,5 +278,5 @@ function labelAttribute(value, defaultValue = {}) {
179
278
  * Generated bundle index. Do not edit.
180
279
  */
181
280
 
182
- export { BreakpointService, RouteTitleKey, RouteTranslateKey, TitleResolver, TitleResolverPipe, TranslationFeatureKind, TranslationService, TranslationServiceMock, isSafeUrl, labelAttribute, parseUrlWithLanguage, pathIsExternal, provideTranslatedLabels, provideTranslation, resolveTitle, withIgo2Translation, withIgo2TranslationMock, withRouterTitleResolver };
281
+ export { AnalyticsFeatureKind, BreakpointService, GoogleAnalyticsService, RouteTitleKey, RouteTranslateKey, TitleResolver, TitleResolverPipe, TranslationFeatureKind, TranslationService, TranslationServiceMock, isSafeUrl, labelAttribute, parseUrlWithLanguage, pathIsExternal, provideAnalytics, provideTranslatedLabels, provideTranslation, resolveTitle, withGoogleAnalytics, withIgo2Translation, withIgo2TranslationMock, withRouterTitleResolver };
183
282
  //# sourceMappingURL=igo2-sdg-core.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"igo2-sdg-core.mjs","sources":["../../../packages/core/src/layout/breakpoint/breakpoint.service.ts","../../../packages/core/src/router/router.ts","../../../packages/core/src/router/title-resolver/title-resolver.ts","../../../packages/core/src/router/title-resolver/title-resolver.pipe.ts","../../../packages/core/src/router/route.utils.ts","../../../packages/core/src/translation/translation.service.ts","../../../packages/core/src/translation/translation.provider.ts","../../../packages/core/src/translation/translation-mock.provider.ts","../../../packages/core/src/translation/translation.utils.ts","../../../packages/core/src/utils/coercion.ts","../../../packages/core/src/igo2-sdg-core.ts"],"sourcesContent":["import { BreakpointObserver } from '@angular/cdk/layout';\nimport { Injectable, Signal, signal } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BreakpointService {\n private _isHandset = signal(false);\n\n get isHandset(): Signal<boolean> {\n return this._isHandset.asReadonly();\n }\n\n constructor(private breakpointObserver: BreakpointObserver) {\n this.handleBreakpoint();\n }\n\n private handleBreakpoint(): void {\n this.breakpointObserver\n .observe('(max-width: 575px)')\n .subscribe((result) => {\n this._isHandset.set(result.matches);\n });\n }\n}\n","import { Route } from '@angular/router';\n\nimport { TitleResolver } from './title-resolver/title-resolver';\n\nexport const RouteTitleKey = 'RouteTitle';\nexport const RouteTranslateKey = 'TranslateKey';\n\nfunction hasStaticTitle(config: Route): boolean {\n return typeof config.title === 'string' || config.title === null;\n}\n\nexport function resolveTitle(\n config: Route,\n titleResolver?: TitleResolver\n): string | undefined {\n if (hasStaticTitle(config)) {\n return config.title as string;\n } else {\n return (\n titleResolver?.resolveStatic(config) ?? config.data?.[RouteTranslateKey] // try to fallback on the translation key\n );\n }\n}\n","import {\n ActivatedRouteSnapshot,\n MaybeAsync,\n Resolve,\n Route,\n RouterStateSnapshot\n} from '@angular/router';\n\nexport abstract class TitleResolver<T = string> implements Resolve<T> {\n abstract resolve(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): MaybeAsync<T>;\n abstract resolveStatic(route: Route): string | undefined;\n}\n","import { Optional, Pipe, PipeTransform } from '@angular/core';\n\nimport { SdgRoute } from '../route.interface';\nimport { resolveTitle } from '../router';\nimport { TitleResolver } from './title-resolver';\n\n@Pipe({\n name: 'titleResolver',\n standalone: true\n})\nexport class TitleResolverPipe implements PipeTransform {\n constructor(@Optional() private titleResolver: TitleResolver) {}\n\n transform(value: SdgRoute): string | undefined {\n return resolveTitle(value, this.titleResolver);\n }\n}\n","export function pathIsExternal(path: string): boolean {\n const regex = /^https?:\\/\\//;\n return regex.test(path);\n}\n\nexport function isSafeUrl(url: string): boolean {\n const safePattern = /^(https?:\\/\\/|\\/(?!\\/)|\\.\\/|\\.\\.\\/)/;\n const unsafePattern = /^(javascript:|data:|vbscript:)/i;\n return safePattern.test(url) && !unsafePattern.test(url.trim());\n}\n","import { WritableSignal } from '@angular/core';\n\nimport { Observable } from 'rxjs';\n\nimport { Language } from './translation.interface';\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\nexport abstract class TranslationService {\n abstract lang: WritableSignal<Language>;\n\n abstract get(\n key: string | string[],\n interpolateParams?: Record<string, unknown>\n ): Translation | TranslationObject;\n\n abstract getAsync(\n key: string | string[],\n interpolateParams?: Record<string, unknown>\n ): Observable<Translation | TranslationObject>;\n\n abstract setLanguage(lang: Language): void;\n}\n","import {\n EnvironmentProviders,\n InjectionToken,\n Provider,\n Type,\n makeEnvironmentProviders\n} from '@angular/core';\n\nimport { LanguageOptions, withStaticConfig } from '@igo2/core/language';\nimport { provideTranslation as provideIgo2Translation } from '@igo2/core/language';\n\nimport { TitleResolver } from '../router';\nimport { TranslationService } from './translation.service';\n\nexport interface TranslationFeature<KindT extends TranslationFeatureKind> {\n kind: KindT;\n providers: (Provider | EnvironmentProviders)[];\n}\n\nexport enum TranslationFeatureKind {\n Translation = 0,\n RouterTitleResolver = 1\n}\n\nexport function provideTranslatedLabels(\n token: InjectionToken<unknown>,\n key: string\n) {\n return {\n provide: token,\n useFactory: (translationService: TranslationService) =>\n labelsFactory(translationService, key),\n deps: [TranslationService]\n };\n}\n\nfunction labelsFactory(translationService: TranslationService, key: string) {\n return translationService.get(key);\n}\n\nexport function provideTranslation(\n ...features: TranslationFeature<TranslationFeatureKind>[]\n) {\n const providers: (Provider | EnvironmentProviders)[] = [];\n\n for (const feature of features) {\n providers.push(...feature.providers);\n }\n\n return makeEnvironmentProviders(providers);\n}\n\n/** Base on the @ngx-translate library with the IgoLanguageModule */\nexport function withIgo2Translation(\n options: LanguageOptions,\n service: Type<TranslationService>,\n defaultLanguage?: string\n): TranslationFeature<TranslationFeatureKind.Translation> {\n return {\n kind: TranslationFeatureKind.Translation,\n providers: [\n { provide: TranslationService, useClass: service },\n provideIgo2Translation(withStaticConfig(options, defaultLanguage))\n ]\n };\n}\n\n/**\n * Provide a translater for the Route title.\n * Some components is base on the title of the route and\n * this Resolver will allow to automatically resolve the translation\n **/\nexport function withRouterTitleResolver<T>(\n resolver: Type<TitleResolver<T>>\n): TranslationFeature<TranslationFeatureKind.RouterTitleResolver> {\n return {\n kind: TranslationFeatureKind.RouterTitleResolver,\n providers: [\n {\n provide: TitleResolver<T>,\n useClass: resolver\n }\n ]\n };\n}\n","import { WritableSignal, signal } from '@angular/core';\n\nimport { provideMockTranslation } from '@igo2/core/language';\n\nimport { Observable, of } from 'rxjs';\n\nimport { Language } from './translation.interface';\nimport {\n TranslationFeature,\n TranslationFeatureKind\n} from './translation.provider';\nimport { TranslationService } from './translation.service';\n\nexport function withIgo2TranslationMock(): TranslationFeature<TranslationFeatureKind.Translation> {\n return {\n kind: TranslationFeatureKind.Translation,\n providers: [\n provideMockTranslation(),\n { provide: TranslationService, useClass: TranslationServiceMock }\n ]\n };\n}\n\nexport class TranslationServiceMock implements TranslationService {\n lang: WritableSignal<Language> = signal('fr');\n\n get(key: string | string[]): string {\n return Array.isArray(key) ? key[0] : key;\n }\n\n getAsync(key: string | string[]): Observable<string> {\n return of(Array.isArray(key) ? key[0] : key);\n }\n\n setLanguage() {\n window.location.reload();\n }\n}\n","/**\n *\n * @param routerUrl\n * @param lang\n * @param strategy default to 'segment' set the first segment of the path (e.g., '/en/alerts' => 'en')\n */\nexport function parseUrlWithLanguage(\n routerUrl: string,\n lang: string\n): [url: string, params: string | undefined] {\n // eslint-disable-next-line prefer-const\n let [url, params] = routerUrl.split('?');\n\n const urlParts = url.split('/');\n if (urlParts.length > 1) {\n urlParts[1] = lang;\n }\n\n url = urlParts.join('/');\n\n return [url, params];\n}\n","import { Translation, TranslationObject } from '../translation';\n\nexport function labelAttribute(\n value: Translation | TranslationObject,\n defaultValue: Translation | TranslationObject = {}\n): Translation | TranslationObject {\n return value ? { ...defaultValue, ...value } : defaultValue;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TitleResolver","provideIgo2Translation"],"mappings":"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"}
1
+ {"version":3,"file":"igo2-sdg-core.mjs","sources":["../../../packages/core/src/analytics/analytics.interface.ts","../../../packages/core/src/analytics/analytics.provider.ts","../../../packages/core/src/analytics/google-analytics/google-analytics.service.ts","../../../packages/core/src/analytics/google-analytics/google-analytics.provider.ts","../../../packages/core/src/layout/breakpoint/breakpoint.service.ts","../../../packages/core/src/router/router.ts","../../../packages/core/src/router/title-resolver/title-resolver.ts","../../../packages/core/src/router/title-resolver/title-resolver.pipe.ts","../../../packages/core/src/router/route.utils.ts","../../../packages/core/src/translation/translation.service.ts","../../../packages/core/src/translation/translation.provider.ts","../../../packages/core/src/translation/translation-mock.provider.ts","../../../packages/core/src/translation/translation.utils.ts","../../../packages/core/src/utils/coercion.ts","../../../packages/core/src/igo2-sdg-core.ts"],"sourcesContent":["import { EnvironmentProviders, Provider } from '@angular/core';\n\nexport interface AnalyticsFeature<KindT extends AnalyticsFeatureKind> {\n kind: KindT;\n providers: (Provider | EnvironmentProviders)[];\n}\n\nexport enum AnalyticsFeatureKind {\n GoogleAnalytic = 0\n}\n","import {\n EnvironmentProviders,\n Provider,\n makeEnvironmentProviders\n} from '@angular/core';\n\nimport { AnalyticsFeature, AnalyticsFeatureKind } from './analytics.interface';\n\nexport function provideAnalytics(\n ...features: AnalyticsFeature<AnalyticsFeatureKind>[]\n) {\n const providers: (Provider | EnvironmentProviders)[] = [];\n\n for (const feature of features) {\n providers.push(...feature.providers);\n }\n\n return makeEnvironmentProviders(providers);\n}\n","import { Injectable } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\n\nimport { Subscription, filter } from 'rxjs';\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\ndeclare let gtag: Function;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GoogleAnalyticsService {\n private routerEvents$$?: Subscription;\n\n constructor(private router: Router) {}\n\n initialize(): void {\n if (!gtag) {\n throw new Error('The gtag was not created for Google Analytics');\n }\n }\n\n trackEvent(eventName: string, eventParams: Record<string, unknown>): void {\n gtag('event', eventName, eventParams);\n }\n\n trackPageView(): void {\n if (this.routerEvents$$) {\n throw new Error(\n 'Page tracking is already instantiated for Google Analytics'\n );\n }\n\n this.routerEvents$$ = this.router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe((event: NavigationEnd) => {\n gtag!('event', 'page_view', {\n page_path: event.urlAfterRedirects\n });\n });\n }\n}\n","import { DOCUMENT, isPlatformServer } from '@angular/common';\nimport { PLATFORM_ID, inject, provideAppInitializer } from '@angular/core';\n\nimport { AnalyticsFeature, AnalyticsFeatureKind } from '../analytics.interface';\nimport { IGoogleAnalyticsOptions } from './google-analytics.interface';\nimport { GoogleAnalyticsService } from './google-analytics.service';\n\nexport function withGoogleAnalytics(\n options: IGoogleAnalyticsOptions\n): AnalyticsFeature<AnalyticsFeatureKind.GoogleAnalytic> {\n if (!options.targetId) {\n throw new Error('Vous devez configurer le targetId pour Google Analytics');\n }\n\n return {\n kind: AnalyticsFeatureKind.GoogleAnalytic,\n providers: [\n GoogleAnalyticsService,\n provideAppInitializer(() => {\n const platformId = inject(PLATFORM_ID);\n if (isPlatformServer(platformId)) {\n return;\n }\n\n const document = inject(DOCUMENT);\n const gaService = inject(GoogleAnalyticsService);\n return googleAnalyticsFactory(document, gaService, options);\n })\n ]\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\ndeclare let gtag: Function;\n\nasync function googleAnalyticsFactory(\n document: Document,\n gaService: GoogleAnalyticsService,\n options: IGoogleAnalyticsOptions\n): Promise<unknown> {\n return new Promise((resolve) => {\n // Dynamically load the Google Analytics script\n const script = document.createElement('script');\n script.async = true;\n script.src = `https://www.googletagmanager.com/gtag/js?id=${options.targetId}`;\n document.head.appendChild(script);\n\n script.onload = () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const _window = window as any;\n _window['dataLayer'] = _window['dataLayer'] || [];\n _window['gtag'] = function () {\n // eslint-disable-next-line prefer-rest-params\n _window['dataLayer'].push(arguments);\n };\n\n gtag('js', new Date());\n\n // Disable automatic page view tracking\n gtag('config', options.targetId, {\n send_page_view: false\n });\n\n gaService.initialize();\n gaService.trackPageView();\n\n resolve(true);\n };\n });\n}\n","import { BreakpointObserver } from '@angular/cdk/layout';\nimport { Injectable, Signal, signal } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BreakpointService {\n private _isHandset = signal(false);\n\n get isHandset(): Signal<boolean> {\n return this._isHandset.asReadonly();\n }\n\n constructor(private breakpointObserver: BreakpointObserver) {\n this.handleBreakpoint();\n }\n\n private handleBreakpoint(): void {\n this.breakpointObserver\n .observe('(max-width: 575px)')\n .subscribe((result) => {\n this._isHandset.set(result.matches);\n });\n }\n}\n","import { Route } from '@angular/router';\n\nimport { TitleResolver } from './title-resolver/title-resolver';\n\nexport const RouteTitleKey = 'RouteTitle';\nexport const RouteTranslateKey = 'TranslateKey';\n\nfunction hasStaticTitle(config: Route): boolean {\n return typeof config.title === 'string' || config.title === null;\n}\n\nexport function resolveTitle(\n config: Route,\n titleResolver?: TitleResolver\n): string | undefined {\n if (hasStaticTitle(config)) {\n return config.title as string;\n } else {\n return (\n titleResolver?.resolveStatic(config) ?? config.data?.[RouteTranslateKey] // try to fallback on the translation key\n );\n }\n}\n","import {\n ActivatedRouteSnapshot,\n MaybeAsync,\n Resolve,\n Route,\n RouterStateSnapshot\n} from '@angular/router';\n\nexport abstract class TitleResolver<T = string> implements Resolve<T> {\n abstract resolve(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): MaybeAsync<T>;\n abstract resolveStatic(route: Route): string | undefined;\n}\n","import { Optional, Pipe, PipeTransform } from '@angular/core';\n\nimport { SdgRoute } from '../route.interface';\nimport { resolveTitle } from '../router';\nimport { TitleResolver } from './title-resolver';\n\n@Pipe({\n name: 'titleResolver',\n standalone: true\n})\nexport class TitleResolverPipe implements PipeTransform {\n constructor(@Optional() private titleResolver: TitleResolver) {}\n\n transform(value: SdgRoute): string | undefined {\n return resolveTitle(value, this.titleResolver);\n }\n}\n","export function pathIsExternal(path: string): boolean {\n const regex = /^https?:\\/\\//;\n return regex.test(path);\n}\n\nexport function isSafeUrl(url: string): boolean {\n const safePattern = /^(https?:\\/\\/|\\/(?!\\/)|\\.\\/|\\.\\.\\/)/;\n const unsafePattern = /^(javascript:|data:|vbscript:)/i;\n return safePattern.test(url) && !unsafePattern.test(url.trim());\n}\n","import { WritableSignal } from '@angular/core';\n\nimport { Observable } from 'rxjs';\n\nimport { Language } from './translation.interface';\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\nexport abstract class TranslationService {\n abstract lang: WritableSignal<Language>;\n\n abstract get(\n key: string | string[],\n interpolateParams?: Record<string, unknown>\n ): Translation | TranslationObject;\n\n abstract getAsync(\n key: string | string[],\n interpolateParams?: Record<string, unknown>\n ): Observable<Translation | TranslationObject>;\n\n abstract setLanguage(lang: Language): void;\n}\n","import {\n EnvironmentProviders,\n InjectionToken,\n Provider,\n Type,\n makeEnvironmentProviders\n} from '@angular/core';\n\nimport { LanguageOptions, withStaticConfig } from '@igo2/core/language';\nimport { provideTranslation as provideIgo2Translation } from '@igo2/core/language';\n\nimport { TitleResolver } from '../router';\nimport { TranslationService } from './translation.service';\n\nexport interface TranslationFeature<KindT extends TranslationFeatureKind> {\n kind: KindT;\n providers: (Provider | EnvironmentProviders)[];\n}\n\nexport enum TranslationFeatureKind {\n Translation = 0,\n RouterTitleResolver = 1\n}\n\nexport function provideTranslatedLabels(\n token: InjectionToken<unknown>,\n key: string\n) {\n return {\n provide: token,\n useFactory: (translationService: TranslationService) =>\n labelsFactory(translationService, key),\n deps: [TranslationService]\n };\n}\n\nfunction labelsFactory(translationService: TranslationService, key: string) {\n return translationService.get(key);\n}\n\nexport function provideTranslation(\n ...features: TranslationFeature<TranslationFeatureKind>[]\n) {\n const providers: (Provider | EnvironmentProviders)[] = [];\n\n for (const feature of features) {\n providers.push(...feature.providers);\n }\n\n return makeEnvironmentProviders(providers);\n}\n\n/** Base on the @ngx-translate library with the IgoLanguageModule */\nexport function withIgo2Translation(\n options: LanguageOptions,\n service: Type<TranslationService>,\n defaultLanguage?: string\n): TranslationFeature<TranslationFeatureKind.Translation> {\n return {\n kind: TranslationFeatureKind.Translation,\n providers: [\n { provide: TranslationService, useClass: service },\n provideIgo2Translation(withStaticConfig(options, defaultLanguage))\n ]\n };\n}\n\n/**\n * Provide a translater for the Route title.\n * Some components is base on the title of the route and\n * this Resolver will allow to automatically resolve the translation\n **/\nexport function withRouterTitleResolver<T>(\n resolver: Type<TitleResolver<T>>\n): TranslationFeature<TranslationFeatureKind.RouterTitleResolver> {\n return {\n kind: TranslationFeatureKind.RouterTitleResolver,\n providers: [\n {\n provide: TitleResolver<T>,\n useClass: resolver\n }\n ]\n };\n}\n","import { WritableSignal, signal } from '@angular/core';\n\nimport { provideMockTranslation } from '@igo2/core/language';\n\nimport { Observable, of } from 'rxjs';\n\nimport { Language } from './translation.interface';\nimport {\n TranslationFeature,\n TranslationFeatureKind\n} from './translation.provider';\nimport { TranslationService } from './translation.service';\n\nexport function withIgo2TranslationMock(): TranslationFeature<TranslationFeatureKind.Translation> {\n return {\n kind: TranslationFeatureKind.Translation,\n providers: [\n provideMockTranslation(),\n { provide: TranslationService, useClass: TranslationServiceMock }\n ]\n };\n}\n\nexport class TranslationServiceMock implements TranslationService {\n lang: WritableSignal<Language> = signal('fr');\n\n get(key: string | string[]): string {\n return Array.isArray(key) ? key[0] : key;\n }\n\n getAsync(key: string | string[]): Observable<string> {\n return of(Array.isArray(key) ? key[0] : key);\n }\n\n setLanguage() {\n window.location.reload();\n }\n}\n","/**\n *\n * @param routerUrl\n * @param lang\n * @param strategy default to 'segment' set the first segment of the path (e.g., '/en/alerts' => 'en')\n */\nexport function parseUrlWithLanguage(\n routerUrl: string,\n lang: string\n): [url: string, params: string | undefined] {\n // eslint-disable-next-line prefer-const\n let [url, params] = routerUrl.split('?');\n\n const urlParts = url.split('/');\n if (urlParts.length > 1) {\n urlParts[1] = lang;\n }\n\n url = urlParts.join('/');\n\n return [url, params];\n}\n","import { Translation, TranslationObject } from '../translation';\n\nexport function labelAttribute(\n value: Translation | TranslationObject,\n defaultValue: Translation | TranslationObject = {}\n): Translation | TranslationObject {\n return value ? { ...defaultValue, ...value } : defaultValue;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.TitleResolver","provideIgo2Translation"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@igo2/sdg-core",
3
- "version": "1.0.0-next.76",
3
+ "version": "1.0.0-next.78",
4
4
  "license": "LiLiQ-R",
5
5
  "repository": {
6
6
  "type": "git",
package/public-api.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export * from './analytics';
1
2
  export * from './layout';
2
3
  export * from './router';
3
4
  export * from './translation';