@ethlete/core 0.2.0-next.19 → 0.2.0-next.20

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.
@@ -3,6 +3,7 @@ export * from './content-observer.service';
3
3
  export * from './destroy.service';
4
4
  export * from './focus-visible.service';
5
5
  export * from './resize-observer.service';
6
+ export * from './router-state.service';
6
7
  export * from './viewport.service';
7
8
  export * from './viewport.types';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3NlcnZpY2VzL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY2xpY2stb2JzZXJ2ZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRlbnQtb2JzZXJ2ZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2Rlc3Ryb3kuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2ZvY3VzLXZpc2libGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3Jlc2l6ZS1vYnNlcnZlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdmlld3BvcnQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3ZpZXdwb3J0LnR5cGVzJztcbiJdfQ==
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3NlcnZpY2VzL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jbGljay1vYnNlcnZlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vY29udGVudC1vYnNlcnZlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZGVzdHJveS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZm9jdXMtdmlzaWJsZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcmVzaXplLW9ic2VydmVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9yb3V0ZXItc3RhdGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3ZpZXdwb3J0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi92aWV3cG9ydC50eXBlcyc7XG4iXX0=
@@ -0,0 +1,81 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { NavigationEnd, Router } from '@angular/router';
3
+ import { BehaviorSubject, distinctUntilChanged, filter, map, pairwise } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ export const routerDisableScrollTop = (config = {}) => {
6
+ if (!config.asReturnRoute) {
7
+ return {
8
+ disableScrollTop: true,
9
+ };
10
+ }
11
+ return {
12
+ disableScrollTopAsReturnRoute: true,
13
+ };
14
+ };
15
+ export class RouterStateService {
16
+ get route$() {
17
+ return this._route$.asObservable();
18
+ }
19
+ get state$() {
20
+ return this._state$.asObservable();
21
+ }
22
+ constructor() {
23
+ this._isScrollTopOnNavigationEnabled = false;
24
+ this._router = inject(Router);
25
+ this._route$ = new BehaviorSubject('/');
26
+ this._state$ = new BehaviorSubject({
27
+ title: undefined,
28
+ data: {},
29
+ pathParams: {},
30
+ queryParams: {},
31
+ });
32
+ this._router.events
33
+ .pipe(filter((event) => event instanceof NavigationEnd), distinctUntilChanged((a, b) => a.url === b.url), map((event) => event.url))
34
+ .subscribe(this._route$);
35
+ this._route$
36
+ .pipe(map(() => {
37
+ let route = this._router.routerState.snapshot.root;
38
+ while (route.firstChild) {
39
+ route = route.firstChild;
40
+ }
41
+ const { data, params, queryParams, title } = route;
42
+ return {
43
+ data,
44
+ pathParams: params,
45
+ queryParams,
46
+ title,
47
+ };
48
+ }))
49
+ .subscribe(this._state$);
50
+ }
51
+ enableScrollTopOnNavigation(config = {}) {
52
+ if (this._isScrollTopOnNavigationEnabled) {
53
+ return;
54
+ }
55
+ this._isScrollTopOnNavigationEnabled = true;
56
+ this._state$.pipe(pairwise()).subscribe(([oldData, newData]) => {
57
+ if (!(newData.data['disableScrollTopAsReturnRoute'] && oldData.data['disableScrollTop']) &&
58
+ !newData.data['disableScrollTop']) {
59
+ (config.scrollElement ?? document.documentElement).scrollTop = 0;
60
+ }
61
+ });
62
+ }
63
+ selectQueryParam(key) {
64
+ return this._state$.pipe(map((state) => state.queryParams[key]));
65
+ }
66
+ selectPathParam(key) {
67
+ return this._state$.pipe(map((state) => state.pathParams[key]));
68
+ }
69
+ selectData(key) {
70
+ return this._state$.pipe(map((state) => state.data[key]));
71
+ }
72
+ }
73
+ RouterStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: RouterStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
74
+ RouterStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: RouterStateService, providedIn: 'root' });
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: RouterStateService, decorators: [{
76
+ type: Injectable,
77
+ args: [{
78
+ providedIn: 'root',
79
+ }]
80
+ }], ctorParameters: function () { return []; } });
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLXN0YXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9zZXJ2aWNlcy9yb3V0ZXItc3RhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQVEsYUFBYSxFQUFVLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYyxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBRWhHLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsU0FBc0MsRUFBRSxFQUFFLEVBQUU7SUFDakYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUU7UUFDekIsT0FBTztZQUNMLGdCQUFnQixFQUFFLElBQUk7U0FDdkIsQ0FBQztLQUNIO0lBRUQsT0FBTztRQUNMLDZCQUE2QixFQUFFLElBQUk7S0FDcEMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUtGLE1BQU0sT0FBTyxrQkFBa0I7SUFrQjdCLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRDtRQXpCUSxvQ0FBK0IsR0FBRyxLQUFLLENBQUM7UUFDL0IsWUFBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV6QixZQUFPLEdBQUcsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkMsWUFBTyxHQUFHLElBQUksZUFBZSxDQUszQztZQUNELEtBQUssRUFBRSxTQUFTO1lBQ2hCLElBQUksRUFBRSxFQUFFO1lBQ1IsVUFBVSxFQUFFLEVBQUU7WUFDZCxXQUFXLEVBQUUsRUFBRTtTQUNoQixDQUFDLENBQUM7UUFXRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07YUFDaEIsSUFBSSxDQUNILE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBMEIsRUFBRSxDQUFDLEtBQUssWUFBWSxhQUFhLENBQUMsRUFDekUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDL0MsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQzFCO2FBQ0EsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUzQixJQUFJLENBQUMsT0FBTzthQUNULElBQUksQ0FDSCxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUVuRCxPQUFPLEtBQUssQ0FBQyxVQUFVLEVBQUU7Z0JBQ3ZCLEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO2FBQzFCO1lBRUQsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQztZQUVuRCxPQUFPO2dCQUNMLElBQUk7Z0JBQ0osVUFBVSxFQUFFLE1BQU07Z0JBQ2xCLFdBQVc7Z0JBQ1gsS0FBSzthQUNOLENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELDJCQUEyQixDQUFDLFNBQTBDLEVBQUU7UUFDdEUsSUFBSSxJQUFJLENBQUMsK0JBQStCLEVBQUU7WUFDeEMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLCtCQUErQixHQUFHLElBQUksQ0FBQztRQUU1QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDN0QsSUFDRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDcEYsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQ2pDO2dCQUNBLENBQUMsTUFBTSxDQUFDLGFBQWEsSUFBSSxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQzthQUNsRTtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUF5QixHQUFXO1FBQ2xELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsZUFBZSxDQUF5QixHQUFXO1FBQ2pELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsVUFBVSxDQUFjLEdBQVc7UUFDakMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7OytHQXBGVSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZqQixNQUFNOzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGEsIE5hdmlnYXRpb25FbmQsIFBhcmFtcywgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlLCBwYWlyd2lzZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY29uc3Qgcm91dGVyRGlzYWJsZVNjcm9sbFRvcCA9IChjb25maWc6IHsgYXNSZXR1cm5Sb3V0ZT86IGJvb2xlYW4gfSA9IHt9KSA9PiB7XG4gIGlmICghY29uZmlnLmFzUmV0dXJuUm91dGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGlzYWJsZVNjcm9sbFRvcDogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkaXNhYmxlU2Nyb2xsVG9wQXNSZXR1cm5Sb3V0ZTogdHJ1ZSxcbiAgfTtcbn07XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBSb3V0ZXJTdGF0ZVNlcnZpY2Uge1xuICBwcml2YXRlIF9pc1Njcm9sbFRvcE9uTmF2aWdhdGlvbkVuYWJsZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcm91dGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnLycpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8e1xuICAgIGRhdGE6IERhdGE7XG4gICAgcGF0aFBhcmFtczogUGFyYW1zO1xuICAgIHF1ZXJ5UGFyYW1zOiBQYXJhbXM7XG4gICAgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfT4oe1xuICAgIHRpdGxlOiB1bmRlZmluZWQsXG4gICAgZGF0YToge30sXG4gICAgcGF0aFBhcmFtczoge30sXG4gICAgcXVlcnlQYXJhbXM6IHt9LFxuICB9KTtcblxuICBnZXQgcm91dGUkKCkge1xuICAgIHJldHVybiB0aGlzLl9yb3V0ZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgc3RhdGUkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9yb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChldmVudCk6IGV2ZW50IGlzIE5hdmlnYXRpb25FbmQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGEudXJsID09PSBiLnVybCksXG4gICAgICAgIG1hcCgoZXZlbnQpID0+IGV2ZW50LnVybCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHRoaXMuX3JvdXRlJCk7XG5cbiAgICB0aGlzLl9yb3V0ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgIGxldCByb3V0ZSA9IHRoaXMuX3JvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC5yb290O1xuXG4gICAgICAgICAgd2hpbGUgKHJvdXRlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIHJvdXRlID0gcm91dGUuZmlyc3RDaGlsZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB7IGRhdGEsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHRpdGxlIH0gPSByb3V0ZTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGF0aFBhcmFtczogcGFyYW1zLFxuICAgICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGhpcy5fc3RhdGUkKTtcbiAgfVxuXG4gIGVuYWJsZVNjcm9sbFRvcE9uTmF2aWdhdGlvbihjb25maWc6IHsgc2Nyb2xsRWxlbWVudD86IEhUTUxFbGVtZW50IH0gPSB7fSkge1xuICAgIGlmICh0aGlzLl9pc1Njcm9sbFRvcE9uTmF2aWdhdGlvbkVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1Njcm9sbFRvcE9uTmF2aWdhdGlvbkVuYWJsZWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fc3RhdGUkLnBpcGUocGFpcndpc2UoKSkuc3Vic2NyaWJlKChbb2xkRGF0YSwgbmV3RGF0YV0pID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIShuZXdEYXRhLmRhdGFbJ2Rpc2FibGVTY3JvbGxUb3BBc1JldHVyblJvdXRlJ10gJiYgb2xkRGF0YS5kYXRhWydkaXNhYmxlU2Nyb2xsVG9wJ10pICYmXG4gICAgICAgICFuZXdEYXRhLmRhdGFbJ2Rpc2FibGVTY3JvbGxUb3AnXVxuICAgICAgKSB7XG4gICAgICAgIChjb25maWcuc2Nyb2xsRWxlbWVudCA/PyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLnNjcm9sbFRvcCA9IDA7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZWxlY3RRdWVyeVBhcmFtPFQgPSBzdHJpbmcgfCB1bmRlZmluZWQ+KGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKG1hcCgoc3RhdGUpID0+IHN0YXRlLnF1ZXJ5UGFyYW1zW2tleV0pKTtcbiAgfVxuXG4gIHNlbGVjdFBhdGhQYXJhbTxUID0gc3RyaW5nIHwgdW5kZWZpbmVkPihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQucGlwZShtYXAoKHN0YXRlKSA9PiBzdGF0ZS5wYXRoUGFyYW1zW2tleV0pKTtcbiAgfVxuXG4gIHNlbGVjdERhdGE8VCA9IHVua25vd24+KGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKG1hcCgoc3RhdGUpID0+IHN0YXRlLmRhdGFba2V5XSkpO1xuICB9XG59XG4iXX0=
@@ -2,8 +2,9 @@ import * as i0 from '@angular/core';
2
2
  import { inject, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, HostBinding, InjectionToken, Injectable, Inject, Optional, ElementRef, EventEmitter, Directive, Output, NgZone, Pipe, QueryList } from '@angular/core';
3
3
  import { DomSanitizer, Meta, Title } from '@angular/platform-browser';
4
4
  import { coerceElement, coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
5
- import { fromEvent, Observable, Subject, BehaviorSubject, combineLatest, map, shareReplay, takeUntil, distinctUntilChanged, startWith, debounceTime, tap, take } from 'rxjs';
5
+ import { fromEvent, Observable, Subject, BehaviorSubject, filter, distinctUntilChanged, map, pairwise, combineLatest, shareReplay, takeUntil, startWith, debounceTime, tap, take } from 'rxjs';
6
6
  import { DOCUMENT } from '@angular/common';
7
+ import { Router, NavigationEnd } from '@angular/router';
7
8
  import { __decorate, __metadata } from 'tslib';
8
9
  import * as i1 from '@angular/cdk/layout';
9
10
  import { debounceTime as debounceTime$1 } from 'rxjs/operators';
@@ -347,6 +348,84 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImpor
347
348
  args: [{ providedIn: 'root' }]
348
349
  }], ctorParameters: function () { return [{ type: ResizeObserverFactory }]; } });
349
350
 
351
+ const routerDisableScrollTop = (config = {}) => {
352
+ if (!config.asReturnRoute) {
353
+ return {
354
+ disableScrollTop: true,
355
+ };
356
+ }
357
+ return {
358
+ disableScrollTopAsReturnRoute: true,
359
+ };
360
+ };
361
+ class RouterStateService {
362
+ get route$() {
363
+ return this._route$.asObservable();
364
+ }
365
+ get state$() {
366
+ return this._state$.asObservable();
367
+ }
368
+ constructor() {
369
+ this._isScrollTopOnNavigationEnabled = false;
370
+ this._router = inject(Router);
371
+ this._route$ = new BehaviorSubject('/');
372
+ this._state$ = new BehaviorSubject({
373
+ title: undefined,
374
+ data: {},
375
+ pathParams: {},
376
+ queryParams: {},
377
+ });
378
+ this._router.events
379
+ .pipe(filter((event) => event instanceof NavigationEnd), distinctUntilChanged((a, b) => a.url === b.url), map((event) => event.url))
380
+ .subscribe(this._route$);
381
+ this._route$
382
+ .pipe(map(() => {
383
+ let route = this._router.routerState.snapshot.root;
384
+ while (route.firstChild) {
385
+ route = route.firstChild;
386
+ }
387
+ const { data, params, queryParams, title } = route;
388
+ return {
389
+ data,
390
+ pathParams: params,
391
+ queryParams,
392
+ title,
393
+ };
394
+ }))
395
+ .subscribe(this._state$);
396
+ }
397
+ enableScrollTopOnNavigation(config = {}) {
398
+ if (this._isScrollTopOnNavigationEnabled) {
399
+ return;
400
+ }
401
+ this._isScrollTopOnNavigationEnabled = true;
402
+ this._state$.pipe(pairwise()).subscribe(([oldData, newData]) => {
403
+ var _a;
404
+ if (!(newData.data['disableScrollTopAsReturnRoute'] && oldData.data['disableScrollTop']) &&
405
+ !newData.data['disableScrollTop']) {
406
+ ((_a = config.scrollElement) !== null && _a !== void 0 ? _a : document.documentElement).scrollTop = 0;
407
+ }
408
+ });
409
+ }
410
+ selectQueryParam(key) {
411
+ return this._state$.pipe(map((state) => state.queryParams[key]));
412
+ }
413
+ selectPathParam(key) {
414
+ return this._state$.pipe(map((state) => state.pathParams[key]));
415
+ }
416
+ selectData(key) {
417
+ return this._state$.pipe(map((state) => state.data[key]));
418
+ }
419
+ }
420
+ RouterStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: RouterStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
421
+ RouterStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: RouterStateService, providedIn: 'root' });
422
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: RouterStateService, decorators: [{
423
+ type: Injectable,
424
+ args: [{
425
+ providedIn: 'root',
426
+ }]
427
+ }], ctorParameters: function () { return []; } });
428
+
350
429
  class ViewportService {
351
430
  get isXs$() {
352
431
  return this._isXs$.asObservable();
@@ -2046,5 +2125,5 @@ _a = Symbol.iterator;
2046
2125
  * Generated bundle index. Do not edit.
2047
2126
  */
2048
2127
 
2049
- export { ClickObserverFactory, ClickObserverService, ClickOutsideDirective, ContentObserverService, CursorDragScrollDirective, DEFAULT_VIEWPORT_CONFIG, DestroyService, FocusVisibleService, LetContext, LetDirective, Memo, MutationObserverFactory, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, OBSERVE_SCROLL_STATE, ObserveContentDirective, ObserveResizeDirective, ObserveScrollStateDirective, RepeatDirective, ResizeObserverFactory, ResizeObserverService, SCROLL_OBSERVER_FIRST_ELEMENT_CLASS, SCROLL_OBSERVER_IGNORE_TARGET_CLASS, SCROLL_OBSERVER_LAST_ELEMENT_CLASS, SEO_DIRECTIVE_TOKEN, ScrollObserverFirstElementDirective, ScrollObserverIgnoreTargetDirective, ScrollObserverLastElementDirective, SeoDirective, StructuredDataComponent, ToArrayPipe, TypedQueryList, VIEWPORT_CONFIG, ViewportService, clamp, clone, createReactiveBindings, deleteCookie, elementCanScroll, equal, getCookie, getDomain, getGroupMatchPoints, getGroupMatchScore, getKnockoutMatchScore, getMatchScoreSubLine, hasCookie, isGroupMatch, isKnockoutMatch, mergeSeoConfig, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, provideViewportConfig, setCookie, toArray, toArrayTrackByFn };
2128
+ export { ClickObserverFactory, ClickObserverService, ClickOutsideDirective, ContentObserverService, CursorDragScrollDirective, DEFAULT_VIEWPORT_CONFIG, DestroyService, FocusVisibleService, LetContext, LetDirective, Memo, MutationObserverFactory, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, OBSERVE_SCROLL_STATE, ObserveContentDirective, ObserveResizeDirective, ObserveScrollStateDirective, RepeatDirective, ResizeObserverFactory, ResizeObserverService, RouterStateService, SCROLL_OBSERVER_FIRST_ELEMENT_CLASS, SCROLL_OBSERVER_IGNORE_TARGET_CLASS, SCROLL_OBSERVER_LAST_ELEMENT_CLASS, SEO_DIRECTIVE_TOKEN, ScrollObserverFirstElementDirective, ScrollObserverIgnoreTargetDirective, ScrollObserverLastElementDirective, SeoDirective, StructuredDataComponent, ToArrayPipe, TypedQueryList, VIEWPORT_CONFIG, ViewportService, clamp, clone, createReactiveBindings, deleteCookie, elementCanScroll, equal, getCookie, getDomain, getGroupMatchPoints, getGroupMatchScore, getKnockoutMatchScore, getMatchScoreSubLine, hasCookie, isGroupMatch, isKnockoutMatch, mergeSeoConfig, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, provideViewportConfig, routerDisableScrollTop, setCookie, toArray, toArrayTrackByFn };
2050
2129
  //# sourceMappingURL=ethlete-core.mjs.map