@covalent/core
Advanced tools
@@ -1,5 +0,4 @@ | ||
| import { ElementRef, AfterViewInit, ChangeDetectorRef } from '@angular/core'; | ||
| import { ElementRef, AfterViewInit } from '@angular/core'; | ||
| import * as i0 from "@angular/core"; | ||
| export declare class TdBreadcrumbComponent implements AfterViewInit { | ||
| private _elementRef; | ||
| private _changeDetectorRef; | ||
@@ -10,2 +9,9 @@ private _displayCrumb; | ||
| private _separatorIcon; | ||
| private _shouldTruncate; | ||
| private _maxWidth?; | ||
| elementRef: ElementRef<any>; | ||
| fullText: string; | ||
| flexOrder: number; | ||
| isCurrentPage: boolean; | ||
| get ariaCurrent(): string | null; | ||
| matButtonClass: boolean; | ||
@@ -17,2 +23,6 @@ tdBreadCrumbClass: boolean; | ||
| set displayIcon(displayIcon: boolean); | ||
| get shouldTruncate(): boolean; | ||
| set shouldTruncate(shouldTruncate: boolean); | ||
| get maxWidth(): number | undefined; | ||
| set maxWidth(maxWidth: number | undefined); | ||
| get displayCrumb(): boolean; | ||
@@ -31,3 +41,4 @@ /** | ||
| get displayBinding(): string | undefined; | ||
| constructor(_elementRef: ElementRef, _changeDetectorRef: ChangeDetectorRef); | ||
| get maxWidthBinding(): number | undefined; | ||
| get orderBinding(): number; | ||
| ngAfterViewInit(): void; | ||
@@ -34,0 +45,0 @@ /** |
@@ -1,2 +0,3 @@ | ||
| import { QueryList, OnInit, OnDestroy, AfterContentInit, ChangeDetectorRef, ElementRef, AfterViewInit } from '@angular/core'; | ||
| import { QueryList, OnInit, OnDestroy, AfterContentInit, AfterViewInit } from '@angular/core'; | ||
| import { MatMenuTrigger } from '@angular/material/menu'; | ||
| import { TdBreadcrumbComponent } from './breadcrumb/breadcrumb.component'; | ||
@@ -10,5 +11,17 @@ import * as i0 from "@angular/core"; | ||
| private _destroy$; | ||
| /** | ||
| * Maximum width ratio for the last breadcrumb when truncation is needed. | ||
| * Set to 35% of available width to ensure last breadcrumb doesn't dominate the space | ||
| * while still being readable. | ||
| */ | ||
| private readonly LAST_BREADCRUMB_MAX_WIDTH_RATIO; | ||
| tdBreadCrumbsClass: boolean; | ||
| role: string; | ||
| ariaLabel: string; | ||
| _breadcrumbs: QueryList<TdBreadcrumbComponent>; | ||
| hiddenBreadcrumbs: TdBreadcrumbComponent[]; | ||
| overflowMenuItems: TdBreadcrumbComponent[]; | ||
| showOverflowButton: boolean; | ||
| overflowButtonOrder: number; | ||
| overflowMenuTrigger?: MatMenuTrigger; | ||
| /** | ||
@@ -19,3 +32,7 @@ * Sets the icon url shown between breadcrumbs. Defaults to 'chevron_right'. | ||
| get separatorIcon(): string; | ||
| constructor(_elementRef: ElementRef, _changeDetectorRef: ChangeDetectorRef); | ||
| size?: 'headline1' | 'headline2' | 'headline3' | 'headline4' | 'headline5' | 'headline6' | 'subtitle1' | 'subtitle2' | 'body1' | 'body2' | 'button' | 'caption'; | ||
| get fontFamily(): string | undefined; | ||
| get fontSize(): string | undefined; | ||
| get fontWeight(): string | undefined; | ||
| get lineHeight(): string | undefined; | ||
| ngOnInit(): void; | ||
@@ -30,2 +47,5 @@ ngAfterViewInit(): void; | ||
| get count(): number; | ||
| get overflowButtonAriaLabel(): string; | ||
| handleOverflowItemClick(item: TdBreadcrumbComponent): void; | ||
| getItemText(item: TdBreadcrumbComponent): string; | ||
| /** | ||
@@ -38,3 +58,3 @@ * Set the crumb icon separators | ||
| static ɵfac: i0.ɵɵFactoryDeclaration<TdBreadcrumbsComponent, never>; | ||
| static ɵcmp: i0.ɵɵComponentDeclaration<TdBreadcrumbsComponent, "td-breadcrumbs", never, { "separatorIcon": { "alias": "separatorIcon"; "required": false; }; }, {}, ["_breadcrumbs"], ["*"], true, never>; | ||
| static ɵcmp: i0.ɵɵComponentDeclaration<TdBreadcrumbsComponent, "td-breadcrumbs", never, { "separatorIcon": { "alias": "separatorIcon"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, {}, ["_breadcrumbs"], ["*"], true, never>; | ||
| } |
| import * as i0 from '@angular/core'; | ||
| import { ChangeDetectionStrategy, Component, HostBinding, Input, ContentChildren, NgModule } from '@angular/core'; | ||
| import { inject, ChangeDetectorRef, ElementRef, ChangeDetectionStrategy, Component, HostBinding, Input, ViewChild, ContentChildren, NgModule } from '@angular/core'; | ||
| import { Subject, fromEvent } from 'rxjs'; | ||
| import { debounceTime, takeUntil, startWith } from 'rxjs/operators'; | ||
| import * as i2$1 from '@angular/material/menu'; | ||
| import { MatMenuModule, MatMenuTrigger } from '@angular/material/menu'; | ||
| import * as i3 from '@angular/material/button'; | ||
| import { MatButtonModule } from '@angular/material/button'; | ||
| import * as i4 from '@angular/material/icon'; | ||
| import { MatIcon, MatIconModule } from '@angular/material/icon'; | ||
| import * as i1 from '@angular/common'; | ||
| import { CommonModule } from '@angular/common'; | ||
| import { MatIcon } from '@angular/material/icon'; | ||
| import * as i2 from '@angular/material/tooltip'; | ||
| import { MatTooltipModule } from '@angular/material/tooltip'; | ||
| const _c0$1 = ["*"]; | ||
| function TdBreadcrumbComponent_mat_icon_1_Template(rf, ctx) { if (rf & 1) { | ||
| function TdBreadcrumbComponent_mat_icon_2_Template(rf, ctx) { if (rf & 1) { | ||
| const _r1 = i0.ɵɵgetCurrentView(); | ||
| i0.ɵɵelementStart(0, "mat-icon", 1); | ||
| i0.ɵɵlistener("click", function TdBreadcrumbComponent_mat_icon_1_Template_mat_icon_click_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1._handleIconClick($event)); }); | ||
| i0.ɵɵelementStart(0, "mat-icon", 2); | ||
| i0.ɵɵlistener("click", function TdBreadcrumbComponent_mat_icon_2_Template_mat_icon_click_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1._handleIconClick($event)); }); | ||
| i0.ɵɵtext(1); | ||
@@ -23,4 +30,3 @@ i0.ɵɵelementEnd(); | ||
| class TdBreadcrumbComponent { | ||
| _elementRef; | ||
| _changeDetectorRef; | ||
| _changeDetectorRef = inject(ChangeDetectorRef); | ||
| _displayCrumb = true; | ||
@@ -30,2 +36,11 @@ _width = 0; | ||
| _separatorIcon = 'chevron_right'; | ||
| _shouldTruncate = false; | ||
| _maxWidth; | ||
| elementRef = inject(ElementRef); | ||
| fullText = ''; | ||
| flexOrder = 0; | ||
| isCurrentPage = false; | ||
| get ariaCurrent() { | ||
| return this.isCurrentPage ? 'page' : null; | ||
| } | ||
| matButtonClass = true; | ||
@@ -53,2 +68,20 @@ tdBreadCrumbClass = true; | ||
| } | ||
| get shouldTruncate() { | ||
| return this._shouldTruncate; | ||
| } | ||
| set shouldTruncate(shouldTruncate) { | ||
| this._shouldTruncate = shouldTruncate; | ||
| setTimeout(() => { | ||
| this._changeDetectorRef.markForCheck(); | ||
| }); | ||
| } | ||
| get maxWidth() { | ||
| return this._maxWidth; | ||
| } | ||
| set maxWidth(maxWidth) { | ||
| this._maxWidth = maxWidth; | ||
| setTimeout(() => { | ||
| this._changeDetectorRef.markForCheck(); | ||
| }); | ||
| } | ||
| get displayCrumb() { | ||
@@ -80,10 +113,16 @@ return this._displayCrumb; | ||
| } | ||
| constructor(_elementRef, _changeDetectorRef) { | ||
| this._elementRef = _elementRef; | ||
| this._changeDetectorRef = _changeDetectorRef; | ||
| get maxWidthBinding() { | ||
| return this._shouldTruncate ? this._maxWidth : undefined; | ||
| } | ||
| get orderBinding() { | ||
| return this.flexOrder; | ||
| } | ||
| ngAfterViewInit() { | ||
| // set the width from the actual rendered DOM element | ||
| setTimeout(() => { | ||
| this._width = (this._elementRef.nativeElement).getBoundingClientRect().width; | ||
| this._width = (this.elementRef.nativeElement).getBoundingClientRect().width; | ||
| const textSpan = this.elementRef.nativeElement.querySelector('.td-breadcrumb-text'); | ||
| if (textSpan) { | ||
| this.fullText = textSpan.textContent?.trim() || ''; | ||
| } | ||
| this._changeDetectorRef.markForCheck(); | ||
@@ -99,20 +138,29 @@ }); | ||
| } | ||
| static ɵfac = function TdBreadcrumbComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TdBreadcrumbComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; | ||
| static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TdBreadcrumbComponent, selectors: [["td-breadcrumb"], ["a", "td-breadcrumb", ""]], hostVars: 6, hostBindings: function TdBreadcrumbComponent_HostBindings(rf, ctx) { if (rf & 2) { | ||
| i0.ɵɵstyleProp("display", ctx.displayBinding); | ||
| static ɵfac = function TdBreadcrumbComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TdBreadcrumbComponent)(); }; | ||
| static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TdBreadcrumbComponent, selectors: [["td-breadcrumb"], ["a", "td-breadcrumb", ""]], hostVars: 11, hostBindings: function TdBreadcrumbComponent_HostBindings(rf, ctx) { if (rf & 2) { | ||
| i0.ɵɵattribute("aria-current", ctx.ariaCurrent); | ||
| i0.ɵɵstyleProp("display", ctx.displayBinding)("max-width", ctx.maxWidthBinding, "px")("order", ctx.orderBinding); | ||
| i0.ɵɵclassProp("mdc-button", ctx.matButtonClass)("td-breadcrumb", ctx.tdBreadCrumbClass); | ||
| } }, ngContentSelectors: _c0$1, decls: 2, vars: 1, consts: [["class", "td-breadcrumb-separator-icon", 3, "cursor", "click", 4, "ngIf"], [1, "td-breadcrumb-separator-icon", 3, "click"]], template: function TdBreadcrumbComponent_Template(rf, ctx) { if (rf & 1) { | ||
| } }, ngContentSelectors: _c0$1, decls: 3, vars: 6, consts: [[1, "td-breadcrumb-text", 3, "matTooltip", "matTooltipDisabled"], ["class", "td-breadcrumb-separator-icon", 3, "cursor", "click", 4, "ngIf"], [1, "td-breadcrumb-separator-icon", 3, "click"]], template: function TdBreadcrumbComponent_Template(rf, ctx) { if (rf & 1) { | ||
| i0.ɵɵprojectionDef(); | ||
| i0.ɵɵprojection(0); | ||
| i0.ɵɵtemplate(1, TdBreadcrumbComponent_mat_icon_1_Template, 2, 3, "mat-icon", 0); | ||
| i0.ɵɵelementStart(0, "span", 0); | ||
| i0.ɵɵprojection(1); | ||
| i0.ɵɵelementEnd(); | ||
| i0.ɵɵtemplate(2, TdBreadcrumbComponent_mat_icon_2_Template, 2, 3, "mat-icon", 1); | ||
| } if (rf & 2) { | ||
| i0.ɵɵadvance(); | ||
| i0.ɵɵclassProp("td-breadcrumb-truncated", ctx.shouldTruncate); | ||
| i0.ɵɵproperty("matTooltip", ctx.shouldTruncate ? ctx.fullText : "")("matTooltipDisabled", !ctx.shouldTruncate); | ||
| i0.ɵɵattribute("aria-label", ctx.shouldTruncate ? ctx.fullText : ""); | ||
| i0.ɵɵadvance(2); | ||
| i0.ɵɵproperty("ngIf", ctx.displayIcon); | ||
| } }, dependencies: [CommonModule, i1.NgIf, MatIcon], styles: [".td-breadcrumb[_nghost-%COMP%]{display:inline-flex;box-sizing:border-box;flex-direction:row;align-items:center;align-content:center;flex-shrink:0;justify-content:flex-end}.td-breadcrumb[_nghost-%COMP%] >*{margin:0 10px}[_nghost-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}.mdc-button[_nghost-%COMP%]{min-width:0;padding:0}"], changeDetection: 0 }); | ||
| } }, dependencies: [CommonModule, i1.NgIf, MatIcon, MatTooltipModule, i2.MatTooltip], styles: [".td-breadcrumb[_nghost-%COMP%]{display:inline-flex;box-sizing:border-box;flex-direction:row;align-items:center;align-content:center;flex-shrink:0;justify-content:flex-end;max-width:100%}.td-breadcrumb[_nghost-%COMP%] >*{margin:0 10px}[_nghost-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}.mdc-button[_nghost-%COMP%]{min-width:0;padding:0}.td-breadcrumb-text[_ngcontent-%COMP%]{margin:0;padding:0;flex:1 1 auto;min-width:0}.td-breadcrumb-text.td-breadcrumb-truncated[_ngcontent-%COMP%]{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}mat-icon.td-breadcrumb-separator-icon[_ngcontent-%COMP%]{flex-shrink:0}"], changeDetection: 0 }); | ||
| } | ||
| (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TdBreadcrumbComponent, [{ | ||
| type: Component, | ||
| args: [{ selector: 'td-breadcrumb, a[td-breadcrumb]', imports: [CommonModule, MatIcon], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n<mat-icon\n *ngIf=\"displayIcon\"\n class=\"td-breadcrumb-separator-icon\"\n [style.cursor]=\"'default'\"\n (click)=\"_handleIconClick($event)\"\n >{{ separatorIcon }}</mat-icon\n>\n", styles: [":host.td-breadcrumb{display:inline-flex;box-sizing:border-box;flex-direction:row;align-items:center;align-content:center;flex-shrink:0;justify-content:flex-end}:host.td-breadcrumb ::ng-deep>*{margin:0 10px}:host mat-icon{font-size:16px;width:16px;height:16px}:host.mdc-button{min-width:0;padding:0}\n"] }] | ||
| }], () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], { matButtonClass: [{ | ||
| args: [{ selector: 'td-breadcrumb, a[td-breadcrumb]', standalone: true, imports: [CommonModule, MatIcon, MatTooltipModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span\n class=\"td-breadcrumb-text\"\n [class.td-breadcrumb-truncated]=\"shouldTruncate\"\n [matTooltip]=\"shouldTruncate ? fullText : ''\"\n [matTooltipDisabled]=\"!shouldTruncate\"\n [attr.aria-label]=\"shouldTruncate ? fullText : ''\"\n>\n <ng-content></ng-content>\n</span>\n<mat-icon\n *ngIf=\"displayIcon\"\n class=\"td-breadcrumb-separator-icon\"\n [style.cursor]=\"'default'\"\n (click)=\"_handleIconClick($event)\"\n >{{ separatorIcon }}</mat-icon\n>\n", styles: [":host.td-breadcrumb{display:inline-flex;box-sizing:border-box;flex-direction:row;align-items:center;align-content:center;flex-shrink:0;justify-content:flex-end;max-width:100%}:host.td-breadcrumb ::ng-deep>*{margin:0 10px}:host mat-icon{font-size:16px;width:16px;height:16px}:host.mdc-button{min-width:0;padding:0}.td-breadcrumb-text{margin:0;padding:0;flex:1 1 auto;min-width:0}.td-breadcrumb-text.td-breadcrumb-truncated{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}mat-icon.td-breadcrumb-separator-icon{flex-shrink:0}\n"] }] | ||
| }], null, { ariaCurrent: [{ | ||
| type: HostBinding, | ||
| args: ['attr.aria-current'] | ||
| }], matButtonClass: [{ | ||
| type: HostBinding, | ||
| args: ['class.mdc-button'] | ||
@@ -125,13 +173,61 @@ }], tdBreadCrumbClass: [{ | ||
| args: ['style.display'] | ||
| }], maxWidthBinding: [{ | ||
| type: HostBinding, | ||
| args: ['style.max-width.px'] | ||
| }], orderBinding: [{ | ||
| type: HostBinding, | ||
| args: ['style.order'] | ||
| }] }); })(); | ||
| (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TdBreadcrumbComponent, { className: "TdBreadcrumbComponent", filePath: "breadcrumb/breadcrumb.component.ts", lineNumber: 19 }); })(); | ||
| (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TdBreadcrumbComponent, { className: "TdBreadcrumbComponent", filePath: "breadcrumb/breadcrumb.component.ts", lineNumber: 22 }); })(); | ||
| const _c0 = ["*"]; | ||
| function TdBreadcrumbsComponent_button_1_Template(rf, ctx) { if (rf & 1) { | ||
| i0.ɵɵelementStart(0, "button", 5)(1, "mat-icon"); | ||
| i0.ɵɵtext(2, "more_horiz"); | ||
| i0.ɵɵelementEnd()(); | ||
| } if (rf & 2) { | ||
| const ctx_r0 = i0.ɵɵnextContext(); | ||
| const overflowMenu_r2 = i0.ɵɵreference(4); | ||
| i0.ɵɵstyleProp("order", ctx_r0.overflowButtonOrder); | ||
| i0.ɵɵproperty("matMenuTriggerFor", overflowMenu_r2); | ||
| i0.ɵɵattribute("aria-label", ctx_r0.overflowButtonAriaLabel)("data-test-id", "breadcrumb-overflow-button"); | ||
| } } | ||
| function TdBreadcrumbsComponent_mat_icon_2_Template(rf, ctx) { if (rf & 1) { | ||
| i0.ɵɵelementStart(0, "mat-icon", 6); | ||
| i0.ɵɵtext(1); | ||
| i0.ɵɵelementEnd(); | ||
| } if (rf & 2) { | ||
| const ctx_r0 = i0.ɵɵnextContext(); | ||
| i0.ɵɵstyleProp("order", ctx_r0.overflowButtonOrder); | ||
| i0.ɵɵadvance(); | ||
| i0.ɵɵtextInterpolate1(" ", ctx_r0.separatorIcon, "\n"); | ||
| } } | ||
| function TdBreadcrumbsComponent_button_5_Template(rf, ctx) { if (rf & 1) { | ||
| const _r3 = i0.ɵɵgetCurrentView(); | ||
| i0.ɵɵelementStart(0, "button", 7); | ||
| i0.ɵɵlistener("click", function TdBreadcrumbsComponent_button_5_Template_button_click_0_listener() { const item_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.handleOverflowItemClick(item_r4)); }); | ||
| i0.ɵɵtext(1); | ||
| i0.ɵɵelementEnd(); | ||
| } if (rf & 2) { | ||
| const item_r4 = ctx.$implicit; | ||
| const ctx_r0 = i0.ɵɵnextContext(); | ||
| i0.ɵɵattribute("data-test-id", "breadcrumb-overflow-menu-item-" + ctx_r0.getItemText(item_r4))("aria-label", "Navigate to " + ctx_r0.getItemText(item_r4)); | ||
| i0.ɵɵadvance(); | ||
| i0.ɵɵtextInterpolate1(" ", ctx_r0.getItemText(item_r4), " "); | ||
| } } | ||
| class TdBreadcrumbsComponent { | ||
| _elementRef; | ||
| _changeDetectorRef; | ||
| _elementRef = inject(ElementRef); | ||
| _changeDetectorRef = inject(ChangeDetectorRef); | ||
| _resizing = false; | ||
| _separatorIcon = 'chevron_right'; | ||
| _destroy$ = new Subject(); | ||
| /** | ||
| * Maximum width ratio for the last breadcrumb when truncation is needed. | ||
| * Set to 35% of available width to ensure last breadcrumb doesn't dominate the space | ||
| * while still being readable. | ||
| */ | ||
| LAST_BREADCRUMB_MAX_WIDTH_RATIO = 0.35; | ||
| tdBreadCrumbsClass = true; | ||
| role = 'navigation'; | ||
| ariaLabel = 'Breadcrumb'; | ||
| // all the sub components, which are the individual breadcrumbs | ||
@@ -141,2 +237,6 @@ _breadcrumbs; | ||
| hiddenBreadcrumbs = []; | ||
| overflowMenuItems = []; | ||
| showOverflowButton = false; | ||
| overflowButtonOrder = 50; | ||
| overflowMenuTrigger; | ||
| /** | ||
@@ -152,6 +252,23 @@ * Sets the icon url shown between breadcrumbs. Defaults to 'chevron_right'. | ||
| } | ||
| constructor(_elementRef, _changeDetectorRef) { | ||
| this._elementRef = _elementRef; | ||
| this._changeDetectorRef = _changeDetectorRef; | ||
| size; | ||
| get fontFamily() { | ||
| return this.size | ||
| ? `var(--cv-typography-${this.size}-font-family)` | ||
| : undefined; | ||
| } | ||
| get fontSize() { | ||
| return this.size | ||
| ? `var(--cv-typography-${this.size}-font-size)` | ||
| : undefined; | ||
| } | ||
| get fontWeight() { | ||
| return this.size | ||
| ? `var(--cv-typography-${this.size}-font-weight)` | ||
| : undefined; | ||
| } | ||
| get lineHeight() { | ||
| return this.size | ||
| ? `var(--cv-typography-${this.size}-line-height)` | ||
| : undefined; | ||
| } | ||
| ngOnInit() { | ||
@@ -179,4 +296,6 @@ fromEvent(window, 'resize') | ||
| this._waitToCalculateVisibility(); | ||
| this.setCrumbIcons(); | ||
| this._changeDetectorRef.markForCheck(); | ||
| setTimeout(() => { | ||
| this.setCrumbIcons(); | ||
| this._changeDetectorRef.markForCheck(); | ||
| }); | ||
| }); | ||
@@ -186,2 +305,3 @@ } | ||
| this._destroy$.next(); | ||
| this._destroy$.complete(); | ||
| } | ||
@@ -215,2 +335,15 @@ /* | ||
| } | ||
| get overflowButtonAriaLabel() { | ||
| const count = this.hiddenBreadcrumbs.length; | ||
| return `Show ${count} hidden breadcrumb${count > 1 ? 's' : ''}`; | ||
| } | ||
| handleOverflowItemClick(item) { | ||
| const nativeElement = item.elementRef?.nativeElement; | ||
| if (nativeElement) { | ||
| nativeElement.click(); | ||
| } | ||
| } | ||
| getItemText(item) { | ||
| return item.fullText || ''; | ||
| } | ||
| /** | ||
@@ -222,6 +355,9 @@ * Set the crumb icon separators | ||
| const breadcrumbArray = this._breadcrumbs.toArray(); | ||
| breadcrumbArray.forEach((breadcrumb, index) => { | ||
| breadcrumb.separatorIcon = this.separatorIcon; | ||
| // don't show the icon on the last breadcrumb | ||
| breadcrumb.displayIcon = index < breadcrumbArray.length - 1; | ||
| setTimeout(() => { | ||
| breadcrumbArray.forEach((breadcrumb, index) => { | ||
| breadcrumb.separatorIcon = this.separatorIcon; | ||
| breadcrumb.displayIcon = true; | ||
| breadcrumb.isCurrentPage = index === breadcrumbArray.length - 1; | ||
| }); | ||
| this._changeDetectorRef.markForCheck(); | ||
| }); | ||
@@ -232,20 +368,100 @@ } | ||
| const crumbsArray = this._breadcrumbs.toArray(); | ||
| let crumbWidthSum = 0; | ||
| const hiddenCrumbs = []; | ||
| // loop through crumbs in reverse order to calculate which ones should be removed | ||
| for (let i = crumbsArray.length - 1; i >= 0; i--) { | ||
| const totalBreadcrumbs = crumbsArray.length; | ||
| // Reset all orders when there are 2 or fewer breadcrumbs | ||
| if (totalBreadcrumbs <= 2) { | ||
| crumbsArray.forEach((breadcrumb) => { | ||
| breadcrumb.displayCrumb = true; | ||
| breadcrumb.shouldTruncate = false; | ||
| breadcrumb.maxWidth = undefined; | ||
| breadcrumb.flexOrder = 0; // Default order | ||
| }); | ||
| this.showOverflowButton = false; | ||
| this.overflowMenuItems = []; | ||
| this.hiddenBreadcrumbs = []; | ||
| this._changeDetectorRef.markForCheck(); | ||
| return; | ||
| } | ||
| const firstCrumb = crumbsArray[0]; | ||
| const lastCrumb = crumbsArray[totalBreadcrumbs - 1]; | ||
| const containerWidth = this.nativeElementWidth; | ||
| const totalRequiredWidth = crumbsArray.reduce((sum, crumb) => sum + crumb.width, 0); | ||
| if (totalRequiredWidth <= containerWidth) { | ||
| crumbsArray.forEach((breadcrumb, index) => { | ||
| breadcrumb.displayCrumb = true; | ||
| breadcrumb.shouldTruncate = false; | ||
| breadcrumb.maxWidth = undefined; | ||
| breadcrumb.flexOrder = | ||
| index === 0 | ||
| ? 0 | ||
| : index === totalBreadcrumbs - 1 | ||
| ? 1000 | ||
| : index * 10; // Assign orders based on index for middle crumbs | ||
| }); | ||
| this.showOverflowButton = false; | ||
| this.overflowMenuItems = []; | ||
| this.hiddenBreadcrumbs = []; | ||
| this._changeDetectorRef.markForCheck(); | ||
| return; | ||
| } | ||
| const overflowButtonWidth = 48; | ||
| const availableWidth = containerWidth - overflowButtonWidth; | ||
| const visibleMiddleCrumbs = []; | ||
| let requiredWidth = firstCrumb.width + lastCrumb.width; | ||
| // Try to fit breadcrumbs from right to left (favoring more recent items) | ||
| for (let i = totalBreadcrumbs - 2; i >= 1; i--) { | ||
| const breadcrumb = crumbsArray[i]; | ||
| // if crumb exceeds width, then we skip it from the sum and add it into the hiddencrumbs array | ||
| // and hide it | ||
| if (crumbWidthSum + breadcrumb.width > this.nativeElementWidth) { | ||
| breadcrumb.displayCrumb = false; | ||
| hiddenCrumbs.push(breadcrumb); | ||
| if (requiredWidth + breadcrumb.width <= availableWidth) { | ||
| requiredWidth += breadcrumb.width; | ||
| visibleMiddleCrumbs.unshift(i); | ||
| } | ||
| else { | ||
| // else we show it | ||
| } | ||
| // Apply visibility and flexbox orders | ||
| const hiddenBreadcrumbs = []; | ||
| let currentOrder = 10; // Start orders at 10 for middle breadcrumbs | ||
| crumbsArray.forEach((breadcrumb, index) => { | ||
| if (index === 0) { | ||
| // First breadcrumb - always visible, always first | ||
| breadcrumb.displayCrumb = true; | ||
| breadcrumb.shouldTruncate = false; | ||
| breadcrumb.maxWidth = undefined; | ||
| breadcrumb.flexOrder = 0; | ||
| } | ||
| crumbWidthSum += breadcrumb.width; | ||
| else if (index === totalBreadcrumbs - 1) { | ||
| // Last breadcrumb - always visible, always last | ||
| breadcrumb.displayCrumb = true; | ||
| breadcrumb.shouldTruncate = false; | ||
| breadcrumb.flexOrder = 1000; | ||
| } | ||
| else if (visibleMiddleCrumbs.includes(index)) { | ||
| // Visible middle breadcrumbs - assign incremental orders | ||
| breadcrumb.displayCrumb = true; | ||
| breadcrumb.shouldTruncate = false; | ||
| breadcrumb.maxWidth = undefined; | ||
| breadcrumb.flexOrder = currentOrder; | ||
| currentOrder += 10; | ||
| } | ||
| else { | ||
| // Hidden breadcrumbs | ||
| breadcrumb.displayCrumb = false; | ||
| breadcrumb.shouldTruncate = false; | ||
| breadcrumb.maxWidth = undefined; | ||
| breadcrumb.flexOrder = 0; // Doesn't matter, it's hidden | ||
| hiddenBreadcrumbs.push(breadcrumb); | ||
| } | ||
| }); | ||
| // Overflow button order comes after visible middle breadcrumbs | ||
| this.overflowButtonOrder = currentOrder; | ||
| // Truncate last breadcrumb if too long | ||
| const lastBreadcrumbMaxWidth = availableWidth * this.LAST_BREADCRUMB_MAX_WIDTH_RATIO; | ||
| if (lastCrumb.width > lastBreadcrumbMaxWidth) { | ||
| lastCrumb.shouldTruncate = true; | ||
| lastCrumb.maxWidth = lastBreadcrumbMaxWidth; | ||
| } | ||
| this.hiddenBreadcrumbs = hiddenCrumbs; | ||
| else { | ||
| // Ensure maxWidth is reset if last breadcrumb doesn't need truncation | ||
| lastCrumb.maxWidth = undefined; | ||
| } | ||
| this.showOverflowButton = hiddenBreadcrumbs.length > 0; | ||
| this.overflowMenuItems = hiddenBreadcrumbs; | ||
| this.hiddenBreadcrumbs = hiddenBreadcrumbs; | ||
| this._changeDetectorRef.markForCheck(); | ||
@@ -258,3 +474,3 @@ } | ||
| } | ||
| static ɵfac = function TdBreadcrumbsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TdBreadcrumbsComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; | ||
| static ɵfac = function TdBreadcrumbsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TdBreadcrumbsComponent)(); }; | ||
| static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TdBreadcrumbsComponent, selectors: [["td-breadcrumbs"]], contentQueries: function TdBreadcrumbsComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) { | ||
@@ -265,22 +481,63 @@ i0.ɵɵcontentQuery(dirIndex, TdBreadcrumbComponent, 5); | ||
| i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._breadcrumbs = _t); | ||
| } }, hostVars: 2, hostBindings: function TdBreadcrumbsComponent_HostBindings(rf, ctx) { if (rf & 2) { | ||
| } }, viewQuery: function TdBreadcrumbsComponent_Query(rf, ctx) { if (rf & 1) { | ||
| i0.ɵɵviewQuery(MatMenuTrigger, 5); | ||
| } if (rf & 2) { | ||
| let _t; | ||
| i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.overflowMenuTrigger = _t.first); | ||
| } }, hostVars: 12, hostBindings: function TdBreadcrumbsComponent_HostBindings(rf, ctx) { if (rf & 2) { | ||
| i0.ɵɵattribute("role", ctx.role)("aria-label", ctx.ariaLabel); | ||
| i0.ɵɵstyleProp("font-family", ctx.fontFamily)("font-size", ctx.fontSize)("font-weight", ctx.fontWeight)("line-height", ctx.lineHeight); | ||
| i0.ɵɵclassProp("td-breadcrumbs", ctx.tdBreadCrumbsClass); | ||
| } }, inputs: { separatorIcon: "separatorIcon" }, ngContentSelectors: _c0, decls: 1, vars: 0, template: function TdBreadcrumbsComponent_Template(rf, ctx) { if (rf & 1) { | ||
| } }, inputs: { separatorIcon: "separatorIcon", size: "size" }, ngContentSelectors: _c0, decls: 6, vars: 3, consts: [["overflowMenu", "matMenu"], ["mat-icon-button", "", "class", "td-breadcrumbs-overflow-button", 3, "matMenuTriggerFor", "order", 4, "ngIf"], ["class", "td-breadcrumb-separator-icon", "color", "primary", "aria-hidden", "true", 3, "order", 4, "ngIf"], [1, "td-breadcrumb-overflow-menu"], ["mat-menu-item", "", 3, "click", 4, "ngFor", "ngForOf"], ["mat-icon-button", "", 1, "td-breadcrumbs-overflow-button", 3, "matMenuTriggerFor"], ["color", "primary", "aria-hidden", "true", 1, "td-breadcrumb-separator-icon"], ["mat-menu-item", "", 3, "click"]], template: function TdBreadcrumbsComponent_Template(rf, ctx) { if (rf & 1) { | ||
| i0.ɵɵprojectionDef(); | ||
| i0.ɵɵprojection(0); | ||
| } }, styles: ["[_nghost-%COMP%]{display:flex;align-items:center}.td-breadcrumbs[_nghost-%COMP%]{white-space:nowrap}"], changeDetection: 0 }); | ||
| i0.ɵɵtemplate(1, TdBreadcrumbsComponent_button_1_Template, 3, 5, "button", 1)(2, TdBreadcrumbsComponent_mat_icon_2_Template, 2, 3, "mat-icon", 2); | ||
| i0.ɵɵelementStart(3, "mat-menu", 3, 0); | ||
| i0.ɵɵtemplate(5, TdBreadcrumbsComponent_button_5_Template, 2, 3, "button", 4); | ||
| i0.ɵɵelementEnd(); | ||
| } if (rf & 2) { | ||
| i0.ɵɵadvance(); | ||
| i0.ɵɵproperty("ngIf", ctx.showOverflowButton); | ||
| i0.ɵɵadvance(); | ||
| i0.ɵɵproperty("ngIf", ctx.showOverflowButton); | ||
| i0.ɵɵadvance(3); | ||
| i0.ɵɵproperty("ngForOf", ctx.overflowMenuItems); | ||
| } }, dependencies: [CommonModule, i1.NgForOf, i1.NgIf, MatMenuModule, i2$1.MatMenu, i2$1.MatMenuItem, i2$1.MatMenuTrigger, MatButtonModule, i3.MatIconButton, MatIconModule, i4.MatIcon], styles: ["[_nghost-%COMP%]{display:flex;align-items:center;flex-wrap:nowrap;overflow:hidden}.td-breadcrumbs[_nghost-%COMP%]{white-space:nowrap}.td-breadcrumbs-overflow-button[_ngcontent-%COMP%]{flex-shrink:0;margin:0 4px}.td-breadcrumbs-overflow-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;height:18px;width:18px}.td-breadcrumbs-overflow-button[_ngcontent-%COMP%] + .td-breadcrumb-separator-icon[_ngcontent-%COMP%]{order:inherit;font-size:16px;width:16px;height:16px;flex-shrink:0;margin:0 10px}.td-breadcrumb-overflow-menu[_ngcontent-%COMP%]{max-width:300px}.td-breadcrumb-overflow-menu[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{max-width:100%}.td-breadcrumb-overflow-menu[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .mat-mdc-menu-item-text{white-space:normal;line-height:1.4}"], changeDetection: 0 }); | ||
| } | ||
| (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TdBreadcrumbsComponent, [{ | ||
| type: Component, | ||
| args: [{ selector: 'td-breadcrumbs', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n", styles: [":host{display:flex;align-items:center}:host.td-breadcrumbs{white-space:nowrap}\n"] }] | ||
| }], () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], { tdBreadCrumbsClass: [{ | ||
| args: [{ selector: 'td-breadcrumbs', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, MatMenuModule, MatButtonModule, MatIconModule], template: "<ng-content></ng-content>\n\n<button\n *ngIf=\"showOverflowButton\"\n mat-icon-button\n [matMenuTriggerFor]=\"overflowMenu\"\n [attr.aria-label]=\"overflowButtonAriaLabel\"\n [style.order]=\"overflowButtonOrder\"\n class=\"td-breadcrumbs-overflow-button\"\n [attr.data-test-id]=\"'breadcrumb-overflow-button'\"\n>\n <mat-icon>more_horiz</mat-icon>\n</button>\n<mat-icon\n *ngIf=\"showOverflowButton\"\n class=\"td-breadcrumb-separator-icon\"\n [style.order]=\"overflowButtonOrder\"\n color=\"primary\"\n aria-hidden=\"true\"\n>\n {{ separatorIcon }}\n</mat-icon>\n\n<mat-menu #overflowMenu=\"matMenu\" class=\"td-breadcrumb-overflow-menu\">\n <button\n *ngFor=\"let item of overflowMenuItems\"\n mat-menu-item\n (click)=\"handleOverflowItemClick(item)\"\n [attr.data-test-id]=\"'breadcrumb-overflow-menu-item-' + getItemText(item)\"\n [attr.aria-label]=\"'Navigate to ' + getItemText(item)\"\n >\n {{ getItemText(item) }}\n </button>\n</mat-menu>\n", styles: [":host{display:flex;align-items:center;flex-wrap:nowrap;overflow:hidden}:host.td-breadcrumbs{white-space:nowrap}.td-breadcrumbs-overflow-button{flex-shrink:0;margin:0 4px}.td-breadcrumbs-overflow-button mat-icon{font-size:18px;height:18px;width:18px}.td-breadcrumbs-overflow-button+.td-breadcrumb-separator-icon{order:inherit;font-size:16px;width:16px;height:16px;flex-shrink:0;margin:0 10px}.td-breadcrumb-overflow-menu{max-width:300px}.td-breadcrumb-overflow-menu button{max-width:100%}.td-breadcrumb-overflow-menu button ::ng-deep .mat-mdc-menu-item-text{white-space:normal;line-height:1.4}\n"] }] | ||
| }], null, { tdBreadCrumbsClass: [{ | ||
| type: HostBinding, | ||
| args: ['class.td-breadcrumbs'] | ||
| }], role: [{ | ||
| type: HostBinding, | ||
| args: ['attr.role'] | ||
| }], ariaLabel: [{ | ||
| type: HostBinding, | ||
| args: ['attr.aria-label'] | ||
| }], _breadcrumbs: [{ | ||
| type: ContentChildren, | ||
| args: [TdBreadcrumbComponent, { descendants: true }] | ||
| }], overflowMenuTrigger: [{ | ||
| type: ViewChild, | ||
| args: [MatMenuTrigger] | ||
| }], separatorIcon: [{ | ||
| type: Input | ||
| }], size: [{ | ||
| type: Input | ||
| }], fontFamily: [{ | ||
| type: HostBinding, | ||
| args: ['style.font-family'] | ||
| }], fontSize: [{ | ||
| type: HostBinding, | ||
| args: ['style.font-size'] | ||
| }], fontWeight: [{ | ||
| type: HostBinding, | ||
| args: ['style.font-weight'] | ||
| }], lineHeight: [{ | ||
| type: HostBinding, | ||
| args: ['style.line-height'] | ||
| }] }); })(); | ||
| (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TdBreadcrumbsComponent, { className: "TdBreadcrumbsComponent", filePath: "breadcrumbs.component.ts", lineNumber: 27 }); })(); | ||
| (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TdBreadcrumbsComponent, { className: "TdBreadcrumbsComponent", filePath: "breadcrumbs.component.ts", lineNumber: 35 }); })(); | ||
@@ -294,3 +551,3 @@ /** | ||
| static ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: CovalentBreadcrumbsModule }); | ||
| static ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [TdBreadcrumbComponent] }); | ||
| static ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [TdBreadcrumbsComponent, TdBreadcrumbComponent] }); | ||
| } | ||
@@ -297,0 +554,0 @@ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CovalentBreadcrumbsModule, [{ |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"covalent-core-breadcrumbs.mjs","sources":["../../../../libs/angular/breadcrumbs/src/breadcrumb/breadcrumb.component.html","../../../../libs/angular/breadcrumbs/src/breadcrumb/breadcrumb.component.ts","../../../../libs/angular/breadcrumbs/src/breadcrumbs.component.ts","../../../../libs/angular/breadcrumbs/src/breadcrumbs.component.html","../../../../libs/angular/breadcrumbs/src/breadcrumbs.module.ts","../../../../libs/angular/breadcrumbs/src/covalent-core-breadcrumbs.ts"],"sourcesContent":["<ng-content></ng-content>\n<mat-icon\n *ngIf=\"displayIcon\"\n class=\"td-breadcrumb-separator-icon\"\n [style.cursor]=\"'default'\"\n (click)=\"_handleIconClick($event)\"\n >{{ separatorIcon }}</mat-icon\n>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n HostBinding,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\n\n@Component({\n selector: 'td-breadcrumb, a[td-breadcrumb]',\n styleUrls: ['./breadcrumb.component.scss'],\n templateUrl: './breadcrumb.component.html',\n imports: [CommonModule, MatIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdBreadcrumbComponent implements AfterViewInit {\n private _displayCrumb = true;\n private _width = 0;\n private _displayIcon = true;\n private _separatorIcon = 'chevron_right';\n\n @HostBinding('class.mdc-button') matButtonClass = true;\n @HostBinding('class.td-breadcrumb') tdBreadCrumbClass = true;\n\n // Sets the icon url shown between breadcrumbs. Defaults to 'chevron_right'\n public get separatorIcon(): string {\n return this._separatorIcon;\n }\n public set separatorIcon(separatorIcon: string) {\n this._separatorIcon = separatorIcon;\n setTimeout(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n\n // Should show the right chevron or not before the label\n public get displayIcon(): boolean {\n return this._displayIcon;\n }\n public set displayIcon(displayIcon: boolean) {\n this._displayIcon = displayIcon;\n setTimeout(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n\n get displayCrumb(): boolean {\n return this._displayCrumb;\n }\n\n /**\n * Whether to display the crumb or not\n */\n set displayCrumb(shouldDisplay: boolean) {\n this._displayCrumb = shouldDisplay;\n setTimeout(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * Width of the DOM element of the crumb\n */\n get width(): number {\n return this._width;\n }\n\n /**\n * Gets the display style of the crumb\n */\n @HostBinding('style.display')\n get displayBinding(): string | undefined {\n // Set the display to none on the component, just in case the end user is hiding\n // and showing them instead of the component doing itself for reasons like responsive\n return this._displayCrumb ? undefined : 'none';\n }\n\n constructor(\n private _elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef\n ) {}\n\n ngAfterViewInit(): void {\n // set the width from the actual rendered DOM element\n setTimeout(() => {\n this._width = (<HTMLElement>(\n this._elementRef.nativeElement\n )).getBoundingClientRect().width;\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * Stop click propagation when clicking on icon\n */\n _handleIconClick(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n }\n}\n","import {\n Component,\n ContentChildren,\n QueryList,\n OnInit,\n OnDestroy,\n ChangeDetectionStrategy,\n AfterContentInit,\n ChangeDetectorRef,\n ElementRef,\n Input,\n HostBinding,\n AfterViewInit,\n} from '@angular/core';\n\nimport { fromEvent, Subject } from 'rxjs';\nimport { debounceTime, startWith, takeUntil } from 'rxjs/operators';\n\nimport { TdBreadcrumbComponent } from './breadcrumb/breadcrumb.component';\n\n@Component({\n selector: 'td-breadcrumbs',\n styleUrls: ['./breadcrumbs.component.scss'],\n templateUrl: './breadcrumbs.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdBreadcrumbsComponent\n implements OnInit, AfterContentInit, AfterViewInit, OnDestroy\n{\n private _resizing = false;\n private _separatorIcon = 'chevron_right';\n private _destroy$ = new Subject<void>();\n\n @HostBinding('class.td-breadcrumbs') tdBreadCrumbsClass = true;\n\n // all the sub components, which are the individual breadcrumbs\n @ContentChildren(TdBreadcrumbComponent, { descendants: true })\n _breadcrumbs!: QueryList<TdBreadcrumbComponent>;\n // the list of hidden breadcrumbs not shown right now (responsive)\n hiddenBreadcrumbs: TdBreadcrumbComponent[] = [];\n\n /**\n * Sets the icon url shown between breadcrumbs. Defaults to 'chevron_right'.\n */\n @Input() public set separatorIcon(separatorIcon: string) {\n this._separatorIcon = separatorIcon;\n this.setCrumbIcons();\n }\n public get separatorIcon(): string {\n return this._separatorIcon;\n }\n\n constructor(\n private _elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n fromEvent(window, 'resize')\n .pipe(debounceTime(10), takeUntil(this._destroy$))\n .subscribe(() => {\n if (!this._resizing) {\n this._resizing = true;\n setTimeout(() => {\n this._calculateVisibility();\n this._resizing = false;\n this._changeDetectorRef.markForCheck();\n }, 100);\n }\n });\n }\n\n ngAfterViewInit(): void {\n this._waitToCalculateVisibility();\n }\n\n ngAfterContentInit(): void {\n this._breadcrumbs.changes\n .pipe(startWith(this._breadcrumbs), takeUntil(this._destroy$))\n .subscribe(() => {\n this._waitToCalculateVisibility();\n this.setCrumbIcons();\n this._changeDetectorRef.markForCheck();\n });\n }\n\n ngOnDestroy(): void {\n this._destroy$.next();\n }\n\n /*\n * Current width of the element container\n */\n get nativeElementWidth(): number {\n const element: HTMLElement = <HTMLElement>this._elementRef.nativeElement;\n // Need to take into account border, margin and padding that might be around all the crumbs\n const style: CSSStyleDeclaration = window.getComputedStyle(element);\n const borderLeft: number = parseInt(style.borderLeft, 10);\n const borderRight: number = parseInt(style.borderRight, 10);\n const marginLeft: number = parseInt(style.marginLeft, 10);\n const marginRight: number = parseInt(style.marginRight, 10);\n const paddingLeft: number = parseInt(style.paddingLeft, 10);\n const paddingRight: number = parseInt(style.paddingRight, 10);\n\n return (\n element.getBoundingClientRect().width -\n borderLeft -\n borderRight -\n marginLeft -\n marginRight -\n paddingLeft -\n paddingRight\n );\n }\n\n /**\n * The total count of individual breadcrumbs\n */\n get count(): number {\n return this._breadcrumbs ? this._breadcrumbs.length : 0;\n }\n\n /**\n * Set the crumb icon separators\n */\n private setCrumbIcons(): void {\n if (this._breadcrumbs) {\n const breadcrumbArray: TdBreadcrumbComponent[] =\n this._breadcrumbs.toArray();\n breadcrumbArray.forEach(\n (breadcrumb: TdBreadcrumbComponent, index: number) => {\n breadcrumb.separatorIcon = this.separatorIcon;\n // don't show the icon on the last breadcrumb\n breadcrumb.displayIcon = index < breadcrumbArray.length - 1;\n }\n );\n }\n }\n\n private _calculateVisibility(): void {\n const crumbsArray: TdBreadcrumbComponent[] = this._breadcrumbs.toArray();\n let crumbWidthSum = 0;\n const hiddenCrumbs: TdBreadcrumbComponent[] = [];\n // loop through crumbs in reverse order to calculate which ones should be removed\n for (let i: number = crumbsArray.length - 1; i >= 0; i--) {\n const breadcrumb: TdBreadcrumbComponent = crumbsArray[i];\n\n // if crumb exceeds width, then we skip it from the sum and add it into the hiddencrumbs array\n // and hide it\n if (crumbWidthSum + breadcrumb.width > this.nativeElementWidth) {\n breadcrumb.displayCrumb = false;\n hiddenCrumbs.push(breadcrumb);\n } else {\n // else we show it\n breadcrumb.displayCrumb = true;\n }\n crumbWidthSum += breadcrumb.width;\n }\n\n this.hiddenBreadcrumbs = hiddenCrumbs;\n this._changeDetectorRef.markForCheck();\n }\n\n private _waitToCalculateVisibility(): void {\n setTimeout(() => {\n this._calculateVisibility();\n });\n }\n}\n","<ng-content></ng-content>\n","import { NgModule } from '@angular/core';\nimport { TdBreadcrumbsComponent } from './breadcrumbs.component';\nimport { TdBreadcrumbComponent } from './breadcrumb/breadcrumb.component';\n\n/**\n * @deprecated This module is deprecated and will be removed in future versions.\n * Please migrate to using standalone components as soon as possible.\n */\n@NgModule({\n imports: [TdBreadcrumbsComponent, TdBreadcrumbComponent],\n exports: [TdBreadcrumbsComponent, TdBreadcrumbComponent],\n})\nexport class CovalentBreadcrumbsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"covalent-core-breadcrumbs.mjs","sources":["../../../../libs/angular/breadcrumbs/src/breadcrumb/breadcrumb.component.html","../../../../libs/angular/breadcrumbs/src/breadcrumb/breadcrumb.component.ts","../../../../libs/angular/breadcrumbs/src/breadcrumbs.component.html","../../../../libs/angular/breadcrumbs/src/breadcrumbs.component.ts","../../../../libs/angular/breadcrumbs/src/breadcrumbs.module.ts","../../../../libs/angular/breadcrumbs/src/covalent-core-breadcrumbs.ts"],"sourcesContent":["<span\n class=\"td-breadcrumb-text\"\n [class.td-breadcrumb-truncated]=\"shouldTruncate\"\n [matTooltip]=\"shouldTruncate ? fullText : ''\"\n [matTooltipDisabled]=\"!shouldTruncate\"\n [attr.aria-label]=\"shouldTruncate ? fullText : ''\"\n>\n <ng-content></ng-content>\n</span>\n<mat-icon\n *ngIf=\"displayIcon\"\n class=\"td-breadcrumb-separator-icon\"\n [style.cursor]=\"'default'\"\n (click)=\"_handleIconClick($event)\"\n >{{ separatorIcon }}</mat-icon\n>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n HostBinding,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n inject,\n} from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@Component({\n selector: 'td-breadcrumb, a[td-breadcrumb]',\n styleUrls: ['./breadcrumb.component.scss'],\n templateUrl: './breadcrumb.component.html',\n standalone: true,\n imports: [CommonModule, MatIcon, MatTooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdBreadcrumbComponent implements AfterViewInit {\n private _changeDetectorRef = inject(ChangeDetectorRef);\n\n private _displayCrumb = true;\n private _width = 0;\n private _displayIcon = true;\n private _separatorIcon = 'chevron_right';\n private _shouldTruncate = false;\n private _maxWidth?: number;\n\n public elementRef = inject(ElementRef);\n public fullText = '';\n public flexOrder = 0;\n public isCurrentPage = false;\n\n @HostBinding('attr.aria-current')\n get ariaCurrent(): string | null {\n return this.isCurrentPage ? 'page' : null;\n }\n\n @HostBinding('class.mdc-button') matButtonClass = true;\n @HostBinding('class.td-breadcrumb') tdBreadCrumbClass = true;\n\n // Sets the icon url shown between breadcrumbs. Defaults to 'chevron_right'\n public get separatorIcon(): string {\n return this._separatorIcon;\n }\n public set separatorIcon(separatorIcon: string) {\n this._separatorIcon = separatorIcon;\n setTimeout(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n\n // Should show the right chevron or not before the label\n public get displayIcon(): boolean {\n return this._displayIcon;\n }\n public set displayIcon(displayIcon: boolean) {\n this._displayIcon = displayIcon;\n setTimeout(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n\n get shouldTruncate(): boolean {\n return this._shouldTruncate;\n }\n\n set shouldTruncate(shouldTruncate: boolean) {\n this._shouldTruncate = shouldTruncate;\n setTimeout(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n\n get maxWidth(): number | undefined {\n return this._maxWidth;\n }\n\n set maxWidth(maxWidth: number | undefined) {\n this._maxWidth = maxWidth;\n setTimeout(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n\n get displayCrumb(): boolean {\n return this._displayCrumb;\n }\n\n /**\n * Whether to display the crumb or not\n */\n set displayCrumb(shouldDisplay: boolean) {\n this._displayCrumb = shouldDisplay;\n setTimeout(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * Width of the DOM element of the crumb\n */\n get width(): number {\n return this._width;\n }\n\n /**\n * Gets the display style of the crumb\n */\n @HostBinding('style.display')\n get displayBinding(): string | undefined {\n // Set the display to none on the component, just in case the end user is hiding\n // and showing them instead of the component doing itself for reasons like responsive\n return this._displayCrumb ? undefined : 'none';\n }\n\n @HostBinding('style.max-width.px')\n get maxWidthBinding(): number | undefined {\n return this._shouldTruncate ? this._maxWidth : undefined;\n }\n\n @HostBinding('style.order')\n get orderBinding(): number {\n return this.flexOrder;\n }\n\n ngAfterViewInit(): void {\n // set the width from the actual rendered DOM element\n setTimeout(() => {\n this._width = (<HTMLElement>(\n this.elementRef.nativeElement\n )).getBoundingClientRect().width;\n const textSpan = this.elementRef.nativeElement.querySelector(\n '.td-breadcrumb-text',\n );\n if (textSpan) {\n this.fullText = textSpan.textContent?.trim() || '';\n }\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * Stop click propagation when clicking on icon\n */\n _handleIconClick(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n }\n}\n","<ng-content></ng-content>\n\n<button\n *ngIf=\"showOverflowButton\"\n mat-icon-button\n [matMenuTriggerFor]=\"overflowMenu\"\n [attr.aria-label]=\"overflowButtonAriaLabel\"\n [style.order]=\"overflowButtonOrder\"\n class=\"td-breadcrumbs-overflow-button\"\n [attr.data-test-id]=\"'breadcrumb-overflow-button'\"\n>\n <mat-icon>more_horiz</mat-icon>\n</button>\n<mat-icon\n *ngIf=\"showOverflowButton\"\n class=\"td-breadcrumb-separator-icon\"\n [style.order]=\"overflowButtonOrder\"\n color=\"primary\"\n aria-hidden=\"true\"\n>\n {{ separatorIcon }}\n</mat-icon>\n\n<mat-menu #overflowMenu=\"matMenu\" class=\"td-breadcrumb-overflow-menu\">\n <button\n *ngFor=\"let item of overflowMenuItems\"\n mat-menu-item\n (click)=\"handleOverflowItemClick(item)\"\n [attr.data-test-id]=\"'breadcrumb-overflow-menu-item-' + getItemText(item)\"\n [attr.aria-label]=\"'Navigate to ' + getItemText(item)\"\n >\n {{ getItemText(item) }}\n </button>\n</mat-menu>\n","import {\n Component,\n ContentChildren,\n QueryList,\n OnInit,\n OnDestroy,\n ChangeDetectionStrategy,\n AfterContentInit,\n ChangeDetectorRef,\n ElementRef,\n Input,\n HostBinding,\n AfterViewInit,\n ViewChild,\n inject,\n} from '@angular/core';\n\nimport { fromEvent, Subject } from 'rxjs';\nimport { debounceTime, startWith, takeUntil } from 'rxjs/operators';\nimport { MatMenuTrigger, MatMenuModule } from '@angular/material/menu';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CommonModule } from '@angular/common';\n\nimport { TdBreadcrumbComponent } from './breadcrumb/breadcrumb.component';\n\n@Component({\n selector: 'td-breadcrumbs',\n styleUrls: ['./breadcrumbs.component.scss'],\n templateUrl: './breadcrumbs.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, MatMenuModule, MatButtonModule, MatIconModule],\n})\nexport class TdBreadcrumbsComponent\n implements OnInit, AfterContentInit, AfterViewInit, OnDestroy\n{\n private _elementRef = inject(ElementRef);\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _resizing = false;\n private _separatorIcon = 'chevron_right';\n private _destroy$ = new Subject<void>();\n\n /**\n * Maximum width ratio for the last breadcrumb when truncation is needed.\n * Set to 35% of available width to ensure last breadcrumb doesn't dominate the space\n * while still being readable.\n */\n private readonly LAST_BREADCRUMB_MAX_WIDTH_RATIO = 0.35;\n\n @HostBinding('class.td-breadcrumbs') tdBreadCrumbsClass = true;\n @HostBinding('attr.role') role = 'navigation';\n @HostBinding('attr.aria-label') ariaLabel = 'Breadcrumb';\n\n // all the sub components, which are the individual breadcrumbs\n @ContentChildren(TdBreadcrumbComponent, { descendants: true })\n _breadcrumbs!: QueryList<TdBreadcrumbComponent>;\n // the list of hidden breadcrumbs not shown right now (responsive)\n hiddenBreadcrumbs: TdBreadcrumbComponent[] = [];\n overflowMenuItems: TdBreadcrumbComponent[] = [];\n showOverflowButton = false;\n overflowButtonOrder = 50;\n\n @ViewChild(MatMenuTrigger) overflowMenuTrigger?: MatMenuTrigger;\n\n /**\n * Sets the icon url shown between breadcrumbs. Defaults to 'chevron_right'.\n */\n @Input() public set separatorIcon(separatorIcon: string) {\n this._separatorIcon = separatorIcon;\n this.setCrumbIcons();\n }\n public get separatorIcon(): string {\n return this._separatorIcon;\n }\n\n @Input() size?:\n | 'headline1'\n | 'headline2'\n | 'headline3'\n | 'headline4'\n | 'headline5'\n | 'headline6'\n | 'subtitle1'\n | 'subtitle2'\n | 'body1'\n | 'body2'\n | 'button'\n | 'caption';\n\n @HostBinding('style.font-family')\n get fontFamily(): string | undefined {\n return this.size\n ? `var(--cv-typography-${this.size}-font-family)`\n : undefined;\n }\n\n @HostBinding('style.font-size')\n get fontSize(): string | undefined {\n return this.size\n ? `var(--cv-typography-${this.size}-font-size)`\n : undefined;\n }\n\n @HostBinding('style.font-weight')\n get fontWeight(): string | undefined {\n return this.size\n ? `var(--cv-typography-${this.size}-font-weight)`\n : undefined;\n }\n\n @HostBinding('style.line-height')\n get lineHeight(): string | undefined {\n return this.size\n ? `var(--cv-typography-${this.size}-line-height)`\n : undefined;\n }\n\n ngOnInit(): void {\n fromEvent(window, 'resize')\n .pipe(debounceTime(10), takeUntil(this._destroy$))\n .subscribe(() => {\n if (!this._resizing) {\n this._resizing = true;\n setTimeout(() => {\n this._calculateVisibility();\n this._resizing = false;\n this._changeDetectorRef.markForCheck();\n }, 100);\n }\n });\n }\n\n ngAfterViewInit(): void {\n this._waitToCalculateVisibility();\n }\n\n ngAfterContentInit(): void {\n this._breadcrumbs.changes\n .pipe(startWith(this._breadcrumbs), takeUntil(this._destroy$))\n .subscribe(() => {\n this._waitToCalculateVisibility();\n setTimeout(() => {\n this.setCrumbIcons();\n this._changeDetectorRef.markForCheck();\n });\n });\n }\n\n ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n /*\n * Current width of the element container\n */\n get nativeElementWidth(): number {\n const element: HTMLElement = <HTMLElement>this._elementRef.nativeElement;\n // Need to take into account border, margin and padding that might be around all the crumbs\n const style: CSSStyleDeclaration = window.getComputedStyle(element);\n const borderLeft: number = parseInt(style.borderLeft, 10);\n const borderRight: number = parseInt(style.borderRight, 10);\n const marginLeft: number = parseInt(style.marginLeft, 10);\n const marginRight: number = parseInt(style.marginRight, 10);\n const paddingLeft: number = parseInt(style.paddingLeft, 10);\n const paddingRight: number = parseInt(style.paddingRight, 10);\n\n return (\n element.getBoundingClientRect().width -\n borderLeft -\n borderRight -\n marginLeft -\n marginRight -\n paddingLeft -\n paddingRight\n );\n }\n\n /**\n * The total count of individual breadcrumbs\n */\n get count(): number {\n return this._breadcrumbs ? this._breadcrumbs.length : 0;\n }\n\n get overflowButtonAriaLabel(): string {\n const count = this.hiddenBreadcrumbs.length;\n return `Show ${count} hidden breadcrumb${count > 1 ? 's' : ''}`;\n }\n\n handleOverflowItemClick(item: TdBreadcrumbComponent): void {\n const nativeElement = item.elementRef?.nativeElement;\n if (nativeElement) {\n nativeElement.click();\n }\n }\n\n getItemText(item: TdBreadcrumbComponent): string {\n return item.fullText || '';\n }\n\n /**\n * Set the crumb icon separators\n */\n private setCrumbIcons(): void {\n if (this._breadcrumbs) {\n const breadcrumbArray: TdBreadcrumbComponent[] =\n this._breadcrumbs.toArray();\n\n setTimeout(() => {\n breadcrumbArray.forEach(\n (breadcrumb: TdBreadcrumbComponent, index: number) => {\n breadcrumb.separatorIcon = this.separatorIcon;\n breadcrumb.displayIcon = true;\n breadcrumb.isCurrentPage = index === breadcrumbArray.length - 1;\n },\n );\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n\n private _calculateVisibility(): void {\n const crumbsArray: TdBreadcrumbComponent[] = this._breadcrumbs.toArray();\n const totalBreadcrumbs = crumbsArray.length;\n\n // Reset all orders when there are 2 or fewer breadcrumbs\n if (totalBreadcrumbs <= 2) {\n crumbsArray.forEach((breadcrumb: TdBreadcrumbComponent) => {\n breadcrumb.displayCrumb = true;\n breadcrumb.shouldTruncate = false;\n breadcrumb.maxWidth = undefined;\n breadcrumb.flexOrder = 0; // Default order\n });\n this.showOverflowButton = false;\n this.overflowMenuItems = [];\n this.hiddenBreadcrumbs = [];\n this._changeDetectorRef.markForCheck();\n return;\n }\n\n const firstCrumb = crumbsArray[0];\n const lastCrumb = crumbsArray[totalBreadcrumbs - 1];\n const containerWidth = this.nativeElementWidth;\n const totalRequiredWidth = crumbsArray.reduce(\n (sum, crumb) => sum + crumb.width,\n 0,\n );\n\n if (totalRequiredWidth <= containerWidth) {\n crumbsArray.forEach(\n (breadcrumb: TdBreadcrumbComponent, index: number) => {\n breadcrumb.displayCrumb = true;\n breadcrumb.shouldTruncate = false;\n breadcrumb.maxWidth = undefined;\n breadcrumb.flexOrder =\n index === 0\n ? 0\n : index === totalBreadcrumbs - 1\n ? 1000\n : index * 10; // Assign orders based on index for middle crumbs\n },\n );\n\n this.showOverflowButton = false;\n this.overflowMenuItems = [];\n this.hiddenBreadcrumbs = [];\n this._changeDetectorRef.markForCheck();\n return;\n }\n\n const overflowButtonWidth = 48;\n const availableWidth = containerWidth - overflowButtonWidth;\n const visibleMiddleCrumbs: number[] = [];\n let requiredWidth = firstCrumb.width + lastCrumb.width;\n\n // Try to fit breadcrumbs from right to left (favoring more recent items)\n for (let i = totalBreadcrumbs - 2; i >= 1; i--) {\n const breadcrumb = crumbsArray[i];\n if (requiredWidth + breadcrumb.width <= availableWidth) {\n requiredWidth += breadcrumb.width;\n visibleMiddleCrumbs.unshift(i);\n }\n }\n\n // Apply visibility and flexbox orders\n const hiddenBreadcrumbs: TdBreadcrumbComponent[] = [];\n let currentOrder = 10; // Start orders at 10 for middle breadcrumbs\n\n crumbsArray.forEach((breadcrumb: TdBreadcrumbComponent, index: number) => {\n if (index === 0) {\n // First breadcrumb - always visible, always first\n breadcrumb.displayCrumb = true;\n breadcrumb.shouldTruncate = false;\n breadcrumb.maxWidth = undefined;\n breadcrumb.flexOrder = 0;\n } else if (index === totalBreadcrumbs - 1) {\n // Last breadcrumb - always visible, always last\n breadcrumb.displayCrumb = true;\n breadcrumb.shouldTruncate = false;\n breadcrumb.flexOrder = 1000;\n } else if (visibleMiddleCrumbs.includes(index)) {\n // Visible middle breadcrumbs - assign incremental orders\n breadcrumb.displayCrumb = true;\n breadcrumb.shouldTruncate = false;\n breadcrumb.maxWidth = undefined;\n breadcrumb.flexOrder = currentOrder;\n currentOrder += 10;\n } else {\n // Hidden breadcrumbs\n breadcrumb.displayCrumb = false;\n breadcrumb.shouldTruncate = false;\n breadcrumb.maxWidth = undefined;\n breadcrumb.flexOrder = 0; // Doesn't matter, it's hidden\n hiddenBreadcrumbs.push(breadcrumb);\n }\n });\n\n // Overflow button order comes after visible middle breadcrumbs\n this.overflowButtonOrder = currentOrder;\n\n // Truncate last breadcrumb if too long\n const lastBreadcrumbMaxWidth =\n availableWidth * this.LAST_BREADCRUMB_MAX_WIDTH_RATIO;\n if (lastCrumb.width > lastBreadcrumbMaxWidth) {\n lastCrumb.shouldTruncate = true;\n lastCrumb.maxWidth = lastBreadcrumbMaxWidth;\n } else {\n // Ensure maxWidth is reset if last breadcrumb doesn't need truncation\n lastCrumb.maxWidth = undefined;\n }\n\n this.showOverflowButton = hiddenBreadcrumbs.length > 0;\n this.overflowMenuItems = hiddenBreadcrumbs;\n this.hiddenBreadcrumbs = hiddenBreadcrumbs;\n this._changeDetectorRef.markForCheck();\n }\n\n private _waitToCalculateVisibility(): void {\n setTimeout(() => {\n this._calculateVisibility();\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { TdBreadcrumbsComponent } from './breadcrumbs.component';\nimport { TdBreadcrumbComponent } from './breadcrumb/breadcrumb.component';\n\n/**\n * @deprecated This module is deprecated and will be removed in future versions.\n * Please migrate to using standalone components as soon as possible.\n */\n@NgModule({\n imports: [TdBreadcrumbsComponent, TdBreadcrumbComponent],\n exports: [TdBreadcrumbsComponent, TdBreadcrumbComponent],\n})\nexport class CovalentBreadcrumbsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2"],"mappings":"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"} |
+2
-2
| { | ||
| "name": "@covalent/core", | ||
| "version": "10.4.3", | ||
| "version": "10.5.0", | ||
| "exports": { | ||
@@ -85,3 +85,3 @@ ".": { | ||
| "@angular/material": "19.x.x", | ||
| "@covalent/core": "10.4.3" | ||
| "@covalent/core": "10.5.0" | ||
| }, | ||
@@ -88,0 +88,0 @@ "dependencies": { |
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
1412875
2.29%13121
2.37%37
2.78%