UNPKG

@clr/angular

Version:

Angular components for Clarity

153 lines 15.8 kB
/* * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved. * 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 = this.responsiveNavService.registeredNavs.subscribe({ next: (navLevelList) => { this.initializeNavTriggers(navLevelList); }, }); this._subscription.add(this.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvbGF5b3V0L25hdi9oZWFkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUV6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7O0FBNEI1RCxNQUFNLE9BQU8sU0FBUztJQVNwQixZQUNVLG9CQUFpRCxFQUNsRCxhQUFzQztRQURyQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQTZCO1FBQ2xELGtCQUFhLEdBQWIsYUFBYSxDQUF5QjtRQVZaLFNBQUksR0FBRyxRQUFRLENBQUM7UUFFbkQsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMxQixpQkFBWSxHQUFXLElBQUksQ0FBQztRQUM1Qix1QkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQU90QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO1lBQ3RFLElBQUksRUFBRSxDQUFDLFlBQXNCLEVBQUUsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzNDLENBQUM7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVU7YUFDakMsSUFBSSxDQUNILE1BQU0sQ0FDSixDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUNsQixXQUFXLEtBQUssa0JBQWtCLENBQUMsU0FBUyxJQUFJLFdBQVcsS0FBSyxr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RW9DLElBQUk7c0JBQXRDLEtBQUs7O3NCQUFJLFdBQVc7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMyBWTXdhcmUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5wdXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IENsckNvbW1vblN0cmluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaTE4bi9jb21tb24tc3RyaW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IFJlc3BvbnNpdmVOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vcHJvdmlkZXJzL3Jlc3BvbnNpdmUtbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFJlc3BvbnNpdmVOYXZDb2RlcyB9IGZyb20gJy4vcmVzcG9uc2l2ZS1uYXYtY29kZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjbHItaGVhZGVyJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICpuZ0lmPVwiaXNOYXZMZXZlbDFPblBhZ2VcIlxuICAgICAgY2xhc3M9XCJoZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXJcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJyZXNwb25zaXZlTmF2Q29tbW9uU3RyaW5nXCJcbiAgICAgIChjbGljayk9XCJvcGVuTmF2KHJlc3BvbnNpdmVOYXZDb2Rlcy5OQVZfTEVWRUxfMSlcIlxuICAgID5cbiAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAqbmdJZj1cImlzTmF2TGV2ZWwyT25QYWdlXCJcbiAgICAgIGNsYXNzPVwiaGVhZGVyLW92ZXJmbG93LXRyaWdnZXJcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJyZXNwb25zaXZlT3ZlcmZsb3dDb21tb25TdHJpbmdcIlxuICAgICAgKGNsaWNrKT1cIm9wZW5OYXYocmVzcG9uc2l2ZU5hdkNvZGVzLk5BVl9MRVZFTF8yKVwiXG4gICAgPlxuICAgICAgPHNwYW4+PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYmFja2Ryb3BcIiAoY2xpY2spPVwiY2xvc2VPcGVuTmF2KClcIj48L2Rpdj5cbiAgYCxcbiAgaG9zdDogeyAnW2NsYXNzLmhlYWRlcl0nOiAndHJ1ZScgfSxcbn0pXG5leHBvcnQgY2xhc3MgQ2xySGVhZGVyIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQElucHV0KCkgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKSByb2xlID0gJ2Jhbm5lcic7XG5cbiAgaXNOYXZMZXZlbDFPblBhZ2UgPSBmYWxzZTtcbiAgaXNOYXZMZXZlbDJPblBhZ2UgPSBmYWxzZTtcbiAgb3Blbk5hdkxldmVsOiBudW1iZXIgPSBudWxsO1xuICByZXNwb25zaXZlTmF2Q29kZXMgPSBSZXNwb25zaXZlTmF2Q29kZXM7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVzcG9uc2l2ZU5hdlNlcnZpY2U6IFJlc3BvbnNpdmVOYXZpZ2F0aW9uU2VydmljZSxcbiAgICBwdWJsaWMgY29tbW9uU3RyaW5nczogQ2xyQ29tbW9uU3RyaW5nc1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gdGhpcy5yZXNwb25zaXZlTmF2U2VydmljZS5yZWdpc3RlcmVkTmF2cy5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKG5hdkxldmVsTGlzdDogbnVtYmVyW10pID0+IHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplTmF2VHJpZ2dlcnMobmF2TGV2ZWxMaXN0KTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5yZXNwb25zaXZlTmF2U2VydmljZS5uYXZDb250cm9sXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcihcbiAgICAgICAgICAgICh7IGNvbnRyb2xDb2RlIH0pID0+XG4gICAgICAgICAgICAgIGNvbnRyb2xDb2RlID09PSBSZXNwb25zaXZlTmF2Q29kZXMuTkFWX0NMT1NFIHx8IGNvbnRyb2xDb2RlID09PSBSZXNwb25zaXZlTmF2Q29kZXMuTkFWX0NMT1NFX0FMTFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLm9wZW5OYXZMZXZlbCA9IG51bGw7XG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldCByZXNwb25zaXZlTmF2Q29tbW9uU3RyaW5nKCkge1xuICAgIGNvbnN0IG15Q29tbW9uU3RyaW5ncyA9IHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzO1xuICAgIGlmICh0aGlzLm9wZW5OYXZMZXZlbCAhPT0gdGhpcy5yZXNwb25zaXZlTmF2Q29kZXMuTkFWX0xFVkVMXzEpIHtcbiAgICAgIHJldHVybiBteUNvbW1vblN0cmluZ3MucmVzcG9uc2l2ZU5hdlRvZ2dsZU9wZW47XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBteUNvbW1vblN0cmluZ3MucmVzcG9uc2l2ZU5hdlRvZ2dsZUNsb3NlO1xuICAgIH1cbiAgfVxuXG4gIGdldCByZXNwb25zaXZlT3ZlcmZsb3dDb21tb25TdHJpbmcoKSB7XG4gICAgY29uc3QgbXlDb21tb25TdHJpbmdzID0gdGhpcy5jb21tb25TdHJpbmdzLmtleXM7XG4gICAgaWYgKHRoaXMub3Blbk5hdkxldmVsICE9PSB0aGlzLnJlc3BvbnNpdmVOYXZDb2Rlcy5OQVZfTEVWRUxfMikge1xuICAgICAgcmV0dXJuIG15Q29tbW9uU3RyaW5ncy5yZXNwb25zaXZlTmF2T3ZlcmZsb3dPcGVuO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbXlDb21tb25TdHJpbmdzLnJlc3BvbnNpdmVOYXZPdmVyZmxvd0Nsb3NlO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJlc2V0IHRyaWdnZXJzLiBoYW5kbGVzIGNhc2VzIHdoZW4gYW4gYXBwbGljYXRpb24gaGFzIGRpZmZlcmVudCBuYXYgbGV2ZWxzIG9uIGRpZmZlcmVudCBwYWdlcy5cbiAgcmVzZXROYXZUcmlnZ2VycygpIHtcbiAgICB0aGlzLmlzTmF2TGV2ZWwxT25QYWdlID0gZmFsc2U7XG4gICAgdGhpcy5pc05hdkxldmVsMk9uUGFnZSA9IGZhbHNlO1xuICB9XG5cbiAgLy8gZGVjaWRlcyB3aGljaCB0cmlnZ2VycyB0byBzaG93IG9uIHRoZSBoZWFkZXJcbiAgaW5pdGlhbGl6ZU5hdlRyaWdnZXJzKG5hdkxpc3Q6IG51bWJlcltdKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldE5hdlRyaWdnZXJzKCk7XG4gICAgaWYgKG5hdkxpc3QubGVuZ3RoID4gMikge1xuICAgICAgY29uc29sZS5lcnJvcignTW9yZSB0aGFuIDIgTmF2IExldmVscyBkZXRlY3RlZC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbmF2TGlzdC5mb3JFYWNoKG5hdkxldmVsID0+IHtcbiAgICAgIGlmIChuYXZMZXZlbCA9PT0gUmVzcG9uc2l2ZU5hdkNvZGVzLk5BVl9MRVZFTF8xKSB7XG4gICAgICAgIHRoaXMuaXNOYXZMZXZlbDFPblBhZ2UgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChuYXZMZXZlbCA9PT0gUmVzcG9uc2l2ZU5hdkNvZGVzLk5BVl9MRVZFTF8yKSB7XG4gICAgICAgIHRoaXMuaXNOYXZMZXZlbDJPblBhZ2UgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gY2xvc2VzIHRoZSBuYXYgdGhhdCBpcyBvcGVuXG4gIGNsb3NlT3Blbk5hdigpIHtcbiAgICB0aGlzLnJlc3BvbnNpdmVOYXZTZXJ2aWNlLmNsb3NlQWxsTmF2cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBpbiB3aXRoIEBjbHIvYW5ndWxhciB2MTUuMC4wXG4gICAqXG4gICAqIFVzZSBgb3Blbk5hdihuYXZMZXZlbClgIGluc3RlYWQgdG8gb3BlbiB0aGUgbmF2aWdhdGlvbiBhbmQgUmVzcG9uc2l2ZU5hdlNlcnZpY2UgdG8gY2xvc2UgaXQuXG4gICAqL1xuICB0b2dnbGVOYXYobmF2TGV2ZWw6IG51bWJlcikge1xuICAgIGlmICh0aGlzLm9wZW5OYXZMZXZlbCA9PT0gbmF2TGV2ZWwpIHtcbiAgICAgIHRoaXMucmVzcG9uc2l2ZU5hdlNlcnZpY2Uuc2VuZENvbnRyb2xNZXNzYWdlKFJlc3BvbnNpdmVOYXZDb2Rlcy5OQVZfQ0xPU0UsIG5hdkxldmVsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wZW5OYXYobmF2TGV2ZWwpO1xuICB9XG5cbiAgb3Blbk5hdihuYXZMZXZlbDogbnVtYmVyKSB7XG4gICAgdGhpcy5vcGVuTmF2TGV2ZWwgPSBuYXZMZXZlbDtcbiAgICB0aGlzLnJlc3BvbnNpdmVOYXZTZXJ2aWNlLnNlbmRDb250cm9sTWVzc2FnZShSZXNwb25zaXZlTmF2Q29kZXMuTkFWX09QRU4sIG5hdkxldmVsKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iXX0=