@outerlimitstech/ngx-breadcrumbs 18.0.0 → 19.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/fesm2022/outerlimitstech-ngx-breadcrumbs.mjs +26 -29
- package/fesm2022/outerlimitstech-ngx-breadcrumbs.mjs.map +1 -1
- package/lib/breadcrumbs.component.d.ts +2 -5
- package/lib/services/breadcrumbs.service.d.ts +2 -4
- package/package.json +4 -6
- package/esm2022/lib/breadcrumbs.component.mjs +0 -51
- package/esm2022/lib/models/breadcrumb.mjs +0 -2
- package/esm2022/lib/services/breadcrumbs.config.mjs +0 -16
- package/esm2022/lib/services/breadcrumbs.resolver.mjs +0 -29
- package/esm2022/lib/services/breadcrumbs.service.mjs +0 -72
- package/esm2022/lib/services/index.mjs +0 -4
- package/esm2022/lib/utils/breadcrumbs.utils.mjs +0 -62
- package/esm2022/outerlimitstech-ngx-breadcrumbs.mjs +0 -5
- package/esm2022/public-api.mjs +0 -6
package/README.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
<img src="https://user-images.githubusercontent.com/1365728/127748628-47575d74-a2fb-4539-a31e-74d8b435fc21.png" width="30%" >
|
|
2
|
+
|
|
1
3
|
# @outerlimitstech/ngx-breadcrumbs
|
|
2
4
|
|
|
3
5
|
Angular Library for generating breadcrumbs based on the routing state.
|
|
@@ -129,4 +131,4 @@ $breadcrumb-border-radius: 15px !default;
|
|
|
129
131
|
}
|
|
130
132
|
}
|
|
131
133
|
|
|
132
|
-
```
|
|
134
|
+
```
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, inject, Injector, Component } from '@angular/core';
|
|
3
|
-
import { Observable, from, of,
|
|
2
|
+
import { Injectable, signal, inject, Injector, DestroyRef, Component } from '@angular/core';
|
|
3
|
+
import { Observable, from, of, filter, mergeMap, distinct, tap, toArray, first, concat } from 'rxjs';
|
|
4
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
5
|
import * as i2 from '@angular/router';
|
|
5
|
-
import {
|
|
6
|
+
import { Router, NavigationEnd, RouterModule } from '@angular/router';
|
|
6
7
|
import * as i1 from '@angular/common';
|
|
7
8
|
import { CommonModule } from '@angular/common';
|
|
8
9
|
|
|
@@ -13,10 +14,10 @@ class BreadcrumbsConfig {
|
|
|
13
14
|
this.postProcess = options?.postProcess ?? null;
|
|
14
15
|
this.applyDistinctOn = options?.applyDistinctOn ?? 'text';
|
|
15
16
|
}
|
|
16
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
17
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
17
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: BreadcrumbsConfig, deps: [{ token: BreadcrumbsConfig }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
18
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: BreadcrumbsConfig });
|
|
18
19
|
}
|
|
19
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: BreadcrumbsConfig, decorators: [{
|
|
20
21
|
type: Injectable
|
|
21
22
|
}], ctorParameters: () => [{ type: BreadcrumbsConfig }] });
|
|
22
23
|
|
|
@@ -109,17 +110,18 @@ class BreadcrumbsResolver {
|
|
|
109
110
|
}
|
|
110
111
|
|
|
111
112
|
class BreadcrumbsService {
|
|
112
|
-
breadcrumbs =
|
|
113
|
+
breadcrumbs = signal([]);
|
|
113
114
|
defaultResolver = new BreadcrumbsResolver();
|
|
114
|
-
route = inject(ActivatedRoute);
|
|
115
115
|
router = inject(Router);
|
|
116
116
|
config = inject(BreadcrumbsConfig);
|
|
117
117
|
injector = inject(Injector);
|
|
118
|
+
destroyRef = inject(DestroyRef);
|
|
118
119
|
constructor() {
|
|
119
120
|
this.initialize();
|
|
120
121
|
}
|
|
121
122
|
initialize() {
|
|
122
|
-
this.router.events.pipe(filter((x) => x instanceof NavigationEnd)
|
|
123
|
+
this.router.events.pipe(filter((x) => x instanceof NavigationEnd), // || x['routerEvent'] instanceof NavigationEnd
|
|
124
|
+
takeUntilDestroyed(this.destroyRef)).subscribe(() => {
|
|
123
125
|
const routeRoot = this.router.routerState.snapshot.root;
|
|
124
126
|
this.resolveCrumbs(routeRoot).pipe(mergeMap((crumbs) => crumbs), this.config.applyDistinctOn != null ? distinct((crumb) => crumb[this.config.applyDistinctOn]) : tap(), toArray(), mergeMap((crumbs) => {
|
|
125
127
|
if (this.config.postProcess) {
|
|
@@ -130,16 +132,11 @@ class BreadcrumbsService {
|
|
|
130
132
|
return of(crumbs);
|
|
131
133
|
}
|
|
132
134
|
})).subscribe((crumbs) => {
|
|
133
|
-
this.breadcrumbs.
|
|
135
|
+
this.breadcrumbs.set(crumbs);
|
|
134
136
|
});
|
|
135
137
|
});
|
|
136
138
|
}
|
|
137
|
-
|
|
138
|
-
return this.breadcrumbs;
|
|
139
|
-
}
|
|
140
|
-
getCrumbs() {
|
|
141
|
-
return this.crumbs$;
|
|
142
|
-
}
|
|
139
|
+
crumbs = this.breadcrumbs.asReadonly();
|
|
143
140
|
resolveCrumbs(route) {
|
|
144
141
|
let crumbs$;
|
|
145
142
|
const data = route.routeConfig && route.routeConfig.data;
|
|
@@ -163,10 +160,10 @@ class BreadcrumbsService {
|
|
|
163
160
|
}
|
|
164
161
|
return crumbs$;
|
|
165
162
|
}
|
|
166
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
167
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
163
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: BreadcrumbsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
164
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: BreadcrumbsService, providedIn: 'root' });
|
|
168
165
|
}
|
|
169
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
166
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: BreadcrumbsService, decorators: [{
|
|
170
167
|
type: Injectable,
|
|
171
168
|
args: [{
|
|
172
169
|
providedIn: 'root'
|
|
@@ -175,17 +172,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImpor
|
|
|
175
172
|
|
|
176
173
|
class BreadcrumbsComponent {
|
|
177
174
|
breadcrumbsService = inject(BreadcrumbsService);
|
|
178
|
-
crumbs
|
|
179
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
180
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
175
|
+
crumbs = this.breadcrumbsService.crumbs;
|
|
176
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: BreadcrumbsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
177
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: BreadcrumbsComponent, isStandalone: true, selector: "olt-ngx-breadcrumbs", providers: [
|
|
181
178
|
BreadcrumbsService,
|
|
182
179
|
{
|
|
183
180
|
provide: BreadcrumbsConfig,
|
|
184
181
|
useFactory: () => new BreadcrumbsConfig()
|
|
185
182
|
}
|
|
186
183
|
], ngImport: i0, template: `
|
|
187
|
-
<ol *ngIf="crumbs
|
|
188
|
-
<li *ngFor="let crumb of crumbs; let last = last"
|
|
184
|
+
<ol *ngIf="crumbs().length > 0" class="breadcrumbs__container">
|
|
185
|
+
<li *ngFor="let crumb of crumbs(); let last = last"
|
|
189
186
|
[ngClass]="{ 'breadcrumbs__item--active': last }"
|
|
190
187
|
class="breadcrumbs__item"
|
|
191
188
|
>
|
|
@@ -193,19 +190,19 @@ class BreadcrumbsComponent {
|
|
|
193
190
|
<span *ngIf="last">{{ crumb.text }}</span>
|
|
194
191
|
</li>
|
|
195
192
|
</ol>
|
|
196
|
-
`, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "
|
|
193
|
+
`, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
|
|
197
194
|
}
|
|
198
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
195
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: BreadcrumbsComponent, decorators: [{
|
|
199
196
|
type: Component,
|
|
200
|
-
args: [{ selector: 'olt-ngx-breadcrumbs',
|
|
197
|
+
args: [{ selector: 'olt-ngx-breadcrumbs', imports: [CommonModule, RouterModule], providers: [
|
|
201
198
|
BreadcrumbsService,
|
|
202
199
|
{
|
|
203
200
|
provide: BreadcrumbsConfig,
|
|
204
201
|
useFactory: () => new BreadcrumbsConfig()
|
|
205
202
|
}
|
|
206
203
|
], template: `
|
|
207
|
-
<ol *ngIf="crumbs
|
|
208
|
-
<li *ngFor="let crumb of crumbs; let last = last"
|
|
204
|
+
<ol *ngIf="crumbs().length > 0" class="breadcrumbs__container">
|
|
205
|
+
<li *ngFor="let crumb of crumbs(); let last = last"
|
|
209
206
|
[ngClass]="{ 'breadcrumbs__item--active': last }"
|
|
210
207
|
class="breadcrumbs__item"
|
|
211
208
|
>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outerlimitstech-ngx-breadcrumbs.mjs","sources":["../../../projects/ngx-breadcrumbs/src/lib/services/breadcrumbs.config.ts","../../../projects/ngx-breadcrumbs/src/lib/utils/breadcrumbs.utils.ts","../../../projects/ngx-breadcrumbs/src/lib/services/breadcrumbs.resolver.ts","../../../projects/ngx-breadcrumbs/src/lib/services/breadcrumbs.service.ts","../../../projects/ngx-breadcrumbs/src/lib/breadcrumbs.component.ts","../../../projects/ngx-breadcrumbs/src/public-api.ts","../../../projects/ngx-breadcrumbs/src/outerlimitstech-ngx-breadcrumbs.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Breadcrumb } from '../models/breadcrumb';\r\n\r\nexport type PostProcessFunction = (crumbs: Breadcrumb[]) => Promise<Breadcrumb[]> | Observable<Breadcrumb[]> | Breadcrumb[];\r\n\r\nexport type DistinctKey = keyof Breadcrumb;\r\n\r\n@Injectable()\r\nexport class BreadcrumbsConfig {\r\n public postProcess: PostProcessFunction | null = null;\r\n public applyDistinctOn: DistinctKey | null = 'text';\r\n\r\n constructor(options?: BreadcrumbsConfig) {\r\n this.postProcess = options?.postProcess ?? null;\r\n this.applyDistinctOn = options?.applyDistinctOn ?? 'text';\r\n }\r\n}\r\n","import { Observable, of, from } from 'rxjs';\r\n\r\nexport abstract class BreadcrumbsUtils {\r\n public static stringFormat(rawTemplate: string, data: any): string {\r\n const templateRegex = new RegExp('{{[\\\\s]*[a-zA-Z._]+?[\\\\s]*}}', 'g');\r\n\r\n return rawTemplate.replace(templateRegex, (match) => {\r\n const keyRegex = new RegExp('([a-zA-Z._]+)', 'g');\r\n const key = match.match(keyRegex);\r\n\r\n if (!key || !key.length) {\r\n return match;\r\n }\r\n\r\n const value = BreadcrumbsUtils.leaf(data, key[0]);\r\n\r\n if (!value) {\r\n return key[0];\r\n }\r\n\r\n return value;\r\n });\r\n }\r\n\r\n public static wrapIntoObservable<T>(value: T | Promise<T> | Observable<T>): Observable<T> {\r\n if (value instanceof Observable) {\r\n return value;\r\n }\r\n\r\n if (this.isPromise(value)) {\r\n return from(Promise.resolve(value));\r\n }\r\n\r\n return of(value as T);\r\n }\r\n\r\n private static isPromise(value: any): boolean {\r\n return value && (typeof value.then === 'function');\r\n }\r\n\r\n /**\r\n * Access object nested value by giving a path\r\n *\r\n * @param obj The object you want to access value from\r\n * @param path The value path. e.g: `bar.baz`\r\n * @example\r\n * const obj = { foo: { bar: 'Baz' } };\r\n * const path = 'foo.bar';\r\n * leaf(obj, path) // 'Baz'\r\n */\r\n public static leaf(obj: any, path: string) {\r\n const result = path.split('.').reduce((value, el) => value[el] || {}, obj);\r\n\r\n return BreadcrumbsUtils.isEmptyObject(result) ? null : result;\r\n }\r\n\r\n /**\r\n * checks whether an object is empty or not\r\n *\r\n * @param obj object to extract values from\r\n * @returns boolean\r\n */\r\n public static isEmptyObject(obj: any): boolean {\r\n if (typeof obj === 'object' && Object.prototype.toString.call(obj) === '[object Object]') {\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","import type { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot, UrlSegment } from '@angular/router';\nimport { Breadcrumb } from '../models/breadcrumb';\nimport { Observable, of } from 'rxjs';\nimport { BreadcrumbsUtils } from '../utils/breadcrumbs.utils';\n\n// export const breadcrumbsResolver: ResolveFn<Breadcrumb[]> = (route, state) => {\n// return new Array<Breadcrumb>();\n// };\n\n\nexport class BreadcrumbsResolver {\n public resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Breadcrumb[]> | Promise<Breadcrumb[]> | Breadcrumb[] {\n\n \n const textData = route.routeConfig?.data != null ? route.routeConfig?.data['text'] : null;\n const breadcrumbData = route.routeConfig?.data != null ? route.routeConfig?.data['breadcrumbs'] : null;\n\n const path = this.getFullPath(route);\n\n let text = breadcrumbData != null && typeof(breadcrumbData === 'string') ? breadcrumbData : breadcrumbData?.text ?? textData ?? path;\n text = BreadcrumbsUtils.stringFormat(text, route.data);\n\n const crumbs: Breadcrumb[] = [{\n text,\n path\n }];\n\n return of(crumbs);\n }\n\n public getFullPath(route: ActivatedRouteSnapshot): string {\n return this.fetchFullPath(route.pathFromRoot);\n }\n\n private fetchFullPath(routes: ActivatedRouteSnapshot[]): string {\n return routes.reduce((path, route) => path += this.fetchRelativePath(route.url), '');\n }\n\n private fetchRelativePath(urlSegments: UrlSegment[]): string {\n return urlSegments.reduce((path, urlSegment) => path += '/' + urlSegment.path, '');\n }\n}\n\n","import { inject, Injectable, Injector } from '@angular/core';\r\nimport { ActivatedRoute, ActivatedRouteSnapshot, NavigationEnd, Router } from '@angular/router';\r\nimport { BreadcrumbsConfig } from './breadcrumbs.config';\r\nimport { BehaviorSubject, concat, distinct, filter, first, mergeMap, Observable, of, tap, toArray } from 'rxjs';\r\nimport { Breadcrumb } from '../models/breadcrumb';\r\nimport { BreadcrumbsUtils } from '../utils/breadcrumbs.utils';\r\nimport { BreadcrumbsResolver } from './breadcrumbs.resolver';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BreadcrumbsService {\r\n private breadcrumbs = new BehaviorSubject<Breadcrumb[]>([]);\r\n private defaultResolver = new BreadcrumbsResolver();\r\n \r\n private route = inject(ActivatedRoute);\r\n private router = inject(Router);\r\n private config = inject(BreadcrumbsConfig);\r\n private injector = inject(Injector);\r\n \r\n constructor() { \r\n this.initialize();\r\n }\r\n\r\n private initialize() {\r\n this.router.events.pipe(\r\n filter((x) => x instanceof NavigationEnd), // || x['routerEvent'] instanceof NavigationEnd\r\n ).subscribe(() => {\r\n const routeRoot = this.router.routerState.snapshot.root;\r\n\r\n this.resolveCrumbs(routeRoot).pipe(\r\n mergeMap((crumbs: Breadcrumb[]) => crumbs), this.config.applyDistinctOn != null ? distinct((crumb: Breadcrumb) => crumb[this.config.applyDistinctOn!]) : tap(),\r\n toArray(),\r\n mergeMap((crumbs: Breadcrumb[]) => {\r\n if (this.config.postProcess) {\r\n const postProcessedCrumb = this.config.postProcess(crumbs);\r\n return BreadcrumbsUtils.wrapIntoObservable<Breadcrumb[]>(postProcessedCrumb).pipe(first());\r\n } else {\r\n return of(crumbs);\r\n }\r\n })\r\n ).subscribe((crumbs: Breadcrumb[]) => {\r\n this.breadcrumbs.next(crumbs);\r\n });\r\n });\r\n }\r\n\r\n get crumbs$(): Observable<Breadcrumb[]> {\r\n return this.breadcrumbs;\r\n }\r\n\r\n public getCrumbs(): Observable<Breadcrumb[]> {\r\n return this.crumbs$;\r\n }\r\n\r\n private resolveCrumbs(route: ActivatedRouteSnapshot): Observable<Breadcrumb[]> {\r\n let crumbs$: Observable<Breadcrumb[]>;\r\n const data = route.routeConfig && route.routeConfig.data;\r\n const breadcrumbData = data != null ? data['breadcrumbs'] : null;\r\n \r\n if (breadcrumbData != null) {\r\n let resolver: BreadcrumbsResolver;\r\n\r\n if (breadcrumbData.prototype instanceof BreadcrumbsResolver) {\r\n resolver = this.injector.get(breadcrumbData);\r\n } else {\r\n resolver = this.defaultResolver;\r\n }\r\n\r\n const result = resolver.resolve(route, this.router.routerState.snapshot);\r\n crumbs$ = BreadcrumbsUtils.wrapIntoObservable<Breadcrumb[]>(result).pipe(first());\r\n } else {\r\n crumbs$ = of([]);\r\n }\r\n\r\n if (route.firstChild) {\r\n crumbs$ = concat(crumbs$, this.resolveCrumbs(route.firstChild));\r\n }\r\n\r\n return crumbs$;\r\n }\r\n \r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { Breadcrumb } from './models/breadcrumb';\r\nimport { Observable } from 'rxjs';\r\nimport { BreadcrumbsService } from './services/breadcrumbs.service';\r\nimport { BreadcrumbsConfig } from './services';\r\nimport { RouterModule } from '@angular/router';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'olt-ngx-breadcrumbs',\r\n standalone: true,\r\n imports: [CommonModule, RouterModule],\r\n providers: [\r\n BreadcrumbsService,\r\n { \r\n provide: BreadcrumbsConfig, \r\n useFactory: () => new BreadcrumbsConfig() \r\n } \r\n ], \r\n template: `\r\n <ol *ngIf=\"crumbs$ | async as crumbs\" class=\"breadcrumbs__container\">\r\n <li *ngFor=\"let crumb of crumbs; let last = last\"\r\n [ngClass]=\"{ 'breadcrumbs__item--active': last }\"\r\n class=\"breadcrumbs__item\"\r\n >\r\n <a *ngIf=\"!last\" [routerLink]=\"crumb.path\">{{ crumb.text }}</a>\r\n <span *ngIf=\"last\">{{ crumb.text }}</span>\r\n </li>\r\n </ol>\r\n `,\r\n styles: ``\r\n})\r\nexport class BreadcrumbsComponent {\r\n breadcrumbsService = inject(BreadcrumbsService);\r\n\r\n public crumbs$: Observable<Breadcrumb[]> = this.breadcrumbsService.getCrumbs();\r\n\r\n \r\n}\r\n","/*\r\n * Public API Surface of ngx-breadcrumbs\r\n */\r\n\r\nexport * from './lib/services/index';\r\nexport * from './lib/breadcrumbs.component';\r\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":"outerlimitstech-ngx-breadcrumbs.mjs","sources":["../../../projects/ngx-breadcrumbs/src/lib/services/breadcrumbs.config.ts","../../../projects/ngx-breadcrumbs/src/lib/utils/breadcrumbs.utils.ts","../../../projects/ngx-breadcrumbs/src/lib/services/breadcrumbs.resolver.ts","../../../projects/ngx-breadcrumbs/src/lib/services/breadcrumbs.service.ts","../../../projects/ngx-breadcrumbs/src/lib/breadcrumbs.component.ts","../../../projects/ngx-breadcrumbs/src/public-api.ts","../../../projects/ngx-breadcrumbs/src/outerlimitstech-ngx-breadcrumbs.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Breadcrumb } from '../models/breadcrumb';\r\n\r\nexport type PostProcessFunction = (crumbs: Breadcrumb[]) => Promise<Breadcrumb[]> | Observable<Breadcrumb[]> | Breadcrumb[];\r\n\r\nexport type DistinctKey = keyof Breadcrumb;\r\n\r\n@Injectable()\r\nexport class BreadcrumbsConfig {\r\n public postProcess: PostProcessFunction | null = null;\r\n public applyDistinctOn: DistinctKey | null = 'text';\r\n\r\n constructor(options?: BreadcrumbsConfig) {\r\n this.postProcess = options?.postProcess ?? null;\r\n this.applyDistinctOn = options?.applyDistinctOn ?? 'text';\r\n }\r\n}\r\n","import { Observable, of, from } from 'rxjs';\r\n\r\nexport abstract class BreadcrumbsUtils {\r\n public static stringFormat(rawTemplate: string, data: any): string {\r\n const templateRegex = new RegExp('{{[\\\\s]*[a-zA-Z._]+?[\\\\s]*}}', 'g');\r\n\r\n return rawTemplate.replace(templateRegex, (match) => {\r\n const keyRegex = new RegExp('([a-zA-Z._]+)', 'g');\r\n const key = match.match(keyRegex);\r\n\r\n if (!key || !key.length) {\r\n return match;\r\n }\r\n\r\n const value = BreadcrumbsUtils.leaf(data, key[0]);\r\n\r\n if (!value) {\r\n return key[0];\r\n }\r\n\r\n return value;\r\n });\r\n }\r\n\r\n public static wrapIntoObservable<T>(value: T | Promise<T> | Observable<T>): Observable<T> {\r\n if (value instanceof Observable) {\r\n return value;\r\n }\r\n\r\n if (this.isPromise(value)) {\r\n return from(Promise.resolve(value));\r\n }\r\n\r\n return of(value as T);\r\n }\r\n\r\n private static isPromise(value: any): boolean {\r\n return value && (typeof value.then === 'function');\r\n }\r\n\r\n /**\r\n * Access object nested value by giving a path\r\n *\r\n * @param obj The object you want to access value from\r\n * @param path The value path. e.g: `bar.baz`\r\n * @example\r\n * const obj = { foo: { bar: 'Baz' } };\r\n * const path = 'foo.bar';\r\n * leaf(obj, path) // 'Baz'\r\n */\r\n public static leaf(obj: any, path: string) {\r\n const result = path.split('.').reduce((value, el) => value[el] || {}, obj);\r\n\r\n return BreadcrumbsUtils.isEmptyObject(result) ? null : result;\r\n }\r\n\r\n /**\r\n * checks whether an object is empty or not\r\n *\r\n * @param obj object to extract values from\r\n * @returns boolean\r\n */\r\n public static isEmptyObject(obj: any): boolean {\r\n if (typeof obj === 'object' && Object.prototype.toString.call(obj) === '[object Object]') {\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","import type { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot, UrlSegment } from '@angular/router';\r\nimport { Breadcrumb } from '../models/breadcrumb';\r\nimport { Observable, of } from 'rxjs';\r\nimport { BreadcrumbsUtils } from '../utils/breadcrumbs.utils';\r\n\r\n// export const breadcrumbsResolver: ResolveFn<Breadcrumb[]> = (route, state) => {\r\n// return new Array<Breadcrumb>();\r\n// };\r\n\r\n\r\nexport class BreadcrumbsResolver {\r\n public resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Breadcrumb[]> | Promise<Breadcrumb[]> | Breadcrumb[] {\r\n\r\n \r\n const textData = route.routeConfig?.data != null ? route.routeConfig?.data['text'] : null;\r\n const breadcrumbData = route.routeConfig?.data != null ? route.routeConfig?.data['breadcrumbs'] : null;\r\n\r\n const path = this.getFullPath(route);\r\n\r\n let text = breadcrumbData != null && typeof(breadcrumbData === 'string') ? breadcrumbData : breadcrumbData?.text ?? textData ?? path;\r\n text = BreadcrumbsUtils.stringFormat(text, route.data);\r\n\r\n const crumbs: Breadcrumb[] = [{\r\n text,\r\n path\r\n }];\r\n\r\n return of(crumbs);\r\n }\r\n\r\n public getFullPath(route: ActivatedRouteSnapshot): string {\r\n return this.fetchFullPath(route.pathFromRoot);\r\n }\r\n\r\n private fetchFullPath(routes: ActivatedRouteSnapshot[]): string {\r\n return routes.reduce((path, route) => path += this.fetchRelativePath(route.url), '');\r\n }\r\n\r\n private fetchRelativePath(urlSegments: UrlSegment[]): string {\r\n return urlSegments.reduce((path, urlSegment) => path += '/' + urlSegment.path, '');\r\n }\r\n}\r\n\r\n","import { DestroyRef, inject, Injectable, Injector, signal } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { ActivatedRouteSnapshot, NavigationEnd, Router } from '@angular/router';\r\nimport { BreadcrumbsConfig } from './breadcrumbs.config';\r\nimport { concat, distinct, filter, first, mergeMap, Observable, of, tap, toArray } from 'rxjs';\r\nimport { Breadcrumb } from '../models/breadcrumb';\r\nimport { BreadcrumbsUtils } from '../utils/breadcrumbs.utils';\r\nimport { BreadcrumbsResolver } from './breadcrumbs.resolver';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BreadcrumbsService {\r\n private breadcrumbs = signal<Breadcrumb[]>([]);\r\n private defaultResolver = new BreadcrumbsResolver();\r\n\r\n private router = inject(Router);\r\n private config = inject(BreadcrumbsConfig);\r\n private injector = inject(Injector);\r\n private destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n this.initialize();\r\n }\r\n\r\n private initialize() {\r\n this.router.events.pipe(\r\n filter((x) => x instanceof NavigationEnd), // || x['routerEvent'] instanceof NavigationEnd\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe(() => {\r\n const routeRoot = this.router.routerState.snapshot.root;\r\n\r\n this.resolveCrumbs(routeRoot).pipe(\r\n mergeMap((crumbs: Breadcrumb[]) => crumbs), this.config.applyDistinctOn != null ? distinct((crumb: Breadcrumb) => crumb[this.config.applyDistinctOn!]) : tap(),\r\n toArray(),\r\n mergeMap((crumbs: Breadcrumb[]) => {\r\n if (this.config.postProcess) {\r\n const postProcessedCrumb = this.config.postProcess(crumbs);\r\n return BreadcrumbsUtils.wrapIntoObservable<Breadcrumb[]>(postProcessedCrumb).pipe(first());\r\n } else {\r\n return of(crumbs);\r\n }\r\n })\r\n ).subscribe((crumbs: Breadcrumb[]) => {\r\n this.breadcrumbs.set(crumbs);\r\n });\r\n });\r\n }\r\n\r\n public readonly crumbs = this.breadcrumbs.asReadonly();\r\n\r\n private resolveCrumbs(route: ActivatedRouteSnapshot): Observable<Breadcrumb[]> {\r\n let crumbs$: Observable<Breadcrumb[]>;\r\n const data = route.routeConfig && route.routeConfig.data;\r\n const breadcrumbData = data != null ? data['breadcrumbs'] : null;\r\n\r\n if (breadcrumbData != null) {\r\n let resolver: BreadcrumbsResolver;\r\n\r\n if (breadcrumbData.prototype instanceof BreadcrumbsResolver) {\r\n resolver = this.injector.get(breadcrumbData);\r\n } else {\r\n resolver = this.defaultResolver;\r\n }\r\n\r\n const result = resolver.resolve(route, this.router.routerState.snapshot);\r\n crumbs$ = BreadcrumbsUtils.wrapIntoObservable<Breadcrumb[]>(result).pipe(first());\r\n } else {\r\n crumbs$ = of([]);\r\n }\r\n\r\n if (route.firstChild) {\r\n crumbs$ = concat(crumbs$, this.resolveCrumbs(route.firstChild));\r\n }\r\n\r\n return crumbs$;\r\n }\r\n\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { BreadcrumbsService } from './services/breadcrumbs.service';\r\nimport { BreadcrumbsConfig } from './services';\r\nimport { RouterModule } from '@angular/router';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'olt-ngx-breadcrumbs',\r\n imports: [CommonModule, RouterModule],\r\n providers: [\r\n BreadcrumbsService,\r\n {\r\n provide: BreadcrumbsConfig,\r\n useFactory: () => new BreadcrumbsConfig()\r\n }\r\n ],\r\n template: `\r\n <ol *ngIf=\"crumbs().length > 0\" class=\"breadcrumbs__container\">\r\n <li *ngFor=\"let crumb of crumbs(); let last = last\"\r\n [ngClass]=\"{ 'breadcrumbs__item--active': last }\"\r\n class=\"breadcrumbs__item\"\r\n >\r\n <a *ngIf=\"!last\" [routerLink]=\"crumb.path\">{{ crumb.text }}</a>\r\n <span *ngIf=\"last\">{{ crumb.text }}</span>\r\n </li>\r\n </ol>\r\n `,\r\n styles: ``\r\n})\r\nexport class BreadcrumbsComponent {\r\n private breadcrumbsService = inject(BreadcrumbsService);\r\n\r\n public crumbs = this.breadcrumbsService.crumbs;\r\n}\r\n","/*\r\n * Public API Surface of ngx-breadcrumbs\r\n */\r\n\r\nexport * from './lib/services/index';\r\nexport * from './lib/breadcrumbs.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import { Breadcrumb } from './models/breadcrumb';
|
|
2
|
-
import { Observable } from 'rxjs';
|
|
3
|
-
import { BreadcrumbsService } from './services/breadcrumbs.service';
|
|
4
1
|
import * as i0 from "@angular/core";
|
|
5
2
|
export declare class BreadcrumbsComponent {
|
|
6
|
-
breadcrumbsService
|
|
7
|
-
crumbs
|
|
3
|
+
private breadcrumbsService;
|
|
4
|
+
crumbs: import("@angular/core").Signal<import("./models/breadcrumb").Breadcrumb[]>;
|
|
8
5
|
static ɵfac: i0.ɵɵFactoryDeclaration<BreadcrumbsComponent, never>;
|
|
9
6
|
static ɵcmp: i0.ɵɵComponentDeclaration<BreadcrumbsComponent, "olt-ngx-breadcrumbs", never, {}, {}, never, never, true, never>;
|
|
10
7
|
}
|
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
import { Observable } from 'rxjs';
|
|
2
1
|
import { Breadcrumb } from '../models/breadcrumb';
|
|
3
2
|
import * as i0 from "@angular/core";
|
|
4
3
|
export declare class BreadcrumbsService {
|
|
5
4
|
private breadcrumbs;
|
|
6
5
|
private defaultResolver;
|
|
7
|
-
private route;
|
|
8
6
|
private router;
|
|
9
7
|
private config;
|
|
10
8
|
private injector;
|
|
9
|
+
private destroyRef;
|
|
11
10
|
constructor();
|
|
12
11
|
private initialize;
|
|
13
|
-
|
|
14
|
-
getCrumbs(): Observable<Breadcrumb[]>;
|
|
12
|
+
readonly crumbs: import("@angular/core").Signal<Breadcrumb[]>;
|
|
15
13
|
private resolveCrumbs;
|
|
16
14
|
static ɵfac: i0.ɵɵFactoryDeclaration<BreadcrumbsService, never>;
|
|
17
15
|
static ɵprov: i0.ɵɵInjectableDeclaration<BreadcrumbsService>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@outerlimitstech/ngx-breadcrumbs",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "19.0.0",
|
|
4
4
|
"description": "Angular breadcrumbs built on the native Angular router - Clone of @exalif/ngx-breadcrumbs",
|
|
5
5
|
"bugs": "https://github.com/OuterlimitsTech/olt-ngx-breadcrumbs/issues",
|
|
6
6
|
"homepage": "https://github.com/OuterlimitsTech/olt-ngx-breadcrumbs#readme",
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
"ngx-breadcrumbs"
|
|
17
17
|
],
|
|
18
18
|
"peerDependencies": {
|
|
19
|
-
"@angular/common": ">=
|
|
20
|
-
"@angular/core": ">=
|
|
21
|
-
"@angular/router": ">=
|
|
19
|
+
"@angular/common": ">=19.0.0",
|
|
20
|
+
"@angular/core": ">=19.0.0",
|
|
21
|
+
"@angular/router": ">= 19.0.0",
|
|
22
22
|
"rxjs": ">= 7.0.0"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
@@ -33,8 +33,6 @@
|
|
|
33
33
|
},
|
|
34
34
|
".": {
|
|
35
35
|
"types": "./index.d.ts",
|
|
36
|
-
"esm2022": "./esm2022/outerlimitstech-ngx-breadcrumbs.mjs",
|
|
37
|
-
"esm": "./esm2022/outerlimitstech-ngx-breadcrumbs.mjs",
|
|
38
36
|
"default": "./fesm2022/outerlimitstech-ngx-breadcrumbs.mjs"
|
|
39
37
|
}
|
|
40
38
|
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { Component, inject } from '@angular/core';
|
|
2
|
-
import { BreadcrumbsService } from './services/breadcrumbs.service';
|
|
3
|
-
import { BreadcrumbsConfig } from './services';
|
|
4
|
-
import { RouterModule } from '@angular/router';
|
|
5
|
-
import { CommonModule } from '@angular/common';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@angular/common";
|
|
8
|
-
import * as i2 from "@angular/router";
|
|
9
|
-
export class BreadcrumbsComponent {
|
|
10
|
-
breadcrumbsService = inject(BreadcrumbsService);
|
|
11
|
-
crumbs$ = this.breadcrumbsService.getCrumbs();
|
|
12
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: BreadcrumbsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
13
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: BreadcrumbsComponent, isStandalone: true, selector: "olt-ngx-breadcrumbs", providers: [
|
|
14
|
-
BreadcrumbsService,
|
|
15
|
-
{
|
|
16
|
-
provide: BreadcrumbsConfig,
|
|
17
|
-
useFactory: () => new BreadcrumbsConfig()
|
|
18
|
-
}
|
|
19
|
-
], ngImport: i0, template: `
|
|
20
|
-
<ol *ngIf="crumbs$ | async as crumbs" class="breadcrumbs__container">
|
|
21
|
-
<li *ngFor="let crumb of crumbs; let last = last"
|
|
22
|
-
[ngClass]="{ 'breadcrumbs__item--active': last }"
|
|
23
|
-
class="breadcrumbs__item"
|
|
24
|
-
>
|
|
25
|
-
<a *ngIf="!last" [routerLink]="crumb.path">{{ crumb.text }}</a>
|
|
26
|
-
<span *ngIf="last">{{ crumb.text }}</span>
|
|
27
|
-
</li>
|
|
28
|
-
</ol>
|
|
29
|
-
`, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
|
|
30
|
-
}
|
|
31
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: BreadcrumbsComponent, decorators: [{
|
|
32
|
-
type: Component,
|
|
33
|
-
args: [{ selector: 'olt-ngx-breadcrumbs', standalone: true, imports: [CommonModule, RouterModule], providers: [
|
|
34
|
-
BreadcrumbsService,
|
|
35
|
-
{
|
|
36
|
-
provide: BreadcrumbsConfig,
|
|
37
|
-
useFactory: () => new BreadcrumbsConfig()
|
|
38
|
-
}
|
|
39
|
-
], template: `
|
|
40
|
-
<ol *ngIf="crumbs$ | async as crumbs" class="breadcrumbs__container">
|
|
41
|
-
<li *ngFor="let crumb of crumbs; let last = last"
|
|
42
|
-
[ngClass]="{ 'breadcrumbs__item--active': last }"
|
|
43
|
-
class="breadcrumbs__item"
|
|
44
|
-
>
|
|
45
|
-
<a *ngIf="!last" [routerLink]="crumb.path">{{ crumb.text }}</a>
|
|
46
|
-
<span *ngIf="last">{{ crumb.text }}</span>
|
|
47
|
-
</li>
|
|
48
|
-
</ol>
|
|
49
|
-
` }]
|
|
50
|
-
}] });
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWJyZWFkY3J1bWJzL3NyYy9saWIvYnJlYWRjcnVtYnMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2xELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBMEIvQyxNQUFNLE9BQU8sb0JBQW9CO0lBQy9CLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRXpDLE9BQU8sR0FBNkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxDQUFDO3VHQUhwRSxvQkFBb0I7MkZBQXBCLG9CQUFvQixrRUFwQnBCO1lBQ1Qsa0JBQWtCO1lBQ2xCO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGlCQUFpQixFQUFFO2FBQzFDO1NBQ0YsMEJBQ1M7Ozs7Ozs7Ozs7R0FVVCx5RUFsQlMsWUFBWSxrWkFBRSxZQUFZOzsyRkFxQnpCLG9CQUFvQjtrQkF4QmhDLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsYUFDMUI7d0JBQ1Qsa0JBQWtCO3dCQUNsQjs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxpQkFBaUIsRUFBRTt5QkFDMUM7cUJBQ0YsWUFDUzs7Ozs7Ozs7OztHQVVUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQnJlYWRjcnVtYiB9IGZyb20gJy4vbW9kZWxzL2JyZWFkY3J1bWInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEJyZWFkY3J1bWJzU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYnJlYWRjcnVtYnMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJyZWFkY3J1bWJzQ29uZmlnIH0gZnJvbSAnLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ29sdC1uZ3gtYnJlYWRjcnVtYnMnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUm91dGVyTW9kdWxlXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIEJyZWFkY3J1bWJzU2VydmljZSxcclxuICAgIHsgXHJcbiAgICAgIHByb3ZpZGU6IEJyZWFkY3J1bWJzQ29uZmlnLCBcclxuICAgICAgdXNlRmFjdG9yeTogKCkgPT4gbmV3IEJyZWFkY3J1bWJzQ29uZmlnKCkgXHJcbiAgICB9ICAgIFxyXG4gIF0sICBcclxuICB0ZW1wbGF0ZTogYFxyXG4gICA8b2wgKm5nSWY9XCJjcnVtYnMkIHwgYXN5bmMgYXMgY3J1bWJzXCIgY2xhc3M9XCJicmVhZGNydW1ic19fY29udGFpbmVyXCI+XHJcbiAgICAgIDxsaSAqbmdGb3I9XCJsZXQgY3J1bWIgb2YgY3J1bWJzOyBsZXQgbGFzdCA9IGxhc3RcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2JyZWFkY3J1bWJzX19pdGVtLS1hY3RpdmUnOiBsYXN0IH1cIlxyXG4gICAgICAgIGNsYXNzPVwiYnJlYWRjcnVtYnNfX2l0ZW1cIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGEgKm5nSWY9XCIhbGFzdFwiIFtyb3V0ZXJMaW5rXT1cImNydW1iLnBhdGhcIj57eyBjcnVtYi50ZXh0IH19PC9hPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwibGFzdFwiPnt7IGNydW1iLnRleHQgfX08L3NwYW4+XHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L29sPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBgYFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQnJlYWRjcnVtYnNDb21wb25lbnQge1xyXG4gIGJyZWFkY3J1bWJzU2VydmljZSA9IGluamVjdChCcmVhZGNydW1ic1NlcnZpY2UpO1xyXG5cclxuICBwdWJsaWMgY3J1bWJzJDogT2JzZXJ2YWJsZTxCcmVhZGNydW1iW10+ID0gdGhpcy5icmVhZGNydW1ic1NlcnZpY2UuZ2V0Q3J1bWJzKCk7XHJcblxyXG4gIFxyXG59XHJcbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1icmVhZGNydW1icy9zcmMvbGliL21vZGVscy9icmVhZGNydW1iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEJyZWFkY3J1bWIge1xyXG4gIHRleHQ6IHN0cmluZztcclxuICBwYXRoOiBzdHJpbmc7XHJcbn1cclxuIl19
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class BreadcrumbsConfig {
|
|
4
|
-
postProcess = null;
|
|
5
|
-
applyDistinctOn = 'text';
|
|
6
|
-
constructor(options) {
|
|
7
|
-
this.postProcess = options?.postProcess ?? null;
|
|
8
|
-
this.applyDistinctOn = options?.applyDistinctOn ?? 'text';
|
|
9
|
-
}
|
|
10
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: BreadcrumbsConfig, deps: [{ token: BreadcrumbsConfig }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
11
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: BreadcrumbsConfig });
|
|
12
|
-
}
|
|
13
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: BreadcrumbsConfig, decorators: [{
|
|
14
|
-
type: Injectable
|
|
15
|
-
}], ctorParameters: () => [{ type: BreadcrumbsConfig }] });
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYnMuY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWJyZWFkY3J1bWJzL3NyYy9saWIvc2VydmljZXMvYnJlYWRjcnVtYnMuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBUzNDLE1BQU0sT0FBTyxpQkFBaUI7SUFDckIsV0FBVyxHQUErQixJQUFJLENBQUM7SUFDL0MsZUFBZSxHQUF1QixNQUFNLENBQUM7SUFFcEQsWUFBWSxPQUEyQjtRQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sRUFBRSxXQUFXLElBQUksSUFBSSxDQUFDO1FBQ2hELElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxFQUFFLGVBQWUsSUFBSSxNQUFNLENBQUM7SUFDNUQsQ0FBQzt1R0FQVSxpQkFBaUI7MkdBQWpCLGlCQUFpQjs7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBCcmVhZGNydW1iIH0gZnJvbSAnLi4vbW9kZWxzL2JyZWFkY3J1bWInO1xyXG5cclxuZXhwb3J0IHR5cGUgUG9zdFByb2Nlc3NGdW5jdGlvbiA9IChjcnVtYnM6IEJyZWFkY3J1bWJbXSkgPT4gUHJvbWlzZTxCcmVhZGNydW1iW10+IHwgT2JzZXJ2YWJsZTxCcmVhZGNydW1iW10+IHwgQnJlYWRjcnVtYltdO1xyXG5cclxuZXhwb3J0IHR5cGUgRGlzdGluY3RLZXkgPSBrZXlvZiBCcmVhZGNydW1iO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQnJlYWRjcnVtYnNDb25maWcge1xyXG4gIHB1YmxpYyBwb3N0UHJvY2VzczogUG9zdFByb2Nlc3NGdW5jdGlvbiB8IG51bGwgPSBudWxsO1xyXG4gIHB1YmxpYyBhcHBseURpc3RpbmN0T246IERpc3RpbmN0S2V5IHwgbnVsbCA9ICd0ZXh0JztcclxuXHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IEJyZWFkY3J1bWJzQ29uZmlnKSB7XHJcbiAgICB0aGlzLnBvc3RQcm9jZXNzID0gb3B0aW9ucz8ucG9zdFByb2Nlc3MgPz8gbnVsbDtcclxuICAgIHRoaXMuYXBwbHlEaXN0aW5jdE9uID0gb3B0aW9ucz8uYXBwbHlEaXN0aW5jdE9uID8/ICd0ZXh0JztcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { of } from 'rxjs';
|
|
2
|
-
import { BreadcrumbsUtils } from '../utils/breadcrumbs.utils';
|
|
3
|
-
// export const breadcrumbsResolver: ResolveFn<Breadcrumb[]> = (route, state) => {
|
|
4
|
-
// return new Array<Breadcrumb>();
|
|
5
|
-
// };
|
|
6
|
-
export class BreadcrumbsResolver {
|
|
7
|
-
resolve(route, state) {
|
|
8
|
-
const textData = route.routeConfig?.data != null ? route.routeConfig?.data['text'] : null;
|
|
9
|
-
const breadcrumbData = route.routeConfig?.data != null ? route.routeConfig?.data['breadcrumbs'] : null;
|
|
10
|
-
const path = this.getFullPath(route);
|
|
11
|
-
let text = breadcrumbData != null && typeof (breadcrumbData === 'string') ? breadcrumbData : breadcrumbData?.text ?? textData ?? path;
|
|
12
|
-
text = BreadcrumbsUtils.stringFormat(text, route.data);
|
|
13
|
-
const crumbs = [{
|
|
14
|
-
text,
|
|
15
|
-
path
|
|
16
|
-
}];
|
|
17
|
-
return of(crumbs);
|
|
18
|
-
}
|
|
19
|
-
getFullPath(route) {
|
|
20
|
-
return this.fetchFullPath(route.pathFromRoot);
|
|
21
|
-
}
|
|
22
|
-
fetchFullPath(routes) {
|
|
23
|
-
return routes.reduce((path, route) => path += this.fetchRelativePath(route.url), '');
|
|
24
|
-
}
|
|
25
|
-
fetchRelativePath(urlSegments) {
|
|
26
|
-
return urlSegments.reduce((path, urlSegment) => path += '/' + urlSegment.path, '');
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYnMucmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtYnJlYWRjcnVtYnMvc3JjL2xpYi9zZXJ2aWNlcy9icmVhZGNydW1icy5yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTlELGtGQUFrRjtBQUNsRixvQ0FBb0M7QUFDcEMsS0FBSztBQUdMLE1BQU0sT0FBTyxtQkFBbUI7SUFDdkIsT0FBTyxDQUFDLEtBQTZCLEVBQUUsS0FBMEI7UUFHdEUsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzFGLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUV2RyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXJDLElBQUksSUFBSSxHQUFHLGNBQWMsSUFBSSxJQUFJLElBQUksT0FBTSxDQUFDLGNBQWMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUM7UUFDckksSUFBSSxHQUFHLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZELE1BQU0sTUFBTSxHQUFpQixDQUFDO2dCQUM1QixJQUFJO2dCQUNKLElBQUk7YUFDTCxDQUFDLENBQUM7UUFFSCxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQTZCO1FBQzlDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVPLGFBQWEsQ0FBQyxNQUFnQztRQUNwRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRU8saUJBQWlCLENBQUMsV0FBeUI7UUFDakQsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUmVzb2x2ZUZuLCBSb3V0ZXJTdGF0ZVNuYXBzaG90LCBVcmxTZWdtZW50IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJyZWFkY3J1bWIgfSBmcm9tICcuLi9tb2RlbHMvYnJlYWRjcnVtYic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQnJlYWRjcnVtYnNVdGlscyB9IGZyb20gJy4uL3V0aWxzL2JyZWFkY3J1bWJzLnV0aWxzJztcblxuLy8gZXhwb3J0IGNvbnN0IGJyZWFkY3J1bWJzUmVzb2x2ZXI6IFJlc29sdmVGbjxCcmVhZGNydW1iW10+ID0gKHJvdXRlLCBzdGF0ZSkgPT4ge1xuLy8gICByZXR1cm4gbmV3IEFycmF5PEJyZWFkY3J1bWI+KCk7XG4vLyB9O1xuXG5cbmV4cG9ydCBjbGFzcyBCcmVhZGNydW1ic1Jlc29sdmVyICB7XG4gIHB1YmxpYyByZXNvbHZlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8QnJlYWRjcnVtYltdPiB8IFByb21pc2U8QnJlYWRjcnVtYltdPiB8IEJyZWFkY3J1bWJbXSB7XG5cbiAgICBcbiAgICBjb25zdCB0ZXh0RGF0YSA9IHJvdXRlLnJvdXRlQ29uZmlnPy5kYXRhICE9IG51bGwgPyByb3V0ZS5yb3V0ZUNvbmZpZz8uZGF0YVsndGV4dCddIDogbnVsbDtcbiAgICBjb25zdCBicmVhZGNydW1iRGF0YSA9IHJvdXRlLnJvdXRlQ29uZmlnPy5kYXRhICE9IG51bGwgPyByb3V0ZS5yb3V0ZUNvbmZpZz8uZGF0YVsnYnJlYWRjcnVtYnMnXSA6IG51bGw7XG5cbiAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRGdWxsUGF0aChyb3V0ZSk7XG5cbiAgICBsZXQgdGV4dCA9IGJyZWFkY3J1bWJEYXRhICE9IG51bGwgJiYgdHlwZW9mKGJyZWFkY3J1bWJEYXRhID09PSAnc3RyaW5nJykgPyBicmVhZGNydW1iRGF0YSA6IGJyZWFkY3J1bWJEYXRhPy50ZXh0ID8/IHRleHREYXRhID8/IHBhdGg7XG4gICAgdGV4dCA9IEJyZWFkY3J1bWJzVXRpbHMuc3RyaW5nRm9ybWF0KHRleHQsIHJvdXRlLmRhdGEpO1xuXG4gICAgY29uc3QgY3J1bWJzOiBCcmVhZGNydW1iW10gPSBbe1xuICAgICAgdGV4dCxcbiAgICAgIHBhdGhcbiAgICB9XTtcblxuICAgIHJldHVybiBvZihjcnVtYnMpO1xuICB9XG5cbiAgcHVibGljIGdldEZ1bGxQYXRoKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaEZ1bGxQYXRoKHJvdXRlLnBhdGhGcm9tUm9vdCk7XG4gIH1cblxuICBwcml2YXRlIGZldGNoRnVsbFBhdGgocm91dGVzOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90W10pOiBzdHJpbmcge1xuICAgIHJldHVybiByb3V0ZXMucmVkdWNlKChwYXRoLCByb3V0ZSkgPT4gcGF0aCArPSB0aGlzLmZldGNoUmVsYXRpdmVQYXRoKHJvdXRlLnVybCksICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hSZWxhdGl2ZVBhdGgodXJsU2VnbWVudHM6IFVybFNlZ21lbnRbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybFNlZ21lbnRzLnJlZHVjZSgocGF0aCwgdXJsU2VnbWVudCkgPT4gcGF0aCArPSAnLycgKyB1cmxTZWdtZW50LnBhdGgsICcnKTtcbiAgfVxufVxuXG4iXX0=
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { inject, Injectable, Injector } from '@angular/core';
|
|
2
|
-
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
|
|
3
|
-
import { BreadcrumbsConfig } from './breadcrumbs.config';
|
|
4
|
-
import { BehaviorSubject, concat, distinct, filter, first, mergeMap, of, tap, toArray } from 'rxjs';
|
|
5
|
-
import { BreadcrumbsUtils } from '../utils/breadcrumbs.utils';
|
|
6
|
-
import { BreadcrumbsResolver } from './breadcrumbs.resolver';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
export class BreadcrumbsService {
|
|
9
|
-
breadcrumbs = new BehaviorSubject([]);
|
|
10
|
-
defaultResolver = new BreadcrumbsResolver();
|
|
11
|
-
route = inject(ActivatedRoute);
|
|
12
|
-
router = inject(Router);
|
|
13
|
-
config = inject(BreadcrumbsConfig);
|
|
14
|
-
injector = inject(Injector);
|
|
15
|
-
constructor() {
|
|
16
|
-
this.initialize();
|
|
17
|
-
}
|
|
18
|
-
initialize() {
|
|
19
|
-
this.router.events.pipe(filter((x) => x instanceof NavigationEnd)).subscribe(() => {
|
|
20
|
-
const routeRoot = this.router.routerState.snapshot.root;
|
|
21
|
-
this.resolveCrumbs(routeRoot).pipe(mergeMap((crumbs) => crumbs), this.config.applyDistinctOn != null ? distinct((crumb) => crumb[this.config.applyDistinctOn]) : tap(), toArray(), mergeMap((crumbs) => {
|
|
22
|
-
if (this.config.postProcess) {
|
|
23
|
-
const postProcessedCrumb = this.config.postProcess(crumbs);
|
|
24
|
-
return BreadcrumbsUtils.wrapIntoObservable(postProcessedCrumb).pipe(first());
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
return of(crumbs);
|
|
28
|
-
}
|
|
29
|
-
})).subscribe((crumbs) => {
|
|
30
|
-
this.breadcrumbs.next(crumbs);
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
get crumbs$() {
|
|
35
|
-
return this.breadcrumbs;
|
|
36
|
-
}
|
|
37
|
-
getCrumbs() {
|
|
38
|
-
return this.crumbs$;
|
|
39
|
-
}
|
|
40
|
-
resolveCrumbs(route) {
|
|
41
|
-
let crumbs$;
|
|
42
|
-
const data = route.routeConfig && route.routeConfig.data;
|
|
43
|
-
const breadcrumbData = data != null ? data['breadcrumbs'] : null;
|
|
44
|
-
if (breadcrumbData != null) {
|
|
45
|
-
let resolver;
|
|
46
|
-
if (breadcrumbData.prototype instanceof BreadcrumbsResolver) {
|
|
47
|
-
resolver = this.injector.get(breadcrumbData);
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
resolver = this.defaultResolver;
|
|
51
|
-
}
|
|
52
|
-
const result = resolver.resolve(route, this.router.routerState.snapshot);
|
|
53
|
-
crumbs$ = BreadcrumbsUtils.wrapIntoObservable(result).pipe(first());
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
crumbs$ = of([]);
|
|
57
|
-
}
|
|
58
|
-
if (route.firstChild) {
|
|
59
|
-
crumbs$ = concat(crumbs$, this.resolveCrumbs(route.firstChild));
|
|
60
|
-
}
|
|
61
|
-
return crumbs$;
|
|
62
|
-
}
|
|
63
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: BreadcrumbsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
64
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: BreadcrumbsService, providedIn: 'root' });
|
|
65
|
-
}
|
|
66
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: BreadcrumbsService, decorators: [{
|
|
67
|
-
type: Injectable,
|
|
68
|
-
args: [{
|
|
69
|
-
providedIn: 'root'
|
|
70
|
-
}]
|
|
71
|
-
}], ctorParameters: () => [] });
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1icmVhZGNydW1icy9zcmMvbGliL3NlcnZpY2VzL2JyZWFkY3J1bWJzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQTBCLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBSzdELE1BQU0sT0FBTyxrQkFBa0I7SUFDckIsV0FBVyxHQUFHLElBQUksZUFBZSxDQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELGVBQWUsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7SUFFN0MsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLE1BQU0sR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNuQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXBDO1FBQ0UsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxVQUFVO1FBQ2hCLElBQUks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T0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7dUdBckVVLGtCQUFrQjsyR0FBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBCcmVhZGNydW1ic0NvbmZpZyB9IGZyb20gJy4vYnJlYWRjcnVtYnMuY29uZmlnJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb25jYXQsIGRpc3RpbmN0LCBmaWx0ZXIsIGZpcnN0LCBtZXJnZU1hcCwgT2JzZXJ2YWJsZSwgb2YsIHRhcCwgdG9BcnJheSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBCcmVhZGNydW1iIH0gZnJvbSAnLi4vbW9kZWxzL2JyZWFkY3J1bWInO1xyXG5pbXBvcnQgeyBCcmVhZGNydW1ic1V0aWxzIH0gZnJvbSAnLi4vdXRpbHMvYnJlYWRjcnVtYnMudXRpbHMnO1xyXG5pbXBvcnQgeyBCcmVhZGNydW1ic1Jlc29sdmVyIH0gZnJvbSAnLi9icmVhZGNydW1icy5yZXNvbHZlcic7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCcmVhZGNydW1ic1NlcnZpY2Uge1xyXG4gIHByaXZhdGUgYnJlYWRjcnVtYnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJyZWFkY3J1bWJbXT4oW10pO1xyXG4gICBwcml2YXRlIGRlZmF1bHRSZXNvbHZlciA9IG5ldyBCcmVhZGNydW1ic1Jlc29sdmVyKCk7XHJcbiAgIFxyXG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xyXG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcbiAgcHJpdmF0ZSBjb25maWcgPSBpbmplY3QoQnJlYWRjcnVtYnNDb25maWcpO1xyXG4gIHByaXZhdGUgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xyXG4gIFxyXG4gIGNvbnN0cnVjdG9yKCkgeyBcclxuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoXHJcbiAgICAgIGZpbHRlcigoeCkgPT4geCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLCAvLyB8fCB4Wydyb3V0ZXJFdmVudCddIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZFxyXG4gICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBjb25zdCByb3V0ZVJvb3QgPSB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC5yb290O1xyXG5cclxuICAgICAgdGhpcy5yZXNvbHZlQ3J1bWJzKHJvdXRlUm9vdCkucGlwZShcclxuICAgICAgICBtZXJnZU1hcCgoY3J1bWJzOiBCcmVhZGNydW1iW10pID0+IGNydW1icyksIHRoaXMuY29uZmlnLmFwcGx5RGlzdGluY3RPbiAhPSBudWxsID8gZGlzdGluY3QoKGNydW1iOiBCcmVhZGNydW1iKSA9PiBjcnVtYlt0aGlzLmNvbmZpZy5hcHBseURpc3RpbmN0T24hXSkgOiB0YXAoKSxcclxuICAgICAgICB0b0FycmF5KCksXHJcbiAgICAgICAgbWVyZ2VNYXAoKGNydW1iczogQnJlYWRjcnVtYltdKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb25maWcucG9zdFByb2Nlc3MpIHtcclxuICAgICAgICAgICAgY29uc3QgcG9zdFByb2Nlc3NlZENydW1iID0gdGhpcy5jb25maWcucG9zdFByb2Nlc3MoY3J1bWJzKTtcclxuICAgICAgICAgICAgcmV0dXJuIEJyZWFkY3J1bWJzVXRpbHMud3JhcEludG9PYnNlcnZhYmxlPEJyZWFkY3J1bWJbXT4ocG9zdFByb2Nlc3NlZENydW1iKS5waXBlKGZpcnN0KCkpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKGNydW1icyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKS5zdWJzY3JpYmUoKGNydW1iczogQnJlYWRjcnVtYltdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5icmVhZGNydW1icy5uZXh0KGNydW1icyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgY3J1bWJzJCgpOiBPYnNlcnZhYmxlPEJyZWFkY3J1bWJbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYnJlYWRjcnVtYnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q3J1bWJzKCk6IE9ic2VydmFibGU8QnJlYWRjcnVtYltdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jcnVtYnMkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNvbHZlQ3J1bWJzKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogT2JzZXJ2YWJsZTxCcmVhZGNydW1iW10+IHtcclxuICAgIGxldCBjcnVtYnMkOiBPYnNlcnZhYmxlPEJyZWFkY3J1bWJbXT47XHJcbiAgICBjb25zdCBkYXRhID0gcm91dGUucm91dGVDb25maWcgJiYgcm91dGUucm91dGVDb25maWcuZGF0YTtcclxuICAgIGNvbnN0IGJyZWFkY3J1bWJEYXRhID0gZGF0YSAhPSBudWxsID8gZGF0YVsnYnJlYWRjcnVtYnMnXSA6IG51bGw7XHJcbiAgICBcclxuICAgIGlmIChicmVhZGNydW1iRGF0YSAhPSBudWxsKSB7XHJcbiAgICAgIGxldCByZXNvbHZlcjogQnJlYWRjcnVtYnNSZXNvbHZlcjtcclxuXHJcbiAgICAgIGlmIChicmVhZGNydW1iRGF0YS5wcm90b3R5cGUgaW5zdGFuY2VvZiBCcmVhZGNydW1ic1Jlc29sdmVyKSB7XHJcbiAgICAgICAgcmVzb2x2ZXIgPSB0aGlzLmluamVjdG9yLmdldChicmVhZGNydW1iRGF0YSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzb2x2ZXIgPSB0aGlzLmRlZmF1bHRSZXNvbHZlcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZXIucmVzb2x2ZShyb3V0ZSwgdGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QpO1xyXG4gICAgICBjcnVtYnMkID0gQnJlYWRjcnVtYnNVdGlscy53cmFwSW50b09ic2VydmFibGU8QnJlYWRjcnVtYltdPihyZXN1bHQpLnBpcGUoZmlyc3QoKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjcnVtYnMkID0gb2YoW10pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyb3V0ZS5maXJzdENoaWxkKSB7XHJcbiAgICAgIGNydW1icyQgPSBjb25jYXQoY3J1bWJzJCwgdGhpcy5yZXNvbHZlQ3J1bWJzKHJvdXRlLmZpcnN0Q2hpbGQpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY3J1bWJzJDtcclxuICB9XHJcbiAgXHJcbn1cclxuIl19
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export * from './breadcrumbs.config';
|
|
2
|
-
export * from './breadcrumbs.resolver';
|
|
3
|
-
export * from './breadcrumbs.service';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtYnJlYWRjcnVtYnMvc3JjL2xpYi9zZXJ2aWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYnJlYWRjcnVtYnMuY29uZmlnJztcclxuZXhwb3J0ICogZnJvbSAnLi9icmVhZGNydW1icy5yZXNvbHZlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vYnJlYWRjcnVtYnMuc2VydmljZSc7XHJcbiJdfQ==
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { Observable, of, from } from 'rxjs';
|
|
2
|
-
export class BreadcrumbsUtils {
|
|
3
|
-
static stringFormat(rawTemplate, data) {
|
|
4
|
-
const templateRegex = new RegExp('{{[\\s]*[a-zA-Z._]+?[\\s]*}}', 'g');
|
|
5
|
-
return rawTemplate.replace(templateRegex, (match) => {
|
|
6
|
-
const keyRegex = new RegExp('([a-zA-Z._]+)', 'g');
|
|
7
|
-
const key = match.match(keyRegex);
|
|
8
|
-
if (!key || !key.length) {
|
|
9
|
-
return match;
|
|
10
|
-
}
|
|
11
|
-
const value = BreadcrumbsUtils.leaf(data, key[0]);
|
|
12
|
-
if (!value) {
|
|
13
|
-
return key[0];
|
|
14
|
-
}
|
|
15
|
-
return value;
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
static wrapIntoObservable(value) {
|
|
19
|
-
if (value instanceof Observable) {
|
|
20
|
-
return value;
|
|
21
|
-
}
|
|
22
|
-
if (this.isPromise(value)) {
|
|
23
|
-
return from(Promise.resolve(value));
|
|
24
|
-
}
|
|
25
|
-
return of(value);
|
|
26
|
-
}
|
|
27
|
-
static isPromise(value) {
|
|
28
|
-
return value && (typeof value.then === 'function');
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Access object nested value by giving a path
|
|
32
|
-
*
|
|
33
|
-
* @param obj The object you want to access value from
|
|
34
|
-
* @param path The value path. e.g: `bar.baz`
|
|
35
|
-
* @example
|
|
36
|
-
* const obj = { foo: { bar: 'Baz' } };
|
|
37
|
-
* const path = 'foo.bar';
|
|
38
|
-
* leaf(obj, path) // 'Baz'
|
|
39
|
-
*/
|
|
40
|
-
static leaf(obj, path) {
|
|
41
|
-
const result = path.split('.').reduce((value, el) => value[el] || {}, obj);
|
|
42
|
-
return BreadcrumbsUtils.isEmptyObject(result) ? null : result;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* checks whether an object is empty or not
|
|
46
|
-
*
|
|
47
|
-
* @param obj object to extract values from
|
|
48
|
-
* @returns boolean
|
|
49
|
-
*/
|
|
50
|
-
static isEmptyObject(obj) {
|
|
51
|
-
if (typeof obj === 'object' && Object.prototype.toString.call(obj) === '[object Object]') {
|
|
52
|
-
for (const key in obj) {
|
|
53
|
-
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return true;
|
|
58
|
-
}
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYnMudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtYnJlYWRjcnVtYnMvc3JjL2xpYi91dGlscy9icmVhZGNydW1icy51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUMsTUFBTSxPQUFnQixnQkFBZ0I7SUFDN0IsTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFtQixFQUFFLElBQVM7UUFDdkQsTUFBTSxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsOEJBQThCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFdEUsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2xELE1BQU0sUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNsRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRWxDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3hCLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLENBQUM7WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBSSxLQUFxQztRQUN2RSxJQUFJLEtBQUssWUFBWSxVQUFVLEVBQUUsQ0FBQztZQUNoQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUVELE9BQU8sRUFBRSxDQUFDLEtBQVUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDakMsT0FBTyxLQUFLLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBUSxFQUFFLElBQVk7UUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRTNFLE9BQU8sZ0JBQWdCLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQVE7UUFDbEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLGlCQUFpQixFQUFFLENBQUM7WUFDekYsS0FBSyxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ25ELE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7WUFDSCxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgZnJvbSB9IGZyb20gJ3J4anMnO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJyZWFkY3J1bWJzVXRpbHMge1xyXG4gIHB1YmxpYyBzdGF0aWMgc3RyaW5nRm9ybWF0KHJhd1RlbXBsYXRlOiBzdHJpbmcsIGRhdGE6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB0ZW1wbGF0ZVJlZ2V4ID0gbmV3IFJlZ0V4cCgne3tbXFxcXHNdKlthLXpBLVouX10rP1tcXFxcc10qfX0nLCAnZycpO1xyXG5cclxuICAgIHJldHVybiByYXdUZW1wbGF0ZS5yZXBsYWNlKHRlbXBsYXRlUmVnZXgsIChtYXRjaCkgPT4ge1xyXG4gICAgICBjb25zdCBrZXlSZWdleCA9IG5ldyBSZWdFeHAoJyhbYS16QS1aLl9dKyknLCAnZycpO1xyXG4gICAgICBjb25zdCBrZXkgPSBtYXRjaC5tYXRjaChrZXlSZWdleCk7XHJcblxyXG4gICAgICBpZiAoIWtleSB8fCAha2V5Lmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBtYXRjaDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgdmFsdWUgPSBCcmVhZGNydW1ic1V0aWxzLmxlYWYoZGF0YSwga2V5WzBdKTtcclxuXHJcbiAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4ga2V5WzBdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgd3JhcEludG9PYnNlcnZhYmxlPFQ+KHZhbHVlOiBUIHwgUHJvbWlzZTxUPiB8IE9ic2VydmFibGU8VD4pOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzUHJvbWlzZSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIGZyb20oUHJvbWlzZS5yZXNvbHZlKHZhbHVlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9mKHZhbHVlIGFzIFQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgaXNQcm9taXNlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB2YWx1ZSAmJiAodHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWNjZXNzIG9iamVjdCBuZXN0ZWQgdmFsdWUgYnkgZ2l2aW5nIGEgcGF0aFxyXG4gICAqXHJcbiAgICogQHBhcmFtIG9iaiBUaGUgb2JqZWN0IHlvdSB3YW50IHRvIGFjY2VzcyB2YWx1ZSBmcm9tXHJcbiAgICogQHBhcmFtIHBhdGggVGhlIHZhbHVlIHBhdGguIGUuZzogYGJhci5iYXpgXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiAgIGNvbnN0IG9iaiA9IHsgZm9vOiB7IGJhcjogJ0JheicgfSB9O1xyXG4gICAqICAgY29uc3QgcGF0aCA9ICdmb28uYmFyJztcclxuICAgKiAgIGxlYWYob2JqLCBwYXRoKSAvLyAnQmF6J1xyXG4gICAqL1xyXG4gIHB1YmxpYyBzdGF0aWMgbGVhZihvYmo6IGFueSwgcGF0aDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBwYXRoLnNwbGl0KCcuJykucmVkdWNlKCh2YWx1ZSwgZWwpID0+IHZhbHVlW2VsXSB8fCB7fSwgb2JqKTtcclxuXHJcbiAgICByZXR1cm4gQnJlYWRjcnVtYnNVdGlscy5pc0VtcHR5T2JqZWN0KHJlc3VsdCkgPyBudWxsIDogcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogY2hlY2tzIHdoZXRoZXIgYW4gb2JqZWN0IGlzIGVtcHR5IG9yIG5vdFxyXG4gICAqXHJcbiAgICogQHBhcmFtIG9iaiBvYmplY3QgdG8gZXh0cmFjdCB2YWx1ZXMgZnJvbVxyXG4gICAqIEByZXR1cm5zIGJvb2xlYW5cclxuICAgKi9cclxuICBwdWJsaWMgc3RhdGljIGlzRW1wdHlPYmplY3Qob2JqOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcclxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0ZXJsaW1pdHN0ZWNoLW5neC1icmVhZGNydW1icy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1icmVhZGNydW1icy9zcmMvb3V0ZXJsaW1pdHN0ZWNoLW5neC1icmVhZGNydW1icy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
package/esm2022/public-api.mjs
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Public API Surface of ngx-breadcrumbs
|
|
3
|
-
*/
|
|
4
|
-
export * from './lib/services/index';
|
|
5
|
-
export * from './lib/breadcrumbs.component';
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1icmVhZGNydW1icy9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyw2QkFBNkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuZ3gtYnJlYWRjcnVtYnNcclxuICovXHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2JyZWFkY3J1bWJzLmNvbXBvbmVudCc7XHJcbiJdfQ==
|