@visa/nova-angular
Version:
Visa Product Design System Nova Angular library
133 lines • 14.4 kB
JavaScript
/**
* Copyright (c) 2025 Visa, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
**/
import { coerceBooleanProperty } from '@angular/cdk/coercion';
import { ChangeDetectorRef, ContentChildren, Directive, HostBinding, Input, QueryList } from '@angular/core';
import { NovaLibService } from '../nova-lib.service';
import { TabListDirective } from '../tab-list/tab-list.directive';
import * as i0 from "@angular/core";
import * as i1 from "../nova-lib.service";
export class NavDirective {
/**
* Provides custom class(es) for custom styling.
* @default .v-nav
*/
get class() {
return [
this._class,
'v-nav',
this.vertical ? 'v-nav-vertical' : 'v-nav-horizontal',
this.drawer ? 'v-nav-drawer' : ''
].join(' ');
}
set class(value) {
this._class = value;
}
get hostClass() {
return this.class;
}
/**
* Sets navigation to vertical orientation when true.
* @default false
*/
get vertical() {
return this._vertical;
}
set vertical(value) {
this._vertical = coerceBooleanProperty(value);
}
/**
* Sets navigation to drawer variation when true.
* @default false
*/
get drawer() {
return this._drawer;
}
set drawer(value) {
this._drawer = coerceBooleanProperty(value);
}
constructor(cdRef, novaLibService) {
this.cdRef = cdRef;
this.novaLibService = novaLibService;
this._class = '';
this._vertical = false;
this._drawer = false;
}
ngAfterContentInit() {
if (this.tabLists) {
if (this.tabLists.length > 0) {
this.setUpTabLists();
this.tabLists.changes.subscribe(() => {
this.setUpTabLists();
});
}
}
}
setUpTabLists() {
// for all instances of TabListDirective
this.tabLists.forEach((list) => {
list._inNav = true;
list.role = list._roleSetByUser ? list.role : null;
if (list.tabs) {
if (list.tabs.length > 0) {
this.setUpTabs(list);
}
list.tabs.changes.subscribe(() => {
this.setUpTabs(list);
});
}
this.cdRef.detectChanges();
});
}
setUpTabs(list) {
if (list.buttons) {
// remove arrow key navigation from tabs as links (in navigation)
this.novaLibService.resetNavigationBehaviors(list.buttons.toArray());
}
// tabs = array of TabItemDirective
list.tabs.forEach((tab) => {
tab.role = tab._roleSetByUser && !tab._roleSetByTab ? tab.role : null;
if (tab.button) {
tab.button._isInNavOrNested = true;
tab.button.role = tab.button._roleSetByUser && !tab.button._roleSetByTab ? tab.button.role : null;
}
this.cdRef.detectChanges();
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NavDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NovaLibService }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: NavDirective, isStandalone: true, selector: "[v-nav]", inputs: { class: "class", vertical: "vertical", drawer: "drawer" }, host: { properties: { "class": "this.hostClass" } }, queries: [{ propertyName: "tabLists", predicate: TabListDirective, descendants: true }], ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NavDirective, decorators: [{
type: Directive,
args: [{
standalone: true,
// tslint:disable-next-line:directive-selector
selector: '[v-nav]'
}]
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.NovaLibService }], propDecorators: { tabLists: [{
type: ContentChildren,
args: [TabListDirective, { descendants: true }]
}], class: [{
type: Input
}], hostClass: [{
type: HostBinding,
args: ['class']
}], vertical: [{
type: Input
}], drawer: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbm92YS1saWIvc3JjL2xpYi9uYXYvbmF2LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0lBZUk7QUFDSixPQUFPLEVBQWdCLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsU0FBUyxFQUNULFdBQVcsRUFDWCxLQUFLLEVBQ0wsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7O0FBT2xFLE1BQU0sT0FBTyxZQUFZO0lBRXZCOzs7T0FHRztJQUNILElBQ0ksS0FBSztRQUNQLE9BQU87WUFDTCxJQUFJLENBQUMsTUFBTTtZQUNYLE9BQU87WUFDUCxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsa0JBQWtCO1lBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUNsQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNkLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFhO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUNJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQ0ksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsS0FBbUI7UUFDOUIsSUFBSSxD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QUMsSUFBSSxDQUFDO1lBQ3BHLENBQUM7WUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FyR1UsWUFBWTttR0FBWixZQUFZLHFOQUNOLGdCQUFnQjs7NEZBRHRCLFlBQVk7a0JBTHhCLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLDhDQUE4QztvQkFDOUMsUUFBUSxFQUFFLFNBQVM7aUJBQ3BCO21IQUUyRCxRQUFRO3NCQUFqRSxlQUFlO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFNcEQsS0FBSztzQkFEUixLQUFLO2dCQWNGLFNBQVM7c0JBRFosV0FBVzt1QkFBQyxPQUFPO2dCQVVoQixRQUFRO3NCQURYLEtBQUs7Z0JBY0YsTUFBTTtzQkFEVCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDI1IFZpc2EsIEluYy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqKi9cbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIERpcmVjdGl2ZSxcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBRdWVyeUxpc3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb3ZhTGliU2VydmljZSB9IGZyb20gJy4uL25vdmEtbGliLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFiSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uL3RhYi1pdGVtL3RhYi1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUYWJMaXN0RGlyZWN0aXZlIH0gZnJvbSAnLi4vdGFiLWxpc3QvdGFiLWxpc3QuZGlyZWN0aXZlJztcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbdi1uYXZdJ1xufSlcbmV4cG9ydCBjbGFzcyBOYXZEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgQENvbnRlbnRDaGlsZHJlbihUYWJMaXN0RGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHRhYkxpc3RzOiBRdWVyeUxpc3Q8VGFiTGlzdERpcmVjdGl2ZT47XG4gIC8qKlxuICAgKiBQcm92aWRlcyBjdXN0b20gY2xhc3MmIzQwO2VzJiM0MTsgZm9yIGN1c3RvbSBzdHlsaW5nLlxuICAgKiBAZGVmYXVsdCAudi1uYXZcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBjbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLl9jbGFzcyxcbiAgICAgICd2LW5hdicsXG4gICAgICB0aGlzLnZlcnRpY2FsID8gJ3YtbmF2LXZlcnRpY2FsJyA6ICd2LW5hdi1ob3Jpem9udGFsJyxcbiAgICAgIHRoaXMuZHJhd2VyID8gJ3YtbmF2LWRyYXdlcicgOiAnJ1xuICAgIF0uam9pbignICcpO1xuICB9XG4gIHNldCBjbGFzcyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fY2xhc3MgPSB2YWx1ZTtcbiAgfVxuICBfY2xhc3M6IHN0cmluZyA9ICcnO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IGhvc3RDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNsYXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgbmF2aWdhdGlvbiB0byB2ZXJ0aWNhbCBvcmllbnRhdGlvbiB3aGVuIHRydWUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgdmVydGljYWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZlcnRpY2FsO1xuICB9XG4gIHNldCB2ZXJ0aWNhbCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fdmVydGljYWwgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG4gIF92ZXJ0aWNhbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTZXRzIG5hdmlnYXRpb24gdG8gZHJhd2VyIHZhcmlhdGlvbiB3aGVuIHRydWUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgZHJhd2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kcmF3ZXI7XG4gIH1cbiAgc2V0IGRyYXdlcih2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fZHJhd2VyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBfZHJhd2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBub3ZhTGliU2VydmljZTogTm92YUxpYlNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50YWJMaXN0cykge1xuICAgICAgaWYgKHRoaXMudGFiTGlzdHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNldFVwVGFiTGlzdHMoKTtcblxuICAgICAgICB0aGlzLnRhYkxpc3RzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldFVwVGFiTGlzdHMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0VXBUYWJMaXN0cygpIHtcbiAgICAvLyBmb3IgYWxsIGluc3RhbmNlcyBvZiBUYWJMaXN0RGlyZWN0aXZlXG4gICAgdGhpcy50YWJMaXN0cy5mb3JFYWNoKChsaXN0KSA9PiB7XG4gICAgICBsaXN0Ll9pbk5hdiA9IHRydWU7XG4gICAgICBsaXN0LnJvbGUgPSBsaXN0Ll9yb2xlU2V0QnlVc2VyID8gbGlzdC5yb2xlIDogbnVsbDtcblxuICAgICAgaWYgKGxpc3QudGFicykge1xuICAgICAgICBpZiAobGlzdC50YWJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnNldFVwVGFicyhsaXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpc3QudGFicy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRVcFRhYnMobGlzdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRVcFRhYnMobGlzdDogVGFiTGlzdERpcmVjdGl2ZSkge1xuICAgIGlmIChsaXN0LmJ1dHRvbnMpIHtcbiAgICAgIC8vIHJlbW92ZSBhcnJvdyBrZXkgbmF2aWdhdGlvbiBmcm9tIHRhYnMgYXMgbGlua3MgKGluIG5hdmlnYXRpb24pXG4gICAgICB0aGlzLm5vdmFMaWJTZXJ2aWNlLnJlc2V0TmF2aWdhdGlvbkJlaGF2aW9ycyhsaXN0LmJ1dHRvbnMudG9BcnJheSgpKTtcbiAgICB9XG4gICAgLy8gdGFicyA9IGFycmF5IG9mIFRhYkl0ZW1EaXJlY3RpdmVcbiAgICBsaXN0LnRhYnMuZm9yRWFjaCgodGFiOiBUYWJJdGVtRGlyZWN0aXZlKSA9PiB7XG4gICAgICB0YWIucm9sZSA9IHRhYi5fcm9sZVNldEJ5VXNlciAmJiAhdGFiLl9yb2xlU2V0QnlUYWIgPyB0YWIucm9sZSA6IG51bGw7XG5cbiAgICAgIGlmICh0YWIuYnV0dG9uKSB7XG4gICAgICAgIHRhYi5idXR0b24uX2lzSW5OYXZPck5lc3RlZCA9IHRydWU7XG4gICAgICAgIHRhYi5idXR0b24ucm9sZSA9IHRhYi5idXR0b24uX3JvbGVTZXRCeVVzZXIgJiYgIXRhYi5idXR0b24uX3JvbGVTZXRCeVRhYiA/IHRhYi5idXR0b24ucm9sZSA6IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxufVxuIl19