@dotglitch/ngx-common 1.0.17 → 1.0.18

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.
@@ -27,6 +27,8 @@ export * from './services/dialog.service';
27
27
  export * from './services/fetch.service';
28
28
  export * from './services/keyboard.service';
29
29
  export * from './services/file.service';
30
+ export * from './services/theme.service';
31
+ export * from './services/navigation.service';
30
32
  // export * from './services/serviceworker.service';
31
33
  /**
32
34
  ** Lazy loader component & service
@@ -42,4 +44,4 @@ export * from './components/dynamic-html/dynamic-html.service';
42
44
  export * from './components/dynamic-html/dynamic-html.module';
43
45
  export * from './components/dynamic-html/dynamic-html.component';
44
46
  export * from './components/dynamic-html/types';
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVIOztHQUVHO0FBQ0gsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxlQUFlLENBQUM7QUFFOUI7O0dBRUc7QUFDSCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsNkJBQTZCLENBQUM7QUFFNUM7O0dBRUc7QUFDSCxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMseUJBQXlCLENBQUM7QUFFeEM7O0VBRUU7QUFDRixjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsb0RBQW9EO0FBRXBEOztFQUVFO0FBQ0YsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyxnQ0FBZ0MsQ0FBQztBQUUvQzs7RUFFRTtBQUNGLGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMsaUNBQWlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHBhY2thZ2VcbiAqL1xuXG4vKipcbiAqKiBUeXBlc1xuICovXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzL21lbnUnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcy9wb3B1cCc7XG5cbi8qKlxuICoqIERpcmVjdGl2ZXNcbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL3Rvb2x0aXAuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcy9tZW51LmRpcmVjdGl2ZSc7XG5cbi8qKlxuICoqIFBpcGVzXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMvaHRtbC1ieXBhc3MucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVzL3Jlc291cmNlLWJ5cGFzcy5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMvc2NyaXB0LWJ5cGFzcy5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMvc3R5bGUtYnlwYXNzLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy91cmwtYnlwYXNzLnBpcGUnO1xuXG4vKipcbioqIFNlcnZpY2VzXG4qL1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9kZXBlbmRlbmN5LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2ZldGNoLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9rZXlib2FyZC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvZmlsZS5zZXJ2aWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvc2VydmljZXdvcmtlci5zZXJ2aWNlJztcblxuLyoqXG4qKiBMYXp5IGxvYWRlciBjb21wb25lbnQgJiBzZXJ2aWNlXG4qL1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL2xhenktbG9hZGVyL2xhenktbG9hZGVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL2xhenktbG9hZGVyL2xhenktbG9hZGVyLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvbGF6eS1sb2FkZXIvbGF6eS1sb2FkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy9sYXp5LWxvYWRlci90eXBlcyc7XG5cbi8qKlxuKiogU2VydmljZXNcbiovXG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvZHluYW1pYy1odG1sL2R5bmFtaWMtaHRtbC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy9keW5hbWljLWh0bWwvZHluYW1pYy1odG1sLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvZHluYW1pYy1odG1sL2R5bmFtaWMtaHRtbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL2R5bmFtaWMtaHRtbC90eXBlcyc7XG4iXX0=
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVIOztHQUVHO0FBQ0gsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxlQUFlLENBQUM7QUFFOUI7O0dBRUc7QUFDSCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsNkJBQTZCLENBQUM7QUFFNUM7O0dBRUc7QUFDSCxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMseUJBQXlCLENBQUM7QUFFeEM7O0VBRUU7QUFDRixjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLG9EQUFvRDtBQUVwRDs7RUFFRTtBQUNGLGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLGdEQUFnRCxDQUFDO0FBQy9ELGNBQWMsZ0NBQWdDLENBQUM7QUFFL0M7O0VBRUU7QUFDRixjQUFjLGdEQUFnRCxDQUFDO0FBQy9ELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBwYWNrYWdlXG4gKi9cblxuLyoqXG4gKiogVHlwZXNcbiAqL1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcy9tZW51JztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMvcG9wdXAnO1xuXG4vKipcbiAqKiBEaXJlY3RpdmVzXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcy90b29sdGlwLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvbWVudS5kaXJlY3RpdmUnO1xuXG4vKipcbiAqKiBQaXBlc1xuICovXG5leHBvcnQgKiBmcm9tICcuL3BpcGVzL2h0bWwtYnlwYXNzLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy9yZXNvdXJjZS1ieXBhc3MucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVzL3NjcmlwdC1ieXBhc3MucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVzL3N0eWxlLWJ5cGFzcy5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMvdXJsLWJ5cGFzcy5waXBlJztcblxuLyoqXG4qKiBTZXJ2aWNlc1xuKi9cbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvZGVwZW5kZW5jeS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9mZXRjaC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMva2V5Ym9hcmQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2ZpbGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL3RoZW1lLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9zZXJ2aWNld29ya2VyLnNlcnZpY2UnO1xuXG4vKipcbioqIExhenkgbG9hZGVyIGNvbXBvbmVudCAmIHNlcnZpY2VcbiovXG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvbGF6eS1sb2FkZXIvbGF6eS1sb2FkZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvbGF6eS1sb2FkZXIvbGF6eS1sb2FkZXIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy9sYXp5LWxvYWRlci9sYXp5LWxvYWRlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL2xhenktbG9hZGVyL3R5cGVzJztcblxuLyoqXG4qKiBTZXJ2aWNlc1xuKi9cbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy9keW5hbWljLWh0bWwvZHluYW1pYy1odG1sLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL2R5bmFtaWMtaHRtbC9keW5hbWljLWh0bWwubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy9keW5hbWljLWh0bWwvZHluYW1pYy1odG1sLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvZHluYW1pYy1odG1sL3R5cGVzJztcbiJdfQ==
@@ -0,0 +1,49 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import { Logger } from '../utils';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../public-api";
6
+ const { log, warn, err } = Logger("NavigationService", "#ff9800");
7
+ export class NavigationService {
8
+ constructor(lazyLoader) {
9
+ this.lazyLoader = lazyLoader;
10
+ this.virtualPath$ = new BehaviorSubject(null);
11
+ window.onhashchange = () => this.loadRootPageFromUrl();
12
+ this.loadRootPageFromUrl();
13
+ }
14
+ loadRootPageFromUrl() {
15
+ const hash = location.hash.split("?")[0];
16
+ // If the URL is imprecisely set, we restore it to the landing page
17
+ if (!this.lazyLoader.isComponentRegistered(hash))
18
+ return this.loadRootPage("#/Landing");
19
+ this.loadRootPage(location.hash);
20
+ }
21
+ loadRootPage(url, data = {}) {
22
+ const [path, query] = url.split('?');
23
+ const hash = path.replace(/^\/?#\/?/, '');
24
+ const chunks = hash.split('/');
25
+ // Get query params and pass them as @Input arguments.
26
+ const params = query?.split('&')
27
+ .reduce((pars, par) => {
28
+ const [key, value] = par.split("=");
29
+ const decoded = decodeURIComponent(value);
30
+ pars[key] = decoded;
31
+ return pars;
32
+ }, {}) || {};
33
+ log(`Root page navigate to '${hash}'`, { params, chunks });
34
+ this.virtualPath$.next({
35
+ root: chunks[0],
36
+ chunks: chunks,
37
+ args: params
38
+ });
39
+ }
40
+ }
41
+ NavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NavigationService, deps: [{ token: i1.LazyLoaderService }], target: i0.ɵɵFactoryTarget.Injectable });
42
+ NavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NavigationService, providedIn: 'root' });
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NavigationService, decorators: [{
44
+ type: Injectable,
45
+ args: [{
46
+ providedIn: 'root'
47
+ }]
48
+ }], ctorParameters: function () { return [{ type: i1.LazyLoaderService }]; } });
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9zZXJ2aWNlcy9uYXZpZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFXLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7OztBQUdsQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFhbEUsTUFBTSxPQUFPLGlCQUFpQjtJQUcxQixZQUNxQixVQUE2QjtRQUE3QixlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUgzQyxpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFzQixJQUFJLENBQUMsQ0FBQztRQUtqRSxNQUFNLENBQUMsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekMsbUVBQW1FO1FBQ25FLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQztZQUM1QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLFlBQVksQ0FBQyxHQUFXLEVBQUUsT0FBZSxFQUFFO1FBRS9DLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRS9CLHNEQUFzRDtRQUN0RCxNQUFNLE1BQU0sR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUMzQixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDbEIsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUM7WUFDcEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUdqQixHQUFHLENBQUMsMEJBQTBCLElBQUksR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFM0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDbkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDZixNQUFNLEVBQUUsTUFBYTtZQUNyQixJQUFJLEVBQUUsTUFBTTtTQUNmLENBQUMsQ0FBQztJQUNQLENBQUM7OzhHQTNDUSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZkLE1BQU07MkZBRVQsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgTGF6eUxvYWRlclNlcnZpY2UgfSBmcm9tICcuLi9wdWJsaWMtYXBpJztcblxuY29uc3QgeyBsb2csIHdhcm4sIGVyciB9ID0gTG9nZ2VyKFwiTmF2aWdhdGlvblNlcnZpY2VcIiwgXCIjZmY5ODAwXCIpO1xuXG50eXBlIE5hdmlnYXRpb25Bcmd1bWVudHMgPSB7XG4gICAgcm9vdDogc3RyaW5nLFxuICAgIGNodW5rczogW3N0cmluZywgLi4uc3RyaW5nW11dLFxuICAgIGFyZ3M6IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBOYXZpZ2F0aW9uU2VydmljZSB7XG4gICAgcHVibGljIHZpcnR1YWxQYXRoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TmF2aWdhdGlvbkFyZ3VtZW50cz4obnVsbCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBsYXp5TG9hZGVyOiBMYXp5TG9hZGVyU2VydmljZVxuICAgICkge1xuICAgICAgICB3aW5kb3cub25oYXNoY2hhbmdlID0gKCkgPT4gdGhpcy5sb2FkUm9vdFBhZ2VGcm9tVXJsKCk7XG4gICAgICAgIHRoaXMubG9hZFJvb3RQYWdlRnJvbVVybCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFJvb3RQYWdlRnJvbVVybCgpIHtcbiAgICAgICAgY29uc3QgaGFzaCA9IGxvY2F0aW9uLmhhc2guc3BsaXQoXCI/XCIpWzBdO1xuXG4gICAgICAgIC8vIElmIHRoZSBVUkwgaXMgaW1wcmVjaXNlbHkgc2V0LCB3ZSByZXN0b3JlIGl0IHRvIHRoZSBsYW5kaW5nIHBhZ2VcbiAgICAgICAgaWYgKCF0aGlzLmxhenlMb2FkZXIuaXNDb21wb25lbnRSZWdpc3RlcmVkKGhhc2gpKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFJvb3RQYWdlKFwiIy9MYW5kaW5nXCIpO1xuXG4gICAgICAgIHRoaXMubG9hZFJvb3RQYWdlKGxvY2F0aW9uLmhhc2gpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFJvb3RQYWdlKHVybDogc3RyaW5nLCBkYXRhOiBPYmplY3QgPSB7fSkge1xuXG4gICAgICAgIGNvbnN0IFtwYXRoLCBxdWVyeV0gPSB1cmwuc3BsaXQoJz8nKTtcbiAgICAgICAgY29uc3QgaGFzaCA9IHBhdGgucmVwbGFjZSgvXlxcLz8jXFwvPy8sICcnKTtcbiAgICAgICAgY29uc3QgY2h1bmtzID0gaGFzaC5zcGxpdCgnLycpO1xuXG4gICAgICAgIC8vIEdldCBxdWVyeSBwYXJhbXMgYW5kIHBhc3MgdGhlbSBhcyBASW5wdXQgYXJndW1lbnRzLlxuICAgICAgICBjb25zdCBwYXJhbXMgPSBxdWVyeT8uc3BsaXQoJyYnKVxuICAgICAgICAgICAgLnJlZHVjZSgocGFycywgcGFyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gcGFyLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBwYXJzW2tleV0gPSBkZWNvZGVkO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzO1xuICAgICAgICAgICAgfSwge30pIHx8IHt9O1xuXG5cbiAgICAgICAgbG9nKGBSb290IHBhZ2UgbmF2aWdhdGUgdG8gJyR7aGFzaH0nYCwgeyBwYXJhbXMsIGNodW5rcyB9KTtcblxuICAgICAgICB0aGlzLnZpcnR1YWxQYXRoJC5uZXh0KHtcbiAgICAgICAgICAgIHJvb3Q6IGNodW5rc1swXSxcbiAgICAgICAgICAgIGNodW5rczogY2h1bmtzIGFzIGFueSxcbiAgICAgICAgICAgIGFyZ3M6IHBhcmFtc1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,25 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class ThemeService extends BehaviorSubject {
5
+ constructor() {
6
+ super("dark");
7
+ this.subscribe(t => {
8
+ document.body.classList.remove("dark");
9
+ document.body.classList.remove("light");
10
+ document.body.classList.add(t);
11
+ });
12
+ }
13
+ setTheme(t) {
14
+ this.next(t);
15
+ }
16
+ }
17
+ ThemeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
18
+ ThemeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ThemeService, providedIn: 'root' });
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ThemeService, decorators: [{
20
+ type: Injectable,
21
+ args: [{
22
+ providedIn: 'root'
23
+ }]
24
+ }], ctorParameters: function () { return []; } });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvc2VydmljZXMvdGhlbWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBT3ZDLE1BQU0sT0FBTyxZQUFhLFNBQVEsZUFBeUI7SUFDdkQ7UUFDSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFZCxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2YsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4QyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRU0sUUFBUSxDQUFDLENBQVc7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQixDQUFDOzt5R0FiUSxZQUFZOzZHQUFaLFlBQVksY0FGVCxNQUFNOzJGQUVULFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbnR5cGUgQXBwVGhlbWUgPSBcImxpZ2h0XCIgfCBcImRhcmtcIjtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUaGVtZVNlcnZpY2UgZXh0ZW5kcyBCZWhhdmlvclN1YmplY3Q8QXBwVGhlbWU+e1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImRhcmtcIik7XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpYmUodCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJkYXJrXCIpO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwibGlnaHRcIik7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQodCk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHVibGljIHNldFRoZW1lKHQ6IEFwcFRoZW1lKSB7XG4gICAgICAgIHRoaXMubmV4dCh0KTtcbiAgICB9XG59XG4iXX0=
@@ -7,7 +7,7 @@ import * as i2 from '@angular/common';
7
7
  import { CommonModule, NgTemplateOutlet, NgIf, NgForOf, DOCUMENT, NgComponentOutlet } from '@angular/common';
8
8
  import * as i1$1 from '@angular/platform-browser';
9
9
  import { createApplication } from '@angular/platform-browser';
10
- import { firstValueFrom, of, Subject, debounceTime } from 'rxjs';
10
+ import { firstValueFrom, of, Subject, BehaviorSubject, debounceTime } from 'rxjs';
11
11
  import * as i4 from '@angular/material/icon';
12
12
  import { MatIconModule } from '@angular/material/icon';
13
13
  import * as i5 from '@angular/material/progress-spinner';
@@ -1057,7 +1057,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1057
1057
  }] }];
1058
1058
  } });
1059
1059
 
1060
- const { log, warn, err } = Logger("DialogService", "#607d8b");
1060
+ const { log: log$1, warn: warn$1, err: err$1 } = Logger("DialogService", "#607d8b");
1061
1061
  class DialogService {
1062
1062
  constructor(dialog, lazyLoader) {
1063
1063
  this.dialog = dialog;
@@ -1086,7 +1086,7 @@ class DialogService {
1086
1086
  dialog['idx'] = name;
1087
1087
  this.dialogs.push(dialog);
1088
1088
  dialog.afterClosed().subscribe(result => {
1089
- log("Dialog closed " + name, result);
1089
+ log$1("Dialog closed " + name, result);
1090
1090
  resolve(result);
1091
1091
  });
1092
1092
  });
@@ -1336,6 +1336,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1336
1336
  }]
1337
1337
  }], ctorParameters: function () { return [{ type: Fetch }]; } });
1338
1338
 
1339
+ class ThemeService extends BehaviorSubject {
1340
+ constructor() {
1341
+ super("dark");
1342
+ this.subscribe(t => {
1343
+ document.body.classList.remove("dark");
1344
+ document.body.classList.remove("light");
1345
+ document.body.classList.add(t);
1346
+ });
1347
+ }
1348
+ setTheme(t) {
1349
+ this.next(t);
1350
+ }
1351
+ }
1352
+ ThemeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1353
+ ThemeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ThemeService, providedIn: 'root' });
1354
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ThemeService, decorators: [{
1355
+ type: Injectable,
1356
+ args: [{
1357
+ providedIn: 'root'
1358
+ }]
1359
+ }], ctorParameters: function () { return []; } });
1360
+
1361
+ const { log, warn, err } = Logger("NavigationService", "#ff9800");
1362
+ class NavigationService {
1363
+ constructor(lazyLoader) {
1364
+ this.lazyLoader = lazyLoader;
1365
+ this.virtualPath$ = new BehaviorSubject(null);
1366
+ window.onhashchange = () => this.loadRootPageFromUrl();
1367
+ this.loadRootPageFromUrl();
1368
+ }
1369
+ loadRootPageFromUrl() {
1370
+ const hash = location.hash.split("?")[0];
1371
+ // If the URL is imprecisely set, we restore it to the landing page
1372
+ if (!this.lazyLoader.isComponentRegistered(hash))
1373
+ return this.loadRootPage("#/Landing");
1374
+ this.loadRootPage(location.hash);
1375
+ }
1376
+ loadRootPage(url, data = {}) {
1377
+ const [path, query] = url.split('?');
1378
+ const hash = path.replace(/^\/?#\/?/, '');
1379
+ const chunks = hash.split('/');
1380
+ // Get query params and pass them as @Input arguments.
1381
+ const params = (query === null || query === void 0 ? void 0 : query.split('&').reduce((pars, par) => {
1382
+ const [key, value] = par.split("=");
1383
+ const decoded = decodeURIComponent(value);
1384
+ pars[key] = decoded;
1385
+ return pars;
1386
+ }, {})) || {};
1387
+ log(`Root page navigate to '${hash}'`, { params, chunks });
1388
+ this.virtualPath$.next({
1389
+ root: chunks[0],
1390
+ chunks: chunks,
1391
+ args: params
1392
+ });
1393
+ }
1394
+ }
1395
+ NavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NavigationService, deps: [{ token: LazyLoaderService }], target: i0.ɵɵFactoryTarget.Injectable });
1396
+ NavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NavigationService, providedIn: 'root' });
1397
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NavigationService, decorators: [{
1398
+ type: Injectable,
1399
+ args: [{
1400
+ providedIn: 'root'
1401
+ }]
1402
+ }], ctorParameters: function () { return [{ type: LazyLoaderService }]; } });
1403
+
1339
1404
  var ComponentResolveStrategy;
1340
1405
  (function (ComponentResolveStrategy) {
1341
1406
  /**
@@ -2098,5 +2163,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
2098
2163
  * Generated bundle index. Do not edit.
2099
2164
  */
2100
2165
 
2101
- export { ComponentResolveStrategy, DependencyService, DialogService, DynamicHTMLComponent, DynamicHTMLOptions, DynamicHTMLRenderer, Fetch, FileService, HtmlBypass, KeyboardService, LazyLoaderComponent, LazyLoaderModule, LazyLoaderService, MenuDirective, NGX_DYNAMIC_CONFIG, NGX_LAZY_LOADER_CONFIG, NgxDynamicHTMLModule, OnMount, ResourceBypass, ScriptBypass, StyleBypass, TooltipDirective, UrlBypass, openMenu, openTooltip };
2166
+ export { ComponentResolveStrategy, DependencyService, DialogService, DynamicHTMLComponent, DynamicHTMLOptions, DynamicHTMLRenderer, Fetch, FileService, HtmlBypass, KeyboardService, LazyLoaderComponent, LazyLoaderModule, LazyLoaderService, MenuDirective, NGX_DYNAMIC_CONFIG, NGX_LAZY_LOADER_CONFIG, NavigationService, NgxDynamicHTMLModule, OnMount, ResourceBypass, ScriptBypass, StyleBypass, ThemeService, TooltipDirective, UrlBypass, openMenu, openTooltip };
2102
2167
  //# sourceMappingURL=dotglitch-ngx-common.mjs.map