ng-hub-ui-breadcrumbs 1.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 ADDED
@@ -0,0 +1,24 @@
1
+ # NgHubUiBreadcrumb
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.3.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project breadcrumbs` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project breadcrumbs`.
8
+ > Note: Don't forget to add `--project breadcrumbs` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build breadcrumbs` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build breadcrumbs`, go to the dist folder `cd dist/breadcrumbs` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test breadcrumbs` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -0,0 +1,25 @@
1
+ import { AsyncPipe, NgIf, NgTemplateOutlet } from '@angular/common';
2
+ import { Component, ContentChild, inject } from '@angular/core';
3
+ import { RouterLink } from '@angular/router';
4
+ import { HubBreadcrumbItemDirective } from '../../directives/hub-breadcrumb-item.directive';
5
+ import { HubBreadcrumbsService } from '../../services/hub-breadcrumbs.service';
6
+ import * as i0 from "@angular/core";
7
+ export class HubBreadcrumbsComponent {
8
+ constructor() {
9
+ this.#breadcrumbsSvc = inject(HubBreadcrumbsService);
10
+ this.breadcrumbs$ = this.#breadcrumbsSvc.breadcrumbs$;
11
+ }
12
+ #breadcrumbsSvc;
13
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: HubBreadcrumbsComponent, isStandalone: true, selector: "hub-breadcrumbs", host: { classAttribute: "hub-breadcrumb" }, queries: [{ propertyName: "itemTemplate", first: true, predicate: HubBreadcrumbItemDirective, descendants: true }], ngImport: i0, template: "<nav aria-label=\"breadcrumb\" class=\"hub-breadcrumb__nav\">\n\t<ol class=\"hub-breadcrumb__list\">\n\t\t@for (item of breadcrumbs$ | async; track item; let last = $last) {\n\t\t<li\n\t\t\tclass=\"hub-breadcrumb__item\"\n\t\t\t[class.hub-breadcrumb__item--active]=\"last\"\n\t\t>\n\t\t\t@if (itemTemplate) {\n\t\t\t<ng-container\n\t\t\t\t[ngTemplateOutlet]=\"itemTemplate.template\"\n\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, isLast: last }\"\n\t\t\t/>\n\t\t\t} @else { @if (!last) {\n\t\t\t<a [routerLink]=\"item.url\" class=\"hub-breadcrumb__link\">\n\t\t\t\t{{ item.label }}\n\t\t\t</a>\n\t\t\t} @else {\n\t\t\t<span class=\"hub-breadcrumb__text\">{{ item.label }}</span>\n\t\t\t} }\n\t\t</li>\n\t\t}\n\t</ol>\n</nav>\n", styles: [".hub-breadcrumb__list{--hub-breadcrumb-padding-x: 1rem;--hub-breadcrumb-padding-y: .25rem;--hub-breadcrumb-margin-bottom: 0;--hub-breadcrumb-bg: white;--hub-breadcrumb-border-radius: 50rem;--hub-breadcrumb-divider-color: black;--hub-breadcrumb-item-padding-x: .5rem;--hub-breadcrumb-item-active-color: black;display:flex;flex-wrap:wrap;padding:var(--hub-breadcrumb-padding-y) var(--hub-breadcrumb-padding-x);margin-bottom:var(--hub-breadcrumb-margin-bottom);list-style:none;background-color:var(--hub-breadcrumb-bg)}.hub-breadcrumb__item+.hub-breadcrumb__item{padding-left:var(--hub-breadcrumb-item-padding-x)}.hub-breadcrumb__item+.hub-breadcrumb__item:before{float:left;padding-right:var(--hub-breadcrumb-item-padding-x);color:var(--hub-breadcrumb-divider-color);content:var(--hub-breadcrumb-divider, \">\")}.hub-breadcrumb__item--active{color:var(--hub-breadcrumb-item-active-color)}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbsComponent, decorators: [{
17
+ type: Component,
18
+ args: [{ selector: 'hub-breadcrumbs', standalone: true, imports: [AsyncPipe, NgIf, RouterLink, NgTemplateOutlet], host: {
19
+ class: 'hub-breadcrumb'
20
+ }, template: "<nav aria-label=\"breadcrumb\" class=\"hub-breadcrumb__nav\">\n\t<ol class=\"hub-breadcrumb__list\">\n\t\t@for (item of breadcrumbs$ | async; track item; let last = $last) {\n\t\t<li\n\t\t\tclass=\"hub-breadcrumb__item\"\n\t\t\t[class.hub-breadcrumb__item--active]=\"last\"\n\t\t>\n\t\t\t@if (itemTemplate) {\n\t\t\t<ng-container\n\t\t\t\t[ngTemplateOutlet]=\"itemTemplate.template\"\n\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, isLast: last }\"\n\t\t\t/>\n\t\t\t} @else { @if (!last) {\n\t\t\t<a [routerLink]=\"item.url\" class=\"hub-breadcrumb__link\">\n\t\t\t\t{{ item.label }}\n\t\t\t</a>\n\t\t\t} @else {\n\t\t\t<span class=\"hub-breadcrumb__text\">{{ item.label }}</span>\n\t\t\t} }\n\t\t</li>\n\t\t}\n\t</ol>\n</nav>\n", styles: [".hub-breadcrumb__list{--hub-breadcrumb-padding-x: 1rem;--hub-breadcrumb-padding-y: .25rem;--hub-breadcrumb-margin-bottom: 0;--hub-breadcrumb-bg: white;--hub-breadcrumb-border-radius: 50rem;--hub-breadcrumb-divider-color: black;--hub-breadcrumb-item-padding-x: .5rem;--hub-breadcrumb-item-active-color: black;display:flex;flex-wrap:wrap;padding:var(--hub-breadcrumb-padding-y) var(--hub-breadcrumb-padding-x);margin-bottom:var(--hub-breadcrumb-margin-bottom);list-style:none;background-color:var(--hub-breadcrumb-bg)}.hub-breadcrumb__item+.hub-breadcrumb__item{padding-left:var(--hub-breadcrumb-item-padding-x)}.hub-breadcrumb__item+.hub-breadcrumb__item:before{float:left;padding-right:var(--hub-breadcrumb-item-padding-x);color:var(--hub-breadcrumb-divider-color);content:var(--hub-breadcrumb-divider, \">\")}.hub-breadcrumb__item--active{color:var(--hub-breadcrumb-item-active-color)}\n"] }]
21
+ }], propDecorators: { itemTemplate: [{
22
+ type: ContentChild,
23
+ args: [HubBreadcrumbItemDirective]
24
+ }] } });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHViLWJyZWFkY3J1bWJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JyZWFkY3J1bWJzL3NyYy9saWIvY29tcG9uZW50cy9odWItYnJlYWRjcnVtYnMvaHViLWJyZWFkY3J1bWJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JyZWFkY3J1bWJzL3NyYy9saWIvY29tcG9uZW50cy9odWItYnJlYWRjcnVtYnMvaHViLWJyZWFkY3J1bWJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUM1RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7QUFZL0UsTUFBTSxPQUFPLHVCQUF1QjtJQVZwQztRQVdDLG9CQUFlLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFLaEQsaUJBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQztLQUNqRDtJQU5BLGVBQWUsQ0FBaUM7OEdBRHBDLHVCQUF1QjtrR0FBdkIsdUJBQXVCLGlLQUdyQiwwQkFBMEIsZ0RDbkJ6QyxrdUJBdUJBLDY2QkRkVyxTQUFTLDhDQUFRLFVBQVUsb09BQUUsZ0JBQWdCOzsyRkFPM0MsdUJBQXVCO2tCQVZuQyxTQUFTOytCQUNDLGlCQUFpQixjQUNmLElBQUksV0FDUCxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixDQUFDLFFBR2xEO3dCQUNMLEtBQUssRUFBRSxnQkFBZ0I7cUJBQ3ZCOzhCQU1ELFlBQVk7c0JBRFgsWUFBWTt1QkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyTGluayB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBIdWJCcmVhZGNydW1iSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvaHViLWJyZWFkY3J1bWItaXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSHViQnJlYWRjcnVtYnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHViLWJyZWFkY3J1bWJzLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdodWItYnJlYWRjcnVtYnMnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbQXN5bmNQaXBlLCBOZ0lmLCBSb3V0ZXJMaW5rLCBOZ1RlbXBsYXRlT3V0bGV0XSxcblx0dGVtcGxhdGVVcmw6ICcuL2h1Yi1icmVhZGNydW1icy5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsOiAnLi9odWItYnJlYWRjcnVtYnMuY29tcG9uZW50LnNjc3MnLFxuXHRob3N0OiB7XG5cdFx0Y2xhc3M6ICdodWItYnJlYWRjcnVtYidcblx0fVxufSlcbmV4cG9ydCBjbGFzcyBIdWJCcmVhZGNydW1ic0NvbXBvbmVudCB7XG5cdCNicmVhZGNydW1ic1N2YyA9IGluamVjdChIdWJCcmVhZGNydW1ic1NlcnZpY2UpO1xuXG5cdEBDb250ZW50Q2hpbGQoSHViQnJlYWRjcnVtYkl0ZW1EaXJlY3RpdmUpXG5cdGl0ZW1UZW1wbGF0ZT86IEh1YkJyZWFkY3J1bWJJdGVtRGlyZWN0aXZlO1xuXG5cdGJyZWFkY3J1bWJzJCA9IHRoaXMuI2JyZWFkY3J1bWJzU3ZjLmJyZWFkY3J1bWJzJDtcbn1cbiIsIjxuYXYgYXJpYS1sYWJlbD1cImJyZWFkY3J1bWJcIiBjbGFzcz1cImh1Yi1icmVhZGNydW1iX19uYXZcIj5cblx0PG9sIGNsYXNzPVwiaHViLWJyZWFkY3J1bWJfX2xpc3RcIj5cblx0XHRAZm9yIChpdGVtIG9mIGJyZWFkY3J1bWJzJCB8IGFzeW5jOyB0cmFjayBpdGVtOyBsZXQgbGFzdCA9ICRsYXN0KSB7XG5cdFx0PGxpXG5cdFx0XHRjbGFzcz1cImh1Yi1icmVhZGNydW1iX19pdGVtXCJcblx0XHRcdFtjbGFzcy5odWItYnJlYWRjcnVtYl9faXRlbS0tYWN0aXZlXT1cImxhc3RcIlxuXHRcdD5cblx0XHRcdEBpZiAoaXRlbVRlbXBsYXRlKSB7XG5cdFx0XHQ8bmctY29udGFpbmVyXG5cdFx0XHRcdFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1UZW1wbGF0ZS50ZW1wbGF0ZVwiXG5cdFx0XHRcdFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSwgaXNMYXN0OiBsYXN0IH1cIlxuXHRcdFx0Lz5cblx0XHRcdH0gQGVsc2UgeyBAaWYgKCFsYXN0KSB7XG5cdFx0XHQ8YSBbcm91dGVyTGlua109XCJpdGVtLnVybFwiIGNsYXNzPVwiaHViLWJyZWFkY3J1bWJfX2xpbmtcIj5cblx0XHRcdFx0e3sgaXRlbS5sYWJlbCB9fVxuXHRcdFx0PC9hPlxuXHRcdFx0fSBAZWxzZSB7XG5cdFx0XHQ8c3BhbiBjbGFzcz1cImh1Yi1icmVhZGNydW1iX190ZXh0XCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cblx0XHRcdH0gfVxuXHRcdDwvbGk+XG5cdFx0fVxuXHQ8L29sPlxuPC9uYXY+XG4iXX0=
@@ -0,0 +1,17 @@
1
+ import { Directive, inject, TemplateRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class HubBreadcrumbItemDirective {
4
+ constructor() {
5
+ this.template = inject((TemplateRef));
6
+ }
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
8
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: HubBreadcrumbItemDirective, isStandalone: true, selector: "[hubBreadcrumbItem]", ngImport: i0 }); }
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbItemDirective, decorators: [{
11
+ type: Directive,
12
+ args: [{
13
+ selector: '[hubBreadcrumbItem]',
14
+ standalone: true
15
+ }]
16
+ }] });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHViLWJyZWFkY3J1bWItaXRlbS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9icmVhZGNydW1icy9zcmMvbGliL2RpcmVjdGl2ZXMvaHViLWJyZWFkY3J1bWItaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU8vRCxNQUFNLE9BQU8sMEJBQTBCO0lBSnZDO1FBS0MsYUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFBLFdBQXNDLENBQUEsQ0FBQyxDQUFDO0tBQzFEOzhHQUZZLDBCQUEwQjtrR0FBMUIsMEJBQTBCOzsyRkFBMUIsMEJBQTBCO2tCQUp0QyxTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFVBQVUsRUFBRSxJQUFJO2lCQUNoQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgaW5qZWN0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnJlYWRjcnVtYlRlbXBsYXRlQ29udGV4dCB9IGZyb20gJy4uL3R5cGVzL2JyZWFkY3J1bWItdGVtcGxhdGUtY29udGV4dCc7XG5cbkBEaXJlY3RpdmUoe1xuXHRzZWxlY3RvcjogJ1todWJCcmVhZGNydW1iSXRlbV0nLFxuXHRzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEh1YkJyZWFkY3J1bWJJdGVtRGlyZWN0aXZlIHtcblx0dGVtcGxhdGUgPSBpbmplY3QoVGVtcGxhdGVSZWY8QnJlYWRjcnVtYlRlbXBsYXRlQ29udGV4dD4pO1xufVxuIl19
@@ -0,0 +1,18 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { HubBreadcrumbsComponent } from './components/hub-breadcrumbs/hub-breadcrumbs.component';
3
+ import { HubBreadcrumbItemDirective } from './directives/hub-breadcrumb-item.directive';
4
+ import * as i0 from "@angular/core";
5
+ export class HubBreadcrumbsModule {
6
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbsModule, imports: [HubBreadcrumbsComponent, HubBreadcrumbItemDirective], exports: [HubBreadcrumbsComponent, HubBreadcrumbItemDirective] }); }
8
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbsModule }); }
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbsModule, decorators: [{
11
+ type: NgModule,
12
+ args: [{
13
+ declarations: [],
14
+ imports: [HubBreadcrumbsComponent, HubBreadcrumbItemDirective],
15
+ exports: [HubBreadcrumbsComponent, HubBreadcrumbItemDirective]
16
+ }]
17
+ }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHViLWJyZWFkY3J1bWJzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2JyZWFkY3J1bWJzL3NyYy9saWIvaHViLWJyZWFkY3J1bWJzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOztBQU94RixNQUFNLE9BQU8sb0JBQW9COzhHQUFwQixvQkFBb0I7K0dBQXBCLG9CQUFvQixZQUh0Qix1QkFBdUIsRUFBRSwwQkFBMEIsYUFDbkQsdUJBQXVCLEVBQUUsMEJBQTBCOytHQUVqRCxvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBTGhDLFFBQVE7bUJBQUM7b0JBQ1QsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLHVCQUF1QixFQUFFLDBCQUEwQixDQUFDO29CQUM5RCxPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSwwQkFBMEIsQ0FBQztpQkFDOUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHViQnJlYWRjcnVtYnNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvaHViLWJyZWFkY3J1bWJzL2h1Yi1icmVhZGNydW1icy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSHViQnJlYWRjcnVtYkl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvaHViLWJyZWFkY3J1bWItaXRlbS5kaXJlY3RpdmUnO1xuXG5ATmdNb2R1bGUoe1xuXHRkZWNsYXJhdGlvbnM6IFtdLFxuXHRpbXBvcnRzOiBbSHViQnJlYWRjcnVtYnNDb21wb25lbnQsIEh1YkJyZWFkY3J1bWJJdGVtRGlyZWN0aXZlXSxcblx0ZXhwb3J0czogW0h1YkJyZWFkY3J1bWJzQ29tcG9uZW50LCBIdWJCcmVhZGNydW1iSXRlbURpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgSHViQnJlYWRjcnVtYnNNb2R1bGUge31cbiJdfQ==
@@ -0,0 +1,72 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
3
+ import { filter, startWith, map } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ export class HubBreadcrumbsService {
6
+ constructor() {
7
+ this.#router = inject(Router);
8
+ this.#activatedRoute = inject(ActivatedRoute);
9
+ this.breadcrumbs$ = this.#router.events.pipe(filter((event) => event instanceof NavigationEnd), startWith(undefined), map(() => this.createBreadcrumbs(this.#activatedRoute.root)));
10
+ }
11
+ #router;
12
+ #activatedRoute;
13
+ createBreadcrumbs(route, url = '', breadcrumbs = []) {
14
+ const children = route.children;
15
+ if (children.length === 0) {
16
+ return breadcrumbs;
17
+ }
18
+ for (const child of children) {
19
+ const routeSegments = child.snapshot.url;
20
+ // Construir la URL para este nivel
21
+ const routeURL = routeSegments
22
+ .map((segment) => segment.path)
23
+ .join('/');
24
+ const nextUrl = routeURL ? `${url}/${routeURL}` : url;
25
+ // Verificar si esta ruta específica tiene datos de breadcrumb
26
+ const hasBreadcrumbData = this.hasOwnBreadcrumbData(child);
27
+ if (hasBreadcrumbData) {
28
+ const label = this.getBreadcrumbLabel(child);
29
+ breadcrumbs.push({
30
+ label,
31
+ url: nextUrl,
32
+ data: child.snapshot.data
33
+ });
34
+ }
35
+ // Continuar con los hijos
36
+ return this.createBreadcrumbs(child, nextUrl, breadcrumbs);
37
+ }
38
+ return breadcrumbs;
39
+ }
40
+ hasOwnBreadcrumbData(route) {
41
+ // Verificar si la ruta tiene su propia configuración de breadcrumb
42
+ const routeConfig = route.routeConfig;
43
+ return !!(routeConfig &&
44
+ routeConfig.data &&
45
+ routeConfig.data['breadcrumb']);
46
+ }
47
+ getBreadcrumbLabel(route) {
48
+ const data = route.snapshot.data;
49
+ let label = data['breadcrumb'];
50
+ if (typeof label === 'function') {
51
+ label = label(data);
52
+ }
53
+ if (data['resolvedData']) {
54
+ label = this.getResolvedBreadcrumb(label, data['resolvedData']);
55
+ }
56
+ return label;
57
+ }
58
+ getResolvedBreadcrumb(template, data) {
59
+ return template.replace(/\{([^}]+)\}/g, (match, key) => {
60
+ return data[key] || match;
61
+ });
62
+ }
63
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
64
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbsService, providedIn: 'root' }); }
65
+ }
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbsService, decorators: [{
67
+ type: Injectable,
68
+ args: [{
69
+ providedIn: 'root'
70
+ }]
71
+ }] });
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHViLWJyZWFkY3J1bWJzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9icmVhZGNydW1icy9zcmMvbGliL3NlcnZpY2VzL2h1Yi1icmVhZGNydW1icy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFLOUMsTUFBTSxPQUFPLHFCQUFxQjtJQUhsQztRQUlDLFlBQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekIsb0JBQWUsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFekMsaUJBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3RDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxZQUFZLGFBQWEsQ0FBQyxFQUNqRCxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQ3BCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUM1RCxDQUFDO0tBd0VGO0lBL0VBLE9BQU8sQ0FBa0I7SUFDekIsZUFBZSxDQUEwQjtJQVFqQyxpQkFBaUIsQ0FDeEIsS0FBcUIsRUFDckIsTUFBYyxFQUFFLEVBQ2hCLGNBQWdDLEVBQUU7UUFFbEMsTUFBTSxRQUFRLEdBQXFCLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFFbEQsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMxQixPQUFPLFdBQVcsQ0FBQztTQUNuQjtRQUVELEtBQUssTUFBTSxLQUFLLElBQUksUUFBUSxFQUFFO1lBQzdCLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBRXpDLG1DQUFtQztZQUNuQyxNQUFNLFFBQVEsR0FBVyxhQUFhO2lCQUNwQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7aUJBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVaLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUV0RCw4REFBOEQ7WUFDOUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFM0QsSUFBSSxpQkFBaUIsRUFBRTtnQkFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3QyxXQUFXLENBQUMsSUFBSSxDQUFDO29CQUNoQixLQUFLO29CQUNMLEdBQUcsRUFBRSxPQUFPO29CQUNaLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUk7aUJBQ3pCLENBQUMsQ0FBQzthQUNIO1lBRUQsMEJBQTBCO1lBQzFCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDM0Q7UUFFRCxPQUFPLFdBQVcsQ0FBQztJQUNwQixDQUFDO0lBRU8sb0JBQW9CLENBQUMsS0FBcUI7UUFDakQsbUVBQW1FO1FBQ25FLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDdEMsT0FBTyxDQUFDLENBQUMsQ0FDUixXQUFXO1lBQ1gsV0FBVyxDQUFDLElBQUk7WUFDaEIsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FDOUIsQ0FBQztJQUNILENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxLQUFxQjtRQUMvQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNqQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFL0IsSUFBSSxPQUFPLEtBQUssS0FBSyxVQUFVLEVBQUU7WUFDaEMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNwQjtRQUVELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ3pCLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO0lBRU8scUJBQXFCLENBQUMsUUFBZ0IsRUFBRSxJQUFTO1FBQ3hELE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDdEQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0EvRVcscUJBQXFCO2tIQUFyQixxQkFBcUIsY0FGckIsTUFBTTs7MkZBRU4scUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnJlYWRjcnVtYkl0ZW0gfSBmcm9tICcuLi90eXBlcy9icmVhZGNydW1iLWl0ZW0nO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmaWx0ZXIsIHN0YXJ0V2l0aCwgbWFwIH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKHtcblx0cHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEh1YkJyZWFkY3J1bWJzU2VydmljZSB7XG5cdCNyb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblx0I2FjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcblxuXHRicmVhZGNydW1icyQgPSB0aGlzLiNyb3V0ZXIuZXZlbnRzLnBpcGUoXG5cdFx0ZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcblx0XHRzdGFydFdpdGgodW5kZWZpbmVkKSxcblx0XHRtYXAoKCkgPT4gdGhpcy5jcmVhdGVCcmVhZGNydW1icyh0aGlzLiNhY3RpdmF0ZWRSb3V0ZS5yb290KSlcblx0KTtcblxuXHRwcml2YXRlIGNyZWF0ZUJyZWFkY3J1bWJzKFxuXHRcdHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcblx0XHR1cmw6IHN0cmluZyA9ICcnLFxuXHRcdGJyZWFkY3J1bWJzOiBCcmVhZGNydW1iSXRlbVtdID0gW11cblx0KTogQnJlYWRjcnVtYkl0ZW1bXSB7XG5cdFx0Y29uc3QgY2hpbGRyZW46IEFjdGl2YXRlZFJvdXRlW10gPSByb3V0ZS5jaGlsZHJlbjtcblxuXHRcdGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBicmVhZGNydW1icztcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG5cdFx0XHRjb25zdCByb3V0ZVNlZ21lbnRzID0gY2hpbGQuc25hcHNob3QudXJsO1xuXG5cdFx0XHQvLyBDb25zdHJ1aXIgbGEgVVJMIHBhcmEgZXN0ZSBuaXZlbFxuXHRcdFx0Y29uc3Qgcm91dGVVUkw6IHN0cmluZyA9IHJvdXRlU2VnbWVudHNcblx0XHRcdFx0Lm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC5wYXRoKVxuXHRcdFx0XHQuam9pbignLycpO1xuXG5cdFx0XHRjb25zdCBuZXh0VXJsID0gcm91dGVVUkwgPyBgJHt1cmx9LyR7cm91dGVVUkx9YCA6IHVybDtcblxuXHRcdFx0Ly8gVmVyaWZpY2FyIHNpIGVzdGEgcnV0YSBlc3BlY8OtZmljYSB0aWVuZSBkYXRvcyBkZSBicmVhZGNydW1iXG5cdFx0XHRjb25zdCBoYXNCcmVhZGNydW1iRGF0YSA9IHRoaXMuaGFzT3duQnJlYWRjcnVtYkRhdGEoY2hpbGQpO1xuXG5cdFx0XHRpZiAoaGFzQnJlYWRjcnVtYkRhdGEpIHtcblx0XHRcdFx0Y29uc3QgbGFiZWwgPSB0aGlzLmdldEJyZWFkY3J1bWJMYWJlbChjaGlsZCk7XG5cdFx0XHRcdGJyZWFkY3J1bWJzLnB1c2goe1xuXHRcdFx0XHRcdGxhYmVsLFxuXHRcdFx0XHRcdHVybDogbmV4dFVybCxcblx0XHRcdFx0XHRkYXRhOiBjaGlsZC5zbmFwc2hvdC5kYXRhXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb250aW51YXIgY29uIGxvcyBoaWpvc1xuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlQnJlYWRjcnVtYnMoY2hpbGQsIG5leHRVcmwsIGJyZWFkY3J1bWJzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYnJlYWRjcnVtYnM7XG5cdH1cblxuXHRwcml2YXRlIGhhc093bkJyZWFkY3J1bWJEYXRhKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IGJvb2xlYW4ge1xuXHRcdC8vIFZlcmlmaWNhciBzaSBsYSBydXRhIHRpZW5lIHN1IHByb3BpYSBjb25maWd1cmFjacOzbiBkZSBicmVhZGNydW1iXG5cdFx0Y29uc3Qgcm91dGVDb25maWcgPSByb3V0ZS5yb3V0ZUNvbmZpZztcblx0XHRyZXR1cm4gISEoXG5cdFx0XHRyb3V0ZUNvbmZpZyAmJlxuXHRcdFx0cm91dGVDb25maWcuZGF0YSAmJlxuXHRcdFx0cm91dGVDb25maWcuZGF0YVsnYnJlYWRjcnVtYiddXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0QnJlYWRjcnVtYkxhYmVsKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZGF0YSA9IHJvdXRlLnNuYXBzaG90LmRhdGE7XG5cdFx0bGV0IGxhYmVsID0gZGF0YVsnYnJlYWRjcnVtYiddO1xuXG5cdFx0aWYgKHR5cGVvZiBsYWJlbCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0bGFiZWwgPSBsYWJlbChkYXRhKTtcblx0XHR9XG5cblx0XHRpZiAoZGF0YVsncmVzb2x2ZWREYXRhJ10pIHtcblx0XHRcdGxhYmVsID0gdGhpcy5nZXRSZXNvbHZlZEJyZWFkY3J1bWIobGFiZWwsIGRhdGFbJ3Jlc29sdmVkRGF0YSddKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbGFiZWw7XG5cdH1cblxuXHRwcml2YXRlIGdldFJlc29sdmVkQnJlYWRjcnVtYih0ZW1wbGF0ZTogc3RyaW5nLCBkYXRhOiBhbnkpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC9cXHsoW159XSspXFx9L2csIChtYXRjaCwga2V5KSA9PiB7XG5cdFx0XHRyZXR1cm4gZGF0YVtrZXldIHx8IG1hdGNoO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi1pdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnJlYWRjcnVtYnMvc3JjL2xpYi90eXBlcy9icmVhZGNydW1iLWl0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQnJlYWRjcnVtYkl0ZW0ge1xuXHRsYWJlbDogc3RyaW5nO1xuXHR1cmw6IHN0cmluZztcblx0ZGF0YTogYW55O1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi10ZW1wbGF0ZS1jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnJlYWRjcnVtYnMvc3JjL2xpYi90eXBlcy9icmVhZGNydW1iLXRlbXBsYXRlLWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWFkY3J1bWJJdGVtIH0gZnJvbSAnLi9icmVhZGNydW1iLWl0ZW0nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJyZWFkY3J1bWJUZW1wbGF0ZUNvbnRleHQge1xuXHQkaW1wbGljaXQ6IEJyZWFkY3J1bWJJdGVtO1xuXHRpc0xhc3Q6IGJvb2xlYW47XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctaHViLXVpLWJyZWFkY3J1bWJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvYnJlYWRjcnVtYnMvc3JjL25nLWh1Yi11aS1icmVhZGNydW1icy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Public API Surface of breadcrumbs
3
+ */
4
+ export * from './lib/hub-breadcrumbs.module';
5
+ export * from './lib/services/hub-breadcrumbs.service';
6
+ export * from './lib/components/hub-breadcrumbs/hub-breadcrumbs.component';
7
+ export * from './lib/directives/hub-breadcrumb-item.directive';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2JyZWFkY3J1bWJzL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsNERBQTRELENBQUM7QUFDM0UsY0FBYyxnREFBZ0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgYnJlYWRjcnVtYnNcbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaHViLWJyZWFkY3J1bWJzLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9odWItYnJlYWRjcnVtYnMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2h1Yi1icmVhZGNydW1icy9odWItYnJlYWRjcnVtYnMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvaHViLWJyZWFkY3J1bWItaXRlbS5kaXJlY3RpdmUnO1xuIl19
@@ -0,0 +1,132 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, TemplateRef, Directive, Injectable, Component, ContentChild, NgModule } from '@angular/core';
3
+ import { AsyncPipe, NgTemplateOutlet, NgIf } from '@angular/common';
4
+ import { Router, ActivatedRoute, NavigationEnd, RouterLink } from '@angular/router';
5
+ import { filter, startWith, map } from 'rxjs';
6
+
7
+ class HubBreadcrumbItemDirective {
8
+ constructor() {
9
+ this.template = inject((TemplateRef));
10
+ }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
12
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: HubBreadcrumbItemDirective, isStandalone: true, selector: "[hubBreadcrumbItem]", ngImport: i0 }); }
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbItemDirective, decorators: [{
15
+ type: Directive,
16
+ args: [{
17
+ selector: '[hubBreadcrumbItem]',
18
+ standalone: true
19
+ }]
20
+ }] });
21
+
22
+ class HubBreadcrumbsService {
23
+ constructor() {
24
+ this.#router = inject(Router);
25
+ this.#activatedRoute = inject(ActivatedRoute);
26
+ this.breadcrumbs$ = this.#router.events.pipe(filter((event) => event instanceof NavigationEnd), startWith(undefined), map(() => this.createBreadcrumbs(this.#activatedRoute.root)));
27
+ }
28
+ #router;
29
+ #activatedRoute;
30
+ createBreadcrumbs(route, url = '', breadcrumbs = []) {
31
+ const children = route.children;
32
+ if (children.length === 0) {
33
+ return breadcrumbs;
34
+ }
35
+ for (const child of children) {
36
+ const routeSegments = child.snapshot.url;
37
+ // Construir la URL para este nivel
38
+ const routeURL = routeSegments
39
+ .map((segment) => segment.path)
40
+ .join('/');
41
+ const nextUrl = routeURL ? `${url}/${routeURL}` : url;
42
+ // Verificar si esta ruta específica tiene datos de breadcrumb
43
+ const hasBreadcrumbData = this.hasOwnBreadcrumbData(child);
44
+ if (hasBreadcrumbData) {
45
+ const label = this.getBreadcrumbLabel(child);
46
+ breadcrumbs.push({
47
+ label,
48
+ url: nextUrl,
49
+ data: child.snapshot.data
50
+ });
51
+ }
52
+ // Continuar con los hijos
53
+ return this.createBreadcrumbs(child, nextUrl, breadcrumbs);
54
+ }
55
+ return breadcrumbs;
56
+ }
57
+ hasOwnBreadcrumbData(route) {
58
+ // Verificar si la ruta tiene su propia configuración de breadcrumb
59
+ const routeConfig = route.routeConfig;
60
+ return !!(routeConfig &&
61
+ routeConfig.data &&
62
+ routeConfig.data['breadcrumb']);
63
+ }
64
+ getBreadcrumbLabel(route) {
65
+ const data = route.snapshot.data;
66
+ let label = data['breadcrumb'];
67
+ if (typeof label === 'function') {
68
+ label = label(data);
69
+ }
70
+ if (data['resolvedData']) {
71
+ label = this.getResolvedBreadcrumb(label, data['resolvedData']);
72
+ }
73
+ return label;
74
+ }
75
+ getResolvedBreadcrumb(template, data) {
76
+ return template.replace(/\{([^}]+)\}/g, (match, key) => {
77
+ return data[key] || match;
78
+ });
79
+ }
80
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
81
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbsService, providedIn: 'root' }); }
82
+ }
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbsService, decorators: [{
84
+ type: Injectable,
85
+ args: [{
86
+ providedIn: 'root'
87
+ }]
88
+ }] });
89
+
90
+ class HubBreadcrumbsComponent {
91
+ constructor() {
92
+ this.#breadcrumbsSvc = inject(HubBreadcrumbsService);
93
+ this.breadcrumbs$ = this.#breadcrumbsSvc.breadcrumbs$;
94
+ }
95
+ #breadcrumbsSvc;
96
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
97
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: HubBreadcrumbsComponent, isStandalone: true, selector: "hub-breadcrumbs", host: { classAttribute: "hub-breadcrumb" }, queries: [{ propertyName: "itemTemplate", first: true, predicate: HubBreadcrumbItemDirective, descendants: true }], ngImport: i0, template: "<nav aria-label=\"breadcrumb\" class=\"hub-breadcrumb__nav\">\n\t<ol class=\"hub-breadcrumb__list\">\n\t\t@for (item of breadcrumbs$ | async; track item; let last = $last) {\n\t\t<li\n\t\t\tclass=\"hub-breadcrumb__item\"\n\t\t\t[class.hub-breadcrumb__item--active]=\"last\"\n\t\t>\n\t\t\t@if (itemTemplate) {\n\t\t\t<ng-container\n\t\t\t\t[ngTemplateOutlet]=\"itemTemplate.template\"\n\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, isLast: last }\"\n\t\t\t/>\n\t\t\t} @else { @if (!last) {\n\t\t\t<a [routerLink]=\"item.url\" class=\"hub-breadcrumb__link\">\n\t\t\t\t{{ item.label }}\n\t\t\t</a>\n\t\t\t} @else {\n\t\t\t<span class=\"hub-breadcrumb__text\">{{ item.label }}</span>\n\t\t\t} }\n\t\t</li>\n\t\t}\n\t</ol>\n</nav>\n", styles: [".hub-breadcrumb__list{--hub-breadcrumb-padding-x: 1rem;--hub-breadcrumb-padding-y: .25rem;--hub-breadcrumb-margin-bottom: 0;--hub-breadcrumb-bg: white;--hub-breadcrumb-border-radius: 50rem;--hub-breadcrumb-divider-color: black;--hub-breadcrumb-item-padding-x: .5rem;--hub-breadcrumb-item-active-color: black;display:flex;flex-wrap:wrap;padding:var(--hub-breadcrumb-padding-y) var(--hub-breadcrumb-padding-x);margin-bottom:var(--hub-breadcrumb-margin-bottom);list-style:none;background-color:var(--hub-breadcrumb-bg)}.hub-breadcrumb__item+.hub-breadcrumb__item{padding-left:var(--hub-breadcrumb-item-padding-x)}.hub-breadcrumb__item+.hub-breadcrumb__item:before{float:left;padding-right:var(--hub-breadcrumb-item-padding-x);color:var(--hub-breadcrumb-divider-color);content:var(--hub-breadcrumb-divider, \">\")}.hub-breadcrumb__item--active{color:var(--hub-breadcrumb-item-active-color)}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
98
+ }
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbsComponent, decorators: [{
100
+ type: Component,
101
+ args: [{ selector: 'hub-breadcrumbs', standalone: true, imports: [AsyncPipe, NgIf, RouterLink, NgTemplateOutlet], host: {
102
+ class: 'hub-breadcrumb'
103
+ }, template: "<nav aria-label=\"breadcrumb\" class=\"hub-breadcrumb__nav\">\n\t<ol class=\"hub-breadcrumb__list\">\n\t\t@for (item of breadcrumbs$ | async; track item; let last = $last) {\n\t\t<li\n\t\t\tclass=\"hub-breadcrumb__item\"\n\t\t\t[class.hub-breadcrumb__item--active]=\"last\"\n\t\t>\n\t\t\t@if (itemTemplate) {\n\t\t\t<ng-container\n\t\t\t\t[ngTemplateOutlet]=\"itemTemplate.template\"\n\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, isLast: last }\"\n\t\t\t/>\n\t\t\t} @else { @if (!last) {\n\t\t\t<a [routerLink]=\"item.url\" class=\"hub-breadcrumb__link\">\n\t\t\t\t{{ item.label }}\n\t\t\t</a>\n\t\t\t} @else {\n\t\t\t<span class=\"hub-breadcrumb__text\">{{ item.label }}</span>\n\t\t\t} }\n\t\t</li>\n\t\t}\n\t</ol>\n</nav>\n", styles: [".hub-breadcrumb__list{--hub-breadcrumb-padding-x: 1rem;--hub-breadcrumb-padding-y: .25rem;--hub-breadcrumb-margin-bottom: 0;--hub-breadcrumb-bg: white;--hub-breadcrumb-border-radius: 50rem;--hub-breadcrumb-divider-color: black;--hub-breadcrumb-item-padding-x: .5rem;--hub-breadcrumb-item-active-color: black;display:flex;flex-wrap:wrap;padding:var(--hub-breadcrumb-padding-y) var(--hub-breadcrumb-padding-x);margin-bottom:var(--hub-breadcrumb-margin-bottom);list-style:none;background-color:var(--hub-breadcrumb-bg)}.hub-breadcrumb__item+.hub-breadcrumb__item{padding-left:var(--hub-breadcrumb-item-padding-x)}.hub-breadcrumb__item+.hub-breadcrumb__item:before{float:left;padding-right:var(--hub-breadcrumb-item-padding-x);color:var(--hub-breadcrumb-divider-color);content:var(--hub-breadcrumb-divider, \">\")}.hub-breadcrumb__item--active{color:var(--hub-breadcrumb-item-active-color)}\n"] }]
104
+ }], propDecorators: { itemTemplate: [{
105
+ type: ContentChild,
106
+ args: [HubBreadcrumbItemDirective]
107
+ }] } });
108
+
109
+ class HubBreadcrumbsModule {
110
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
111
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbsModule, imports: [HubBreadcrumbsComponent, HubBreadcrumbItemDirective], exports: [HubBreadcrumbsComponent, HubBreadcrumbItemDirective] }); }
112
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbsModule }); }
113
+ }
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubBreadcrumbsModule, decorators: [{
115
+ type: NgModule,
116
+ args: [{
117
+ declarations: [],
118
+ imports: [HubBreadcrumbsComponent, HubBreadcrumbItemDirective],
119
+ exports: [HubBreadcrumbsComponent, HubBreadcrumbItemDirective]
120
+ }]
121
+ }] });
122
+
123
+ /*
124
+ * Public API Surface of breadcrumbs
125
+ */
126
+
127
+ /**
128
+ * Generated bundle index. Do not edit.
129
+ */
130
+
131
+ export { HubBreadcrumbItemDirective, HubBreadcrumbsComponent, HubBreadcrumbsModule, HubBreadcrumbsService };
132
+ //# sourceMappingURL=ng-hub-ui-breadcrumbs.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ng-hub-ui-breadcrumbs.mjs","sources":["../../../projects/breadcrumbs/src/lib/directives/hub-breadcrumb-item.directive.ts","../../../projects/breadcrumbs/src/lib/services/hub-breadcrumbs.service.ts","../../../projects/breadcrumbs/src/lib/components/hub-breadcrumbs/hub-breadcrumbs.component.ts","../../../projects/breadcrumbs/src/lib/components/hub-breadcrumbs/hub-breadcrumbs.component.html","../../../projects/breadcrumbs/src/lib/hub-breadcrumbs.module.ts","../../../projects/breadcrumbs/src/public-api.ts","../../../projects/breadcrumbs/src/ng-hub-ui-breadcrumbs.ts"],"sourcesContent":["import { Directive, inject, TemplateRef } from '@angular/core';\nimport { BreadcrumbTemplateContext } from '../types/breadcrumb-template-context';\n\n@Directive({\n\tselector: '[hubBreadcrumbItem]',\n\tstandalone: true\n})\nexport class HubBreadcrumbItemDirective {\n\ttemplate = inject(TemplateRef<BreadcrumbTemplateContext>);\n}\n","import { inject, Injectable } from '@angular/core';\nimport { BreadcrumbItem } from '../types/breadcrumb-item';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { filter, startWith, map } from 'rxjs';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class HubBreadcrumbsService {\n\t#router = inject(Router);\n\t#activatedRoute = inject(ActivatedRoute);\n\n\tbreadcrumbs$ = this.#router.events.pipe(\n\t\tfilter((event) => event instanceof NavigationEnd),\n\t\tstartWith(undefined),\n\t\tmap(() => this.createBreadcrumbs(this.#activatedRoute.root))\n\t);\n\n\tprivate createBreadcrumbs(\n\t\troute: ActivatedRoute,\n\t\turl: string = '',\n\t\tbreadcrumbs: BreadcrumbItem[] = []\n\t): BreadcrumbItem[] {\n\t\tconst children: ActivatedRoute[] = route.children;\n\n\t\tif (children.length === 0) {\n\t\t\treturn breadcrumbs;\n\t\t}\n\n\t\tfor (const child of children) {\n\t\t\tconst routeSegments = child.snapshot.url;\n\n\t\t\t// Construir la URL para este nivel\n\t\t\tconst routeURL: string = routeSegments\n\t\t\t\t.map((segment) => segment.path)\n\t\t\t\t.join('/');\n\n\t\t\tconst nextUrl = routeURL ? `${url}/${routeURL}` : url;\n\n\t\t\t// Verificar si esta ruta específica tiene datos de breadcrumb\n\t\t\tconst hasBreadcrumbData = this.hasOwnBreadcrumbData(child);\n\n\t\t\tif (hasBreadcrumbData) {\n\t\t\t\tconst label = this.getBreadcrumbLabel(child);\n\t\t\t\tbreadcrumbs.push({\n\t\t\t\t\tlabel,\n\t\t\t\t\turl: nextUrl,\n\t\t\t\t\tdata: child.snapshot.data\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Continuar con los hijos\n\t\t\treturn this.createBreadcrumbs(child, nextUrl, breadcrumbs);\n\t\t}\n\n\t\treturn breadcrumbs;\n\t}\n\n\tprivate hasOwnBreadcrumbData(route: ActivatedRoute): boolean {\n\t\t// Verificar si la ruta tiene su propia configuración de breadcrumb\n\t\tconst routeConfig = route.routeConfig;\n\t\treturn !!(\n\t\t\trouteConfig &&\n\t\t\trouteConfig.data &&\n\t\t\trouteConfig.data['breadcrumb']\n\t\t);\n\t}\n\n\tprivate getBreadcrumbLabel(route: ActivatedRoute): string {\n\t\tconst data = route.snapshot.data;\n\t\tlet label = data['breadcrumb'];\n\n\t\tif (typeof label === 'function') {\n\t\t\tlabel = label(data);\n\t\t}\n\n\t\tif (data['resolvedData']) {\n\t\t\tlabel = this.getResolvedBreadcrumb(label, data['resolvedData']);\n\t\t}\n\n\t\treturn label;\n\t}\n\n\tprivate getResolvedBreadcrumb(template: string, data: any): string {\n\t\treturn template.replace(/\\{([^}]+)\\}/g, (match, key) => {\n\t\t\treturn data[key] || match;\n\t\t});\n\t}\n}\n","import { AsyncPipe, NgIf, NgTemplateOutlet } from '@angular/common';\nimport { Component, ContentChild, inject } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { HubBreadcrumbItemDirective } from '../../directives/hub-breadcrumb-item.directive';\nimport { HubBreadcrumbsService } from '../../services/hub-breadcrumbs.service';\n\n@Component({\n\tselector: 'hub-breadcrumbs',\n\tstandalone: true,\n\timports: [AsyncPipe, NgIf, RouterLink, NgTemplateOutlet],\n\ttemplateUrl: './hub-breadcrumbs.component.html',\n\tstyleUrl: './hub-breadcrumbs.component.scss',\n\thost: {\n\t\tclass: 'hub-breadcrumb'\n\t}\n})\nexport class HubBreadcrumbsComponent {\n\t#breadcrumbsSvc = inject(HubBreadcrumbsService);\n\n\t@ContentChild(HubBreadcrumbItemDirective)\n\titemTemplate?: HubBreadcrumbItemDirective;\n\n\tbreadcrumbs$ = this.#breadcrumbsSvc.breadcrumbs$;\n}\n","<nav aria-label=\"breadcrumb\" class=\"hub-breadcrumb__nav\">\n\t<ol class=\"hub-breadcrumb__list\">\n\t\t@for (item of breadcrumbs$ | async; track item; let last = $last) {\n\t\t<li\n\t\t\tclass=\"hub-breadcrumb__item\"\n\t\t\t[class.hub-breadcrumb__item--active]=\"last\"\n\t\t>\n\t\t\t@if (itemTemplate) {\n\t\t\t<ng-container\n\t\t\t\t[ngTemplateOutlet]=\"itemTemplate.template\"\n\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, isLast: last }\"\n\t\t\t/>\n\t\t\t} @else { @if (!last) {\n\t\t\t<a [routerLink]=\"item.url\" class=\"hub-breadcrumb__link\">\n\t\t\t\t{{ item.label }}\n\t\t\t</a>\n\t\t\t} @else {\n\t\t\t<span class=\"hub-breadcrumb__text\">{{ item.label }}</span>\n\t\t\t} }\n\t\t</li>\n\t\t}\n\t</ol>\n</nav>\n","import { NgModule } from '@angular/core';\nimport { HubBreadcrumbsComponent } from './components/hub-breadcrumbs/hub-breadcrumbs.component';\nimport { HubBreadcrumbItemDirective } from './directives/hub-breadcrumb-item.directive';\n\n@NgModule({\n\tdeclarations: [],\n\timports: [HubBreadcrumbsComponent, HubBreadcrumbItemDirective],\n\texports: [HubBreadcrumbsComponent, HubBreadcrumbItemDirective]\n})\nexport class HubBreadcrumbsModule {}\n","/*\n * Public API Surface of breadcrumbs\n */\nexport * from './lib/hub-breadcrumbs.module';\nexport * from './lib/services/hub-breadcrumbs.service';\nexport * from './lib/components/hub-breadcrumbs/hub-breadcrumbs.component';\nexport * from './lib/directives/hub-breadcrumb-item.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="ng-hub-ui-breadcrumbs" />
5
+ export * from './public-api';
@@ -0,0 +1,9 @@
1
+ import { HubBreadcrumbItemDirective } from '../../directives/hub-breadcrumb-item.directive';
2
+ import * as i0 from "@angular/core";
3
+ export declare class HubBreadcrumbsComponent {
4
+ #private;
5
+ itemTemplate?: HubBreadcrumbItemDirective;
6
+ breadcrumbs$: import("rxjs").Observable<import("../../types/breadcrumb-item").BreadcrumbItem[]>;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<HubBreadcrumbsComponent, never>;
8
+ static ɵcmp: i0.ɵɵComponentDeclaration<HubBreadcrumbsComponent, "hub-breadcrumbs", never, {}, {}, ["itemTemplate"], never, true, never>;
9
+ }
@@ -0,0 +1,7 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class HubBreadcrumbItemDirective {
4
+ template: TemplateRef<any>;
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<HubBreadcrumbItemDirective, never>;
6
+ static ɵdir: i0.ɵɵDirectiveDeclaration<HubBreadcrumbItemDirective, "[hubBreadcrumbItem]", never, {}, {}, never, never, true, never>;
7
+ }
@@ -0,0 +1,8 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./components/hub-breadcrumbs/hub-breadcrumbs.component";
3
+ import * as i2 from "./directives/hub-breadcrumb-item.directive";
4
+ export declare class HubBreadcrumbsModule {
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<HubBreadcrumbsModule, never>;
6
+ static ɵmod: i0.ɵɵNgModuleDeclaration<HubBreadcrumbsModule, never, [typeof i1.HubBreadcrumbsComponent, typeof i2.HubBreadcrumbItemDirective], [typeof i1.HubBreadcrumbsComponent, typeof i2.HubBreadcrumbItemDirective]>;
7
+ static ɵinj: i0.ɵɵInjectorDeclaration<HubBreadcrumbsModule>;
8
+ }
@@ -0,0 +1,12 @@
1
+ import { BreadcrumbItem } from '../types/breadcrumb-item';
2
+ import * as i0 from "@angular/core";
3
+ export declare class HubBreadcrumbsService {
4
+ #private;
5
+ breadcrumbs$: import("rxjs").Observable<BreadcrumbItem[]>;
6
+ private createBreadcrumbs;
7
+ private hasOwnBreadcrumbData;
8
+ private getBreadcrumbLabel;
9
+ private getResolvedBreadcrumb;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<HubBreadcrumbsService, never>;
11
+ static ɵprov: i0.ɵɵInjectableDeclaration<HubBreadcrumbsService>;
12
+ }
@@ -0,0 +1,5 @@
1
+ export interface BreadcrumbItem {
2
+ label: string;
3
+ url: string;
4
+ data: any;
5
+ }
@@ -0,0 +1,5 @@
1
+ import { BreadcrumbItem } from './breadcrumb-item';
2
+ export interface BreadcrumbTemplateContext {
3
+ $implicit: BreadcrumbItem;
4
+ isLast: boolean;
5
+ }
Binary file
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "ng-hub-ui-breadcrumbs",
3
+ "version": "1.0.0",
4
+ "description": "A flexible and reusable breadcrumb component for Angular applications that automatically generates breadcrumbs based on routing configuration",
5
+ "keywords": [
6
+ "angular",
7
+ "customizable",
8
+ "bootstrap",
9
+ "breadcrumb",
10
+ "breadcrumbs",
11
+ "navigation",
12
+ "routing",
13
+ "component",
14
+ "typescript"
15
+ ],
16
+ "author": "Your Organization",
17
+ "license": "MIT",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "https://github.com/carlos-morcillo/ng-hub-ui-breadcrumbs"
21
+ },
22
+ "bugs": {
23
+ "url": "https://github.com/carlos-morcillo/ng-hub-ui-breadcrumbs/issues"
24
+ },
25
+ "homepage": "https://github.com/carlos-morcillo/ng-hub-ui-breadcrumbs#readme",
26
+ "peerDependencies": {
27
+ "@angular/common": ">=17.0.0",
28
+ "@angular/core": ">=17.0.0"
29
+ },
30
+ "dependencies": {
31
+ "tslib": "^2.3.0"
32
+ },
33
+ "sideEffects": false,
34
+ "module": "fesm2022/ng-hub-ui-breadcrumbs.mjs",
35
+ "typings": "index.d.ts",
36
+ "exports": {
37
+ "./package.json": {
38
+ "default": "./package.json"
39
+ },
40
+ ".": {
41
+ "types": "./index.d.ts",
42
+ "esm2022": "./esm2022/ng-hub-ui-breadcrumbs.mjs",
43
+ "esm": "./esm2022/ng-hub-ui-breadcrumbs.mjs",
44
+ "default": "./fesm2022/ng-hub-ui-breadcrumbs.mjs"
45
+ }
46
+ }
47
+ }
@@ -0,0 +1,4 @@
1
+ export * from './lib/hub-breadcrumbs.module';
2
+ export * from './lib/services/hub-breadcrumbs.service';
3
+ export * from './lib/components/hub-breadcrumbs/hub-breadcrumbs.component';
4
+ export * from './lib/directives/hub-breadcrumb-item.directive';