UNPKG

@clr/angular

Version:

Angular components for Clarity

154 lines 15.9 kB
/* * Copyright (c) 2016-2025 Broadcom. All Rights Reserved. * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries. * This software is released under MIT license. * The full license information can be found in LICENSE in the root directory of this project. */ import { Component, HostBinding, Input } from '@angular/core'; import { filter } from 'rxjs/operators'; import { ResponsiveNavCodes } from './responsive-nav-codes'; import * as i0 from "@angular/core"; import * as i1 from "./providers/responsive-navigation.service"; import * as i2 from "../../utils/i18n/common-strings.service"; import * as i3 from "@angular/common"; export class ClrHeader { constructor(responsiveNavService, commonStrings) { this.responsiveNavService = responsiveNavService; this.commonStrings = commonStrings; this.role = 'banner'; this.isNavLevel1OnPage = false; this.isNavLevel2OnPage = false; this.openNavLevel = null; this.responsiveNavCodes = ResponsiveNavCodes; this._subscription = responsiveNavService.registeredNavs.subscribe({ next: (navLevelList) => { this.initializeNavTriggers(navLevelList); }, }); this._subscription.add(responsiveNavService.navControl .pipe(filter(({ controlCode }) => controlCode === ResponsiveNavCodes.NAV_CLOSE || controlCode === ResponsiveNavCodes.NAV_CLOSE_ALL)) .subscribe(() => { this.openNavLevel = null; })); } get responsiveNavCommonString() { const myCommonStrings = this.commonStrings.keys; if (this.openNavLevel !== this.responsiveNavCodes.NAV_LEVEL_1) { return myCommonStrings.responsiveNavToggleOpen; } else { return myCommonStrings.responsiveNavToggleClose; } } get responsiveOverflowCommonString() { const myCommonStrings = this.commonStrings.keys; if (this.openNavLevel !== this.responsiveNavCodes.NAV_LEVEL_2) { return myCommonStrings.responsiveNavOverflowOpen; } else { return myCommonStrings.responsiveNavOverflowClose; } } // reset triggers. handles cases when an application has different nav levels on different pages. resetNavTriggers() { this.isNavLevel1OnPage = false; this.isNavLevel2OnPage = false; } // decides which triggers to show on the header initializeNavTriggers(navList) { this.resetNavTriggers(); if (navList.length > 2) { console.error('More than 2 Nav Levels detected.'); return; } navList.forEach(navLevel => { if (navLevel === ResponsiveNavCodes.NAV_LEVEL_1) { this.isNavLevel1OnPage = true; } else if (navLevel === ResponsiveNavCodes.NAV_LEVEL_2) { this.isNavLevel2OnPage = true; } }); } // closes the nav that is open closeOpenNav() { this.responsiveNavService.closeAllNavs(); } /** * @deprecated Will be removed in with @clr/angular v15.0.0 * * Use `openNav(navLevel)` instead to open the navigation and ResponsiveNavService to close it. */ toggleNav(navLevel) { if (this.openNavLevel === navLevel) { this.responsiveNavService.sendControlMessage(ResponsiveNavCodes.NAV_CLOSE, navLevel); return; } this.openNav(navLevel); } openNav(navLevel) { this.openNavLevel = navLevel; this.responsiveNavService.sendControlMessage(ResponsiveNavCodes.NAV_OPEN, navLevel); } ngOnDestroy() { this._subscription.unsubscribe(); } } ClrHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrHeader, deps: [{ token: i1.ResponsiveNavigationService }, { token: i2.ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component }); ClrHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrHeader, selector: "clr-header", inputs: { role: "role" }, host: { properties: { "class.header": "true", "attr.role": "this.role" } }, ngImport: i0, template: ` <button type="button" *ngIf="isNavLevel1OnPage" class="header-hamburger-trigger" [attr.aria-label]="responsiveNavCommonString" (click)="openNav(responsiveNavCodes.NAV_LEVEL_1)" > <span></span> </button> <ng-content></ng-content> <button type="button" *ngIf="isNavLevel2OnPage" class="header-overflow-trigger" [attr.aria-label]="responsiveOverflowCommonString" (click)="openNav(responsiveNavCodes.NAV_LEVEL_2)" > <span></span> </button> <div class="header-backdrop" (click)="closeOpenNav()"></div> `, isInline: true, dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrHeader, decorators: [{ type: Component, args: [{ selector: 'clr-header', template: ` <button type="button" *ngIf="isNavLevel1OnPage" class="header-hamburger-trigger" [attr.aria-label]="responsiveNavCommonString" (click)="openNav(responsiveNavCodes.NAV_LEVEL_1)" > <span></span> </button> <ng-content></ng-content> <button type="button" *ngIf="isNavLevel2OnPage" class="header-overflow-trigger" [attr.aria-label]="responsiveOverflowCommonString" (click)="openNav(responsiveNavCodes.NAV_LEVEL_2)" > <span></span> </button> <div class="header-backdrop" (click)="closeOpenNav()"></div> `, host: { '[class.header]': 'true' }, }] }], ctorParameters: function () { return [{ type: i1.ResponsiveNavigationService }, { type: i2.ClrCommonStringsService }]; }, propDecorators: { role: [{ type: Input }, { type: HostBinding, args: ['attr.role'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvbGF5b3V0L25hdi9oZWFkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFekUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXhDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7OztBQTRCNUQsTUFBTSxPQUFPLFNBQVM7SUFTcEIsWUFDVSxvQkFBaUQsRUFDbEQsYUFBc0M7UUFEckMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUE2QjtRQUNsRCxrQkFBYSxHQUFiLGFBQWEsQ0FBeUI7UUFWWixTQUFJLEdBQUcsUUFBUSxDQUFDO1FBRW5ELHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMxQixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsaUJBQVksR0FBVyxJQUFJLENBQUM7UUFDNUIsdUJBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFPdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO1lBQ2pFLElBQUksRUFBRSxDQUFDLFlBQXNCLEVBQUUsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzNDLENBQUM7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsb0JBQW9CLENBQUMsVUFBVTthQUM1QixJQUFJLENBQ0gsTUFBTSxDQUNKLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQ2xCLFdBQVcsS0FBSyxrQkFBa0IsQ0FBQyxTQUFTLElBQUksV0FBVyxLQUFLLGtCQUFrQixDQUFDLGFBQWEsQ0FD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Szs7c0JBQUksV0FBVzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1IEJyb2FkY29tLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogVGhlIHRlcm0gXCJCcm9hZGNvbVwiIHJlZmVycyB0byBCcm9hZGNvbSBJbmMuIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzLlxuICogVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZS5cbiAqIFRoZSBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIExJQ0VOU0UgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ2xyQ29tbW9uU3RyaW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi91dGlscy9pMThuL2NvbW1vbi1zdHJpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVzcG9uc2l2ZU5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvcmVzcG9uc2l2ZS1uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVzcG9uc2l2ZU5hdkNvZGVzIH0gZnJvbSAnLi9yZXNwb25zaXZlLW5hdi1jb2Rlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Nsci1oZWFkZXInLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKm5nSWY9XCJpc05hdkxldmVsMU9uUGFnZVwiXG4gICAgICBjbGFzcz1cImhlYWRlci1oYW1idXJnZXItdHJpZ2dlclwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJlc3BvbnNpdmVOYXZDb21tb25TdHJpbmdcIlxuICAgICAgKGNsaWNrKT1cIm9wZW5OYXYocmVzcG9uc2l2ZU5hdkNvZGVzLk5BVl9MRVZFTF8xKVwiXG4gICAgPlxuICAgICAgPHNwYW4+PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICpuZ0lmPVwiaXNOYXZMZXZlbDJPblBhZ2VcIlxuICAgICAgY2xhc3M9XCJoZWFkZXItb3ZlcmZsb3ctdHJpZ2dlclwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJlc3BvbnNpdmVPdmVyZmxvd0NvbW1vblN0cmluZ1wiXG4gICAgICAoY2xpY2spPVwib3Blbk5hdihyZXNwb25zaXZlTmF2Q29kZXMuTkFWX0xFVkVMXzIpXCJcbiAgICA+XG4gICAgICA8c3Bhbj48L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBjbGFzcz1cImhlYWRlci1iYWNrZHJvcFwiIChjbGljayk9XCJjbG9zZU9wZW5OYXYoKVwiPjwvZGl2PlxuICBgLFxuICBob3N0OiB7ICdbY2xhc3MuaGVhZGVyXSc6ICd0cnVlJyB9LFxufSlcbmV4cG9ydCBjbGFzcyBDbHJIZWFkZXIgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpIHJvbGUgPSAnYmFubmVyJztcblxuICBpc05hdkxldmVsMU9uUGFnZSA9IGZhbHNlO1xuICBpc05hdkxldmVsMk9uUGFnZSA9IGZhbHNlO1xuICBvcGVuTmF2TGV2ZWw6IG51bWJlciA9IG51bGw7XG4gIHJlc3BvbnNpdmVOYXZDb2RlcyA9IFJlc3BvbnNpdmVOYXZDb2RlcztcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZXNwb25zaXZlTmF2U2VydmljZTogUmVzcG9uc2l2ZU5hdmlnYXRpb25TZXJ2aWNlLFxuICAgIHB1YmxpYyBjb21tb25TdHJpbmdzOiBDbHJDb21tb25TdHJpbmdzU2VydmljZVxuICApIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24gPSByZXNwb25zaXZlTmF2U2VydmljZS5yZWdpc3RlcmVkTmF2cy5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKG5hdkxldmVsTGlzdDogbnVtYmVyW10pID0+IHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplTmF2VHJpZ2dlcnMobmF2TGV2ZWxMaXN0KTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgcmVzcG9uc2l2ZU5hdlNlcnZpY2UubmF2Q29udHJvbFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgICAoeyBjb250cm9sQ29kZSB9KSA9PlxuICAgICAgICAgICAgICBjb250cm9sQ29kZSA9PT0gUmVzcG9uc2l2ZU5hdkNvZGVzLk5BVl9DTE9TRSB8fCBjb250cm9sQ29kZSA9PT0gUmVzcG9uc2l2ZU5hdkNvZGVzLk5BVl9DTE9TRV9BTExcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5vcGVuTmF2TGV2ZWwgPSBudWxsO1xuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXQgcmVzcG9uc2l2ZU5hdkNvbW1vblN0cmluZygpIHtcbiAgICBjb25zdCBteUNvbW1vblN0cmluZ3MgPSB0aGlzLmNvbW1vblN0cmluZ3Mua2V5cztcbiAgICBpZiAodGhpcy5vcGVuTmF2TGV2ZWwgIT09IHRoaXMucmVzcG9uc2l2ZU5hdkNvZGVzLk5BVl9MRVZFTF8xKSB7XG4gICAgICByZXR1cm4gbXlDb21tb25TdHJpbmdzLnJlc3BvbnNpdmVOYXZUb2dnbGVPcGVuO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbXlDb21tb25TdHJpbmdzLnJlc3BvbnNpdmVOYXZUb2dnbGVDbG9zZTtcbiAgICB9XG4gIH1cblxuICBnZXQgcmVzcG9uc2l2ZU92ZXJmbG93Q29tbW9uU3RyaW5nKCkge1xuICAgIGNvbnN0IG15Q29tbW9uU3RyaW5ncyA9IHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzO1xuICAgIGlmICh0aGlzLm9wZW5OYXZMZXZlbCAhPT0gdGhpcy5yZXNwb25zaXZlTmF2Q29kZXMuTkFWX0xFVkVMXzIpIHtcbiAgICAgIHJldHVybiBteUNvbW1vblN0cmluZ3MucmVzcG9uc2l2ZU5hdk92ZXJmbG93T3BlbjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG15Q29tbW9uU3RyaW5ncy5yZXNwb25zaXZlTmF2T3ZlcmZsb3dDbG9zZTtcbiAgICB9XG4gIH1cblxuICAvLyByZXNldCB0cmlnZ2Vycy4gaGFuZGxlcyBjYXNlcyB3aGVuIGFuIGFwcGxpY2F0aW9uIGhhcyBkaWZmZXJlbnQgbmF2IGxldmVscyBvbiBkaWZmZXJlbnQgcGFnZXMuXG4gIHJlc2V0TmF2VHJpZ2dlcnMoKSB7XG4gICAgdGhpcy5pc05hdkxldmVsMU9uUGFnZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNOYXZMZXZlbDJPblBhZ2UgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIGRlY2lkZXMgd2hpY2ggdHJpZ2dlcnMgdG8gc2hvdyBvbiB0aGUgaGVhZGVyXG4gIGluaXRpYWxpemVOYXZUcmlnZ2VycyhuYXZMaXN0OiBudW1iZXJbXSk6IHZvaWQge1xuICAgIHRoaXMucmVzZXROYXZUcmlnZ2VycygpO1xuICAgIGlmIChuYXZMaXN0Lmxlbmd0aCA+IDIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01vcmUgdGhhbiAyIE5hdiBMZXZlbHMgZGV0ZWN0ZWQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG5hdkxpc3QuZm9yRWFjaChuYXZMZXZlbCA9PiB7XG4gICAgICBpZiAobmF2TGV2ZWwgPT09IFJlc3BvbnNpdmVOYXZDb2Rlcy5OQVZfTEVWRUxfMSkge1xuICAgICAgICB0aGlzLmlzTmF2TGV2ZWwxT25QYWdlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAobmF2TGV2ZWwgPT09IFJlc3BvbnNpdmVOYXZDb2Rlcy5OQVZfTEVWRUxfMikge1xuICAgICAgICB0aGlzLmlzTmF2TGV2ZWwyT25QYWdlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIGNsb3NlcyB0aGUgbmF2IHRoYXQgaXMgb3BlblxuICBjbG9zZU9wZW5OYXYoKSB7XG4gICAgdGhpcy5yZXNwb25zaXZlTmF2U2VydmljZS5jbG9zZUFsbE5hdnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgaW4gd2l0aCBAY2xyL2FuZ3VsYXIgdjE1LjAuMFxuICAgKlxuICAgKiBVc2UgYG9wZW5OYXYobmF2TGV2ZWwpYCBpbnN0ZWFkIHRvIG9wZW4gdGhlIG5hdmlnYXRpb24gYW5kIFJlc3BvbnNpdmVOYXZTZXJ2aWNlIHRvIGNsb3NlIGl0LlxuICAgKi9cbiAgdG9nZ2xlTmF2KG5hdkxldmVsOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5vcGVuTmF2TGV2ZWwgPT09IG5hdkxldmVsKSB7XG4gICAgICB0aGlzLnJlc3BvbnNpdmVOYXZTZXJ2aWNlLnNlbmRDb250cm9sTWVzc2FnZShSZXNwb25zaXZlTmF2Q29kZXMuTkFWX0NMT1NFLCBuYXZMZXZlbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vcGVuTmF2KG5hdkxldmVsKTtcbiAgfVxuXG4gIG9wZW5OYXYobmF2TGV2ZWw6IG51bWJlcikge1xuICAgIHRoaXMub3Blbk5hdkxldmVsID0gbmF2TGV2ZWw7XG4gICAgdGhpcy5yZXNwb25zaXZlTmF2U2VydmljZS5zZW5kQ29udHJvbE1lc3NhZ2UoUmVzcG9uc2l2ZU5hdkNvZGVzLk5BVl9PUEVOLCBuYXZMZXZlbCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIl19