@clr/angular
Version:
Angular components for Clarity
153 lines • 15.8 kB
JavaScript
/*
* 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=